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 1vAp8r-006Kmz-M7 for pgsql-hackers@arkaria.postgresql.org; Mon, 20 Oct 2025 12:37:37 +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 1vAp8p-00HLCN-OX for pgsql-hackers@arkaria.postgresql.org; Mon, 20 Oct 2025 12:37:34 +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 1vAp8p-00HLC5-C1 for pgsql-hackers@lists.postgresql.org; Mon, 20 Oct 2025 12:37:34 +0000 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vAp8l-003EB1-2X for pgsql-hackers@postgresql.org; Mon, 20 Oct 2025 12:37:33 +0000 Received: by mail-pl1-x633.google.com with SMTP id d9443c01a7336-27d3540a43fso46150105ad.3 for ; Mon, 20 Oct 2025 05:37:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760963849; x=1761568649; 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=FA1V+ZkIaOT5DDYzFwsOVdH7R7Rg+SRLoLHMbLyGy2A=; b=lJCalpvmTzHq5AxuPO0qZpHavqh4I85xfG6lIwoqjE14nJmqLw4hrs3yfEDgv27dsZ eQkMshyuIDklm5kDDGzmC288UM4or2MpIpqbhfbiy6zS/hQ2pEFxEKfUZbnLpkkHAVwe CJYVWaX7U+PCdyZTIUBMhsCHnfhomY7SbAuIsTKZzlKS0sxC6a52MKXqD/ZaxJ/gEJnC yL3en0SnaZ/v3OYMSJ/5a6USsA9WUShvCA7YCtVaTJzXbj2/9YPQCX2LeIZNNt1Qztab QFbBg4GUsCo68BPwunfGPbR5Ap0/EQgbmbfOKrCpVwqTI/UbNpFoLOiLHUsFwrQyMHYD S3NQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760963849; x=1761568649; 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=FA1V+ZkIaOT5DDYzFwsOVdH7R7Rg+SRLoLHMbLyGy2A=; b=CM3VmFeoav7x2NrQttMCNkliWcHrGCl5Tb2ox0A6gyE4VvYxQ216d/NeqFOX4Vvbho 8mlArISQKULPSqgwb9RAs32BXyXXdupC9kzAkmCnjiMBMptDiO8eWDfRX1dfcgQc1z/J LX4Q6QHAJzRDk+ddEolZ6zm6femwNsRrmjqFPkwTit9gc0P++u1URE1C+fjREDMJSlIM bRAixRANnh1SALTzwrREImmFXwG93ENuf35mz6rVgCYDfSLtPyr+1gHn5k0sY0avt5JK WFM/lJwskpg6HVe02XwnQWjlvqLV/nZWkNLzE6dO9/zGXE/AlUSbP32bMBbOIqQmFGJ4 o/Bw== X-Forwarded-Encrypted: i=1; AJvYcCUBzjia7Zf/s3prZaUuOyehCo4unUGSszg3Uw13kOiAQFCBmQo+xOf51BY+2aV7VbllFrfVwvY6elodR1lw@postgresql.org X-Gm-Message-State: AOJu0YzX/3RgIlT8gqZLmAaCdW9kpeLmvsCKQPqQGTXd4P14fvow/BwD qrc4pbQuuGWVD5VGUczVivfGPLdTKx3MqWFfCb6Aj7mRPwJxJjbbFWyo X-Gm-Gg: ASbGncvSTyxz4ZMObw6EWEGWL5Y1Xe2uWOFLrN5ODJPz2yxaMuqW9zkpXFry7hPaCUo W8km72vbx+wRCXayo8VrmcAKrJpKLgIoekUTp9BWp0ktl5ewom3TvWrpj8rZP0tfiTAHq2y9oPw 1CaZFsrGKS5m/uNuUQxzUTCYWxPLN8nAhglujDzw9ffcSxp5nYduOpEeC8aiT4AwEgXWR94ofBm 7K9e066okSMAKT/TE+J/Gpg5a63dqVtKmdFxzLo4xwyLNQ4HUun7hwD2Fwp4GDoq0qD57Ixytf+ o+hIuaLp108mqNdi6qbF0tpA7dE7GjhKMQP6d/jSSj31uIEovuTpaoqsEl7EzCaxQSq3A10mtC6 +H6guPBm+bpJYlEk/H71n1v32G8AWwt8rFsHYSGEdjp2ZPdSaACjjqmhEPVHVIulxe3k53Iu/WT 3VP7CuGQbSm0UAov3wO0ev79c= X-Google-Smtp-Source: AGHT+IFAjCtwIqBkcIFL9seLCPCbYa4WkRFyYHxz2PxCWhD3J6k8QNg4+kZBFS5NlbRf/3FK7Rs8Tw== X-Received: by 2002:a17:902:f552:b0:269:ae5a:e32b with SMTP id d9443c01a7336-290c9ca741bmr166679095ad.13.1760963849376; Mon, 20 Oct 2025 05:37:29 -0700 (PDT) Received: from localhost ([2804:14d:328a:a59c:e05c:11ed:b9c4:ebee]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-292c6cc17ecsm2179535ad.48.2025.10.20.05.37.25 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 20 Oct 2025 05:37:28 -0700 (PDT) Content-Type: multipart/mixed; boundary=dcb0c55d2e02a5c9007c5058e0a5a335f77bee93db61ec3e8c00365e4931 Mime-Version: 1.0 Date: Mon, 20 Oct 2025 09:37:24 -0300 Message-Id: Cc: "Matheus Alcantara" , "Masahiko Sawada" , "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: "Joel Jacobson" , "Arseniy Mukhin" , =?utf-8?q?=C3=81lvaro_Herrera?= X-Mailer: aerc 0.21.0 References: <202510171347.twmkbitfsgfh@alvherre.pgsql> <01fbde80-0ff6-4bf4-b942-cd60b76380d1@app.fastmail.com> In-Reply-To: <01fbde80-0ff6-4bf4-b942-cd60b76380d1@app.fastmail.com> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --dcb0c55d2e02a5c9007c5058e0a5a335f77bee93db61ec3e8c00365e4931 Content-Type: multipart/alternative; boundary=a5e619e3b571bde5aa66ca99a9d4b2962696e94d422e78b62e01f5ff1846 --a5e619e3b571bde5aa66ca99a9d4b2962696e94d422e78b62e01f5ff1846 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8 On Sat Oct 18, 2025 at 2:43 AM -03, Joel Jacobson wrote: > On Fri, Oct 17, 2025, at 22:50, Arseniy Mukhin wrote: > What a funny coincidence that the approach in this patch, > has one similarity with the "Direct advancement" approach > in the patch in the "Optimize LISTEN/NOTIFY" [1]=C2=A0thread, > namely that we're both interested in QUEUE_HEAD before/after > we push the notifications into the queue, in PreCommit_Notify(). > > It looks to me like our new data structures are Interchangeable, > so I guess we probably want both patches to eventually settle > on one and the same? > > The differences I note between our queue head before/after code are: > > - In this patch, you are palloc'ing a struct with two fields. > In [1], we're using two separate static QueuePosition variables. > > - In this patch, you are taking/releasing a shared lock before/after > the loop to read QUEUE_HEAD and set previousHead/head. > In [1], we avoid the need of the shared lock, by doing the reads > within the existing exclusive lock inside the loop, but instead > therefore need a firstIteration bool, to know which is the first > iteration, and need to overwrite the after-var in each iteration. > > I don't think the noted differences above matter, both seems fine. > Yeah, I also think that both approach seems fine. I keep the v8 version with the palloc, if someone has any concern about this I'm open to switch to another approach. > Another thing I noticed in your patch that made me wonder, > is the naming of the new AsyncQueueEntry bool field, > which is given the name "committed". > > I think this name is not entirely faithful, since when set to true, > the entry has not been committed yet. > > How about negating the meaning of this boolean field? > To instead indicate when the entry has been rollbacked. > Then, it would clearly communicate just that. > > Maybe naming it something like "rollbacked" or "aborted"? > Good point. I've renamed this field on the attached v8 version. -- Matheus Alcantara --a5e619e3b571bde5aa66ca99a9d4b2962696e94d422e78b62e01f5ff1846-- --dcb0c55d2e02a5c9007c5058e0a5a335f77bee93db61ec3e8c00365e4931 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v8-0001-Make-AsyncQueueEntry-s-self-contained.patch Content-Type: text/plain; charset=utf-8; name=v8-0001-Make-AsyncQueueEntry-s-self-contained.patch RnJvbSAxMDNkODNjNjlmZjA4NzBmODEyZTkxYjdmNjQ5MTcxOWJmN2YzOWM2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRoZXVzIEFsY2FudGFyYSA8bXRocy5kZXZAcG0ubWU+CkRh dGU6IFNhdCwgNiBTZXAgMjAyNSAxMToyOTowMiAtMDMwMApTdWJqZWN0OiBbUEFUQ0ggdjhdIE1h a2UgQXN5bmNRdWV1ZUVudHJ5J3Mgc2VsZiBjb250YWluZWQKClByZXZpb3VzbHkgdGhlIGFzeW5j UXVldWVQcm9jZXNzUGFnZUVudHJpZXMoKSB1c2UgdGhlClRyYW5zYWN0aW9uSWREaWRDb21taXQo KSB0byBjaGVjayBpZiB0aGUgdHJhbnNhY3Rpb24gdGhhdCBhIG5vdGlmaWNhdGlvbgpiZWxvbmdz IGlzIGNvbW1pdHRlZCBvciBub3QuIEFsdGhvdWdoIHRoaXMgd29yayBmb3IgYWxtb3N0IGFsbCBz Y2VuYXJpb3MKd2UgbWF5IGhhdmUgc29tZSBjYXNlcyB3aGVyZSBpZiBhIG5vdGlmaWNhdGlvbiBp cyBrZWVwIGZvciB0byBsb25nIG9uCnRoZSBxdWV1ZSBhbmQgdGhlIFZBQ1VVTSBGUkVFWkUgaXMg ZXhlY3V0ZWQgZHVyaW5nIHRoaXMgdGltZSBpdCBtYXkKcmVtb3ZlIGNsb2cgZmlsZXMgdGhhdCBp cyBuZWVkZWQgdG8gY2hlY2sgdGhlIHRyYW5zYWN0aW9uIHN0YXR1cyBvZgp0aGVzZSBub3RpZmlj YXRpb25zIHdoaWNoIHdpbGwgY2F1c2UgZXJyb3JzIHRvIGxpc3RlbmVyIGJhY2tlbmRzIHdoZW4K cmVhZGluZyB0aGUgYXN5bmMgcXVldWUuCgpUaGlzIGNvbW1pdCBmaXggdGhpcyBpc3N1ZSBieSBt YWtpbmcgdGhlIEFzeW5jUXVldWVFbnRyeSBzZWxmIGNvbnRhaW5lZApieSBhZGRpbmcgdGhlICJy b2xsYmFja2VkIiBib29sZWFuIGZpZWxkIHNvIGFzeW5jUXVldWVQcm9jZXNzUGFnZUVudHJpZXMo KQpjYW4gdXNlIHRoaXMgdG8gY2hlY2sgaWYgdGhlIHRyYW5zYWN0aW9uIG9mIHRoZSBub3RpZmlj YXRpb24gaXMKcm9sbGJhY2tlZCBvciBub3QuCgpXZSBzZXQgcm9sbGJhY2tlZCBhcyBmYWxzZSB3 aGVuIGFkZGluZyB0aGUgZW50cnkgb24gdGhlIFNMUlUgcGFnZSBidWZmZXIKY2FjaGUgd2hlbiBQ cmVDb21taXRfTm90aWZ5KCkgaXMgY2FsbGVkIGFuZCBpZiBhbiBlcnJvciBvY2N1ciBiZWZvcmUK QXRDb21taXRfTm90aWZ5KCkgdGhlIEF0QWJvcnRfTm90aWZ5KCkgd2lsbCBiZSBjYWxsZWQgd2hp Y2ggd2lsbCBtYXJrCnRoZSByb2xsYmFja2VkIGZpZWxkIGFzIHRydWUuIFdlIGRvIHRoaXMgYnkg cmVtZW1iZXJpbmcgdGhlIFFVRVVFX0hFQUQKcG9zaXRpb24gYmVmb3JlIHRoZSBQcmVDb21taXRf Tm90aWZ5KCkgc3RhcnQgYWRkaW5nIGVudHJpZXMgb24gdGhlCnNoYXJlZCBxdWV1ZSwgYW5kIGlm IHRoZSB0cmFuc2FjdGlvbiBjcmFzaCB3ZSBpdGVyYXRlIGZyb20gdGhpcyBzYXZlZApwb3NpdGlv biB1bnRpbCB0aGUgbmV3IFFVRVVFX0hFQUQgcG9zaXRpb24gbWFya2luZyB0aGUgZW50cmllcyBh cyBub3QKY29tbWl0dGVkLgoKQWxzbyB0aGlzIGNvbW1pdCBpbmNsdWRlIFRBUCB0ZXN0cyB0byBl eGVyY2lzZSB0aGUgVkFDVVVNIEZSRUVaRSBpc3N1ZQphbmQgYWxzbyB0aGUgc2NlbmFyaW8gb2Yg YW4gZXJyb3IgYmVpbmcgb2NjdXIgYmV0d2VlbiB0aGUKUHJlQ29tbWl0X05vdGlmeSgpIGFuZCBB dENvbW1pdF9Ob3RpZnkoKSBjYWxscy4KCkF1dGhvcjogTWF0aGV1cyBBbGNhbnRhcmEgPG10aHMu ZGV2QHBtLm1lPgpDby1hdXRob3JlZC1ieTogQXJzZW5peSBNdWtoaW4gPGFyc2VuaXkubXVraGlu LmRldkBnbWFpbC5jb20+Ci0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYyAgICAgICAg ICAgICAgICAgIHwgMTg2ICsrKysrKysrKysrKysrKysrLQogc3JjL3Rlc3QvbW9kdWxlcy9NYWtl ZmlsZSAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy90ZXN0L21vZHVsZXMvbWVzb24u YnVpbGQgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbGlz dGVuX25vdGlmeS9NYWtlZmlsZSAgfCAgMTkgKysKIC4uLi9tb2R1bGVzL3Rlc3RfbGlzdGVuX25v dGlmeS9tZXNvbi5idWlsZCAgICB8ICAxNCArKwogLi4uL3Rlc3RfbGlzdGVuX25vdGlmeS90LzAw MV94aWRfZnJlZXplLnBsICAgIHwgIDc0ICsrKysrKysKIC4uLi90LzAwMl9hYm9ydGVkX3R4X25v dGlmaWVzLnBsICAgICAgICAgICAgICB8ICA3OSArKysrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAxICsKIDggZmlsZXMgY2hhbmdlZCwgMzc0 IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVz dC9tb2R1bGVzL3Rlc3RfbGlzdGVuX25vdGlmeS9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9saXN0ZW5fbm90aWZ5L21lc29uLmJ1aWxkCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2xpc3Rlbl9ub3RpZnkvdC8wMDFfeGlk X2ZyZWV6ZS5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9saXN0 ZW5fbm90aWZ5L3QvMDAyX2Fib3J0ZWRfdHhfbm90aWZpZXMucGwKCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9hc3luYy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYwpp bmRleCA0YmQzN2Q1YmViNS4uN2U0YWEzYTY0ODcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2FzeW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYwpAQCAtNzks NiArNzksMTkgQEAKICAqCSAgYXJlIHdheSBiZWhpbmQgYW5kIHNob3VsZCBiZSBraWNrZWQgdG8g bWFrZSB0aGVtIGFkdmFuY2UgdGhlaXIKICAqCSAgcG9pbnRlcnMpLgogICoKKyAqICAgIFRoZSBu b3RpZmljYXRpb24gZW50cmllcyBhZGRlZCB0byB0aGUgcXVldWUgYXJlIHNlbGYtY29udGFpbmVk IGFuZAorICogICAgaW5jbHVkZSBhICJjb21taXR0ZWQiIGZpZWxkIHRvIGluZm9ybSBsaXN0ZW5l ciBiYWNrZW5kcyBpZiB0aGUgYXNzb2NpYXRlZAorICogICAgdHJhbnNhY3Rpb24gaGFzIGNvbW1p dHRlZC4gV2UgY291bGQgdXNlIHRoZSBUcmFuc2FjdGlvbklkRGlkQ29tbWl0KCkgYnV0CisgKiAg ICBpZiBhIG5vdGlmaWNhdGlvbiByZW1haW4gaW4gdGhlIHF1ZXVlIGxvbmcgZW5vdWdoIGZvciBW QUNVVU0gRlJFRVpFIHRvCisgKiAgICByZW1vdmUgdGhlIG5lY2Vzc2FyeSBwZ194YWN0LyBmaWxl LCB0aGUgbGlzdGVuZXIgYmFja2VuZCB3aWxsIGZhY2UgZXJyb3JzCisgKiAgICB0byBnZXQgdGhl IHRyYW5zYWN0aW9uIHN0YXR1cy4gVG8gcHJldmVudCB0aGlzLCB0aGUgImNvbW1pdHRlZCIgZmll bGQgaXMKKyAqICAgIHNldCB0byB0cnVlIGR1cmluZyBQcmVDb21taXRfTm90aWZ5KCkgYW5kIGlm IHRoZSB0cmFuc2FjdGlvbiBhYm9ydHMgYmV0d2VlbgorICogICAgdGhlIFByZUNvbW1pdF9Ob3Rp ZnkoKSBhbmQgQXRDb21taXRfTm90aWZ5KCksIHRoZSBBdEFib3J0X05vdGlmeSgpIGlzCisgKiAg ICBjYWxsZWQgdG8gbWFyayB0aGVzZSBlbnRyaWVzIGFzIHVuY29tbWl0dGVkLiBUbyBlbmFibGUg dGhpcywgd2Ugc2F2ZSB0aGUKKyAqICAgIHF1ZXVlJ3MgaGVhZCBwb3NpdGlvbiBiZWZvcmUgYWRk aW5nIG5ldyBlbnRyaWVzIGZyb20gdGhlIGluLXByb2dyZXNzIHRvCisgKiAgICBjb21taXQgdHJh bnNhY3Rpb24uIElmIGFuIGFib3J0IG9jY3VycywgQXRBYm9ydF9Ob3RpZnkoKSB1c2VzIHRoaXMg c2F2ZWQKKyAqICAgIHBvc2l0aW9uIHRvIGZpbmQgYW5kIG1hcmsgdGhlIGVudHJpZXMgYXMgdW5j b21taXR0ZWQuCisgKgogICoJICBGaW5hbGx5LCBhZnRlciB3ZSBhcmUgb3V0IG9mIHRoZSB0cmFu c2FjdGlvbiBhbHRvZ2V0aGVyIGFuZCBhYm91dCB0byBnbwogICoJICBpZGxlLCB3ZSBzY2FuIHRo ZSBxdWV1ZSBmb3IgbWVzc2FnZXMgdGhhdCBuZWVkIHRvIGJlIHNlbnQgdG8gb3VyCiAgKgkgIGZy b250ZW5kICh3aGljaCBtaWdodCBiZSBub3RpZmllcyBmcm9tIG90aGVyIGJhY2tlbmRzLCBvciBz ZWxmLW5vdGlmaWVzCkBAIC0xNDIsNiArMTU1LDcgQEAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIK ICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgorI2lu Y2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jc2lnbmFs LmgiCiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5z LmgiCkBAIC0xODAsNiArMTk0LDggQEAgdHlwZWRlZiBzdHJ1Y3QgQXN5bmNRdWV1ZUVudHJ5CiAJ T2lkCQkJZGJvaWQ7CQkJLyogc2VuZGVyJ3MgZGF0YWJhc2UgT0lEICovCiAJVHJhbnNhY3Rpb25J ZCB4aWQ7CQkJLyogc2VuZGVyJ3MgWElEICovCiAJaW50MzIJCXNyY1BpZDsJCQkvKiBzZW5kZXIn cyBQSUQgKi8KKwlib29sCQlyb2xsYmFja2VkOwkJLyogSXMgdHJhbnNhY3Rpb24gdGhhdCB0aGUg ZW50cnkgYmVsb25ncworCQkJCQkJCQkgKiBjb21taXR0ZWQ/ICovCiAJY2hhcgkJZGF0YVtOQU1F REFUQUxFTiArIE5PVElGWV9QQVlMT0FEX01BWF9MRU5HVEhdOwogfSBBc3luY1F1ZXVlRW50cnk7 CiAKQEAgLTQwMSw4ICs0MTcsMjcgQEAgc3RydWN0IE5vdGlmaWNhdGlvbkhhc2gKIAlOb3RpZmlj YXRpb24gKmV2ZW50OwkJLyogPT4gdGhlIGFjdHVhbCBOb3RpZmljYXRpb24gc3RydWN0ICovCiB9 OwogCisvKiAgSW5mb3JtYXRpb24gbmVlZGVkIGJ5IEF0X0Fib3J0Tm90aWZ5KCkgdG8gcmVtb3Zl IGVudHJpZXMgZnJvbSB0aGUgcXVldWUgZm9yIGFib3J0ZWQgdHJhbnNhY3Rpb25zLiAqLwordHlw ZWRlZiBzdHJ1Y3QgQXRBYm9ydE5vdGlmeUluZm8KK3sKKwkvKgorCSAqIGhlYWQgcG9zaXRpb24g YmVmb3JlIHRoZSB0cmFuc2FjdGlvbiBzdGFydCBhZGRpbmcgZW50cmllcyBvbiB0aGUgc2hhcmVk CisJICogcXVldWUKKwkgKi8KKwlRdWV1ZVBvc2l0aW9uIHByZXZpb3VzSGVhZDsKKworCS8qCisJ ICogaGVhZCBwb3NpdGlvbiBhZnRlciB0aGUgZW50cmllcyBmcm9tIHRoZSBpbi1wcm9ncmVzcyB0 byBjb21taXQKKwkgKiB0cmFuc2FjdGlvbiB3ZXJlIGFkZGVkLgorCSAqLworCVF1ZXVlUG9zaXRp b24gaGVhZDsKKworfSBBdEFib3J0Tm90aWZ5SW5mbzsKKwogc3RhdGljIE5vdGlmaWNhdGlvbkxp c3QgKnBlbmRpbmdOb3RpZmllcyA9IE5VTEw7CiAKK3N0YXRpYyBBdEFib3J0Tm90aWZ5SW5mbyAq YXRBYm9ydEluZm8gPSBOVUxMOworCiAvKgogICogSW5ib3VuZCBub3RpZmljYXRpb25zIGFyZSBp bml0aWFsbHkgcHJvY2Vzc2VkIGJ5IEhhbmRsZU5vdGlmeUludGVycnVwdCgpLAogICogY2FsbGVk IGZyb20gaW5zaWRlIGEgc2lnbmFsIGhhbmRsZXIuIFRoYXQganVzdCBzZXRzIHRoZQpAQCAtNDU3 LDYgKzQ5Miw3IEBAIHN0YXRpYyB2b2lkIEFkZEV2ZW50VG9QZW5kaW5nTm90aWZpZXMoTm90aWZp Y2F0aW9uICpuKTsKIHN0YXRpYyB1aW50MzIgbm90aWZpY2F0aW9uX2hhc2goY29uc3Qgdm9pZCAq a2V5LCBTaXplIGtleXNpemUpOwogc3RhdGljIGludAlub3RpZmljYXRpb25fbWF0Y2goY29uc3Qg dm9pZCAqa2V5MSwgY29uc3Qgdm9pZCAqa2V5MiwgU2l6ZSBrZXlzaXplKTsKIHN0YXRpYyB2b2lk IENsZWFyUGVuZGluZ0FjdGlvbnNBbmROb3RpZmllcyh2b2lkKTsKK3N0YXRpYyB2b2lkIGFzeW5j UXVldWVSb2xsYmFja05vdGlmaWNhdGlvbnModm9pZCk7CiAKIC8qCiAgKiBDb21wdXRlIHRoZSBk aWZmZXJlbmNlIGJldHdlZW4gdHdvIHF1ZXVlIHBhZ2UgbnVtYmVycy4KQEAgLTkyMiw2ICs5NTgs MTggQEAgUHJlQ29tbWl0X05vdGlmeSh2b2lkKQogCQlMb2NrU2hhcmVkT2JqZWN0KERhdGFiYXNl UmVsYXRpb25JZCwgSW52YWxpZE9pZCwgMCwKIAkJCQkJCSBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsK IAorCQkvKgorCQkgKiBCZWZvcmUgc3RhcnQgYWRkaW5nIGVudHJpZXMgb24gdGhlIHNoYXJlZCBx dWV1ZSwgc2F2ZSB0aGUgY3VycmVudAorCQkgKiBRVUVVRV9IRUFEIHNvIGlmIHRoZSBjdXJyZW50 IGluLXByb2dyZXNzIHRvIGNvbW1pdCB0cmFuc2FjdGlvbgorCQkgKiBhYm9ydCB3ZSBjYW4gbWFy ayB0aGUgbm90aWZpY2F0aW9ucyBhZGRlZCBieSB0aGlzIGFib3J0ZWQKKwkJICogdHJhbnNhY3Rp b24gYXMgbm90IGNvbW1pdHRlZC4gU2VlIEF0QWJvcnR0X05vdGlmeSgpIGZvciBtb3JlIGluZm8u CisJCSAqLworCQlBc3NlcnQoYXRBYm9ydEluZm8gPT0gTlVMTCk7CisJCWF0QWJvcnRJbmZvID0g cGFsbG9jKHNpemVvZihBdEFib3J0Tm90aWZ5SW5mbykpOworCQlMV0xvY2tBY3F1aXJlKE5vdGlm eVF1ZXVlTG9jaywgTFdfU0hBUkVEKTsKKwkJYXRBYm9ydEluZm8tPnByZXZpb3VzSGVhZCA9IFFV RVVFX0hFQUQ7CisJCUxXTG9ja1JlbGVhc2UoTm90aWZ5UXVldWVMb2NrKTsKKwogCQkvKiBOb3cg cHVzaCB0aGUgbm90aWZpY2F0aW9ucyBpbnRvIHRoZSBxdWV1ZSAqLwogCQluZXh0Tm90aWZ5ID0g bGlzdF9oZWFkKHBlbmRpbmdOb3RpZmllcy0+ZXZlbnRzKTsKIAkJd2hpbGUgKG5leHROb3RpZnkg IT0gTlVMTCkKQEAgLTk0OCw2ICs5OTYsMTcgQEAgUHJlQ29tbWl0X05vdGlmeSh2b2lkKQogCQkJ TFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOwogCQl9CiAKKwkJLyoKKwkJICogU2F2ZSB0 aGUgbmV3IFFVRVVFX0hFQUQgcG9zaXRpb24gc28gaWYgYW5vdGhlciBwdWJsaXNoZXIgYWRkCisJ CSAqIGVudHJpZXMgb24gdGhlIHNoYXJlZCBxdWV1ZSBhbmQgc3VjY2Vzc2Z1bGx5IGNvbW1pdCB0 aGUgdHJhbnNhY3Rpb24KKwkJICogd2UgZG9uJ3QgY2hhbmdlIHRoZSBjb21taXR0ZWQgc3RhdHVz IG9mIHRoZXNlIG5vdGlmaWNhdGlvbnMgd2hpbGUKKwkJICogbWFya2luZyB0aGUgbm90aWZpY2F0 aW9uIGZyb20gYSBhYm9ydGVkIHRyYW5zYWN0aW9uIGFzIG5vdAorCQkgKiBjb21taXR0ZWQuCisJ CSAqLworCQlMV0xvY2tBY3F1aXJlKE5vdGlmeVF1ZXVlTG9jaywgTFdfU0hBUkVEKTsKKwkJYXRB Ym9ydEluZm8tPmhlYWQgPSBRVUVVRV9IRUFEOworCQlMV0xvY2tSZWxlYXNlKE5vdGlmeVF1ZXVl TG9jayk7CisKIAkJLyogTm90ZSB0aGF0IHdlIGRvbid0IGNsZWFyIHBlbmRpbmdOb3RpZmllczsg QXRDb21taXRfTm90aWZ5IHdpbGwuICovCiAJfQogfQpAQCAtMTQwMiw2ICsxNDYxLDEzIEBAIGFz eW5jUXVldWVBZGRFbnRyaWVzKExpc3RDZWxsICpuZXh0Tm90aWZ5KQogCQkvKiBDb25zdHJ1Y3Qg YSB2YWxpZCBxdWV1ZSBlbnRyeSBpbiBsb2NhbCB2YXJpYWJsZSBxZSAqLwogCQlhc3luY1F1ZXVl Tm90aWZpY2F0aW9uVG9FbnRyeShuLCAmcWUpOwogCisJCS8qCisJCSAqIE1hcmsgdGhlIGVudHJ5 IGFzIG5vdCByb2xsYmFja2VkLiBJZiB0aGUgdHJhbnNhY3Rpb24gdGhhdCB0aGlzCisJCSAqIG5v dGlmaWNhdGlvbiBiZWxvbmdzIGZhaWxzIHRvIGNvbW1pdCB0aGUgQXRBYm9ydF9Ob3RpZnkoKSB3 aWxsIG1hcmsKKwkJICogdGhpcyBlbnRyeSBhcyByb2xsYmFja2VkLgorCQkgKi8KKwkJcWUucm9s bGJhY2tlZCA9IGZhbHNlOworCiAJCW9mZnNldCA9IFFVRVVFX1BPU19PRkZTRVQocXVldWVfaGVh ZCk7CiAKIAkJLyogQ2hlY2sgd2hldGhlciB0aGUgZW50cnkgcmVhbGx5IGZpdHMgb24gdGhlIGN1 cnJlbnQgcGFnZSAqLwpAQCAtMTY3OCw2ICsxNzQ0LDE2IEBAIEF0QWJvcnRfTm90aWZ5KHZvaWQp CiAJaWYgKGFtUmVnaXN0ZXJlZExpc3RlbmVyICYmIGxpc3RlbkNoYW5uZWxzID09IE5JTCkKIAkJ YXN5bmNRdWV1ZVVucmVnaXN0ZXIoKTsKIAorCS8qCisJICogQXRBYm9ydF9Ob3RpZnkgaW5mb3Jt YXRpb24gaXMgc2V0IHdoZW4gd2UgYXJlIGFkZGluZyBlbnRyaWVzIG9uIHRoZQorCSAqIGdsb2Jh bCBzaGFyZWQgcXVldWUgYXQgUHJlQ29tbWl0X05vdGlmeSgpLCBzbyBpbiBjYXNlIG9mIGFuIGFi b3J0IG9uCisJICogdGhlIHRyYW5zYWN0aW9uIGJldHdlZW4gdGhlIFByZUNvbW1pdF9Ob3RpZnko KSBhbmQgQXRDb21taXRfTm90aWZ5KCkgd2UKKwkgKiB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byBt YXJrIHRoZSBlbnRyaWVzIGZyb20gdGhlIGFib3J0ZWQgdHJhbnNhY3Rpb24KKwkgKiBhcyBub3Qg Y29tbWl0dGVkLgorCSAqLworCWlmIChhdEFib3J0SW5mbyAhPSBOVUxMKQorCQlhc3luY1F1ZXVl Um9sbGJhY2tOb3RpZmljYXRpb25zKCk7CisKIAkvKiBBbmQgY2xlYW4gdXAgKi8KIAlDbGVhclBl bmRpbmdBY3Rpb25zQW5kTm90aWZpZXMoKTsKIH0KQEAgLTIwNjIsMTEgKzIxMzgsMTIgQEAgYXN5 bmNRdWV1ZVByb2Nlc3NQYWdlRW50cmllcyh2b2xhdGlsZSBRdWV1ZVBvc2l0aW9uICpjdXJyZW50 LAogCQkJCSAqIGJlY2F1c2Ugb3VyIHRyYW5zYWN0aW9uIGNhbm5vdCAoeWV0KSBoYXZlIHF1ZXVl ZCBhbnkKIAkJCQkgKiBtZXNzYWdlcy4KIAkJCQkgKi8KKwogCQkJCSpjdXJyZW50ID0gdGhpc2Vu dHJ5OwogCQkJCXJlYWNoZWRTdG9wID0gdHJ1ZTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCWVsc2Ug aWYgKFRyYW5zYWN0aW9uSWREaWRDb21taXQocWUtPnhpZCkpCisJCQllbHNlIGlmICghcWUtPnJv bGxiYWNrZWQpCiAJCQl7CiAJCQkJLyogcWUtPmRhdGEgaXMgdGhlIG51bGwtdGVybWluYXRlZCBj aGFubmVsIG5hbWUgKi8KIAkJCQljaGFyCSAgICpjaGFubmVsID0gcWUtPmRhdGE7CkBAIC0yMzg1 LDYgKzI0NjIsNyBAQCBDbGVhclBlbmRpbmdBY3Rpb25zQW5kTm90aWZpZXModm9pZCkKIAkgKi8K IAlwZW5kaW5nQWN0aW9ucyA9IE5VTEw7CiAJcGVuZGluZ05vdGlmaWVzID0gTlVMTDsKKwlhdEFi b3J0SW5mbyA9IE5VTEw7CiB9CiAKIC8qCkBAIC0yMzk1LDMgKzI0NzMsMTA5IEBAIGNoZWNrX25v dGlmeV9idWZmZXJzKGludCAqbmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2Up CiB7CiAJcmV0dXJuIGNoZWNrX3NscnVfYnVmZmVycygibm90aWZ5X2J1ZmZlcnMiLCBuZXd2YWwp OwogfQorCisKKy8qCisgKiAgTWFyayBub3RpZmljYXRpb25zIGFkZGVkIG9uIGFuIGluLXByb2dy ZXNzIHRvIGNvbW1pdCB0cmFuc2FjdGlvbiBhcyBub3QgY29tbWl0dGVkLgorICoKKyAqIE5vdGlm aWNhdGlvbnMgYWRkZWQgb24gdGhlIHNoYXJlZCBnbG9iYWwgcXVldWUgYXJlIGFkZGVkIHdpdGgg Y29tbWl0dGVkID0KKyAqIHRydWUgZHVyaW5nIFByZUNvbW1pdF9Ob3RpZnkoKSBjYWxsLiBJZiBh biBlcnJvciBvY2N1ciBiZXR3ZWVuIHRoZQorICogUHJlQ29tbWl0X05vdGlmeSgpIGFuZCBBdENv bW1pdF9Ob3RpZnkoKSB0aGUgQXRBYm9ydF9Ob3RpZnkoKSB3aWxsIGJlIGNhbGxlZAorICogYW5k IHdlIG5lZWQgdG8gbWFyayB0aGVzZSBub3RpZmljYXRpb25zIGFkZGVkIG9uIHRoZSBzaGFyZWQg cXVldWUgYnkgdGhlCisgKiBhYm9ydGVkIHRyYW5zYWN0aW9uIGFzIG5vdCBjb21taXR0ZWQgc28g dGhhdCBsaXN0ZW5lciBiYWNrZW5kcyBjYW4gc2tpcAorICogdGhlc2Ugbm90aWZpY2F0aW9ucyB3 aGVuIHJlYWRpbmcgdGhlIHF1ZXVlLgorICoKKyAqIFdlIHByZXZpb3VzbHkgcmVseSBvbiBUcmFu c2FjdGlvbkRpZENvbW1pdCgpIHRvIGNoZWNrIHRoaXMgYnV0IGlmIGEKKyAqIG5vdGlmaWNhdGlv biBpcyBrZWVwIGZvciB0b28gbG9uZyBvbiB0aGUgcXVldWUgYW5kIHRoZSBWQUNVVU0gRlJFRVpF IGlzCisgKiBleGVjdXRlZCBkdXJpbmcgdGhpcyBwZXJpb2QgaXQgY2FuIHJlbW92ZSBjbG9nIGZp bGVzIHRoYXQgaXMgbmVlZGVkIHRvIGNoZWNrCisgKiB0aGUgdHJhbnNhY3Rpb24gc3RhdHVzIG9m IHRoaXMgbm90aWZpY2F0aW9uLCBzbyB3ZSBtYWtlIHRoZSBub3RpZmljYXRpb24KKyAqIGVudHJp ZXMgc2VsZiBjb250YWluZWQgdG8gc2tpcCB0aGlzIHByb2JsZW0uCisgKgorICovCitzdGF0aWMg dm9pZAorYXN5bmNRdWV1ZVJvbGxiYWNrTm90aWZpY2F0aW9ucyh2b2lkKQoreworCVF1ZXVlUG9z aXRpb24gY3VycmVudCA9IGF0QWJvcnRJbmZvLT5wcmV2aW91c0hlYWQ7CisJUXVldWVQb3NpdGlv biBoZWFkID0gYXRBYm9ydEluZm8tPmhlYWQ7CisKKwkvKgorCSAqIEl0ZXJhdGVzIGZyb20gdGhl IHBvc2l0aW9uIHNhdmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRyYW5zYWN0aW9uCisJICog KHByZXZpb3VzSGVhZCkgdG8gdGhlIGN1cnJlbnQgaGVhZCBvZiB0aGUgcXVldWUuIFdlIGRvIHRo aXMgdG8gbWFyayBhbGwKKwkgKiBlbnRyaWVzIHdpdGhpbiB0aGlzIHJhbmdlIGFzIHVuY29tbWl0 dGVkIGluIGNhc2Ugb2YgYSB0cmFuc2FjdGlvbgorCSAqIGNyYXNoLgorCSAqLworCWZvciAoOzsp CisJeworCQlpbnQ2NAkJY3VycGFnZSA9IFFVRVVFX1BPU19QQUdFKGN1cnJlbnQpOworCQlpbnQJ CQljdXJvZmZzZXQgPSBRVUVVRV9QT1NfT0ZGU0VUKGN1cnJlbnQpOworCQlMV0xvY2sJICAgKmxv Y2sgPSBTaW1wbGVMcnVHZXRCYW5rTG9jayhOb3RpZnlDdGwsIGN1cnBhZ2UpOworCQlpbnQJCQlz bG90bm87CisKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSByZWFjaGVkIHRoZSBoZWFkLCBhbGwgZW50 cmllcyBmcm9tIHRoaXMgdHJhbnNhY3Rpb24gaGF2ZQorCQkgKiBiZWVuIG1hcmtlZCBhcyBub3Qg Y29tbWl0dGVkIHNvIGJyZWFrIHRoZSBsb29wLgorCQkgKi8KKwkJaWYgKFFVRVVFX1BPU19FUVVB TChjdXJyZW50LCBoZWFkKSkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIEFjcXVpcmUgYW4gZXhj bHVzaXZlIGxvY2sgb24gdGhlIGN1cnJlbnQgU0xSVSBwYWdlIHRvIGVuc3VyZSBubworCQkgKiBv dGhlciBwcm9jZXNzIGNhbiByZWFkIG9yIHdyaXRlIHRvIGl0IHdoaWxlIHdlIGFyZSBtYXJraW5n IHRoZQorCQkgKiBlbnRyaWVzLgorCQkgKi8KKwkJTFdMb2NrQWNxdWlyZShsb2NrLCBMV19FWENM VVNJVkUpOworCisJCS8qIEZldGNoIHRoZSBwYWdlIGZyb20gU0xSVSB0byBtYXJrIGVudHJpZXMg YXMgbm90IGNvbW1pdHRlZC4gKi8KKwkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoTm90aWZ5 Q3RsLCBjdXJwYWdlLCB0cnVlLCBJbnZhbGlkVHJhbnNhY3Rpb25JZCk7CisKKwkJLyoKKwkJICog TG9vcCB0aHJvdWdoIGFsbCBlbnRyaWVzIG9uIHRoZSBjdXJyZW50IHBhZ2UuIFRoZSBsb29wIHdp bGwKKwkJICogY29udGludWUgdW50aWwgd2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUgcGFnZSBvciB0 aGUgY3VycmVudCBoZWFkLgorCQkgKi8KKwkJZm9yICg7OykKKwkJeworCQkJQXN5bmNRdWV1ZUVu dHJ5ICpxZTsKKwkJCWJvb2wJCXJlYWNoZWRFbmRPZlBhZ2U7CisKKwkJCS8qCisJCQkgKiBDaGVj ayBhZ2FpbiB0byBzdG9wIHByb2Nlc3NpbmcgdGhlIGVudHJpZXMgb24gdGhlIGN1cnJlbnQgcGFn ZS4KKwkJCSAqLworCQkJaWYgKFFVRVVFX1BPU19FUVVBTChjdXJyZW50LCBoZWFkKSkKKwkJCQli cmVhazsKKworCQkJLyoKKwkJCSAqIEdldCBhIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZW50cnkg d2l0aGluIHRoZSBzaGFyZWQgcGFnZQorCQkJICogYnVmZmVyLgorCQkJICovCisJCQlxZSA9IChB c3luY1F1ZXVlRW50cnkgKikgKE5vdGlmeUN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9d ICsgY3Vyb2Zmc2V0KTsKKworCQkJLyoKKwkJCSAqIEp1c3QgZm9yIHNhbml0eSwgYWxsIGVudHJp ZXMgb24gdGhlIHNoYXJlZCBxdWV1ZSBzaG91bGQgYmUKKwkJCSAqIG1hcmtlZCBhcyBub3QgY29t bWl0dGVkLgorCQkJICovCisJCQlBc3NlcnQoIXFlLT5yb2xsYmFja2VkKTsKKworCQkJLyogRW5z dXJlIHRoYXQgbGlzdGVuZXIgYmFja2VuZHMgY2FuIG5vdCBzZWUgdGhlc2UgZW50cmllcyAqLwor CQkJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc0luUHJvZ3Jlc3MocWUtPnhpZCkpOworCisJCQkvKgor CQkJICogTWFyayB0aGUgZW50cnkgYXMgcm9sbGJhY2tlZCBzbyBsaXN0ZW5lciBiYWNrZW5kcyBj YW4gc2tpcCB0aGlzCisJCQkgKiBub3RpZmljYXRpb24uCisJCQkgKi8KKwkJCXFlLT5yb2xsYmFj a2VkID0gdHJ1ZTsKKworCQkJLyogQWR2YW5jZSBvdXIgcG9zaXRpb24uICovCisJCQlyZWFjaGVk RW5kT2ZQYWdlID0gYXN5bmNRdWV1ZUFkdmFuY2UoJmN1cnJlbnQsIHFlLT5sZW5ndGgpOworCQkJ aWYgKHJlYWNoZWRFbmRPZlBhZ2UpCisJCQkJYnJlYWs7CisKKwkJCS8qCisJCQkgKiBVcGRhdGUg dGhlIG9mZnNldCBmb3IgdGhlIG5leHQgaXRlcmF0aW9uIHdpdGhpbiB0aGUgc2FtZSBwYWdlLgor CQkJICovCisJCQljdXJvZmZzZXQgPSBRVUVVRV9QT1NfT0ZGU0VUKGN1cnJlbnQpOworCQl9CisK KwkJLyogUmVsZWFzZSB0aGUgZXhjbHVzaXZlIGxvY2sgb24gdGhlIHBhZ2UuICovCisJCUxXTG9j a1JlbGVhc2UobG9jayk7CisJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtl ZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKaW5kZXggOTAyYTc5NTQxMDEuLmEwMTVj OTYxZDM1IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCisrKyBiL3NyYy90 ZXN0L21vZHVsZXMvTWFrZWZpbGUKQEAgLTI5LDYgKzI5LDcgQEAgU1VCRElSUyA9IFwKIAkJICB0 ZXN0X2ludDEyOCBcCiAJCSAgdGVzdF9pbnRlZ2Vyc2V0IFwKIAkJICB0ZXN0X2pzb25fcGFyc2Vy IFwKKwkJICB0ZXN0X2xpc3Rlbl9ub3RpZnkgXAogCQkgIHRlc3RfbGZpbmQgXAogCQkgIHRlc3Rf bHdsb2NrX3RyYW5jaGVzIFwKIAkJICB0ZXN0X21pc2MgXApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv bW9kdWxlcy9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQKaW5kZXgg MTRmYzc2MWM0Y2YuLjZhZjMzNDQ4ZDdiIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL21l c29uLmJ1aWxkCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQKQEAgLTI4LDYgKzI4 LDcgQEAgc3ViZGlyKCd0ZXN0X2dpbnBvc3RpbmdsaXN0JykKIHN1YmRpcigndGVzdF9pbnQxMjgn KQogc3ViZGlyKCd0ZXN0X2ludGVnZXJzZXQnKQogc3ViZGlyKCd0ZXN0X2pzb25fcGFyc2VyJykK K3N1YmRpcigndGVzdF9saXN0ZW5fbm90aWZ5JykKIHN1YmRpcigndGVzdF9sZmluZCcpCiBzdWJk aXIoJ3Rlc3RfbHdsb2NrX3RyYW5jaGVzJykKIHN1YmRpcigndGVzdF9taXNjJykKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9saXN0ZW5fbm90aWZ5L01ha2VmaWxlIGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2xpc3Rlbl9ub3RpZnkvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLmMxZWI0ZmRlMzcwCi0tLSAvZGV2L251bGwKKysrIGIvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2xpc3Rlbl9ub3RpZnkvTWFrZWZpbGUKQEAgLTAsMCArMSwxOSBA QAorIyBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbGlzdGVuX25vdGlmeS9NYWtlZmlsZQorCitNT0RV TEUgPSB0ZXN0X2xpc3Rlbl9ub3RpZnkKK1BHRklMRURFU0MgPSAidGVzdF9saXN0ZW5fbm90aWZ5 IC0gcmVncmVzc2lvbiB0ZXN0aW5nIGZvciBMSVNURU4vTk9USUZZIHN1cHBvcnQiCisKK1RBUF9U RVNUUyA9IDEKKworRVhUUkFfSU5TVEFMTD1zcmMvdGVzdC9tb2R1bGVzL3hpZF93cmFwYXJvdW5k CisKK2lmZGVmIFVTRV9QR1hTCitQR19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVs bCAkKFBHX0NPTkZJRykgLS1wZ3hzKQoraW5jbHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBz cmMvdGVzdC9tb2R1bGVzL3Rlc3RfbGlzdGVuX25vdGlmeQordG9wX2J1aWxkZGlyID0gLi4vLi4v Li4vLi4KK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKK2luY2x1 ZGUgJCh0b3Bfc3JjZGlyKS9jb250cmliL2NvbnRyaWItZ2xvYmFsLm1rCitlbmRpZgpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2xpc3Rlbl9ub3RpZnkvbWVzb24uYnVpbGQgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfbGlzdGVuX25vdGlmeS9tZXNvbi5idWlsZApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTY4MDUyY2QzNTMKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbGlzdGVuX25vdGlmeS9tZXNvbi5idWlsZApAQCAt MCwwICsxLDE0IEBACisjIENvcHlyaWdodCAoYykgMjAyMi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAorCit0ZXN0cyArPSB7CisgICduYW1lJzogJ3Rlc3RfbGlzdGVu X25vdGlmeScsCisgICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNlX2RpcigpLAorICAnYmQnOiBt ZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpLAorICAndGFwJzogeworICAgICd0ZXN0cyc6IFsKKyAg ICAgICd0LzAwMV94aWRfZnJlZXplLnBsJywKKyAgICAgICd0LzAwMl9hYm9ydGVkX3R4X25vdGlm aWVzLnBsJworICAgIF0sCisgIH0sCit9CisKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9saXN0ZW5fbm90aWZ5L3QvMDAxX3hpZF9mcmVlemUucGwgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfbGlzdGVuX25vdGlmeS90LzAwMV94aWRfZnJlZXplLnBsCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hOGJiZDI2OGMwZgotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9saXN0ZW5fbm90aWZ5L3QvMDAxX3hpZF9mcmVlemUucGwKQEAg LTAsMCArMSw3NCBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNSwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9 PiAnYWxsJzsKK3VzZSBGaWxlOjpQYXRoIHF3KG1rcGF0aCk7Cit1c2UgUG9zdGdyZVNRTDo6VGVz dDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3Jl OworCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbm9kZScpOwor JG5vZGUtPmluaXQ7Ciskbm9kZS0+c3RhcnQ7CisKKyMgQ2hlY2sgaWYgdGhlIGV4dGVuc2lvbiB4 aWRfd3JhcGFyb3VuZCBpcyBhdmFpbGFibGUsIGFzIGl0IG1heSBiZQorIyBwb3NzaWJsZSB0aGF0 IHRoaXMgc2NyaXB0IGlzIHJ1biB3aXRoIGluc3RhbGxjaGVjaywgd2hlcmUgdGhlIG1vZHVsZQor IyB3b3VsZCBub3QgYmUgaW5zdGFsbGVkIGJ5IGRlZmF1bHQuCitpZiAoISRub2RlLT5jaGVja19l eHRlbnNpb24oJ3hpZF93cmFwYXJvdW5kJykpCit7CisJcGxhbiBza2lwX2FsbCA9PiAnRXh0ZW5z aW9uIHhpZF93cmFwYXJvdW5kIG5vdCBpbnN0YWxsZWQnOworfQorCisjIFNldHVwCiskbm9kZS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdDUkVBVEUgRVhURU5TSU9OIHhpZF93cmFwYXJvdW5kJyk7 Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJJ0NSRUFURSBUQUJMRSB0IEFTIFNFTEVD VCBnIEFTIGEsIGcrMiBBUyBiIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSBnOycKKyk7 Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJJ0FMVEVSIERBVEFCQVNFIHRlbXBsYXRl MCBXSVRIIEFMTE9XX0NPTk5FQ1RJT05TIHRydWUnKTsKKworIyAtLS0gU3RhcnQgU2Vzc2lvbiAx IGFuZCBsZWF2ZSBpdCBpZGxlIGluIHRyYW5zYWN0aW9uCitteSAkcHNxbF9zZXNzaW9uMSA9ICRu b2RlLT5iYWNrZ3JvdW5kX3BzcWwoJ3Bvc3RncmVzJyk7CiskcHNxbF9zZXNzaW9uMS0+cXVlcnlf c2FmZSgnbGlzdGVuIHM7JywgIlNlc3Npb24gMSBsaXN0ZW5zIHRvICdzJyIpOworJHBzcWxfc2Vz c2lvbjEtPnF1ZXJ5X3NhZmUoJ2JlZ2luOycsICJTZXNzaW9uIDEgc3RhcnRzIGEgdHJhbnNhY3Rp b24iKTsKKworIyAtLS0gU2Vzc2lvbiAyLCBtdWx0aXBsZSBub3RpZnkncywgYW5kIGNvbW1pdCAt LS0KK2ZvciBteSAkaSAoMSAuLiAxMCkKK3sKKwkkbm9kZS0+c2FmZV9wc3FsKAorCQkncG9zdGdy ZXMnLCAiCisJCUJFR0lOOworCQlOT1RJRlkgcywgJyRpJzsKKwkJQ09NTUlUOyIpOworfQorCisj IENvbnN1bWUgZW5vdWdoIFhJRHMgdG8gdHJpZ2dlciB0cnVuY2F0aW9uCiskbm9kZS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICdzZWxlY3QgY29uc3VtZV94aWRzKDEwMDAwMDAwKTsnKTsKKworIyBF eGVjdXRlIHVwZGF0ZSBzbyB0aGUgZnJvemVuIHhpZCBvZiAidCIgdGFibGUgaXMgdXBkYXRlZCB0 byBhIHhpZCBncmVhdGVyCisjIHRoYW4gY29uc3VtZV94aWRzKCkgcmVzdWx0Ciskbm9kZS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICdVUERBVEUgdCBTRVQgYSA9IGErYjsnKTsKKworIyBSZW1lbWJl ciBjdXJyZW50IGRhdGZyb3plbnhpZCBiZWZvcmUgdmFjdXVtIGZyZWV6ZSB0byBlbnN1cmUgdGhh dCBpdCBpcyBhZHZhbmNlZC4KK215ICRkYXRhZnJvbnplbnhpZCA9ICRub2RlLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgInNlbGVjdCBkYXRmcm96ZW54aWQgZnJvbSBwZ19kYXRhYmFzZSB3aGVyZSBk YXRuYW1lID0gJ3Bvc3RncmVzJyIpOworCisjIEV4ZWN1dGUgdmFjdXVtIGZyZWV6ZSBvbiBhbGwg ZGF0YWJhc2VzCiskbm9kZS0+Y29tbWFuZF9vayhbICd2YWN1dW1kYicsICctLWFsbCcsICctLWZy ZWV6ZScsICctLXBvcnQnLCAkbm9kZS0+cG9ydCBdLAorCSJ2YWN1dW1kYiAtLWFsbCAtLWZyZWV6 ZSIpOworCisjIEdldCB0aGUgbmV3IGRhdGZyb3plbnhpZCBhZnRlciB2YWN1dW0gZnJlZXplIHRv IGVuc3VyZSB0aGF0IGlzIGFkdmFuY2VkIGJ1dAorIyB3ZSBjYW4gc3RpbGwgZ2V0IHRoZSBub3Rp ZmljYXRpb24gc3RhdHVzIG9mIHRoZSBub3RpZmljYXRpb24KK215ICRkYXRhZnJvbnplbnhpZF9m cmVlemUgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJzZWxlY3QgZGF0ZnJvemVueGlk IGZyb20gcGdfZGF0YWJhc2Ugd2hlcmUgZGF0bmFtZSA9ICdwb3N0Z3JlcyciKTsKK29rKCRkYXRh ZnJvbnplbnhpZF9mcmVlemUgPiAkZGF0YWZyb256ZW54aWQsICdkYXRmcm96ZW54aWQgaXMgYWR2 YW5jZWQnKTsKKworIyBPbiBTZXNzaW9uIDEsIGNvbW1pdCBhbmQgZW5zdXJlIHRoYXQgdGhlIGFs bCBub3RpZmljYXRpb25zIGlzIHJlY2VpdmVkCitteSAkcmVzID0gJHBzcWxfc2Vzc2lvbjEtPnF1 ZXJ5X3NhZmUoJ2NvbW1pdDsnLCAiY29tbWl0IGxpc3RlbiBzOyIpOworbXkgJG5vdGlmaWNhdGlv bnNfY291bnQgPSAwOworZm9yZWFjaCBteSAkaSAoc3BsaXQoJ1xuJywgJHJlcykpCit7CisJJG5v dGlmaWNhdGlvbnNfY291bnQrKzsKKwlsaWtlKCRpLCBxci9Bc3luY2hyb25vdXMgbm90aWZpY2F0 aW9uICJzIiB3aXRoIHBheWxvYWQgIiRub3RpZmljYXRpb25zX2NvdW50IiByZWNlaXZlZC8pOwor fQoraXMoJG5vdGlmaWNhdGlvbnNfY291bnQsIDEwLCAncmVjZWl2ZWQgYWxsIGNvbW1pdHRlZCBu b3RpZmljYXRpb25zJyk7CisKK2RvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2xpc3Rlbl9ub3RpZnkvdC8wMDJfYWJvcnRlZF90eF9ub3RpZmllcy5wbCBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9saXN0ZW5fbm90aWZ5L3QvMDAyX2Fib3J0ZWRfdHhfbm90 aWZpZXMucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRhZTdhMjRm NWIyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2xpc3Rlbl9ub3Rp ZnkvdC8wMDJfYWJvcnRlZF90eF9ub3RpZmllcy5wbApAQCAtMCwwICsxLDc5IEBACisjIENvcHly aWdodCAoYykgMjAyNC0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOwordXNlIEZpbGU6OlBh dGggcXcobWtwYXRoKTsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3Rn cmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKKyMgVGVzdCBjaGVja3MgdGhh dCBsaXN0ZW5lcnMgZG8gbm90IHJlY2VpdmUgbm90aWZpY2F0aW9ucyBmcm9tIGFib3J0ZWQKKyMg dHJhbnNhY3Rpb24gZXZlbiBpZiBub3RpZmljYXRpb25zIGhhdmUgYmVlbiBhZGRlZCB0byB0aGUg bGlzdGVuL25vdGlmeQorIyBxdWV1ZS4gVG8gcmVwcm9kdWNlIGl0IHdlIHVzZSB0aGUgZmFjdCB0 aGF0IHNlcmlhbGl6YWJsZSBjb25mbGljdHMKKyMgYXJlIGNoZWNrZWQgYWZ0ZXIgdHggYWRkcyBu b3RpZmljYXRpb25zIHRvIHRoZSBxdWV1ZS4KKworbXkgJG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0 OjpDbHVzdGVyLT5uZXcoJ25vZGUnKTsKKyRub2RlLT5pbml0OworJG5vZGUtPnN0YXJ0OworCisj IFNldHVwCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdDUkVBVEUgVEFCTEUgdDEgKGEg Ymlnc2VyaWFsKTsnKTsKKworIyBMaXN0ZW5lcgorbXkgJHBzcWxfbGlzdGVuZXIgPSAkbm9kZS0+ YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3JlcycpOworJHBzcWxfbGlzdGVuZXItPnF1ZXJ5X3NhZmUo J0xJU1RFTiBjaDsnKTsKKworIyBTZXNzaW9uMS4gU3RhcnQgU0VSSUFMSVpBQkxFIHR4IGFuZCBh ZGQgYSBub3RpZmljYXRpb24uCitteSAkcHNxbF9zZXNzaW9uMSA9ICRub2RlLT5iYWNrZ3JvdW5k X3BzcWwoJ3Bvc3RncmVzJyk7CiskcHNxbF9zZXNzaW9uMS0+cXVlcnlfc2FmZSgiCisJQkVHSU4g SVNPTEFUSU9OIExFVkVMIFNFUklBTElaQUJMRTsKKwlTRUxFQ1QgKiBGUk9NIHQxOworCUlOU0VS VCBJTlRPIHQxIERFRkFVTFQgVkFMVUVTOworCU5PVElGWSBjaCwnY29tbWl0dGVkXzAnOworCU5P VElGWSBjaCwnY29tbWl0dGVkXzEnOworIik7CisKKyMgU2Vzc2lvbjIuIFN0YXJ0IFNFUklBTEla QUJMRSB0eCwgYWRkIGEgbm90aWZpY2F0aW9uIGFuZCBpbnRyb2R1Y2UgYSBjb25mbGljdAorIyB3 aXRoIHNlc3Npb24xLgorbXkgJHBzcWxfc2Vzc2lvbjIgPSAkbm9kZS0+YmFja2dyb3VuZF9wc3Fs KCdwb3N0Z3JlcycsIG9uX2Vycm9yX3N0b3AgPT4gMCk7CiskcHNxbF9zZXNzaW9uMi0+cXVlcnlf c2FmZSgiCisJQkVHSU4gSVNPTEFUSU9OIExFVkVMIFNFUklBTElaQUJMRTsKKwlTRUxFQ1QgKiBG Uk9NIHQxOworCUlOU0VSVCBJTlRPIHQxIERFRkFVTFQgVkFMVUVTOworIik7CisKKyMgU2VuZCBu b3RpZmljYXRpb25zIHRoYXQgc2hvdWxkIG5vdCBiZSBldmVudHVhbGx5IGRlbGl2ZXJlZCwgYXMg c2Vzc2lvbjIKKyMgdHJhbnNhY3Rpb24gd2lsbCBiZSBhYm9ydGVkLgorbXkgJG1lc3NhZ2UgPSAn YWJvcnRlZF8nIC4gJ2EnIHggMTAwMDsKK2ZvciAobXkgJGkgPSAwOyAkaSA8IDEwOyAkaSsrKSB7 CisgICAgJHBzcWxfc2Vzc2lvbjItPnF1ZXJ5X3NhZmUoIk5PVElGWSBjaCwgJyRpJG1lc3NhZ2Un Iik7Cit9CisKKyMgU2Vzc2lvbjEgc2hvdWxkIGJlIGNvbW1pdHRlZCBzdWNjZXNzZnVsbHkuIExp c3RlbmVycyBtdXN0IHJlY2VpdmUgc2Vzc2lvbjEKKyMgbm90aWZpY2F0aW9ucy4KKyRwc3FsX3Nl c3Npb24xLT5xdWVyeV9zYWZlKCJDT01NSVQ7Iik7CisKKyMgU2Vzc2lvbjIgc2hvdWxkIGJlIGFi b3J0ZWQgZHVlIHRvIHRoZSBjb25mbGljdCB3aXRoIHNlc3Npb24xLiBUcmFuc2FjdGlvbgorIyBp cyBhYm9ydGVkIGFmdGVyIGFkZGluZyBub3RpZmljYXRpb25zIHRvIHRoZSBsaXN0ZW4vbm90aWZ5 IHF1ZXVlLCBidXQKKyMgbGlzdGVuZXJzIHNob3VsZCBub3QgcmVjZWl2ZSBzZXNzaW9uMiBub3Rp ZmljYXRpb25zLgorJHBzcWxfc2Vzc2lvbjItPnF1ZXJ5KCJDT01NSVQ7Iik7CisKKyMgc2VuZCBt b3JlIG5vdGlmaWNhdGlvbnMgYWZ0ZXIgYWJvcnRlZAorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiTk9USUZZIGNoLCAnY29tbWl0dGVkXzInOyIpOworJG5vZGUtPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiTk9USUZZIGNoLCAnY29tbWl0dGVkXzMnOyIpOworCisjIGZldGNoIG5vdGlmaWNh dGlvbnMKK215ICRyZXMgPSAkcHNxbF9saXN0ZW5lci0+cXVlcnlfc2FmZSgnYmVnaW47IGNvbW1p dDsnKTsKKworIyBjaGVjayByZWNlaXZlZCBub3RpZmljYXRpb25zCitteSBAbGluZXMgPSBzcGxp dCgnXG4nLCAkcmVzKTsKK2lzKEBsaW5lcywgNCwgJ3JlY2VpdmVkIGFsbCBjb21taXR0ZWQgbm90 aWZpY2F0aW9ucycpOworZm9yIChteSAkaSA9IDA7ICRpIDwgNDsgJGkrKykgeworICAgIGxpa2Uo JGxpbmVzWyRpXSwgcXIvQXN5bmNocm9ub3VzIG5vdGlmaWNhdGlvbiAiY2giIHdpdGggcGF5bG9h ZCAiY29tbWl0dGVkXyRpIiByZWNlaXZlZC8pOworfQorCitvaygkcHNxbF9saXN0ZW5lci0+cXVp dCk7CitvaygkcHNxbF9zZXNzaW9uMS0+cXVpdCk7CitvaygkcHNxbF9zZXNzaW9uMi0+cXVpdCk7 CisKK2RvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCAzNzdhNzk0 NjU4NS4uMzg1YmJiMTZkNjQgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xNjAsNiAr MTYwLDcgQEAgQXJyYXlUeXBlCiBBc3luY1F1ZXVlQ29udHJvbAogQXN5bmNRdWV1ZUVudHJ5CiBB c3luY1JlcXVlc3QKK0F0QWJvcnROb3RpZnlJbmZvCiBBdHRJbk1ldGFkYXRhCiBBdHRTdGF0c1Ns b3QKIEF0dG9wdENhY2hlRW50cnkKLS0gCjIuNTEuMAoK --dcb0c55d2e02a5c9007c5058e0a5a335f77bee93db61ec3e8c00365e4931--