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 1utuD1-00FuPL-7H for pgsql-hackers@arkaria.postgresql.org; Wed, 03 Sep 2025 20:36:00 +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 1utuD0-00BYuE-C6 for pgsql-hackers@arkaria.postgresql.org; Wed, 03 Sep 2025 20:35:58 +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 1utuCz-00BYu6-KE for pgsql-hackers@lists.postgresql.org; Wed, 03 Sep 2025 20:35:58 +0000 Received: from mail-pf1-x42b.google.com ([2607:f8b0:4864:20::42b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1utuCx-000ODw-1z for pgsql-hackers@postgresql.org; Wed, 03 Sep 2025 20:35:57 +0000 Received: by mail-pf1-x42b.google.com with SMTP id d2e1a72fcca58-77281ea2dc7so297646b3a.2 for ; Wed, 03 Sep 2025 13:35:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756931754; x=1757536554; darn=postgresql.org; h=in-reply-to:references:mime-version:to:from:subject:cc:message-id :date:from:to:cc:subject:date:message-id:reply-to; bh=bjbFTyt7WiwKLAR+0UVtRkiOGT5IIiReI5fSvlM1QHs=; b=WXgsSfimpXYAE6V3NtLX3STt3tmH8/wEUVCs2Jno3XB0VJAv5Nzrv+3MzvZ1tqFYOW EZests32gsQsvulV3Ad816LrpFkHfIk4DS1VNh6DOrPLYZWaVTkun5cBEihnw9Pwgutb eq1Nm+0vN0IdHUoMd8KuUMuqnQfmHGMP/wh/Mqje6TsfT/b2Y3c/jTrfNUaXLBHSViGh JGnIp2XNjpY2Sp//XsC3HvrzrBaObkYNHcqb4r+gYVajt49T5doOHOHL/dkxHCosCxgC TzB0ivB4H2CNbZwn0/CUL5HbAHJLynLmN6nM/QPaEzLmp8B1144Lw0jQ0HZ5T+oP5NTc lIeQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756931754; x=1757536554; h=in-reply-to:references:mime-version:to:from:subject:cc:message-id :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=bjbFTyt7WiwKLAR+0UVtRkiOGT5IIiReI5fSvlM1QHs=; b=o5mEYXwwbZOOo53NxdluRp0k4CNz96YTSa0jG44J6G6C4L4h6af9uHgwfBmopJpcgU boXlbWlJLdk51tcTsKqMX5QqWfRY9ZDfHS9Fk7ZJQ9OlzwH+Xaem8+M5SrFwOEVviRXG KLkkc4PmacquPczBzv9MUMWYCAoJNW3AbN60+9hIeBXp1KnssRtbzDv3oOHi+Iq3KVK6 L3iRlQwrhL7OsiKIYFs1q5yt9pmzlKovbuZPUY3sK9niqyuYSWYQ3Pi6/U8GIOKitOsK CoPyNKCAPijZxE8YhpEd413DUaOE4/9NkPu6a8bgBJ7AodjJv4TyUhm6c7v2EXVO5bMq AkxQ== X-Forwarded-Encrypted: i=1; AJvYcCXs1PfaJynAX8ggRCxuBrrX1SIT9Rop9Bipxb7Bvnfg7dXAKx9mU7IBz3jFzsOUERmgstbgsRyZrYL2TYyP@postgresql.org X-Gm-Message-State: AOJu0Yz7JIe42EP+phGGXcEp520uXTr+41Mt1U0NEP1Ae3WWdD5c2aqr oeOaaoC7WCzVXZG40a2p496n+gECaZNqi+G8Hmod5c1FPU95q9DDef9r X-Gm-Gg: ASbGnct908PXRO8zIHggRis13XkQdpPW0GHA/AEEDMjWWA9aiIdUjk18XuMz7ssos3e 61xJhIFM0MoF7A+0rHuQghHlr4EI4dn+fCF0Qbo6CnELjdraWWUFDxy5xnpAigz8jdiAS+DviYQ MvHk4CJOi+6lgVyYee6T1RzeqB+ccPVbset1TmNST+8jzbNS1ejsv6z1sziMFavoBwkBTeLypmg kDxGz3iso90Q+e2u22opTw3dR6PDqryfRkrhh6SDnZriUqZx+ks4fdvpl8WXJkt8pxJeVsE0KDD mbpS4dGsuSVc3H4EjbbbpUwgkoiPxtqdabnlSJ5iT+Q3LK5XA079/+C8l7yyEmeENok8tvxzef/ vZoFCbO6CvDnt5v7PKsVb6kEc2+nluWgMXyZIEoe0rps= X-Google-Smtp-Source: AGHT+IG/1Gr1c7mvNNI7VfNL0QqV3123JQm9T1P0c+K6dNOZEjizIfj/UVvc10OGmKbEWZuh8/D+2g== X-Received: by 2002:a05:6a00:1ac8:b0:772:5165:3f77 with SMTP id d2e1a72fcca58-77251654261mr15743795b3a.26.1756931754387; Wed, 03 Sep 2025 13:35:54 -0700 (PDT) Received: from localhost ([163.116.228.146]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7722a4beb72sm17517922b3a.61.2025.09.03.13.35.51 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 03 Sep 2025 13:35:53 -0700 (PDT) Content-Type: multipart/mixed; boundary=10a8d09653d4c5a5c4a45911ef0453c54bb0c69f2d91b5cb10dd152f4533 Date: Wed, 03 Sep 2025 17:35:49 -0300 Message-Id: Cc: "Daniil Davydov" <3danissimo@gmail.com>, =?utf-8?q?=C3=81lvaro_Herrera?= , "Alexandra Wang" , "PostgreSQL Hackers" Subject: Re: LISTEN/NOTIFY bug: VACUUM sets frozenxid past a xid in async queue From: "Matheus Alcantara" To: "Jacques Combrink" , "Masahiko Sawada" MIME-Version: 1.0 References: <202508061044.ptcyt7aqsaaa@alvherre.pgsql> In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --10a8d09653d4c5a5c4a45911ef0453c54bb0c69f2d91b5cb10dd152f4533 Content-Type: multipart/alternative; boundary=865dfd3199ce65e75e909c60cf7e57e4dc67938dca9da25712b4f1576e46 --865dfd3199ce65e75e909c60cf7e57e4dc67938dca9da25712b4f1576e46 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8 On Mon Sep 1, 2025 at 11:06 AM -03, Jacques Combrink wrote: > TLDR: > active listener on one database causes notify on another database to get > stuck. > At no point could I get a stuck notify if I don't have a listener on at > least one other database than the one I am notifying on. See the Extra > weirdness section. > At no point do you need to have any other queries running, there is > never an idle in transaction query needed for bad timing with the vacuum. > > I hope I explained everything well enough so that one of you smart > people can find and fix the problem. > The long running transaction steps is just an example that we can lose notifications using the first patch from Daniil that Alex has shared on [1]. The steps that you've shared is just another way to trigger the issue but it's similar to the steps that Alex also shared on [1]. All these different ways to trigger the error face the same underlying problem: If a notification is keep for too long on the queue that vacuum freeze can run and truncate clog files that contains transaction information of this notification the error will happen. The patch that I've attached on [2] aims to fix the issue following the steps that you've shared, but during the tests I've found a stack overflow bug on AsyncQueueIterNextNotification() due to the number of notifications. I'm attaching a new version that fix this bug and I tried to reproduce your steps with this new version and the issue seems to be fixed. Note that notifications that were added without any previous LISTEN will block the xid advance during VACUUM FREEZE until we have a listener on the database that owns these notifications. The XXX comment on vacuum.c is about this problem. [1] https://www.postgresql.org/message-id/CAK98qZ3wZLE-RZJN_Y%2BTFjiTRPPFPB= wNBpBi5K5CU8hUHkzDpw%40mail.gmail.com [2] https://www.postgresql.org/message-id CAFY6G8cJm73_MM9SuynZUqtqcaTuepUD= gDuvS661oLW7U0dgsg%40mail.gmail.com -- Matheus Alcantara --865dfd3199ce65e75e909c60cf7e57e4dc67938dca9da25712b4f1576e46-- --10a8d09653d4c5a5c4a45911ef0453c54bb0c69f2d91b5cb10dd152f4533 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v2-0001-Consider-LISTEN-NOTIFY-min-xid-during-VACUUM-FREE.patch Content-Type: text/plain; charset=utf-8; name=v2-0001-Consider-LISTEN-NOTIFY-min-xid-during-VACUUM-FREE.patch RnJvbSA4MzliMjkzNGZlM2Q3M2I3ODk2NTE5OGQ4NmRiYTNiOTdlMzY5NmUyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRoZXVzIEFsY2FudGFyYSA8bXRocy5kZXZAcG0ubWU+CkRh dGU6IFR1ZSwgMjYgQXVnIDIwMjUgMTA6MDk6MDEgLTAzMDAKU3ViamVjdDogW1BBVENIIHYyXSBD b25zaWRlciBMSVNURU4vTk9USUZZIG1pbiB4aWQgZHVyaW5nIFZBQ1VVTSBGUkVFWkUKClByZXZp b3VzbHkgYSBsaXN0ZW5lciBiYWNrZW5kIHRoYXQgaXMgZGVsYXlpbmcgdG8gY29uc3VtZSBub3Rp ZmljYXRpb25zCihkdWUgdG8gaWRsZSBpbiB0cmFuc2FjdGlvbiBmb3IgZXhhbXBsZSksIGlmIHRo ZSBWQUNVVU0gRlJFRVpFIGlzCmV4ZWN1dGVkIGR1cmluZyB0aGlzIHBlcmlvZCBhbmQgZHJvcCBj bG9nIGZpbGVzIHRoYXQgY29udGFpbnMKdHJhbnNhY3Rpb24gaW5mb3JtYXRpb24gYWJvdXQgdGhl IG5vdGlmaWNhdGlvbiBpbiB0aGUgcXVldWUsIHRoZQpsaXN0ZW5lciBiYWNrZW5kIGNhbiBsb29z ZSB0aGlzIG5vdGlmaWNhdGlvbiB3aGVuIGNvbW1pdHRpbmcgdGhlCnRyYW5zYWN0aW9uOgpFUlJP UjogIGNvdWxkIG5vdCBhY2Nlc3Mgc3RhdHVzIG9mIHRyYW5zYWN0aW9uIDc1NgpERVRBSUw6ICBD b3VsZCBub3Qgb3BlbiBmaWxlICJwZ194YWN0LzAwMDAiOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0 b3J5LgoKVGhpcyBjb21taXQgZml4IHRoaXMgaXNzdWUgYnkgaXRlcmF0aW5nIG92ZXIgdGhlIHF1 ZXVlIG5vdGlmaWNhdGlvbnMgZm9yCmVhY2ggYmFja2VuZCBsaXN0ZW5lciBhbmQgY2hlY2sgd2hp Y2ggaXMgdGhlIG9sZGVzdCB0cmFuc2FjdGlvbiB4aWQgb24KdGhlIHF1ZXVlIGFuZCB0aGVuIGNv bnNpZGVyIHRoaXMgdmFsdWUgZHVyaW5nIFZBQ1VVTSBGUkVFWkUgZXhlY3V0aW9uLgotLS0KIHNy Yy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMgICAgICAgICAgICAgICAgICB8IDI2MSArKysrKysr KysrKysrKysrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jICAgICAgICAgICAgICAg ICB8ICAxMyArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9hc3luYy5oICAgICAgICAgICAgICAgICAg fCAgIDMgKwogc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgIHwg ICAxICsKIHNyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICB8ICAg MSArCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbGlzdGVuX25vdGlmeS9NYWtlZmlsZSAgfCAgMTcg KysKIC4uLi9tb2R1bGVzL3Rlc3RfbGlzdGVuX25vdGlmeS9tZXNvbi5idWlsZCAgICB8ICAxMyAr CiAuLi4vdGVzdF9saXN0ZW5fbm90aWZ5L3QvMDAxX3hpZF9mcmVlemUucGwgICAgfCAgNzMgKysr KysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMSAr CiA5IGZpbGVzIGNoYW5nZWQsIDM4MyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2xpc3Rlbl9ub3RpZnkvTWFrZWZpbGUKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbGlzdGVuX25vdGlmeS9tZXNvbi5idWlsZAog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9saXN0ZW5fbm90aWZ5L3Qv MDAxX3hpZF9mcmVlemUucGwKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3lu Yy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYwppbmRleCA0YmQzN2Q1YmViNS4uZTk4 NmEyN2ViNGUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYwpAQCAtNDAxLDYgKzQwMSw0NSBAQCBzdHJ1Y3Qg Tm90aWZpY2F0aW9uSGFzaAogCU5vdGlmaWNhdGlvbiAqZXZlbnQ7CQkvKiA9PiB0aGUgYWN0dWFs IE5vdGlmaWNhdGlvbiBzdHJ1Y3QgKi8KIH07CiAKKy8qCisgKiBBIHN0YXRlLWJhc2VkIGl0ZXJh dG9yIGZvciBjb25zdW1pbmcgbm90aWZpY2F0aW9ucyAoQXN5bmNRdWV1ZUVudHJ5KSBmcm9tIHRo ZSBhc3luYyBxdWV1ZS4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIGl0ZXJhdG9yIHdpbGwgaXRlcmF0 ZSBvdmVyIHRoZSBhc3luYyBxdWV1ZSBiYXNlZCBvbiB0aGUKKyAqICJjdXJyZW50IiBhbmQgImhl YWQiIHBvc2l0aW9ucywgaXQgd2lsbCBzdGFydCBhdCAiY3VycmVudCIgYW5kIGl0IHdpbGwgcmVh ZAorICogdW50aWwgaXQgcmVhY2ggdGhlICJoZWFkIiBwb3NpdGlvbi4gRm9yIGV4YW1wbGUsIHRv IHJlYWQgbm90aWZpY2F0aW9ucyBmb3IgYQorICogc3BlY2lmaWMgYmFja2VuZCBpdCBzaG91bGQg anVzdCB1c2UgdGhlIFFVRVVFX0JBQ0tFTkRfUE9TIGFzIGEgImN1cnJlbnQiCisgKiBwb3NpdGlv biBzdGFydGluZyBwb2ludCBhbmQgaGVhZCBhcyBRVUVVRV9IRUFELiBUbyByZWFkIGFsbCBhc3lu YyBxdWV1ZQorICogbm90aWZpY2F0aW9ucyBqdXN0IHVzZSBRVUVVRV9IRUFEIGFzICJjdXJyZW50 Ii4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgQXN5bmNRdWV1ZUl0ZXJhdG9yCit7CisJLyogQ3VycmVu dCBxdWV1ZSBwb3NpdGlvbiBvZiBpdGVyYXRpb24uICovCisJUXVldWVQb3NpdGlvbiBjdXJyZW50 OworCisJLyogaG93IGZhciBpdCB3aWxsIHJlYWQgKi8KKwlRdWV1ZVBvc2l0aW9uIGhlYWQ7CisK KwkvKiBDdXJyZW50IHF1ZXVlIGVudHJ5IGJlaW5nIHJlYWQuICovCisJQXN5bmNRdWV1ZUVudHJ5 ICpjdXJyZW50X2VudHJ5OworCisJLyogU25hcHNob3QgdXNlZCB0byBkZWNpZGUgd2hpY2ggeGFj dHMgYXJlIHN0aWxsIGluIHByb2dyZXNzLiAqLworCVNuYXBzaG90CXNuYXBzaG90OworCisJLyog YnVmZmVyIHRvIHJlYWQgcGFnZXMgZnJvbSBTTFJVICovCisJdW5pb24KKwl7CisJCWNoYXIJCWJ1 ZltRVUVVRV9QQUdFU0laRV07CisJCUFzeW5jUXVldWVFbnRyeSBhbGlnbjsKKwl9CQkJcGFnZV9i dWZmZXI7CisKKwkvKiBTaG91bGQgcmVhZCBhIHBhZ2UgZnJvbSBTTFJVPyAqLworCWJvb2wJCXJl YWRfbmV4dF9wYWdlOworCisJLyogTm8gbW9yZSBlbnRyaWVzIHRvIHJlYWQgKi8KKwlib29sCQlk b25lOworfSBBc3luY1F1ZXVlSXRlcmF0b3I7CisKKwogc3RhdGljIE5vdGlmaWNhdGlvbkxpc3Qg KnBlbmRpbmdOb3RpZmllcyA9IE5VTEw7CiAKIC8qCkBAIC00NTgsNiArNDk3LDkgQEAgc3RhdGlj IHVpbnQzMiBub3RpZmljYXRpb25faGFzaChjb25zdCB2b2lkICprZXksIFNpemUga2V5c2l6ZSk7 CiBzdGF0aWMgaW50CW5vdGlmaWNhdGlvbl9tYXRjaChjb25zdCB2b2lkICprZXkxLCBjb25zdCB2 b2lkICprZXkyLCBTaXplIGtleXNpemUpOwogc3RhdGljIHZvaWQgQ2xlYXJQZW5kaW5nQWN0aW9u c0FuZE5vdGlmaWVzKHZvaWQpOwogCitzdGF0aWMgdm9pZCBBc3luY1F1ZXVlSXRlckluaXQoQXN5 bmNRdWV1ZUl0ZXJhdG9yICppdGVyLCBRdWV1ZVBvc2l0aW9uIGN1cnJlbnQsIFF1ZXVlUG9zaXRp b24gaGVhZCk7CitzdGF0aWMgQXN5bmNRdWV1ZUVudHJ5ICpBc3luY1F1ZXVlSXRlck5leHROb3Rp ZmljYXRpb24oQXN5bmNRdWV1ZUl0ZXJhdG9yICppdGVyKTsKKwogLyoKICAqIENvbXB1dGUgdGhl IGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gcXVldWUgcGFnZSBudW1iZXJzLgogICogUHJldmlvdXNs eSB0aGlzIGZ1bmN0aW9uIGFjY291bnRlZCBmb3IgYSB3cmFwYXJvdW5kLgpAQCAtMjM5NSwzICsy NDM3LDIyMiBAQCBjaGVja19ub3RpZnlfYnVmZmVycyhpbnQgKm5ld3ZhbCwgdm9pZCAqKmV4dHJh LCBHdWNTb3VyY2Ugc291cmNlKQogewogCXJldHVybiBjaGVja19zbHJ1X2J1ZmZlcnMoIm5vdGlm eV9idWZmZXJzIiwgbmV3dmFsKTsKIH0KKworCisvKgorICogSW5pdGlhbGl6ZXMgYW4gQXN5bmNR dWV1ZUl0ZXJhdG9yLgorICoKKyAqIEl0IHNldHMgdXAgdGhlIHN0YXRlIGFuZCBnZXRzIHRoZSBp bml0aWFsIHNuYXBzaG90LgorICovCitzdGF0aWMgdm9pZAorQXN5bmNRdWV1ZUl0ZXJJbml0KEFz eW5jUXVldWVJdGVyYXRvciAqaXRlciwgUXVldWVQb3NpdGlvbiBjdXJyZW50LCBRdWV1ZVBvc2l0 aW9uIGhlYWQpCit7CisJLyogSW5pdGlhbGl6ZSBpbnRlcm5hbCBzdGF0ZSAqLworCWl0ZXItPnJl YWRfbmV4dF9wYWdlID0gdHJ1ZTsKKwlpdGVyLT5kb25lID0gZmFsc2U7CisJaXRlci0+Y3VycmVu dCA9IGN1cnJlbnQ7CisJaXRlci0+aGVhZCA9IGhlYWQ7CisKKwkvKiBHZXQgdGhlIHNuYXBzaG90 IHdlJ2xsIHVzZSBmb3IgdmlzaWJpbGl0eSBjaGVja3MgKi8KKwlpdGVyLT5zbmFwc2hvdCA9IFJl Z2lzdGVyU25hcHNob3QoR2V0TGF0ZXN0U25hcHNob3QoKSk7Cit9CisKKy8qCisgKiBSZXR1cm5z IHRoZSBuZXh0IEFzeW5jUXVldWVFbnRyeSBmcm9tIHRoZSBhc3luYyBxdWV1ZS4KKyAqCisgKiBS ZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZW50cnkgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIE5VTEwg aWYgdGhlcmUgYXJlIG5vCisgKiBtb3JlIG5vdGlmaWNhdGlvbnMgdG8gcHJvY2Vzcywgb3IgaWYg YW4gdW5jb21taXR0ZWQgbm90aWZpY2F0aW9uIGlzIGZvdW5kLgorICoKKyAqIEl0IGhhbmRsZXMg ZmV0Y2hpbmcgcGFnZXMgZnJvbSB0aGUgc2hhcmVkIFNMUlUgYXMgbmVlZGVkLiBUaGUgcmV0dXJu ZWQKKyAqIHBvaW50ZXIgaXMgdG8gYSBsb2NhbCBidWZmZXIsIHNvIGl0J3Mgb25seSB2YWxpZCB1 bnRpbCB0aGUgbmV4dCBjYWxsIHRvIHRoaXMKKyAqIGZ1bmN0aW9uLgorICovCitzdGF0aWMgQXN5 bmNRdWV1ZUVudHJ5ICoKK0FzeW5jUXVldWVJdGVyTmV4dE5vdGlmaWNhdGlvbihBc3luY1F1ZXVl SXRlcmF0b3IgKml0ZXIpCit7CisJQXN5bmNRdWV1ZUVudHJ5ICpxZTsKKwlRdWV1ZVBvc2l0aW9u IHRoaXNlbnRyeTsKKworCS8qCisJICogTG9vcCB1bnRpbCBhIHZhbGlkIG5vdGlmaWNhdGlvbiBp cyBmb3VuZCBvciB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZQorCSAqIHF1ZXVlIG9yIGFuIHVuY29t bWl0dGVkIHRyYW5zYWN0aW9uLgorCSAqLworCWRvCisJeworCQlDSEVDS19GT1JfSU5URVJSVVBU UygpOworCisJCS8qIE5vIG1vcmUgZW50cmllcyB0byBwcm9jZXNzLiAqLworCQlpZiAoaXRlci0+ ZG9uZSkKKwkJCXJldHVybiBOVUxMOworCisJCWlmIChRVUVVRV9QT1NfRVFVQUwoaXRlci0+Y3Vy cmVudCwgaXRlci0+aGVhZCkpCisJCXsKKwkJCS8qIE5vdGhpbmcgdG8gZG8sIHRoZSBiYWNrZW5k IGRvbid0IGhhdmUgYW55IG5vdGlmaWNhdGlvbiB0byByZWFkLiAqLworCQkJaXRlci0+ZG9uZSA9 IHRydWU7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCS8qCisJCSAqIFdlIG5lZWQgdG8gcHJv Y2VzcyBhIHBhZ2UgYXQgYSB0aW1lLiBJZiB3ZSBoYXZlbid0IHJlYWQgdGhlIGN1cnJlbnQKKwkJ ICogcGFnZSB5ZXQsIG9yIGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBvbmUs IHJlYWQgdGhlCisJCSAqIG5leHQgcGFnZS4KKwkJICovCisJCWlmIChpdGVyLT5yZWFkX25leHRf cGFnZSkKKwkJeworCQkJaW50NjQJCWN1cnBhZ2UgPSBRVUVVRV9QT1NfUEFHRShpdGVyLT5jdXJy ZW50KTsKKwkJCWludAkJCWN1cm9mZnNldCA9IFFVRVVFX1BPU19PRkZTRVQoaXRlci0+Y3VycmVu dCk7CisJCQlpbnQJCQlzbG90bm87CisJCQlpbnQJCQljb3B5c2l6ZTsKKworCisJCQkvKgorCQkJ ICogV2UgY29weSB0aGUgZGF0YSBmcm9tIFNMUlUgaW50byBhIGxvY2FsIGJ1ZmZlciwgc28gYXMg dG8gYXZvaWQKKwkJCSAqIGhvbGRpbmcgdGhlIFNMUlUgbG9jayB3aGlsZSB3ZSBhcmUgZXhhbWlu aW5nIHRoZSBlbnRyaWVzIGFuZAorCQkJICogcG9zc2libHkgdHJhbnNtaXR0aW5nIHRoZW0gdG8g b3VyIGZyb250ZW5kLiAgQ29weSBvbmx5IHRoZSBwYXJ0CisJCQkgKiBvZiB0aGUgcGFnZSB3ZSB3 aWxsIGFjdHVhbGx5IGluc3BlY3QuCisJCQkgKi8KKwkJCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQ YWdlX1JlYWRPbmx5KE5vdGlmeUN0bCwgY3VycGFnZSwgSW52YWxpZFRyYW5zYWN0aW9uSWQpOwor CisJCQkvKiBEZXRlcm1pbmUgaG93IG11Y2ggb2YgdGhlIHBhZ2Ugd2UgbmVlZCB0byBjb3B5ICov CisJCQlpZiAoY3VycGFnZSA9PSBRVUVVRV9QT1NfUEFHRShpdGVyLT5oZWFkKSkKKwkJCXsKKwkJ CQkvKiBXZSBvbmx5IHdhbnQgdG8gcmVhZCBhcyBmYXIgYXMgaGVhZCAqLworCQkJCWNvcHlzaXpl ID0gUVVFVUVfUE9TX09GRlNFVChpdGVyLT5oZWFkKSAtIGN1cm9mZnNldDsKKwkJCQlpZiAoY29w eXNpemUgPCAwKQorCQkJCQljb3B5c2l6ZSA9IDA7CS8qIGp1c3QgZm9yIHNhZmV0eSAqLworCQkJ fQorCQkJZWxzZQorCQkJeworCQkJCS8qIGZldGNoIGFsbCB0aGUgcmVzdCBvZiB0aGUgcGFnZSAq LworCQkJCWNvcHlzaXplID0gUVVFVUVfUEFHRVNJWkUgLSBjdXJvZmZzZXQ7CisJCQl9CisKKwkJ CW1lbWNweShpdGVyLT5wYWdlX2J1ZmZlci5idWYsCisJCQkJICAgTm90aWZ5Q3RsLT5zaGFyZWQt PnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBjdXJvZmZzZXQsCisJCQkJICAgY29weXNpemUpOworCisJ CQkvKiBSZWxlYXNlIGxvY2sgdGhhdCB3ZSBnb3QgZnJvbSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFk T25seSgpICovCisJCQlMV0xvY2tSZWxlYXNlKFNpbXBsZUxydUdldEJhbmtMb2NrKE5vdGlmeUN0 bCwgY3VycGFnZSkpOworCisJCQkvKgorCQkJICogUGFnZSB3YXMgcmVhZCwgc2V0IHRvIGZhbHNl IHRvIG5leHQgY2FsbHMgd2lsbCBjb25zdW1lIHRoZQorCQkJICogZW50cmllcyBvbiB0aGUgcmVh ZCBwYWdlLgorCQkJICovCisJCQlpdGVyLT5yZWFkX25leHRfcGFnZSA9IGZhbHNlOworCQkJaXRl ci0+Y3VycmVudF9lbnRyeSA9IChBc3luY1F1ZXVlRW50cnkgKikgaXRlci0+cGFnZV9idWZmZXIu YnVmOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIElmIHdlIGFyZSBub3QgcmVhZGlu ZyBhIG5ldyBwYWdlLCBhZHZhbmNlIG91ciBsb2NhbCBlbnRyeQorCQkJICogcG9pbnRlciB0byB0 aGUgbmV4dCBtZXNzYWdlLgorCQkJICovCisJCQlpdGVyLT5jdXJyZW50X2VudHJ5ID0gKEFzeW5j UXVldWVFbnRyeSAqKSAoKGNoYXIgKikgaXRlci0+Y3VycmVudF9lbnRyeSArIGl0ZXItPmN1cnJl bnRfZW50cnktPmxlbmd0aCk7CisJCX0KKworCQl0aGlzZW50cnkgPSBpdGVyLT5jdXJyZW50Owor CisJCS8qIFJlYWQgdGhlIEFzeW5jUXVldWVFbnRyeSB3aXRoaW4gb3VyIGxvY2FsIGJ1ZmZlci4g Ki8KKwkJcWUgPSBpdGVyLT5jdXJyZW50X2VudHJ5OworCisJCUFzc2VydChxZS0+bGVuZ3RoID4g MCk7CisKKwkJLyoKKwkJICogQWR2YW5jZSBpdGVyLT5jdXJyZW50IG92ZXIgdGhpcyBtZXNzYWdl LiBJZiByZWFjaGVkIHRoZSBlbmQgb2YgdGhlCisJCSAqIHBhZ2Ugc2V0IHJlYWRfcGFnZSB0byB0 cnVlIHRvIHRyeSB0byByZWFkIHRoZSBuZXh0IG9uZSBvbiBuZXh0CisJCSAqIGNhbGwuCisJCSAq CisJCSAqIFRPRE8obWF0aGV1cyk6IEluY29ycG9yYXRlIGNvbW1lbnRzIGZyb20KKwkJICogYXN5 bmNRdWV1ZVByb2Nlc3NQYWdlRW50cmllcy4KKwkJICovCisJCWl0ZXItPnJlYWRfbmV4dF9wYWdl ID0gYXN5bmNRdWV1ZUFkdmFuY2UoJml0ZXItPmN1cnJlbnQsIHFlLT5sZW5ndGgpOworCisJCS8q IElnbm9yZSBtZXNzYWdlcyBkZXN0aW5lZCBmb3Igb3RoZXIgZGF0YWJhc2VzICovCisJCWlmIChx ZS0+ZGJvaWQgPT0gTXlEYXRhYmFzZUlkKQorCQl7CisJCQkvKiBDaGVjayBmb3IgdW5jb21taXR0 ZWQgdHJhbnNhY3Rpb24gYW5kIGlnbm9yZSBpZiBmb3VuZCAqLworCQkJaWYgKFhpZEluTVZDQ1Nu YXBzaG90KHFlLT54aWQsIGl0ZXItPnNuYXBzaG90KSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFRo ZSBzb3VyY2UgdHJhbnNhY3Rpb24gaXMgc3RpbGwgaW4gcHJvZ3Jlc3MsIHNvIHdlIGNhbid0CisJ CQkJICogcHJvY2VzcyB0aGlzIG1lc3NhZ2UgeWV0LiAgQnJlYWsgb3V0IG9mIHRoZSBsb29wLCBi dXQgZmlyc3QKKwkJCQkgKiBiYWNrIHVwICpjdXJyZW50IHNvIHdlIHdpbGwgcmVwcm9jZXNzIHRo ZSBtZXNzYWdlIG5leHQKKwkJCQkgKiB0aW1lLiAoTm90ZTogaXQgaXMgdW5saWtlbHkgYnV0IG5v dCBpbXBvc3NpYmxlIGZvcgorCQkJCSAqIFRyYW5zYWN0aW9uSWREaWRDb21taXQgdG8gZmFpbCwg c28gd2UgY2FuJ3QgcmVhbGx5IGF2b2lkCisJCQkJICogdGhpcyBhZHZhbmNlLXRoZW4tYmFjay11 cCBiZWhhdmlvciB3aGVuIGRlYWxpbmcgd2l0aCBhbgorCQkJCSAqIHVuY29tbWl0dGVkIG1lc3Nh Z2UuKQorCQkJCSAqCisJCQkJICogTm90ZSB0aGF0IHdlIG11c3QgdGVzdCBYaWRJbk1WQ0NTbmFw c2hvdCBiZWZvcmUgd2UgdGVzdAorCQkJCSAqIFRyYW5zYWN0aW9uSWREaWRDb21taXQsIGVsc2Ug d2UgbWlnaHQgcmV0dXJuIGEgbWVzc2FnZSBmcm9tCisJCQkJICogYSB0cmFuc2FjdGlvbiB0aGF0 IGlzIG5vdCB5ZXQgdmlzaWJsZSB0byBzbmFwc2hvdHM7IGNvbXBhcmUKKwkJCQkgKiB0aGUgY29t bWVudHMgYXQgdGhlIGhlYWQgb2YgaGVhcGFtX3Zpc2liaWxpdHkuYy4KKwkJCQkgKgorCQkJCSAq IEFsc28sIHdoaWxlIG91ciBvd24geGFjdCB3b24ndCBiZSBsaXN0ZWQgaW4gdGhlIHNuYXBzaG90 LAorCQkJCSAqIHdlIG5lZWQgbm90IGNoZWNrIGZvciBUcmFuc2FjdGlvbklkSXNDdXJyZW50VHJh bnNhY3Rpb25JZAorCQkJCSAqIGJlY2F1c2Ugb3VyIHRyYW5zYWN0aW9uIGNhbm5vdCAoeWV0KSBo YXZlIHF1ZXVlZCBhbnkKKwkJCQkgKiBtZXNzYWdlcy4KKwkJCQkgKi8KKworCQkJCWl0ZXItPmN1 cnJlbnQgPSB0aGlzZW50cnk7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQllbHNlIGlmIChU cmFuc2FjdGlvbklkRGlkQ29tbWl0KHFlLT54aWQpKQorCQkJeworCQkJCS8qIEZvdW5kIGEgdmFs aWQgbm90aWZpY2F0aW9uICovCisJCQkJcmV0dXJuIHFlOworCQkJfQorCQkJZWxzZQorCQkJewor CQkJCS8qCisJCQkJICogVGhlIHNvdXJjZSB0cmFuc2FjdGlvbiBhYm9ydGVkIG9yIGNyYXNoZWQs IHNvIHdlIGp1c3QKKwkJCQkgKiBpZ25vcmUgaXRzIG5vdGlmaWNhdGlvbnMgYW5kIGdvIHRvIHRo ZSBuZXh0LgorCQkJCSAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJfSB3aGlsZSAodHJ1 ZSk7Cit9CisKKy8qCisgKiBDbGVhbnMgdXAgdGhlIGl0ZXJhdG9yIGJ5IHVucmVnaXN0ZXJpbmcg dGhlIHNuYXBzaG90LgorICovCitzdGF0aWMgdm9pZAorQXN5bmNRdWV1ZUl0ZXJEZXN0cm95KEFz eW5jUXVldWVJdGVyYXRvciAqaXRlcikKK3sKKwlVbnJlZ2lzdGVyU25hcHNob3QoaXRlci0+c25h cHNob3QpOworfQorCitUcmFuc2FjdGlvbklkCitBc3luY1F1ZXVlTWluWGlkKHZvaWQpCit7CisJ UXVldWVQb3NpdGlvbiBjdXJyZW50OworCVF1ZXVlUG9zaXRpb24gaGVhZDsKKwlBc3luY1F1ZXVl RW50cnkgKnFlOworCUFzeW5jUXVldWVJdGVyYXRvciBpdGVyOworCVRyYW5zYWN0aW9uSWQgbWlu WGlkID0gTWF4VHJhbnNhY3Rpb25JZDsKKworCS8qCisJICogRmlyc3QgYWR2YW5jZSB0aGUgZ2xv YmFsIHF1ZXVlIHRhaWwgc28gd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dAorCSAqIG5vdGlm aWNhdGlvbnMgYWxyZWFkeSBwcm9jZXNzZWQgYnkgYmFja2VuZHMuCisJICovCisJYXN5bmNRdWV1 ZUFkdmFuY2VUYWlsKCk7CisKKwkvKiBGZXRjaCBjdXJyZW50IHN0YXRlICovCisJTFdMb2NrQWNx dWlyZShOb3RpZnlRdWV1ZUxvY2ssIExXX1NIQVJFRCk7CisJY3VycmVudCA9IFFVRVVFX1RBSUw7 CisJaGVhZCA9IFFVRVVFX0hFQUQ7CisJTFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOwor CisJQXN5bmNRdWV1ZUl0ZXJJbml0KCZpdGVyLCBjdXJyZW50LCBoZWFkKTsKKworCXdoaWxlICgo cWUgPSBBc3luY1F1ZXVlSXRlck5leHROb3RpZmljYXRpb24oJml0ZXIpKSAhPSBOVUxMKQorCXsK KwkJaWYgKHFlLT54aWQgPCBtaW5YaWQpCisJCQltaW5YaWQgPSBxZS0+eGlkOworCX0KKworCUFz eW5jUXVldWVJdGVyRGVzdHJveSgmaXRlcik7CisKKworCXJldHVybiBtaW5YaWQ7Cit9CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3ZhY3V1bS5jCmluZGV4IDczM2VmNDBhZTdjLi5kMzVkNmZjOGU4YSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv dmFjdXVtLmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5o IgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGF0YWJhc2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3Bn X2luaGVyaXRzLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvYXN5bmMuaCIKICNpbmNsdWRlICJjb21t YW5kcy9jbHVzdGVyLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvZGVmcmVtLmgiCiAjaW5jbHVkZSAi Y29tbWFuZHMvcHJvZ3Jlc3MuaCIKQEAgLTE3MzksNiArMTc0MCwxOCBAQCB2YWNfdXBkYXRlX2Rh dGZyb3plbnhpZCh2b2lkKQogCWlmIChib2d1cykKIAkJcmV0dXJuOwogCisJLyoKKwkgKiBXZSBu ZWVkIHRvIGNoZWNrIHRyYW5zYWN0aW9uIHN0YXR1cyBvZiBub3RpZmljYXRpb25zIGJlZm9yZSBv ZiBub3RpZnkKKwkgKiB0aGUgY2xpZW50LCBpZiB0aGVyZSBpcyBsYWcgdG8gY29uc3VtZSB0aGUg bm90aWZpY2F0aW9ucyB3ZSBuZWVkIHRvCisJICogY29uc2lkZXIgdGhlIG9sZGVyIHhpZCBvZiBu b3RpZmljYXRpb24gb24gdGhlIHF1ZXVlIHNvIHRoYXQgdGhlCisJICogdHJhbnNhY3Rpb24gc3Rh dHVzIGNhbiBiZSBhY2Nlc3NlZC4KKwkgKgorCSAqIFhYWChtYXRoZXVzKTogTWF5YmUgYWRkIGEg R1VDIHRvIHByZXZlbnQgbGF6eSBsaXN0ZW5lcnMgb3IKKwkgKiBub3RpZmljYXRpb25zIHRoYXQg d2VyZSBhZGRlZCB3aXRob3V0IGxpc3RlbmVycyB0byBibG9jayB0aGUgVkFDVVVNCisJICogRlJF RVpFIG5ld0Zyb256ZW5YaWQgYWR2YW5jZS4KKwkgKi8KKwluZXdGcm96ZW5YaWQgPSBNaW4obmV3 RnJvemVuWGlkLCBBc3luY1F1ZXVlTWluWGlkKCkpOworCiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJ c05vcm1hbChuZXdGcm96ZW5YaWQpKTsKIAlBc3NlcnQoTXVsdGlYYWN0SWRJc1ZhbGlkKG5ld01p bk11bHRpKSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2FzeW5jLmggYi9z cmMvaW5jbHVkZS9jb21tYW5kcy9hc3luYy5oCmluZGV4IGY3NWMzZGY5NTU2Li4zNTkyMTAzYTBk YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvYXN5bmMuaAorKysgYi9zcmMvaW5j bHVkZS9jb21tYW5kcy9hc3luYy5oCkBAIC00Niw0ICs0Niw3IEBAIGV4dGVybiB2b2lkIEhhbmRs ZU5vdGlmeUludGVycnVwdCh2b2lkKTsKIC8qIHByb2Nlc3MgaW50ZXJydXB0cyAqLwogZXh0ZXJu IHZvaWQgUHJvY2Vzc05vdGlmeUludGVycnVwdChib29sIGZsdXNoKTsKIAorCitleHRlcm4gVHJh bnNhY3Rpb25JZCBBc3luY1F1ZXVlTWluWGlkKHZvaWQpOworCiAjZW5kaWYJCQkJCQkJLyogQVNZ TkNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSBiL3NyYy90ZXN0 L21vZHVsZXMvTWFrZWZpbGUKaW5kZXggOTAzYThhYzE1MWEuLjRjMDE2MGRmMzQxIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvTWFr ZWZpbGUKQEAgLTI4LDYgKzI4LDcgQEAgU1VCRElSUyA9IFwKIAkJICB0ZXN0X2ludDEyOCBcCiAJ CSAgdGVzdF9pbnRlZ2Vyc2V0IFwKIAkJICB0ZXN0X2pzb25fcGFyc2VyIFwKKwkJICB0ZXN0X2xp c3Rlbl9ub3RpZnkgXAogCQkgIHRlc3RfbGZpbmQgXAogCQkgIHRlc3RfbWlzYyBcCiAJCSAgdGVz dF9vYXRfaG9va3MgXApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZCBi L3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQKaW5kZXggOTNiZTBmNTcyODkuLjE0NDM3OWI2 MTliIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCisrKyBiL3NyYy90 ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQKQEAgLTI3LDYgKzI3LDcgQEAgc3ViZGlyKCd0ZXN0X2dp bnBvc3RpbmdsaXN0JykKIHN1YmRpcigndGVzdF9pbnQxMjgnKQogc3ViZGlyKCd0ZXN0X2ludGVn ZXJzZXQnKQogc3ViZGlyKCd0ZXN0X2pzb25fcGFyc2VyJykKK3N1YmRpcigndGVzdF9saXN0ZW5f bm90aWZ5JykKIHN1YmRpcigndGVzdF9sZmluZCcpCiBzdWJkaXIoJ3Rlc3RfbWlzYycpCiBzdWJk aXIoJ3Rlc3Rfb2F0X2hvb2tzJykKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9s aXN0ZW5fbm90aWZ5L01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2xpc3Rlbl9ub3Rp ZnkvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRhMWJm NWJiMWI3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2xpc3Rlbl9u b3RpZnkvTWFrZWZpbGUKQEAgLTAsMCArMSwxNyBAQAorIyBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf bGlzdGVuX25vdGlmeS9NYWtlZmlsZQorCitNT0RVTEUgPSB0ZXN0X2xpc3Rlbl9ub3RpZnkKK1BH RklMRURFU0MgPSAidGVzdF9saXN0ZW5fbm90aWZ5IC0gcmVncmVzc2lvbiB0ZXN0aW5nIGZvciBM SVNURU4vTk9USUZZIHN1cHBvcnQiCisKK1RBUF9URVNUUyA9IDEKKworaWZkZWYgVVNFX1BHWFMK K1BHX0NPTkZJRyA9IHBnX2NvbmZpZworUEdYUyA6PSAkKHNoZWxsICQoUEdfQ09ORklHKSAtLXBn eHMpCitpbmNsdWRlICQoUEdYUykKK2Vsc2UKK3N1YmRpciA9IHNyYy90ZXN0L21vZHVsZXMvdGVz dF9saXN0ZW5fbm90aWZ5Cit0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLi8uLgoraW5jbHVkZSAkKHRv cF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9zcmNkaXIpL2Nv bnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfbGlzdGVuX25vdGlmeS9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9saXN0ZW5fbm90aWZ5L21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi44MTE5ZTZjNzYxZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9saXN0ZW5fbm90aWZ5L21lc29uLmJ1aWxkCkBAIC0wLDAgKzEsMTMgQEAKKyMgQ29w eXJpZ2h0IChjKSAyMDIyLTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisKK3Rlc3RzICs9IHsKKyAgJ25hbWUnOiAndGVzdF9saXN0ZW5fbm90aWZ5JywKKyAgJ3NkJzog bWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRf ZGlyKCksCisgICd0YXAnOiB7CisgICAgJ3Rlc3RzJzogWworICAgICAgJ3QvMDAxX3hpZF9mcmVl emUucGwnLAorICAgIF0sCisgIH0sCit9CisKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9saXN0ZW5fbm90aWZ5L3QvMDAxX3hpZF9mcmVlemUucGwgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfbGlzdGVuX25vdGlmeS90LzAwMV94aWRfZnJlZXplLnBsCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43OWRjZDczZWQ2NQotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9saXN0ZW5fbm90aWZ5L3QvMDAxX3hpZF9mcmVlemUucGwKQEAg LTAsMCArMSw3MyBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNSwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9 PiAnYWxsJzsKK3VzZSBGaWxlOjpQYXRoIHF3KG1rcGF0aCk7Cit1c2UgUG9zdGdyZVNRTDo6VGVz dDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3Jl OworCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbm9kZScpOwor JG5vZGUtPmluaXQ7Ciskbm9kZS0+c3RhcnQ7CisKKyMgU2V0dXAKKyRub2RlLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgJ0NSRUFURSBFWFRFTlNJT04geGlkX3dyYXBhcm91bmQnKTsKKyRub2RlLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwknQ1JFQVRFIFRBQkxFIHQgQVMgU0VMRUNUIGcgQVMgYSwg ZysyIEFTIGIgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIGc7JworKTsKKyRub2RlLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwknQUxURVIgREFUQUJBU0UgdGVtcGxhdGUwIFdJVEggQUxM T1dfQ09OTkVDVElPTlMgdHJ1ZScpOworCisjIC0tLSBTdGFydCBTZXNzaW9uIDEgYW5kIGxlYXZl IGl0IGlkbGUgaW4gdHJhbnNhY3Rpb24KK215ICRwc3FsX3Nlc3Npb24xID0gJG5vZGUtPmJhY2tn cm91bmRfcHNxbCgncG9zdGdyZXMnKTsKKyRwc3FsX3Nlc3Npb24xLT5xdWVyeV9zYWZlKCdsaXN0 ZW4gczsnLCAiU2Vzc2lvbiAxIGxpc3RlbnMgdG8gJ3MnIik7CiskcHNxbF9zZXNzaW9uMS0+cXVl cnlfc2FmZSgnYmVnaW47JywgIlNlc3Npb24gMSBzdGFydHMgYSB0cmFuc2FjdGlvbiIpOworCisj IC0tLSBTZXNzaW9uIDIsIG11bHRpcGxlIG5vdGlmeSdzLCBhbmQgY29tbWl0IC0tLQorZm9yIG15 ICRpICgxIC4uIDEwKQoreworCSRub2RlLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsICIKKwkJ QkVHSU47CisJCU5PVElGWSBzLCAnJGknOworCQlDT01NSVQ7Iik7Cit9CisKKyMgQ29uc3VtZSBl bm91Z2ggWElEcyB0byB0cmlnZ2VyIHRydW5jYXRpb24KKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgJ3NlbGVjdCBjb25zdW1lX3hpZHMoMTAwMDAwMDApOycpOworCisjIEV4ZWN1dGUgdXBk YXRlIHNvIHRoZSBmcm96ZW4geGlkIG9mICJ0IiB0YWJsZSBpcyB1cGRhdGVkIHRvIGEgeGlkIGdy ZWF0ZXIKKyMgdGhhbiBjb25zdW1lX3hpZHMoKSByZXN1bHQKKyRub2RlLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgJ1VQREFURSB0IFNFVCBhID0gYStiOycpOworCisjIFJlbWVtYmVyIGN1cnJlbnQg ZGF0ZnJvemVueGlkIGJlZm9yZSB2YWN1dW0gZnJlZXplIHRvIGVuc3VyZSB0aGF0IGl0IGlzIGFk dmFuY2VkLgorbXkgJGRhdGFmcm9uemVueGlkID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAic2VsZWN0IGRhdGZyb3plbnhpZCBmcm9tIHBnX2RhdGFiYXNlIHdoZXJlIGRhdG5hbWUgPSAn cG9zdGdyZXMnIik7CisKKyMgRXhlY3V0ZSB2YWN1dW0gZnJlZXplIG9uIGFsbCBkYXRhYmFzZXMK KyRub2RlLT5jb21tYW5kX29rKFsgJ3ZhY3V1bWRiJywgJy0tYWxsJywgJy0tZnJlZXplJywgJy0t cG9ydCcsICRub2RlLT5wb3J0IF0sCisJInZhY3V1bWRiIC0tYWxsIC0tZnJlZXplIik7CisKKyMg R2V0IHRoZSBuZXcgZGF0ZnJvemVueGlkIGFmdGVyIHZhY3V1bSBmcmVlemUgdG8gZW5zdXJlIHRo YXQgaXMgYWR2YW5jZWQgYnV0CisjIHdlIGNhbiBzdGlsbCBnZXQgdGhlIG5vdGlmaWNhdGlvbiBz dGF0dXMgb2YgdGhlIG5vdGlmaWNhdGlvbgorbXkgJGRhdGFmcm9uemVueGlkX3BhcnRpYWxfZnJl ZXplID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAic2VsZWN0IGRhdGZyb3plbnhpZCBm cm9tIHBnX2RhdGFiYXNlIHdoZXJlIGRhdG5hbWUgPSAncG9zdGdyZXMnIik7CitvaygkZGF0YWZy b256ZW54aWRfcGFydGlhbF9mcmVlemUgPiAkZGF0YWZyb256ZW54aWQsICdkYXRmcm96ZW54aWQg aXMgcGFydGlhbGx5IGFkdmFuY2VkJyk7CisKKyMgT24gU2Vzc2lvbiAxLCBjb21taXQgYW5kIGVu c3VyZSB0aGF0IHRoZSBhbGwgbm90aWZpY2F0aW9ucyBpcyByZWNlaXZlZAorbXkgJHJlcyA9ICRw c3FsX3Nlc3Npb24xLT5xdWVyeV9zYWZlKCdjb21taXQ7JywgImNvbW1pdCBsaXN0ZW4gczsiKTsK K215ICRub3RpZmljYXRpb25zX2NvdW50ID0gMDsKK2ZvcmVhY2ggbXkgJGkgKHNwbGl0KCdcbics ICRyZXMpKQoreworCSRub3RpZmljYXRpb25zX2NvdW50Kys7CisJbGlrZSgkaSwgcXIvQXN5bmNo cm9ub3VzIG5vdGlmaWNhdGlvbiAicyIgd2l0aCBwYXlsb2FkICIkbm90aWZpY2F0aW9uc19jb3Vu dCIgcmVjZWl2ZWQvKTsKK30KK2lzKCRub3RpZmljYXRpb25zX2NvdW50LCAxMCwgJ3JlY2VpdmVk IGFsbCBjb21taXR0ZWQgbm90aWZpY2F0aW9ucycpOworCisjIEV4ZWN1dGUgdmFjdXVtIGZyZWV6 ZSBvbiBhbGwgZGF0YWJhc2VzIGFnYWluIGFuZCBlbnN1cmUgdGhhdCBkYXRmcm96ZW54aWQgaXMg ZnVsbHkgYWR2YW5jZWQuCiskbm9kZS0+Y29tbWFuZF9vayhbICd2YWN1dW1kYicsICctLWFsbCcs ICctLWZyZWV6ZScsICctLXBvcnQnLCAkbm9kZS0+cG9ydCBdLAorCSJ2YWN1dW1kYiAtLWFsbCAt LWZyZWV6ZSIpOworCitteSAkZGF0YWZyb256ZW54aWRfZnJlZXplID0gJG5vZGUtPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAic2VsZWN0IGRhdGZyb3plbnhpZCBmcm9tIHBnX2RhdGFiYXNlIHdoZXJl IGRhdG5hbWUgPSAncG9zdGdyZXMnIik7CitvaygkZGF0YWZyb256ZW54aWRfZnJlZXplID4gJGRh dGFmcm9uemVueGlkX3BhcnRpYWxfZnJlZXplLCAnZGF0ZnJvemVueGlkIGlzIGFkdmFuY2VkIGFm dGVyIG5vdGlmaWNhdGlvbiBpcyBjb25zdW1lZCcpOworCitkb25lX3Rlc3RpbmcoKTsKZGlmZiAt LWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggYTEzZTgxNjI4OTAuLjE0Njg0NTg0Y2ZmIDEwMDY0NAot LS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTU4LDYgKzE1OCw3IEBAIEFycmF5VG9rZW4KIEFycmF5 VHlwZQogQXN5bmNRdWV1ZUNvbnRyb2wKIEFzeW5jUXVldWVFbnRyeQorQXN5bmNRdWV1ZUl0ZXJh dG9yCiBBc3luY1JlcXVlc3QKIEF0dEluTWV0YWRhdGEKIEF0dFN0YXRzU2xvdAotLSAKMi4zOS41 IChBcHBsZSBHaXQtMTU0KQoK --10a8d09653d4c5a5c4a45911ef0453c54bb0c69f2d91b5cb10dd152f4533--