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 1vBagu-00129u-MO for pgsql-hackers@arkaria.postgresql.org; Wed, 22 Oct 2025 15:23:56 +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 1vBagt-00HHb9-Ax for pgsql-hackers@arkaria.postgresql.org; Wed, 22 Oct 2025 15:23:54 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vBags-00HHb1-V3 for pgsql-hackers@lists.postgresql.org; Wed, 22 Oct 2025 15:23:54 +0000 Received: from mail-pf1-x42a.google.com ([2607:f8b0:4864:20::42a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vBagp-003dTv-14 for pgsql-hackers@postgresql.org; Wed, 22 Oct 2025 15:23:53 +0000 Received: by mail-pf1-x42a.google.com with SMTP id d2e1a72fcca58-7a213c3c3f5so9106360b3a.3 for ; Wed, 22 Oct 2025 08:23:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761146628; x=1761751428; darn=postgresql.org; h=in-reply-to:references:to:from:subject:cc:message-id:date :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=kigTiSK23Qjqsmq1VkHYgNsBXxsZjY5Cz+B8ZIyZ8NE=; b=VrKfwIidQZQKEZ8crkNnffmiwj4a0IrBkqIzteeuSs4VQH9zih9rv8QYkH4oAHZGlU FFkoUTKKFNedE+4nqh0PqtsPJHvHVlh5FqfCJwHdH1a2qX+12I8/cjb6QI4J4lRjTdk7 tyBKKoK4WoEd29/qQSZzzA8l4JaS1F8CDP0D8YJOhBOMhT2a6nL97pZwtJYWe1jHnCYl 6Wve09/NhhUCt59G5/WT7KUUHOg+gBZmFqejaWk9uHKRqet5u8t81cTvdvR+S5PQfWfm QPzY1ZJccTFlZYd7ZOHGzHJC+7ZGtRNe5+zvrOmXBGJJkiffhLz1ODohMU4YC3S7nZBq zvHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761146628; x=1761751428; h=in-reply-to:references:to:from:subject:cc:message-id:date :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=kigTiSK23Qjqsmq1VkHYgNsBXxsZjY5Cz+B8ZIyZ8NE=; b=fYPUkf+cH82t7xNxJ/JfKYSjbhH4DoGNWG6eSylGIvTLurkN2RrTFxnhnrparE0ALO F+jDMDMKAmisdY4pobbjnmD792WnHLF3ecUAW/60IW1VStDROjSwxQm5D7SAm2yd9XHa Eh3QV8Hl8JYWzWCArK8cg3aLHtLM2mTMzKuRI7nAhHh9nxlikQ9+EWaw9widn5QtedTE rfaPoJ3yPIgbp+PmnNeRJh5i4l0F9I8hHVjxpEYWoJ1kjw0tNrbqopX8Epq1rWl4u3+g pVVATXdcAyDJubce6o/2fX7BJFO9Ta320sfJ1kzU9ynQytt73ou04Rq926DP9bO4h17I p91w== X-Forwarded-Encrypted: i=1; AJvYcCWlEiOxzIU+UN68muTxxyhhOncSrGba/k5z2+NsZW+RH5PypPgeK/58F6l4dlabIGtun+lwnOY+a3QmIXpJ@postgresql.org X-Gm-Message-State: AOJu0YzLWKUG6R2R/bsGeo7btQy34WtHrVGKRd1xN407lvettRpTNvSX UPY88Fp8vJxH3Qa7SeZzcxAMGV1SRQYW3BVNZtEWtwbTzILBfWDXKnyC X-Gm-Gg: ASbGncvjG4bhVHwKe+4E/zUSqybqR4oy/0Z607bvEZ17RxbyScM1w55eHPAAD/go83A 7uFwBHiW6Ku2UYDE4As5ruywKqChepXlu+u8vQLSgdSSGa7ShqDu5b9Y4YH69NmvZnOPZF7T2F+ dBIlZek3I/ZAGvLxsz0YOZ6QkdGPtKTzbna03gV8hYfPMCIy/IvQdg1zI1mMj0I2olz1Uua1iap eeIl1Rcefxmm/dcfQ4r4umDYVmM8D5lGo+Nac2+3A6+eMW6Uaz8i36LGFr2xwhNdcXQs/uR2MtW 3eS4sIbm4ZV0dmvqt7Ly+ScI7Hc0EmvsX4Jk6Z5wxgr93XeEg3neaS9/IMwkGbpvAoaHdFlnl4V rW9qjywhie6tQFJfyhXFaKdFBqgUCIVyz1FY7QgwFKTXJG0PVhy+Xs3wurNFOzvgYXc2REPZGxe 4ePxLTumt4FuZYtY1ZLnBy+/6qYx41Hm8Cqg== X-Google-Smtp-Source: AGHT+IHwmGNREwbepZf/XxZvCAAlc5QqQMmWMn/+LQeE8qI/Tl1DuwP/GMxV/+W/MI3QP/XByNoKYA== X-Received: by 2002:a17:902:d58d:b0:269:9719:fffd with SMTP id d9443c01a7336-290c9cf9775mr263480795ad.1.1761146627641; Wed, 22 Oct 2025 08:23:47 -0700 (PDT) Received: from localhost ([2804:14d:328a:a59c:c9cd:ca5d:c35b:7720]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-29246ebcf93sm142372245ad.3.2025.10.22.08.23.43 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 22 Oct 2025 08:23:46 -0700 (PDT) Content-Type: multipart/mixed; boundary=bf215125f67af063b4fe8611fc3b332397b1eae0326ea87b06cc024739fb Mime-Version: 1.0 Date: Wed, 22 Oct 2025 12:23:42 -0300 Message-Id: Cc: =?utf-8?q?=C3=81lvaro_Herrera?= , "Joel Jacobson" , "Arseniy Mukhin" , "Rishu Bagga" , "Yura Sokolov" , "Daniil Davydov" <3danissimo@gmail.com>, "Alexandra Wang" , "pgsql-hackers" , "Tom Lane" Subject: Re: LISTEN/NOTIFY bug: VACUUM sets frozenxid past a xid in async queue From: "Matheus Alcantara" To: "Masahiko Sawada" , "Matheus Alcantara" X-Mailer: aerc 0.21.0 References: <202510201414.56f2msqusjla@alvherre.pgsql> In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --bf215125f67af063b4fe8611fc3b332397b1eae0326ea87b06cc024739fb Content-Type: multipart/alternative; boundary=6eb748b0da1fd495f712b812654ea5f4646d7090bf6eb7ee0d08cfcadfc1 --6eb748b0da1fd495f712b812654ea5f4646d7090bf6eb7ee0d08cfcadfc1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8 On Wed Oct 22, 2025 at 1:31 AM -03, Masahiko Sawada wrote: > On Tue, Oct 21, 2025 at 4:16=E2=80=AFPM Matheus Alcantara >> > I think adding a new GUC would be overkill for this fix. As for >> > dropping old notifications from the queue, we probably don't need to >> > make it configurable - we could simply drop notifications whose commit >> > status is no longer available (instead of raising an error). >> > >> IIUC this is about not making the vacuum freeze considering the oldest >> xid on the queue but just remove notifications whose transaction status >> is no longer available right? Since currently when the error happens we >> already can't process the notifications it seems a reasonable way to go >> IMO. > > On second thought, simply hiding the error would be worse than our > current behavior. Users wouldn't know their notifications are being > dropped, as they often don't check WARNINGs. The more frequently they > try to freeze XIDs, the more notifications they'd lose. To avoid > silent discards, they would need to increase > autovacuum_vacuum_max_freeze_age to accommodate more clog entries, but > this increases the risk of XID wraparound. I think the proposed > approach modifying the vacuum freeze to consider the oldest XID on the > queue would be better. This has a downside as I mentioned: processes > in idle-in-transaction state even without backend_xmin and backend_xid > can still accumulate unconsumed notifications. However, leaving > transactions in idle-in-transaction state for a long time is bad > practice anyway. While we might want to consider adding a safeguard > for this case, I guess it would rarely occur in practice. > I'm attaching a v9 patch which is based on the idea of changing the vacuum freeze to consider the oldest xid on the listen/notify queue. The 0001 patch is from Joel that it was previously sent on [1] with some small tweaks and the 0002 is the TAP tests introduced on the previously versions by me and by Arseniy. I keep it separate because I'm not sure if it's all suitable for back-pacthing. I'm wondering if the 002_aborted_tx_notifies.pl is still needed with this architecture being used. I think that it's not, but perhaps is a good test to keep it? [1] https://www.postgresql.org/message-id/25651193-da4e-4185-a564-f2efa6b0c= 8a4%40app.fastmail.com -- Matheus Alcantara --6eb748b0da1fd495f712b812654ea5f4646d7090bf6eb7ee0d08cfcadfc1-- --bf215125f67af063b4fe8611fc3b332397b1eae0326ea87b06cc024739fb Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v9-0001-Prevent-VACUUM-from-truncating-XIDs-still-present.patch Content-Type: text/plain; charset=utf-8; name=v9-0001-Prevent-VACUUM-from-truncating-XIDs-still-present.patch RnJvbSBhN2UzZjQzZjMwOTE1MjBmZjZkY2FhN2QwYjBhM2I1YTc0NzI5ZjE5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9yZz4KRGF0 ZTogU3VuLCAxOSBPY3QgMjAyNSAxODo1NToyNSArMDIwMApTdWJqZWN0OiBbUEFUQ0ggdjkgMS8y XSBQcmV2ZW50IFZBQ1VVTSBmcm9tIHRydW5jYXRpbmcgWElEcyBzdGlsbCBwcmVzZW50IGluCiBu b3RpZmljYXRpb24gcXVldWUKClZBQ1VVTSdzIGNvbXB1dGF0aW9uIG9mIGRhdGZyb3plbnhpZCBk aWQgbm90IGFjY291bnQgZm9yIHRyYW5zYWN0aW9uIElEcwppbiB0aGUgTElTVEVOL05PVElGWSBx dWV1ZS4gIFRoaXMgYWxsb3dlZCBWQUNVVU0gdG8gdHJ1bmNhdGUgY2xvZwplbnRyaWVzIGZvciBY SURzIHRoYXQgd2VyZSBzdGlsbCByZWZlcmVuY2VkIGJ5IHF1ZXVlZCBub3RpZmljYXRpb25zLApj YXVzaW5nIGJhY2tlbmRzIHRvIGZhaWwgaW4gVHJhbnNhY3Rpb25JZERpZENvbW1pdCB3aGVuIGxh dGVyIHByb2Nlc3NpbmcKdGhvc2Ugbm90aWZpY2F0aW9ucy4KCkZpeCBieSBhZGRpbmcgR2V0T2xk ZXN0UXVldWVkTm90aWZ5WGlkIHRvIGZpbmQgdGhlIG9sZGVzdCBYSUQgaW4gcXVldWVkCm5vdGlm aWNhdGlvbnMgZm9yIHRoZSBjdXJyZW50IGRhdGFiYXNlLCBhbmQgY29uc3RyYWluaW5nIGRhdGZy b3plbnhpZCB0bwpub3QgcGFzcyB0aGF0LiAgVGhlIGZ1bmN0aW9uIHNjYW5zIGZyb20gUVVFVUVf VEFJTCwgc2luY2Ugbm90aWZpY2F0aW9ucwptYXkgaGF2ZSBiZWVuIHdyaXR0ZW4gYmVmb3JlIGFu eSBsaXN0ZW5lcnMgZXhpc3RlZC4KClRvIGF2b2lkIGNvZGUgZHVwbGljYXRpb24sIHJlZmFjdG9y IFNMUlUgcGFnZS1yZWFkaW5nIGNvZGUgaW50byBhIG5ldwpoZWxwZXIgZnVuY3Rpb24gYXN5bmNR dWV1ZVJlYWRQYWdlVG9CdWZmZXIuCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYyAg fCAxMzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLQogc3JjL2JhY2tlbmQvY29t bWFuZHMvdmFjdXVtLmMgfCAgMTIgKysrCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9hc3luYy5oICB8 ICAgMyArCiAzIGZpbGVzIGNoYW5nZWQsIDEzMCBpbnNlcnRpb25zKCspLCAyNCBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvYXN5bmMuYwppbmRleCA0YmQzN2Q1YmViNS4uN2M5ZDc4MzFjOWYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvYXN5bmMuYwpAQCAtMTg0MSw2ICsxODQxLDQ0IEBAIFByb2Nlc3NOb3RpZnlJbnRlcnJ1 cHQoYm9vbCBmbHVzaCkKIAkJUHJvY2Vzc0luY29taW5nTm90aWZ5KGZsdXNoKTsKIH0KIAorLyoK KyAqIFJlYWQgYSBwYWdlIGZyb20gdGhlIFNMUlUgcXVldWUgaW50byBhIGxvY2FsIGJ1ZmZlci4K KyAqCisgKiBSZWFkcyB0aGUgcGFnZSBjb250YWluaW5nICdwb3MnLCBjb3B5aW5nIHRoZSBkYXRh IGZyb20gdGhlIGN1cnJlbnQgb2Zmc2V0CisgKiBlaXRoZXIgdG8gdGhlIGVuZCBvZiB0aGUgcGFn ZSBvciB1cCB0byAnaGVhZCcgKHdoaWNoZXZlciBjb21lcyBmaXJzdCkKKyAqIGludG8gcGFnZV9i dWZmZXIuCisgKi8KK3N0YXRpYyB2b2lkCithc3luY1F1ZXVlUmVhZFBhZ2VUb0J1ZmZlcihRdWV1 ZVBvc2l0aW9uIHBvcywgUXVldWVQb3NpdGlvbiBoZWFkLAorCQkJCQkJICAgY2hhciAqcGFnZV9i dWZmZXIpCit7CisJaW50NjQJCWN1cnBhZ2UgPSBRVUVVRV9QT1NfUEFHRShwb3MpOworCWludAkJ CWN1cm9mZnNldCA9IFFVRVVFX1BPU19PRkZTRVQocG9zKTsKKwlpbnQJCQlzbG90bm87CisJaW50 CQkJY29weXNpemU7CisKKwlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seShOb3Rp ZnlDdGwsIGN1cnBhZ2UsCisJCQkJCQkJCQkJSW52YWxpZFRyYW5zYWN0aW9uSWQpOworCisJaWYg KGN1cnBhZ2UgPT0gUVVFVUVfUE9TX1BBR0UoaGVhZCkpCisJeworCQkvKiB3ZSBvbmx5IHdhbnQg dG8gcmVhZCBhcyBmYXIgYXMgaGVhZCAqLworCQljb3B5c2l6ZSA9IFFVRVVFX1BPU19PRkZTRVQo aGVhZCkgLSBjdXJvZmZzZXQ7CisJCWlmIChjb3B5c2l6ZSA8IDApCisJCQljb3B5c2l6ZSA9IDA7 CQkvKiBqdXN0IGZvciBzYWZldHkgKi8KKwl9CisJZWxzZQorCXsKKwkJLyogZmV0Y2ggYWxsIHRo ZSByZXN0IG9mIHRoZSBwYWdlICovCisJCWNvcHlzaXplID0gUVVFVUVfUEFHRVNJWkUgLSBjdXJv ZmZzZXQ7CisJfQorCisJbWVtY3B5KHBhZ2VfYnVmZmVyICsgY3Vyb2Zmc2V0LAorCQkgICBOb3Rp ZnlDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIGN1cm9mZnNldCwKKwkJICAgY29w eXNpemUpOworCS8qIFJlbGVhc2UgbG9jayB0aGF0IHdlIGdvdCBmcm9tIFNpbXBsZUxydVJlYWRQ YWdlX1JlYWRPbmx5KCkgKi8KKwlMV0xvY2tSZWxlYXNlKFNpbXBsZUxydUdldEJhbmtMb2NrKE5v dGlmeUN0bCwgY3VycGFnZSkpOworfQogCiAvKgogICogUmVhZCBhbGwgcGVuZGluZyBub3RpZmlj YXRpb25zIGZyb20gdGhlIHF1ZXVlLCBhbmQgZGVsaXZlciBhcHByb3ByaWF0ZQpAQCAtMTkzMiwz NiArMTk3MCwxMyBAQCBhc3luY1F1ZXVlUmVhZEFsbE5vdGlmaWNhdGlvbnModm9pZCkKIAogCQlk bwogCQl7Ci0JCQlpbnQ2NAkJY3VycGFnZSA9IFFVRVVFX1BPU19QQUdFKHBvcyk7Ci0JCQlpbnQJ CQljdXJvZmZzZXQgPSBRVUVVRV9QT1NfT0ZGU0VUKHBvcyk7Ci0JCQlpbnQJCQlzbG90bm87Ci0J CQlpbnQJCQljb3B5c2l6ZTsKLQogCQkJLyoKIAkJCSAqIFdlIGNvcHkgdGhlIGRhdGEgZnJvbSBT TFJVIGludG8gYSBsb2NhbCBidWZmZXIsIHNvIGFzIHRvIGF2b2lkCiAJCQkgKiBob2xkaW5nIHRo ZSBTTFJVIGxvY2sgd2hpbGUgd2UgYXJlIGV4YW1pbmluZyB0aGUgZW50cmllcyBhbmQKIAkJCSAq IHBvc3NpYmx5IHRyYW5zbWl0dGluZyB0aGVtIHRvIG91ciBmcm9udGVuZC4gIENvcHkgb25seSB0 aGUgcGFydAogCQkJICogb2YgdGhlIHBhZ2Ugd2Ugd2lsbCBhY3R1YWxseSBpbnNwZWN0LgogCQkJ ICovCi0JCQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seShOb3RpZnlDdGwsIGN1 cnBhZ2UsCi0JCQkJCQkJCQkJCQlJbnZhbGlkVHJhbnNhY3Rpb25JZCk7Ci0JCQlpZiAoY3VycGFn ZSA9PSBRVUVVRV9QT1NfUEFHRShoZWFkKSkKLQkJCXsKLQkJCQkvKiB3ZSBvbmx5IHdhbnQgdG8g cmVhZCBhcyBmYXIgYXMgaGVhZCAqLwotCQkJCWNvcHlzaXplID0gUVVFVUVfUE9TX09GRlNFVCho ZWFkKSAtIGN1cm9mZnNldDsKLQkJCQlpZiAoY29weXNpemUgPCAwKQotCQkJCQljb3B5c2l6ZSA9 IDA7CS8qIGp1c3QgZm9yIHNhZmV0eSAqLwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCS8qIGZl dGNoIGFsbCB0aGUgcmVzdCBvZiB0aGUgcGFnZSAqLwotCQkJCWNvcHlzaXplID0gUVVFVUVfUEFH RVNJWkUgLSBjdXJvZmZzZXQ7Ci0JCQl9Ci0JCQltZW1jcHkocGFnZV9idWZmZXIuYnVmICsgY3Vy b2Zmc2V0LAotCQkJCSAgIE5vdGlmeUN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dICsg Y3Vyb2Zmc2V0LAotCQkJCSAgIGNvcHlzaXplKTsKLQkJCS8qIFJlbGVhc2UgbG9jayB0aGF0IHdl IGdvdCBmcm9tIFNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5KCkgKi8KLQkJCUxXTG9ja1JlbGVh c2UoU2ltcGxlTHJ1R2V0QmFua0xvY2soTm90aWZ5Q3RsLCBjdXJwYWdlKSk7CisJCQlhc3luY1F1 ZXVlUmVhZFBhZ2VUb0J1ZmZlcihwb3MsIGhlYWQsIHBhZ2VfYnVmZmVyLmJ1Zik7CiAKIAkJCS8q CiAJCQkgKiBQcm9jZXNzIG1lc3NhZ2VzIHVwIHRvIHRoZSBzdG9wIHBvc2l0aW9uLCBlbmQgb2Yg cGFnZSwgb3IgYW4KQEAgLTIwOTcsNiArMjExMiw4MiBAQCBhc3luY1F1ZXVlUHJvY2Vzc1BhZ2VF bnRyaWVzKHZvbGF0aWxlIFF1ZXVlUG9zaXRpb24gKmN1cnJlbnQsCiAJcmV0dXJuIHJlYWNoZWRT dG9wOwogfQogCisvKgorICogR2V0IHRoZSBvbGRlc3QgWElEIGluIHRoZSBub3RpZmljYXRpb24g cXVldWUgdGhhdCBoYXMgbm90IHlldCBiZWVuCisgKiBwcm9jZXNzZWQgYnkgYWxsIGxpc3Rlbmlu ZyBiYWNrZW5kcy4KKyAqCisgKiBSZXR1cm5zIEludmFsaWRUcmFuc2FjdGlvbklkIGlmIHRoZXJl IGFyZSBubyB1bnByb2Nlc3NlZCBub3RpZmljYXRpb25zLgorICovCitUcmFuc2FjdGlvbklkCitH ZXRPbGRlc3RRdWV1ZWROb3RpZnlYaWQodm9pZCkKK3sKKwlRdWV1ZVBvc2l0aW9uIHBvczsKKwlR dWV1ZVBvc2l0aW9uIGhlYWQ7CisJVHJhbnNhY3Rpb25JZCBvbGRlc3RYaWQgPSBJbnZhbGlkVHJh bnNhY3Rpb25JZDsKKworCS8qIHBhZ2VfYnVmZmVyIG11c3QgYmUgYWRlcXVhdGVseSBhbGlnbmVk LCBzbyB1c2UgYSB1bmlvbiAqLworCXVuaW9uCisJeworCQljaGFyCQlidWZbUVVFVUVfUEFHRVNJ WkVdOworCQlBc3luY1F1ZXVlRW50cnkgYWxpZ247CisJfQkJCXBhZ2VfYnVmZmVyOworCisJTFdM b2NrQWNxdWlyZShOb3RpZnlRdWV1ZUxvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwkvKgorCSAqIFdl IG11c3Qgc3RhcnQgYXQgUVVFVUVfVEFJTCBzaW5jZSBub3RpZmljYXRpb24gZGF0YSBtaWdodCBo YXZlIGJlZW4KKwkgKiB3cml0dGVuIGJlZm9yZSB0aGVyZSB3ZXJlIGFueSBsaXN0ZW5pbmcgYmFj a2VuZHMuCisJICovCisJcG9zID0gUVVFVUVfVEFJTDsKKwloZWFkID0gUVVFVUVfSEVBRDsKKwor CS8qIElmIHRoZSBxdWV1ZSBpcyBlbXB0eSwgbm8gWElEcyBuZWVkIHByb3RlY3Rpb24gKi8KKwlp ZiAoUVVFVUVfUE9TX0VRVUFMKHBvcywgaGVhZCkpCisJeworCQlMV0xvY2tSZWxlYXNlKE5vdGlm eVF1ZXVlTG9jayk7CisJCXJldHVybiBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwl9CisKKwl3aGls ZSAoIVFVRVVFX1BPU19FUVVBTChwb3MsIGhlYWQpKQorCXsKKwkJaW50CQkJY3Vyb2Zmc2V0Owor CQlBc3luY1F1ZXVlRW50cnkgKnFlOworCisJCS8qIFJlYWQgdGhlIGN1cnJlbnQgcGFnZSBmcm9t IFNMUlUgaW50byBvdXIgbG9jYWwgYnVmZmVyICovCisJCWFzeW5jUXVldWVSZWFkUGFnZVRvQnVm ZmVyKHBvcywgaGVhZCwgcGFnZV9idWZmZXIuYnVmKTsKKworCQljdXJvZmZzZXQgPSBRVUVVRV9Q T1NfT0ZGU0VUKHBvcyk7CisKKwkJLyogUHJvY2VzcyBhbGwgZW50cmllcyBvbiB0aGlzIHBhZ2Ug dXAgdG8gaGVhZCAqLworCQl3aGlsZSAoY3Vyb2Zmc2V0ICsgUVVFVUVBTElHTihBc3luY1F1ZXVl RW50cnlFbXB0eVNpemUpIDw9IFFVRVVFX1BBR0VTSVpFICYmCisJCQkgICAhUVVFVUVfUE9TX0VR VUFMKHBvcywgaGVhZCkpCisJCXsKKwkJCXFlID0gKEFzeW5jUXVldWVFbnRyeSAqKSAocGFnZV9i dWZmZXIuYnVmICsgY3Vyb2Zmc2V0KTsKKworCQkJLyoKKwkJCSAqIENoZWNrIGlmIHRoaXMgZW50 cnkgaXMgZm9yIG91ciBkYXRhYmFzZSBhbmQgaGFzIGEgdmFsaWQgWElELgorCQkJICogT25seSBl bnRyaWVzIGZvciBvdXIgZGF0YWJhc2UgbWF0dGVyIGZvciBvdXIgZGF0ZnJvemVueGlkLgorCQkJ ICovCisJCQlpZiAocWUtPmRib2lkID09IE15RGF0YWJhc2VJZCAmJiBUcmFuc2FjdGlvbklkSXNW YWxpZChxZS0+eGlkKSkKKwkJCXsKKwkJCQlpZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKG9sZGVz dFhpZCkgfHwKKwkJCQkJVHJhbnNhY3Rpb25JZFByZWNlZGVzKHFlLT54aWQsIG9sZGVzdFhpZCkp CisJCQkJCW9sZGVzdFhpZCA9IHFlLT54aWQ7CisJCQl9CisKKwkJCS8qIEFkdmFuY2UgdG8gbmV4 dCBlbnRyeSAqLworCQkJaWYgKGFzeW5jUXVldWVBZHZhbmNlKCZwb3MsIHFlLT5sZW5ndGgpKQor CQkJCWJyZWFrOwkJCS8qIGFkdmFuY2VkIHRvIG5leHQgcGFnZSAqLworCisJCQljdXJvZmZzZXQg PSBRVUVVRV9QT1NfT0ZGU0VUKHBvcyk7CisJCX0KKwl9CisKKwlMV0xvY2tSZWxlYXNlKE5vdGlm eVF1ZXVlTG9jayk7CisKKwlyZXR1cm4gb2xkZXN0WGlkOworfQorCiAvKgogICogQWR2YW5jZSB0 aGUgc2hhcmVkIHF1ZXVlIHRhaWwgdmFyaWFibGUgdG8gdGhlIG1pbmltdW0gb2YgYWxsIHRoZQog ICogcGVyLWJhY2tlbmQgdGFpbCBwb2ludGVycy4gIFRydW5jYXRlIHBnX25vdGlmeSBzcGFjZSBp ZiBwb3NzaWJsZS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMKaW5kZXggZWQwM2UzYmQ1MGQuLjZjNjAxY2U4 MWFhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYworKysgYi9zcmMv YmFja2VuZC9jb21tYW5kcy92YWN1dW0uYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgImNh dGFsb2cvbmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19kYXRhYmFzZS5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfaW5oZXJpdHMuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9hc3luYy5o IgogI2luY2x1ZGUgImNvbW1hbmRzL2NsdXN0ZXIuaCIKICNpbmNsdWRlICJjb21tYW5kcy9kZWZy ZW0uaCIKICNpbmNsdWRlICJjb21tYW5kcy9wcm9ncmVzcy5oIgpAQCAtMTYxNyw2ICsxNjE4LDcg QEAgdmFjX3VwZGF0ZV9kYXRmcm96ZW54aWQodm9pZCkKIAlib29sCQlkaXJ0eSA9IGZhbHNlOwog CVNjYW5LZXlEYXRhIGtleVsxXTsKIAl2b2lkCSAgICppbnBsYWNlX3N0YXRlOworCVRyYW5zYWN0 aW9uSWQgb2xkZXN0Tm90aWZ5WGlkOwogCiAJLyoKIAkgKiBSZXN0cmljdCB0aGlzIHRhc2sgdG8g b25lIGJhY2tlbmQgcGVyIGRhdGFiYXNlLiAgVGhpcyBhdm9pZHMgcmFjZQpAQCAtMTczMyw2ICsx NzM1LDE2IEBAIHZhY191cGRhdGVfZGF0ZnJvemVueGlkKHZvaWQpCiAJaWYgKGJvZ3VzKQogCQly ZXR1cm47CiAKKwkvKgorCSAqIEFsc28gY29uc2lkZXIgdGhlIG9sZGVzdCBYSUQgaW4gdGhlIG5v dGlmaWNhdGlvbiBxdWV1ZSwgc2luY2UgYmFja2VuZHMKKwkgKiB3aWxsIG5lZWQgdG8gY2FsbCBU cmFuc2FjdGlvbklkRGlkQ29tbWl0KCkgb24gdGhvc2UgWElEcyB3aGVuCisJICogcHJvY2Vzc2lu ZyB0aGUgbm90aWZpY2F0aW9ucy4KKwkgKi8KKwlvbGRlc3ROb3RpZnlYaWQgPSBHZXRPbGRlc3RR dWV1ZWROb3RpZnlYaWQoKTsKKwlpZiAoVHJhbnNhY3Rpb25JZElzVmFsaWQob2xkZXN0Tm90aWZ5 WGlkKSAmJgorCQlUcmFuc2FjdGlvbklkUHJlY2VkZXMob2xkZXN0Tm90aWZ5WGlkLCBuZXdGcm96 ZW5YaWQpKQorCQluZXdGcm96ZW5YaWQgPSBvbGRlc3ROb3RpZnlYaWQ7CisKIAlBc3NlcnQoVHJh bnNhY3Rpb25JZElzTm9ybWFsKG5ld0Zyb3plblhpZCkpOwogCUFzc2VydChNdWx0aVhhY3RJZElz VmFsaWQobmV3TWluTXVsdGkpKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMv YXN5bmMuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2FzeW5jLmgKaW5kZXggZjc1YzNkZjk1NTYu LmFjMzIzYWRhNDkyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9hc3luYy5oCisr KyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2FzeW5jLmgKQEAgLTI2LDYgKzI2LDkgQEAgZXh0ZXJu IHZvaWQgTm90aWZ5TXlGcm9udEVuZChjb25zdCBjaGFyICpjaGFubmVsLAogCQkJCQkJCSBjb25z dCBjaGFyICpwYXlsb2FkLAogCQkJCQkJCSBpbnQzMiBzcmNQaWQpOwogCisvKiBnZXQgb2xkZXN0 IFhJRCBpbiB0aGUgbm90aWZpY2F0aW9uIHF1ZXVlIGZvciB2YWN1dW0gZnJlZXplICovCitleHRl cm4gVHJhbnNhY3Rpb25JZCBHZXRPbGRlc3RRdWV1ZWROb3RpZnlYaWQodm9pZCk7CisKIC8qIG5v dGlmeS1yZWxhdGVkIFNRTCBzdGF0ZW1lbnRzICovCiBleHRlcm4gdm9pZCBBc3luY19Ob3RpZnko Y29uc3QgY2hhciAqY2hhbm5lbCwgY29uc3QgY2hhciAqcGF5bG9hZCk7CiBleHRlcm4gdm9pZCBB c3luY19MaXN0ZW4oY29uc3QgY2hhciAqY2hhbm5lbCk7Ci0tIAoyLjUxLjAKCg== --bf215125f67af063b4fe8611fc3b332397b1eae0326ea87b06cc024739fb Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v9-0002-Add-tap-tests-for-listen-notify-vacuum-freeze.patch Content-Type: text/plain; charset=utf-8; name=v9-0002-Add-tap-tests-for-listen-notify-vacuum-freeze.patch RnJvbSBiNGM3YzQzYTZjM2YyYjU3M2Y2NmY0ZTVlNzJmNmU0ODU0NDZhZjNiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRoZXVzIEFsY2FudGFyYSA8bXRocy5kZXZAcG0ubWU+CkRh dGU6IFdlZCwgMjIgT2N0IDIwMjUgMTE6MDY6MTggLTAzMDAKU3ViamVjdDogW1BBVENIIHY5IDIv Ml0gQWRkIHRhcCB0ZXN0cyBmb3IgbGlzdGVuIG5vdGlmeSB2YWN1dW0gZnJlZXplCgotLS0KIHNy Yy90ZXN0L21vZHVsZXMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICB8ICAxICsKIHNyYy90 ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICB8ICAxICsKIHNyYy90ZXN0 L21vZHVsZXMvdGVzdF9saXN0ZW5fbm90aWZ5L01ha2VmaWxlICB8IDE5ICsrKysrCiAuLi4vbW9k dWxlcy90ZXN0X2xpc3Rlbl9ub3RpZnkvbWVzb24uYnVpbGQgICAgfCAxNCArKysrCiAuLi4vdGVz dF9saXN0ZW5fbm90aWZ5L3QvMDAxX3hpZF9mcmVlemUucGwgICAgfCA3NCArKysrKysrKysrKysr KysrKwogLi4uL3QvMDAyX2Fib3J0ZWRfdHhfbm90aWZpZXMucGwgICAgICAgICAgICAgIHwgNzkg KysrKysrKysrKysrKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAxODggaW5zZXJ0aW9ucygrKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9saXN0ZW5fbm90aWZ5L01h a2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2xpc3Rlbl9u b3RpZnkvbWVzb24uYnVpbGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rl c3RfbGlzdGVuX25vdGlmeS90LzAwMV94aWRfZnJlZXplLnBsCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2xpc3Rlbl9ub3RpZnkvdC8wMDJfYWJvcnRlZF90eF9ub3Rp Zmllcy5wbAoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUgYi9zcmMvdGVz dC9tb2R1bGVzL01ha2VmaWxlCmluZGV4IDkwMmE3OTU0MTAxLi5hMDE1Yzk2MWQzNSAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQorKysgYi9zcmMvdGVzdC9tb2R1bGVzL01h a2VmaWxlCkBAIC0yOSw2ICsyOSw3IEBAIFNVQkRJUlMgPSBcCiAJCSAgdGVzdF9pbnQxMjggXAog CQkgIHRlc3RfaW50ZWdlcnNldCBcCiAJCSAgdGVzdF9qc29uX3BhcnNlciBcCisJCSAgdGVzdF9s aXN0ZW5fbm90aWZ5IFwKIAkJICB0ZXN0X2xmaW5kIFwKIAkJICB0ZXN0X2x3bG9ja190cmFuY2hl cyBcCiAJCSAgdGVzdF9taXNjIFwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvbWVzb24u YnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCmluZGV4IDE0ZmM3NjFjNGNmLi42 YWYzMzQ0OGQ3YiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZAorKysg Yi9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCkBAIC0yOCw2ICsyOCw3IEBAIHN1YmRpcign dGVzdF9naW5wb3N0aW5nbGlzdCcpCiBzdWJkaXIoJ3Rlc3RfaW50MTI4JykKIHN1YmRpcigndGVz dF9pbnRlZ2Vyc2V0JykKIHN1YmRpcigndGVzdF9qc29uX3BhcnNlcicpCitzdWJkaXIoJ3Rlc3Rf bGlzdGVuX25vdGlmeScpCiBzdWJkaXIoJ3Rlc3RfbGZpbmQnKQogc3ViZGlyKCd0ZXN0X2x3bG9j a190cmFuY2hlcycpCiBzdWJkaXIoJ3Rlc3RfbWlzYycpCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfbGlzdGVuX25vdGlmeS9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9saXN0ZW5fbm90aWZ5L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi5jMWViNGZkZTM3MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9saXN0ZW5fbm90aWZ5L01ha2VmaWxlCkBAIC0wLDAgKzEsMTkgQEAKKyMgc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2xpc3Rlbl9ub3RpZnkvTWFrZWZpbGUKKworTU9EVUxFID0gdGVzdF9saXN0 ZW5fbm90aWZ5CitQR0ZJTEVERVNDID0gInRlc3RfbGlzdGVuX25vdGlmeSAtIHJlZ3Jlc3Npb24g dGVzdGluZyBmb3IgTElTVEVOL05PVElGWSBzdXBwb3J0IgorCitUQVBfVEVTVFMgPSAxCisKK0VY VFJBX0lOU1RBTEw9c3JjL3Rlc3QvbW9kdWxlcy94aWRfd3JhcGFyb3VuZAorCitpZmRlZiBVU0Vf UEdYUworUEdfQ09ORklHID0gcGdfY29uZmlnCitQR1hTIDo9ICQoc2hlbGwgJChQR19DT05GSUcp IC0tcGd4cykKK2luY2x1ZGUgJChQR1hTKQorZWxzZQorc3ViZGlyID0gc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2xpc3Rlbl9ub3RpZnkKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCitpbmNsdWRl ICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitpbmNsdWRlICQodG9wX3NyY2Rp cikvY29udHJpYi9jb250cmliLWdsb2JhbC5taworZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9saXN0ZW5fbm90aWZ5L21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2xpc3Rlbl9ub3RpZnkvbWVzb24uYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLmE2ODA1MmNkMzUzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2xpc3Rlbl9ub3RpZnkvbWVzb24uYnVpbGQKQEAgLTAsMCArMSwxNCBAQAor IyBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQg R3JvdXAKKwordGVzdHMgKz0geworICAnbmFtZSc6ICd0ZXN0X2xpc3Rlbl9ub3RpZnknLAorICAn c2QnOiBtZXNvbi5jdXJyZW50X3NvdXJjZV9kaXIoKSwKKyAgJ2JkJzogbWVzb24uY3VycmVudF9i dWlsZF9kaXIoKSwKKyAgJ3RhcCc6IHsKKyAgICAndGVzdHMnOiBbCisgICAgICAndC8wMDFfeGlk X2ZyZWV6ZS5wbCcsCisgICAgICAndC8wMDJfYWJvcnRlZF90eF9ub3RpZmllcy5wbCcKKyAgICBd LAorICB9LAorfQorCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbGlzdGVuX25v dGlmeS90LzAwMV94aWRfZnJlZXplLnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2xpc3Rlbl9u b3RpZnkvdC8wMDFfeGlkX2ZyZWV6ZS5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uYThiYmQyNjhjMGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfbGlzdGVuX25vdGlmeS90LzAwMV94aWRfZnJlZXplLnBsCkBAIC0wLDAgKzEsNzQgQEAK KyMgQ29weXJpZ2h0IChjKSAyMDI0LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7Cit1c2Ug RmlsZTo6UGF0aCBxdyhta3BhdGgpOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1 c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworbXkgJG5vZGUg PSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGUnKTsKKyRub2RlLT5pbml0Owor JG5vZGUtPnN0YXJ0OworCisjIENoZWNrIGlmIHRoZSBleHRlbnNpb24geGlkX3dyYXBhcm91bmQg aXMgYXZhaWxhYmxlLCBhcyBpdCBtYXkgYmUKKyMgcG9zc2libGUgdGhhdCB0aGlzIHNjcmlwdCBp cyBydW4gd2l0aCBpbnN0YWxsY2hlY2ssIHdoZXJlIHRoZSBtb2R1bGUKKyMgd291bGQgbm90IGJl IGluc3RhbGxlZCBieSBkZWZhdWx0LgoraWYgKCEkbm9kZS0+Y2hlY2tfZXh0ZW5zaW9uKCd4aWRf d3JhcGFyb3VuZCcpKQoreworCXBsYW4gc2tpcF9hbGwgPT4gJ0V4dGVuc2lvbiB4aWRfd3JhcGFy b3VuZCBub3QgaW5zdGFsbGVkJzsKK30KKworIyBTZXR1cAorJG5vZGUtPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAnQ1JFQVRFIEVYVEVOU0lPTiB4aWRfd3JhcGFyb3VuZCcpOworJG5vZGUtPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSdDUkVBVEUgVEFCTEUgdCBBUyBTRUxFQ1QgZyBBUyBhLCBnKzIg QVMgYiBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsnCispOworJG5vZGUtPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSdBTFRFUiBEQVRBQkFTRSB0ZW1wbGF0ZTAgV0lUSCBBTExPV19D T05ORUNUSU9OUyB0cnVlJyk7CisKKyMgLS0tIFN0YXJ0IFNlc3Npb24gMSBhbmQgbGVhdmUgaXQg aWRsZSBpbiB0cmFuc2FjdGlvbgorbXkgJHBzcWxfc2Vzc2lvbjEgPSAkbm9kZS0+YmFja2dyb3Vu ZF9wc3FsKCdwb3N0Z3JlcycpOworJHBzcWxfc2Vzc2lvbjEtPnF1ZXJ5X3NhZmUoJ2xpc3RlbiBz OycsICJTZXNzaW9uIDEgbGlzdGVucyB0byAncyciKTsKKyRwc3FsX3Nlc3Npb24xLT5xdWVyeV9z YWZlKCdiZWdpbjsnLCAiU2Vzc2lvbiAxIHN0YXJ0cyBhIHRyYW5zYWN0aW9uIik7CisKKyMgLS0t IFNlc3Npb24gMiwgbXVsdGlwbGUgbm90aWZ5J3MsIGFuZCBjb21taXQgLS0tCitmb3IgbXkgJGkg KDEgLi4gMTApCit7CisJJG5vZGUtPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgIgorCQlCRUdJ TjsKKwkJTk9USUZZIHMsICckaSc7CisJCUNPTU1JVDsiKTsKK30KKworIyBDb25zdW1lIGVub3Vn aCBYSURzIHRvIHRyaWdnZXIgdHJ1bmNhdGlvbgorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAnc2VsZWN0IGNvbnN1bWVfeGlkcygxMDAwMDAwMCk7Jyk7CisKKyMgRXhlY3V0ZSB1cGRhdGUg c28gdGhlIGZyb3plbiB4aWQgb2YgInQiIHRhYmxlIGlzIHVwZGF0ZWQgdG8gYSB4aWQgZ3JlYXRl cgorIyB0aGFuIGNvbnN1bWVfeGlkcygpIHJlc3VsdAorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAnVVBEQVRFIHQgU0VUIGEgPSBhK2I7Jyk7CisKKyMgUmVtZW1iZXIgY3VycmVudCBkYXRm cm96ZW54aWQgYmVmb3JlIHZhY3V1bSBmcmVlemUgdG8gZW5zdXJlIHRoYXQgaXQgaXMgYWR2YW5j ZWQuCitteSAkZGF0YWZyb256ZW54aWQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJz ZWxlY3QgZGF0ZnJvemVueGlkIGZyb20gcGdfZGF0YWJhc2Ugd2hlcmUgZGF0bmFtZSA9ICdwb3N0 Z3JlcyciKTsKKworIyBFeGVjdXRlIHZhY3V1bSBmcmVlemUgb24gYWxsIGRhdGFiYXNlcworJG5v ZGUtPmNvbW1hbmRfb2soWyAndmFjdXVtZGInLCAnLS1hbGwnLCAnLS1mcmVlemUnLCAnLS1wb3J0 JywgJG5vZGUtPnBvcnQgXSwKKwkidmFjdXVtZGIgLS1hbGwgLS1mcmVlemUiKTsKKworIyBHZXQg dGhlIG5ldyBkYXRmcm96ZW54aWQgYWZ0ZXIgdmFjdXVtIGZyZWV6ZSB0byBlbnN1cmUgdGhhdCBp cyBhZHZhbmNlZCBidXQKKyMgd2UgY2FuIHN0aWxsIGdldCB0aGUgbm90aWZpY2F0aW9uIHN0YXR1 cyBvZiB0aGUgbm90aWZpY2F0aW9uCitteSAkZGF0YWZyb256ZW54aWRfZnJlZXplID0gJG5vZGUt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAic2VsZWN0IGRhdGZyb3plbnhpZCBmcm9tIHBnX2RhdGFi YXNlIHdoZXJlIGRhdG5hbWUgPSAncG9zdGdyZXMnIik7CitvaygkZGF0YWZyb256ZW54aWRfZnJl ZXplID4gJGRhdGFmcm9uemVueGlkLCAnZGF0ZnJvemVueGlkIGlzIGFkdmFuY2VkJyk7CisKKyMg T24gU2Vzc2lvbiAxLCBjb21taXQgYW5kIGVuc3VyZSB0aGF0IHRoZSBhbGwgbm90aWZpY2F0aW9u cyBpcyByZWNlaXZlZAorbXkgJHJlcyA9ICRwc3FsX3Nlc3Npb24xLT5xdWVyeV9zYWZlKCdjb21t aXQ7JywgImNvbW1pdCBsaXN0ZW4gczsiKTsKK215ICRub3RpZmljYXRpb25zX2NvdW50ID0gMDsK K2ZvcmVhY2ggbXkgJGkgKHNwbGl0KCdcbicsICRyZXMpKQoreworCSRub3RpZmljYXRpb25zX2Nv dW50Kys7CisJbGlrZSgkaSwgcXIvQXN5bmNocm9ub3VzIG5vdGlmaWNhdGlvbiAicyIgd2l0aCBw YXlsb2FkICIkbm90aWZpY2F0aW9uc19jb3VudCIgcmVjZWl2ZWQvKTsKK30KK2lzKCRub3RpZmlj YXRpb25zX2NvdW50LCAxMCwgJ3JlY2VpdmVkIGFsbCBjb21taXR0ZWQgbm90aWZpY2F0aW9ucycp OworCitkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9s aXN0ZW5fbm90aWZ5L3QvMDAyX2Fib3J0ZWRfdHhfbm90aWZpZXMucGwgYi9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfbGlzdGVuX25vdGlmeS90LzAwMl9hYm9ydGVkX3R4X25vdGlmaWVzLnBsCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kYWU3YTI0ZjViMgotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9saXN0ZW5fbm90aWZ5L3QvMDAyX2Fib3J0 ZWRfdHhfbm90aWZpZXMucGwKQEAgLTAsMCArMSw3OSBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjQt MjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0cmljdDsK K3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKK3VzZSBGaWxlOjpQYXRoIHF3KG1rcGF0aCk7 Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpV dGlsczsKK3VzZSBUZXN0OjpNb3JlOworCisjIFRlc3QgY2hlY2tzIHRoYXQgbGlzdGVuZXJzIGRv IG5vdCByZWNlaXZlIG5vdGlmaWNhdGlvbnMgZnJvbSBhYm9ydGVkCisjIHRyYW5zYWN0aW9uIGV2 ZW4gaWYgbm90aWZpY2F0aW9ucyBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIGxpc3Rlbi9ub3RpZnkK KyMgcXVldWUuIFRvIHJlcHJvZHVjZSBpdCB3ZSB1c2UgdGhlIGZhY3QgdGhhdCBzZXJpYWxpemFi bGUgY29uZmxpY3RzCisjIGFyZSBjaGVja2VkIGFmdGVyIHR4IGFkZHMgbm90aWZpY2F0aW9ucyB0 byB0aGUgcXVldWUuCisKK215ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3 KCdub2RlJyk7Ciskbm9kZS0+aW5pdDsKKyRub2RlLT5zdGFydDsKKworIyBTZXR1cAorJG5vZGUt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnQ1JFQVRFIFRBQkxFIHQxIChhIGJpZ3NlcmlhbCk7Jyk7 CisKKyMgTGlzdGVuZXIKK215ICRwc3FsX2xpc3RlbmVyID0gJG5vZGUtPmJhY2tncm91bmRfcHNx bCgncG9zdGdyZXMnKTsKKyRwc3FsX2xpc3RlbmVyLT5xdWVyeV9zYWZlKCdMSVNURU4gY2g7Jyk7 CisKKyMgU2Vzc2lvbjEuIFN0YXJ0IFNFUklBTElaQUJMRSB0eCBhbmQgYWRkIGEgbm90aWZpY2F0 aW9uLgorbXkgJHBzcWxfc2Vzc2lvbjEgPSAkbm9kZS0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3Jl cycpOworJHBzcWxfc2Vzc2lvbjEtPnF1ZXJ5X3NhZmUoIgorCUJFR0lOIElTT0xBVElPTiBMRVZF TCBTRVJJQUxJWkFCTEU7CisJU0VMRUNUICogRlJPTSB0MTsKKwlJTlNFUlQgSU5UTyB0MSBERUZB VUxUIFZBTFVFUzsKKwlOT1RJRlkgY2gsJ2NvbW1pdHRlZF8wJzsKKwlOT1RJRlkgY2gsJ2NvbW1p dHRlZF8xJzsKKyIpOworCisjIFNlc3Npb24yLiBTdGFydCBTRVJJQUxJWkFCTEUgdHgsIGFkZCBh IG5vdGlmaWNhdGlvbiBhbmQgaW50cm9kdWNlIGEgY29uZmxpY3QKKyMgd2l0aCBzZXNzaW9uMS4K K215ICRwc3FsX3Nlc3Npb24yID0gJG5vZGUtPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMnLCBv bl9lcnJvcl9zdG9wID0+IDApOworJHBzcWxfc2Vzc2lvbjItPnF1ZXJ5X3NhZmUoIgorCUJFR0lO IElTT0xBVElPTiBMRVZFTCBTRVJJQUxJWkFCTEU7CisJU0VMRUNUICogRlJPTSB0MTsKKwlJTlNF UlQgSU5UTyB0MSBERUZBVUxUIFZBTFVFUzsKKyIpOworCisjIFNlbmQgbm90aWZpY2F0aW9ucyB0 aGF0IHNob3VsZCBub3QgYmUgZXZlbnR1YWxseSBkZWxpdmVyZWQsIGFzIHNlc3Npb24yCisjIHRy YW5zYWN0aW9uIHdpbGwgYmUgYWJvcnRlZC4KK215ICRtZXNzYWdlID0gJ2Fib3J0ZWRfJyAuICdh JyB4IDEwMDA7Citmb3IgKG15ICRpID0gMDsgJGkgPCAxMDsgJGkrKykgeworICAgICRwc3FsX3Nl c3Npb24yLT5xdWVyeV9zYWZlKCJOT1RJRlkgY2gsICckaSRtZXNzYWdlJyIpOworfQorCisjIFNl c3Npb24xIHNob3VsZCBiZSBjb21taXR0ZWQgc3VjY2Vzc2Z1bGx5LiBMaXN0ZW5lcnMgbXVzdCBy ZWNlaXZlIHNlc3Npb24xCisjIG5vdGlmaWNhdGlvbnMuCiskcHNxbF9zZXNzaW9uMS0+cXVlcnlf c2FmZSgiQ09NTUlUOyIpOworCisjIFNlc3Npb24yIHNob3VsZCBiZSBhYm9ydGVkIGR1ZSB0byB0 aGUgY29uZmxpY3Qgd2l0aCBzZXNzaW9uMS4gVHJhbnNhY3Rpb24KKyMgaXMgYWJvcnRlZCBhZnRl ciBhZGRpbmcgbm90aWZpY2F0aW9ucyB0byB0aGUgbGlzdGVuL25vdGlmeSBxdWV1ZSwgYnV0Cisj IGxpc3RlbmVycyBzaG91bGQgbm90IHJlY2VpdmUgc2Vzc2lvbjIgbm90aWZpY2F0aW9ucy4KKyRw c3FsX3Nlc3Npb24yLT5xdWVyeSgiQ09NTUlUOyIpOworCisjIHNlbmQgbW9yZSBub3RpZmljYXRp b25zIGFmdGVyIGFib3J0ZWQKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIk5PVElGWSBj aCwgJ2NvbW1pdHRlZF8yJzsiKTsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIk5PVElG WSBjaCwgJ2NvbW1pdHRlZF8zJzsiKTsKKworIyBmZXRjaCBub3RpZmljYXRpb25zCitteSAkcmVz ID0gJHBzcWxfbGlzdGVuZXItPnF1ZXJ5X3NhZmUoJ2JlZ2luOyBjb21taXQ7Jyk7CisKKyMgY2hl Y2sgcmVjZWl2ZWQgbm90aWZpY2F0aW9ucworbXkgQGxpbmVzID0gc3BsaXQoJ1xuJywgJHJlcyk7 CitpcyhAbGluZXMsIDQsICdyZWNlaXZlZCBhbGwgY29tbWl0dGVkIG5vdGlmaWNhdGlvbnMnKTsK K2ZvciAobXkgJGkgPSAwOyAkaSA8IDQ7ICRpKyspIHsKKyAgICBsaWtlKCRsaW5lc1skaV0sIHFy L0FzeW5jaHJvbm91cyBub3RpZmljYXRpb24gImNoIiB3aXRoIHBheWxvYWQgImNvbW1pdHRlZF8k aSIgcmVjZWl2ZWQvKTsKK30KKworb2soJHBzcWxfbGlzdGVuZXItPnF1aXQpOworb2soJHBzcWxf c2Vzc2lvbjEtPnF1aXQpOworb2soJHBzcWxfc2Vzc2lvbjItPnF1aXQpOworCitkb25lX3Rlc3Rp bmcoKTsKLS0gCjIuNTEuMAoK --bf215125f67af063b4fe8611fc3b332397b1eae0326ea87b06cc024739fb--