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 1vYYv7-0076qA-1v for pgsql-hackers@arkaria.postgresql.org; Thu, 25 Dec 2025 00:09:34 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vYYv5-005yUK-0G for pgsql-hackers@arkaria.postgresql.org; Thu, 25 Dec 2025 00:09:31 +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 1vYYv4-005yUC-1f for pgsql-hackers@lists.postgresql.org; Thu, 25 Dec 2025 00:09:31 +0000 Received: from mail-ed1-x530.google.com ([2a00:1450:4864:20::530]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vYYv3-002TK0-21 for pgsql-hackers@postgresql.org; Thu, 25 Dec 2025 00:09:30 +0000 Received: by mail-ed1-x530.google.com with SMTP id 4fb4d7f45d1cf-64b61f82b5fso8305101a12.0 for ; Wed, 24 Dec 2025 16:09:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766621366; x=1767226166; darn=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=uJ1haFm1t3BencxwZrj1aLWqGoQIdg1Ol7USVuzGdYU=; b=TkMCh0sC+rsAJd/kMVeHxppiS3Xlqi1ZL3QHY62KAu3Cc28HA2Kngk4mC2o42X6DuH boXah5ZaH/4StOXNZF8gXdga7dFPUOSFTWVsZo+K/2GolFG8cICudPwNMd1Ox3NgEZpa u9NqzlNbOtOyOYEyYt3HMFdiu70Aq6UWGi75v1iZdaumvPGSsEgGI4kMI92qn580Ei7a NBl3dN6I+nE/5HsLoMjhYNhlcZM96o4mfRuYiqWV8qJEToypLaKt5sQ7GBmTQRvjfJIu W2ZEe6Ubqxt7wLL87DPHOUVF1PL1tFCoyvx+iHzi62BFu/cDWtkNDIz87rLFD4YbONQO hbtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766621366; x=1767226166; 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=uJ1haFm1t3BencxwZrj1aLWqGoQIdg1Ol7USVuzGdYU=; b=tiR6i4nvvywg4Quvupthl2CHXAAyDjDWkrf1wL4znv+6je6prWAWmWwUUjIiaWLc9i pnZ3NIjBPQSFaDuIsMXoc6hNV3BSQPEIKX+SyLT+z8jG/3I40QjcF+kzRyFh7pRELQV7 o3o/Qm4g4DCrTF0F3hmyhVu+ChLnH275rsWQdUcsoQGXkfzUvgiwVnE7WwP+M4LQLr8a dERTEoI+RaTJqptJMvBX3QbBTpEiFdUIEsDP2Eg6DTYPgsojlQmfhSVuE7m3raDh4Y1s G7QWLw1hljMiYRnwsUACJWqOig+8ZoqLm4gU0gKfAb1YUIIJoKvU3G5mrVual6cMHwsu U7hQ== X-Forwarded-Encrypted: i=1; AJvYcCXqJhCo6dPUbE30eT98FINMW6I6RPlF/8b8NyUZQJdzorud92mgnCLtPVd2YAKgmrK3gZagIqwgD/6ouQxE@postgresql.org X-Gm-Message-State: AOJu0YwliMnlOMLn1ZUuPa1xKr1U+T3IRK/kvDA2bk0vF48qX/dnhhEH CdWKpvYOfJwJrXRStoQd7lCJP0GCFzbjpRZDY5p4LVPapPVT2M2IeLir/OxY1vdQioukXXi/Hrs TXPNPQOuzb7jUITqaPUK41QY8aQlBiUA= X-Gm-Gg: AY/fxX7soBZH4BvKpRtcxavXC8/bUee0f663CtcAizF6j4ZpLMoUcjQXsyUQq5FKBjl wtCb/fhUmJ8yJLQeOH57AB4ykONQFAE+2bQijF3wyPr5rMwGcAXh8t7uRwcKdGuaDLIaPAUP7Yc yySX1c/7+E0AwJZEIzT576a/mZCNsf4Q9lq3MxvKkDSVwWFNpmvbtc+4QI5/dRMUrpB+ZQZYn8n C4lEUIEHkUTxcVxZHRaboViNIR7xdxpi6tC7Z+GUybh1TrY1T+6GuTszrDwRbcUl/vxsObc/ZhQ jx2CGSWZDVhuVUPAQNM9MWC3eTb4/YAqwHPGHA== X-Google-Smtp-Source: AGHT+IEImwPZ74/uMmV/u3HVU3uuYFyqle32udmXwZd69kyQK44/Jee989MDbIbTpNDRx/sBHSsB06msnAt7WXRX4Ic= X-Received: by 2002:a17:907:94cf:b0:b7d:1a23:81a0 with SMTP id a640c23a62f3a-b8037297276mr1750314666b.63.1766621365982; Wed, 24 Dec 2025 16:09:25 -0800 (PST) MIME-Version: 1.0 References: <29f9e7abc90c3a4fe4a44026141c0d6c@oss.nttdata.com> <95850ce1-2d5e-4271-92ea-c2a02e36b303@vondra.me> In-Reply-To: From: Naga Appani Date: Wed, 24 Dec 2025 18:09:14 -0600 X-Gm-Features: AQt7F2qvmdNRoBXfySLVHjsQIkvenDNhlixyKKVgPp8zzu2FwsTvFikH-5taQDg Message-ID: Subject: Re: [Proposal] Expose internal MultiXact member count function for efficient monitoring To: Ashutosh Bapat Cc: Michael Paquier , Tomas Vondra , Xuneng Zhou , torikoshia , Kirill Reshke , pgsql-hackers@postgresql.org Content-Type: multipart/mixed; boundary="000000000000f90c5e0646bb96e2" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000f90c5e0646bb96e2 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks for the suggestion and review, Michael and Ashutosh! On Tue, Dec 16, 2025 at 11:17=E2=80=AFPM Ashutosh Bapat wrote: > > On Wed, Dec 17, 2025 at 9:49=E2=80=AFAM Michael Paquier wrote: > > > > On Sat, Dec 13, 2025 at 01:34:47PM -0600, Naga Appani wrote: > > > > > > I validated the behavior before and after cleanup. > > > The function correctly reports current usage (beyond the old limits) = and > > > resets once multixacts are removed: > > > > + /* > > + * Calculate storage space for members. Members are stored in g= roups, > > + * with each group containing MULTIXACT_MEMBERS_PER_MEMBERGROUP= members > > + * and taking MULTIXACT_MEMBERGROUP_SIZE bytes. > > + */ > > + membersBytes =3D (int64) (members / MULTIXACT_MEMBERS_PER_MEMBE= RGROUP) * > > + MULTIXACT_MEMBERGROUP_SIZE; > > > > This is the key point of the patch internal logic. And there is one > > thing that I am wondering here. The amount of space taken by a number > > of members depends on the other compiled constants from > > multixact_internal.h. Hence, rather than calculate the amount of > > space taken by a set of members in some code hidden in the SQL > > function, could it be better to put that directly as a macro or an > > inline function in multixact_internal.h? > > +1. > > -- > Best Wishes, > Ashutosh Bapat I=E2=80=99ve updated the patch as suggested. The member storage size calculation has been refactored into a static inline function, MultiXactMemberStorageSize(), in src/include/access/multixact_internal.h. Please find v13 attached. Regards, Naga --000000000000f90c5e0646bb96e2 Content-Type: application/octet-stream; name="v13-0001-Add-pg_get_multixact_stats-function-for-monitori.patch" Content-Disposition: attachment; filename="v13-0001-Add-pg_get_multixact_stats-function-for-monitori.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mjkj47m70 RnJvbSA1ZTE5OGVmZGI5MTY1NDhjMDg1MmQ0MjllNjJiODllZjkxOGQ3ODY5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYWdhIEFwcGFuaSA8bmFnbnJpa0BnbWFpbC5jb20+CkRhdGU6 IFdlZCwgMjQgRGVjIDIwMjUgMjE6MDY6MTYgKzAwMDAKU3ViamVjdDogW1BBVENIIHYxM10gQWRk IHBnX2dldF9tdWx0aXhhY3Rfc3RhdHMoKSBmdW5jdGlvbiBmb3IgbW9uaXRvcmluZwogTXVsdGlY YWN0IHVzYWdlCgpFeHBvc2UgbXVsdGl4YWN0IHN0YXRlIHZpYSBhIG5ldyBTUUwtY2FsbGFibGUg ZnVuY3Rpb24gcGdfZ2V0X211bHRpeGFjdF9zdGF0cygpLApyZXR1cm5pbmc6Ci0gbnVtX214aWRz ICAgICAgICAgIDogbnVtYmVyIG9mIE11bHRpWGFjdCBJRHMgaW4gdXNlCi0gbnVtX21lbWJlcnMg ICAgICAgIDogbnVtYmVyIG9mIG1lbWJlciBlbnRyaWVzIGluIHVzZQotIG1lbWJlcnNfc2l6ZSAg ICAgICA6IGJ5dGVzIHVzZWQgYnkgbnVtX21lbWJlcnMgaW4gcGdfbXVsdGl4YWN0L21lbWJlcnMg ZGlyZWN0b3J5Ci0gb2xkZXN0X211bHRpeGFjdCAgIDogb2xkZXN0IE11bHRpWGFjdCBJRCBzdGls bCBuZWVkZWQKClRoaXMgcGF0Y2ggYWRkcyBwZ19nZXRfbXVsdGl4YWN0X3N0YXRzKCkgZnVuY3Rp b24KICAgLSBTUUwtY2FsbGFibGUgaW50ZXJmYWNlIHRvIEdldE11bHRpWGFjdEluZm8oKQogICAt IEluY2x1ZGVzIGlzb2xhdGlvbiB0ZXN0cyBmb3IgbW9uaXRvcmluZyBpbnZhcmlhbnRzCgpEb2N1 bWVudGF0aW9uIHVwZGF0ZXM6Ci0gZnVuYy1pbmZvLnNnbWw6IGFkZCBmdW5jdGlvbiBlbnRyeQot IG1haW50ZW5hbmNlLnNnbWw6IG1lbnRpb24gbW9uaXRvcmluZyBtdWx0aXhhY3QgdXNhZ2UKCkJ1 aWxkIGFuZCBjYXRhbG9nOgotIEFkZCBmdW5jdGlvbiB0byBleGlzdGluZyBtdWx0aXhhY3RmdW5j cy5jCi0gcGdfcHJvYy5kYXQgZW50cnkKCkF1dGhvcjogTmFnYSBBcHBhbmkgPG5hZ25yaWtAZ21h aWwuY29tPgpSZXZpZXdlZC1ieTogQXNodXRvc2ggQmFwYXQgPGFzaHV0b3NoLmJhcGF0Lm9zc0Bn bWFpbC5jb20+ClJldmlld2VkLWJ5OiBNaWNoYWVsIFBhcXVpZXIgPG1pY2hhZWxAcGFxdWllci54 eXo+CkRpc2N1c3Npb246IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvZmxh dC9DQSUyQlFlWSUyQkFBc1lLNld2Qlc0cVl6SHo0YmFoSHljREFZX3E1RUNtSGtFVl9lQjlja3pn JTQwbWFpbC5nbWFpbC5jb20KLS0tCiBkb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbCAg ICAgICAgICAgICAgfCAgMjcgKysrKysKIGRvYy9zcmMvc2dtbC9tYWludGVuYW5jZS5zZ21sICAg ICAgICAgICAgICAgICB8ICA1OCArKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9tdWx0 aXhhY3RmdW5jcy5jICAgICAgICB8ICAzOSArKysrKysKIHNyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0 aXhhY3RfaW50ZXJuYWwuaCAgICAgICB8ICAgOCArKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmRhdCAgICAgICAgICAgICAgIHwgIDEwICsrCiAuLi4vaXNvbGF0aW9uL2V4cGVjdGVkL211 bHRpeGFjdF9zdGF0cy5vdXQgICAgfCAgODkgKysrKysrKysrKysrKysKIHNyYy90ZXN0L2lzb2xh dGlvbi9pc29sYXRpb25fc2NoZWR1bGUgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9pc29sYXRp b24vc3BlY3MvbXVsdGl4YWN0X3N0YXRzLnNwZWMgfCAxMTMgKysrKysrKysrKysrKysrKysrCiA4 IGZpbGVzIGNoYW5nZWQsIDMzOSBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9tdWx0aXhhY3Rfc3RhdHMu b3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL211bHRpeGFj dF9zdGF0cy5zcGVjCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNn bWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbAppbmRleCBkNDUwODExNGE0OC4u MDUxYzNiMjg5ODUgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21s CisrKyBiL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sCkBAIC0yOTc1LDYgKzI5NzUs MzMgQEAgYWNsICAgICAgfCB7cG9zdGdyZXM9YXJ3ZER4dG0vcG9zdGdyZXMsZm9vPXIvcG9zdGdy ZXN9CiAgICAgICAgIG1vZGlmeSBrZXkgY29sdW1ucy4KICAgICAgICA8L3BhcmE+PC9lbnRyeT4K ICAgICAgIDwvcm93PgorCisgICAgICA8cm93PgorICAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3Rh YmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAgICAgIDxpbmRleHRl cm0+CisgICAgICAgICA8cHJpbWFyeT5wZ19nZXRfbXVsdGl4YWN0X3N0YXRzPC9wcmltYXJ5Pgor ICAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICAgPGZ1bmN0aW9uPnBnX2dldF9tdWx0aXhhY3Rf c3RhdHM8L2Z1bmN0aW9uPiAoKQorICAgICAgICA8cmV0dXJudmFsdWU+cmVjb3JkPC9yZXR1cm52 YWx1ZT4KKyAgICAgICAgKCA8cGFyYW1ldGVyPm51bV9teGlkczwvcGFyYW1ldGVyPiA8dHlwZT5p bnRlZ2VyPC90eXBlPiwKKyAgICAgICAgICA8cGFyYW1ldGVyPm51bV9tZW1iZXJzPC9wYXJhbWV0 ZXI+IDx0eXBlPmJpZ2ludDwvdHlwZT4sCisgICAgICAgICAgPHBhcmFtZXRlcj5tZW1iZXJzX3Np emU8L3BhcmFtZXRlcj4gPHR5cGU+YmlnaW50PC90eXBlPiwKKyAgICAgICAgICA8cGFyYW1ldGVy Pm9sZGVzdF9tdWx0aXhhY3Q8L3BhcmFtZXRlcj4gPHR5cGU+eGlkPC90eXBlPiApCisgICAgICAg PC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBSZXR1cm5zIHN0YXRpc3RpY3MgYWJvdXQg Y3VycmVudCBtdWx0aXhhY3QgdXNhZ2U6CisgICAgICAgIDxsaXRlcmFsPm51bV9teGlkczwvbGl0 ZXJhbD4gaXMgdGhlIHRvdGFsIG51bWJlciBvZiBtdWx0aXhhY3QgSURzIGN1cnJlbnRseSBwcmVz ZW50IGluIHRoZSBzeXN0ZW0sCisgICAgICAgIDxsaXRlcmFsPm51bV9tZW1iZXJzPC9saXRlcmFs PiBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIG11bHRpeGFjdCBtZW1iZXIgZW50cmllcyBjdXJyZW50 bHkKKyAgICAgICAgcHJlc2VudCBpbiB0aGUgc3lzdGVtLAorICAgICAgICA8bGl0ZXJhbD5tZW1i ZXJzX3NpemU8L2xpdGVyYWw+IGlzIHRoZSBzdG9yYWdlIG9jY3VwaWVkIGJ5IDxsaXRlcmFsPm51 bV9tZW1iZXJzPC9saXRlcmFsPgorICAgICAgICBpbiB0aGUgPGxpdGVyYWw+cGdfbXVsdGl4YWN0 L21lbWJlcnM8L2xpdGVyYWw+IGRpcmVjdG9yeSwKKyAgICAgICAgPGxpdGVyYWw+b2xkZXN0X211 bHRpeGFjdDwvbGl0ZXJhbD4gaXMgdGhlIG9sZGVzdCBtdWx0aXhhY3QgSUQgc3RpbGwgaW4gdXNl LgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZ1bmN0aW9uIHJl cG9ydHMgc3RhdGlzdGljcyBhdCB0aGUgdGltZSBpdCBpcyBpbnZva2VkLiBWYWx1ZXMgbWF5IHZh cnkgYmV0d2VlbiBjYWxscywKKyAgICAgICAgZXZlbiB3aXRoaW4gYSBzaW5nbGUgdHJhbnNhY3Rp b24uCisgICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgICA8L3Jvdz4KICAgICAgPC90Ym9keT4K ICAgICA8L3Rncm91cD4KICAgIDwvdGFibGU+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvbWFp bnRlbmFuY2Uuc2dtbCBiL2RvYy9zcmMvc2dtbC9tYWludGVuYW5jZS5zZ21sCmluZGV4IDA4ZTY0 ODlhZmI4Li44Njk1YjkyZTkzZSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL21haW50ZW5hbmNl LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL21haW50ZW5hbmNlLnNnbWwKQEAgLTgxMywxNCArODEz LDYwIEBAIEhJTlQ6ICBFeGVjdXRlIGEgZGF0YWJhc2Utd2lkZSBWQUNVVU0gaW4gdGhhdCBkYXRh YmFzZS4KICAgICA8cGFyYT4KICAgICAgQXMgYSBzYWZldHkgZGV2aWNlLCBhbiBhZ2dyZXNzaXZl IHZhY3V1bSBzY2FuIHdpbGwKICAgICAgb2NjdXIgZm9yIGFueSB0YWJsZSB3aG9zZSBtdWx0aXhh Y3QtYWdlIGlzIGdyZWF0ZXIgdGhhbiA8eHJlZgotICAgICBsaW5rZW5kPSJndWMtYXV0b3ZhY3V1 bS1tdWx0aXhhY3QtZnJlZXplLW1heC1hZ2UiLz4uICBBbHNvLCBpZiB0aGUKLSAgICAgc3RvcmFn ZSBvY2N1cGllZCBieSBtdWx0aXhhY3RzIG1lbWJlcnMgZXhjZWVkcyBhYm91dCAxMEdCLCBhZ2dy ZXNzaXZlIHZhY3V1bQotICAgICBzY2FucyB3aWxsIG9jY3VyIG1vcmUgb2Z0ZW4gZm9yIGFsbCB0 YWJsZXMsIHN0YXJ0aW5nIHdpdGggdGhvc2UgdGhhdAotICAgICBoYXZlIHRoZSBvbGRlc3QgbXVs dGl4YWN0LWFnZS4gIEJvdGggb2YgdGhlc2Uga2luZHMgb2YgYWdncmVzc2l2ZQotICAgICBzY2Fu cyB3aWxsIG9jY3VyIGV2ZW4gaWYgYXV0b3ZhY3V1bSBpcyBub21pbmFsbHkgZGlzYWJsZWQuIFRo ZSBtZW1iZXJzIHN0b3JhZ2UKLSAgICAgYXJlYSBjYW4gZ3JvdyB1cCB0byBhYm91dCAyMEdCIGJl Zm9yZSByZWFjaGluZyB3cmFwYXJvdW5kLgorICAgICBsaW5rZW5kPSJndWMtYXV0b3ZhY3V1bS1t dWx0aXhhY3QtZnJlZXplLW1heC1hZ2UiLz4uIEFsc28sIGlmIHRoZSBudW1iZXIKKyAgICAgb2Yg bXVsdGl4YWN0IG1lbWJlciBlbnRyaWVzIGNyZWF0ZWQgZXhjZWVkcyBhcHByb3hpbWF0ZWx5IDJe MzEgZW50cmllcworICAgICAob2NjdXB5aW5nIHJvdWdobHkgMTBHQiBpbiB0aGUgPGxpdGVyYWw+ cGdfbXVsdGl4YWN0L21lbWJlcnM8L2xpdGVyYWw+IGRpcmVjdG9yeSksCisgICAgIGFnZ3Jlc3Np dmUgdmFjdXVtIHNjYW5zIHdpbGwgb2NjdXIgbW9yZSBvZnRlbiBmb3IgYWxsIHRhYmxlcywgc3Rh cnRpbmcgd2l0aCB0aG9zZSB0aGF0CisgICAgIGhhdmUgdGhlIG9sZGVzdCBtdWx0aXhhY3QtYWdl LiBCb3RoIG9mIHRoZXNlIGtpbmRzIG9mIGFnZ3Jlc3NpdmUKKyAgICAgc2NhbnMgd2lsbCBvY2N1 ciBldmVuIGlmIGF1dG92YWN1dW0gaXMgbm9taW5hbGx5IGRpc2FibGVkLiBBdCBhcHByb3hpbWF0 ZWx5IDJeMzIgZW50cmllcworICAgICAob2NjdXB5aW5nIHJvdWdobHkgMjBHQiBpbiB0aGUgPGxp dGVyYWw+cGdfbXVsdGl4YWN0L21lbWJlcnM8L2xpdGVyYWw+IGRpcmVjdG9yeSksIGV2ZW4KKyAg ICAgbW9yZSBhZ2dyZXNzaXZlIHZhY3V1bSBzY2FucyBhcmUgdHJpZ2dlcmVkIHRvIHJlY2xhaW0g bWVtYmVyIHN0b3JhZ2Ugc3BhY2UuCiAgICAgPC9wYXJhPgogCisgICAgPHBhcmE+CisgICAgIFRo ZSA8ZnVuY3Rpb24+cGdfZ2V0X211bHRpeGFjdF9zdGF0cygpPC9mdW5jdGlvbj4gZnVuY3Rpb24g ZGVzY3JpYmVkIGluCisgICAgIDx4cmVmIGxpbmtlbmQ9ImZ1bmN0aW9ucy1wZy1zbmFwc2hvdCIv PiBwcm92aWRlcyBhIHdheSB0byBtb25pdG9yCisgICAgIG11bHRpeGFjdCBhbGxvY2F0aW9uIGFu ZCB1c2FnZSBwYXR0ZXJucyBpbiByZWFsIHRpbWUsIGZvciBleGFtcGxlOgorICAgICA8cHJvZ3Jh bWxpc3Rpbmc+Citwb3N0Z3Jlcz0jIFNFTEVDVCAqLHBnX3NpemVfcHJldHR5KG1lbWJlcnNfc2l6 ZSkgbWVtYmVyc19zaXplX3ByZXR0eSBGUk9NIHBnX2NhdGFsb2cucGdfZ2V0X211bHRpeGFjdF9z dGF0cygpOworIG51bV9teGlkcyB8IG51bV9tZW1iZXJzIHwgbWVtYmVyc19zaXplIHwgb2xkZXN0 X211bHRpeGFjdCB8IG1lbWJlcnNfc2l6ZV9wcmV0dHkKKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIDMxMTc0MDI5OSB8ICAyNzg1MjQxMTc2IHwgIDEzOTI2MjA1ODgwIHwgICAgICAgICAgICAg ICAgMiB8IDEzIEdCCisoMSByb3cpCisgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgIFRoaXMg b3V0cHV0IHNob3dzIGEgc3lzdGVtIHdpdGggc2lnbmlmaWNhbnQgbXVsdGl4YWN0IGFjdGl2aXR5 OiBhYm91dCB+MzEyIG1pbGxpb24KKyAgICAgbXVsdGl4YWN0IElEcyBhbmQgfjIuOCBiaWxsaW9u IG1lbWJlciBlbnRyaWVzIGNvbnN1bWluZyAxMyBHQiBvZiBzdG9yYWdlIHNwYWNlLgorICAgICBC eSBsZXZlcmFnaW5nIHRoaXMgaW5mb3JtYXRpb24sIHRoZSBmdW5jdGlvbiBoZWxwczoKKyAgICAg PG9yZGVyZWRsaXN0PgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxzaW1wYXJhPgorICAgICAg ICBJZGVudGlmeSB1bnVzdWFsIG11bHRpeGFjdCBhY3Rpdml0eSBmcm9tIGNvbmN1cnJlbnQgcm93 LWxldmVsIGxvY2tzCisgICAgICAgIG9yIGZvcmVpZ24ga2V5IG9wZXJhdGlvbnMuIEZvciBleGFt cGxlLCBhIHNwaWtlIGluIDxsaXRlcmFsPm51bV9teGlkczwvbGl0ZXJhbD4gbWlnaHQgaW5kaWNh dGUKKyAgICAgICAgbXVsdGlwbGUgc2Vzc2lvbnMgcnVubmluZyA8bGl0ZXJhbD5VUERBVEU8L2xp dGVyYWw+IHN0YXRlbWVudHMgd2l0aCBmb3JlaWduIGtleSBjaGVja3MsCisgICAgICAgIGNvbmN1 cnJlbnQgPGxpdGVyYWw+U0VMRUNUIEZPUiBTSEFSRTwvbGl0ZXJhbD4gb3BlcmF0aW9ucywgb3Ig ZnJlcXVlbnQgdXNlIG9mIHNhdmVwb2ludHMKKyAgICAgICAgY2F1c2luZyBsb2NrIGNvbnRlbnRp b24uCisgICAgICAgPC9zaW1wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRl bT4KKyAgICAgICA8c2ltcGFyYT4KKyAgICAgICAgVHJhY2sgbXVsdGl4YWN0IGNsZWFudXAgZWZm aWNpZW5jeSBieSBtb25pdG9yaW5nIG9sZGVzdF9tdWx0aXhhY3QuCisgICAgICAgIElmIHRoaXMg dmFsdWUgcmVtYWlucyB1bmNoYW5nZWQgd2hpbGUgPGxpdGVyYWw+bnVtX21lbWJlcnM8L2xpdGVy YWw+IGdyb3dzLCBpdCBjb3VsZCBpbmRpY2F0ZQorICAgICAgICB0aGF0IGxvbmctcnVubmluZyB0 cmFuc2FjdGlvbnMgYXJlIHByZXZlbnRpbmcgY2xlYW51cCwgb3IgYXV0b3ZhY3V1bSBpcworICAg ICAgICBub3Qga2VlcGluZyB1cCB3aXRoIHRoZSB3b3JrbG9hZC4KKyAgICAgICA8L3NpbXBhcmE+ CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxzaW1wYXJhPgor ICAgICAgICBEZXRlY3QgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGFjdHMgYmVmb3JlIHRoZXkg YmVjb21lIGNyaXRpY2FsLgorICAgICAgICBGb3IgaW5zdGFuY2UsIGhpZ2ggbXVsdGl4YWN0IHVz YWdlIGZyb20gZnJlcXVlbnQgcm93LWxldmVsIGxvY2tpbmcgb3IKKyAgICAgICAgZm9yZWlnbiBr ZXkgb3BlcmF0aW9ucyBjYW4gbGVhZCB0byBpbmNyZWFzZWQgSS9PIGFuZCBDUFUgb3ZlcmhlYWQg ZHVyaW5nCisgICAgICAgIHZhY3V1bSBvcGVyYXRpb25zLiBNb25pdG9yaW5nIHRoZXNlIHN0YXRz IGhlbHBzIHR1bmUgYXV0b3ZhY3V1bSBmcmVxdWVuY3kKKyAgICAgICAgYW5kIHRyYW5zYWN0aW9u IHBhdHRlcm5zLgorICAgICAgIDwvc2ltcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwv b3JkZXJlZGxpc3Q+CisgICAgIDwvcGFyYT4KKwogICAgIDxwYXJhPgogICAgICBTaW1pbGFyIHRv IHRoZSBYSUQgY2FzZSwgaWYgYXV0b3ZhY3V1bSBmYWlscyB0byBjbGVhciBvbGQgTVhJRHMgZnJv bSBhIHRhYmxlLCB0aGUKICAgICAgc3lzdGVtIHdpbGwgYmVnaW4gdG8gZW1pdCB3YXJuaW5nIG1l c3NhZ2VzIHdoZW4gdGhlIGRhdGFiYXNlJ3Mgb2xkZXN0IE1YSURzIHJlYWNoIGZvcnR5CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbXVsdGl4YWN0ZnVuY3MuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9tdWx0aXhhY3RmdW5jcy5jCmluZGV4IGE0MjhlMTQwYmM0Li5lODkyOWY0 ZDgzZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L211bHRpeGFjdGZ1bmNzLmMK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L211bHRpeGFjdGZ1bmNzLmMKQEAgLTE1LDYgKzE1 LDggQEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAiYWNjZXNzL211bHRpeGFj dC5oIgorI2luY2x1ZGUgImFjY2Vzcy9tdWx0aXhhY3RfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJh Y2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgogI2luY2x1ZGUgInV0 aWxzL2J1aWx0aW5zLmgiCiAKQEAgLTg1LDMgKzg3LDQwIEBAIHBnX2dldF9tdWx0aXhhY3RfbWVt YmVycyhQR19GVU5DVElPTl9BUkdTKQogCiAJU1JGX1JFVFVSTl9ET05FKGZ1bmNjeHQpOwogfQor CisvKgorICogcGdfZ2V0X211bHRpeGFjdF9zdGF0cworICoKKyAqIFJldHVybnMgc3RhdGlzdGlj cyBhYm91dCBjdXJyZW50IG11bHRpeGFjdCB1c2FnZS4KKyAqCisgKiBSZXR1cm5zIE5VTEwgaWYg dGhlIG9sZGVzdCByZWZlcmVuY2VkIG9mZnNldCBpcyB1bmtub3duLgorICovCitEYXR1bQorcGdf Z2V0X211bHRpeGFjdF9zdGF0cyhQR19GVU5DVElPTl9BUkdTKQoreworCVR1cGxlRGVzYwl0dXBk ZXNjOworCURhdHVtCQl2YWx1ZXNbNF07CisJYm9vbAkJbnVsbHNbNF07CisJTXVsdGlYYWN0T2Zm c2V0CW1lbWJlcnM7CisJTXVsdGlYYWN0SWQJb2xkZXN0TXVsdGlYYWN0SWQ7CisJdWludDMyCQlt dWx0aXhhY3RzOworCU11bHRpWGFjdE9mZnNldAlvbGRlc3RPZmZzZXQ7CisJaW50NjQJCW1lbWJl cnNCeXRlczsKKworCWlmIChnZXRfY2FsbF9yZXN1bHRfdHlwZShmY2luZm8sIE5VTEwsICZ0dXBk ZXNjKSAhPSBUWVBFRlVOQ19DT01QT1NJVEUpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNv ZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCSBlcnJtc2coInJldHVybiB0 eXBlIG11c3QgYmUgYSByb3cgdHlwZSIpKSk7CisKKwlHZXRNdWx0aVhhY3RJbmZvKCZtdWx0aXhh Y3RzLCAmbWVtYmVycywgJm9sZGVzdE11bHRpWGFjdElkLCAmb2xkZXN0T2Zmc2V0KTsKKworCW1l bWJlcnNCeXRlcyA9IE11bHRpWGFjdE1lbWJlclN0b3JhZ2VTaXplKG1lbWJlcnMpOworCisJdmFs dWVzWzBdID0gVUludDMyR2V0RGF0dW0obXVsdGl4YWN0cyk7CisJdmFsdWVzWzFdID0gSW50NjRH ZXREYXR1bShtZW1iZXJzKTsKKwl2YWx1ZXNbMl0gPSBJbnQ2NEdldERhdHVtKG1lbWJlcnNCeXRl cyk7CisJdmFsdWVzWzNdID0gVUludDMyR2V0RGF0dW0ob2xkZXN0TXVsdGlYYWN0SWQpOworCW1l bXNldChudWxscywgZmFsc2UsIHNpemVvZihudWxscykpOworCisJcmV0dXJuIEhlYXBUdXBsZUdl dERhdHVtKGhlYXBfZm9ybV90dXBsZSh0dXBkZXNjLCB2YWx1ZXMsIG51bGxzKSk7Cit9CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0X2ludGVybmFsLmggYi9zcmMvaW5j bHVkZS9hY2Nlc3MvbXVsdGl4YWN0X2ludGVybmFsLmgKaW5kZXggZjJkNjUzOWU4YTYuLjAzYmNm MzVlZjc5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0X2ludGVybmFs LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdF9pbnRlcm5hbC5oCkBAIC0xMjEs NCArMTIxLDEyIEBAIE1YT2Zmc2V0VG9NZW1iZXJPZmZzZXQoTXVsdGlYYWN0T2Zmc2V0IG9mZnNl dCkKIAkJbWVtYmVyX2luX2dyb3VwICogc2l6ZW9mKFRyYW5zYWN0aW9uSWQpOwogfQogCisvKiBD YWxjdWxhdGUgc3RvcmFnZSBzcGFjZSBpbiBieXRlcyBmb3IgYSBnaXZlbiBudW1iZXIgb2YgbWVt YmVycyAqLworc3RhdGljIGlubGluZSBpbnQ2NAorTXVsdGlYYWN0TWVtYmVyU3RvcmFnZVNpemUo TXVsdGlYYWN0T2Zmc2V0IG1lbWJlcnMpCit7CisJcmV0dXJuIChpbnQ2NCkgKG1lbWJlcnMgLyBN VUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVApICoKKwkJICAgTVVMVElYQUNUX01FTUJF UkdST1VQX1NJWkU7Cit9CisKICNlbmRpZgkJCQkJCQkvKiBNVUxUSVhBQ1RfSU5URVJOQUxfSCAq LwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggZmQ5NDQ4ZWM3YjkuLjZjYWVhNmM4MjgxIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTEyNjEyLDQgKzEyNjEyLDE0IEBACiAgIHByb2Fy Z25hbWVzID0+ICd7cGlkLGlvX2lkLGlvX2dlbmVyYXRpb24sc3RhdGUsb3BlcmF0aW9uLG9mZixs ZW5ndGgsdGFyZ2V0LGhhbmRsZV9kYXRhX2xlbixyYXdfcmVzdWx0LHJlc3VsdCx0YXJnZXRfZGVz YyxmX3N5bmMsZl9sb2NhbG1lbSxmX2J1ZmZlcmVkfScsCiAgIHByb3NyYyA9PiAncGdfZ2V0X2Fp b3MnIH0sCiAKKyMgR2V0IG11bHRpeGFjdCB1c2FnZQoreyBvaWQgPT4gJzkwMDEnLCBkZXNjciA9 PiAnZ2V0IGN1cnJlbnQgbXVsdGl4YWN0IHVzYWdlIHN0YXRpc3RpY3MnLAorICBwcm9uYW1lID0+ ICdwZ19nZXRfbXVsdGl4YWN0X3N0YXRzJywKKyAgcHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9wYXJh bGxlbCA9PiAncycsIHByb3JldHR5cGUgPT4gJ3JlY29yZCcsCisgIHByb2FyZ3R5cGVzID0+ICcn LAorICBwcm9hbGxhcmd0eXBlcyA9PiAne2ludDgsaW50OCxpbnQ4LHhpZH0nLAorICBwcm9hcmdt b2RlcyA9PiAne28sbyxvLG99JywKKyAgcHJvYXJnbmFtZXMgPT4gJ3tudW1fbXhpZHMsbnVtX21l bWJlcnMsbWVtYmVyc19zaXplLG9sZGVzdF9tdWx0aXhhY3R9JywKKyAgcHJvc3JjID0+ICdwZ19n ZXRfbXVsdGl4YWN0X3N0YXRzJ30sCisKIF0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2lzb2xhdGlv bi9leHBlY3RlZC9tdWx0aXhhY3Rfc3RhdHMub3V0IGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVj dGVkL211bHRpeGFjdF9zdGF0cy5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjI3YTY1MTBjNGFkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvaXNvbGF0aW9u L2V4cGVjdGVkL211bHRpeGFjdF9zdGF0cy5vdXQKQEAgLTAsMCArMSw4OSBAQAorUGFyc2VkIHRl c3Qgc3BlYyB3aXRoIDIgc2Vzc2lvbnMKKworc3RhcnRpbmcgcGVybXV0YXRpb246IHNuYXAwIHMx X2JlZ2luIHMxX2xvY2sgc25hcDEgczJfYmVnaW4gczJfbG9jayBzbmFwMiBjaGVja193aGlsZV9w aW5uZWQgczFfY29tbWl0IHMyX2NvbW1pdAorc3RlcCBzbmFwMDogCisgIENSRUFURSBURU1QIFRB QkxFIHNuYXAwIEFTCisgIFNFTEVDVCBudW1fbXhpZHMsIG51bV9tZW1iZXJzLCBvbGRlc3RfbXVs dGl4YWN0CisgIEZST00gcGdfZ2V0X211bHRpeGFjdF9zdGF0cygpOworCitzdGVwIHMxX2JlZ2lu OiBCRUdJTjsKK3N0ZXAgczFfbG9jazogU0VMRUNUIDEgRlJPTSBteHEgV0hFUkUgaWQ9MSBGT1Ig S0VZIFNIQVJFOworP2NvbHVtbj8KKy0tLS0tLS0tCisgICAgICAgMQorKDEgcm93KQorCitzdGVw IHNuYXAxOiAKKyAgQ1JFQVRFIFRFTVAgVEFCTEUgc25hcDEgQVMKKyAgU0VMRUNUIG51bV9teGlk cywgbnVtX21lbWJlcnMsIG9sZGVzdF9tdWx0aXhhY3QKKyAgRlJPTSBwZ19nZXRfbXVsdGl4YWN0 X3N0YXRzKCk7CisKK3N0ZXAgczJfYmVnaW46IEJFR0lOOworc3RlcCBzMl9sb2NrOiBTRUxFQ1Qg MSBGUk9NIG14cSBXSEVSRSBpZD0xIEZPUiBLRVkgU0hBUkU7Cis/Y29sdW1uPworLS0tLS0tLS0K KyAgICAgICAxCisoMSByb3cpCisKK3N0ZXAgc25hcDI6IAorICBDUkVBVEUgVEVNUCBUQUJMRSBz bmFwMiBBUworICBTRUxFQ1QgbnVtX214aWRzLCBudW1fbWVtYmVycywgb2xkZXN0X211bHRpeGFj dAorICBGUk9NIHBnX2dldF9tdWx0aXhhY3Rfc3RhdHMoKTsKKworc3RlcCBjaGVja193aGlsZV9w aW5uZWQ6IAorICBTRUxFQ1Qgci5hc3NlcnRpb24sIHIub2sKKyAgRlJPTSBzbmFwMCBzMAorICBK T0lOIHNuYXAxIHMxIE9OIFRSVUUKKyAgSk9JTiBzbmFwMiBzMiBPTiBUUlVFLAorICBMQVRFUkFM IHVubmVzdCgKKyAgICBBUlJBWVsKKyAgICAgICdpc19pbml0X214aWRzJywKKyAgICAgICdpc19p bml0X21lbWJlcnMnLAorICAgICAgJ2lzX2luaXRfb2xkZXN0X214aWQnLAorICAgICAgJ2lzX2lu aXRfb2xkZXN0X29mZicsCisgICAgICAnaXNfb2xkZXN0X214aWRfbm9uZGVjXzAxJywKKyAgICAg ICdpc19vbGRlc3RfbXhpZF9ub25kZWNfMTInLAorICAgICAgJ2lzX29sZGVzdF9vZmZfbm9uZGVj XzAxJywKKyAgICAgICdpc19vbGRlc3Rfb2ZmX25vbmRlY18xMicsCisgICAgICAnaXNfbWVtYmVy c19pbmNyZWFzZWRfZ2UxJywKKyAgICAgICdpc19teGlkc19ub25kZWNfMDEnLAorICAgICAgJ2lz X214aWRzX25vbmRlY18xMicsCisgICAgICAnaXNfbWVtYmVyc19ub25kZWNfMDEnLAorICAgICAg J2lzX21lbWJlcnNfbm9uZGVjXzEyJworICAgIF0sCisgICAgQVJSQVlbCisgICAgICAoczIubnVt X214aWRzICAgICAgICBJUyBOT1QgTlVMTCksCisgICAgICAoczIubnVtX21lbWJlcnMgICAgICBJ UyBOT1QgTlVMTCksCisgICAgICAoczIub2xkZXN0X211bHRpeGFjdCBJUyBOT1QgTlVMTCksCisK KyAgICAgIChzMS5vbGRlc3RfbXVsdGl4YWN0Ojp0ZXh0OjpiaWdpbnQgPj0gQ09BTEVTQ0UoczAu b2xkZXN0X211bHRpeGFjdDo6dGV4dDo6YmlnaW50LCAwKSksCisgICAgICAoczIub2xkZXN0X211 bHRpeGFjdDo6dGV4dDo6YmlnaW50ID49IENPQUxFU0NFKHMxLm9sZGVzdF9tdWx0aXhhY3Q6OnRl eHQ6OmJpZ2ludCwgMCkpLAorCisgICAgICAoczIubnVtX21lbWJlcnMgPj0gQ09BTEVTQ0UoczEu bnVtX21lbWJlcnMsIDApICsgMSksCisKKyAgICAgIChzMS5udW1fbXhpZHMgICA+PSBDT0FMRVND RShzMC5udW1fbXhpZHMsICAgMCkpLAorICAgICAgKHMyLm51bV9teGlkcyAgID49IENPQUxFU0NF KHMxLm51bV9teGlkcywgICAwKSksCisgICAgICAoczEubnVtX21lbWJlcnMgPj0gQ09BTEVTQ0Uo czAubnVtX21lbWJlcnMsIDApKSwKKyAgICAgIChzMi5udW1fbWVtYmVycyA+PSBDT0FMRVNDRShz MS5udW1fbWVtYmVycywgMCkpCisgICAgXQorICApIEFTIHIoYXNzZXJ0aW9uLCBvayk7CisKK2Fz c2VydGlvbiAgICAgICAgICAgICAgIHxvaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tCitp c19pbml0X214aWRzICAgICAgICAgICB8dCAKK2lzX2luaXRfbWVtYmVycyAgICAgICAgIHx0IAor aXNfaW5pdF9vbGRlc3RfbXhpZCAgICAgfHQgCitpc19pbml0X29sZGVzdF9vZmYgICAgICB8dCAK K2lzX29sZGVzdF9teGlkX25vbmRlY18wMXx0IAoraXNfb2xkZXN0X214aWRfbm9uZGVjXzEyfHQg Citpc19vbGRlc3Rfb2ZmX25vbmRlY18wMSB8dCAKK2lzX29sZGVzdF9vZmZfbm9uZGVjXzEyIHx0 IAoraXNfbWVtYmVyc19pbmNyZWFzZWRfZ2UxfHQgCitpc19teGlkc19ub25kZWNfMDEgICAgICB8 dCAKK2lzX214aWRzX25vbmRlY18xMiAgICAgIHwgIAoraXNfbWVtYmVyc19ub25kZWNfMDEgICAg fCAgCitpc19tZW1iZXJzX25vbmRlY18xMiAgICB8ICAKKygxMyByb3dzKQorCitzdGVwIHMxX2Nv bW1pdDogQ09NTUlUOworc3RlcCBzMl9jb21taXQ6IENPTU1JVDsKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L2lzb2xhdGlvbi9pc29sYXRpb25fc2NoZWR1bGUgYi9zcmMvdGVzdC9pc29sYXRpb24vaXNv bGF0aW9uX3NjaGVkdWxlCmluZGV4IGYyZTA2N2IxZmJjLi41YmE0NGQ2N2ExMCAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xhdGlvbl9zY2hlZHVsZQorKysgYi9zcmMvdGVzdC9p c29sYXRpb24vaXNvbGF0aW9uX3NjaGVkdWxlCkBAIC0xMjEsMyArMTIxLDQgQEAgdGVzdDogc2Vy aWFsaXphYmxlLXBhcmFsbGVsLTIKIHRlc3Q6IHNlcmlhbGl6YWJsZS1wYXJhbGxlbC0zCiB0ZXN0 OiBtYXR2aWV3LXdyaXRlLXNrZXcKIHRlc3Q6IGxvY2stbm93YWl0Cit0ZXN0OiBtdWx0aXhhY3Rf c3RhdHMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2lzb2xhdGlvbi9zcGVjcy9tdWx0aXhhY3Rfc3Rh dHMuc3BlYyBiL3NyYy90ZXN0L2lzb2xhdGlvbi9zcGVjcy9tdWx0aXhhY3Rfc3RhdHMuc3BlYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uN2IwMzQ2NTQ1MDQKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvdGVzdC9pc29sYXRpb24vc3BlY3MvbXVsdGl4YWN0X3N0YXRzLnNw ZWMKQEAgLTAsMCArMSwxMTMgQEAKKyMgVGVzdCBpbnZhcmlhbnRzIGZvciBwZ19nZXRfbXVsdGl4 YWN0X3N0YXRzKCkKKyMgV2UgY3JlYXRlIGV4YWN0bHkgb25lIGZyZXNoIE11bHRpWGFjdCBvbiBh IGJyYW5kLW5ldyB0YWJsZS4gV2hpbGUgaXQgaXMgcGlubmVkCisjIGJ5IHR3byBvcGVuIHRyYW5z YWN0aW9ucywgd2UgYXNzZXJ0IG9ubHkgaW52YXJpYW50cyB0aGF0IGJhY2tncm91bmQgVkFDVVVN L0ZSRUVaRQorIyBjYW5ub3QgdmlvbGF0ZToKKyMgICDigKIgbWVtYmVycyBpbmNyZWFzZWQgYnkg 4omlIDEgd2hlbiB0aGUgc2Vjb25kIHNlc3Npb24gbG9ja2VkIHRoZSByb3csCisjICAg4oCiIG51 bV9teGlkcyAvIG51bV9tZW1iZXJzIGRpZCBub3QgZGVjcmVhc2UgdnMgZWFybGllciBzbmFwc2hv dHMsCisjICAg4oCiIG9sZGVzdF8qIG5ldmVyIGRlY3JlYXNlcy4KKyMgV2UgbWFrZSBOTyBhc3Nl cnRpb25zIGFmdGVyIHJlbGVhc2luZyBsb2NrcyAoZnJlZXppbmcvdHJ1bmNhdGlvbiBtYXkgc2hy aW5rIGRlbHRhcykuCisjCisjIFRlcm1pbm9sb2d5IChnbG9iYWwgY291bnRlcnMpOgorIyAgIG51 bV9teGlkcywgbnVtX21lbWJlcnMgICAgOiAiaW4tdXNlIiBkZWx0YXMgZGVyaXZlZCBmcm9tIGds b2JhbCBob3Jpem9ucworIyAgIG9sZGVzdF9tdWx0aXhhY3QsIG9mZnNldCAgOiBvbGRlc3QgaG9y aXpvbnM7IHRoZXkgbW92ZSBmb3J3YXJkLCBuZXZlciBiYWNrd2FyZAorIworIyBBbGwgYXNzZXJ0 aW9ucyBleGVjdXRlIHdoaWxlIG91ciBtdWx0aXhhY3QgaXMgcGlubmVkIGJ5IG9wZW4gdHhucywg d2hpY2ggcHJvdGVjdHMKKyMgdGhlIHRydW5jYXRpb24gaG9yaXpvbiAoVkFDVVVNIGNhbid0IGFk dmFuY2UgcGFzdCBvdXIgcGlubmVkIG11bHRpKS4KKworc2V0dXAKK3sKKyAgICBDUkVBVEUgVEFC TEUgbXhxKGlkIGludCBQUklNQVJZIEtFWSwgdiBpbnQpOworICAgIElOU0VSVCBJTlRPIG14cSBW QUxVRVMgKDEsIDQyKTsKK30KKwordGVhcmRvd24KK3sKKyAgICBEUk9QIFRBQkxFIG14cTsKK30K KworIyBUd28gc2Vzc2lvbnMgdGhhdCBsb2NrIG9uIHRoZSBzYW1lIHR1cGxlIC0+IG9uZSBNdWx0 aVhhY3Qgd2l0aCA+PSAyIG1lbWJlcnMuCitzZXNzaW9uICJzMSIKK3NldHVwIHsgU0VUIGNsaWVu dF9taW5fbWVzc2FnZXMgPSB3YXJuaW5nOyBTRVQgbG9ja190aW1lb3V0ID0gJzVzJzsgfQorc3Rl cCBzMV9iZWdpbiAgeyBCRUdJTjsgfQorc3RlcCBzMV9sb2NrICAgeyBTRUxFQ1QgMSBGUk9NIG14 cSBXSEVSRSBpZD0xIEZPUiBLRVkgU0hBUkU7IH0KK3N0ZXAgczFfY29tbWl0IHsgQ09NTUlUOyB9 CisKK3Nlc3Npb24gInMyIgorc2V0dXAgeyBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9IHdhcm5p bmc7IFNFVCBsb2NrX3RpbWVvdXQgPSAnNXMnOyB9CitzdGVwIHMyX2JlZ2luICB7IEJFR0lOOyB9 CitzdGVwIHMyX2xvY2sgICB7IFNFTEVDVCAxIEZST00gbXhxIFdIRVJFIGlkPTEgRk9SIEtFWSBT SEFSRTsgfQorc3RlcCBzMl9jb21taXQgeyBDT01NSVQ7IH0KKworIyBCYXNlbGluZSBCRUZPUkUg YW55IGxvY2tpbmc7IG1heSBiZSBOVUxMcyBpZiBtdWx0aXhhY3QgaXNuJ3QgaW5pdGlhbGl6ZWQg eWV0Lgorc3RlcCBzbmFwMCB7CisgIENSRUFURSBURU1QIFRBQkxFIHNuYXAwIEFTCisgIFNFTEVD VCBudW1fbXhpZHMsIG51bV9tZW1iZXJzLCBvbGRlc3RfbXVsdGl4YWN0CisgIEZST00gcGdfZ2V0 X211bHRpeGFjdF9zdGF0cygpOworfQorCisjIEFmdGVyIHMxIGhhcyBsb2NrZWQgdGhlIHJvdy4K K3N0ZXAgc25hcDEgeworICBDUkVBVEUgVEVNUCBUQUJMRSBzbmFwMSBBUworICBTRUxFQ1QgbnVt X214aWRzLCBudW1fbWVtYmVycywgb2xkZXN0X211bHRpeGFjdAorICBGUk9NIHBnX2dldF9tdWx0 aXhhY3Rfc3RhdHMoKTsKK30KKworIyBBZnRlciBzMiBqb2lucyBvbiB0aGUgU0FNRSB0dXBsZSAt PiBtdWx0aXhhY3Qgd2l0aCA+PSAyIG1lbWJlcnMuCitzdGVwIHNuYXAyIHsKKyAgQ1JFQVRFIFRF TVAgVEFCTEUgc25hcDIgQVMKKyAgU0VMRUNUIG51bV9teGlkcywgbnVtX21lbWJlcnMsIG9sZGVz dF9tdWx0aXhhY3QKKyAgRlJPTSBwZ19nZXRfbXVsdGl4YWN0X3N0YXRzKCk7Cit9CisKKyMgUHJl dHR5LCBkZXRlcm1pbmlzdGljIGtleS92YWx1ZSBvdXRwdXQgb2YgYm9vbGVhbiBjaGVja3MuCisj IEtleXM6CisjICAgaXNfaW5pdF9teGlkcyAgICAgICAgICAgIDogbnVtX214aWRzIGlzIG5vbi1O VUxMCisjICAgaXNfaW5pdF9tZW1iZXJzICAgICAgICAgIDogbnVtX21lbWJlcnMgaXMgbm9uLU5V TEwKKyMgICBpc19pbml0X29sZGVzdF9teGlkICAgICAgOiBvbGRlc3RfbXVsdGl4YWN0IGlzIG5v bi1OVUxMCisjICAgaXNfb2xkZXN0X214aWRfbm9uZGVjXzAxIDogb2xkZXN0X211bHRpeGFjdCBk aWQgbm90IGRlY3JlYXNlIChzbmFwMOKGknNuYXAxKQorIyAgIGlzX29sZGVzdF9teGlkX25vbmRl Y18xMiA6IG9sZGVzdF9tdWx0aXhhY3QgZGlkIG5vdCBkZWNyZWFzZSAoc25hcDHihpJzbmFwMikK KyMgICBpc19tZW1iZXJzX2luY3JlYXNlZF9nZTEgOiBtZW1iZXJzIGluY3JlYXNlZCBieSBhdCBs ZWFzdCAxIHdoZW4gczIgam9pbmVkCisjICAgaXNfbXhpZHNfbm9uZGVjXzAxICAgICAgIDogbnVt X214aWRzIGRpZCBub3QgZGVjcmVhc2UgKHNuYXAw4oaSc25hcDEpCisjICAgaXNfbXhpZHNfbm9u ZGVjXzEyICAgICAgIDogbnVtX214aWRzIGRpZCBub3QgZGVjcmVhc2UgKHNuYXAx4oaSc25hcDIp CisjICAgaXNfbWVtYmVyc19ub25kZWNfMDEgICAgIDogbnVtX21lbWJlcnMgZGlkIG5vdCBkZWNy ZWFzZSAoc25hcDDihpJzbmFwMSkKKyMgICBpc19tZW1iZXJzX25vbmRlY18xMiAgICAgOiBudW1f bWVtYmVycyBkaWQgbm90IGRlY3JlYXNlIChzbmFwMeKGknNuYXAyKQorc3RlcCBjaGVja193aGls ZV9waW5uZWQgeworICBTRUxFQ1Qgci5hc3NlcnRpb24sIHIub2sKKyAgRlJPTSBzbmFwMCBzMAor ICBKT0lOIHNuYXAxIHMxIE9OIFRSVUUKKyAgSk9JTiBzbmFwMiBzMiBPTiBUUlVFLAorICBMQVRF UkFMIHVubmVzdCgKKyAgICBBUlJBWVsKKyAgICAgICdpc19pbml0X214aWRzJywKKyAgICAgICdp c19pbml0X21lbWJlcnMnLAorICAgICAgJ2lzX2luaXRfb2xkZXN0X214aWQnLAorICAgICAgJ2lz X2luaXRfb2xkZXN0X29mZicsCisgICAgICAnaXNfb2xkZXN0X214aWRfbm9uZGVjXzAxJywKKyAg ICAgICdpc19vbGRlc3RfbXhpZF9ub25kZWNfMTInLAorICAgICAgJ2lzX29sZGVzdF9vZmZfbm9u ZGVjXzAxJywKKyAgICAgICdpc19vbGRlc3Rfb2ZmX25vbmRlY18xMicsCisgICAgICAnaXNfbWVt YmVyc19pbmNyZWFzZWRfZ2UxJywKKyAgICAgICdpc19teGlkc19ub25kZWNfMDEnLAorICAgICAg J2lzX214aWRzX25vbmRlY18xMicsCisgICAgICAnaXNfbWVtYmVyc19ub25kZWNfMDEnLAorICAg ICAgJ2lzX21lbWJlcnNfbm9uZGVjXzEyJworICAgIF0sCisgICAgQVJSQVlbCisgICAgICAoczIu bnVtX214aWRzICAgICAgICBJUyBOT1QgTlVMTCksCisgICAgICAoczIubnVtX21lbWJlcnMgICAg ICBJUyBOT1QgTlVMTCksCisgICAgICAoczIub2xkZXN0X211bHRpeGFjdCBJUyBOT1QgTlVMTCks CisKKyAgICAgIChzMS5vbGRlc3RfbXVsdGl4YWN0Ojp0ZXh0OjpiaWdpbnQgPj0gQ09BTEVTQ0Uo czAub2xkZXN0X211bHRpeGFjdDo6dGV4dDo6YmlnaW50LCAwKSksCisgICAgICAoczIub2xkZXN0 X211bHRpeGFjdDo6dGV4dDo6YmlnaW50ID49IENPQUxFU0NFKHMxLm9sZGVzdF9tdWx0aXhhY3Q6 OnRleHQ6OmJpZ2ludCwgMCkpLAorCisgICAgICAoczIubnVtX21lbWJlcnMgPj0gQ09BTEVTQ0Uo czEubnVtX21lbWJlcnMsIDApICsgMSksCisKKyAgICAgIChzMS5udW1fbXhpZHMgICA+PSBDT0FM RVNDRShzMC5udW1fbXhpZHMsICAgMCkpLAorICAgICAgKHMyLm51bV9teGlkcyAgID49IENPQUxF U0NFKHMxLm51bV9teGlkcywgICAwKSksCisgICAgICAoczEubnVtX21lbWJlcnMgPj0gQ09BTEVT Q0UoczAubnVtX21lbWJlcnMsIDApKSwKKyAgICAgIChzMi5udW1fbWVtYmVycyA+PSBDT0FMRVND RShzMS5udW1fbWVtYmVycywgMCkpCisgICAgXQorICApIEFTIHIoYXNzZXJ0aW9uLCBvayk7Cit9 CisKK3Blcm11dGF0aW9uIHNuYXAwIHMxX2JlZ2luIHMxX2xvY2sgc25hcDEgczJfYmVnaW4gczJf bG9jayBzbmFwMiBjaGVja193aGlsZV9waW5uZWQgczFfY29tbWl0IHMyX2NvbW1pdAotLSAKMi40 Ny4zCgo= --000000000000f90c5e0646bb96e2--