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 1tK0Up-006J1q-Vs for pgsql-hackers@arkaria.postgresql.org; Sat, 07 Dec 2024 19:29:44 +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 1tK0Un-00Gf62-HP for pgsql-hackers@arkaria.postgresql.org; Sat, 07 Dec 2024 19:29:42 +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 1tK0Um-00Gf5q-O1 for pgsql-hackers@lists.postgresql.org; Sat, 07 Dec 2024 19:29:42 +0000 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1tK0Ui-001Y4G-M1 for pgsql-hackers@lists.postgresql.org; Sat, 07 Dec 2024 19:29:40 +0000 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-215a7e487bfso26871135ad.2 for ; Sat, 07 Dec 2024 11:29:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=illuminatedcomputing-com.20230601.gappssmtp.com; s=20230601; t=1733599776; x=1734204576; darn=lists.postgresql.org; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=Z+3bHav5OaKAorboZw3wuTF4o7SbikS3+pxdnTp6fPI=; b=E7G6uTQ0lFrWzdSFaMBsZQJ9ZthABhGc+Q9IqBRC+n5YRp94HAuUxYwFM510jP0xB0 iIa3hY3BbuQ/xgfJuU5MYcC497HJxx42XihucZgh/OtaBFPZoaZbaxqmLnOlkyJQJMxU dXjCWAaXC8e/ql2IrzMOg09u5qicrY/Xxo1d5eQ8JpyvhlSyns2CcP1wyUZevqfxTAoD WLd6va9e3vqp2IYYTDiAAg+J1tjwlRz0Q7XCOPrVPKOI4uHTrx4RFDorj2Qe02j+9NeK BV7ijSLWBhl5qObcQcZMjcftDLcaiUvyXax95Paya8ufbUmP0/rwzYpnmUo/kFDwGLIW DUcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733599776; x=1734204576; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=Z+3bHav5OaKAorboZw3wuTF4o7SbikS3+pxdnTp6fPI=; b=kq3gEAzS5kmsBJo6GHpU+1IPr6zzSeoUB0dxhe0bpyO2RSorM3b3mmDyfOabt8+fk/ bGGrTMkDgdIHhujYrmOODBJdCqLHdnAZEKktkKKttpLoB1/v3QjT7b1HOjUgtKvEOdc2 mzRRIstmTRLjVeTgQ0sLMmgl8UpoBtPHa2hMJy5emooeJBQxEwFBKXSjb2H5OBqSxgDq oPPX2918Ad8rRoWDn0wtptHkslqKs9JdJH2hRe3G3c9Uh+4zdlplSY7HfJsXSmr8TZbA cPbl7Pqss/znQpPKt+h+V0VzOY8hZ9CMoiTBkP/IR7lCIklwuqBhaRayWdwWMFoRqyyQ f1Eg== X-Forwarded-Encrypted: i=1; AJvYcCWKobeyLq722bSgsmLDIzzQZ01qSfJHHNLJiTd0siyeZm6WJPaV8Q6pgFReZ21DTR7XdH7ivMcdyzPo1j63@lists.postgresql.org X-Gm-Message-State: AOJu0YzhFIjDnrp12bNyxsvxEHIcUw0lU9VaNHr9Us6c7N2OVrBRkZe6 5K1iYOp8+M3+NuZ8kXyKFBqfF3GisGKLsJwv+Zao/Ii2Q7TXxBZPGGZ/uk6H5Ad3UnKkvctQ0FN 5 X-Gm-Gg: ASbGncuCfhcFiLZvixvgHypVpoTliq+RVexkjBHIzXz38A0Iatb4XKhpm5jhrTitzH1 cYLL3tVeDIxzb6nukR+w9zxg0i/wyQNfC71G+hnFqUqJqPl9rGjn6ON/9O7PU4ZlUyzxyuHbOLX 3FQz1JZeH5Q0ueoA3SCswmAVjzr2+zYxHMXizE3sOvsB8dHSdi/D3BhlbPGUsDTinbBvYQjQBls 0uOvGepOuytuMVgBCrKUIrTc9gHuFTnzhZ9+xqtQcnHHTBV5B/SASkKtid0YAo= X-Google-Smtp-Source: AGHT+IFsatNVIddNQM9HgFxq4aXe14l76C7XdorFl400iqxoaZDVdMZdJ/Xuf7gwxqBWmpIJ+2yzHg== X-Received: by 2002:a17:902:f651:b0:216:30f9:93d4 with SMTP id d9443c01a7336-21630f995b5mr36399665ad.8.1733599775511; Sat, 07 Dec 2024 11:29:35 -0800 (PST) Received: from [192.168.2.139] ([50.39.255.79]) by smtp.googlemail.com with ESMTPSA id d9443c01a7336-21631118cedsm11951835ad.150.2024.12.07.11.29.34 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 07 Dec 2024 11:29:34 -0800 (PST) Content-Type: multipart/mixed; boundary="------------MTdPqxgc3LLXXWMcgd7pnXZX" Message-ID: Date: Sat, 7 Dec 2024 11:29:33 -0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: SQL:2011 application time To: Peter Eisentraut Cc: jian he , PostgreSQL Hackers , vignesh C References: <081aa43c-3a97-4bd5-a498-ba02e0a7570d@illuminatedcomputing.com> <54390149-11d6-4f52-bbe8-f69832ceb3bd@eisentraut.org> <9b7cb814-c78c-489f-85b2-32be4398647f@illuminatedcomputing.com> <95c6d49b-7d60-4ad0-820c-e00ae1b2a3d4@illuminatedcomputing.com> <57ea0668-5205-426e-b934-efc89f2186c2@illuminatedcomputing.com> <6dc196d4-8853-49d7-8dd3-e391058451c1@eisentraut.org> <66e47fc0-77b7-4763-9b70-5c0b7ff15f21@eisentraut.org> <333d3886-b737-45c3-93f4-594c96bb405d@eisentraut.org> Content-Language: en-US From: Paul Jungwirth In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------MTdPqxgc3LLXXWMcgd7pnXZX Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 12/4/24 03:15, Peter Eisentraut wrote: >> I have attached three patches that show how that could be done. (This would work in conjunction >> with your new tests. (Although now we could also test GiST with replica identity full?)) >> >> The comment block for IsIndexUsableForReplicaIdentityFull() makes a bunch of claims that are not >> all explicitly supported by the code. The code doesn't actually check the AM, this is all only >> done indirectly via other checks. The second point (about tuples_equal()) appears to be slightly >> wrong, because while you need an equals operator from the type cache, that shouldn't prevent you >> from also using a different index AM than btree or hash for the replica identity index. And the >> stuff about amgettuple, if that is important, why is it only checked for assert builds? > > I did some more work on this approach, with the attached patches resulting. This is essentially > what I'm describing above, which in turn is a variation of your patch v45-0001-Fix-logical- > replication-for-temporal-tables.patch, with your tests added at the end. > > I also did some more work on IsIndexUsableForReplicaIdentityFull() to make the various claims in the > comments reflected by actual code. With all of this, it can now also use gist indexes on the > subscriber side in cases of REPLICA IDENTITY FULL. This isn't immediately visible in the tests, but > you can see that the tests are using it internally by adding debugging elogs or something like that. > > Altogether, I think this fixes the original problem of temporal keys not being handled properly in > logical replication subscribers, and it makes things less hardcoded around btree and hash in general. > > Please review. These five patches all look good to me. Note that my tests already include a section for REPLICA IDENTITY FULL, which passed. But the subscriber was using a SeqScan to look up tuples to update. Here are the steps (mostly just because it was confusing for me at first): First in FindUsableIndexForReplicaIdentityFull, we would call IsIndexUsableForReplicaIdentityFull, get back false, and decide there was no index to use. Then in FindReplTupleInLocalRel, localidxoid was 0, so we woudln't call IsIndexUsableForReplicaIdentityFull at all. After applying the five patches, I can see that we choose the index and call IsIndexUsableForReplicaIdentityFull from both sites. This should make applying changes a lot faster. Here are those patches again, but incoporating Vignesh's feedback: On 12/5/24 01:39, vignesh C wrote: > 1) wait_for_catchup and data validation can be done after insertion > itself, update and delete error validation can happen later: > +($result, $stdout, $stderr) = $node_publisher->psql('postgres', > + "DELETE FROM temporal_no_key WHERE id = '[3,4)'"); > +is( $stderr, > + qq(psql::1: ERROR: cannot delete from table > "temporal_no_key" because it does not have a replica identity and > publishes deletes > +HINT: To enable deleting from the table, set REPLICA IDENTITY using > ALTER TABLE.), > + "can't DELETE temporal_no_key DEFAULT"); > + > +$node_publisher->wait_for_catchup('sub1'); > + > +$result = $node_subscriber->safe_psql('postgres', > + "SELECT * FROM temporal_no_key ORDER BY id, valid_at"); > +is( $result, qq{[1,2)|[2000-01-01,2010-01-01)|a > +[2,3)|[2000-01-01,2010-01-01)|a > +[3,4)|[2000-01-01,2010-01-01)|a > +[4,5)|[2000-01-01,2010-01-01)|a}, 'replicated temporal_no_key DEFAULT'); I'd like to keep the order of tests the same for all scenarios, and sometimes update+delete succeed and sometimes they fail. The data validation includes changes caused by the update+delete. Even when they fail, putting the data validation at the end shows that they had no effect. > 2) Copyright need not mention "2021-" > diff --git a/src/test/subscription/t/034_temporal.pl > b/src/test/subscription/t/034_temporal.pl > new file mode 100644 > index 00000000000..0f501f1cee8 > --- /dev/null > +++ b/src/test/subscription/t/034_temporal.pl > @@ -0,0 +1,673 @@ > + > +# Copyright (c) 2021-2024, PostgreSQL Global Development Group > + > +# Logical replication tests for temporal tables > +# Okay. > 3) This statement seems very long in a single line, could we split it > into multiple lines: > @@ -844,6 +842,15 @@ IsIndexUsableForReplicaIdentityFull(Relation > idxrel, AttrMap *attrmap) > > Assert(idxrel->rd_index->indnatts >= 1); > > + indclass = (oidvector *) > DatumGetPointer(SysCacheGetAttrNotNull(INDEXRELID, > idxrel->rd_indextuple, Anum_pg_index_indclass)); > + > + /* Ensure that the index has a valid equal strategy for each > key column */ > + for (int i = 0; i < idxrel->rd_index->indnkeyatts; i++) > + { > + if (get_equal_strategy_number(indclass->values[i]) == > InvalidStrategy) > + return false; > + } Reformatted. > 4) The commit message had a small typo, should "fulfull" be "fulfill": > IsIndexUsableForReplicaIdentityFull() described a number of conditions > that a suitable index has to fulfull. But not all of these were Fixed. > 5) temporal_no_key table is not dropped: > +$result = $node_subscriber->safe_psql('postgres', > + "SELECT * FROM temporal_unique ORDER BY id, valid_at"); > +is( $result, qq{[1,2)|[2000-01-01,2010-01-01)|a > +[2,3)|[2000-01-01,2010-01-01)|a > +[3,4)|[2000-01-01,2010-01-01)|a > +[4,5)|[2000-01-01,2010-01-01)|a}, 'replicated temporal_unique NOTHING'); > + > +# cleanup > + > +$node_publisher->safe_psql('postgres', "DROP TABLE temporal_pk"); > +$node_publisher->safe_psql('postgres', "DROP TABLE temporal_unique"); > +$node_publisher->safe_psql('postgres', "DROP PUBLICATION pub1"); > +$node_subscriber->safe_psql('postgres', "DROP TABLE temporal_pk"); > +$node_subscriber->safe_psql('postgres', "DROP TABLE temporal_unique"); > +$node_subscriber->safe_psql('postgres', "DROP SUBSCRIPTION sub1"); > + > + > +done_testing(); > -- > 2.47.1 Fixed as part of #7 below. > 6) Since this is common to first and last test we can have it in a > subroutine and use it for both: > +# create tables on publisher > + > +$node_publisher->safe_psql('postgres', > + "CREATE TABLE temporal_no_key (id int4range, valid_at > daterange, a text)" > +); > + > +$node_publisher->safe_psql('postgres', > + "CREATE TABLE temporal_pk (id int4range, valid_at daterange, a > text, PRIMARY KEY (id, valid_at WITHOUT OVERLAPS))" > +); > + > +$node_publisher->safe_psql('postgres', > + "CREATE TABLE temporal_unique (id int4range NOT NULL, valid_at > daterange NOT NULL, a text, UNIQUE (id, valid_at WITHOUT OVERLAPS))" > +); > + > +# create tables on subscriber > + > +$node_subscriber->safe_psql('postgres', > + "CREATE TABLE temporal_no_key (id int4range, valid_at > daterange, a text)" > +); > + > +$node_subscriber->safe_psql('postgres', > + "CREATE TABLE temporal_pk (id int4range, valid_at daterange, a > text, PRIMARY KEY (id, valid_at WITHOUT OVERLAPS))" > +); > + > +$node_subscriber->safe_psql('postgres', > + "CREATE TABLE temporal_unique (id int4range NOT NULL, valid_at > daterange NOT NULL, a text, UNIQUE (id, valid_at WITHOUT OVERLAPS))" > +); > + Done. > 7) Similarly the drop tables can be moved to a subroutine and used as > it is being used in multiple tests: > +# cleanup > + > +$node_publisher->safe_psql('postgres', "DROP TABLE temporal_no_key"); > +$node_publisher->safe_psql('postgres', "DROP TABLE temporal_pk"); > +$node_publisher->safe_psql('postgres', "DROP TABLE temporal_unique"); > +$node_publisher->safe_psql('postgres', "DROP PUBLICATION pub1"); > +$node_subscriber->safe_psql('postgres', "DROP TABLE temporal_no_key"); > +$node_subscriber->safe_psql('postgres', "DROP TABLE temporal_pk"); > +$node_subscriber->safe_psql('postgres', "DROP TABLE temporal_unique"); > +$node_subscriber->safe_psql('postgres', "DROP SUBSCRIPTION sub1"); Done. Thanks! Rebased to 3220ceaf77. Yours, -- Paul ~{:-) pj@illuminatedcomputing.com --------------MTdPqxgc3LLXXWMcgd7pnXZX Content-Type: text/plain; charset=UTF-8; name="v45.3-0001-Improve-internal-logical-replication-e.patch.nocfbot" Content-Disposition: attachment; filename*0="v45.3-0001-Improve-internal-logical-replication-e.patch.nocf"; filename*1="bot" Content-Transfer-Encoding: base64 RnJvbSBiZDk1N2IzNjhmNzExNzg4ZTk1MzA3MmU0NjE4NTdjMjI0YTljMWUwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogV2VkLCA0IERlYyAyMDI0IDEyOjA2OjI0ICswMTAwClN1YmplY3Q6 IFtQQVRDSCB2NDUuMyAxLzVdIEltcHJvdmUgaW50ZXJuYWwgbG9naWNhbCByZXBsaWNhdGlv biBlcnJvciBmb3IKIG1pc3NpbmcgZXF1YWxpdHkgc3RyYXRlZ3kKClRoaXMgInNob3VsZG4n dCBoYXBwZW4iLCBleGNlcHQgcmlnaHQgbm93IGl0IGNhbiB3aXRoIGEgdGVtcG9yYWwgZ2lz dAppbmRleCAodG8gYmUgZml4ZWQgc29vbiksIGJlY2F1c2Ugb2YgbWlzc2luZyBnaXN0IHN1 cHBvcnQgaW4KZ2V0X2VxdWFsX3N0cmF0ZWd5X251bWJlcigpLiAgQnV0IHJpZ2h0IG5vdywg dGhlIGVycm9yIGlzIG5vdCBjYXVnaHQKcmlnaHQgYXdheSwgYnV0IGluc3RlYWQgeW91IGdl dCB0aGUgc3Vic2VxdWVudCBlcnJvciBhYm91dCBhICJtaXNzaW5nCm9wZXJhdG9yIDAiLiAg VGhpcyBtYWtlcyB0aGUgZXJyb3IgbW9yZSBhY2N1cmF0ZS4KCkRpc2N1c3Npb246IGh0dHBz Oi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvZmxhdC9DQStyZW55VUFwSGdTWkY5 LW5kLWEwK09QR2hhckxRTE89bURIY1k0X3FRMCtub0NVVmdAbWFpbC5nbWFpbC5jb20KLS0t CiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYyB8IDIgKysKIDEgZmls ZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjUmVwbGljYXRpb24uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNS ZXBsaWNhdGlvbi5jCmluZGV4IGNmZGYyZWVkZjRkLi4yY2E4YzVjNTBiZSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKKysrIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKQEAgLTEzNCw2ICsxMzQsOCBAQCBi dWlsZF9yZXBsaW5kZXhfc2Nhbl9rZXkoU2NhbktleSBza2V5LCBSZWxhdGlvbiByZWwsIFJl bGF0aW9uIGlkeHJlbCwKIAkJb3B0eXBlID0gZ2V0X29wY2xhc3NfaW5wdXRfdHlwZShvcGNs YXNzLT52YWx1ZXNbaW5kZXhfYXR0b2ZmXSk7CiAJCW9wZmFtaWx5ID0gZ2V0X29wY2xhc3Nf ZmFtaWx5KG9wY2xhc3MtPnZhbHVlc1tpbmRleF9hdHRvZmZdKTsKIAkJZXFfc3RyYXRlZ3kg PSBnZXRfZXF1YWxfc3RyYXRlZ3lfbnVtYmVyKG9wY2xhc3MtPnZhbHVlc1tpbmRleF9hdHRv ZmZdKTsKKwkJaWYgKCFlcV9zdHJhdGVneSkKKwkJCWVsb2coRVJST1IsICJtaXNzaW5nIGVx dWFsIHN0cmF0ZWd5IGZvciBvcGNsYXNzICV1Iiwgb3BjbGFzcy0+dmFsdWVzW2luZGV4X2F0 dG9mZl0pOwogCiAJCW9wZXJhdG9yID0gZ2V0X29wZmFtaWx5X21lbWJlcihvcGZhbWlseSwg b3B0eXBlLAogCQkJCQkJCQkJICAgb3B0eXBlLAotLSAKMi40Mi4wCgo= --------------MTdPqxgc3LLXXWMcgd7pnXZX Content-Type: text/plain; charset=UTF-8; name="v45.3-0002-Replace-get_equal_strategy_number_for_.patch.nocfbot" Content-Disposition: attachment; filename*0="v45.3-0002-Replace-get_equal_strategy_number_for_.patch.nocf"; filename*1="bot" Content-Transfer-Encoding: base64 RnJvbSA3YmVlMjRmMWJiZjIxMGUyNmVhZTBiNmI3OTkxNzZiNzkyM2M3OTVmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogV2VkLCA0IERlYyAyMDI0IDEyOjA2OjI0ICswMTAwClN1YmplY3Q6 IFtQQVRDSCB2NDUuMyAyLzVdIFJlcGxhY2UgZ2V0X2VxdWFsX3N0cmF0ZWd5X251bWJlcl9m b3JfYW0oKSBieQogZ2V0X2VxdWFsX3N0cmF0ZWd5X251bWJlcigpCgpnZXRfZXF1YWxfc3Ry YXRlZ3lfbnVtYmVyX2Zvcl9hbSgpIGdldHMgdGhlIGVxdWFsIHN0cmF0ZWd5IG51bWJlciBm b3IKYW4gQU0uICBUaGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIGJ0cmVlIGFuZCBoYXNo LiAgSW4gdGhlIG1vcmUKZ2VuZXJhbCBjYXNlLCB0aGlzIGFsc28gZGVwZW5kcyBvbiB0aGUg b3BlcmF0b3IgY2xhc3MgKHNlZSBmb3IgZXhhbXBsZQpHaXN0VHJhbnNsYXRlU3RyYXRudW0o KSkuICBUbyBzdXBwb3J0IHRoYXQsIHJlcGxhY2UgdGhpcyBmdW5jdGlvbiB3aXRoCmdldF9l cXVhbF9zdHJhdGVneV9udW1iZXIoKSB0aGF0IHRha2VzIGFuIG9wY2xhc3MgYW5kIGRlcml2 ZXMgaXQgZnJvbQp0aGVyZS4gIChUaGlzIGZ1bmN0aW9uIGFscmVhZHkgZXhpc3RlZCBiZWZv cmUgYXMgYSBzdGF0aWMgZnVuY3Rpb24sIHNvCnRoZSBzaWduYXR1cmUgaXMga2VwdCBmb3Ig c2ltcGxpY2l0eS4pCgpUaGlzIHBhdGNoIGlzIG9ubHkgYSByZWZhY3RvcmluZywgaXQgZG9l c24ndCBhZGQgc3VwcG9ydCBmb3Igb3RoZXIKaW5kZXggQU1zIHN1Y2ggYXMgZ2lzdC4gIFRo aXMgd2lsbCBiZSBkb25lIHNlcGFyYXRlbHkuCgpEaXNjdXNzaW9uOiBodHRwczovL3d3dy5w b3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL2ZsYXQvQ0ErcmVueVVBcEhnU1pGOS1uZC1hMCtP UEdoYXJMUUxPPW1ESGNZNF9xUTArbm9DVVZnQG1haWwuZ21haWwuY29tCi0tLQogc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMgICAgIHwgMTcgKysrLS0tLS0tLS0t LS0tLS0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYyB8IDE5 ICsrKysrKysrKysrKysrLS0tLS0KIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgg ICAgICAgICAgICB8ICAyICstCiAzIGZpbGVzIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKyks IDIwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNSZXBsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9u LmMKaW5kZXggMmNhOGM1YzUwYmUuLjJiNDJjMGFlNTI0IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjUmVwbGljYXRpb24uYwpAQCAtMzksNyArMzksNyBAQCBzdGF0aWMgYm9vbCB0 dXBsZXNfZXF1YWwoVHVwbGVUYWJsZVNsb3QgKnNsb3QxLCBUdXBsZVRhYmxlU2xvdCAqc2xv dDIsCiAKIC8qCiAgKiBSZXR1cm5zIHRoZSBmaXhlZCBzdHJhdGVneSBudW1iZXIsIGlmIGFu eSwgb2YgdGhlIGVxdWFsaXR5IG9wZXJhdG9yIGZvciB0aGUKLSAqIGdpdmVuIGluZGV4IGFj Y2VzcyBtZXRob2QsIG90aGVyd2lzZSwgSW52YWxpZFN0cmF0ZWd5LgorICogZ2l2ZW4gb3Bl cmF0b3IgY2xhc3MsIG90aGVyd2lzZSwgSW52YWxpZFN0cmF0ZWd5LgogICoKICAqIEN1cnJl bnRseSwgb25seSBCdHJlZSBhbmQgSGFzaCBpbmRleGVzIGFyZSBzdXBwb3J0ZWQuIFRoZSBv dGhlciBpbmRleCBhY2Nlc3MKICAqIG1ldGhvZHMgZG9uJ3QgaGF2ZSBhIGZpeGVkIHN0cmF0 ZWd5IGZvciBlcXVhbGl0eSBvcGVyYXRpb24gLSBpbnN0ZWFkLCB0aGUKQEAgLTQ3LDggKzQ3 LDkgQEAgc3RhdGljIGJvb2wgdHVwbGVzX2VxdWFsKFR1cGxlVGFibGVTbG90ICpzbG90MSwg VHVwbGVUYWJsZVNsb3QgKnNsb3QyLAogICogYWNjb3JkaW5nIHRvIHRoZSBvcGVyYXRvciBj bGFzcydzIGRlZmluaXRpb24uCiAgKi8KIFN0cmF0ZWd5TnVtYmVyCi1nZXRfZXF1YWxfc3Ry YXRlZ3lfbnVtYmVyX2Zvcl9hbShPaWQgYW0pCitnZXRfZXF1YWxfc3RyYXRlZ3lfbnVtYmVy KE9pZCBvcGNsYXNzKQogeworCU9pZAkJCWFtID0gZ2V0X29wY2xhc3NfbWV0aG9kKG9wY2xh c3MpOwogCWludAkJCXJldDsKIAogCXN3aXRjaCAoYW0pCkBAIC02OCwxOCArNjksNiBAQCBn ZXRfZXF1YWxfc3RyYXRlZ3lfbnVtYmVyX2Zvcl9hbShPaWQgYW0pCiAJcmV0dXJuIHJldDsK IH0KIAotLyoKLSAqIFJldHVybiB0aGUgYXBwcm9wcmlhdGUgc3RyYXRlZ3kgbnVtYmVyIHdo aWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBlcXVhbGl0eQotICogb3BlcmF0b3IuCi0gKi8KLXN0 YXRpYyBTdHJhdGVneU51bWJlcgotZ2V0X2VxdWFsX3N0cmF0ZWd5X251bWJlcihPaWQgb3Bj bGFzcykKLXsKLQlPaWQJCQlhbSA9IGdldF9vcGNsYXNzX21ldGhvZChvcGNsYXNzKTsKLQot CXJldHVybiBnZXRfZXF1YWxfc3RyYXRlZ3lfbnVtYmVyX2Zvcl9hbShhbSk7Ci19Ci0KIC8q CiAgKiBTZXR1cCBhIFNjYW5LZXkgZm9yIGEgc2VhcmNoIGluIHRoZSByZWxhdGlvbiAncmVs JyBmb3IgYSB0dXBsZSAna2V5JyB0aGF0CiAgKiBpcyBzZXR1cCB0byBtYXRjaCAncmVsJyAo Kk5PVCogaWR4cmVsISkuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL3JlbGF0aW9uLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jl bGF0aW9uLmMKaW5kZXggNzFhMWI3ZTAxZWIuLmMzNzk5YTYxODVlIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMKKysrIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jCkBAIC0yOSw2ICsyOSw3IEBA CiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbHJlbGF0aW9uLmgiCiAjaW5jbHVkZSAi cmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvaW52YWwu aCIKKyNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgogCiAKIHN0YXRpYyBNZW1vcnlDb250 ZXh0IExvZ2ljYWxSZXBSZWxNYXBDb250ZXh0ID0gTlVMTDsKQEAgLTgxNSw3ICs4MTYsNyBA QCBGaW5kVXNhYmxlSW5kZXhGb3JSZXBsaWNhSWRlbnRpdHlGdWxsKFJlbGF0aW9uIGxvY2Fs cmVsLCBBdHRyTWFwICphdHRybWFwKQogICogVGhlIHJlYXNvbnMgd2h5IG9ubHkgQnRyZWUg YW5kIEhhc2ggaW5kZXhlcyBjYW4gYmUgY29uc2lkZXJlZCBhcyB1c2FibGUgYXJlOgogICoK ICAqIDEpIE90aGVyIGluZGV4IGFjY2VzcyBtZXRob2RzIGRvbid0IGhhdmUgYSBmaXhlZCBz dHJhdGVneSBmb3IgZXF1YWxpdHkKLSAqIG9wZXJhdGlvbi4gUmVmZXIgZ2V0X2VxdWFsX3N0 cmF0ZWd5X251bWJlcl9mb3JfYW0oKS4KKyAqIG9wZXJhdGlvbi4gUmVmZXIgZ2V0X2VxdWFs X3N0cmF0ZWd5X251bWJlcigpLgogICoKICAqIDIpIEZvciBpbmRleGVzIG90aGVyIHRoYW4g UEsgYW5kIFJFUExJQ0EgSURFTlRJVFksIHdlIG5lZWQgdG8gbWF0Y2ggdGhlCiAgKiBsb2Nh bCBhbmQgcmVtb3RlIHR1cGxlcy4gVGhlIGVxdWFsaXR5IHJvdXRpbmUgdHVwbGVzX2VxdWFs KCkgY2Fubm90IGFjY2VwdApAQCAtODMzLDEwICs4MzQsNyBAQCBib29sCiBJc0luZGV4VXNh YmxlRm9yUmVwbGljYUlkZW50aXR5RnVsbChSZWxhdGlvbiBpZHhyZWwsIEF0dHJNYXAgKmF0 dHJtYXApCiB7CiAJQXR0ck51bWJlcglrZXljb2w7Ci0KLQkvKiBFbnN1cmUgdGhhdCB0aGUg aW5kZXggYWNjZXNzIG1ldGhvZCBoYXMgYSB2YWxpZCBlcXVhbCBzdHJhdGVneSAqLwotCWlm IChnZXRfZXF1YWxfc3RyYXRlZ3lfbnVtYmVyX2Zvcl9hbShpZHhyZWwtPnJkX3JlbC0+cmVs YW0pID09IEludmFsaWRTdHJhdGVneSkKLQkJcmV0dXJuIGZhbHNlOworCW9pZHZlY3RvciAg KmluZGNsYXNzOwogCiAJLyogVGhlIGluZGV4IG11c3Qgbm90IGJlIGEgcGFydGlhbCBpbmRl eCAqLwogCWlmICghaGVhcF9hdHRpc251bGwoaWR4cmVsLT5yZF9pbmRleHR1cGxlLCBBbnVt X3BnX2luZGV4X2luZHByZWQsIE5VTEwpKQpAQCAtODQ0LDYgKzg0MiwxNyBAQCBJc0luZGV4 VXNhYmxlRm9yUmVwbGljYUlkZW50aXR5RnVsbChSZWxhdGlvbiBpZHhyZWwsIEF0dHJNYXAg KmF0dHJtYXApCiAKIAlBc3NlcnQoaWR4cmVsLT5yZF9pbmRleC0+aW5kbmF0dHMgPj0gMSk7 CiAKKwlpbmRjbGFzcyA9IChvaWR2ZWN0b3IgKikgRGF0dW1HZXRQb2ludGVyKFN5c0NhY2hl R2V0QXR0ck5vdE51bGwoSU5ERVhSRUxJRCwKKwkJCQkJCQkJCQkJCQkJCQkJaWR4cmVsLT5y ZF9pbmRleHR1cGxlLAorCQkJCQkJCQkJCQkJCQkJCQlBbnVtX3BnX2luZGV4X2luZGNsYXNz KSk7CisKKwkvKiBFbnN1cmUgdGhhdCB0aGUgaW5kZXggaGFzIGEgdmFsaWQgZXF1YWwgc3Ry YXRlZ3kgZm9yIGVhY2gga2V5IGNvbHVtbiAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgaWR4 cmVsLT5yZF9pbmRleC0+aW5kbmtleWF0dHM7IGkrKykKKwl7CisJCWlmIChnZXRfZXF1YWxf c3RyYXRlZ3lfbnVtYmVyKGluZGNsYXNzLT52YWx1ZXNbaV0pID09IEludmFsaWRTdHJhdGVn eSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKIAkvKiBUaGUgbGVmdG1vc3QgaW5kZXggZmll bGQgbXVzdCBub3QgYmUgYW4gZXhwcmVzc2lvbiAqLwogCWtleWNvbCA9IGlkeHJlbC0+cmRf aW5kZXgtPmluZGtleS52YWx1ZXNbMF07CiAJaWYgKCFBdHRyaWJ1dGVOdW1iZXJJc1ZhbGlk KGtleWNvbCkpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5o IGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAppbmRleCA2OWMzZWJmZjAwYS4u ZTk0OWNjZTdkOTggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9y LmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaApAQCAtNjU4LDcgKzY1 OCw3IEBAIGV4dGVybiB2b2lkIGNoZWNrX2V4Y2x1c2lvbl9jb25zdHJhaW50KFJlbGF0aW9u IGhlYXAsIFJlbGF0aW9uIGluZGV4LAogLyoKICAqIHByb3RvdHlwZXMgZnJvbSBmdW5jdGlv bnMgaW4gZXhlY1JlcGxpY2F0aW9uLmMKICAqLwotZXh0ZXJuIFN0cmF0ZWd5TnVtYmVyIGdl dF9lcXVhbF9zdHJhdGVneV9udW1iZXJfZm9yX2FtKE9pZCBhbSk7CitleHRlcm4gU3RyYXRl Z3lOdW1iZXIgZ2V0X2VxdWFsX3N0cmF0ZWd5X251bWJlcihPaWQgb3BjbGFzcyk7CiBleHRl cm4gYm9vbCBSZWxhdGlvbkZpbmRSZXBsVHVwbGVCeUluZGV4KFJlbGF0aW9uIHJlbCwgT2lk IGlkeG9pZCwKIAkJCQkJCQkJCQkgTG9ja1R1cGxlTW9kZSBsb2NrbW9kZSwKIAkJCQkJCQkJ CQkgVHVwbGVUYWJsZVNsb3QgKnNlYXJjaHNsb3QsCi0tIAoyLjQyLjAKCg== --------------MTdPqxgc3LLXXWMcgd7pnXZX Content-Type: text/plain; charset=UTF-8; name="v45.3-0003-Make-the-conditions-in-IsIndexUsableFo.patch.nocfbot" Content-Disposition: attachment; filename*0="v45.3-0003-Make-the-conditions-in-IsIndexUsableFo.patch.nocf"; filename*1="bot" Content-Transfer-Encoding: base64 RnJvbSBjOTU3Mjg4Zjk3OGFlYzU5ZThiZDRlYmM2YjM1MDM5NTIwZjgxOGIyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogV2VkLCA0IERlYyAyMDI0IDEyOjA2OjI0ICswMTAwClN1YmplY3Q6 IFtQQVRDSCB2NDUuMyAzLzVdIE1ha2UgdGhlIGNvbmRpdGlvbnMgaW4KIElzSW5kZXhVc2Fi bGVGb3JSZXBsaWNhSWRlbnRpdHlGdWxsKCkgbW9yZSBleHBsaWNpdAoKSXNJbmRleFVzYWJs ZUZvclJlcGxpY2FJZGVudGl0eUZ1bGwoKSBkZXNjcmliZWQgYSBudW1iZXIgb2YgY29uZGl0 aW9ucwp0aGF0IGEgc3VpdGFibGUgaW5kZXggaGFzIHRvIGZ1bGZpbGwuICBCdXQgbm90IGFs bCBvZiB0aGVzZSB3ZXJlCmFjdHVhbGx5IGNoZWNrZWQgaW4gdGhlIGNvZGUuICBJbnN0ZWFk LCBpdCBhcHBlYXJlZCB0byByZWx5IG9uCmdldF9lcXVhbF9zdHJhdGVneV9udW1iZXIoKSB0 byBmaWx0ZXIgb3V0IGFueSBpbmRleGVzIHRoYXQgYXJlIG5vdApidHJlZSBvciBoYXNoLiAg QXMgd2UgbG9vayB0byBnZW5lcmFsaXplIGluZGV4IEFNIGNhcGFiaWxpdGllcywgdGhpcwp3 b3VsZCBwb3NzaWJseSBicmVhayBpZiB3ZSBhZGRlZCBhZGRpdGlvbmFsIHN1cHBvcnQgaW4K Z2V0X2VxdWFsX3N0cmF0ZWd5X251bWJlcigpLiAgSW5zdGVhZCwgd3JpdGUgb3V0IGNvZGUg dG8gY2hlY2sgZm9yIHRoZQpyZXF1aXJlZCBjYXBhYmlsaXRpZXMgZXhwbGljaXRseS4gIFRo aXMgc2hvdWxkbid0IGNoYW5nZSBhbnkgYmVoYXZpb3JzCmF0IHRoZSBtb21lbnQuCgpEaXNj dXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL2ZsYXQvQ0Er cmVueVVBcEhnU1pGOS1uZC1hMCtPUEdoYXJMUUxPPW1ESGNZNF9xUTArbm9DVVZnQG1haWwu Z21haWwuY29tCi0tLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlv bi5jIHwgNTIgKysrKysrKysrKystLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDI1IGlu c2VydGlvbnMoKyksIDI3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvcmVsYXRpb24uYwppbmRleCBjMzc5OWE2MTg1ZS4uZGQ4YTM4MDkwOTYg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24u YworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMKQEAg LTE3LDkgKzE3LDcgQEAKIAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKLSNpZmRlZiBVU0Vf QVNTRVJUX0NIRUNLSU5HCiAjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCi0jZW5kaWYKICNp bmNsdWRlICJhY2Nlc3MvZ2VuYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKICNp bmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5oIgpAQCAtNzk4LDkgKzc5NiwxMCBAQCBGaW5k VXNhYmxlSW5kZXhGb3JSZXBsaWNhSWRlbnRpdHlGdWxsKFJlbGF0aW9uIGxvY2FscmVsLCBB dHRyTWFwICphdHRybWFwKQogLyoKICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgaW5kZXggaXMg dXNhYmxlIGZvciByZXBsaWNhIGlkZW50aXR5IGZ1bGwuCiAgKgotICogVGhlIGluZGV4IG11 c3QgYmUgYnRyZWUgb3IgaGFzaCwgbm9uLXBhcnRpYWwsIGFuZCB0aGUgbGVmdG1vc3QgZmll bGQgbXVzdCBiZQotICogYSBjb2x1bW4gKG5vdCBhbiBleHByZXNzaW9uKSB0aGF0IHJlZmVy ZW5jZXMgdGhlIHJlbW90ZSByZWxhdGlvbiBjb2x1bW4uIFRoZXNlCi0gKiBsaW1pdGF0aW9u cyBoZWxwIHRvIGtlZXAgdGhlIGluZGV4IHNjYW4gc2ltaWxhciB0byBQSy9SSSBpbmRleCBz Y2Fucy4KKyAqIFRoZSBpbmRleCBtdXN0IGhhdmUgYW4gZXF1YWwgc3RyYXRlZ3kgZm9yIGVh Y2gga2V5IGNvbHVtbiwgYmUgbm9uLXBhcnRpYWwsCisgKiBhbmQgdGhlIGxlZnRtb3N0IGZp ZWxkIG11c3QgYmUgYSBjb2x1bW4gKG5vdCBhbiBleHByZXNzaW9uKSB0aGF0IHJlZmVyZW5j ZXMKKyAqIHRoZSByZW1vdGUgcmVsYXRpb24gY29sdW1uLiBUaGVzZSBsaW1pdGF0aW9ucyBo ZWxwIHRvIGtlZXAgdGhlIGluZGV4IHNjYW4KKyAqIHNpbWlsYXIgdG8gUEsvUkkgaW5kZXgg c2NhbnMuCiAgKgogICogYXR0cm1hcCBpcyBhIG1hcCBvZiBsb2NhbCBhdHRyaWJ1dGVzIHRv IHJlbW90ZSBvbmVzLiBXZSBjYW4gY29uc3VsdCB0aGlzCiAgKiBtYXAgdG8gY2hlY2sgd2hl dGhlciB0aGUgbG9jYWwgaW5kZXggYXR0cmlidXRlIGhhcyBhIGNvcnJlc3BvbmRpbmcgcmVt b3RlCkBAIC04MTMsMTkgKzgxMiw2IEBAIEZpbmRVc2FibGVJbmRleEZvclJlcGxpY2FJZGVu dGl0eUZ1bGwoUmVsYXRpb24gbG9jYWxyZWwsIEF0dHJNYXAgKmF0dHJtYXApCiAgKiBjb21w YXJlIHRoZSB0dXBsZXMgZm9yIG5vbi1QSy9SSSBpbmRleCBzY2Fucy4gU2VlCiAgKiBSZWxh dGlvbkZpbmRSZXBsVHVwbGVCeUluZGV4KCkuCiAgKgotICogVGhlIHJlYXNvbnMgd2h5IG9u bHkgQnRyZWUgYW5kIEhhc2ggaW5kZXhlcyBjYW4gYmUgY29uc2lkZXJlZCBhcyB1c2FibGUg YXJlOgotICoKLSAqIDEpIE90aGVyIGluZGV4IGFjY2VzcyBtZXRob2RzIGRvbid0IGhhdmUg YSBmaXhlZCBzdHJhdGVneSBmb3IgZXF1YWxpdHkKLSAqIG9wZXJhdGlvbi4gUmVmZXIgZ2V0 X2VxdWFsX3N0cmF0ZWd5X251bWJlcigpLgotICoKLSAqIDIpIEZvciBpbmRleGVzIG90aGVy IHRoYW4gUEsgYW5kIFJFUExJQ0EgSURFTlRJVFksIHdlIG5lZWQgdG8gbWF0Y2ggdGhlCi0g KiBsb2NhbCBhbmQgcmVtb3RlIHR1cGxlcy4gVGhlIGVxdWFsaXR5IHJvdXRpbmUgdHVwbGVz X2VxdWFsKCkgY2Fubm90IGFjY2VwdAotICogYSBkYXRhdHlwZSAoZS5nLiBwb2ludCBvciBi b3gpIHRoYXQgZG9lcyBub3QgaGF2ZSBhIGRlZmF1bHQgb3BlcmF0b3IgY2xhc3MKLSAqIGZv ciBCdHJlZSBvciBIYXNoLgotICoKLSAqIFhYWDogTm90ZSB0aGF0IEJSSU4gYW5kIEdJTiBp bmRleGVzIGRvIG5vdCBpbXBsZW1lbnQgImFtZ2V0dHVwbGUiIHdoaWNoCi0gKiB3aWxsIGJl IHVzZWQgbGF0ZXIgdG8gZmV0Y2ggdGhlIHR1cGxlcy4gU2VlIFJlbGF0aW9uRmluZFJlcGxU dXBsZUJ5SW5kZXgoKS4KLSAqCiAgKiBYWFg6IFRvIHN1cHBvcnQgcGFydGlhbCBpbmRleGVz LCB0aGUgcmVxdWlyZWQgY2hhbmdlcyBhcmUgbGlrZWx5IHRvIGJlIGxhcmdlci4KICAqIElm IG5vbmUgb2YgdGhlIHR1cGxlcyBzYXRpc2Z5IHRoZSBleHByZXNzaW9uIGZvciB0aGUgaW5k ZXggc2Nhbiwgd2UgZmFsbC1iYWNrCiAgKiB0byBzZXF1ZW50aWFsIGV4ZWN1dGlvbiwgd2hp Y2ggbWlnaHQgbm90IGJlIGEgZ29vZCBpZGVhIGluIHNvbWUgY2FzZXMuCkBAIC04NTMsNiAr ODM5LDIxIEBAIElzSW5kZXhVc2FibGVGb3JSZXBsaWNhSWRlbnRpdHlGdWxsKFJlbGF0aW9u IGlkeHJlbCwgQXR0ck1hcCAqYXR0cm1hcCkKIAkJCXJldHVybiBmYWxzZTsKIAl9CiAKKwkv KgorCSAqIEZvciBpbmRleGVzIG90aGVyIHRoYW4gUEsgYW5kIFJFUExJQ0EgSURFTlRJVFks IHdlIG5lZWQgdG8gbWF0Y2ggdGhlCisJICogbG9jYWwgYW5kIHJlbW90ZSB0dXBsZXMuICBU aGUgZXF1YWxpdHkgcm91dGluZSB0dXBsZXNfZXF1YWwoKSBjYW5ub3QKKwkgKiBhY2NlcHQg YSBkYXRhIHR5cGUgd2hlcmUgdGhlIHR5cGUgY2FjaGUgY2Fubm90IHByb3ZpZGUgYW4gZXF1 YWxpdHkKKwkgKiBvcGVyYXRvci4KKwkgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IGlkeHJl bC0+cmRfYXR0LT5uYXR0czsgaSsrKQorCXsKKwkJVHlwZUNhY2hlRW50cnkgKnR5cGVudHJ5 OworCisJCXR5cGVudHJ5ID0gbG9va3VwX3R5cGVfY2FjaGUoVHVwbGVEZXNjQXR0cihpZHhy ZWwtPnJkX2F0dCwgaSktPmF0dHR5cGlkLCBUWVBFQ0FDSEVfRVFfT1BSX0ZJTkZPKTsKKwkJ aWYgKCFPaWRJc1ZhbGlkKHR5cGVudHJ5LT5lcV9vcHJfZmluZm8uZm5fb2lkKSkKKwkJCXJl dHVybiBmYWxzZTsKKwl9CisKIAkvKiBUaGUgbGVmdG1vc3QgaW5kZXggZmllbGQgbXVzdCBu b3QgYmUgYW4gZXhwcmVzc2lvbiAqLwogCWtleWNvbCA9IGlkeHJlbC0+cmRfaW5kZXgtPmlu ZGtleS52YWx1ZXNbMF07CiAJaWYgKCFBdHRyaWJ1dGVOdW1iZXJJc1ZhbGlkKGtleWNvbCkp CkBAIC04NjcsMTUgKzg2OCwxMiBAQCBJc0luZGV4VXNhYmxlRm9yUmVwbGljYUlkZW50aXR5 RnVsbChSZWxhdGlvbiBpZHhyZWwsIEF0dHJNYXAgKmF0dHJtYXApCiAJCWF0dHJtYXAtPmF0 dG51bXNbQXR0ck51bWJlckdldEF0dHJPZmZzZXQoa2V5Y29sKV0gPCAwKQogCQlyZXR1cm4g ZmFsc2U7CiAKLSNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCi0JewotCQlJbmRleEFtUm91 dGluZSAqYW1yb3V0aW5lOwotCi0JCS8qIFRoZSBnaXZlbiBpbmRleCBhY2Nlc3MgbWV0aG9k IG11c3QgaW1wbGVtZW50IGFtZ2V0dHVwbGUuICovCi0JCWFtcm91dGluZSA9IEdldEluZGV4 QW1Sb3V0aW5lQnlBbUlkKGlkeHJlbC0+cmRfcmVsLT5yZWxhbSwgZmFsc2UpOwotCQlBc3Nl cnQoYW1yb3V0aW5lLT5hbWdldHR1cGxlICE9IE5VTEwpOwotCX0KLSNlbmRpZgorCS8qCisJ ICogVGhlIGdpdmVuIGluZGV4IGFjY2VzcyBtZXRob2QgbXVzdCBpbXBsZW1lbnQgImFtZ2V0 dHVwbGUiLCB3aGljaCB3aWxsCisJICogYmUgdXNlZCBsYXRlciB0byBmZXRjaCB0aGUgdHVw bGVzLiAgU2VlIFJlbGF0aW9uRmluZFJlcGxUdXBsZUJ5SW5kZXgoKS4KKwkgKi8KKwlpZiAo R2V0SW5kZXhBbVJvdXRpbmVCeUFtSWQoaWR4cmVsLT5yZF9yZWwtPnJlbGFtLCBmYWxzZSkt PmFtZ2V0dHVwbGUgPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOwogCiAJcmV0dXJuIHRydWU7 CiB9Ci0tIAoyLjQyLjAKCg== --------------MTdPqxgc3LLXXWMcgd7pnXZX Content-Type: text/plain; charset=UTF-8; name="v45.3-0004-Support-for-GiST-in-get_equal_strategy.patch.nocfbot" Content-Disposition: attachment; filename*0="v45.3-0004-Support-for-GiST-in-get_equal_strategy.patch.nocf"; filename*1="bot" Content-Transfer-Encoding: base64 RnJvbSAyYTMwMmY1MTFhOWIwMTNhZWYyOTBiMWE2NDFlYzZjY2M0MDc1MDgwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogV2VkLCA0IERlYyAyMDI0IDEyOjA2OjI0ICswMTAwClN1YmplY3Q6 IFtQQVRDSCB2NDUuMyA0LzVdIFN1cHBvcnQgZm9yIEdpU1QgaW4gZ2V0X2VxdWFsX3N0cmF0 ZWd5X251bWJlcigpCgpBIFdJVEhPVVQgT1ZFUkxBUFMgcHJpbWFyeSBrZXkgb3IgdW5pcXVl IGNvbnN0cmFpbnQgaXMgYWNjZXB0ZWQgYXMgYQpSRVBMSUNBIElERU5USVRZLCBzaW5jZSBp dCBndWFyYW50ZWVzIHVuaXF1ZW5lc3MuICBCdXQgc3Vic2NyaWJlcnMKYXBwbHlpbmcgbG9n aWNhbCBkZWNvZGluZyBtZXNzYWdlcyB3b3VsZCBmYWlsIGJlY2F1c2UgdGhlcmUgd2FzIG5v dApzdXBwb3J0IGZvciBsb29raW5nIHVwIHRoZSBlcXVhbHMgb3BlcmF0b3IgZm9yIGEgZ2lz dCBpbmRleC4gIFRoaXMKZml4ZXMgdGhhdDogRm9yIEdpU1QgaW5kZXhlcyB3ZSBjYW4gdXNl IHRoZSBzdHJhdG51bSBHaVNUIHN1cHBvcnQKZnVuY3Rpb24uCgpEaXNjdXNzaW9uOiBodHRw czovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL2ZsYXQvQ0ErcmVueVVBcEhnU1pG OS1uZC1hMCtPUEdoYXJMUUxPPW1ESGNZNF9xUTArbm9DVVZnQG1haWwuZ21haWwuY29tCi0t LQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMgfCAxMCArKysrLS0t LS0tCiAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKaW5kZXggMmI0MmMwYWU1 MjQuLmZkZGJmYWJhN2FiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj UmVwbGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRp b24uYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKICNpbmNs dWRlICJhY2Nlc3MvZ2VuYW0uaCIKKyNpbmNsdWRlICJhY2Nlc3MvZ2lzdC5oIgogI2luY2x1 ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKICNp bmNsdWRlICJhY2Nlc3MvdHJhbnNhbS5oIgpAQCAtNDAsMTEgKzQxLDYgQEAgc3RhdGljIGJv b2wgdHVwbGVzX2VxdWFsKFR1cGxlVGFibGVTbG90ICpzbG90MSwgVHVwbGVUYWJsZVNsb3Qg KnNsb3QyLAogLyoKICAqIFJldHVybnMgdGhlIGZpeGVkIHN0cmF0ZWd5IG51bWJlciwgaWYg YW55LCBvZiB0aGUgZXF1YWxpdHkgb3BlcmF0b3IgZm9yIHRoZQogICogZ2l2ZW4gb3BlcmF0 b3IgY2xhc3MsIG90aGVyd2lzZSwgSW52YWxpZFN0cmF0ZWd5LgotICoKLSAqIEN1cnJlbnRs eSwgb25seSBCdHJlZSBhbmQgSGFzaCBpbmRleGVzIGFyZSBzdXBwb3J0ZWQuIFRoZSBvdGhl ciBpbmRleCBhY2Nlc3MKLSAqIG1ldGhvZHMgZG9uJ3QgaGF2ZSBhIGZpeGVkIHN0cmF0ZWd5 IGZvciBlcXVhbGl0eSBvcGVyYXRpb24gLSBpbnN0ZWFkLCB0aGUKLSAqIHN1cHBvcnQgcm91 dGluZXMgb2YgZWFjaCBvcGVyYXRvciBjbGFzcyBpbnRlcnByZXQgdGhlIHN0cmF0ZWd5IG51 bWJlcnMKLSAqIGFjY29yZGluZyB0byB0aGUgb3BlcmF0b3IgY2xhc3MncyBkZWZpbml0aW9u LgogICovCiBTdHJhdGVneU51bWJlcgogZ2V0X2VxdWFsX3N0cmF0ZWd5X251bWJlcihPaWQg b3BjbGFzcykKQEAgLTYwLDggKzU2LDEwIEBAIGdldF9lcXVhbF9zdHJhdGVneV9udW1iZXIo T2lkIG9wY2xhc3MpCiAJCWNhc2UgSEFTSF9BTV9PSUQ6CiAJCQlyZXQgPSBIVEVxdWFsU3Ry YXRlZ3lOdW1iZXI7CiAJCQlicmVhazsKKwkJY2FzZSBHSVNUX0FNX09JRDoKKwkJCXJldCA9 IEdpc3RUcmFuc2xhdGVTdHJhdG51bShvcGNsYXNzLCBSVEVxdWFsU3RyYXRlZ3lOdW1iZXIp OworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQkvKiBYWFg6IE9ubHkgQnRyZWUgYW5kIEhh c2ggaW5kZXhlcyBhcmUgc3VwcG9ydGVkICovCiAJCQlyZXQgPSBJbnZhbGlkU3RyYXRlZ3k7 CiAJCQlicmVhazsKIAl9Ci0tIAoyLjQyLjAKCg== --------------MTdPqxgc3LLXXWMcgd7pnXZX Content-Type: text/plain; charset=UTF-8; name="v45.3-0005-Tests-for-logical-replication-with-tem.patch.nocfbot" Content-Disposition: attachment; filename*0="v45.3-0005-Tests-for-logical-replication-with-tem.patch.nocf"; filename*1="bot" Content-Transfer-Encoding: base64 RnJvbSA0N2ZkMDI4ZjU5NTBhZjc2ZTg3OGMzM2NiOWQzZGE0YThhZGY2ZGE3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogV2VkLCA0IERlYyAyMDI0IDEyOjA2OjI0ICswMTAwClN1YmplY3Q6 IFtQQVRDSCB2NDUuMyA1LzVdIFRlc3RzIGZvciBsb2dpY2FsIHJlcGxpY2F0aW9uIHdpdGgg dGVtcG9yYWwga2V5cwoKQXV0aG9yOiBQYXVsIEEuIEp1bmd3aXJ0aCA8cGpAaWxsdW1pbmF0 ZWRjb21wdXRpbmcuY29tPgpEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9y Zy9tZXNzYWdlLWlkL2ZsYXQvQ0ErcmVueVVBcEhnU1pGOS1uZC1hMCtPUEdoYXJMUUxPPW1E SGNZNF9xUTArbm9DVVZnQG1haWwuZ21haWwuY29tCi0tLQogc3JjL3Rlc3Qvc3Vic2NyaXB0 aW9uL21lc29uLmJ1aWxkICAgICAgIHwgICAxICsKIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90 LzAzNF90ZW1wb3JhbC5wbCB8IDYyMyArKysrKysrKysrKysrKysrKysrKysrKysKIDIgZmls ZXMgY2hhbmdlZCwgNjI0IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv dGVzdC9zdWJzY3JpcHRpb24vdC8wMzRfdGVtcG9yYWwucGwKCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9zdWJzY3JpcHRpb24vbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24v bWVzb24uYnVpbGQKaW5kZXggYzU5MWNkN2Q2MTkuLmIyMzk1ZTdiNTdlIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vbWVzb24uYnVpbGQKKysrIGIvc3JjL3Rlc3Qvc3Vi c2NyaXB0aW9uL21lc29uLmJ1aWxkCkBAIC00MCw2ICs0MCw3IEBAIHRlc3RzICs9IHsKICAg ICAgICd0LzAzMV9jb2x1bW5fbGlzdC5wbCcsCiAgICAgICAndC8wMzJfc3Vic2NyaWJlX3Vz ZV9pbmRleC5wbCcsCiAgICAgICAndC8wMzNfcnVuX2FzX3RhYmxlX293bmVyLnBsJywKKyAg ICAgICd0LzAzNF90ZW1wb3JhbC5wbCcsCiAgICAgICAndC8xMDBfYnVncy5wbCcsCiAgICAg XSwKICAgfSwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzNF90ZW1w b3JhbC5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzNF90ZW1wb3JhbC5wbApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODgzMzI1ODFhOWQKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzRfdGVtcG9yYWwucGwK QEAgLTAsMCArMSw2MjMgQEAKKworIyBDb3B5cmlnaHQgKGMpIDIwMjQsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKyMgTG9naWNhbCByZXBsaWNhdGlvbiB0ZXN0 cyBmb3IgdGVtcG9yYWwgdGFibGVzCisjCisjIEEgdGFibGUgY2FuIHVzZSBhIHRlbXBvcmFs IFBSSU1BUlkgS0VZIG9yIFVOSVFVRSBpbmRleCBhcyBpdHMgUkVQTElDQSBJREVOVElUWS4K KyMgVGhpcyBpcyBhIEdpU1QgaW5kZXggKG5vdCBCLXRyZWUpIGFuZCBpdHMgbGFzdCBlbGVt ZW50IHVzZXMgV0lUSE9VVCBPVkVSTEFQUy4KKyMgVGhhdCBlbGVtZW50IHJlc3RyaWN0cyBv dGhlciByb3dzIHdpdGggb3ZlcmxhcHMgc2VtYW50aWNzIGluc3RlYWQgb2YgZXF1YWxpdHks CisjIGJ1dCBpdCBpcyBhbHdheXMgYXQgbGVhc3QgYXMgcmVzdHJpY3RpdmUgYXMgYSBub3Jt YWwgbm9uLW51bGwgdW5pcXVlIGluZGV4LgorIyBUaGVyZWZvcmUgd2UgY2FuIHN0aWxsIGFw cGx5IGxvZ2ljYWwgZGVjb2RpbmcgbWVzc2FnZXMgdG8gdGhlIHN1YnNjcmliZXIuCit1c2Ug c3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOwordXNlIFBvc3RncmVTUUw6 OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVz dDo6TW9yZTsKKworIyBzZXR1cAorCitteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOworJG5vZGVfcHVibGlzaGVyLT5p bml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3B1Ymxpc2hlci0+ c3RhcnQ7CisKK215ICRub2RlX3N1YnNjcmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVz dGVyLT5uZXcoJ3N1YnNjcmliZXInKTsKKyRub2RlX3N1YnNjcmliZXItPmluaXQ7Ciskbm9k ZV9zdWJzY3JpYmVyLT5zdGFydDsKKworbXkgJHB1Ymxpc2hlcl9jb25uc3RyID0gJG5vZGVf cHVibGlzaGVyLT5jb25uc3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOworCitteSAoJHJlc3Vs dCwgJHN0ZG91dCwgJHN0ZGVycik7CisKK3N1YiBjcmVhdGVfdGFibGVzKCkgeworICAjIGNy ZWF0ZSB0YWJsZXMgb24gcHVibGlzaGVyCisKKyAgJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKyAgICAiQ1JFQVRFIFRBQkxFIHRlbXBvcmFsX25vX2tleSAoaWQg aW50NHJhbmdlLCB2YWxpZF9hdCBkYXRlcmFuZ2UsIGEgdGV4dCkiCisgICk7CisKKyAgJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKyAgICAiQ1JFQVRFIFRBQkxF IHRlbXBvcmFsX3BrIChpZCBpbnQ0cmFuZ2UsIHZhbGlkX2F0IGRhdGVyYW5nZSwgYSB0ZXh0 LCBQUklNQVJZIEtFWSAoaWQsIHZhbGlkX2F0IFdJVEhPVVQgT1ZFUkxBUFMpKSIKKyAgKTsK KworICAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorICAgICJDUkVB VEUgVEFCTEUgdGVtcG9yYWxfdW5pcXVlIChpZCBpbnQ0cmFuZ2UsIHZhbGlkX2F0IGRhdGVy YW5nZSwgYSB0ZXh0LCBVTklRVUUgKGlkLCB2YWxpZF9hdCBXSVRIT1VUIE9WRVJMQVBTKSki CisgICk7CisKKyAgIyBjcmVhdGUgdGFibGVzIG9uIHN1YnNjcmliZXIKKworICAkbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKyAgICAiQ1JFQVRFIFRBQkxFIHRl bXBvcmFsX25vX2tleSAoaWQgaW50NHJhbmdlLCB2YWxpZF9hdCBkYXRlcmFuZ2UsIGEgdGV4 dCkiCisgICk7CisKKyAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisgICAgIkNSRUFURSBUQUJMRSB0ZW1wb3JhbF9wayAoaWQgaW50NHJhbmdlLCB2YWxpZF9h dCBkYXRlcmFuZ2UsIGEgdGV4dCwgUFJJTUFSWSBLRVkgKGlkLCB2YWxpZF9hdCBXSVRIT1VU IE9WRVJMQVBTKSkiCisgICk7CisKKyAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisgICAgIkNSRUFURSBUQUJMRSB0ZW1wb3JhbF91bmlxdWUgKGlkIGludDRy YW5nZSwgdmFsaWRfYXQgZGF0ZXJhbmdlLCBhIHRleHQsIFVOSVFVRSAoaWQsIHZhbGlkX2F0 IFdJVEhPVVQgT1ZFUkxBUFMpKSIKKyAgKTsKK30KKworc3ViIGRyb3BfZXZlcnl0aGluZygp IHsKKyAgJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFC TEUgSUYgRVhJU1RTIHRlbXBvcmFsX25vX2tleSIpOworICAkbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBJRiBFWElTVFMgdGVtcG9yYWxfcGsi KTsKKyAgJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFC TEUgSUYgRVhJU1RTIHRlbXBvcmFsX3VuaXF1ZSIpOworICAkbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBQVUJMSUNBVElPTiBwdWIxIik7CisgICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBJRiBFWElT VFMgdGVtcG9yYWxfbm9fa2V5Iik7CisgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBJRiBFWElTVFMgdGVtcG9yYWxfcGsiKTsKKyAgJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIElGIEVY SVNUUyB0ZW1wb3JhbF91bmlxdWUiKTsKKyAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJEUk9QIFNVQlNDUklQVElPTiBzdWIxIik7Cit9CisKKyMgIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3Qgd2l0aCBSRVBMSUNBIElERU5U SVRZIERFRkFVTFQ6CisjICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitj cmVhdGVfdGFibGVzKCk7CisKKyMgc3luYyBpbml0aWFsIGRhdGE6CisKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRPIHRlbXBvcmFs X25vX2tleSAoaWQsIHZhbGlkX2F0LCBhKQorICAgVkFMVUVTICgnWzEsMiknLCAnWzIwMDAt MDEtMDEsMjAxMC0wMS0wMSknLCAnYScpIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgKKwkncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0ZW1wb3JhbF9wayAoaWQsIHZhbGlk X2F0LCBhKQorICAgVkFMVUVTICgnWzEsMiknLCAnWzIwMDAtMDEtMDEsMjAxMC0wMS0wMSkn LCAnYScpIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLAor CSJJTlNFUlQgSU5UTyB0ZW1wb3JhbF91bmlxdWUgKGlkLCB2YWxpZF9hdCwgYSkKKyAgIFZB TFVFUyAoJ1sxLDIpJywgJ1syMDAwLTAxLTAxLDIwMTAtMDEtMDEpJywgJ2EnKSIpOworCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgUFVCTElD QVRJT04gcHViMSBGT1IgQUxMIFRBQkxFUyIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04gc3ViMSBDT05ORUNUSU9O ICckcHVibGlzaGVyX2Nvbm5zdHInIFBVQkxJQ0FUSU9OIHB1YjEiCispOworJG5vZGVfc3Vi c2NyaWJlci0+d2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmM7CisKKyRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUICogRlJPTSB0 ZW1wb3JhbF9ub19rZXkgT1JERVIgQlkgaWQsIHZhbGlkX2F0Iik7CitpcyggJHJlc3VsdCwK KwlxcXtbMSwyKXxbMjAwMC0wMS0wMSwyMDEwLTAxLTAxKXxhfSwKKwknc3luY2VkIHRlbXBv cmFsX25vX2tleSBERUZBVUxUJyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUICogRlJPTSB0ZW1wb3JhbF9wayBPUkRF UiBCWSBpZCwgdmFsaWRfYXQiKTsKK2lzKCRyZXN1bHQsIHFxe1sxLDIpfFsyMDAwLTAxLTAx LDIwMTAtMDEtMDEpfGF9LAorCSdzeW5jZWQgdGVtcG9yYWxfcGsgREVGQVVMVCcpOworCisk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNF TEVDVCAqIEZST00gdGVtcG9yYWxfdW5pcXVlIE9SREVSIEJZIGlkLCB2YWxpZF9hdCIpOwor aXMoICRyZXN1bHQsCisJcXF7WzEsMil8WzIwMDAtMDEtMDEsMjAxMC0wMS0wMSl8YX0sCisJ J3N5bmNlZCB0ZW1wb3JhbF91bmlxdWUgREVGQVVMVCcpOworCisjIHJlcGxpY2F0ZSB3aXRo IG5vIGtleToKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywK KwkiSU5TRVJUIElOVE8gdGVtcG9yYWxfbm9fa2V5IChpZCwgdmFsaWRfYXQsIGEpCisgICBW QUxVRVMgKCdbMiwzKScsICdbMjAwMC0wMS0wMSwyMDEwLTAxLTAxKScsICdhJyksCisgICAg ICAgICAgKCdbMyw0KScsICdbMjAwMC0wMS0wMSwyMDEwLTAxLTAxKScsICdhJyksCisgICAg ICAgICAgKCdbNCw1KScsICdbMjAwMC0wMS0wMSwyMDEwLTAxLTAxKScsICdhJykiKTsKKwor KCRyZXN1bHQsICRzdGRvdXQsICRzdGRlcnIpID0gJG5vZGVfcHVibGlzaGVyLT5wc3FsKCdw b3N0Z3JlcycsCisJIlVQREFURSB0ZW1wb3JhbF9ub19rZXkgU0VUIGEgPSAnYicgV0hFUkUg aWQgPSAnWzIsMyknIik7CitpcyggJHN0ZGVyciwKKwlxcShwc3FsOjxzdGRpbj46MTogRVJS T1I6ICBjYW5ub3QgdXBkYXRlIHRhYmxlICJ0ZW1wb3JhbF9ub19rZXkiIGJlY2F1c2UgaXQg ZG9lcyBub3QgaGF2ZSBhIHJlcGxpY2EgaWRlbnRpdHkgYW5kIHB1Ymxpc2hlcyB1cGRhdGVz CitISU5UOiAgVG8gZW5hYmxlIHVwZGF0aW5nIHRoZSB0YWJsZSwgc2V0IFJFUExJQ0EgSURF TlRJVFkgdXNpbmcgQUxURVIgVEFCTEUuKSwKKwkiY2FuJ3QgVVBEQVRFIHRlbXBvcmFsX25v X2tleSBERUZBVUxUIik7CisKKygkcmVzdWx0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRub2Rl X3B1Ymxpc2hlci0+cHNxbCgncG9zdGdyZXMnLAorCSJERUxFVEUgRlJPTSB0ZW1wb3JhbF9u b19rZXkgV0hFUkUgaWQgPSAnWzMsNCknIik7CitpcyggJHN0ZGVyciwKKwlxcShwc3FsOjxz dGRpbj46MTogRVJST1I6ICBjYW5ub3QgZGVsZXRlIGZyb20gdGFibGUgInRlbXBvcmFsX25v X2tleSIgYmVjYXVzZSBpdCBkb2VzIG5vdCBoYXZlIGEgcmVwbGljYSBpZGVudGl0eSBhbmQg cHVibGlzaGVzIGRlbGV0ZXMKK0hJTlQ6ICBUbyBlbmFibGUgZGVsZXRpbmcgZnJvbSB0aGUg dGFibGUsIHNldCBSRVBMSUNBIElERU5USVRZIHVzaW5nIEFMVEVSIFRBQkxFLiksCisJImNh bid0IERFTEVURSB0ZW1wb3JhbF9ub19rZXkgREVGQVVMVCIpOworCiskbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgKiBGUk9NIHRlbXBvcmFs X25vX2tleSBPUkRFUiBCWSBpZCwgdmFsaWRfYXQiKTsKK2lzKCAkcmVzdWx0LCBxcXtbMSwy KXxbMjAwMC0wMS0wMSwyMDEwLTAxLTAxKXxhCitbMiwzKXxbMjAwMC0wMS0wMSwyMDEwLTAx LTAxKXxhCitbMyw0KXxbMjAwMC0wMS0wMSwyMDEwLTAxLTAxKXxhCitbNCw1KXxbMjAwMC0w MS0wMSwyMDEwLTAxLTAxKXxhfSwgJ3JlcGxpY2F0ZWQgdGVtcG9yYWxfbm9fa2V5IERFRkFV TFQnKTsKKworIyByZXBsaWNhdGUgd2l0aCBhIHByaW1hcnkga2V5OgorCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0ZW1wb3Jh bF9wayAoaWQsIHZhbGlkX2F0LCBhKQorICAgVkFMVUVTICgnWzIsMyknLCAnWzIwMDAtMDEt MDEsMjAxMC0wMS0wMSknLCAnYScpLAorICAgICAgICAgICgnWzMsNCknLCAnWzIwMDAtMDEt MDEsMjAxMC0wMS0wMSknLCAnYScpLAorICAgICAgICAgICgnWzQsNSknLCAnWzIwMDAtMDEt MDEsMjAxMC0wMS0wMSknLCAnYScpIik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJIlVQREFURSB0ZW1wb3JhbF9wayBTRVQgYSA9ICdiJyBXSEVSRSBp ZCA9ICdbMiwzKSciKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkiREVMRVRFIEZST00gdGVtcG9yYWxfcGsgV0hFUkUgaWQgPSAnWzMsNCknIik7CisK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCAq IEZST00gdGVtcG9yYWxfcGsgT1JERVIgQlkgaWQsIHZhbGlkX2F0Iik7CitpcyggJHJlc3Vs dCwgcXF7WzEsMil8WzIwMDAtMDEtMDEsMjAxMC0wMS0wMSl8YQorWzIsMyl8WzIwMDAtMDEt MDEsMjAxMC0wMS0wMSl8YgorWzQsNSl8WzIwMDAtMDEtMDEsMjAxMC0wMS0wMSl8YX0sICdy ZXBsaWNhdGVkIHRlbXBvcmFsX3BrIERFRkFVTFQnKTsKKworIyByZXBsaWNhdGUgd2l0aCBh IHVuaXF1ZSBrZXk6CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3Jl cycsCisJIklOU0VSVCBJTlRPIHRlbXBvcmFsX3VuaXF1ZSAoaWQsIHZhbGlkX2F0LCBhKQor ICAgVkFMVUVTICgnWzIsMyknLCAnWzIwMDAtMDEtMDEsMjAxMC0wMS0wMSknLCAnYScpLAor ICAgICAgICAgICgnWzMsNCknLCAnWzIwMDAtMDEtMDEsMjAxMC0wMS0wMSknLCAnYScpLAor ICAgICAgICAgICgnWzQsNSknLCAnWzIwMDAtMDEtMDEsMjAxMC0wMS0wMSknLCAnYScpIik7 CisKKygkcmVzdWx0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRub2RlX3B1Ymxpc2hlci0+cHNx bCgncG9zdGdyZXMnLAorCSJVUERBVEUgdGVtcG9yYWxfdW5pcXVlIFNFVCBhID0gJ2InIFdI RVJFIGlkID0gJ1syLDMpJyIpOworaXMoICRzdGRlcnIsCisJcXEocHNxbDo8c3RkaW4+OjE6 IEVSUk9SOiAgY2Fubm90IHVwZGF0ZSB0YWJsZSAidGVtcG9yYWxfdW5pcXVlIiBiZWNhdXNl IGl0IGRvZXMgbm90IGhhdmUgYSByZXBsaWNhIGlkZW50aXR5IGFuZCBwdWJsaXNoZXMgdXBk YXRlcworSElOVDogIFRvIGVuYWJsZSB1cGRhdGluZyB0aGUgdGFibGUsIHNldCBSRVBMSUNB IElERU5USVRZIHVzaW5nIEFMVEVSIFRBQkxFLiksCisJImNhbid0IFVQREFURSB0ZW1wb3Jh bF91bmlxdWUgREVGQVVMVCIpOworCisoJHJlc3VsdCwgJHN0ZG91dCwgJHN0ZGVycikgPSAk bm9kZV9wdWJsaXNoZXItPnBzcWwoJ3Bvc3RncmVzJywKKwkiREVMRVRFIEZST00gdGVtcG9y YWxfdW5pcXVlIFdIRVJFIGlkID0gJ1szLDQpJyIpOworaXMoICRzdGRlcnIsCisJcXEocHNx bDo8c3RkaW4+OjE6IEVSUk9SOiAgY2Fubm90IGRlbGV0ZSBmcm9tIHRhYmxlICJ0ZW1wb3Jh bF91bmlxdWUiIGJlY2F1c2UgaXQgZG9lcyBub3QgaGF2ZSBhIHJlcGxpY2EgaWRlbnRpdHkg YW5kIHB1Ymxpc2hlcyBkZWxldGVzCitISU5UOiAgVG8gZW5hYmxlIGRlbGV0aW5nIGZyb20g dGhlIHRhYmxlLCBzZXQgUkVQTElDQSBJREVOVElUWSB1c2luZyBBTFRFUiBUQUJMRS4pLAor CSJjYW4ndCBERUxFVEUgdGVtcG9yYWxfdW5pcXVlIERFRkFVTFQiKTsKKworJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisKKyRyZXN1bHQgPSAkbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUICogRlJPTSB0ZW1w b3JhbF91bmlxdWUgT1JERVIgQlkgaWQsIHZhbGlkX2F0Iik7CitpcyggJHJlc3VsdCwgcXF7 WzEsMil8WzIwMDAtMDEtMDEsMjAxMC0wMS0wMSl8YQorWzIsMyl8WzIwMDAtMDEtMDEsMjAx MC0wMS0wMSl8YQorWzMsNCl8WzIwMDAtMDEtMDEsMjAxMC0wMS0wMSl8YQorWzQsNSl8WzIw MDAtMDEtMDEsMjAxMC0wMS0wMSl8YX0sICdyZXBsaWNhdGVkIHRlbXBvcmFsX3VuaXF1ZSBE RUZBVUxUJyk7CisKKyMgY2xlYW51cAorCitkcm9wX2V2ZXJ5dGhpbmcoKTsKKworCisjICMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHdpdGggUkVQTElDQSBJ REVOVElUWSBGVUxMOgorIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwor Y3JlYXRlX3RhYmxlcygpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJBTFRFUiBUQUJMRSB0ZW1wb3JhbF9ub19rZXkgUkVQTElDQSBJREVOVElUWSBG VUxMIik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFM VEVSIFRBQkxFIHRlbXBvcmFsX3BrIFJFUExJQ0EgSURFTlRJVFkgRlVMTCIpOworCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBUQUJMRSB0ZW1w b3JhbF91bmlxdWUgUkVQTElDQSBJREVOVElUWSBGVUxMIik7CisKKyRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBUQUJMRSB0ZW1wb3JhbF9ub19r ZXkgUkVQTElDQSBJREVOVElUWSBGVUxMIik7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBUQUJMRSB0ZW1wb3JhbF9wayBSRVBMSUNBIElE RU5USVRZIEZVTEwiKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJIkFMVEVSIFRBQkxFIHRlbXBvcmFsX3VuaXF1ZSBSRVBMSUNBIElERU5USVRZIEZV TEwiKTsKKworIyBzeW5jIGluaXRpYWwgZGF0YToKKworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoCisJJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gdGVtcG9yYWxfbm9fa2V5IChp ZCwgdmFsaWRfYXQsIGEpCisgICBWQUxVRVMgKCdbMSwyKScsICdbMjAwMC0wMS0wMSwyMDEw LTAxLTAxKScsICdhJykiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0 Z3JlcycsCisJIklOU0VSVCBJTlRPIHRlbXBvcmFsX3BrIChpZCwgdmFsaWRfYXQsIGEpCisg ICBWQUxVRVMgKCdbMSwyKScsICdbMjAwMC0wMS0wMSwyMDEwLTAxLTAxKScsICdhJykiKTsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsCisJIklOU0VSVCBJ TlRPIHRlbXBvcmFsX3VuaXF1ZSAoaWQsIHZhbGlkX2F0LCBhKQorICAgVkFMVUVTICgnWzEs MiknLCAnWzIwMDAtMDEtMDEsMjAxMC0wMS0wMSknLCAnYScpIik7CisKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBQVUJMSUNBVElPTiBwdWIx IEZPUiBBTEwgVEFCTEVTIik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkiQ1JFQVRFIFNVQlNDUklQVElPTiBzdWIxIENPTk5FQ1RJT04gJyRwdWJsaXNo ZXJfY29ubnN0cicgUFVCTElDQVRJT04gcHViMSIKKyk7Ciskbm9kZV9zdWJzY3JpYmVyLT53 YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYzsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgKiBGUk9NIHRlbXBvcmFsX25v X2tleSBPUkRFUiBCWSBpZCwgdmFsaWRfYXQiKTsKK2lzKCAkcmVzdWx0LAorCXFxe1sxLDIp fFsyMDAwLTAxLTAxLDIwMTAtMDEtMDEpfGF9LAorCSdzeW5jZWQgdGVtcG9yYWxfbm9fa2V5 IEZVTEwnKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJTRUxFQ1QgKiBGUk9NIHRlbXBvcmFsX3BrIE9SREVSIEJZIGlkLCB2YWxp ZF9hdCIpOworaXMoJHJlc3VsdCwgcXF7WzEsMil8WzIwMDAtMDEtMDEsMjAxMC0wMS0wMSl8 YX0sICdzeW5jZWQgdGVtcG9yYWxfcGsgRlVMTCcpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCAqIEZST00gdGVtcG9y YWxfdW5pcXVlIE9SREVSIEJZIGlkLCB2YWxpZF9hdCIpOworaXMoICRyZXN1bHQsCisJcXF7 WzEsMil8WzIwMDAtMDEtMDEsMjAxMC0wMS0wMSl8YX0sCisJJ3N5bmNlZCB0ZW1wb3JhbF91 bmlxdWUgRlVMTCcpOworCisjIHJlcGxpY2F0ZSB3aXRoIG5vIGtleToKKworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gdGVtcG9y YWxfbm9fa2V5IChpZCwgdmFsaWRfYXQsIGEpCisgICBWQUxVRVMgKCdbMiwzKScsICdbMjAw MC0wMS0wMSwyMDEwLTAxLTAxKScsICdhJyksCisgICAgICAgICAgKCdbMyw0KScsICdbMjAw MC0wMS0wMSwyMDEwLTAxLTAxKScsICdhJyksCisgICAgICAgICAgKCdbNCw1KScsICdbMjAw MC0wMS0wMSwyMDEwLTAxLTAxKScsICdhJykiKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiVVBEQVRFIHRlbXBvcmFsX25vX2tleSBTRVQgYSA9ICdi JyBXSEVSRSBpZCA9ICdbMiwzKSciKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkiREVMRVRFIEZST00gdGVtcG9yYWxfbm9fa2V5IFdIRVJFIGlkID0g J1szLDQpJyIpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEn KTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LAorCSJTRUxFQ1QgKiBGUk9NIHRlbXBvcmFsX25vX2tleSBPUkRFUiBCWSBpZCwgdmFsaWRf YXQiKTsKK2lzKCAkcmVzdWx0LCBxcXtbMSwyKXxbMjAwMC0wMS0wMSwyMDEwLTAxLTAxKXxh CitbMiwzKXxbMjAwMC0wMS0wMSwyMDEwLTAxLTAxKXxiCitbNCw1KXxbMjAwMC0wMS0wMSwy MDEwLTAxLTAxKXxhfSwgJ3JlcGxpY2F0ZWQgdGVtcG9yYWxfbm9fa2V5IEZVTEwnKTsKKwor IyByZXBsaWNhdGUgd2l0aCBhIHByaW1hcnkga2V5OgorCiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgKKwkncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0ZW1wb3JhbF9wayAoaWQs IHZhbGlkX2F0LCBhKQorICAgVkFMVUVTICgnWzIsMyknLCAnWzIwMDAtMDEtMDEsMjAxMC0w MS0wMSknLCAnYScpLAorICAgICAgICAgICgnWzMsNCknLCAnWzIwMDAtMDEtMDEsMjAxMC0w MS0wMSknLCAnYScpLAorICAgICAgICAgICgnWzQsNSknLCAnWzIwMDAtMDEtMDEsMjAxMC0w MS0wMSknLCAnYScpIik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJIlVQREFURSB0ZW1wb3JhbF9wayBTRVQgYSA9ICdiJyBXSEVSRSBpZCA9ICdbMiwz KSciKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiREVM RVRFIEZST00gdGVtcG9yYWxfcGsgV0hFUkUgaWQgPSAnWzMsNCknIik7CisKKyRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCiskcmVzdWx0ID0gJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCAqIEZST00gdGVt cG9yYWxfcGsgT1JERVIgQlkgaWQsIHZhbGlkX2F0Iik7CitpcyggJHJlc3VsdCwgcXF7WzEs Mil8WzIwMDAtMDEtMDEsMjAxMC0wMS0wMSl8YQorWzIsMyl8WzIwMDAtMDEtMDEsMjAxMC0w MS0wMSl8YgorWzQsNSl8WzIwMDAtMDEtMDEsMjAxMC0wMS0wMSl8YX0sICdyZXBsaWNhdGVk IHRlbXBvcmFsX3BrIEZVTEwnKTsKKworIyByZXBsaWNhdGUgd2l0aCBhIHVuaXF1ZSBrZXk6 CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsCisJIklOU0VS VCBJTlRPIHRlbXBvcmFsX3VuaXF1ZSAoaWQsIHZhbGlkX2F0LCBhKQorICAgVkFMVUVTICgn WzIsMyknLCAnWzIwMDAtMDEtMDEsMjAxMC0wMS0wMSknLCAnYScpLAorICAgICAgICAgICgn WzMsNCknLCAnWzIwMDAtMDEtMDEsMjAxMC0wMS0wMSknLCAnYScpLAorICAgICAgICAgICgn WzQsNSknLCAnWzIwMDAtMDEtMDEsMjAxMC0wMS0wMSknLCAnYScpIik7CisKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlVQREFURSB0ZW1wb3JhbF91bmlx dWUgU0VUIGEgPSAnYicgV0hFUkUgaWQgPSAnWzIsMyknIik7CisKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkRFTEVURSBGUk9NIHRlbXBvcmFsX3VuaXF1 ZSBXSEVSRSBpZCA9ICdbMyw0KSciKTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9j YXRjaHVwKCdzdWIxJyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUICogRlJPTSB0ZW1wb3JhbF91bmlxdWUgT1JERVIg QlkgaWQsIHZhbGlkX2F0Iik7CitpcyggJHJlc3VsdCwgcXF7WzEsMil8WzIwMDAtMDEtMDEs MjAxMC0wMS0wMSl8YQorWzIsMyl8WzIwMDAtMDEtMDEsMjAxMC0wMS0wMSl8YgorWzQsNSl8 WzIwMDAtMDEtMDEsMjAxMC0wMS0wMSl8YX0sICdyZXBsaWNhdGVkIHRlbXBvcmFsX3VuaXF1 ZSBGVUxMJyk7CisKKyMgY2xlYW51cAorCitkcm9wX2V2ZXJ5dGhpbmcoKTsKKworCisjICMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHdpdGggUkVQTElDQSBJ REVOVElUWSBVU0lORyBJTkRFWAorIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMKKworIyBjcmVhdGUgdGFibGVzIG9uIHB1Ymxpc2hlcgorCiskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgdGVtcG9yYWxfcGsgKGlk IGludDRyYW5nZSwgdmFsaWRfYXQgZGF0ZXJhbmdlLCBhIHRleHQsIFBSSU1BUlkgS0VZIChp ZCwgdmFsaWRfYXQgV0lUSE9VVCBPVkVSTEFQUykpIgorKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFRBQkxFIHRlbXBvcmFsX3BrIFJFUExJ Q0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVtcG9yYWxfcGtfcGtleSIpOworCiskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgdGVtcG9y YWxfdW5pcXVlIChpZCBpbnQ0cmFuZ2UgTk9UIE5VTEwsIHZhbGlkX2F0IGRhdGVyYW5nZSBO T1QgTlVMTCwgYSB0ZXh0LCBVTklRVUUgKGlkLCB2YWxpZF9hdCBXSVRIT1VUIE9WRVJMQVBT KSkiCispOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxU RVIgVEFCTEUgdGVtcG9yYWxfdW5pcXVlIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVgg dGVtcG9yYWxfdW5pcXVlX2lkX3ZhbGlkX2F0X2tleSIKKyk7CisKKyMgY3JlYXRlIHRhYmxl cyBvbiBzdWJzY3JpYmVyCisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJDUkVBVEUgVEFCTEUgdGVtcG9yYWxfcGsgKGlkIGludDRyYW5nZSwgdmFsaWRf YXQgZGF0ZXJhbmdlLCBhIHRleHQsIFBSSU1BUlkgS0VZIChpZCwgdmFsaWRfYXQgV0lUSE9V VCBPVkVSTEFQUykpIgorKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJBTFRFUiBUQUJMRSB0ZW1wb3JhbF9wayBSRVBMSUNBIElERU5USVRZIFVTSU5H IElOREVYIHRlbXBvcmFsX3BrX3BrZXkiKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSB0ZW1wb3JhbF91bmlxdWUgKGlkIGlu dDRyYW5nZSBOT1QgTlVMTCwgdmFsaWRfYXQgZGF0ZXJhbmdlIE5PVCBOVUxMLCBhIHRleHQs IFVOSVFVRSAoaWQsIHZhbGlkX2F0IFdJVEhPVVQgT1ZFUkxBUFMpKSIKKyk7Ciskbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgVEFCTEUgdGVtcG9y YWxfdW5pcXVlIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVtcG9yYWxfdW5pcXVl X2lkX3ZhbGlkX2F0X2tleSIKKyk7CisKKyMgc3luYyBpbml0aWFsIGRhdGE6CisKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRPIHRl bXBvcmFsX3BrIChpZCwgdmFsaWRfYXQsIGEpCisgICBWQUxVRVMgKCdbMSwyKScsICdbMjAw MC0wMS0wMSwyMDEwLTAxLTAxKScsICdhJykiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKAorCSdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRPIHRlbXBvcmFsX3VuaXF1ZSAoaWQs IHZhbGlkX2F0LCBhKQorICAgVkFMVUVTICgnWzEsMiknLCAnWzIwMDAtMDEtMDEsMjAxMC0w MS0wMSknLCAnYScpIik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJIkNSRUFURSBQVUJMSUNBVElPTiBwdWIxIEZPUiBBTEwgVEFCTEVTIik7Ciskbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFNVQlNDUklQ VElPTiBzdWIxIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0cicgUFVCTElDQVRJT04g cHViMSIKKyk7Ciskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3lu YzsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LAorCSJTRUxFQ1QgKiBGUk9NIHRlbXBvcmFsX3BrIE9SREVSIEJZIGlkLCB2YWxpZF9hdCIp OworaXMoICRyZXN1bHQsCisJcXF7WzEsMil8WzIwMDAtMDEtMDEsMjAxMC0wMS0wMSl8YX0s CisJJ3N5bmNlZCB0ZW1wb3JhbF9wayBVU0lORyBJTkRFWCcpOworCiskcmVzdWx0ID0gJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCAqIEZST00g dGVtcG9yYWxfdW5pcXVlIE9SREVSIEJZIGlkLCB2YWxpZF9hdCIpOworaXMoICRyZXN1bHQs CisJcXF7WzEsMil8WzIwMDAtMDEtMDEsMjAxMC0wMS0wMSl8YX0sCisJJ3N5bmNlZCB0ZW1w b3JhbF91bmlxdWUgVVNJTkcgSU5ERVgnKTsKKworIyByZXBsaWNhdGUgd2l0aCBhIHByaW1h cnkga2V5OgorCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLAor CSJJTlNFUlQgSU5UTyB0ZW1wb3JhbF9wayAoaWQsIHZhbGlkX2F0LCBhKQorICAgVkFMVUVT ICgnWzIsMyknLCAnWzIwMDAtMDEtMDEsMjAxMC0wMS0wMSknLCAnYScpLAorICAgICAgICAg ICgnWzMsNCknLCAnWzIwMDAtMDEtMDEsMjAxMC0wMS0wMSknLCAnYScpLAorICAgICAgICAg ICgnWzQsNSknLCAnWzIwMDAtMDEtMDEsMjAxMC0wMS0wMSknLCAnYScpIik7CisKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlVQREFURSB0ZW1wb3JhbF9w ayBTRVQgYSA9ICdiJyBXSEVSRSBpZCA9ICdbMiwzKSciKTsKKworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiREVMRVRFIEZST00gdGVtcG9yYWxfcGsgV0hF UkUgaWQgPSAnWzMsNCknIik7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnc3ViMScpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJIlNFTEVDVCAqIEZST00gdGVtcG9yYWxfcGsgT1JERVIgQlkgaWQsIHZh bGlkX2F0Iik7CitpcyggJHJlc3VsdCwgcXF7WzEsMil8WzIwMDAtMDEtMDEsMjAxMC0wMS0w MSl8YQorWzIsMyl8WzIwMDAtMDEtMDEsMjAxMC0wMS0wMSl8YgorWzQsNSl8WzIwMDAtMDEt MDEsMjAxMC0wMS0wMSl8YX0sICdyZXBsaWNhdGVkIHRlbXBvcmFsX3BrIFVTSU5HIElOREVY Jyk7CisKKyMgcmVwbGljYXRlIHdpdGggYSB1bmlxdWUga2V5OgorCiskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0ZW1wb3JhbF91 bmlxdWUgKGlkLCB2YWxpZF9hdCwgYSkKKyAgIFZBTFVFUyAoJ1syLDMpJywgJ1syMDAwLTAx LTAxLDIwMTAtMDEtMDEpJywgJ2EnKSwKKyAgICAgICAgICAoJ1szLDQpJywgJ1syMDAwLTAx LTAxLDIwMTAtMDEtMDEpJywgJ2EnKSwKKyAgICAgICAgICAoJ1s0LDUpJywgJ1syMDAwLTAx LTAxLDIwMTAtMDEtMDEpJywgJ2EnKSIpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCSJVUERBVEUgdGVtcG9yYWxfdW5pcXVlIFNFVCBhID0gJ2InIFdI RVJFIGlkID0gJ1syLDMpJyIpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJERUxFVEUgRlJPTSB0ZW1wb3JhbF91bmlxdWUgV0hFUkUgaWQgPSAnWzMs NCknIik7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOwor CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ IlNFTEVDVCAqIEZST00gdGVtcG9yYWxfdW5pcXVlIE9SREVSIEJZIGlkLCB2YWxpZF9hdCIp OworaXMoICRyZXN1bHQsIHFxe1sxLDIpfFsyMDAwLTAxLTAxLDIwMTAtMDEtMDEpfGEKK1sy LDMpfFsyMDAwLTAxLTAxLDIwMTAtMDEtMDEpfGIKK1s0LDUpfFsyMDAwLTAxLTAxLDIwMTAt MDEtMDEpfGF9LCAncmVwbGljYXRlZCB0ZW1wb3JhbF91bmlxdWUgVVNJTkcgSU5ERVgnKTsK KworIyBjbGVhbnVwCisKK2Ryb3BfZXZlcnl0aGluZygpOworCisKKyMgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3Qgd2l0aCBSRVBMSUNBIElERU5USVRZIE5P VEhJTkcKKyMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NyZWF0ZV90 YWJsZXMoKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki QUxURVIgVEFCTEUgdGVtcG9yYWxfbm9fa2V5IFJFUExJQ0EgSURFTlRJVFkgTk9USElORyIp OworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBU QUJMRSB0ZW1wb3JhbF9wayBSRVBMSUNBIElERU5USVRZIE5PVEhJTkciKTsKKworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgVEFCTEUgdGVtcG9y YWxfdW5pcXVlIFJFUExJQ0EgSURFTlRJVFkgTk9USElORyIpOworCiskbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgVEFCTEUgdGVtcG9yYWxfbm9f a2V5IFJFUExJQ0EgSURFTlRJVFkgTk9USElORyIpOworCiskbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgVEFCTEUgdGVtcG9yYWxfcGsgUkVQTElD QSBJREVOVElUWSBOT1RISU5HIik7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCSJBTFRFUiBUQUJMRSB0ZW1wb3JhbF91bmlxdWUgUkVQTElDQSBJREVO VElUWSBOT1RISU5HIik7CisKKyMgc3luYyBpbml0aWFsIGRhdGE6CisKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRPIHRlbXBvcmFs X25vX2tleSAoaWQsIHZhbGlkX2F0LCBhKQorICAgVkFMVUVTICgnWzEsMiknLCAnWzIwMDAt MDEtMDEsMjAxMC0wMS0wMSknLCAnYScpIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgKKwkncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0ZW1wb3JhbF9wayAoaWQsIHZhbGlk X2F0LCBhKQorICAgVkFMVUVTICgnWzEsMiknLCAnWzIwMDAtMDEtMDEsMjAxMC0wMS0wMSkn LCAnYScpIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLAor CSJJTlNFUlQgSU5UTyB0ZW1wb3JhbF91bmlxdWUgKGlkLCB2YWxpZF9hdCwgYSkKKyAgIFZB TFVFUyAoJ1sxLDIpJywgJ1syMDAwLTAxLTAxLDIwMTAtMDEtMDEpJywgJ2EnKSIpOworCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgUFVCTElD QVRJT04gcHViMSBGT1IgQUxMIFRBQkxFUyIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04gc3ViMSBDT05ORUNUSU9O ICckcHVibGlzaGVyX2Nvbm5zdHInIFBVQkxJQ0FUSU9OIHB1YjEiCispOworJG5vZGVfc3Vi c2NyaWJlci0+d2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmM7CisKKyRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUICogRlJPTSB0 ZW1wb3JhbF9ub19rZXkgT1JERVIgQlkgaWQsIHZhbGlkX2F0Iik7CitpcyggJHJlc3VsdCwK KwlxcXtbMSwyKXxbMjAwMC0wMS0wMSwyMDEwLTAxLTAxKXxhfSwKKwknc3luY2VkIHRlbXBv cmFsX25vX2tleSBOT1RISU5HJyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUICogRlJPTSB0ZW1wb3JhbF9wayBPUkRF UiBCWSBpZCwgdmFsaWRfYXQiKTsKK2lzKCRyZXN1bHQsIHFxe1sxLDIpfFsyMDAwLTAxLTAx LDIwMTAtMDEtMDEpfGF9LAorCSdzeW5jZWQgdGVtcG9yYWxfcGsgTk9USElORycpOworCisk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNF TEVDVCAqIEZST00gdGVtcG9yYWxfdW5pcXVlIE9SREVSIEJZIGlkLCB2YWxpZF9hdCIpOwor aXMoICRyZXN1bHQsCisJcXF7WzEsMil8WzIwMDAtMDEtMDEsMjAxMC0wMS0wMSl8YX0sCisJ J3N5bmNlZCB0ZW1wb3JhbF91bmlxdWUgTk9USElORycpOworCisjIHJlcGxpY2F0ZSB3aXRo IG5vIGtleToKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywK KwkiSU5TRVJUIElOVE8gdGVtcG9yYWxfbm9fa2V5IChpZCwgdmFsaWRfYXQsIGEpCisgICBW QUxVRVMgKCdbMiwzKScsICdbMjAwMC0wMS0wMSwyMDEwLTAxLTAxKScsICdhJyksCisgICAg ICAgICAgKCdbMyw0KScsICdbMjAwMC0wMS0wMSwyMDEwLTAxLTAxKScsICdhJyksCisgICAg ICAgICAgKCdbNCw1KScsICdbMjAwMC0wMS0wMSwyMDEwLTAxLTAxKScsICdhJykiKTsKKwor KCRyZXN1bHQsICRzdGRvdXQsICRzdGRlcnIpID0gJG5vZGVfcHVibGlzaGVyLT5wc3FsKCdw b3N0Z3JlcycsCisJIlVQREFURSB0ZW1wb3JhbF9ub19rZXkgU0VUIGEgPSAnYicgV0hFUkUg aWQgPSAnWzIsMyknIik7CitpcyggJHN0ZGVyciwKKwlxcShwc3FsOjxzdGRpbj46MTogRVJS T1I6ICBjYW5ub3QgdXBkYXRlIHRhYmxlICJ0ZW1wb3JhbF9ub19rZXkiIGJlY2F1c2UgaXQg ZG9lcyBub3QgaGF2ZSBhIHJlcGxpY2EgaWRlbnRpdHkgYW5kIHB1Ymxpc2hlcyB1cGRhdGVz CitISU5UOiAgVG8gZW5hYmxlIHVwZGF0aW5nIHRoZSB0YWJsZSwgc2V0IFJFUExJQ0EgSURF TlRJVFkgdXNpbmcgQUxURVIgVEFCTEUuKSwKKwkiY2FuJ3QgVVBEQVRFIHRlbXBvcmFsX25v X2tleSBOT1RISU5HIik7CisKKygkcmVzdWx0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRub2Rl X3B1Ymxpc2hlci0+cHNxbCgncG9zdGdyZXMnLAorCSJERUxFVEUgRlJPTSB0ZW1wb3JhbF9u b19rZXkgV0hFUkUgaWQgPSAnWzMsNCknIik7CitpcyggJHN0ZGVyciwKKwlxcShwc3FsOjxz dGRpbj46MTogRVJST1I6ICBjYW5ub3QgZGVsZXRlIGZyb20gdGFibGUgInRlbXBvcmFsX25v X2tleSIgYmVjYXVzZSBpdCBkb2VzIG5vdCBoYXZlIGEgcmVwbGljYSBpZGVudGl0eSBhbmQg cHVibGlzaGVzIGRlbGV0ZXMKK0hJTlQ6ICBUbyBlbmFibGUgZGVsZXRpbmcgZnJvbSB0aGUg dGFibGUsIHNldCBSRVBMSUNBIElERU5USVRZIHVzaW5nIEFMVEVSIFRBQkxFLiksCisJImNh bid0IERFTEVURSB0ZW1wb3JhbF9ub19rZXkgTk9USElORyIpOworCiskbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgKiBGUk9NIHRlbXBvcmFs X25vX2tleSBPUkRFUiBCWSBpZCwgdmFsaWRfYXQiKTsKK2lzKCAkcmVzdWx0LCBxcXtbMSwy KXxbMjAwMC0wMS0wMSwyMDEwLTAxLTAxKXxhCitbMiwzKXxbMjAwMC0wMS0wMSwyMDEwLTAx LTAxKXxhCitbMyw0KXxbMjAwMC0wMS0wMSwyMDEwLTAxLTAxKXxhCitbNCw1KXxbMjAwMC0w MS0wMSwyMDEwLTAxLTAxKXxhfSwgJ3JlcGxpY2F0ZWQgdGVtcG9yYWxfbm9fa2V5IE5PVEhJ TkcnKTsKKworIyByZXBsaWNhdGUgd2l0aCBhIHByaW1hcnkga2V5OgorCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0ZW1wb3Jh bF9wayAoaWQsIHZhbGlkX2F0LCBhKQorICAgVkFMVUVTICgnWzIsMyknLCAnWzIwMDAtMDEt MDEsMjAxMC0wMS0wMSknLCAnYScpLAorICAgICAgICAgICgnWzMsNCknLCAnWzIwMDAtMDEt MDEsMjAxMC0wMS0wMSknLCAnYScpLAorICAgICAgICAgICgnWzQsNSknLCAnWzIwMDAtMDEt MDEsMjAxMC0wMS0wMSknLCAnYScpIik7CisKKygkcmVzdWx0LCAkc3Rkb3V0LCAkc3RkZXJy KSA9ICRub2RlX3B1Ymxpc2hlci0+cHNxbCgncG9zdGdyZXMnLAorCSJVUERBVEUgdGVtcG9y YWxfcGsgU0VUIGEgPSAnYicgV0hFUkUgaWQgPSAnWzIsMyknIik7CitpcyggJHN0ZGVyciwK KwlxcShwc3FsOjxzdGRpbj46MTogRVJST1I6ICBjYW5ub3QgdXBkYXRlIHRhYmxlICJ0ZW1w b3JhbF9wayIgYmVjYXVzZSBpdCBkb2VzIG5vdCBoYXZlIGEgcmVwbGljYSBpZGVudGl0eSBh bmQgcHVibGlzaGVzIHVwZGF0ZXMKK0hJTlQ6ICBUbyBlbmFibGUgdXBkYXRpbmcgdGhlIHRh YmxlLCBzZXQgUkVQTElDQSBJREVOVElUWSB1c2luZyBBTFRFUiBUQUJMRS4pLAorCSJjYW4n dCBVUERBVEUgdGVtcG9yYWxfcGsgTk9USElORyIpOworCisoJHJlc3VsdCwgJHN0ZG91dCwg JHN0ZGVycikgPSAkbm9kZV9wdWJsaXNoZXItPnBzcWwoJ3Bvc3RncmVzJywKKwkiREVMRVRF IEZST00gdGVtcG9yYWxfcGsgV0hFUkUgaWQgPSAnWzMsNCknIik7CitpcyggJHN0ZGVyciwK KwlxcShwc3FsOjxzdGRpbj46MTogRVJST1I6ICBjYW5ub3QgZGVsZXRlIGZyb20gdGFibGUg InRlbXBvcmFsX3BrIiBiZWNhdXNlIGl0IGRvZXMgbm90IGhhdmUgYSByZXBsaWNhIGlkZW50 aXR5IGFuZCBwdWJsaXNoZXMgZGVsZXRlcworSElOVDogIFRvIGVuYWJsZSBkZWxldGluZyBm cm9tIHRoZSB0YWJsZSwgc2V0IFJFUExJQ0EgSURFTlRJVFkgdXNpbmcgQUxURVIgVEFCTEUu KSwKKwkiY2FuJ3QgREVMRVRFIHRlbXBvcmFsX3BrIE5PVEhJTkciKTsKKworJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisKKyRyZXN1bHQgPSAkbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUICogRlJPTSB0ZW1w b3JhbF9wayBPUkRFUiBCWSBpZCwgdmFsaWRfYXQiKTsKK2lzKCAkcmVzdWx0LCBxcXtbMSwy KXxbMjAwMC0wMS0wMSwyMDEwLTAxLTAxKXxhCitbMiwzKXxbMjAwMC0wMS0wMSwyMDEwLTAx LTAxKXxhCitbMyw0KXxbMjAwMC0wMS0wMSwyMDEwLTAxLTAxKXxhCitbNCw1KXxbMjAwMC0w MS0wMSwyMDEwLTAxLTAxKXxhfSwgJ3JlcGxpY2F0ZWQgdGVtcG9yYWxfcGsgTk9USElORycp OworCisjIHJlcGxpY2F0ZSB3aXRoIGEgdW5pcXVlIGtleToKKworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gdGVtcG9yYWxfdW5p cXVlIChpZCwgdmFsaWRfYXQsIGEpCisgICBWQUxVRVMgKCdbMiwzKScsICdbMjAwMC0wMS0w MSwyMDEwLTAxLTAxKScsICdhJyksCisgICAgICAgICAgKCdbMyw0KScsICdbMjAwMC0wMS0w MSwyMDEwLTAxLTAxKScsICdhJyksCisgICAgICAgICAgKCdbNCw1KScsICdbMjAwMC0wMS0w MSwyMDEwLTAxLTAxKScsICdhJykiKTsKKworKCRyZXN1bHQsICRzdGRvdXQsICRzdGRlcnIp ID0gJG5vZGVfcHVibGlzaGVyLT5wc3FsKCdwb3N0Z3JlcycsCisJIlVQREFURSB0ZW1wb3Jh bF91bmlxdWUgU0VUIGEgPSAnYicgV0hFUkUgaWQgPSAnWzIsMyknIik7CitpcyggJHN0ZGVy ciwKKwlxcShwc3FsOjxzdGRpbj46MTogRVJST1I6ICBjYW5ub3QgdXBkYXRlIHRhYmxlICJ0 ZW1wb3JhbF91bmlxdWUiIGJlY2F1c2UgaXQgZG9lcyBub3QgaGF2ZSBhIHJlcGxpY2EgaWRl bnRpdHkgYW5kIHB1Ymxpc2hlcyB1cGRhdGVzCitISU5UOiAgVG8gZW5hYmxlIHVwZGF0aW5n IHRoZSB0YWJsZSwgc2V0IFJFUExJQ0EgSURFTlRJVFkgdXNpbmcgQUxURVIgVEFCTEUuKSwK KwkiY2FuJ3QgVVBEQVRFIHRlbXBvcmFsX3VuaXF1ZSBOT1RISU5HIik7CisKKygkcmVzdWx0 LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRub2RlX3B1Ymxpc2hlci0+cHNxbCgncG9zdGdyZXMn LAorCSJERUxFVEUgRlJPTSB0ZW1wb3JhbF91bmlxdWUgV0hFUkUgaWQgPSAnWzMsNCknIik7 CitpcyggJHN0ZGVyciwKKwlxcShwc3FsOjxzdGRpbj46MTogRVJST1I6ICBjYW5ub3QgZGVs ZXRlIGZyb20gdGFibGUgInRlbXBvcmFsX3VuaXF1ZSIgYmVjYXVzZSBpdCBkb2VzIG5vdCBo YXZlIGEgcmVwbGljYSBpZGVudGl0eSBhbmQgcHVibGlzaGVzIGRlbGV0ZXMKK0hJTlQ6ICBU byBlbmFibGUgZGVsZXRpbmcgZnJvbSB0aGUgdGFibGUsIHNldCBSRVBMSUNBIElERU5USVRZ IHVzaW5nIEFMVEVSIFRBQkxFLiksCisJImNhbid0IERFTEVURSB0ZW1wb3JhbF91bmlxdWUg Tk9USElORyIpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEn KTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LAorCSJTRUxFQ1QgKiBGUk9NIHRlbXBvcmFsX3VuaXF1ZSBPUkRFUiBCWSBpZCwgdmFsaWRf YXQiKTsKK2lzKCAkcmVzdWx0LCBxcXtbMSwyKXxbMjAwMC0wMS0wMSwyMDEwLTAxLTAxKXxh CitbMiwzKXxbMjAwMC0wMS0wMSwyMDEwLTAxLTAxKXxhCitbMyw0KXxbMjAwMC0wMS0wMSwy MDEwLTAxLTAxKXxhCitbNCw1KXxbMjAwMC0wMS0wMSwyMDEwLTAxLTAxKXxhfSwgJ3JlcGxp Y2F0ZWQgdGVtcG9yYWxfdW5pcXVlIE5PVEhJTkcnKTsKKworIyBjbGVhbnVwCisKK2Ryb3Bf ZXZlcnl0aGluZygpOworCitkb25lX3Rlc3RpbmcoKTsKLS0gCjIuNDIuMAoK --------------MTdPqxgc3LLXXWMcgd7pnXZX--