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 1vUVOS-00DvxI-02 for pgsql-hackers@arkaria.postgresql.org; Sat, 13 Dec 2025 19:35:05 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vUVOQ-00Beue-2u for pgsql-hackers@arkaria.postgresql.org; Sat, 13 Dec 2025 19:35:03 +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.96) (envelope-from ) id 1vUVOQ-00BeuR-1k for pgsql-hackers@lists.postgresql.org; Sat, 13 Dec 2025 19:35:03 +0000 Received: from mail-ej1-x629.google.com ([2a00:1450:4864:20::629]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vUVOO-000Zm3-0p for pgsql-hackers@postgresql.org; Sat, 13 Dec 2025 19:35:02 +0000 Received: by mail-ej1-x629.google.com with SMTP id a640c23a62f3a-b734fcbf1e3so462856466b.3 for ; Sat, 13 Dec 2025 11:35:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765654499; x=1766259299; 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=wdEN8EIBtVGrS7t0Ox7i1UyrwqspKtDELZhEm+w+bw0=; b=l6k3wbYrpde/yp0UzBcOkIwiVwiluLMlWietbLj779TYvwbym90xAWd/Q8mxApms20 qyLqvONIBTOmCqU4SPlBmUWfzlCSPIpt4LrouWBv0KLOItxFPmIXmVUBFUV6jTy4EGQ/ Ma5lH5qUjG7VFfAF0NHfCLR+CiibKW+Ivfiqcm6WQ/Q/O2bIDvSFWygJmOfXRVLOoZ8/ A0guwxAN/3fFdXGjqghBQnsekl1AFIEUpyR9EIqsAJh9i1cDY8xzsZMF5vWXjsD5Lkw2 BZjsa4T5YVNHDQZZXnMUHO6Iw3U9asHPcAqCnCUqhbuxub+WtGqtvMXQzvV9No6mABc9 W9ow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765654499; x=1766259299; 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=wdEN8EIBtVGrS7t0Ox7i1UyrwqspKtDELZhEm+w+bw0=; b=nk6Yhv3n4qXQltFb44E9BfeuN6FG061FbcHvm9o9U7nPHmAZLEufCl2LX+ttlgywnP WuWJqyEouMu3N7FcK7bSMnHBvqNVNfyGbUSWlbCfi9yvvZPdDsWNORY1Q6l16TyC8Em/ 5ao86cE3TnSgV13+V8W3F1PGA8DkfPfbkadEh2kQ9QrK3eGvA+SLFfk3lNdhSK+S6ncq fM4EJYwBzP4dIlNZbp3jNfhteZ6qWusvFfs3ghSgbztNEzkLPlkbiZ9wPSgJ7u4HbL9t 5RD7m7ZYXkNTWhYdqtMcdPtoa9okSq2XVg9niRonVGzgdFTAoCEd/Og5/do64L9jAayK Z89w== X-Forwarded-Encrypted: i=1; AJvYcCXCPeRH+cp5BZXT5bS2gDnTuAELlg7UXmnG8ke3e1f4Q6On1I9pLs8rUnj31MZdwXeniRae4u+o5XIgNJTa@postgresql.org X-Gm-Message-State: AOJu0Yyyd+1gZ7v4qQROpYIfgg7UjD1mjEJuV5gCjjLRcR2GgeZcrz5q /ufwe/VYUd+esUBvXNU+2ktLI9VWE4uG6A3btGGeX86W1BEnRzwtTBjDBrymGnFkyhHvI2/ltVx XyjqrXFk2NNJ28MlrCh3pbyMCn9V47wg= X-Gm-Gg: AY/fxX6EFd3xtKm5ZkBKE/9KqpaOKMLDkgw0e7z5F3Wvv1szQQFnap1Yj0ObEqFzcDX QYNXW/4IttQFRyVuwk1LSfuzQ/QFh4IiXeHeqvW8TYztqsAC7Oilwal4rHpi5OfacgIrGC7ij+v aJLwzjQvJWW4DKSXi7fyhcoTmGp68aDuxfQPthtuSZIBKcijcyv6+IoMXL7xBaN0ZTXMxWplNCH +KoATaEiYq65tP4OsnolFKw9t/x80l8FaMsBvfZczw2ZkH4Mri/UWldisyd0uIclBWvrlk= X-Google-Smtp-Source: AGHT+IEGm5zwZKZfGyk/5MEdn9XbbZHkwovieF7cpzH4kFuLRBZ80x8ODTvpQ/ARk4PmkcvvNQF53kjrJOvR0oijAGU= X-Received: by 2002:a17:907:3da9:b0:b73:70c9:1780 with SMTP id a640c23a62f3a-b7d238fc47emr637284866b.41.1765654498935; Sat, 13 Dec 2025 11:34:58 -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: Sat, 13 Dec 2025 13:34:47 -0600 X-Gm-Features: AQt7F2p53FYi3riyGHla00RRFQSK2f-FKwbkGErr66_6JMMyt2-e1DM5bRQ7Omk Message-ID: Subject: Re: [Proposal] Expose internal MultiXact member count function for efficient monitoring To: Ashutosh Bapat Cc: Tomas Vondra , Xuneng Zhou , torikoshia , Michael Paquier , Kirill Reshke , pgsql-hackers@postgresql.org Content-Type: multipart/mixed; boundary="00000000000034c5c40645da79ba" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000034c5c40645da79ba Content-Type: text/plain; charset="UTF-8" Thank you, Ashutosh! On Sun, Dec 7, 2025 at 10:40 PM Ashutosh Bapat wrote: > The patch at [1] changes the function used to fetch mxid related > information. With that we will get rid of awkwardness around > non-availability of the statistics. It's better to wait for those > changes to get committed before moving this forward. Following the upstream change from Heikki's patch [0], I've updated the patch (v12) to align with the new behavior. Code changes: - GetMultiXactInfo() now returns void, so the conditional checks and NULL handling have been removed. - MultiXactOffset is now 64-bit; updated the code to use Int64GetDatum() for member counts. - Switched to using MULTIXACT_MEMBERGROUP_SIZE and MULTIXACT_MEMBERS_PER_MEMBERGROUP from multixact_internal.h instead of hardcoded calculations. Documentation changes: - Removed the NULL-return discussion from func-info.sgml, as the statistics are now always available. - Updated maintenance.sgml to clarify that exceeding the historical 2^32 member limit no longer causes wraparound, but instead triggers more aggressive vacuum activity for disk space management. I validated the behavior before and after cleanup. The function correctly reports current usage (beyond the old limits) and resets once multixacts are removed: postgres=# SELECT num_mxids, num_members, pg_size_pretty(members_size) AS members_size, oldest_multixact FROM pg_get_multixact_stats(); -[ RECORD 1 ]------------------ num_mxids | 267969541 num_members | 9469693355 members_size | 44 GB oldest_multixact | 2 postgres=# SELECT pg_terminate_backend(27222); pg_terminate_backend ---------------------- t postgres=# SELECT num_mxids, num_members, pg_size_pretty(members_size) AS members_size, oldest_multixact FROM pg_get_multixact_stats(); -[ RECORD 1 ]------------------ num_mxids | 0 num_members | 0 members_size | 0 bytes oldest_multixact | 267969543 The updated patch is attached. Ref: [0] https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=bd8d9c9bdfa0c2168bb37edca6fa88168cacbbaa Regards, Naga --00000000000034c5c40645da79ba Content-Type: application/octet-stream; name="v12-0001-Add-pg_get_multixact_stats-function-for-monitori.patch" Content-Disposition: attachment; filename="v12-0001-Add-pg_get_multixact_stats-function-for-monitori.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mj4p1rpn0 RnJvbSA1NGIxZGFiZjNjOGRhNDNkNzAwYTEwODczMDcxNzdhMmYxN2U2MmNhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYWdhIEFwcGFuaSA8bmFnbnJpa0BnbWFpbC5jb20+CkRhdGU6 IEZyaSwgMTIgRGVjIDIwMjUgMjI6NDQ6NDYgKzAwMDAKU3ViamVjdDogW1BBVENIIHYxMl0gQWRk IHBnX2dldF9tdWx0aXhhY3Rfc3RhdHMoKSBmdW5jdGlvbiBmb3IgbW9uaXRvcmluZwogTXVsdGlY YWN0IHVzYWdlCgpFeHBvc2UgbXVsdGl4YWN0IHN0YXRlIHZpYSBhIG5ldyBTUUwtY2FsbGFibGUg ZnVuY3Rpb24gcGdfZ2V0X211bHRpeGFjdF9zdGF0cygpLApyZXR1cm5pbmc6Ci0gbnVtX214aWRz ICAgICAgICAgIDogbnVtYmVyIG9mIE11bHRpWGFjdCBJRHMgaW4gdXNlCi0gbnVtX21lbWJlcnMg ICAgICAgIDogbnVtYmVyIG9mIG1lbWJlciBlbnRyaWVzIGluIHVzZQotIG1lbWJlcnNfc2l6ZSAg ICAgICA6IGJ5dGVzIHVzZWQgYnkgbnVtX21lbWJlcnMgaW4gcGdfbXVsdGl4YWN0L21lbWJlcnMg ZGlyZWN0b3J5Ci0gb2xkZXN0X211bHRpeGFjdCAgIDogb2xkZXN0IE11bHRpWGFjdCBJRCBzdGls bCBuZWVkZWQKClRoaXMgcGF0Y2ggYWRkcyBwZ19nZXRfbXVsdGl4YWN0X3N0YXRzKCkgZnVuY3Rp b24KICAgLSBTUUwtY2FsbGFibGUgaW50ZXJmYWNlIHRvIEdldE11bHRpWGFjdEluZm8oKQogICAt IFJldHVybnMgTlVMTHMgaWYgTXVsdGlYYWN0IHN5c3RlbSBub3QgaW5pdGlhbGl6ZWQKICAgLSBJ bmNsdWRlcyBpc29sYXRpb24gdGVzdHMgZm9yIG1vbml0b3JpbmcgaW52YXJpYW50cwoKRG9jdW1l bnRhdGlvbiB1cGRhdGVzOgotIGZ1bmMtaW5mby5zZ21sOiBhZGQgZnVuY3Rpb24gZW50cnkKLSBt YWludGVuYW5jZS5zZ21sOiBtZW50aW9uIG1vbml0b3JpbmcgbXVsdGl4YWN0IHVzYWdlCgpCdWls ZCBhbmQgY2F0YWxvZzoKLSBBZGQgZnVuY3Rpb24gdG8gZXhpc3RpbmcgbXVsdGl4YWN0ZnVuY3Mu YwotIHBnX3Byb2MuZGF0IGVudHJ5CgpBdXRob3I6IE5hZ2EgQXBwYW5pIDxuYWducmlrQGdtYWls LmNvbT4KUmV2aWV3ZWQtYnk6IEFzaHV0b3NoIEJhcGF0IDxhc2h1dG9zaC5iYXBhdC5vc3NAZ21h aWwuY29tPgpSZXZpZXdlZC1ieTogTWljaGFlbCBQYXF1aWVyIDxtaWNoYWVsQHBhcXVpZXIueHl6 PgpEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL2ZsYXQv Q0ElMkJRZVklMkJBQXNZSzZXdkJXNHFZekh6NGJhaEh5Y0RBWV9xNUVDbUhrRVZfZUI5Y2t6ZyU0 MG1haWwuZ21haWwuY29tCi0tLQogZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwgICAg ICAgICAgICAgIHwgIDI3ICsrKysrCiBkb2Mvc3JjL3NnbWwvbWFpbnRlbmFuY2Uuc2dtbCAgICAg ICAgICAgICAgICAgfCAgNTggKysrKysrKystCiBzcmMvYmFja2VuZC91dGlscy9hZHQvbXVsdGl4 YWN0ZnVuY3MuYyAgICAgICAgfCAgNDUgKysrKysrKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmRhdCAgICAgICAgICAgICAgIHwgIDEwICsrCiAuLi4vaXNvbGF0aW9uL2V4cGVjdGVkL211 bHRpeGFjdF9zdGF0cy5vdXQgICAgfCAgODkgKysrKysrKysrKysrKysKIHNyYy90ZXN0L2lzb2xh dGlvbi9pc29sYXRpb25fc2NoZWR1bGUgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9pc29sYXRp b24vc3BlY3MvbXVsdGl4YWN0X3N0YXRzLnNwZWMgfCAxMTMgKysrKysrKysrKysrKysrKysrCiA3 IGZpbGVzIGNoYW5nZWQsIDMzNyBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQogY3JlYXRl 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 ZW5kL3V0aWxzL2FkdC9tdWx0aXhhY3RmdW5jcy5jCmluZGV4IGE0MjhlMTQwYmM0Li5jMDU5N2Nm NTQyNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L211bHRpeGFjdGZ1bmNzLmMK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L211bHRpeGFjdGZ1bmNzLmMKQEAgLTE1LDYgKzE1 LDggQEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAiYWNjZXNzL211bHRpeGFj dC5oIgorI2luY2x1ZGUgImFjY2Vzcy9tdWx0aXhhY3RfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJh Y2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgogI2luY2x1ZGUgInV0 aWxzL2J1aWx0aW5zLmgiCiAKQEAgLTg1LDMgKzg3LDQ2IEBAIHBnX2dldF9tdWx0aXhhY3RfbWVt YmVycyhQR19GVU5DVElPTl9BUkdTKQogCiAJU1JGX1JFVFVSTl9ET05FKGZ1bmNjeHQpOwogfQor CisvKgorICogcGdfZ2V0X211bHRpeGFjdF9zdGF0cworICoKKyAqIFJldHVybnMgc3RhdGlzdGlj cyBhYm91dCBjdXJyZW50IG11bHRpeGFjdCB1c2FnZS4KKyAqCisgKiBSZXR1cm5zIE5VTEwgaWYg dGhlIG9sZGVzdCByZWZlcmVuY2VkIG9mZnNldCBpcyB1bmtub3duLgorICovCitEYXR1bQorcGdf Z2V0X211bHRpeGFjdF9zdGF0cyhQR19GVU5DVElPTl9BUkdTKQoreworCVR1cGxlRGVzYwl0dXBk ZXNjOworCURhdHVtCQl2YWx1ZXNbNF07CisJYm9vbAkJbnVsbHNbNF07CisJTXVsdGlYYWN0T2Zm c2V0CW1lbWJlcnM7CisJTXVsdGlYYWN0SWQJb2xkZXN0TXVsdGlYYWN0SWQ7CisJdWludDMyCQlt dWx0aXhhY3RzOworCU11bHRpWGFjdE9mZnNldAlvbGRlc3RPZmZzZXQ7CisJaW50NjQJCW1lbWJl cnNCeXRlczsKKworCWlmIChnZXRfY2FsbF9yZXN1bHRfdHlwZShmY2luZm8sIE5VTEwsICZ0dXBk ZXNjKSAhPSBUWVBFRlVOQ19DT01QT1NJVEUpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNv ZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCSBlcnJtc2coInJldHVybiB0 eXBlIG11c3QgYmUgYSByb3cgdHlwZSIpKSk7CisKKwlHZXRNdWx0aVhhY3RJbmZvKCZtdWx0aXhh Y3RzLCAmbWVtYmVycywgJm9sZGVzdE11bHRpWGFjdElkLCAmb2xkZXN0T2Zmc2V0KTsKKworCS8q CisJICogQ2FsY3VsYXRlIHN0b3JhZ2Ugc3BhY2UgZm9yIG1lbWJlcnMuIE1lbWJlcnMgYXJlIHN0 b3JlZCBpbiBncm91cHMsCisJICogd2l0aCBlYWNoIGdyb3VwIGNvbnRhaW5pbmcgTVVMVElYQUNU X01FTUJFUlNfUEVSX01FTUJFUkdST1VQIG1lbWJlcnMKKwkgKiBhbmQgdGFraW5nIE1VTFRJWEFD VF9NRU1CRVJHUk9VUF9TSVpFIGJ5dGVzLgorCSAqLworCW1lbWJlcnNCeXRlcyA9IChpbnQ2NCkg KG1lbWJlcnMgLyBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVApICoKKwkJCQkgICBN VUxUSVhBQ1RfTUVNQkVSR1JPVVBfU0laRTsKKworCXZhbHVlc1swXSA9IFVJbnQzMkdldERhdHVt KG11bHRpeGFjdHMpOworCXZhbHVlc1sxXSA9IEludDY0R2V0RGF0dW0obWVtYmVycyk7CisJdmFs dWVzWzJdID0gSW50NjRHZXREYXR1bShtZW1iZXJzQnl0ZXMpOworCXZhbHVlc1szXSA9IFVJbnQz MkdldERhdHVtKG9sZGVzdE11bHRpWGFjdElkKTsKKwltZW1zZXQobnVsbHMsIGZhbHNlLCBzaXpl b2YobnVsbHMpKTsKKworCXJldHVybiBIZWFwVHVwbGVHZXREYXR1bShoZWFwX2Zvcm1fdHVwbGUo dHVwZGVzYywgdmFsdWVzLCBudWxscykpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXgg ZmQ5NDQ4ZWM3YjkuLjZjYWVhNmM4MjgxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTEy NjEyLDQgKzEyNjEyLDE0IEBACiAgIHByb2FyZ25hbWVzID0+ICd7cGlkLGlvX2lkLGlvX2dlbmVy YXRpb24sc3RhdGUsb3BlcmF0aW9uLG9mZixsZW5ndGgsdGFyZ2V0LGhhbmRsZV9kYXRhX2xlbixy YXdfcmVzdWx0LHJlc3VsdCx0YXJnZXRfZGVzYyxmX3N5bmMsZl9sb2NhbG1lbSxmX2J1ZmZlcmVk fScsCiAgIHByb3NyYyA9PiAncGdfZ2V0X2Fpb3MnIH0sCiAKKyMgR2V0IG11bHRpeGFjdCB1c2Fn ZQoreyBvaWQgPT4gJzkwMDEnLCBkZXNjciA9PiAnZ2V0IGN1cnJlbnQgbXVsdGl4YWN0IHVzYWdl IHN0YXRpc3RpY3MnLAorICBwcm9uYW1lID0+ICdwZ19nZXRfbXVsdGl4YWN0X3N0YXRzJywKKyAg cHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9wYXJhbGxlbCA9PiAncycsIHByb3JldHR5cGUgPT4gJ3Jl Y29yZCcsCisgIHByb2FyZ3R5cGVzID0+ICcnLAorICBwcm9hbGxhcmd0eXBlcyA9PiAne2ludDgs aW50OCxpbnQ4LHhpZH0nLAorICBwcm9hcmdtb2RlcyA9PiAne28sbyxvLG99JywKKyAgcHJvYXJn bmFtZXMgPT4gJ3tudW1fbXhpZHMsbnVtX21lbWJlcnMsbWVtYmVyc19zaXplLG9sZGVzdF9tdWx0 aXhhY3R9JywKKyAgcHJvc3JjID0+ICdwZ19nZXRfbXVsdGl4YWN0X3N0YXRzJ30sCisKIF0KZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9tdWx0aXhhY3Rfc3RhdHMub3V0 IGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVkL211bHRpeGFjdF9zdGF0cy5vdXQKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI3YTY1MTBjNGFkCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVkL211bHRpeGFjdF9zdGF0cy5vdXQK QEAgLTAsMCArMSw4OSBAQAorUGFyc2VkIHRlc3Qgc3BlYyB3aXRoIDIgc2Vzc2lvbnMKKworc3Rh cnRpbmcgcGVybXV0YXRpb246IHNuYXAwIHMxX2JlZ2luIHMxX2xvY2sgc25hcDEgczJfYmVnaW4g czJfbG9jayBzbmFwMiBjaGVja193aGlsZV9waW5uZWQgczFfY29tbWl0IHMyX2NvbW1pdAorc3Rl cCBzbmFwMDogCisgIENSRUFURSBURU1QIFRBQkxFIHNuYXAwIEFTCisgIFNFTEVDVCBudW1fbXhp ZHMsIG51bV9tZW1iZXJzLCBvbGRlc3RfbXVsdGl4YWN0CisgIEZST00gcGdfZ2V0X211bHRpeGFj dF9zdGF0cygpOworCitzdGVwIHMxX2JlZ2luOiBCRUdJTjsKK3N0ZXAgczFfbG9jazogU0VMRUNU IDEgRlJPTSBteHEgV0hFUkUgaWQ9MSBGT1IgS0VZIFNIQVJFOworP2NvbHVtbj8KKy0tLS0tLS0t CisgICAgICAgMQorKDEgcm93KQorCitzdGVwIHNuYXAxOiAKKyAgQ1JFQVRFIFRFTVAgVEFCTEUg c25hcDEgQVMKKyAgU0VMRUNUIG51bV9teGlkcywgbnVtX21lbWJlcnMsIG9sZGVzdF9tdWx0aXhh Y3QKKyAgRlJPTSBwZ19nZXRfbXVsdGl4YWN0X3N0YXRzKCk7CisKK3N0ZXAgczJfYmVnaW46IEJF R0lOOworc3RlcCBzMl9sb2NrOiBTRUxFQ1QgMSBGUk9NIG14cSBXSEVSRSBpZD0xIEZPUiBLRVkg U0hBUkU7Cis/Y29sdW1uPworLS0tLS0tLS0KKyAgICAgICAxCisoMSByb3cpCisKK3N0ZXAgc25h cDI6IAorICBDUkVBVEUgVEVNUCBUQUJMRSBzbmFwMiBBUworICBTRUxFQ1QgbnVtX214aWRzLCBu dW1fbWVtYmVycywgb2xkZXN0X211bHRpeGFjdAorICBGUk9NIHBnX2dldF9tdWx0aXhhY3Rfc3Rh dHMoKTsKKworc3RlcCBjaGVja193aGlsZV9waW5uZWQ6IAorICBTRUxFQ1Qgci5hc3NlcnRpb24s IHIub2sKKyAgRlJPTSBzbmFwMCBzMAorICBKT0lOIHNuYXAxIHMxIE9OIFRSVUUKKyAgSk9JTiBz bmFwMiBzMiBPTiBUUlVFLAorICBMQVRFUkFMIHVubmVzdCgKKyAgICBBUlJBWVsKKyAgICAgICdp c19pbml0X214aWRzJywKKyAgICAgICdpc19pbml0X21lbWJlcnMnLAorICAgICAgJ2lzX2luaXRf b2xkZXN0X214aWQnLAorICAgICAgJ2lzX2luaXRfb2xkZXN0X29mZicsCisgICAgICAnaXNfb2xk ZXN0X214aWRfbm9uZGVjXzAxJywKKyAgICAgICdpc19vbGRlc3RfbXhpZF9ub25kZWNfMTInLAor ICAgICAgJ2lzX29sZGVzdF9vZmZfbm9uZGVjXzAxJywKKyAgICAgICdpc19vbGRlc3Rfb2ZmX25v bmRlY18xMicsCisgICAgICAnaXNfbWVtYmVyc19pbmNyZWFzZWRfZ2UxJywKKyAgICAgICdpc19t eGlkc19ub25kZWNfMDEnLAorICAgICAgJ2lzX214aWRzX25vbmRlY18xMicsCisgICAgICAnaXNf bWVtYmVyc19ub25kZWNfMDEnLAorICAgICAgJ2lzX21lbWJlcnNfbm9uZGVjXzEyJworICAgIF0s CisgICAgQVJSQVlbCisgICAgICAoczIubnVtX214aWRzICAgICAgICBJUyBOT1QgTlVMTCksCisg ICAgICAoczIubnVtX21lbWJlcnMgICAgICBJUyBOT1QgTlVMTCksCisgICAgICAoczIub2xkZXN0 X211bHRpeGFjdCBJUyBOT1QgTlVMTCksCisKKyAgICAgIChzMS5vbGRlc3RfbXVsdGl4YWN0Ojp0 ZXh0OjpiaWdpbnQgPj0gQ09BTEVTQ0UoczAub2xkZXN0X211bHRpeGFjdDo6dGV4dDo6YmlnaW50 LCAwKSksCisgICAgICAoczIub2xkZXN0X211bHRpeGFjdDo6dGV4dDo6YmlnaW50ID49IENPQUxF U0NFKHMxLm9sZGVzdF9tdWx0aXhhY3Q6OnRleHQ6OmJpZ2ludCwgMCkpLAorCisgICAgICAoczIu bnVtX21lbWJlcnMgPj0gQ09BTEVTQ0UoczEubnVtX21lbWJlcnMsIDApICsgMSksCisKKyAgICAg IChzMS5udW1fbXhpZHMgICA+PSBDT0FMRVNDRShzMC5udW1fbXhpZHMsICAgMCkpLAorICAgICAg KHMyLm51bV9teGlkcyAgID49IENPQUxFU0NFKHMxLm51bV9teGlkcywgICAwKSksCisgICAgICAo czEubnVtX21lbWJlcnMgPj0gQ09BTEVTQ0UoczAubnVtX21lbWJlcnMsIDApKSwKKyAgICAgIChz Mi5udW1fbWVtYmVycyA+PSBDT0FMRVNDRShzMS5udW1fbWVtYmVycywgMCkpCisgICAgXQorICAp IEFTIHIoYXNzZXJ0aW9uLCBvayk7CisKK2Fzc2VydGlvbiAgICAgICAgICAgICAgIHxvaworLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tCitpc19pbml0X214aWRzICAgICAgICAgICB8dCAKK2lz X2luaXRfbWVtYmVycyAgICAgICAgIHx0IAoraXNfaW5pdF9vbGRlc3RfbXhpZCAgICAgfHQgCitp c19pbml0X29sZGVzdF9vZmYgICAgICB8dCAKK2lzX29sZGVzdF9teGlkX25vbmRlY18wMXx0IAor aXNfb2xkZXN0X214aWRfbm9uZGVjXzEyfHQgCitpc19vbGRlc3Rfb2ZmX25vbmRlY18wMSB8dCAK K2lzX29sZGVzdF9vZmZfbm9uZGVjXzEyIHx0IAoraXNfbWVtYmVyc19pbmNyZWFzZWRfZ2UxfHQg Citpc19teGlkc19ub25kZWNfMDEgICAgICB8dCAKK2lzX214aWRzX25vbmRlY18xMiAgICAgIHwg IAoraXNfbWVtYmVyc19ub25kZWNfMDEgICAgfCAgCitpc19tZW1iZXJzX25vbmRlY18xMiAgICB8 ICAKKygxMyByb3dzKQorCitzdGVwIHMxX2NvbW1pdDogQ09NTUlUOworc3RlcCBzMl9jb21taXQ6 IENPTU1JVDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2lzb2xhdGlvbi9pc29sYXRpb25fc2NoZWR1 bGUgYi9zcmMvdGVzdC9pc29sYXRpb24vaXNvbGF0aW9uX3NjaGVkdWxlCmluZGV4IDExMmYwNWEz Njc3Li42N2YwMDc4ZDhiYSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xhdGlv bl9zY2hlZHVsZQorKysgYi9zcmMvdGVzdC9pc29sYXRpb24vaXNvbGF0aW9uX3NjaGVkdWxlCkBA IC0xMTksMyArMTE5LDQgQEAgdGVzdDogc2VyaWFsaXphYmxlLXBhcmFsbGVsLTIKIHRlc3Q6IHNl cmlhbGl6YWJsZS1wYXJhbGxlbC0zCiB0ZXN0OiBtYXR2aWV3LXdyaXRlLXNrZXcKIHRlc3Q6IGxv Y2stbm93YWl0Cit0ZXN0OiBtdWx0aXhhY3Rfc3RhdHMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2lz b2xhdGlvbi9zcGVjcy9tdWx0aXhhY3Rfc3RhdHMuc3BlYyBiL3NyYy90ZXN0L2lzb2xhdGlvbi9z cGVjcy9tdWx0aXhhY3Rfc3RhdHMuc3BlYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uN2IwMzQ2NTQ1MDQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9pc29sYXRp b24vc3BlY3MvbXVsdGl4YWN0X3N0YXRzLnNwZWMKQEAgLTAsMCArMSwxMTMgQEAKKyMgVGVzdCBp bnZhcmlhbnRzIGZvciBwZ19nZXRfbXVsdGl4YWN0X3N0YXRzKCkKKyMgV2UgY3JlYXRlIGV4YWN0 bHkgb25lIGZyZXNoIE11bHRpWGFjdCBvbiBhIGJyYW5kLW5ldyB0YWJsZS4gV2hpbGUgaXQgaXMg cGlubmVkCisjIGJ5IHR3byBvcGVuIHRyYW5zYWN0aW9ucywgd2UgYXNzZXJ0IG9ubHkgaW52YXJp YW50cyB0aGF0IGJhY2tncm91bmQgVkFDVVVNL0ZSRUVaRQorIyBjYW5ub3QgdmlvbGF0ZToKKyMg ICDigKIgbWVtYmVycyBpbmNyZWFzZWQgYnkg4omlIDEgd2hlbiB0aGUgc2Vjb25kIHNlc3Npb24g bG9ja2VkIHRoZSByb3csCisjICAg4oCiIG51bV9teGlkcyAvIG51bV9tZW1iZXJzIGRpZCBub3Qg ZGVjcmVhc2UgdnMgZWFybGllciBzbmFwc2hvdHMsCisjICAg4oCiIG9sZGVzdF8qIG5ldmVyIGRl Y3JlYXNlcy4KKyMgV2UgbWFrZSBOTyBhc3NlcnRpb25zIGFmdGVyIHJlbGVhc2luZyBsb2NrcyAo ZnJlZXppbmcvdHJ1bmNhdGlvbiBtYXkgc2hyaW5rIGRlbHRhcykuCisjCisjIFRlcm1pbm9sb2d5 IChnbG9iYWwgY291bnRlcnMpOgorIyAgIG51bV9teGlkcywgbnVtX21lbWJlcnMgICAgOiAiaW4t dXNlIiBkZWx0YXMgZGVyaXZlZCBmcm9tIGdsb2JhbCBob3Jpem9ucworIyAgIG9sZGVzdF9tdWx0 aXhhY3QsIG9mZnNldCAgOiBvbGRlc3QgaG9yaXpvbnM7IHRoZXkgbW92ZSBmb3J3YXJkLCBuZXZl ciBiYWNrd2FyZAorIworIyBBbGwgYXNzZXJ0aW9ucyBleGVjdXRlIHdoaWxlIG91ciBtdWx0aXhh Y3QgaXMgcGlubmVkIGJ5IG9wZW4gdHhucywgd2hpY2ggcHJvdGVjdHMKKyMgdGhlIHRydW5jYXRp b24gaG9yaXpvbiAoVkFDVVVNIGNhbid0IGFkdmFuY2UgcGFzdCBvdXIgcGlubmVkIG11bHRpKS4K Kworc2V0dXAKK3sKKyAgICBDUkVBVEUgVEFCTEUgbXhxKGlkIGludCBQUklNQVJZIEtFWSwgdiBp bnQpOworICAgIElOU0VSVCBJTlRPIG14cSBWQUxVRVMgKDEsIDQyKTsKK30KKwordGVhcmRvd24K K3sKKyAgICBEUk9QIFRBQkxFIG14cTsKK30KKworIyBUd28gc2Vzc2lvbnMgdGhhdCBsb2NrIG9u IHRoZSBzYW1lIHR1cGxlIC0+IG9uZSBNdWx0aVhhY3Qgd2l0aCA+PSAyIG1lbWJlcnMuCitzZXNz aW9uICJzMSIKK3NldHVwIHsgU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSB3YXJuaW5nOyBTRVQg bG9ja190aW1lb3V0ID0gJzVzJzsgfQorc3RlcCBzMV9iZWdpbiAgeyBCRUdJTjsgfQorc3RlcCBz MV9sb2NrICAgeyBTRUxFQ1QgMSBGUk9NIG14cSBXSEVSRSBpZD0xIEZPUiBLRVkgU0hBUkU7IH0K K3N0ZXAgczFfY29tbWl0IHsgQ09NTUlUOyB9CisKK3Nlc3Npb24gInMyIgorc2V0dXAgeyBTRVQg Y2xpZW50X21pbl9tZXNzYWdlcyA9IHdhcm5pbmc7IFNFVCBsb2NrX3RpbWVvdXQgPSAnNXMnOyB9 CitzdGVwIHMyX2JlZ2luICB7IEJFR0lOOyB9CitzdGVwIHMyX2xvY2sgICB7IFNFTEVDVCAxIEZS T00gbXhxIFdIRVJFIGlkPTEgRk9SIEtFWSBTSEFSRTsgfQorc3RlcCBzMl9jb21taXQgeyBDT01N SVQ7IH0KKworIyBCYXNlbGluZSBCRUZPUkUgYW55IGxvY2tpbmc7IG1heSBiZSBOVUxMcyBpZiBt dWx0aXhhY3QgaXNuJ3QgaW5pdGlhbGl6ZWQgeWV0Lgorc3RlcCBzbmFwMCB7CisgIENSRUFURSBU RU1QIFRBQkxFIHNuYXAwIEFTCisgIFNFTEVDVCBudW1fbXhpZHMsIG51bV9tZW1iZXJzLCBvbGRl c3RfbXVsdGl4YWN0CisgIEZST00gcGdfZ2V0X211bHRpeGFjdF9zdGF0cygpOworfQorCisjIEFm dGVyIHMxIGhhcyBsb2NrZWQgdGhlIHJvdy4KK3N0ZXAgc25hcDEgeworICBDUkVBVEUgVEVNUCBU QUJMRSBzbmFwMSBBUworICBTRUxFQ1QgbnVtX214aWRzLCBudW1fbWVtYmVycywgb2xkZXN0X211 bHRpeGFjdAorICBGUk9NIHBnX2dldF9tdWx0aXhhY3Rfc3RhdHMoKTsKK30KKworIyBBZnRlciBz MiBqb2lucyBvbiB0aGUgU0FNRSB0dXBsZSAtPiBtdWx0aXhhY3Qgd2l0aCA+PSAyIG1lbWJlcnMu CitzdGVwIHNuYXAyIHsKKyAgQ1JFQVRFIFRFTVAgVEFCTEUgc25hcDIgQVMKKyAgU0VMRUNUIG51 bV9teGlkcywgbnVtX21lbWJlcnMsIG9sZGVzdF9tdWx0aXhhY3QKKyAgRlJPTSBwZ19nZXRfbXVs dGl4YWN0X3N0YXRzKCk7Cit9CisKKyMgUHJldHR5LCBkZXRlcm1pbmlzdGljIGtleS92YWx1ZSBv dXRwdXQgb2YgYm9vbGVhbiBjaGVja3MuCisjIEtleXM6CisjICAgaXNfaW5pdF9teGlkcyAgICAg ICAgICAgIDogbnVtX214aWRzIGlzIG5vbi1OVUxMCisjICAgaXNfaW5pdF9tZW1iZXJzICAgICAg ICAgIDogbnVtX21lbWJlcnMgaXMgbm9uLU5VTEwKKyMgICBpc19pbml0X29sZGVzdF9teGlkICAg ICAgOiBvbGRlc3RfbXVsdGl4YWN0IGlzIG5vbi1OVUxMCisjICAgaXNfb2xkZXN0X214aWRfbm9u ZGVjXzAxIDogb2xkZXN0X211bHRpeGFjdCBkaWQgbm90IGRlY3JlYXNlIChzbmFwMOKGknNuYXAx KQorIyAgIGlzX29sZGVzdF9teGlkX25vbmRlY18xMiA6IG9sZGVzdF9tdWx0aXhhY3QgZGlkIG5v dCBkZWNyZWFzZSAoc25hcDHihpJzbmFwMikKKyMgICBpc19tZW1iZXJzX2luY3JlYXNlZF9nZTEg OiBtZW1iZXJzIGluY3JlYXNlZCBieSBhdCBsZWFzdCAxIHdoZW4gczIgam9pbmVkCisjICAgaXNf bXhpZHNfbm9uZGVjXzAxICAgICAgIDogbnVtX214aWRzIGRpZCBub3QgZGVjcmVhc2UgKHNuYXAw 4oaSc25hcDEpCisjICAgaXNfbXhpZHNfbm9uZGVjXzEyICAgICAgIDogbnVtX214aWRzIGRpZCBu b3QgZGVjcmVhc2UgKHNuYXAx4oaSc25hcDIpCisjICAgaXNfbWVtYmVyc19ub25kZWNfMDEgICAg IDogbnVtX21lbWJlcnMgZGlkIG5vdCBkZWNyZWFzZSAoc25hcDDihpJzbmFwMSkKKyMgICBpc19t ZW1iZXJzX25vbmRlY18xMiAgICAgOiBudW1fbWVtYmVycyBkaWQgbm90IGRlY3JlYXNlIChzbmFw MeKGknNuYXAyKQorc3RlcCBjaGVja193aGlsZV9waW5uZWQgeworICBTRUxFQ1Qgci5hc3NlcnRp b24sIHIub2sKKyAgRlJPTSBzbmFwMCBzMAorICBKT0lOIHNuYXAxIHMxIE9OIFRSVUUKKyAgSk9J TiBzbmFwMiBzMiBPTiBUUlVFLAorICBMQVRFUkFMIHVubmVzdCgKKyAgICBBUlJBWVsKKyAgICAg ICdpc19pbml0X214aWRzJywKKyAgICAgICdpc19pbml0X21lbWJlcnMnLAorICAgICAgJ2lzX2lu aXRfb2xkZXN0X214aWQnLAorICAgICAgJ2lzX2luaXRfb2xkZXN0X29mZicsCisgICAgICAnaXNf b2xkZXN0X214aWRfbm9uZGVjXzAxJywKKyAgICAgICdpc19vbGRlc3RfbXhpZF9ub25kZWNfMTIn LAorICAgICAgJ2lzX29sZGVzdF9vZmZfbm9uZGVjXzAxJywKKyAgICAgICdpc19vbGRlc3Rfb2Zm X25vbmRlY18xMicsCisgICAgICAnaXNfbWVtYmVyc19pbmNyZWFzZWRfZ2UxJywKKyAgICAgICdp c19teGlkc19ub25kZWNfMDEnLAorICAgICAgJ2lzX214aWRzX25vbmRlY18xMicsCisgICAgICAn aXNfbWVtYmVyc19ub25kZWNfMDEnLAorICAgICAgJ2lzX21lbWJlcnNfbm9uZGVjXzEyJworICAg IF0sCisgICAgQVJSQVlbCisgICAgICAoczIubnVtX214aWRzICAgICAgICBJUyBOT1QgTlVMTCks CisgICAgICAoczIubnVtX21lbWJlcnMgICAgICBJUyBOT1QgTlVMTCksCisgICAgICAoczIub2xk ZXN0X211bHRpeGFjdCBJUyBOT1QgTlVMTCksCisKKyAgICAgIChzMS5vbGRlc3RfbXVsdGl4YWN0 Ojp0ZXh0OjpiaWdpbnQgPj0gQ09BTEVTQ0UoczAub2xkZXN0X211bHRpeGFjdDo6dGV4dDo6Ymln aW50LCAwKSksCisgICAgICAoczIub2xkZXN0X211bHRpeGFjdDo6dGV4dDo6YmlnaW50ID49IENP QUxFU0NFKHMxLm9sZGVzdF9tdWx0aXhhY3Q6OnRleHQ6OmJpZ2ludCwgMCkpLAorCisgICAgICAo czIubnVtX21lbWJlcnMgPj0gQ09BTEVTQ0UoczEubnVtX21lbWJlcnMsIDApICsgMSksCisKKyAg ICAgIChzMS5udW1fbXhpZHMgICA+PSBDT0FMRVNDRShzMC5udW1fbXhpZHMsICAgMCkpLAorICAg ICAgKHMyLm51bV9teGlkcyAgID49IENPQUxFU0NFKHMxLm51bV9teGlkcywgICAwKSksCisgICAg ICAoczEubnVtX21lbWJlcnMgPj0gQ09BTEVTQ0UoczAubnVtX21lbWJlcnMsIDApKSwKKyAgICAg IChzMi5udW1fbWVtYmVycyA+PSBDT0FMRVNDRShzMS5udW1fbWVtYmVycywgMCkpCisgICAgXQor ICApIEFTIHIoYXNzZXJ0aW9uLCBvayk7Cit9CisKK3Blcm11dGF0aW9uIHNuYXAwIHMxX2JlZ2lu IHMxX2xvY2sgc25hcDEgczJfYmVnaW4gczJfbG9jayBzbmFwMiBjaGVja193aGlsZV9waW5uZWQg czFfY29tbWl0IHMyX2NvbW1pdAotLSAKMi40Ny4zCgo= --00000000000034c5c40645da79ba--