Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tqAyH-000eZy-U1 for pgsql-hackers@arkaria.postgresql.org; Thu, 06 Mar 2025 13:09:06 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tqAyG-00AtwQ-It for pgsql-hackers@arkaria.postgresql.org; Thu, 06 Mar 2025 13:09:04 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tqAyG-00Atw7-7B for pgsql-hackers@lists.postgresql.org; Thu, 06 Mar 2025 13:09:04 +0000 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tqAyC-001Idy-2s for pgsql-hackers@postgresql.org; Thu, 06 Mar 2025 13:09:03 +0000 Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-43bcc85ba13so4919635e9.0 for ; Thu, 06 Mar 2025 05:09:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741266541; x=1741871341; darn=postgresql.org; h=to:subject:from:content-language:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=LNprq2OHRbx6F26rY3GhAlp32VOdv5zZDQsK+bbfKtQ=; b=mtbLni0dq+EQer0x7wjj+q6llrHZ+1aPvyZxBj+PmSnNd3lLxH7n6J4KUerAuVGHWB hiZSBpuBe/a/eH+5e962WPy22DN5C0SHKCXZXHBCOie3B3l8TAyk9VnFbT/0ZF9mSaoI yeyUOoEvgtw14fTLbxPvweVw25mUO8gOIc0F95VDuRb4Om7z71M1Ye9/ILMHxeh29iFO cHZ9GqSTiLTYAmFGjXSeq4oEwC9aDzK9SaC4owv3SHKSsD+zGiZEHTFuDLAejT8waTOT wQNIAK4v05gQvC9NdcdSFrjmnOgRhJ/Q8b5RkrWZ1PgZHAaJ4juRyQvC4J2X/ITnvVp6 +2Lg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741266541; x=1741871341; h=to:subject:from:content-language:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=LNprq2OHRbx6F26rY3GhAlp32VOdv5zZDQsK+bbfKtQ=; b=Kr5v9JZ+8l+C538zDd6b2dgfhR2MQmSRSZHNhpvcNnLLo3uzBB2J/bgKdm23rwens3 7gEqt8z/Tqrlndlv2NsKfyijPF4hRkz4p1CA8yFbjxzInDXUdtrzDEmUBY+EDZYXMloz 8Cd0jxFim0UBoisWrrrXicXwdJS/XGBZUJswKQFmSeRv0LHrxd0qR7RfW1DfCQ9iNP+B younCeDfFKhuTh4CRVAj0vfupR9bpmBH46bzWANX3PmAFUSL57Myf6mZmIesxgpylMnv N1f/NbvSwcMJ1tVj0bEpGH2NAzKHnw5Fj80uDcJObordFB80zrh8Qwr+Exew2bTlaJjC 6bMQ== X-Gm-Message-State: AOJu0YyBN0BI9SMG89N7g6PpMbpmC4MRg7FARYVLum3kTkFLahwc5JLq 5wyJJUyW+wHMCMkihkXnBuGLfQ/H1+FthCqmJ1cAva9INRD+Q5vkkUfAeQ== X-Gm-Gg: ASbGncs2Ctq60w8KF0ZqUZ722UOremu20vim2Bs2nGE5hss+fgSiq3bLfxZo4DNqMGt FMOHorzrgEqlsKrzGE3hRzpeNMANc/2JqDZikML9ixPQq8ruWXGjCpVL07wTEyZjYCLpW4Uru7r a85X3dLYytIHo4s2mnzmMXY+chp98euWKHURmtbDmVmeJs32iFFLzAZ9zvc+8T+MACQN452Jl2E Acccy4yRjm723FC4RqizKuwABLtS4LN7HEwSZpkN9tsu3UYD8vFW0GdxH0z4/Uoknw7Gnlpdzw9 NjBrFURLR9FR9ziXxqkWILMtfJacFmcdmbwRR2IVRjTAPZWXO2cTxFxI7Z0UJ7GB+XK9Xzt/VAf E/7KgOxdQ6ShcuVI= X-Google-Smtp-Source: AGHT+IEUhCtM/f3tPPnC1xcnN9O/wZpg8pdOtb1ukkiD3Gza3vCF5Xhj3PMu8QqWchHtFKULjEQlfQ== X-Received: by 2002:a05:600c:3543:b0:439:34dd:c3cc with SMTP id 5b1f17b1804b1-43bd2adb1ffmr48869365e9.22.1741266540915; Thu, 06 Mar 2025 05:09:00 -0800 (PST) Received: from [192.168.0.211] (84.123.232.230.dyn.user.ono.com. [84.123.232.230]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43bd42c55f2sm49679825e9.20.2025.03.06.05.09.00 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 06 Mar 2025 05:09:00 -0800 (PST) Content-Type: multipart/mixed; boundary="------------QYrFymrYXNvf8rG6SFY8kYkO" Message-ID: <60bf8d26-7c7e-4915-b544-afdb9020011d@gmail.com> Date: Thu, 6 Mar 2025 14:08:59 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US From: Andrei Lepikhov Subject: Memoize ANTI and SEMI JOIN inner To: PostgreSQL-development List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------QYrFymrYXNvf8rG6SFY8kYkO Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, In case of NestLoop with parameterised inner semi-join for each outer tuple requires only a single tuple from its inner relation to produce a result. It seems that the same principle applies to an anti-join. This approach could effectively allow the Memoize node to enhance the performance of pulled-up EXISTS and NOT EXISTS sublinks. In attachment see a sketch of the feature. Since we are using single_row mode, adapting this method to cache semi-join inner results should not be extremely complex. However, I am unsure about potential corner cases and would appreciate any feedback or criticisms regarding this approach. -- regards, Andrei Lepikhov --------------QYrFymrYXNvf8rG6SFY8kYkO Content-Type: text/plain; charset=UTF-8; name="v0-0001-Memoise-the-inner-of-SEMI-and-ANTI-join.patch" Content-Disposition: attachment; filename="v0-0001-Memoise-the-inner-of-SEMI-and-ANTI-join.patch" Content-Transfer-Encoding: base64 RnJvbSBlNDdhYmRlMWY2YTJjOGM4ZDdmYTU4OGRmNzJlNTljMGNkMDQ5ZDRjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmVpIFYuIExlcGlraG92IiA8bGVwaWhvdkBn bWFpbC5jb20+CkRhdGU6IFdlZCwgMjUgRGVjIDIwMjQgMTQ6MzM6MTIgKzA3MDAKU3ViamVj dDogW1BBVENIIHYwXSBNZW1vaXNlIHRoZSBpbm5lciBvZiBTRU1JLSBhbmQgQU5USS1qb2lu LgoKVG8gZ2V0IHRoZSByZXN1bHQgb2Ygc2VtaS1qb2luIG9yIGFudGktam9pbiwgd2Ugb25s eSBuZWVkIG9uZSB0dXBsZSBmcm9tCnRoZSBwYXJhbWV0ZXJpc2VkIGlubmVyLiBUaGUgUG9z dGdyZXMgY29yZSBhbHJlYWR5IGluY2x1ZGVzIE1lbW9pemUncwpzaW5nbGVfcm93IG1vZGUg Zm9yIHRoZSBjYXNlIHdoZW4gaXQgaXMgcHJvdmVkIHRoYXQgaW5uZXIgcmV0dXJucyBvbmx5 IGEgc2luZ2xlCnZhbHVlLiBUaHVzLCBpbXBsZW1lbnRpbmcgc2ltaWxhciBsb2dpYyBmb3Ig c2VtaS1qb2lucyBhbmQgYW50aS1qb2lucyBpcwpxdWl0ZSBmZWFzaWJsZS4KCkl0IGlzIGNs ZWFyIHRoYXQgdGhlIHNlbWktam9pbiBvcGVyYXRlcyBjb3JyZWN0bHk6IGl0IHJldHVybnMg dGhlIG91dGVyIHR1cGxlCmFzIHNvb24gYXMgdGhlIGZpcnN0IHR1cGxlIGlzIHJlY2VpdmVk IGZyb20gdGhlIGlubmVyIHF1ZXJ5LiBJbiBjb250cmFzdCwgdGhlCmJlaGF2aW91ciBvZiB0 aGUgYW50aS1qb2luIGlzIGxlc3Mgc3RyYWlnaHRmb3J3YXJkLiBJZiBhbnRpLWpvaW4gaGFk IGEgam9pbgpjbGF1c2Ugbm90IHB1c2hlZCB0byB0aGUgcGFyYW1ldGVyaXNlZCBpbm5lciwg aXQgd291bGQgYmUgcG9zc2libGUgdG8gcmVhZCBtb3JlCnRoYW4gYSBzaW5nbGUgdHVwbGUg ZnJvbSB0aGUgaW5uZXIsIHdoaWNoIGNhdXNlcyBpbmNvbnNpc3RlbmN5LiBIb3dldmVyLApp dCBzZWVtcyB0aGF0IHRoaXMgaXMgYW4gaW1wb3NzaWJsZSBjYXNlIGZvciB0aGUgY3VycmVu dCBwbGFubmVyLgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAgICAg ICB8IDkgKysrKysrKysrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5j ICAgfCAyICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jICAgfCA1 ICsrKy0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jICAgfCAyICst CiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0ICAgICAgfCAzICsrLQogc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzZWxlY3Qub3V0IHwgMyArKy0KIDYgZmlsZXMg Y2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9leHBsYWluLmMKaW5kZXggZDhhNzIzMmNlZGIuLmM5MDA2N2RhZGNiIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvZXhwbGFpbi5jCkBAIC0zNjMyLDYgKzM2MzIsMTAgQEAgc2hvd19tZW1vaXplX2lu Zm8oTWVtb2l6ZVN0YXRlICptc3RhdGUsIExpc3QgKmFuY2VzdG9ycywgRXhwbGFpblN0YXRl ICplcykKIAl7CiAJCUV4cGxhaW5Qcm9wZXJ0eVRleHQoIkNhY2hlIEtleSIsIGtleXN0ci5k YXRhLCBlcyk7CiAJCUV4cGxhaW5Qcm9wZXJ0eVRleHQoIkNhY2hlIE1vZGUiLCBtc3RhdGUt PmJpbmFyeV9tb2RlID8gImJpbmFyeSIgOiAibG9naWNhbCIsIGVzKTsKKworCQkvKiBSZXBv cnQgb25seSBpbiB0aGUgc2luZ2xlIG1vZGUgY2FzZSB0byBub3QgYnJlYWsgY3VycmVudCB0 ZXN0cyAqLworCQlpZiAobXN0YXRlLT5zaW5nbGVyb3cpCisJCQlFeHBsYWluUHJvcGVydHlU ZXh0KCJTdG9yZSBNb2RlIiwgInNpbmdsZXJvdyIsIGVzKTsKIAl9CiAJZWxzZQogCXsKQEAg LTM2MzksNiArMzY0MywxMSBAQCBzaG93X21lbW9pemVfaW5mbyhNZW1vaXplU3RhdGUgKm1z dGF0ZSwgTGlzdCAqYW5jZXN0b3JzLCBFeHBsYWluU3RhdGUgKmVzKQogCQlhcHBlbmRTdHJp bmdJbmZvKGVzLT5zdHIsICJDYWNoZSBLZXk6ICVzXG4iLCBrZXlzdHIuZGF0YSk7CiAJCUV4 cGxhaW5JbmRlbnRUZXh0KGVzKTsKIAkJYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3RyLCAiQ2Fj aGUgTW9kZTogJXNcbiIsIG1zdGF0ZS0+YmluYXJ5X21vZGUgPyAiYmluYXJ5IiA6ICJsb2dp Y2FsIik7CisJCWlmIChtc3RhdGUtPnNpbmdsZXJvdykKKwkJeworCQkJRXhwbGFpbkluZGVu dFRleHQoZXMpOworCQkJYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3RyLCAiU3RvcmUgTW9kZTog JXNcbiIsICJzaW5nbGVyb3ciKTsKKwkJfQogCX0KIAogCXBmcmVlKGtleXN0ci5kYXRhKTsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCmluZGV4IDczZDc4NjE3MDA5 Li40Y2NhNWE3Mzk1YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv Y29zdHNpemUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5j CkBAIC0yNTQ1LDcgKzI1NDUsNyBAQCBjb3N0X21lbW9pemVfcmVzY2FuKFBsYW5uZXJJbmZv ICpyb290LCBNZW1vaXplUGF0aCAqbXBhdGgsCiAJTGlzdENlbGwgICAqbGM7CiAJQ29zdAkJ aW5wdXRfc3RhcnR1cF9jb3N0ID0gbXBhdGgtPnN1YnBhdGgtPnN0YXJ0dXBfY29zdDsKIAlD b3N0CQlpbnB1dF90b3RhbF9jb3N0ID0gbXBhdGgtPnN1YnBhdGgtPnRvdGFsX2Nvc3Q7Ci0J ZG91YmxlCQl0dXBsZXMgPSBtcGF0aC0+c3VicGF0aC0+cm93czsKKwlkb3VibGUJCXR1cGxl cyA9IG1wYXRoLT5zaW5nbGVyb3cgPyAxIDogbXBhdGgtPnN1YnBhdGgtPnJvd3M7CiAJZG91 YmxlCQljYWxscyA9IG1wYXRoLT5jYWxsczsKIAlpbnQJCQl3aWR0aCA9IG1wYXRoLT5zdWJw YXRoLT5wYXRodGFyZ2V0LT53aWR0aDsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvam9pbnBhdGguYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pv aW5wYXRoLmMKaW5kZXggMTg4OTFjZTkxNTYuLjg5NzM4YjQ4M2VmIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jCisrKyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2pvaW5wYXRoLmMKQEAgLTY4Miw2ICs2ODIsNyBAQCBnZXRfbWVt b2l6ZV9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICppbm5lcnJlbCwKIAlM aXN0Q2VsbCAgICpsYzsKIAlib29sCQliaW5hcnlfbW9kZTsKIAlMaXN0CSAgICpwaF9sYXRl cmFsX3ZhcnM7CisJYm9vbAkJc2luZ2xlX21vZGUgPSBmYWxzZTsKIAogCS8qIE9idmlvdXNs eSBub3QgaWYgaXQncyBkaXNhYmxlZCAqLwogCWlmICghZW5hYmxlX21lbW9pemUpCkBAIC03 MjUsNyArNzI2LDcgQEAgZ2V0X21lbW9pemVfcGF0aChQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqaW5uZXJyZWwsCiAJICovCiAJaWYgKCFleHRyYS0+aW5uZXJfdW5pcXVlICYm IChqb2ludHlwZSA9PSBKT0lOX1NFTUkgfHwKIAkJCQkJCQkJIGpvaW50eXBlID09IEpPSU5f QU5USSkpCi0JCXJldHVybiBOVUxMOworCQlzaW5nbGVfbW9kZSA9IHRydWU7CiAKIAkvKgog CSAqIE1lbW9pemUgbm9ybWFsbHkgbWFya3MgY2FjaGUgZW50cmllcyBhcyBjb21wbGV0ZSB3 aGVuIGl0IHJ1bnMgb3V0IG9mCkBAIC04MDgsNyArODA5LDcgQEAgZ2V0X21lbW9pemVfcGF0 aChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCiAJCQkJCQkJCQkJ CWlubmVyX3BhdGgsCiAJCQkJCQkJCQkJCXBhcmFtX2V4cHJzLAogCQkJCQkJCQkJCQloYXNo X29wZXJhdG9ycywKLQkJCQkJCQkJCQkJZXh0cmEtPmlubmVyX3VuaXF1ZSwKKwkJCQkJCQkJ CQkJZXh0cmEtPmlubmVyX3VuaXF1ZSB8fCBzaW5nbGVfbW9kZSwKIAkJCQkJCQkJCQkJYmlu YXJ5X21vZGUsCiAJCQkJCQkJCQkJCW91dGVyX3BhdGgtPnJvd3MpOwogCX0KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCmluZGV4IDkzZTczY2I0NGRiLi45YjRjMGY5 NjE5MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUu YworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCkBAIC0xNzA3 LDcgKzE3MDcsNyBAQCBjcmVhdGVfbWVtb2l6ZV9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpyZWwsIFBhdGggKnN1YnBhdGgsCiAJICovCiAJcGF0aG5vZGUtPnBhdGgu c3RhcnR1cF9jb3N0ID0gc3VicGF0aC0+c3RhcnR1cF9jb3N0ICsgY3B1X3R1cGxlX2Nvc3Q7 CiAJcGF0aG5vZGUtPnBhdGgudG90YWxfY29zdCA9IHN1YnBhdGgtPnRvdGFsX2Nvc3QgKyBj cHVfdHVwbGVfY29zdDsKLQlwYXRobm9kZS0+cGF0aC5yb3dzID0gc3VicGF0aC0+cm93czsK KwlwYXRobm9kZS0+cGF0aC5yb3dzID0gKHBhdGhub2RlLT5zaW5nbGVyb3cpID8gMSA6IHN1 YnBhdGgtPnJvd3M7CiAKIAlyZXR1cm4gcGF0aG5vZGU7CiB9CmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9qb2luLm91dAppbmRleCBhNTdiYjE4YzI0Zi4uZTgyOTNjM2M4N2QgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9qb2luLm91dApAQCAtNjQ2OSwxMCArNjQ2OSwxMSBAQCBzZWxl Y3QgKiBmcm9tIHNqIHQxCiAgICAtPiAgTWVtb2l6ZQogICAgICAgICAgQ2FjaGUgS2V5OiB0 MS5hLCB0MS5iCiAgICAgICAgICBDYWNoZSBNb2RlOiBiaW5hcnkKKyAgICAgICAgIFN0b3Jl IE1vZGU6IHNpbmdsZXJvdwogICAgICAgICAgLT4gIFNhbXBsZSBTY2FuIG9uIHNqCiAgICAg ICAgICAgICAgICBTYW1wbGluZzogc3lzdGVtICh0MS5iKQogICAgICAgICAgICAgICAgRmls dGVyOiAodDEuYSA9IGEpCi0oOCByb3dzKQorKDkgcm93cykKIAogLS0gRW5zdXJlIHRoYXQg U0pFIGRvZXMgbm90IGZvcm0gYSBzZWxmLXJlZmVyZW50aWFsIGxhdGVyYWwgZGVwZW5kZW5j eQogZXhwbGFpbiAoY29zdHMgb2ZmKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9zdWJzZWxlY3Qub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJz ZWxlY3Qub3V0CmluZGV4IGQwZGI4YTQxMmZmLi41YWI1NmY4ZDcxZiAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzZWxlY3Qub3V0CisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0Lm91dApAQCAtMjY0Miw2ICsyNjQyLDcgQEAg T04gQi5odW5kcmVkIGluIChTRUxFQ1QgbWluKGMuaHVuZHJlZCkgRlJPTSB0ZW5rMiBDIFdI RVJFIGMub2RkID0gYi5vZGQpOwogICAgICAgICAgICAgICAgLT4gIE1lbW9pemUKICAgICAg ICAgICAgICAgICAgICAgIENhY2hlIEtleTogYi5odW5kcmVkLCBiLm9kZAogICAgICAgICAg ICAgICAgICAgICAgQ2FjaGUgTW9kZTogYmluYXJ5CisgICAgICAgICAgICAgICAgICAgICBT dG9yZSBNb2RlOiBzaW5nbGVyb3cKICAgICAgICAgICAgICAgICAgICAgIC0+ICBTdWJxdWVy eSBTY2FuIG9uICJBTllfc3VicXVlcnkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBG aWx0ZXI6IChiLmh1bmRyZWQgPSAiQU5ZX3N1YnF1ZXJ5Ii5taW4pCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAtPiAgUmVzdWx0CkBAIC0yNjUwLDUgKzI2NTEsNSBAQCBPTiBCLmh1 bmRyZWQgaW4gKFNFTEVDVCBtaW4oYy5odW5kcmVkKSBGUk9NIHRlbmsyIEMgV0hFUkUgYy5v ZGQgPSBiLm9kZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBJbmRleCBTY2FuIHVzaW5nIHRlbmsyX2h1bmRyZWQgb24gdGVuazIgYwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAo aHVuZHJlZCBJUyBOT1QgTlVMTCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmlsdGVyOiAob2RkID0gYi5vZGQpCi0oMTYgcm93cykKKygxNyBy b3dzKQogCi0tIAoyLjQ4LjEKCg== --------------QYrFymrYXNvf8rG6SFY8kYkO--