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 1w7p9t-005jIR-2i for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Apr 2026 06:34: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 1w7p9s-00FEQY-1C for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Apr 2026 06:34:32 +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 1w7p9s-00FEQQ-03 for pgsql-hackers@lists.postgresql.org; Wed, 01 Apr 2026 06:34:32 +0000 Received: from mail-qk1-x72e.google.com ([2607:f8b0:4864:20::72e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w7p9p-00000002J74-2yGd for pgsql-hackers@lists.postgresql.org; Wed, 01 Apr 2026 06:34:32 +0000 Received: by mail-qk1-x72e.google.com with SMTP id af79cd13be357-8c6f21c2d81so599800185a.2 for ; Tue, 31 Mar 2026 23:34:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775025267; cv=none; d=google.com; s=arc-20240605; b=fKVRDoX5IUZWkm6zykZ95xEEyW4Nt/67sZLZF+zK6t87A/ngiq93+nnNDrMSXRH6hi vIcOK3rtKtlwhkNCbKdMmkPphXS4DHh8iNct7DXq9gdrYmMbVmIicK9ptkO3OIkT0f+V vBJKZk1b9pmP8nTLMDXHCytLUzvU6L4ZVny6bxfxWhTDLWd3EHWAo8afQlWp9tlTletS dUmjzt2YbR3OX5xw8mWpXZGL3fILRX19jlRN5wuQxqHsMt+OqdvEFmW3cO2WRuKrHFJW WPkLzG5EjvTNe6N9guL/M3bHNy3/LhT7jhGdfyRCWERnHLUKnY5AeL4yDJKI9DwxB76S fQSw== 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=nKyfiOceydqxs7q7DbmksEGL61padamVfrUrCOWY/bw=; fh=27q4+spVpyuKsMOCvipNWAy2Y0d29cOBqlx8Zx3MC7w=; b=X8Znz1kK9rM7hwgdGsA+VkzzAH+jWO5g3zA+VUsUJYRLZ/XE3XU5yorbn8g19e6rl2 s/r//Y445xTDF4CsJ9qXJkU1US6OeAJid/6yJ4F4tsxewguZ2xS7vR4cEQkOIF9kNnUS mbRpjEm9jemPbbR0VvaUYs1xJvs7oYx0LpTN9S0GQ4LAhjmOTJOgDquhompp2m3ICFPL WmdoP6m4/FNMeoA8xj8HT/ZHbsBGUh8Se1oLg04OsFLyVqtmL54R0Hrvv83+qTYFqXb8 rgE1MYxm6d8Vj/CF8tem/SXJApaRWgA9+3JEPPnClCUZ2aWDxvg22qX67zQEGO65LHZv K7ZQ==; 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=fittl.com; s=google; t=1775025267; x=1775630067; 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=nKyfiOceydqxs7q7DbmksEGL61padamVfrUrCOWY/bw=; b=X8xDA1+WL+PHCjW5jXNvGBh/uzQXRgXqtx934r4gQ68RvTOK+f1IBaWsOi5MbfDDkW Wq0LbKCJM3Z5NXetXJWTy998cb3JhqB7EIFXjZH2o8R+JtnfDejO7Eoit8dbeAIEwtd6 5gPYyb5xzhPo1U6UlC4zHxJm7D+yG9NGT0ZHY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775025267; x=1775630067; 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=nKyfiOceydqxs7q7DbmksEGL61padamVfrUrCOWY/bw=; b=OmCceg1WhnOvz/DYkLoBAZLMyUUmbFBbkdEB98NKOTEoxZuYKW6aTDJmZq0IlG2i5e 39dkMRE/HWR6VGqXKYNASaqstQH+UIkLGTr7Vnsz+0i6pN5DZSmIza2mUUNJgD5LmlNh 937lUwqH3vjgcD5QVCkrhGPakJlekaUXfBQYI8CpBZ3Z1cID4ZNYSMaXU7Yt/PP5XhKW QU/pTi0RjHksosGzOLetCwyTjRbdPXJp8hIq0SPURhX4rDH7SUllv+igxIeVjh3UvgyN qgekwrkTVwmcePSK6cKt8Xg2fJQye0lRK7rnhRBsfJJECJhG4B3IkTCVZxEfNW4ODHx5 FwEw== X-Forwarded-Encrypted: i=1; AJvYcCVH+6MPI0LDxJ8nSoPx+L/XZRdsOIRyslUHFGe+tXL5Fbx6EhMdvicwtvp7HURn9CIGhjLlYvd24zO1/4Y8@lists.postgresql.org X-Gm-Message-State: AOJu0YxHSV3TBfnKHl7EuSGiGiBmPCSK4MhzxgQifNYChUbwXz2qgcMW iwq25nv4WLgNlddpLvpeaXFZJSjGvRaER1PkLi8AAjjJDwIVIqwZFO851zTJEJFmWiMF10C//Qo C5fMli00haMnKPiVB3/Y4Xg+NGAmH/b+udJyOUNvI X-Gm-Gg: ATEYQzzS6UITONGB4lC4MWxt9PzN4kLeHRgvb97DAEUMTEYh7a6iP2pk6JvcADmBmM7 C5S9/RQ/VFNxejlpeCr2TPloqtXJiyYKt0SGpQYvE2qB93ORv8q45Bg+L21x8T1udt2T38C2OkT EBFfV+3c+LSCTtBN0Rg56w2jF/bztUahGZBKstd3fhMtCrCnwjF+WDlXxSgHEvmn3qrtaSfA9Xs F+5FVlR9ftf1fOfg1yosE3HgrxRmgi/Nedof5qhkmhdG2UZtLU9KMkUJxE3Z/MjYfnEVzOOGspo PiRvQDHYIYjI3wig1yXaO30YcAFCl27VFCbc2IwpHKerR69olvM= X-Received: by 2002:ad4:5ccd:0:b0:89c:a2ad:33a0 with SMTP id 6a1803df08f44-8a439b90631mr34008306d6.45.1775025267132; Tue, 31 Mar 2026 23:34:27 -0700 (PDT) MIME-Version: 1.0 References: <1136161.1769654478@sss.pgh.pa.us> <1299934.1773938807@sss.pgh.pa.us> In-Reply-To: From: Lukas Fittl Date: Tue, 31 Mar 2026 23:33:50 -0700 X-Gm-Features: AQROBzCanrDbP4c9exXAaC_EfeQGGv977sfBTihkRxsPWTTzFv5ZxnwMYralH8o Message-ID: Subject: Re: pg_plan_advice To: Robert Haas Cc: Jakub Wartak , Tom Lane , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000084c2c3064e6046f2" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000084c2c3064e6046f2 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Mar 31, 2026 at 7:25=E2=80=AFPM Lukas Fittl wrote= : > > On Mon, Mar 30, 2026 at 7:53=E2=80=AFAM Robert Haas wrote: > > > > > > The module doesn't have a built-in way to do that right now. Are you > > thinking we would document that pg_get_dsm_registry_allocations() can > > be used? > > Yeah, for example. Alternatively we could provide a function/view that > lists all advice across all stashes, so you can more easily see the > result size of that and estimate what the in-memory use is. But > pointing to pg_get_dsm_registry_allocations seems easier. Actually, that won't work in practice with the code as of v23 - pg_get_dsm_registry_allocations() always returns the fixed 64 byte allocation from GetNamedDSMSegment, but is oblivious to the individual DSA allocations (even after adding hundreds of entries): SELECT * FROM pg_get_dsm_registry_allocations(); name | type | size -----------------+---------+------ pg_stash_advice | segment | 64 (1 row) Is there a reason you didn't use GetNamedDSA / GetNamedDSHash for the other allocations? (which we have as of fe07100e82b09) With the adjustments in the attached patch, this gets reported as expected: SELECT * FROM pg_get_dsm_registry_allocations(); name | type | size -----------------------+---------+----------- pg_stash_advice | segment | 24 pg_stash_advice_stash | hash | 1048576 pg_stash_advice_dsa | area | 803209216 pg_stash_advice_entry | hash | 1048576 (4 rows) > > > > In practice for a good amount of our user base these days the questio= n > > > will be "Does my cloud provider give me access to create stash > > > entries", so its maybe worth thinking about if we could also allow > > > pg_maintain to manage entries by default? > > > > Wouldn't it make more sense for the cloud provider to grant execute > > permissions on these functions to pg_maintain if they are so inclined? > > This is a brand-new facility, so I think we had better be conservative > > in terms of default permissions. > > I guess. I'm always worried that providers get that wrong and forget > to give end users the permissions - but I suppose end users can > complain to their providers if that's the case. > > I've done another look over pg_set_stashed_advice and I think its in > good shape. The only trailing thought I have is that we could consider > running a fuzzer against the pg_set_advice function in particular, > just to see if anything pops up (beyond having the ability to make a > very large memory allocation through a large advice string, which is > maybe a problem?). Obviously I meant "I've done another look over pg_stash_advice and I think its in good shape". I've done some basic fuzzing with the pg_set_stashed_advice function, including concurrently setting advice, and that didn't yield any surprises. Thanks, Lukas --=20 Lukas Fittl --00000000000084c2c3064e6046f2 Content-Type: application/octet-stream; name="nocfbot-3-0001-Use-GetNamedDSA-GetNamedDSHash-for-shared.patch" Content-Disposition: attachment; filename="nocfbot-3-0001-Use-GetNamedDSA-GetNamedDSHash-for-shared.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnfo68lk0 RnJvbSBhOWRlMDM2N2ZjNTA0ZGU0MDNiOTNiZTE3OWYzNjYxNWEzODg0ZmM3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBMdWthcyBGaXR0bCA8bHVrYXNAZml0dGwuY29tPgpEYXRlOiBU dWUsIDMxIE1hciAyMDI2IDIzOjMwOjExIC0wNzAwClN1YmplY3Q6IFtQQVRDSCB2bm9jZmJvdC0z XSBVc2UgR2V0TmFtZWREU0EgLyBHZXROYW1lZERTSGFzaCBmb3Igc2hhcmVkIG1lbW9yeQogYWxs b2NhdGlvbnMKClRoaXMgYWxsb3dzIHV0aWxpemluZyBwZ19nZXRfZHNtX3JlZ2lzdHJ5X2FsbG9j YXRpb25zIHRvIHNlZSB0aGUgYW1vdW50Cm9mIG1lbW9yeSB1c2VkIGJ5IHRoZSBpbnRlcm5hbCBz dG9yYWdlLgotLS0KIGNvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS5jIHwg MTA4ICsrKy0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxMSBpbnNlcnRpb25z KCspLCA5NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXNoX2Fkdmlj ZS9wZ19zdGFzaF9hZHZpY2UuYyBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2Fk dmljZS5jCmluZGV4IDIyMTIyMjM2Njk0Li5jNzRkMGVlYmY0NSAxMDA2NDQKLS0tIGEvY29udHJp Yi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLmMKKysrIGIvY29udHJpYi9wZ19zdGFz aF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLmMKQEAgLTQzLDEzICs0Myw3IEBAIFBHX0ZVTkNUSU9O X0lORk9fVjEocGdfc2V0X3N0YXNoZWRfYWR2aWNlKTsKIHR5cGVkZWYgc3RydWN0IHBnc2Ffc2hh cmVkX3N0YXRlCiB7CiAJTFdMb2NrCQlsb2NrOwotCWludAkJCWRzYV90cmFuY2hlOwotCWludAkJ CXN0YXNoX3RyYW5jaGU7Ci0JaW50CQkJZW50cnlfdHJhbmNoZTsKIAl1aW50NjQJCW5leHRfc3Rh c2hfaWQ7Ci0JZHNhX2hhbmRsZQlhcmVhOwotCWRzaGFzaF90YWJsZV9oYW5kbGUgc3Rhc2hfaGFz aDsKLQlkc2hhc2hfdGFibGVfaGFuZGxlIGVudHJ5X2hhc2g7CiB9IHBnc2Ffc2hhcmVkX3N0YXRl OwogCiB0eXBlZGVmIHN0cnVjdCBwZ3NhX3N0YXNoCkBAIC0xMTMsMjkgKzEwNywyNyBAQCBzdGF0 aWMgZHNoYXNoX3RhYmxlICpwZ3NhX3N0YXNoX2RzaGFzaDsKIHN0YXRpYyBkc2hhc2hfdGFibGUg KnBnc2FfZW50cnlfZHNoYXNoOwogCiAvKiBTaGFyZWQgbWVtb3J5IGhhc2ggdGFibGUgcGFyYW1l dGVycyAqLwotc3RhdGljIGRzaGFzaF9wYXJhbWV0ZXJzIHBnc2Ffc3Rhc2hfZHNoYXNoX3BhcmFt ZXRlcnMgPSB7CitzdGF0aWMgY29uc3QgZHNoYXNoX3BhcmFtZXRlcnMgcGdzYV9zdGFzaF9kc2hh c2hfcGFyYW1ldGVycyA9IHsKIAlOQU1FREFUQUxFTiwKIAlzaXplb2YocGdzYV9zdGFzaCksCiAJ ZHNoYXNoX3N0cmNtcCwKIAlkc2hhc2hfc3RyaGFzaCwKIAlkc2hhc2hfc3RyY3B5LAotCUxXVFJB TkNIRV9JTlZBTElECQkJLyogZ2V0cyBzZXQgYXQgcnVudGltZSAqLworCUxXVFJBTkNIRV9JTlZB TElECQkJLyogYXNzaWduZWQgYnkgR2V0TmFtZWREU0hhc2ggKi8KIH07CiAKLXN0YXRpYyBkc2hh c2hfcGFyYW1ldGVycyBwZ3NhX2VudHJ5X2RzaGFzaF9wYXJhbWV0ZXJzID0geworc3RhdGljIGNv bnN0IGRzaGFzaF9wYXJhbWV0ZXJzIHBnc2FfZW50cnlfZHNoYXNoX3BhcmFtZXRlcnMgPSB7CiAJ c2l6ZW9mKHBnc2FfZW50cnlfa2V5KSwKIAlzaXplb2YocGdzYV9lbnRyeSksCiAJZHNoYXNoX21l bWNtcCwKIAlkc2hhc2hfbWVtaGFzaCwKIAlkc2hhc2hfbWVtY3B5LAotCUxXVFJBTkNIRV9JTlZB TElECQkJLyogZ2V0cyBzZXQgYXQgcnVudGltZSAqLworCUxXVFJBTkNIRV9JTlZBTElECQkJLyog YXNzaWduZWQgYnkgR2V0TmFtZWREU0hhc2ggKi8KIH07CiAKIC8qIEdVQyB2YXJpYWJsZSAqLwog c3RhdGljIGNoYXIgKnBnX3N0YXNoX2FkdmljZV9zdGFzaF9uYW1lID0gIiI7CiAKLS8qIE90aGVy IGdsb2JhbCB2YXJpYWJsZXMgKi8KLXN0YXRpYyBNZW1vcnlDb250ZXh0IHBnX3N0YXNoX2Fkdmlj ZV9tY3h0OwogCiAvKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCiBzdGF0aWMgY2hhciAqcGdzYV9h ZHZpc29yKFBsYW5uZXJHbG9iYWwgKmdsb2IsCkBAIC01MTksMTcgKzUxMSw2IEBAIHN0YXRpYyB2 b2lkCiBwZ3NhX2F0dGFjaCh2b2lkKQogewogCWJvb2wJCWZvdW5kOwotCU1lbW9yeUNvbnRleHQg b2xkY29udGV4dDsKLQotCS8qCi0JICogQ3JlYXRlIGEgbWVtb3J5IGNvbnRleHQgdG8gbWFrZSBz dXJlIHRoYXQgYW55IGNvbnRyb2wgc3RydWN0dXJlcwotCSAqIGFsbG9jYXRlZCBpbiBsb2NhbCBt ZW1vcnkgYXJlIHN1ZmZpY2llbnRseSBwZXJzaXN0ZW50LgotCSAqLwotCWlmIChwZ19zdGFzaF9h ZHZpY2VfbWN4dCA9PSBOVUxMKQotCQlwZ19zdGFzaF9hZHZpY2VfbWN4dCA9IEFsbG9jU2V0Q29u dGV4dENyZWF0ZShUb3BNZW1vcnlDb250ZXh0LAotCQkJCQkJCQkJCQkJCSAicGdfc3Rhc2hfYWR2 aWNlIiwKLQkJCQkJCQkJCQkJCQkgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7Ci0Jb2xkY29udGV4 dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwZ19zdGFzaF9hZHZpY2VfbWN4dCk7CiAKIAkvKiBB dHRhY2ggdG8gdGhlIGZpeGVkLXNpemUgc3RhdGUgb2JqZWN0IGlmIG5vdCBhbHJlYWR5IGRvbmUu ICovCiAJaWYgKHBnc2Ffc3RhdGUgPT0gTlVMTCkKQEAgLTU0MCw4MCArNTIxLDE5IEBAIHBnc2Ff YXR0YWNoKHZvaWQpCiAKIAkvKiBBdHRhY2ggdG8gdGhlIERTQSBhcmVhIGlmIG5vdCBhbHJlYWR5 IGRvbmUuICovCiAJaWYgKHBnc2FfZHNhX2FyZWEgPT0gTlVMTCkKLQl7Ci0JCWRzYV9oYW5kbGUJ YXJlYV9oYW5kbGU7Ci0KLQkJTFdMb2NrQWNxdWlyZSgmcGdzYV9zdGF0ZS0+bG9jaywgTFdfRVhD TFVTSVZFKTsKLQkJYXJlYV9oYW5kbGUgPSBwZ3NhX3N0YXRlLT5hcmVhOwotCQlpZiAoYXJlYV9o YW5kbGUgPT0gRFNBX0hBTkRMRV9JTlZBTElEKQotCQl7Ci0JCQlwZ3NhX2RzYV9hcmVhID0gZHNh X2NyZWF0ZShwZ3NhX3N0YXRlLT5kc2FfdHJhbmNoZSk7Ci0JCQlkc2FfcGluKHBnc2FfZHNhX2Fy ZWEpOwotCQkJcGdzYV9zdGF0ZS0+YXJlYSA9IGRzYV9nZXRfaGFuZGxlKHBnc2FfZHNhX2FyZWEp OwotCQkJTFdMb2NrUmVsZWFzZSgmcGdzYV9zdGF0ZS0+bG9jayk7Ci0JCX0KLQkJZWxzZQotCQl7 Ci0JCQlMV0xvY2tSZWxlYXNlKCZwZ3NhX3N0YXRlLT5sb2NrKTsKLQkJCXBnc2FfZHNhX2FyZWEg PSBkc2FfYXR0YWNoKGFyZWFfaGFuZGxlKTsKLQkJfQotCQlkc2FfcGluX21hcHBpbmcocGdzYV9k c2FfYXJlYSk7Ci0JfQorCQlwZ3NhX2RzYV9hcmVhID0gR2V0TmFtZWREU0EoInBnX3N0YXNoX2Fk dmljZV9kc2EiLCAmZm91bmQpOwogCiAJLyogQXR0YWNoIHRvIHRoZSBzdGFzaF9uYW1lLT5zdGFz aF9pZCBoYXNoIHRhYmxlIGlmIG5vdCBhbHJlYWR5IGRvbmUuICovCiAJaWYgKHBnc2Ffc3Rhc2hf ZHNoYXNoID09IE5VTEwpCi0JewotCQlkc2hhc2hfdGFibGVfaGFuZGxlIHN0YXNoX2hhbmRsZTsK LQotCQlMV0xvY2tBY3F1aXJlKCZwZ3NhX3N0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpOwotCQlw Z3NhX3N0YXNoX2RzaGFzaF9wYXJhbWV0ZXJzLnRyYW5jaGVfaWQgPSBwZ3NhX3N0YXRlLT5zdGFz aF90cmFuY2hlOwotCQlzdGFzaF9oYW5kbGUgPSBwZ3NhX3N0YXRlLT5zdGFzaF9oYXNoOwotCQlp ZiAoc3Rhc2hfaGFuZGxlID09IERTSEFTSF9IQU5ETEVfSU5WQUxJRCkKLQkJewotCQkJcGdzYV9z dGFzaF9kc2hhc2ggPSBkc2hhc2hfY3JlYXRlKHBnc2FfZHNhX2FyZWEsCi0JCQkJCQkJCQkJCSAg JnBnc2Ffc3Rhc2hfZHNoYXNoX3BhcmFtZXRlcnMsCi0JCQkJCQkJCQkJCSAgTlVMTCk7Ci0JCQlw Z3NhX3N0YXRlLT5zdGFzaF9oYXNoID0KLQkJCQlkc2hhc2hfZ2V0X2hhc2hfdGFibGVfaGFuZGxl KHBnc2Ffc3Rhc2hfZHNoYXNoKTsKLQkJCUxXTG9ja1JlbGVhc2UoJnBnc2Ffc3RhdGUtPmxvY2sp OwotCQl9Ci0JCWVsc2UKLQkJewotCQkJTFdMb2NrUmVsZWFzZSgmcGdzYV9zdGF0ZS0+bG9jayk7 Ci0JCQlwZ3NhX3N0YXNoX2RzaGFzaCA9IGRzaGFzaF9hdHRhY2gocGdzYV9kc2FfYXJlYSwKLQkJ CQkJCQkJCQkJICAmcGdzYV9zdGFzaF9kc2hhc2hfcGFyYW1ldGVycywKLQkJCQkJCQkJCQkJICBz dGFzaF9oYW5kbGUsIE5VTEwpOwotCQl9Ci0JfQorCQlwZ3NhX3N0YXNoX2RzaGFzaCA9IEdldE5h bWVkRFNIYXNoKCJwZ19zdGFzaF9hZHZpY2Vfc3Rhc2giLAorCQkJCQkJCQkJCSAgICZwZ3NhX3N0 YXNoX2RzaGFzaF9wYXJhbWV0ZXJzLAorCQkJCQkJCQkJCSAgICZmb3VuZCk7CiAKIAkvKiBBdHRh Y2ggdG8gdGhlIGVudHJ5IGhhc2ggdGFibGUgaWYgbm90IGFscmVhZHkgZG9uZS4gKi8KIAlpZiAo cGdzYV9lbnRyeV9kc2hhc2ggPT0gTlVMTCkKLQl7Ci0JCWRzaGFzaF90YWJsZV9oYW5kbGUgZW50 cnlfaGFuZGxlOwotCi0JCUxXTG9ja0FjcXVpcmUoJnBnc2Ffc3RhdGUtPmxvY2ssIExXX0VYQ0xV U0lWRSk7Ci0JCXBnc2FfZW50cnlfZHNoYXNoX3BhcmFtZXRlcnMudHJhbmNoZV9pZCA9IHBnc2Ff c3RhdGUtPmVudHJ5X3RyYW5jaGU7Ci0JCWVudHJ5X2hhbmRsZSA9IHBnc2Ffc3RhdGUtPmVudHJ5 X2hhc2g7Ci0JCWlmIChlbnRyeV9oYW5kbGUgPT0gRFNIQVNIX0hBTkRMRV9JTlZBTElEKQotCQl7 Ci0JCQlwZ3NhX2VudHJ5X2RzaGFzaCA9IGRzaGFzaF9jcmVhdGUocGdzYV9kc2FfYXJlYSwKLQkJ CQkJCQkJCQkJICAmcGdzYV9lbnRyeV9kc2hhc2hfcGFyYW1ldGVycywKLQkJCQkJCQkJCQkJICBO VUxMKTsKLQkJCXBnc2Ffc3RhdGUtPmVudHJ5X2hhc2ggPQotCQkJCWRzaGFzaF9nZXRfaGFzaF90 YWJsZV9oYW5kbGUocGdzYV9lbnRyeV9kc2hhc2gpOwotCQkJTFdMb2NrUmVsZWFzZSgmcGdzYV9z dGF0ZS0+bG9jayk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlMV0xvY2tSZWxlYXNlKCZwZ3NhX3N0 YXRlLT5sb2NrKTsKLQkJCXBnc2FfZW50cnlfZHNoYXNoID0gZHNoYXNoX2F0dGFjaChwZ3NhX2Rz YV9hcmVhLAotCQkJCQkJCQkJCQkgICZwZ3NhX2VudHJ5X2RzaGFzaF9wYXJhbWV0ZXJzLAotCQkJ CQkJCQkJCQkgIGVudHJ5X2hhbmRsZSwgTlVMTCk7Ci0JCX0KLQl9Ci0KLQkvKiBSZXN0b3JlIHBy ZXZpb3VzIG1lbW9yeSBjb250ZXh0LiAqLwotCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250 ZXh0KTsKKwkJcGdzYV9lbnRyeV9kc2hhc2ggPSBHZXROYW1lZERTSGFzaCgicGdfc3Rhc2hfYWR2 aWNlX2VudHJ5IiwKKwkJCQkJCQkJCQkgICAmcGdzYV9lbnRyeV9kc2hhc2hfcGFyYW1ldGVycywK KwkJCQkJCQkJCQkgICAmZm91bmQpOwogfQogCiAvKgpAQCAtNzg5LDEzICs3MDksNyBAQCBwZ3Nh X2luaXRfc2hhcmVkX3N0YXRlKHZvaWQgKnB0ciwgdm9pZCAqYXJnKQogCiAJTFdMb2NrSW5pdGlh bGl6ZSgmc3RhdGUtPmxvY2ssCiAJCQkJCSBMV0xvY2tOZXdUcmFuY2hlSWQoInBnX3N0YXNoX2Fk dmljZV9sb2NrIikpOwotCXN0YXRlLT5kc2FfdHJhbmNoZSA9IExXTG9ja05ld1RyYW5jaGVJZCgi cGdfc3Rhc2hfYWR2aWNlX2RzYSIpOwotCXN0YXRlLT5zdGFzaF90cmFuY2hlID0gTFdMb2NrTmV3 VHJhbmNoZUlkKCJwZ19zdGFzaF9hZHZpY2Vfc3Rhc2giKTsKLQlzdGF0ZS0+ZW50cnlfdHJhbmNo ZSA9IExXTG9ja05ld1RyYW5jaGVJZCgicGdfc3Rhc2hfYWR2aWNlX2VudHJ5Iik7CiAJc3RhdGUt Pm5leHRfc3Rhc2hfaWQgPSBVSU5UNjRDT05TVCgxKTsKLQlzdGF0ZS0+YXJlYSA9IERTQV9IQU5E TEVfSU5WQUxJRDsKLQlzdGF0ZS0+c3Rhc2hfaGFzaCA9IERTSEFTSF9IQU5ETEVfSU5WQUxJRDsK LQlzdGF0ZS0+ZW50cnlfaGFzaCA9IERTSEFTSF9IQU5ETEVfSU5WQUxJRDsKIH0KIAogLyoKLS0g CjIuNDcuMQoK --00000000000084c2c3064e6046f2--