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.96) (envelope-from ) id 1wQPZu-001XUy-2G for pgsql-hackers@arkaria.postgresql.org; Fri, 22 May 2026 13:06:14 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wQPZs-00D7Tm-1M for pgsql-hackers@arkaria.postgresql.org; Fri, 22 May 2026 13:06:13 +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.96) (envelope-from ) id 1wQPZr-00D7Te-2U for pgsql-hackers@lists.postgresql.org; Fri, 22 May 2026 13:06:13 +0000 Received: from mail-ot1-x32b.google.com ([2607:f8b0:4864:20::32b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wQPZq-00000000Gxk-22b6 for pgsql-hackers@lists.postgresql.org; Fri, 22 May 2026 13:06:11 +0000 Received: by mail-ot1-x32b.google.com with SMTP id 46e09a7af769-7de431da8fbso6498098a34.1 for ; Fri, 22 May 2026 06:06:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1779455169; cv=none; d=google.com; s=arc-20240605; b=c0sJLWQUnk7isYd9r1rnhZ4nB1W3puJ3sHL8D34PWAsSdcQiW9FfPuzoXDmEyv7YMv mQGivDAuU/XX2pUwbmYq6P4RS8UEeL4resDuc+qfFCzI0lnpFnA3elWmXowEesYj/nNi YpclHKYksBRNAWf1NP42gOX0b2UNy5Wvfrs9wL1Ma7HKoCwrwVGmYVmePntA676QR1vb /oBhXsbBupOD5YvuyfEgQrCd/7Q4+eUPMgtc7E+dKb8CCVE7yvzVgUSji6vAq2EOktet nqObrgyw7hCUAEzyoL8LWKJBQmfL62XvuhGx3mJzN40GVjboWNv9hFDy4iA+DAxh+4Ch nAjw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=2Zm3JbDx1Bvcb8Lanu5He3rFcJ5ctZSroDW3pj1OUoo=; fh=taiYkgSrnENvEbIvOwdorxV3Vub//Q+UkMlF7lI9hsQ=; b=L6O1k4YSM7erAcCKFv2HLQD/RuN8YOjA1lnLBQIpRDYrYiGRHMytxgYhKLtTjTj72Z F+8ia4EybgetmHy1ScNWUY/Fh0N5UFsF2oGuOXG9ej8HP5whyVDLM6o36G1VlQyG5iy4 5L8nUNRJ6E6kSrCbmYUrBzz3N6mlBjWqXKSUOPAwoEuc1fz3Vd79Iv/IM7MAwEa2jUkl V1499l6wcAPmlKAjCtVDQvca0AyuX8bfFFfrTPaU0VsvGVuXRmQk8Jl/ri9JcracZ5R3 DwpspvEU5iP9A8aWfFCFR053jX69DYgVD9Fb8sNWlNAPpYbq2rICDqCe+nr9oUl/Gvl5 Gv0w==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779455169; x=1780059969; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=2Zm3JbDx1Bvcb8Lanu5He3rFcJ5ctZSroDW3pj1OUoo=; b=AQV+IJ2M0rNxgRxHAzmCO0N57aZoBtquJPiOdrIKeKFweLSQQd6V/Y10XFj8boKVxI tCDbBajWn3MxOIkNC4bGCnxYDpFpMBK5He4lULtqnhF4QyrQ+b2vcmI2bVvwFeDcIk7a a8+pFxXeoPRtSyi4X3XBXd0qiBvwkKkTstO74OD9fW18VbcTGn3k+0NAh+Dei+hS4RIe TIx1uADheQrlyvQMSWiDk7K13Foq1dn9F5Q6wBLhBmrL4DcRF7q5QW1Qd5EX8LAh/cKs GX9/gL9RuX5z1bNbdq7cyCBFAUFW16RNAid82u6PkA7JyjqSCzBvjGn5z8JKDNRAU8D7 /Kag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779455169; x=1780059969; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=2Zm3JbDx1Bvcb8Lanu5He3rFcJ5ctZSroDW3pj1OUoo=; b=Fzyw7i8KXs6uX2ayOIdllvaHcVYEfT1O6oc6UwTnyT2dDs0DtdYnIJ23zQz9BZWQOo 1cT0jeuRfJ1/buo7EmZ7ntlRPZDnFpRA3V52d7UVnRRuxjSpQ0xK1YOm52IhGdT+pXWF GL7bJgrjNDuQVdp9fUB4VMDORYF9Jn1gPA8Seq1PFa0KvnEGaXDEcCFc0L4DyTD2wzOj B+qmiuYJdOEyKGsd7r6YnQk4JFU8RxNjqlGNdd55clXwcOIj6TpKEDRT/crfeJeGQ6gt fNKKBQusTRmrU1NVzMAzkHNE3tupDQFGP9UETLSovFyxJd5VfUXPzvf/lMbakZiipKYo 2MUQ== X-Forwarded-Encrypted: i=1; AFNElJ8iYdqLNyEoSlDx18DR9eZrCRfUhnO/wcHkKDE2b7xHCLlwgPhJm4Vku44qypZFk+3wZCx6vM6nHebb3glW@lists.postgresql.org X-Gm-Message-State: AOJu0Yxg/ucGTxwYOa6lglsFAqB9Es+7KaQylsHXE9nz4JAn6CsziWXG p6AKucy1Frp8e/5mn4cQoEx6x94ihvH+On6Jyh5PKnbhmq8kPIVLP0CdidYIqqUDEFpWi8fuHqI lsinX1F4iEWzapm/mk/bnAyJRGRY/UA== X-Gm-Gg: Acq92OGiSaw3kF0veQuPkuhzM+cUTv2F5SlbJti1pnOlYAgQGV0C9hRERq7EFqFQq42 U3hyliq6WhjKdquzjdmRipSAcZOJyQCTPqle/MoiV/oG0WD6Sjx8Kyim9yUCi08qHVPMvcWmyhK zT9wEuUQdUS4OowrL03TXxKsSBeAETWeLyPwSnl6sXdAyq2G/47+WGtoSzx9Nu9nDh0QKFtJnIj VlRV2OZvz6P5cxj14Tzbc2TEsSDNsKq9YZvGwOKUA31RqaIaN0Jy/gZSQQ/2IrXJ9LW8jMTqJMx R97eyjOVPvxd3Glp6FPC+jA6B7IdYiHbkin3R+C8GbQ= X-Received: by 2002:a05:6808:8957:b0:479:ffcf:52d7 with SMTP id 5614622812f47-4854a4ab5c9mr1973993b6e.46.1779455169219; Fri, 22 May 2026 06:06:09 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Shinya Kato Date: Fri, 22 May 2026 22:05:31 +0900 X-Gm-Features: AVHnY4I9pAGMfjmJ2m7GbKETTpyz5W4zC5HZfsvi-xDv94fFblzsUzlaU_QlGYE Message-ID: Subject: Re: Report oldest xmin source when autovacuum cannot remove tuples To: Japin Li Cc: wenhui qiu , Sami Imseih , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000041d8e6065267b1e0" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000041d8e6065267b1e0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thank you for your feedback! On Mon, Mar 16, 2026 at 8:19=E2=80=AFPM Japin Li wrot= e: > > On Mon, 16 Mar 2026 at 15:59, wenhui qiu wrote: > > HI Shinya > >> typedef enum XidHorizonBlockerType > >> { > >> XHB_NONE =3D 0, > >> XHB_ACTIVE_TRANSACTION, > >> XHB_IDLE_IN_TRANSACTION, > >> XHB_PREPARED_TRANSACTION, > >> XHB_XMIN_ACTIVE_TRANSACTION, > >> XHB_XMIN_IDLE_IN_TRANSACTION, > >> XHB_HOT_STANDBY_FEEDBACK, > >> XHB_REPLICATION_SLOT, > >> } > > Thank you for your working on this ,I have another small suggestion > > The priority ordering encoded in XidHorizonBlockerType determines which= blocker gets reported when multiple candidates > > exist. In particular: > > > > ACTIVE_TRANSACTION > > IDLE_IN_TRANSACTION > > PREPARED_TRANSACTION > > > > Prepared transactions are currently ranked after idle-in-transaction se= ssions. Operationally, prepared transactions are > > often harder for DBAs to resolve than idle sessions, so it might be wor= th clarifying the rationale behind this ordering > > or reconsidering whether prepared transactions should have higher prior= ity. > > Agreed. Explaining the reason for this priority is very helpful. We always pick a blocker from the xid-match group first (it is the transaction actually holding the horizon, while the xmin-match entries are just held back by it). Within the xid-match group, the active/idle/prepared order never matters: a given xid is owned by only one backend, so when the horizon equals a proc's xid there is only one matching entry, and it is exactly one of active, idle, or prepared. So moving prepared ahead of idle would not change which blocker we report. > >> typedef enum XidHorizonBlockerType > >> { > >> XHB_NONE =3D 0, > >> XHB_ACTIVE_TRANSACTION, > >> XHB_PREPARED_TRANSACTION, > >> XHB_IDLE_IN_TRANSACTION, > >> XHB_XMIN_ACTIVE_TRANSACTION, > >> XHB_XMIN_IDLE_IN_TRANSACTION, > >> XHB_HOT_STANDBY_FEEDBACK, > >> XHB_REPLICATION_SLOT, > >> } > > Another one: > > Currently GetXidHorizonBlocker() selects only one blocker (based on the= enum priority) even though multiple independent > > sources could hold back the xmin horizon simultaneously. For example, i= t is possible to have both a prepared transaction > > and a replication slot preventing the horizon from advancing. > > Have you considered reporting all detected blockers instead of just the= highest-priority one? Returning only a single > > entry might hide other relevant blockers from the user. > > > > I'm also curious =E2=80=94 why don't we list all the blockers? Did I miss= anything? I did think about this, but I would like to keep reporting one blocker in the VACUUM log, for two reasons. First, the log can get very large. In Sami's earlier example [0], a pgbench run had many backends all sharing the same xmin while only one idle-in-transaction backend actually owned the cutoff xid. Reporting every blocker would print 20+ lines, almost all of them just victims of the same root cause, which makes the log harder to read, not easier. Second, the one blocker we report is the root cause (the xid owner). Once the DBA resolves it, the next VACUUM will show the next blocker if one remains. This is also why the code is split into GetXidHorizonBlockers(), which already collects every candidate, and GetXidHorizonBlocker(), which picks the highest-priority one for the log. The "show everything" case is what I would like to expose later through a dynamic statistics view, where a full list makes more sense than in a VACUUM log line. I've rebased the patch. P.S. It might be better to use bottom posting instead of top posting [1]. [0] https://www.postgresql.org/message-id/CAA5RZ0sjMgMo4Xg-niyyF-CpkQ_CK6uO= fNKYT%3D9RmiBkAxQkbQ%40mail.gmail.com [1] https://wiki.postgresql.org/wiki/Mailing_Lists#Email_etiquette_mechanic= s --=20 Best regards, Shinya Kato NTT OSS Center --00000000000041d8e6065267b1e0 Content-Type: application/octet-stream; name="v3-0001-Report-oldest-xmin-blocker-when-VACUUM-cannot-rem.patch" Content-Disposition: attachment; filename="v3-0001-Report-oldest-xmin-blocker-when-VACUUM-cannot-rem.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpgxmns70 RnJvbSAzODk1ZDZjNjM3Y2JjYWUxY2RjYzI2OWIwM2IzOWY4Y2UwMTEzNDFjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaGlueWEgS2F0byA8c2hpbnlhMTEua2F0b0BnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMjIgTWF5IDIwMjYgMjE6MzU6MTIgKzA5MDAKU3ViamVjdDogW1BBVENIIHYz XSBSZXBvcnQgb2xkZXN0IHhtaW4gYmxvY2tlciB3aGVuIFZBQ1VVTSBjYW5ub3QgcmVtb3ZlCiB0 dXBsZXMKCldoZW4gVkFDVVVNIGVuY291bnRlcnMgcmVjZW50bHktZGVhZCB0dXBsZXMgdGhhdCBj YW5ub3QgYmUgcmVtb3ZlZCwKaXQgaXMgb2Z0ZW4gdW5jbGVhciB3aGF0IGlzIHByZXZlbnRpbmcg dGhlIHhpZCBob3Jpem9uIGZyb20gYWR2YW5jaW5nLgpUaGlzIHBhdGNoIGFkZHMgZGlhZ25vc3Rp YyBpbmZvcm1hdGlvbiB0byB0aGUgVkFDVVVNIFZFUkJPU0UgbG9nCm91dHB1dCBpZGVudGlmeWlu ZyB0aGUgYmxvY2tlciB0aGF0IGlzIGhvbGRpbmcgYmFjayBPbGRlc3RYbWluLgoKVGhlIG5ldyBH ZXRYaWRIb3Jpem9uQmxvY2tlcigpIGZ1bmN0aW9uIGluIHByb2NhcnJheS5jIHNlYXJjaGVzIGZv cgp0aGUgc291cmNlIG9mIHRoZSBob3Jpem9uOiBhY3RpdmUgdHJhbnNhY3Rpb25zLCBpZGxlLWlu LXRyYW5zYWN0aW9uCnNlc3Npb25zLCBwcmVwYXJlZCB0cmFuc2FjdGlvbnMsIGhvdCBzdGFuZGJ5 IGZlZWRiYWNrIHZpYSB3YWxzZW5kZXJzLAphbmQgbG9naWNhbCByZXBsaWNhdGlvbiBzbG90cy4g IFdoZW4gcmVjZW50bHlfZGVhZF90dXBsZXMgPiAwLCBWQUNVVU0KVkVSQk9TRSBub3cgcmVwb3J0 cyB0aGUgaGlnaGVzdC1wcmlvcml0eSBibG9ja2VyIHdpdGggaWRlbnRpZnlpbmcKZGV0YWlscyAo cGlkLCBwcmVwYXJlZCB0cmFuc2FjdGlvbiBHSUQsIHN0YW5kYnkgYXBwbGljYXRpb24gbmFtZSwg b3IKc2xvdCBuYW1lKS4KCkJlY2F1c2UgdGhlIGhvcml6b24gd2FzIGNvbXB1dGVkIGVhcmxpZXIs IHRoZSBvcmlnaW5hbCBibG9ja2VyIG1heQpoYXZlIGFscmVhZHkgY29tbWl0dGVkIGJ5IHRoZSB0 aW1lIHRoZSBjaGVjayBydW5zLiAgVGhlIHJlc3VsdCBpcwp0aGVyZWZvcmUgYmVzdC1lZmZvcnQ6 IGl0IG1heSByZXBvcnQgYSBkaWZmZXJlbnQgYmxvY2tlciBvciBub25lIGF0CmFsbC4KCkF1dGhv cjogU2hpbnlhIEthdG8gPHNoaW55YTExLmthdG9AZ21haWwuY29tPgpSZXZpZXdlZC1ieTogd2Vu aHVpIHFpdSA8cWl1d2VuaHVpZnhAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogRnVqaWkgTWFzYW8g PG1hc2FvLmZ1amlpQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IFNhbWkgSW1zZWloIDxzYW1pbXNl aWhAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogRGlsaXAgS3VtYXIgPGRpbGlwYmFsYXV0QGdtYWls LmNvbT4KUmV2aWV3ZWQtYnk6IEphcGluIExpIDxqYXBpbmxpQGhvdG1haWwuY29tPgpEaXNjdXNz aW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBT3pFdXJTZ3ktZ0R0d0ZtRWJqNStSOVBMMF9HM3FZ QjZubnpKdE5TdHl1Zjg3VlNWZ0BtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL3ZhY3V1bWxhenkuYyAgICAgICAgICB8ICA1OSArKysrCiBzcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS90d29waGFzZS5jICAgICAgICAgfCAgMzkgKysrCiBzcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9wcm9jYXJyYXkuYyAgICAgICAgICAgfCAyNjEgKysrKysrKysrKysrKysrCiBzcmMv aW5jbHVkZS9hY2Nlc3MvdHdvcGhhc2UuaCAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2lu Y2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaCAgICAgICAgICAgICAgIHwgIDM5ICsrKwogc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X21pc2MvbWVzb24uYnVpbGQgICAgICAgIHwgICA3ICstCiAuLi4vdGVz dF9taXNjL3QvMDE0X2xvZ192YWN1dW1fYmxvY2tlcnMucGwgICAgfCAzMTQgKysrKysrKysrKysr KysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAg IDIgKwogOCBmaWxlcyBjaGFuZ2VkLCA3MTkgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy90LzAxNF9sb2df dmFjdXVtX2Jsb2NrZXJzLnBsCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv dmFjdXVtbGF6eS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jCmluZGV4 IDM5Mzk1YWVkMGQ1Li5hODQxMjI1YmI0ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvdmFjdXVtbGF6eS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxh enkuYwpAQCAtMTUxLDYgKzE1MSw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9mcmVlc3BhY2UuaCIK ICNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCisj aW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKICNpbmNsdWRlICJzdG9yYWdlL3JlYWRfc3Ry ZWFtLmgiCiAjaW5jbHVkZSAidXRpbHMvaW5qZWN0aW9uX3BvaW50LmgiCiAjaW5jbHVkZSAidXRp bHMvbHN5c2NhY2hlLmgiCkBAIC0xMDc0LDYgKzEwNzUsNjQgQEAgaGVhcF92YWN1dW1fcmVsKFJl bGF0aW9uIHJlbCwgY29uc3QgVmFjdXVtUGFyYW1zICpwYXJhbXMsCiAJCQkJCQkJIHZhY3JlbC0+ dHVwbGVzX2RlbGV0ZWQsCiAJCQkJCQkJIChpbnQ2NCkgdmFjcmVsLT5uZXdfcmVsX3R1cGxlcywK IAkJCQkJCQkgdmFjcmVsLT5yZWNlbnRseV9kZWFkX3R1cGxlcyk7CisJCQlpZiAodmFjcmVsLT5y ZWNlbnRseV9kZWFkX3R1cGxlcyA+IDApCisJCQl7CisJCQkJWGlkSG9yaXpvbkJsb2NrZXIgYmxv Y2tlcjsKKworCQkJCWlmIChHZXRYaWRIb3Jpem9uQmxvY2tlcih2YWNyZWwtPmN1dG9mZnMuT2xk ZXN0WG1pbiwgJmJsb2NrZXIpKQorCQkJCXsKKwkJCQkJc3dpdGNoIChibG9ja2VyLnR5cGUpCisJ CQkJCXsKKwkJCQkJCWNhc2UgWEhCX0FDVElWRV9UUkFOU0FDVElPTjoKKwkJCQkJCQlhcHBlbmRT dHJpbmdJbmZvKCZidWYsCisJCQkJCQkJCQkJCSBfKCJvbGRlc3QgeG1pbiBibG9ja2VyOiBhY3Rp dmUgdHJhbnNhY3Rpb24gKHBpZCA9ICVkKVxuIiksCisJCQkJCQkJCQkJCSBibG9ja2VyLnBpZCk7 CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIFhIQl9JRExFX0lOX1RSQU5TQUNUSU9OOgorCQkJ CQkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwKKwkJCQkJCQkJCQkJIF8oIm9sZGVzdCB4bWluIGJs b2NrZXI6IGlkbGUgaW4gdHJhbnNhY3Rpb24gKHBpZCA9ICVkKVxuIiksCisJCQkJCQkJCQkJCSBi bG9ja2VyLnBpZCk7CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIFhIQl9YTUlOX0FDVElWRV9U UkFOU0FDVElPTjoKKwkJCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsCisJCQkJCQkJCQkJCSBf KCJvbGRlc3QgeG1pbiBibG9ja2VyOiBhY3RpdmUgdHJhbnNhY3Rpb24gaG9sZGluZyBzbmFwc2hv dCAocGlkID0gJWQpXG4iKSwKKwkJCQkJCQkJCQkJIGJsb2NrZXIucGlkKTsKKwkJCQkJCQlicmVh azsKKwkJCQkJCWNhc2UgWEhCX1hNSU5fSURMRV9JTl9UUkFOU0FDVElPTjoKKwkJCQkJCQlhcHBl bmRTdHJpbmdJbmZvKCZidWYsCisJCQkJCQkJCQkJCSBfKCJvbGRlc3QgeG1pbiBibG9ja2VyOiBp ZGxlIGluIHRyYW5zYWN0aW9uIGhvbGRpbmcgc25hcHNob3QgKHBpZCA9ICVkKVxuIiksCisJCQkJ CQkJCQkJCSBibG9ja2VyLnBpZCk7CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIFhIQl9QUkVQ QVJFRF9UUkFOU0FDVElPTjoKKwkJCQkJCQlpZiAoYmxvY2tlci5uYW1lWzBdICE9ICdcMCcpCisJ CQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwKKwkJCQkJCQkJCQkJCSBfKCJvbGRlc3QgeG1p biBibG9ja2VyOiBwcmVwYXJlZCB0cmFuc2FjdGlvbiAoZ2lkID0gJXMpXG4iKSwKKwkJCQkJCQkJ CQkJCSBibG9ja2VyLm5hbWUpOworCQkJCQkJCWVsc2UKKwkJCQkJCQkJYXBwZW5kU3RyaW5nSW5m bygmYnVmLAorCQkJCQkJCQkJCQkJIF8oIm9sZGVzdCB4bWluIGJsb2NrZXI6IHByZXBhcmVkIHRy YW5zYWN0aW9uXG4iKSk7CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIFhIQl9IT1RfU1RBTkRC WV9GRUVEQkFDSzoKKwkJCQkJCQlpZiAoYmxvY2tlci5uYW1lWzBdICE9ICdcMCcpCisJCQkJCQkJ CWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwKKwkJCQkJCQkJCQkJCSBfKCJvbGRlc3QgeG1pbiBibG9j a2VyOiBob3Qgc3RhbmRieSBmZWVkYmFjayAoc3RhbmRieSBuYW1lID0gJXMsIHBpZCA9ICVkKVxu IiksCisJCQkJCQkJCQkJCQkgYmxvY2tlci5uYW1lLAorCQkJCQkJCQkJCQkJIGJsb2NrZXIucGlk KTsKKwkJCQkJCQllbHNlCisJCQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwKKwkJCQkJCQkJ CQkJCSBfKCJvbGRlc3QgeG1pbiBibG9ja2VyOiBob3Qgc3RhbmRieSBmZWVkYmFjayAocGlkID0g JWQpXG4iKSwKKwkJCQkJCQkJCQkJCSBibG9ja2VyLnBpZCk7CisJCQkJCQkJYnJlYWs7CisJCQkJ CQljYXNlIFhIQl9SRVBMSUNBVElPTl9TTE9UOgorCQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1 ZiwKKwkJCQkJCQkJCQkJIF8oIm9sZGVzdCB4bWluIGJsb2NrZXI6IGxvZ2ljYWwgcmVwbGljYXRp b24gc2xvdCAoc2xvdCBuYW1lID0gJXMpXG4iKSwKKwkJCQkJCQkJCQkJIGJsb2NrZXIubmFtZSk7 CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIFhIQl9OT05FOgorCQkJCQkJCWJyZWFrOworCQkJ CQl9CisJCQkJfQorCQkJfQogCQkJaWYgKHZhY3JlbC0+bWlzc2VkX2RlYWRfdHVwbGVzID4gMCkK IAkJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsCiAJCQkJCQkJCSBfKCJ0dXBsZXMgbWlzc2VkOiAl IiBQUklkNjQgIiBkZWFkIGZyb20gJXUgcGFnZXMgbm90IHJlbW92ZWQgZHVlIHRvIGNsZWFudXAg bG9jayBjb250ZW50aW9uXG4iKSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3R3b3BoYXNlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jCmlu ZGV4IDEwMzVlOGIzZmM3Li42OWQxZDgyYjM0MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0vdHdvcGhhc2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90 d29waGFzZS5jCkBAIC0yODIyLDYgKzI4MjIsNDUgQEAgTG9va3VwR1hhY3RCeVN1YmlkKE9pZCBz dWJpZCkKIAlyZXR1cm4gZm91bmQ7CiB9CiAKKy8qCisgKiBHZXRQcmVwYXJlZFRyYW5zYWN0aW9u R2lkCisgKgkJR2V0IHRoZSBHSUQgZm9yIHRoZSBwcmVwYXJlZCB0cmFuc2FjdGlvbiB3aXRoIHRo ZSBnaXZlbiBYSUQuCisgKgorICogUmV0dXJucyB0cnVlIHdoZW4gYSBtYXRjaGluZyBwcmVwYXJl ZCB0cmFuc2FjdGlvbiBpcyBmb3VuZC4gIGdpZCB3aWxsIGJlCisgKiBzZXQgdG8gYW4gZW1wdHkg c3RyaW5nIHdoZW4gbm8gbWF0Y2ggaXMgZm91bmQuCisgKi8KK2Jvb2wKK0dldFByZXBhcmVkVHJh bnNhY3Rpb25HaWQoVHJhbnNhY3Rpb25JZCB4aWQsIGNoYXIgZ2lkW0dJRFNJWkVdKQoreworCWJv b2wJCWZvdW5kID0gZmFsc2U7CisKKwlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSk7 CisKKwlnaWRbMF0gPSAnXDAnOworCisJaWYgKG1heF9wcmVwYXJlZF94YWN0cyA9PSAwIHx8IFR3 b1BoYXNlU3RhdGUgPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCisJTFdMb2NrQWNxdWlyZShU d29QaGFzZVN0YXRlTG9jaywgTFdfU0hBUkVEKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IFR3b1Bo YXNlU3RhdGUtPm51bVByZXBYYWN0czsgaSsrKQorCXsKKwkJR2xvYmFsVHJhbnNhY3Rpb24gZ3hh Y3QgPSBUd29QaGFzZVN0YXRlLT5wcmVwWGFjdHNbaV07CisKKwkJaWYgKCFneGFjdC0+dmFsaWQp CisJCQljb250aW51ZTsKKworCQlpZiAoIVRyYW5zYWN0aW9uSWRFcXVhbHMoWGlkRnJvbUZ1bGxU cmFuc2FjdGlvbklkKGd4YWN0LT5meGlkKSwgeGlkKSkKKwkJCWNvbnRpbnVlOworCisJCXN0cmxj cHkoZ2lkLCBneGFjdC0+Z2lkLCBHSURTSVpFKTsKKwkJZm91bmQgPSB0cnVlOworCQlicmVhazsK Kwl9CisJTFdMb2NrUmVsZWFzZShUd29QaGFzZVN0YXRlTG9jayk7CisKKwlyZXR1cm4gZm91bmQ7 Cit9CisKIC8qCiAgKiBUd29QaGFzZUdldE9sZGVzdFhpZEluQ29tbWl0CiAgKgkJUmV0dXJuIHRo ZSBvbGRlc3QgdHJhbnNhY3Rpb24gSUQgZnJvbSBwcmVwYXJlZCB0cmFuc2FjdGlvbnMgdGhhdCBh cmUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jIGIvc3Jj L2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMKaW5kZXggOTI5OWJjZWJiZGEuLmQ4MzZk MjRkMjVkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYwor KysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYwpAQCAtNTgsMTEgKzU4LDEz IEBACiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9iZ3dvcmtlci5o IgogI2luY2x1ZGUgInBvcnQvcGdfbGZpbmQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9zbG90 LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJy YXkuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NzaWduYWwuaCIKICNpbmNsdWRlICJzdG9yYWdl L3N1YnN5c3RlbXMuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKKyNpbmNsdWRlICJ1dGlscy9i YWNrZW5kX3N0YXR1cy5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAi dXRpbHMvaW5qZWN0aW9uX3BvaW50LmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCkBA IC0xOTk5LDYgKzIwMDEsMjY1IEBAIEdldFJlcGxpY2F0aW9uSG9yaXpvbnMoVHJhbnNhY3Rpb25J ZCAqeG1pbiwgVHJhbnNhY3Rpb25JZCAqY2F0YWxvZ194bWluKQogCSpjYXRhbG9nX3htaW4gPSBo b3Jpem9ucy5zbG90X2NhdGFsb2dfeG1pbjsKIH0KIAorLyoKKyAqIEZldGNoIHRoZSBzdGFuZGJ5 J3MgYXBwbGljYXRpb25fbmFtZSBhcyByZXBvcnRlZCBieSB0aGUgd2Fsc2VuZGVyIGJhY2tlbmQu CisgKi8KK3N0YXRpYyB2b2lkCitHZXRTdGFuZGJ5QXBwbmFtZShpbnQgcGlkLCBjaGFyICpuYW1l LCBTaXplIGxlbikKK3sKKwlpbnQJCQluYmFja2VuZHMgPSBwZ3N0YXRfZmV0Y2hfc3RhdF9udW1i YWNrZW5kcygpOworCisJbmFtZVswXSA9ICdcMCc7CisKKwlmb3IgKGludCBpID0gMTsgaSA8PSBu YmFja2VuZHM7IGkrKykKKwl7CisJCUxvY2FsUGdCYWNrZW5kU3RhdHVzICpsb2NhbF9iZWVudHJ5 OworCQlQZ0JhY2tlbmRTdGF0dXMgKmJlZW50cnk7CisKKwkJbG9jYWxfYmVlbnRyeSA9IHBnc3Rh dF9nZXRfbG9jYWxfYmVlbnRyeV9ieV9pbmRleChpKTsKKwkJaWYgKGxvY2FsX2JlZW50cnkgPT0g TlVMTCkKKwkJCWNvbnRpbnVlOworCisJCWJlZW50cnkgPSAmbG9jYWxfYmVlbnRyeS0+YmFja2Vu ZFN0YXR1czsKKwkJaWYgKGJlZW50cnktPnN0X3Byb2NwaWQgIT0gcGlkKQorCQkJY29udGludWU7 CisKKwkJaWYgKGJlZW50cnktPnN0X2FwcG5hbWUgJiYgYmVlbnRyeS0+c3RfYXBwbmFtZVswXSAh PSAnXDAnKQorCQkJc3RybGNweShuYW1lLCBiZWVudHJ5LT5zdF9hcHBuYW1lLCBsZW4pOworCQly ZXR1cm47CisJfQorfQorCisvKgorICogUmV0dXJuIFhpZEhvcml6b25CbG9ja2VyVHlwZSBmb3Ig YSBiYWNrZW5kIHdob3NlIHhpZCBtYXRjaGVzIHRoZSBob3Jpem9uLgorICovCitzdGF0aWMgaW5s aW5lIFhpZEhvcml6b25CbG9ja2VyVHlwZQorWGlkSG9yaXpvbkJsb2NrZXJUeXBlRm9yQmFja2Vu ZChjb25zdCBQR1BST0MgKnByb2MpCit7CisJaWYgKHByb2MtPndhaXRfZXZlbnRfaW5mbyA9PSBX QUlUX0VWRU5UX0NMSUVOVF9SRUFEKQorCQlyZXR1cm4gWEhCX0lETEVfSU5fVFJBTlNBQ1RJT047 CisJcmV0dXJuIFhIQl9BQ1RJVkVfVFJBTlNBQ1RJT047Cit9CisKKy8qCisgKiBSZXR1cm4gWGlk SG9yaXpvbkJsb2NrZXJUeXBlIGZvciBhIGJhY2tlbmQgd2hvc2UgeG1pbiBtYXRjaGVzIHRoZSBo b3Jpem9uLgorICovCitzdGF0aWMgaW5saW5lIFhpZEhvcml6b25CbG9ja2VyVHlwZQorWGlkSG9y aXpvbkJsb2NrZXJUeXBlRm9yWG1pbkJhY2tlbmQoY29uc3QgUEdQUk9DICpwcm9jKQoreworCWlm IChwcm9jLT53YWl0X2V2ZW50X2luZm8gPT0gV0FJVF9FVkVOVF9DTElFTlRfUkVBRCkKKwkJcmV0 dXJuIFhIQl9YTUlOX0lETEVfSU5fVFJBTlNBQ1RJT047CisJcmV0dXJuIFhIQl9YTUlOX0FDVElW RV9UUkFOU0FDVElPTjsKK30KKworLyoKKyAqIEZpbmQgdGhlIGJsb2NrZXJzIHRoYXQgYXJlIGhv bGRpbmcgYmFjayB0aGUgZ2l2ZW4geGlkIGhvcml6b24uCisgKgorICogVGhpcyBmdW5jdGlvbiBz ZWFyY2hlcyBmb3Igd2hhdCBpcyBwcmV2ZW50aW5nIHRoZSBnaXZlbiBob3Jpem9uIGZyb20gYmVp bmcKKyAqIGFkdmFuY2VkIHRvIGFsbG93IHJlbW92YWwgb2YgZGVhZCB0dXBsZXMuIEl0IGNoZWNr czoKKyAqIDEuIEFjdGl2ZSB0cmFuc2FjdGlvbnMgKHJ1bm5pbmcgc3RhdGVtZW50cykKKyAqIDIu IElkbGUtaW4tdHJhbnNhY3Rpb24gc2Vzc2lvbnMKKyAqIDMuIFByZXBhcmVkIHRyYW5zYWN0aW9u cworICogNC4gSG90IHN0YW5kYnkgZmVlZGJhY2sKKyAqIDUuIExvZ2ljYWwgcmVwbGljYXRpb24g c2xvdHMKKyAqCisgKiBCZWNhdXNlIHRoZSBob3Jpem9uIHdhcyBjb21wdXRlZCBlYXJsaWVyLCB0 aGUgb3JpZ2luYWwgYmxvY2tlciBtYXkgaGF2ZQorICogYWxyZWFkeSBjb21taXR0ZWQgYnkgdGhl IHRpbWUgdGhpcyBmdW5jdGlvbiBydW5zLiAgVGhlIHJlc3VsdCBpcyB0aGVyZWZvcmUKKyAqIGJl c3QtZWZmb3J0OiBpdCBtYXkgcmV0dXJuIGEgZGlmZmVyZW50IGJsb2NrZXIsIG9yIG5vIGJsb2Nr ZXIgYXQgYWxsLgorICoKKyAqIFJldHVybnMgYSBwYWxsb2MnZCBhcnJheSBvZiBibG9ja2VycyBh bmQgc3RvcmVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbgorICogKm5ibG9ja2Vycy4gVGhlIGFy cmF5IG1heSBiZSBlbXB0eSBpZiBubyBibG9ja2VyIGlzIGZvdW5kLgorICoKKyAqIE5vdGU6IHRo ZSBzYW1lIHVuZGVybHlpbmcgY2F1c2UgKGUuZy4gYSBwaHlzaWNhbCByZXBsaWNhdGlvbiBzbG90 IHdpdGgKKyAqIGhvdF9zdGFuZGJ5X2ZlZWRiYWNrKSBjYW4gYXBwZWFyIGFzIGJvdGggYW4gWEhC X0hPVF9TVEFOREJZX0ZFRURCQUNLIGVudHJ5CisgKiAoZnJvbSB0aGUgd2Fsc2VuZGVyIFBHUFJP QykgYW5kIGFuIFhIQl9SRVBMSUNBVElPTl9TTE9UIGVudHJ5IChmcm9tIHRoZQorICogc2xvdCdz IHhtaW4pLiAgQ2FsbGVycyB0aGF0IGNvbnN1bWUgYWxsIGVudHJpZXMgc2hvdWxkIGJlIHByZXBh cmVkIGZvciBzdWNoCisgKiBkdXBsaWNhdGVzLgorICovCitzdGF0aWMgWGlkSG9yaXpvbkJsb2Nr ZXIgKgorR2V0WGlkSG9yaXpvbkJsb2NrZXJzKFRyYW5zYWN0aW9uSWQgaG9yaXpvbiwgaW50ICpu YmxvY2tlcnMpCit7CisJUHJvY0FycmF5U3RydWN0ICphcnJheVAgPSBwcm9jQXJyYXk7CisJVHJh bnNhY3Rpb25JZCAqb3RoZXJfeGlkcyA9IFByb2NHbG9iYWwtPnhpZHM7CisJWGlkSG9yaXpvbkJs b2NrZXIgKnJlc3VsdDsKKwlpbnQJCQljb3VudCA9IDA7CisJaW50CQkJbWF4X2Jsb2NrZXJzOwor CisJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKGhvcml6b24pKTsKKwlBc3NlcnQobmJsb2Nr ZXJzICE9IE5VTEwpOworCisJLyoKKwkgKiBBbGxvY2F0ZSBlbm91Z2ggc3BhY2UgZm9yIGV2ZXJ5 IFBHUFJPQyBwbHVzIGFsbCByZXBsaWNhdGlvbiBzbG90cy4gVGhpcworCSAqIGlzIGEgZ2VuZXJv dXMgdXBwZXIgYm91bmQgKHR5cGljYWxseSBvbmx5IDAtMiBlbnRyaWVzIGFyZSByZXR1cm5lZCks CisJICogYnV0IGtlZXBzIHRoZSBsb2dpYyBzaW1wbGUgZm9yIGEgZGlhZ25vc3RpYyBmdW5jdGlv biB0aGF0IHJ1bnMKKwkgKiBpbmZyZXF1ZW50bHkuCisJICovCisJbWF4X2Jsb2NrZXJzID0gYXJy YXlQLT5tYXhQcm9jcyArIG1heF9yZXBsaWNhdGlvbl9zbG90czsKKwlyZXN1bHQgPSBwYWxsb2Mw X2FycmF5KFhpZEhvcml6b25CbG9ja2VyLCBtYXhfYmxvY2tlcnMpOworCisJTFdMb2NrQWNxdWly ZShQcm9jQXJyYXlMb2NrLCBMV19TSEFSRUQpOworCisJZm9yIChpbnQgaW5kZXggPSAwOyBpbmRl eCA8IGFycmF5UC0+bnVtUHJvY3M7IGluZGV4KyspCisJeworCQlpbnQJCQlwZ3Byb2NubyA9IGFy cmF5UC0+cGdwcm9jbm9zW2luZGV4XTsKKwkJUEdQUk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3Bn cHJvY25vXTsKKwkJaW50OAkJc3RhdHVzRmxhZ3MgPSBQcm9jR2xvYmFsLT5zdGF0dXNGbGFnc1tp bmRleF07CisJCVRyYW5zYWN0aW9uSWQgcHJvY194aWQ7CisJCVRyYW5zYWN0aW9uSWQgcHJvY194 bWluOworCQlYaWRIb3Jpem9uQmxvY2tlclR5cGUgY2FuZGlkYXRlX3R5cGUgPSBYSEJfTk9ORTsK KwkJaW50CQkJY2FuZGlkYXRlX3BpZCA9IDA7CisJCVRyYW5zYWN0aW9uSWQgY2FuZGlkYXRlX3hp ZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCisJCS8qCisJCSAqIFNraXAgb3ZlciBiYWNrZW5k cyBlaXRoZXIgdmFjdXVtaW5nICh3aGljaCBpcyBvayB3aXRoIHJvd3MgYmVpbmcKKwkJICogcmVt b3ZlZCwgYXMgbG9uZyBhcyBwZ19zdWJ0cmFucyBpcyBub3QgdHJ1bmNhdGVkKSwgZG9pbmcgbG9n aWNhbAorCQkgKiBkZWNvZGluZyAod2hpY2ggbWFuYWdlcyB4bWluIHNlcGFyYXRlbHksIGNoZWNr IGJlbG93KSwgb3IgbXlzZWxmLgorCQkgKi8KKwkJaWYgKHN0YXR1c0ZsYWdzICYgKFBST0NfSU5f VkFDVVVNIHwgUFJPQ19JTl9MT0dJQ0FMX0RFQ09ESU5HKSB8fAorCQkJcHJvYyA9PSBNeVByb2Mp CisJCQljb250aW51ZTsKKworCQkvKiBGZXRjaCB4aWQganVzdCBvbmNlIC0gc2VlIEdldE5ld1Ry YW5zYWN0aW9uSWQgKi8KKwkJcHJvY194aWQgPSBVSU5UMzJfQUNDRVNTX09OQ0Uob3RoZXJfeGlk c1tpbmRleF0pOworCQlwcm9jX3htaW4gPSBVSU5UMzJfQUNDRVNTX09OQ0UocHJvYy0+eG1pbik7 CisKKwkJLyogQ2hlY2sgaWYgdGhpcyBwcm9jJ3MgeGlkIG1hdGNoZXMgKi8KKwkJaWYgKFRyYW5z YWN0aW9uSWRFcXVhbHMocHJvY194aWQsIGhvcml6b24pKQorCQl7CisJCQlpZiAocHJvYy0+cGlk ID09IDApCisJCQl7CisJCQkJY2FuZGlkYXRlX3R5cGUgPSBYSEJfUFJFUEFSRURfVFJBTlNBQ1RJ T047CisJCQkJY2FuZGlkYXRlX3BpZCA9IDA7CisJCQkJY2FuZGlkYXRlX3hpZCA9IHByb2NfeGlk OworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWNhbmRpZGF0ZV90eXBlID0gWGlkSG9yaXpvbkJs b2NrZXJUeXBlRm9yQmFja2VuZChwcm9jKTsKKwkJCQljYW5kaWRhdGVfcGlkID0gcHJvYy0+cGlk OworCQkJCWNhbmRpZGF0ZV94aWQgPSBwcm9jX3hpZDsKKwkJCX0KKwkJfQorCQkvKiBDaGVjayBp ZiB0aGlzIHByb2MncyB4bWluIG1hdGNoZXMgKi8KKwkJZWxzZSBpZiAoVHJhbnNhY3Rpb25JZEVx dWFscyhwcm9jX3htaW4sIGhvcml6b24pKQorCQl7CisJCQlpZiAoc3RhdHVzRmxhZ3MgJiBQUk9D X0FGRkVDVFNfQUxMX0hPUklaT05TKQorCQkJeworCQkJCWNhbmRpZGF0ZV90eXBlID0gWEhCX0hP VF9TVEFOREJZX0ZFRURCQUNLOworCQkJCWNhbmRpZGF0ZV9waWQgPSBwcm9jLT5waWQ7CisJCQkJ Y2FuZGlkYXRlX3hpZCA9IHByb2NfeG1pbjsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQljYW5k aWRhdGVfdHlwZSA9IFhpZEhvcml6b25CbG9ja2VyVHlwZUZvclhtaW5CYWNrZW5kKHByb2MpOwor CQkJCWNhbmRpZGF0ZV9waWQgPSBwcm9jLT5waWQ7CisJCQkJY2FuZGlkYXRlX3hpZCA9IHByb2Nf eG1pbjsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIElmIHdlIGZvdW5kIGEgY2FuZGlkYXRlLCBy ZWNvcmQgaXQuIENhbmRpZGF0ZXMgYXJlIGNvbGxlY3RlZCBpbgorCQkgKiBQcm9jQXJyYXkgb3Jk ZXI7IGNhbGxlcnMgY2FuIHJlb3JkZXIgaWYgbmVlZGVkLgorCQkgKi8KKwkJaWYgKGNhbmRpZGF0 ZV90eXBlICE9IFhIQl9OT05FKQorCQl7CisJCQlYaWRIb3Jpem9uQmxvY2tlciAqZHN0OworCisJ CQlkc3QgPSAmcmVzdWx0W2NvdW50KytdOworCQkJZHN0LT50eXBlID0gY2FuZGlkYXRlX3R5cGU7 CisJCQlkc3QtPnBpZCA9IGNhbmRpZGF0ZV9waWQ7CisJCQlkc3QtPnhpZCA9IGNhbmRpZGF0ZV94 aWQ7CisJCX0KKwl9CisKKwlMV0xvY2tSZWxlYXNlKFByb2NBcnJheUxvY2spOworCisJLyoKKwkg KiBOb3cgdGhhdCBQcm9jQXJyYXlMb2NrIGlzIHJlbGVhc2VkLCBmZXRjaCBhbnkgZXh0cmEgZGV0 YWlscyB3ZSB3YW50IHRvCisJICogYXR0YWNoIHRvIGJsb2NrZXJzLCBzdWNoIGFzIHByZXBhcmVk IHRyYW5zYWN0aW9uIEdJRHMgYW5kIHN0YW5kYnkKKwkgKiBhcHBsaWNhdGlvbiBuYW1lcy4KKwkg Ki8KKwlmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisJeworCQlpZiAocmVzdWx0W2ld LnR5cGUgPT0gWEhCX1BSRVBBUkVEX1RSQU5TQUNUSU9OKQorCQkJR2V0UHJlcGFyZWRUcmFuc2Fj dGlvbkdpZChyZXN1bHRbaV0ueGlkLCByZXN1bHRbaV0ubmFtZSk7CisJCWVsc2UgaWYgKHJlc3Vs dFtpXS50eXBlID09IFhIQl9IT1RfU1RBTkRCWV9GRUVEQkFDSykKKwkJCUdldFN0YW5kYnlBcHBu YW1lKHJlc3VsdFtpXS5waWQsIHJlc3VsdFtpXS5uYW1lLAorCQkJCQkJCSAgc2l6ZW9mKHJlc3Vs dFtpXS5uYW1lKSk7CisJfQorCisJLyoKKwkgKiBBbHNvIGNoZWNrIHJlcGxpY2F0aW9uIHNsb3Rz LgorCSAqLworCWlmIChtYXhfcmVwbGljYXRpb25fc2xvdHMgPiAwKQorCXsKKwkJTFdMb2NrQWNx dWlyZShSZXBsaWNhdGlvblNsb3RDb250cm9sTG9jaywgTFdfU0hBUkVEKTsKKworCQlmb3IgKGlu dCBpID0gMDsgaSA8IG1heF9yZXBsaWNhdGlvbl9zbG90czsgaSsrKQorCQl7CisJCQlSZXBsaWNh dGlvblNsb3QgKnMgPSAmUmVwbGljYXRpb25TbG90Q3RsLT5yZXBsaWNhdGlvbl9zbG90c1tpXTsK KwkJCVRyYW5zYWN0aW9uSWQgc2xvdF94bWluOworCQkJVHJhbnNhY3Rpb25JZCBzbG90X2NhdGFs b2dfeG1pbjsKKworCQkJaWYgKCFzLT5pbl91c2UpCisJCQkJY29udGludWU7CisKKwkJCVNwaW5M b2NrQWNxdWlyZSgmcy0+bXV0ZXgpOworCQkJc2xvdF94bWluID0gcy0+ZGF0YS54bWluOworCQkJ c2xvdF9jYXRhbG9nX3htaW4gPSBzLT5kYXRhLmNhdGFsb2dfeG1pbjsKKwkJCVNwaW5Mb2NrUmVs ZWFzZSgmcy0+bXV0ZXgpOworCisJCQlpZiAoVHJhbnNhY3Rpb25JZEVxdWFscyhzbG90X3htaW4s IGhvcml6b24pIHx8CisJCQkJVHJhbnNhY3Rpb25JZEVxdWFscyhzbG90X2NhdGFsb2dfeG1pbiwg aG9yaXpvbikpCisJCQl7CisJCQkJWGlkSG9yaXpvbkJsb2NrZXIgKmRzdDsKKworCQkJCWRzdCA9 ICZyZXN1bHRbY291bnQrK107CisJCQkJZHN0LT50eXBlID0gWEhCX1JFUExJQ0FUSU9OX1NMT1Q7 CisJCQkJZHN0LT5waWQgPSAwOworCQkJCWRzdC0+eGlkID0gVHJhbnNhY3Rpb25JZElzVmFsaWQo c2xvdF94bWluKSA/CisJCQkJCXNsb3RfeG1pbiA6CisJCQkJCXNsb3RfY2F0YWxvZ194bWluOwor CQkJCXN0cmxjcHkoZHN0LT5uYW1lLCBOYW1lU3RyKHMtPmRhdGEubmFtZSksIHNpemVvZihkc3Qt Pm5hbWUpKTsKKwkJCX0KKwkJfQorCisJCUxXTG9ja1JlbGVhc2UoUmVwbGljYXRpb25TbG90Q29u dHJvbExvY2spOworCX0KKworCSpuYmxvY2tlcnMgPSBjb3VudDsKKwlyZXR1cm4gcmVzdWx0Owor fQorCisvKgorICogR2V0IHRoZSBoaWdoZXN0LXByaW9yaXR5IGJsb2NrZXIgaG9sZGluZyBiYWNr IHRoZSB4aWQgaG9yaXpvbi4KKyAqCisgKiBSZXR1cm5zIHRydWUgYW5kIHN0b3JlcyB0aGUgYmxv Y2tlciBpbiAqYmxvY2tlciBpZiBhbnkgYXJlIGZvdW5kLgorICovCitib29sCitHZXRYaWRIb3Jp em9uQmxvY2tlcihUcmFuc2FjdGlvbklkIGhvcml6b24sIFhpZEhvcml6b25CbG9ja2VyICpibG9j a2VyKQoreworCVhpZEhvcml6b25CbG9ja2VyICpibG9ja2VyczsKKwlYaWRIb3Jpem9uQmxvY2tl ciAqYmVzdCA9IE5VTEw7CisJaW50CQkJbmJsb2NrZXJzOworCisJQXNzZXJ0KFRyYW5zYWN0aW9u SWRJc1ZhbGlkKGhvcml6b24pKTsKKwlBc3NlcnQoYmxvY2tlciAhPSBOVUxMKTsKKworCWJsb2Nr ZXJzID0gR2V0WGlkSG9yaXpvbkJsb2NrZXJzKGhvcml6b24sICZuYmxvY2tlcnMpOworCWZvciAo aW50IGkgPSAwOyBpIDwgbmJsb2NrZXJzOyBpKyspCisJeworCQlpZiAoYmVzdCA9PSBOVUxMIHx8 IGJsb2NrZXJzW2ldLnR5cGUgPCBiZXN0LT50eXBlKQorCQkJYmVzdCA9ICZibG9ja2Vyc1tpXTsK Kwl9CisKKwlpZiAoYmVzdCAhPSBOVUxMKQorCQkqYmxvY2tlciA9ICpiZXN0OworCisJcGZyZWUo YmxvY2tlcnMpOworCisJcmV0dXJuIChiZXN0ICE9IE5VTEwpOworfQorCiAvKgogICogR2V0TWF4 U25hcHNob3RYaWRDb3VudCAtLSBnZXQgbWF4IHNpemUgZm9yIHNuYXBzaG90IFhJRCBhcnJheQog ICoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90d29waGFzZS5oIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL3R3b3BoYXNlLmgKaW5kZXggMWQyZmY0MmM5YjcuLmZjNzI5NGE0ZTI1IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdHdvcGhhc2UuaAorKysgYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvdHdvcGhhc2UuaApAQCAtNzAsNiArNzAsNyBAQCBleHRlcm4gdm9pZCBUd29QaGFzZVRy YW5zYWN0aW9uR2lkKE9pZCBzdWJpZCwgVHJhbnNhY3Rpb25JZCB4aWQsIGNoYXIgKmdpZF9yZXMs CiAJCQkJCQkJCSAgIGludCBzemdpZCk7CiBleHRlcm4gYm9vbCBMb29rdXBHWGFjdEJ5U3ViaWQo T2lkIHN1YmlkKTsKIAorZXh0ZXJuIGJvb2wgR2V0UHJlcGFyZWRUcmFuc2FjdGlvbkdpZChUcmFu c2FjdGlvbklkIHhpZCwgY2hhciBnaWRbR0lEU0laRV0pOwogZXh0ZXJuIFRyYW5zYWN0aW9uSWQg VHdvUGhhc2VHZXRPbGRlc3RYaWRJbkNvbW1pdCh2b2lkKTsKIAogI2VuZGlmCQkJCQkJCS8qIFRX T1BIQVNFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5Lmgg Yi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJheS5oCmluZGV4IGVjODljNDQ4MjIwLi4yNjg5 ZWVjN2RhZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaAorKysg Yi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJheS5oCkBAIC0xNCwxMCArMTQsNDYgQEAKICNp Zm5kZWYgUFJPQ0FSUkFZX0gKICNkZWZpbmUgUFJPQ0FSUkFZX0gKIAorI2luY2x1ZGUgImFjY2Vz cy94YWN0LmgiCisjaW5jbHVkZSAic3RvcmFnZS9sb2NrLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9z dGFuZGJ5LmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9z bmFwc2hvdC5oIgogCisvKgorICogVHlwZSBvZiBibG9ja2VyIHRoYXQgaXMgaG9sZGluZyBiYWNr IHRoZSB4aWQgaG9yaXpvbi4KKyAqIExpc3RlZCBpbiBwcmlvcml0eSBvcmRlciBmcm9tIGhpZ2hl c3QgdG8gbG93ZXN0LiAgQmxvY2tlcnMgd2hvc2UgeGlkCisgKiBtYXRjaGVzIHRoZSBob3Jpem9u ICh0aGUgcm9vdCBjYXVzZSkgYXJlIGxpc3RlZCBiZWZvcmUgYmxvY2tlcnMgd2hvc2UKKyAqIHht aW4gbWF0Y2hlcyAoaGVsZCBiYWNrIGJ5IHRoZSByb290IGNhdXNlKS4gIFdpdGhpbiBlYWNoIGdy b3VwLCBhY3RpdmUKKyAqIHRyYW5zYWN0aW9ucyBhcmUgbGlzdGVkIGZpcnN0IGJlY2F1c2UgdGhl eSBhcmUgdGhlIG1vc3QgYWN0aW9uYWJsZSBmb3IKKyAqIHRoZSBEQkEgKHRoZSBydW5uaW5nIHF1 ZXJ5IGNhbiBiZSBpZGVudGlmaWVkIGFuZCBjYW5jZWxsZWQpLgorICovCit0eXBlZGVmIGVudW0g WGlkSG9yaXpvbkJsb2NrZXJUeXBlCit7CisJWEhCX05PTkUgPSAwLAorCS8qIHhpZC1tYXRjaCB0 eXBlcyAoaG9yaXpvbiA9PSBwcm9jJ3MgeGlkKSAqLworCVhIQl9BQ1RJVkVfVFJBTlNBQ1RJT04s CQkvKiBiYWNrZW5kIHJ1bm5pbmcgYSBzdGF0ZW1lbnQgKi8KKwlYSEJfSURMRV9JTl9UUkFOU0FD VElPTiwJLyogYmFja2VuZCBpZGxlIGluIHRyYW5zYWN0aW9uICovCisJWEhCX1BSRVBBUkVEX1RS QU5TQUNUSU9OLAkvKiBwcmVwYXJlZCAodHdvLXBoYXNlKSB0cmFuc2FjdGlvbiAqLworCS8qIHht aW4tbWF0Y2ggdHlwZXMgKGhvcml6b24gPT0gcHJvYydzIHhtaW4gb3Igc2xvdCdzIHhtaW4pICov CisJWEhCX1hNSU5fQUNUSVZFX1RSQU5TQUNUSU9OLAkvKiBiYWNrZW5kIHJ1bm5pbmcgYSBzdGF0 ZW1lbnQgKi8KKwlYSEJfWE1JTl9JRExFX0lOX1RSQU5TQUNUSU9OLAkvKiBiYWNrZW5kIGlkbGUg aW4gdHJhbnNhY3Rpb24gKi8KKwlYSEJfSE9UX1NUQU5EQllfRkVFREJBQ0ssCS8qIHdhbHNlbmRl ciB3aXRoIGhvdF9zdGFuZGJ5X2ZlZWRiYWNrICovCisJWEhCX1JFUExJQ0FUSU9OX1NMT1QsCQkv KiBsb2dpY2FsIHJlcGxpY2F0aW9uIHNsb3QgKi8KK30gWGlkSG9yaXpvbkJsb2NrZXJUeXBlOwor CisvKgorICogSW5mb3JtYXRpb24gYWJvdXQgYSBibG9ja2VyIHRoYXQgaXMgaG9sZGluZyBiYWNr IHRoZSB4aWQgaG9yaXpvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgWGlkSG9yaXpvbkJsb2NrZXIK K3sKKwlYaWRIb3Jpem9uQmxvY2tlclR5cGUgdHlwZTsKKwlUcmFuc2FjdGlvbklkIHhpZDsJCQkv KiB0aGUgYmxvY2tpbmcgeGlkL3htaW4gKi8KKwlpbnQJCQlwaWQ7CQkJLyogYmFja2VuZCBwaWQg KDAgZm9yIHNsb3RzKSAqLworCS8qIGxhcmdlIGVub3VnaCBmb3IgcHJlcGFyZWQtdHhuIEdJRCBv ciByZXBsaWNhdGlvbiBzbG90IG5hbWUgKi8KKwljaGFyCQluYW1lW01heChHSURTSVpFLCBOQU1F REFUQUxFTildOworfSBYaWRIb3Jpem9uQmxvY2tlcjsKKwogCiBleHRlcm4gdm9pZCBQcm9jQXJy YXlBZGQoUEdQUk9DICpwcm9jKTsKIGV4dGVybiB2b2lkIFByb2NBcnJheVJlbW92ZShQR1BST0Mg KnByb2MsIFRyYW5zYWN0aW9uSWQgbGF0ZXN0WGlkKTsKQEAgLTk4LDQgKzEzNCw3IEBAIGV4dGVy biB2b2lkIFByb2NBcnJheVNldFJlcGxpY2F0aW9uU2xvdFhtaW4oVHJhbnNhY3Rpb25JZCB4bWlu LAogZXh0ZXJuIHZvaWQgUHJvY0FycmF5R2V0UmVwbGljYXRpb25TbG90WG1pbihUcmFuc2FjdGlv bklkICp4bWluLAogCQkJCQkJCQkJCQlUcmFuc2FjdGlvbklkICpjYXRhbG9nX3htaW4pOwogCitl eHRlcm4gYm9vbCBHZXRYaWRIb3Jpem9uQmxvY2tlcihUcmFuc2FjdGlvbklkIGhvcml6b24sCisJ CQkJCQkJCSBYaWRIb3Jpem9uQmxvY2tlciAqYmxvY2tlcik7CisKICNlbmRpZgkJCQkJCQkvKiBQ Uk9DQVJSQVlfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvbWVz b24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy9tZXNvbi5idWlsZAppbmRleCA5 NjllOTBiMzk2ZC4uYzQ1OTM1MTE1NTggMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9taXNjL21lc29uLmJ1aWxkCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL21lc29u LmJ1aWxkCkBAIC0xOSw5ICsxOSwxMCBAQCB0ZXN0cyArPSB7CiAgICAgICAndC8wMDhfcmVwbHNs b3Rfc2luZ2xlX3VzZXIucGwnLAogICAgICAgJ3QvMDA5X2xvZ190ZW1wX2ZpbGVzLnBsJywKICAg ICAgICd0LzAxMF9pbmRleF9jb25jdXJyZW50bHlfdXBzZXJ0LnBsJywKLSAgICAgICd0LzAxMV9s b2NrX3N0YXRzLnBsJywKLSAgICAgICd0LzAxMl9kZGx1dGlscy5wbCcsCi0gICAgICAndC8wMTNf dGVtcF9vYmpfbXVsdGlzZXNzaW9uLnBsJywKKyAgICAgICd0LzAxMV9sb2dfdmFjdXVtX2Jsb2Nr ZXJzLnBsJywKKyAgICAgICd0LzAxMl9sb2NrX3N0YXRzLnBsJywKKyAgICAgICd0LzAxM19kZGx1 dGlscy5wbCcsCisgICAgICAndC8wMTRfdGVtcF9vYmpfbXVsdGlzZXNzaW9uLnBsJywKICAgICBd LAogICAgICMgVGhlIGluamVjdGlvbiBwb2ludHMgYXJlIGNsdXN0ZXItd2lkZSwgc28gZGlzYWJs ZSBpbnN0YWxsY2hlY2sKICAgICAncnVubmluZ2NoZWNrJzogZmFsc2UsCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy90LzAxNF9sb2dfdmFjdXVtX2Jsb2NrZXJzLnBsIGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvdC8wMTRfbG9nX3ZhY3V1bV9ibG9ja2Vycy5wbApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmUyNmYwZjNiZWIKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy90LzAxNF9sb2dfdmFjdXVt X2Jsb2NrZXJzLnBsCkBAIC0wLDAgKzEsMzE0IEBACisjIENvcHlyaWdodCAoYykgMjAyNiwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyMKKyMgVmFsaWRhdGUgdGhhdCBWQUNV VU0gbG9ncyBleHBsYWluIHdoeSBkZWFkIHR1cGxlcyBjb3VsZCBub3QgYmUgcmVtb3ZlZC4KKwor dXNlIHN0cmljdDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKKwordXNlIFBvc3RncmVT UUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVz dDo6TW9yZTsKKworIyBTZXQgdXAgYSBjbHVzdGVyCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRl c3Q6OkNsdXN0ZXItPm5ldygnbWFpbicpOworJG5vZGUtPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9 PiAnbG9naWNhbCcpOworJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCBxWwor bWF4X3ByZXBhcmVkX3RyYW5zYWN0aW9ucyA9IDUKK10pOworJG5vZGUtPnN0YXJ0OworCisjIENy ZWF0ZSB0aGUgaG90IHN0YW5kYnkgdGVzdCB0YWJsZSBhbmQgcHJlcGFyZSBiYWNrdXAvc3RhbmRi eSBlYXJseSwgYmVmb3JlCisjIGFueSBiYWNrZ3JvdW5kIHBzcWwgc2Vzc2lvbnMgYXJlIHN0YXJ0 ZWQuICBPbiBXaW5kb3dzLCBiYWNrZ3JvdW5kIHBzcWwKKyMgc2Vzc2lvbnMgdGhhdCBhcmUgdGVy bWluYXRlZCBkdXJpbmcgZWFybGllciB0ZXN0cyBjYW4gbGVhdmUgZmlsZSBoYW5kbGVzCisjIGxp bmdlcmluZywgd2hpY2ggY2F1c2VzIHBnX2N0bCBzdGFydCBmb3IgdGhlIHN0YW5kYnkgdG8gZmFp bC4gIEJ5IHRha2luZworIyB0aGUgYmFja3VwIGFuZCBpbml0aWFsaXppbmcgdGhlIHN0YW5kYnkg aGVyZSwgdGhlIHN0YW5kYnkgc3RhcnQgbGF0ZXIgb25seQorIyBuZWVkcyB0byBsYXVuY2ggcGdf Y3RsIGFmdGVyIGFsbCB0aG9zZSBzZXNzaW9ucyBoYXZlIGJlZW4gZnVsbHkgY2xlYW5lZCB1cC4K KyRub2RlLT5iYWNrdXAoJ29sZGVzdHhtaW5faG90c3RhbmRieV9ia3AnKTsKK215ICRzdGFuZGJ5 ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdvbGRlc3R4bWluX3N0YW5kYnknKTsK KyRzdGFuZGJ5LT5pbml0X2Zyb21fYmFja3VwKCRub2RlLCAnb2xkZXN0eG1pbl9ob3RzdGFuZGJ5 X2JrcCcsCisJaGFzX3N0cmVhbWluZyA9PiAxKTsKKyRzdGFuZGJ5LT5hcHBlbmRfY29uZigncG9z dGdyZXNxbC5jb25mJywgcVsKK2hvdF9zdGFuZGJ5X2ZlZWRiYWNrID0gb24KK3dhbF9yZWNlaXZl cl9zdGF0dXNfaW50ZXJ2YWwgPSAxMDBtcworXSk7CisKKworIworIyBBY3RpdmUgc3RhdGVtZW50 CisjCitteSAkYWN0aXZlX3RhYmxlID0gJ2Jsb2NrZXJfYWN0aXZlJzsKKyRub2RlLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgcXFbCitDUkVBVEUgVEFCTEUgJGFjdGl2ZV90YWJsZShpZCBpbnQpOwor SU5TRVJUIElOVE8gJGFjdGl2ZV90YWJsZSBWQUxVRVMgKDApOworXSk7CisKK215ICRibG9ja2Vy ID0gJG5vZGUtPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMnKTsKK215ICRibG9ja2VyX3BpZCA9 ICRibG9ja2VyLT5xdWVyeV9zYWZlKCdTRUxFQ1QgcGdfYmFja2VuZF9waWQoKTsnKTsKK2Nob21w KCRibG9ja2VyX3BpZCk7CisKKyMgU3RhcnQgYSBsb25nLXJ1bm5pbmcgcXVlcnkgaW4gdGhlIGJh Y2tncm91bmQgdGhhdCBhY2Nlc3NlcyBhIHRhYmxlCisjIFRoaXMgZW5zdXJlcyB4bWluIGlzIHNl dCAocGdfc2xlZXAgYWxvbmUgZG9lc24ndCByZXF1aXJlIGEgc25hcHNob3QpCiskYmxvY2tlci0+ cXVlcnlfdW50aWwocXIvLywgcXFbCitCRUdJTjsKK1NFTEVDVCAqIEZST00gJGFjdGl2ZV90YWJs ZSwgcGdfc2xlZXAoNjApOworXSk7CisKKyMgV2FpdCBmb3IgdGhlIGJsb2NrZXIgdG8gaGF2ZSB4 bWluIHNldAorJG5vZGUtPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywgcXFbCitTRUxFQ1Qg YmFja2VuZF94bWluIElTIE5PVCBOVUxMCitGUk9NIHBnX3N0YXRfYWN0aXZpdHkKK1dIRVJFIHBp ZCA9ICRibG9ja2VyX3BpZDsKK10pOworCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJE RUxFVEUgRlJPTSAkYWN0aXZlX3RhYmxlOyIpOworCitteSAkc3RkZXJyID0gJyc7Ciskbm9kZS0+ cHNxbCgncG9zdGdyZXMnLCAiVkFDVVVNIChWRVJCT1NFKSAkYWN0aXZlX3RhYmxlOyIsIHN0ZGVy ciA9PiBcJHN0ZGVycik7CitsaWtlKAorCSRzdGRlcnIsCisJcXIvb2xkZXN0IHhtaW4gYmxvY2tl cjogYWN0aXZlIHRyYW5zYWN0aW9uIGhvbGRpbmcgc25hcHNob3QgXChwaWQgPSAkYmxvY2tlcl9w aWRcKS8sCisJJ1ZBQ1VVTSBWRVJCT1NFIHJlcG9ydGVkIGFjdGl2ZSB0cmFuc2FjdGlvbiBob2xk aW5nIHNuYXBzaG90IGFzIG9sZGVzdCB4bWluIGJsb2NrZXInKTsKKworIyBDbGVhbnVwCiskbm9k ZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxWworU0VMRUNUIHBnX3Rlcm1pbmF0ZV9iYWNrZW5k KCRibG9ja2VyX3BpZCk7CitEUk9QIFRBQkxFICRhY3RpdmVfdGFibGU7CitdKTsKKworCisjCisj IElkbGUgaW4gdHJhbnNhY3Rpb24KKyMKK215ICRpZGxlX3RhYmxlID0gJ2Jsb2NrZXJfaWRsZSc7 Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxWworQ1JFQVRFIFRBQkxFICRpZGxlX3Rh YmxlKGlkIGludCk7CitJTlNFUlQgSU5UTyAkaWRsZV90YWJsZSBWQUxVRVMgKDApOworXSk7CisK K215ICRpZGxlX2Jsb2NrZXIgPSAkbm9kZS0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3JlcycpOwor bXkgJGlkbGVfYmxvY2tlcl9waWQgPSAkaWRsZV9ibG9ja2VyLT5xdWVyeV9zYWZlKCdTRUxFQ1Qg cGdfYmFja2VuZF9waWQoKTsnKTsKK2Nob21wKCRpZGxlX2Jsb2NrZXJfcGlkKTsKKworIyBTZXQg aXNvbGF0aW9uIGxldmVsIHRvIFJFUEVBVEFCTEUgUkVBRCB0byBlbnN1cmUgeG1pbiBpcyBzZXQK KyRpZGxlX2Jsb2NrZXItPnF1ZXJ5X3NhZmUocXFbCitCRUdJTjsKK1NFVCBUUkFOU0FDVElPTiBJ U09MQVRJT04gTEVWRUwgUkVQRUFUQUJMRSBSRUFEOworU0VMRUNUICogRlJPTSAkaWRsZV90YWJs ZTsKK10pOworCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJPTSAkaWRs ZV90YWJsZTsiKTsKKworJHN0ZGVyciA9ICcnOworJG5vZGUtPnBzcWwoJ3Bvc3RncmVzJywgIlZB Q1VVTSAoVkVSQk9TRSkgJGlkbGVfdGFibGU7Iiwgc3RkZXJyID0+IFwkc3RkZXJyKTsKK2xpa2Uo CisJJHN0ZGVyciwKKwlxci9vbGRlc3QgeG1pbiBibG9ja2VyOiBpZGxlIGluIHRyYW5zYWN0aW9u IGhvbGRpbmcgc25hcHNob3QgXChwaWQgPSAkaWRsZV9ibG9ja2VyX3BpZFwpLywKKwknVkFDVVVN IFZFUkJPU0UgcmVwb3J0ZWQgaWRsZSBpbiB0cmFuc2FjdGlvbiBob2xkaW5nIHNuYXBzaG90IGFz IG9sZGVzdCB4bWluIGJsb2NrZXInKTsKKworIyBDbGVhbnVwCiskaWRsZV9ibG9ja2VyLT5xdWl0 OworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSAkaWRsZV90YWJsZTsi KTsKKworCisjCisjIFNlcmlhbGl6YWJsZSB0cmFuc2FjdGlvbiAoaWRsZSBpbiB0cmFuc2FjdGlv bikKKyMKK215ICRzZXJpYWxpemFibGVfdGFibGUgPSAnYmxvY2tlcl9zZXJpYWxpemFibGUnOwor JG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcVsKK0NSRUFURSBUQUJMRSAkc2VyaWFsaXph YmxlX3RhYmxlKGlkIGludCk7CitJTlNFUlQgSU5UTyAkc2VyaWFsaXphYmxlX3RhYmxlIFZBTFVF UyAoMCk7CitdKTsKKworbXkgJHNlcl9ibG9ja2VyID0gJG5vZGUtPmJhY2tncm91bmRfcHNxbCgn cG9zdGdyZXMnKTsKK215ICRzZXJfYmxvY2tlcl9waWQgPSAkc2VyX2Jsb2NrZXItPnF1ZXJ5X3Nh ZmUoJ1NFTEVDVCBwZ19iYWNrZW5kX3BpZCgpOycpOworY2hvbXAoJHNlcl9ibG9ja2VyX3BpZCk7 CisKKyRzZXJfYmxvY2tlci0+cXVlcnlfc2FmZShxcVsKK0JFR0lOOworU0VUIFRSQU5TQUNUSU9O IElTT0xBVElPTiBMRVZFTCBTRVJJQUxJWkFCTEU7CitTRUxFQ1QgKiBGUk9NICRzZXJpYWxpemFi bGVfdGFibGU7CitdKTsKKworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiREVMRVRFIEZS T00gJHNlcmlhbGl6YWJsZV90YWJsZTsiKTsKKworJHN0ZGVyciA9ICcnOworJG5vZGUtPnBzcWwo J3Bvc3RncmVzJywgIlZBQ1VVTSAoVkVSQk9TRSkgJHNlcmlhbGl6YWJsZV90YWJsZTsiLCBzdGRl cnIgPT4gXCRzdGRlcnIpOworbGlrZSgKKwkkc3RkZXJyLAorCXFyL29sZGVzdCB4bWluIGJsb2Nr ZXI6IGlkbGUgaW4gdHJhbnNhY3Rpb24gaG9sZGluZyBzbmFwc2hvdCBcKHBpZCA9ICRzZXJfYmxv Y2tlcl9waWRcKS8sCisJJ1ZBQ1VVTSBWRVJCT1NFIHJlcG9ydGVkIHNlcmlhbGl6YWJsZSB0cmFu c2FjdGlvbiBhcyBvbGRlc3QgeG1pbiBibG9ja2VyJyk7CisKKyMgQ2xlYW51cAorJHNlcl9ibG9j a2VyLT5xdWl0OworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSAkc2Vy aWFsaXphYmxlX3RhYmxlOyIpOworCisKKyMKKyMgUHJlZmVyIHhpZCBvd25lciBvdmVyIHhtaW4g bWF0Y2gKKyMKK215ICRwcmVmZXJfdGFibGUgPSAnYmxvY2tlcl9wcmVmZXJfeGlkX293bmVyJzsK KyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXFbCitDUkVBVEUgVEFCTEUgJHByZWZlcl90 YWJsZShpZCBpbnQpOworSU5TRVJUIElOVE8gJHByZWZlcl90YWJsZSBWQUxVRVMgKDApOworXSk7 CisKK215ICR4aWRfb3duZXIgPSAkbm9kZS0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3JlcycpOwor bXkgJHhpZF9vd25lcl9waWQgPSAkeGlkX293bmVyLT5xdWVyeV9zYWZlKCdTRUxFQ1QgcGdfYmFj a2VuZF9waWQoKTsnKTsKK2Nob21wKCR4aWRfb3duZXJfcGlkKTsKKworJHhpZF9vd25lci0+cXVl cnlfc2FmZShxcVsKK0JFR0lOOworU0VMRUNUIHBnX2N1cnJlbnRfeGFjdF9pZCgpOworXSk7CisK KyRub2RlLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsIHFxWworU0VMRUNUIGJhY2tlbmRf eGlkIElTIE5PVCBOVUxMCitGUk9NIHBnX3N0YXRfYWN0aXZpdHkKK1dIRVJFIHBpZCA9ICR4aWRf b3duZXJfcGlkOworXSk7CisKK215ICRvd25lcl94aWQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsIHFxWworU0VMRUNUIGJhY2tlbmRfeGlkCitGUk9NIHBnX3N0YXRfYWN0aXZpdHkKK1dI RVJFIHBpZCA9ICR4aWRfb3duZXJfcGlkOworXSk7CitjaG9tcCgkb3duZXJfeGlkKTsKKworbXkg JHhtaW5faG9sZGVyID0gJG5vZGUtPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMnKTsKK215ICR4 bWluX2hvbGRlcl9waWQgPSAkeG1pbl9ob2xkZXItPnF1ZXJ5X3NhZmUoJ1NFTEVDVCBwZ19iYWNr ZW5kX3BpZCgpOycpOworY2hvbXAoJHhtaW5faG9sZGVyX3BpZCk7CisKKyMgU3RhcnQgYSBsb25n LXJ1bm5pbmcgcXVlcnkgdGhhdCB3aWxsIHRha2UgYSBzbmFwc2hvdCBhZnRlciB4aWRfb3duZXIg YmVnaW5zCiskeG1pbl9ob2xkZXItPnF1ZXJ5X3VudGlsKHFyLy8sIHFxWworQkVHSU47CitTRUxF Q1QgKiBGUk9NICRwcmVmZXJfdGFibGUsIHBnX3NsZWVwKDYwKTsKK10pOworCisjIEVuc3VyZSB4 bWluX2hvbGRlcidzIHhtaW4gaXMgaGVsZCBiYWNrIGJ5IHhpZF9vd25lcgorJG5vZGUtPnBvbGxf cXVlcnlfdW50aWwoJ3Bvc3RncmVzJywgcXFbCitTRUxFQ1QgYmFja2VuZF94bWluID0gJyRvd25l cl94aWQnOjp4aWQKK0ZST00gcGdfc3RhdF9hY3Rpdml0eQorV0hFUkUgcGlkID0gJHhtaW5faG9s ZGVyX3BpZDsKK10pOworCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJP TSAkcHJlZmVyX3RhYmxlOyIpOworCiskc3RkZXJyID0gJyc7Ciskbm9kZS0+cHNxbCgncG9zdGdy ZXMnLCAiVkFDVVVNIChWRVJCT1NFKSAkcHJlZmVyX3RhYmxlOyIsIHN0ZGVyciA9PiBcJHN0ZGVy cik7CitsaWtlKAorCSRzdGRlcnIsCisJcXIvb2xkZXN0IHhtaW4gYmxvY2tlcjogaWRsZSBpbiB0 cmFuc2FjdGlvbiBcKHBpZCA9ICR4aWRfb3duZXJfcGlkXCkvLAorCSdWQUNVVU0gVkVSQk9TRSBw cmVmZXJyZWQgeGlkIG93bmVyIG92ZXIgeG1pbiBtYXRjaCcpOworCisjIENsZWFudXAKKyRub2Rl LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXFbCitTRUxFQ1QgcGdfdGVybWluYXRlX2JhY2tlbmQo JHhtaW5faG9sZGVyX3BpZCk7CitTRUxFQ1QgcGdfdGVybWluYXRlX2JhY2tlbmQoJHhpZF9vd25l cl9waWQpOworRFJPUCBUQUJMRSAkcHJlZmVyX3RhYmxlOworXSk7CisKKworIworIyBQcmVwYXJl ZCB0cmFuc2FjdGlvbgorIworbXkgJHByZXBhcmVkX3RhYmxlID0gJ2Jsb2NrZXJfcHJlcGFyZWQn OworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcVsKK0NSRUFURSBUQUJMRSAkcHJlcGFy ZWRfdGFibGUoaWQgaW50KTsKK0lOU0VSVCBJTlRPICRwcmVwYXJlZF90YWJsZSBWQUxVRVMgKDAp OworQkVHSU47CitQUkVQQVJFIFRSQU5TQUNUSU9OICdneF92YWN1dW1feG1pbic7CitdKTsKKwor JG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiREVMRVRFIEZST00gJHByZXBhcmVkX3RhYmxl OyIpOworCiskc3RkZXJyID0gJyc7Ciskbm9kZS0+cHNxbCgncG9zdGdyZXMnLCAiVkFDVVVNIChW RVJCT1NFKSAkcHJlcGFyZWRfdGFibGU7Iiwgc3RkZXJyID0+IFwkc3RkZXJyKTsKK2xpa2UoCisJ JHN0ZGVyciwKKwlxci9vbGRlc3QgeG1pbiBibG9ja2VyOiBwcmVwYXJlZCB0cmFuc2FjdGlvbiBc KGdpZCA9IGd4X3ZhY3V1bV94bWluXCkvLAorCSdWQUNVVU0gVkVSQk9TRSByZXBvcnRlZCBwcmVw YXJlZCB0cmFuc2FjdGlvbiBhcyBvbGRlc3QgeG1pbiBibG9ja2VyJyk7CisKKyMgQ2xlYW51cAor JG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcVsKK1JPTExCQUNLIFBSRVBBUkVEICdneF92 YWN1dW1feG1pbic7CitEUk9QIFRBQkxFICRwcmVwYXJlZF90YWJsZTsKK10pOworCisKKyMKKyMg TG9naWNhbCByZXBsaWNhdGlvbiBzbG90CisjCitteSAkc2xvdF90YWJsZSA9ICdibG9ja2VyX3Ns b3QnOworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcVsKK0NSRUFURSBUQUJMRSAkc2xv dF90YWJsZShpZCBpbnQpOworU0VMRUNUIHBnX2NyZWF0ZV9sb2dpY2FsX3JlcGxpY2F0aW9uX3Ns b3QoJ2xvZ2ljYWxfc2xvdCcsICd0ZXN0X2RlY29kaW5nJyk7CitEUk9QIFRBQkxFICRzbG90X3Rh YmxlOworXSk7CisKKyRzdGRlcnIgPSAnJzsKKyRub2RlLT5wc3FsKCdwb3N0Z3JlcycsICdWQUNV VU0gKFZFUkJPU0UpIHBnX2NsYXNzOycsIHN0ZGVyciA9PiBcJHN0ZGVycik7CitsaWtlKAorCSRz dGRlcnIsCisJcXIvb2xkZXN0IHhtaW4gYmxvY2tlcjogbG9naWNhbCByZXBsaWNhdGlvbiBzbG90 IFwoc2xvdCBuYW1lID0gbG9naWNhbF9zbG90XCkvLAorCSdWQUNVVU0gVkVSQk9TRSByZXBvcnRl ZCBsb2dpY2FsIHJlcGxpY2F0aW9uIHNsb3QgYXMgb2xkZXN0IHhtaW4gc291cmNlJyk7CisKKyMg Q2xlYW51cAorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcVsKK1NFTEVDVCBwZ19kcm9w X3JlcGxpY2F0aW9uX3Nsb3QoJ2xvZ2ljYWxfc2xvdCcpOworXSk7CisKKworIworIyBIb3Qgc3Rh bmRieSBmZWVkYmFjaworIworIyBUaGUgc3RhbmRieSB3YXMgYWxyZWFkeSBpbml0aWFsaXplZCBm cm9tIGEgYmFja3VwIHRha2VuIGFib3ZlLiAgU3RhcnQgaXQKKyMgbm93LCBhZnRlciBhbGwgYmFj a2dyb3VuZCBwc3FsIHNlc3Npb25zIGZyb20gZWFybGllciB0ZXN0cyBoYXZlIGJlZW4gZnVsbHkK KyMgY2xlYW5lZCB1cC4KK215ICRoc190YWJsZSA9ICdibG9ja2VyX2hvdHN0YW5kYnknOworJG5v ZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcVsKK0NSRUFURSBUQUJMRSAkaHNfdGFibGUoaWQg aW50KTsKK0lOU0VSVCBJTlRPICRoc190YWJsZSBWQUxVRVMgKDApOworXSk7CisKKyRzdGFuZGJ5 LT5zdGFydDsKKyRub2RlLT53YWl0X2Zvcl9jYXRjaHVwKCRzdGFuZGJ5LCAncmVwbGF5JywgJG5v ZGUtPmxzbignZmx1c2gnKSk7CisKK215ICRzdGFuZGJ5X3JlYWRlciA9ICRzdGFuZGJ5LT5iYWNr Z3JvdW5kX3BzcWwoJ3Bvc3RncmVzJyk7CitteSAkc3RhbmRieV9yZWFkZXJfcGlkID0gJHN0YW5k YnlfcmVhZGVyLT5xdWVyeV9zYWZlKCdTRUxFQ1QgcGdfYmFja2VuZF9waWQoKTsnKTsKK2Nob21w KCRzdGFuZGJ5X3JlYWRlcl9waWQpOworCiskc3RhbmRieV9yZWFkZXItPnF1ZXJ5X3VudGlsKHFy Ly8sIHFxWworQkVHSU47CitTRUxFQ1QgKiBGUk9NICRoc190YWJsZSwgcGdfc2xlZXAoNjApOwor XSk7CisKKyMgV2FpdCBmb3IgaG90IHN0YW5kYnkgZmVlZGJhY2sgdG8gYmUgc2VudAorJG5vZGUt PnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywgcVsKK1NFTEVDVCBiYWNrZW5kX3htaW4gSVMg Tk9UIE5VTEwKK0ZST00gcGdfc3RhdF9yZXBsaWNhdGlvbgorV0hFUkUgYXBwbGljYXRpb25fbmFt ZSA9ICdvbGRlc3R4bWluX3N0YW5kYnknOworXSk7CisKK215ICRoc19ibG9ja2VyX3BpZCA9ICRu b2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcVsKK1NFTEVDVCBwaWQgRlJPTSBwZ19zdGF0X3Jl cGxpY2F0aW9uCitXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJ29sZGVzdHhtaW5fc3RhbmRieSc7 CitdKTsKK2Nob21wKCRoc19ibG9ja2VyX3BpZCk7CisKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRFTEVURSBGUk9NICRoc190YWJsZTsiKTsKKworJHN0ZGVyciA9ICcnOworJG5vZGUt PnBzcWwoJ3Bvc3RncmVzJywgIlZBQ1VVTSAoVkVSQk9TRSkgJGhzX3RhYmxlOyIsIHN0ZGVyciA9 PiBcJHN0ZGVycik7CitsaWtlKAorCSRzdGRlcnIsCisJcXIvb2xkZXN0IHhtaW4gYmxvY2tlcjog aG90IHN0YW5kYnkgZmVlZGJhY2sgXChzdGFuZGJ5IG5hbWUgPSBvbGRlc3R4bWluX3N0YW5kYnks IHBpZCA9ICRoc19ibG9ja2VyX3BpZFwpLywKKwknVkFDVVVNIFZFUkJPU0UgcmVwb3J0ZWQgaG90 IHN0YW5kYnkgZmVlZGJhY2sgYXMgb2xkZXN0IHhtaW4gYmxvY2tlcicpOworCisjIENsZWFudXAK KyRzdGFuZGJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBwZ190ZXJtaW5hdGVfYmFj a2VuZCgkc3RhbmRieV9yZWFkZXJfcGlkKTsiKTsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkRST1AgVEFCTEUgJGhzX3RhYmxlOyIpOworCisKKyRzdGFuZGJ5LT5zdG9wOworJG5vZGUt PnN0b3A7Citkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggOGNm NDBjODcwNDMuLjgzYjg4MGI0MjZlIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMzU0 NCw2ICszNTQ0LDggQEAgWGFjdExvY2tUYWJsZVdhaXRJbmZvCiBYaWRCb3VuZHNWaW9sYXRpb24K IFhpZENhY2hlU3RhdHVzCiBYaWRDb21taXRTdGF0dXMKK1hpZEhvcml6b25CbG9ja2VyCitYaWRI b3Jpem9uQmxvY2tlclR5cGUKIFhpZFN0YXR1cwogWG1sRXhwcgogWG1sRXhwck9wCi0tIAoyLjQ3 LjMKCg== --00000000000041d8e6065267b1e0--