Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pA5l2-0003mb-Bt for pgsql-hackers@arkaria.postgresql.org; Tue, 27 Dec 2022 08:56:24 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pA5l0-0006US-BQ for pgsql-hackers@arkaria.postgresql.org; Tue, 27 Dec 2022 08:56:22 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pA5ky-0006U9-SY for pgsql-hackers@lists.postgresql.org; Tue, 27 Dec 2022 08:56:22 +0000 Received: from wnew2-smtp.messagingengine.com ([64.147.123.27]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pA5ku-00044M-8A for pgsql-hackers@postgresql.org; Tue, 27 Dec 2022 08:56:19 +0000 Received: from compute2.internal (compute2.nyi.internal [10.202.2.46]) by mailnew.west.internal (Postfix) with ESMTP id 2FB052B0670D for ; Tue, 27 Dec 2022 03:56:14 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute2.internal (MEProxy); Tue, 27 Dec 2022 03:56:14 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:date:feedback-id :feedback-id:from:from:in-reply-to:message-id:mime-version :reply-to:sender:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; t=1672131373; x= 1672138573; bh=nS4tvQ2IkxGq/IzrcTXP7Y82l7+uf3ijqEG+KdQGM58=; b=b Ba1P7oQHHbzj/R5nXo/gcL1Og7Y8Wdh08ZnnPongRhPIXJYj5DbQkLaNneE2q96Q TpPbrSvCCwziTxKpfqeLahKWv6IHpUS8nvaxc0SlQcwUsQuiBr0axt3RxDhluI0R om22yV8PDXIdebBvjXPNC9DzOMzfEYFxzWq10THEiNC3zsED6IEoKHI/BcdCUcII qu8Gv3rUsEM6+mKa/BfHU7hwbf954ApBvlpyy3XD18VP6lv3CyOHQgHKfyrf9HUv p5L+JH9EPnyKOC2TAfdMZmKy2G2Tp1oqjwbCU86NYpPO1E3SkWlVjGoIE8l5UobX AyGVpFqpcjp+Yz6yhZZWA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedrheelgdduvdeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpegtkfffgggfhffuvfesmhdtreertd efjeenucfhrhhomheprfgvthgvrhcugfhishgvnhhtrhgruhhtuceophgvthgvrhdrvghi shgvnhhtrhgruhhtsegvnhhtvghrphhrihhsvggusgdrtghomheqnecuggftrfgrthhtvg hrnhepieejveeiudeuheduhedutdffieejjeetieejhefhveeufedtffejieelhfelkeff necuffhomhgrihhnpehpohhsthhgrhgvshhqlhdrohhrghenucevlhhushhtvghrufhiii gvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehpvghtvghrrdgvihhsvghnthhrrghu thesvghnthgvrhhprhhishgvuggsrdgtohhm X-ME-Proxy: Feedback-ID: i131946ab:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Tue, 27 Dec 2022 03:56:12 -0500 (EST) Content-Type: multipart/mixed; boundary="------------NDKUdRSloiY1HBEjt0rU5z5T" Message-ID: <504bc485-6bd6-dd1b-fe10-e7351aeb310d@enterprisedb.com> Date: Tue, 27 Dec 2022 09:56:10 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.6.0 Content-Language: en-US From: Peter Eisentraut Subject: Refactor recordExtObjInitPriv() To: pgsql-hackers 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. --------------NDKUdRSloiY1HBEjt0rU5z5T Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Another aclchk.c refactoring patch, similar to [0] and [1]. Refactor recordExtObjInitPriv(): Instead of half a dozen of mostly-duplicate conditional branches, write one common one that can handle most catalogs. We already have all the information we need, such as which system catalog corresponds to which catalog table and which column is the ACL column. [0]: https://www.postgresql.org/message-id/95c30f96-4060-2f48-98b5-a4392d3b6066@enterprisedb.com [1]: https://www.postgresql.org/message-id/flat/22c7e802-4e7d-8d87-8b71-cba95e6f4bcf%40enterprisedb.com --------------NDKUdRSloiY1HBEjt0rU5z5T Content-Type: text/plain; charset=UTF-8; name="0001-Refactor-recordExtObjInitPriv.patch" Content-Disposition: attachment; filename="0001-Refactor-recordExtObjInitPriv.patch" Content-Transfer-Encoding: base64 RnJvbSAyOTgyMzgwOTg3MDY2ZDQzZTRkMzVkYjIxNTdmOTg0OThhMmEzMTg1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogVHVlLCAyNyBEZWMgMjAyMiAwOTozODo1NCArMDEwMApTdWJqZWN0 OiBbUEFUQ0hdIFJlZmFjdG9yIHJlY29yZEV4dE9iakluaXRQcml2KCkKCkluc3RlYWQgb2Yg aGFsZiBhIGRvemVuIG9mIG1vc3RseS1kdXBsaWNhdGUgY29uZGl0aW9uYWwgYnJhbmNoZXMs CndyaXRlIG9uZSBjb21tb24gb25lIHRoYXQgY2FuIGhhbmRsZSBtb3N0IGNhdGFsb2dzLiAg V2UgYWxyZWFkeSBoYXZlCmFsbCB0aGUgaW5mb3JtYXRpb24gd2UgbmVlZCwgc3VjaCBhcyB3 aGljaCBzeXN0ZW0gY2F0YWxvZyBjb3JyZXNwb25kcwp0byB3aGljaCBjYXRhbG9nIHRhYmxl IGFuZCB3aGljaCBjb2x1bW4gaXMgdGhlIEFDTCBjb2x1bW4uCi0tLQogc3JjL2JhY2tlbmQv Y2F0YWxvZy9hY2xjaGsuYyB8IDE1MyArKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQogMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMTQ1IGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMgYi9zcmMvYmFj a2VuZC9jYXRhbG9nL2FjbGNoay5jCmluZGV4IGNkZmQ2Mzc4MTUuLmNmMTg0MDE0NDkgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMKKysrIGIvc3JjL2JhY2tl bmQvY2F0YWxvZy9hY2xjaGsuYwpAQCAtNDI0MSw5ICs0MjQxLDYgQEAgcmVjb3JkRGVwZW5k ZW5jeU9uTmV3QWNsKE9pZCBjbGFzc0lkLCBPaWQgb2JqZWN0SWQsIGludDMyIG9ianN1Yklk LAogICoKICAqIEZvciB0aGUgb2JqZWN0IHBhc3NlZCBpbiwgdGhpcyB3aWxsIHJlY29yZCBp dHMgQUNMIChpZiBhbnkpIGFuZCB0aGUgQUNMcyBvZgogICogYW55IHN1Yi1vYmplY3RzIChl ZzogY29sdW1ucykgaW50byBwZ19pbml0X3ByaXZzLgotICoKLSAqIEFueSBuZXcga2luZHMg b2Ygb2JqZWN0cyB3aGljaCBoYXZlIEFDTHMgYXNzb2NpYXRlZCB3aXRoIHRoZW0gYW5kIGNh biBiZQotICogYWRkZWQgdG8gYW4gZXh0ZW5zaW9uIHNob3VsZCBiZSBhZGRlZCB0byB0aGUg aWYtZWxzZSB0cmVlIGJlbG93LgogICovCiB2b2lkCiByZWNvcmRFeHRPYmpJbml0UHJpdihP aWQgb2Jqb2lkLCBPaWQgY2xhc3NvaWQpCkBAIC00MzM2LDc0ICs0MzMzLDYgQEAgcmVjb3Jk RXh0T2JqSW5pdFByaXYoT2lkIG9iam9pZCwgT2lkIGNsYXNzb2lkKQogCiAJCVJlbGVhc2VT eXNDYWNoZSh0dXBsZSk7CiAJfQotCS8qIHBnX2ZvcmVpZ25fZGF0YV93cmFwcGVyICovCi0J ZWxzZSBpZiAoY2xhc3NvaWQgPT0gRm9yZWlnbkRhdGFXcmFwcGVyUmVsYXRpb25JZCkKLQl7 Ci0JCURhdHVtCQlhY2xEYXR1bTsKLQkJYm9vbAkJaXNOdWxsOwotCQlIZWFwVHVwbGUJdHVw bGU7Ci0KLQkJdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoRk9SRUlHTkRBVEFXUkFQUEVST0lE LAotCQkJCQkJCQlPYmplY3RJZEdldERhdHVtKG9iam9pZCkpOwotCQlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQodHVwbGUpKQotCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQg Zm9yIGZvcmVpZ24gZGF0YSB3cmFwcGVyICV1IiwKLQkJCQkgb2Jqb2lkKTsKLQotCQlhY2xE YXR1bSA9IFN5c0NhY2hlR2V0QXR0cihGT1JFSUdOREFUQVdSQVBQRVJPSUQsIHR1cGxlLAot CQkJCQkJCQkgICBBbnVtX3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVyX2Zkd2FjbCwKLQkJCQkJ CQkJICAgJmlzTnVsbCk7Ci0KLQkJLyogQWRkIHRoZSByZWNvcmQsIGlmIGFueSwgZm9yIHRo ZSB0b3AtbGV2ZWwgb2JqZWN0ICovCi0JCWlmICghaXNOdWxsKQotCQkJcmVjb3JkRXh0ZW5z aW9uSW5pdFByaXZXb3JrZXIob2Jqb2lkLCBjbGFzc29pZCwgMCwKLQkJCQkJCQkJCQkgIERh dHVtR2V0QWNsUChhY2xEYXR1bSkpOwotCi0JCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7Ci0J fQotCS8qIHBnX2ZvcmVpZ25fc2VydmVyICovCi0JZWxzZSBpZiAoY2xhc3NvaWQgPT0gRm9y ZWlnblNlcnZlclJlbGF0aW9uSWQpCi0JewotCQlEYXR1bQkJYWNsRGF0dW07Ci0JCWJvb2wJ CWlzTnVsbDsKLQkJSGVhcFR1cGxlCXR1cGxlOwotCi0JCXR1cGxlID0gU2VhcmNoU3lzQ2Fj aGUxKEZPUkVJR05TRVJWRVJPSUQsIE9iamVjdElkR2V0RGF0dW0ob2Jqb2lkKSk7Ci0JCWlm ICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCi0JCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3IgZm9yZWlnbiBzZXJ2ZXIgJXUiLAotCQkJCSBvYmpvaWQpOwotCi0J CWFjbERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKEZPUkVJR05TRVJWRVJPSUQsIHR1cGxlLAot CQkJCQkJCQkgICBBbnVtX3BnX2ZvcmVpZ25fc2VydmVyX3NydmFjbCwKLQkJCQkJCQkJICAg JmlzTnVsbCk7Ci0KLQkJLyogQWRkIHRoZSByZWNvcmQsIGlmIGFueSwgZm9yIHRoZSB0b3At bGV2ZWwgb2JqZWN0ICovCi0JCWlmICghaXNOdWxsKQotCQkJcmVjb3JkRXh0ZW5zaW9uSW5p dFByaXZXb3JrZXIob2Jqb2lkLCBjbGFzc29pZCwgMCwKLQkJCQkJCQkJCQkgIERhdHVtR2V0 QWNsUChhY2xEYXR1bSkpOwotCi0JCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7Ci0JfQotCS8q IHBnX2xhbmd1YWdlICovCi0JZWxzZSBpZiAoY2xhc3NvaWQgPT0gTGFuZ3VhZ2VSZWxhdGlv bklkKQotCXsKLQkJRGF0dW0JCWFjbERhdHVtOwotCQlib29sCQlpc051bGw7Ci0JCUhlYXBU dXBsZQl0dXBsZTsKLQotCQl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShMQU5HT0lELCBPYmpl Y3RJZEdldERhdHVtKG9iam9pZCkpOwotCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUp KQotCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGxhbmd1YWdlICV1 Iiwgb2Jqb2lkKTsKLQotCQlhY2xEYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihMQU5HT0lELCB0 dXBsZSwgQW51bV9wZ19sYW5ndWFnZV9sYW5hY2wsCi0JCQkJCQkJCSAgICZpc051bGwpOwot Ci0JCS8qIEFkZCB0aGUgcmVjb3JkLCBpZiBhbnksIGZvciB0aGUgdG9wLWxldmVsIG9iamVj dCAqLwotCQlpZiAoIWlzTnVsbCkKLQkJCXJlY29yZEV4dGVuc2lvbkluaXRQcml2V29ya2Vy KG9iam9pZCwgY2xhc3NvaWQsIDAsCi0JCQkJCQkJCQkJICBEYXR1bUdldEFjbFAoYWNsRGF0 dW0pKTsKLQotCQlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOwotCX0KIAkvKiBwZ19sYXJnZW9i amVjdF9tZXRhZGF0YSAqLwogCWVsc2UgaWYgKGNsYXNzb2lkID09IExhcmdlT2JqZWN0TWV0 YWRhdGFSZWxhdGlvbklkKQogCXsKQEAgLTQ0NDYsNjAgKzQzNzUsMjEgQEAgcmVjb3JkRXh0 T2JqSW5pdFByaXYoT2lkIG9iam9pZCwgT2lkIGNsYXNzb2lkKQogCiAJCXN5c3RhYmxlX2Vu ZHNjYW4oc2Nhbik7CiAJfQotCS8qIHBnX25hbWVzcGFjZSAqLwotCWVsc2UgaWYgKGNsYXNz b2lkID09IE5hbWVzcGFjZVJlbGF0aW9uSWQpCisJLyogVGhpcyB3aWxsIGVycm9yIG9uIHVu c3VwcG9ydGVkIGNsYXNzb2lkLiAqLworCWVsc2UgaWYgKGdldF9vYmplY3RfYXR0bnVtX2Fj bChjbGFzc29pZCkpCiAJewogCQlEYXR1bQkJYWNsRGF0dW07CiAJCWJvb2wJCWlzTnVsbDsK IAkJSGVhcFR1cGxlCXR1cGxlOwogCi0JCXR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKE5BTUVT UEFDRU9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmpvaWQpKTsKLQkJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKHR1cGxlKSkKLQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciBzY2hlbWEgJXUiLCBvYmpvaWQpOwotCi0JCWFjbERhdHVtID0gU3lzQ2FjaGVHZXRBdHRy KE5BTUVTUEFDRU9JRCwgdHVwbGUsCi0JCQkJCQkJCSAgIEFudW1fcGdfbmFtZXNwYWNlX25z cGFjbCwgJmlzTnVsbCk7Ci0KLQkJLyogQWRkIHRoZSByZWNvcmQsIGlmIGFueSwgZm9yIHRo ZSB0b3AtbGV2ZWwgb2JqZWN0ICovCi0JCWlmICghaXNOdWxsKQotCQkJcmVjb3JkRXh0ZW5z aW9uSW5pdFByaXZXb3JrZXIob2Jqb2lkLCBjbGFzc29pZCwgMCwKLQkJCQkJCQkJCQkgIERh dHVtR2V0QWNsUChhY2xEYXR1bSkpOwotCi0JCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7Ci0J fQotCS8qIHBnX3Byb2MgKi8KLQllbHNlIGlmIChjbGFzc29pZCA9PSBQcm9jZWR1cmVSZWxh dGlvbklkKQotCXsKLQkJRGF0dW0JCWFjbERhdHVtOwotCQlib29sCQlpc051bGw7Ci0JCUhl YXBUdXBsZQl0dXBsZTsKLQotCQl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBP YmplY3RJZEdldERhdHVtKG9iam9pZCkpOwotCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVw bGUpKQotCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGZ1bmN0aW9u ICV1Iiwgb2Jqb2lkKTsKLQotCQlhY2xEYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lE LCB0dXBsZSwgQW51bV9wZ19wcm9jX3Byb2FjbCwKLQkJCQkJCQkJICAgJmlzTnVsbCk7Ci0K LQkJLyogQWRkIHRoZSByZWNvcmQsIGlmIGFueSwgZm9yIHRoZSB0b3AtbGV2ZWwgb2JqZWN0 ICovCi0JCWlmICghaXNOdWxsKQotCQkJcmVjb3JkRXh0ZW5zaW9uSW5pdFByaXZXb3JrZXIo b2Jqb2lkLCBjbGFzc29pZCwgMCwKLQkJCQkJCQkJCQkgIERhdHVtR2V0QWNsUChhY2xEYXR1 bSkpOwotCi0JCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7Ci0JfQotCS8qIHBnX3R5cGUgKi8K LQllbHNlIGlmIChjbGFzc29pZCA9PSBUeXBlUmVsYXRpb25JZCkKLQl7Ci0JCURhdHVtCQlh Y2xEYXR1bTsKLQkJYm9vbAkJaXNOdWxsOwotCQlIZWFwVHVwbGUJdHVwbGU7Ci0KLQkJdHVw bGUgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmpvaWQp KTsKKwkJdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoZ2V0X29iamVjdF9jYXRjYWNoZV9vaWQo Y2xhc3NvaWQpLAorCQkJCQkJCQlPYmplY3RJZEdldERhdHVtKG9iam9pZCkpOwogCQlpZiAo IUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQotCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIHR5cGUgJXUiLCBvYmpvaWQpOworCQkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yICVzICV1IiwKKwkJCQkgZ2V0X29iamVjdF9jbGFzc19kZXNj cihjbGFzc29pZCksIG9iam9pZCk7CiAKLQkJYWNsRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIo VFlQRU9JRCwgdHVwbGUsIEFudW1fcGdfdHlwZV90eXBhY2wsCisJCWFjbERhdHVtID0gU3lz Q2FjaGVHZXRBdHRyKGdldF9vYmplY3RfY2F0Y2FjaGVfb2lkKGNsYXNzb2lkKSwgdHVwbGUs CisJCQkJCQkJCSAgIGdldF9vYmplY3RfYXR0bnVtX2FjbChjbGFzc29pZCksCiAJCQkJCQkJ CSAgICZpc051bGwpOwogCiAJCS8qIEFkZCB0aGUgcmVjb3JkLCBpZiBhbnksIGZvciB0aGUg dG9wLWxldmVsIG9iamVjdCAqLwpAQCAtNDUwOSwzMyArNDM5OSw2IEBAIHJlY29yZEV4dE9i akluaXRQcml2KE9pZCBvYmpvaWQsIE9pZCBjbGFzc29pZCkKIAogCQlSZWxlYXNlU3lzQ2Fj aGUodHVwbGUpOwogCX0KLQllbHNlIGlmIChjbGFzc29pZCA9PSBBY2Nlc3NNZXRob2RSZWxh dGlvbklkIHx8Ci0JCQkgY2xhc3NvaWQgPT0gQWdncmVnYXRlUmVsYXRpb25JZCB8fAotCQkJ IGNsYXNzb2lkID09IENhc3RSZWxhdGlvbklkIHx8Ci0JCQkgY2xhc3NvaWQgPT0gQ29sbGF0 aW9uUmVsYXRpb25JZCB8fAotCQkJIGNsYXNzb2lkID09IENvbnZlcnNpb25SZWxhdGlvbklk IHx8Ci0JCQkgY2xhc3NvaWQgPT0gRXZlbnRUcmlnZ2VyUmVsYXRpb25JZCB8fAotCQkJIGNs YXNzb2lkID09IE9wZXJhdG9yUmVsYXRpb25JZCB8fAotCQkJIGNsYXNzb2lkID09IE9wZXJh dG9yQ2xhc3NSZWxhdGlvbklkIHx8Ci0JCQkgY2xhc3NvaWQgPT0gT3BlcmF0b3JGYW1pbHlS ZWxhdGlvbklkIHx8Ci0JCQkgY2xhc3NvaWQgPT0gVFNDb25maWdSZWxhdGlvbklkIHx8Ci0J CQkgY2xhc3NvaWQgPT0gVFNEaWN0aW9uYXJ5UmVsYXRpb25JZCB8fAotCQkJIGNsYXNzb2lk ID09IFRTUGFyc2VyUmVsYXRpb25JZCB8fAotCQkJIGNsYXNzb2lkID09IFRTVGVtcGxhdGVS ZWxhdGlvbklkIHx8Ci0JCQkgY2xhc3NvaWQgPT0gVHJhbnNmb3JtUmVsYXRpb25JZAotCQkp Ci0JewotCQkvKiBubyBBQ0wgZm9yIHRoZXNlIG9iamVjdCB0eXBlcywgc28gZG8gbm90aGlu Zy4gKi8KLQl9Ci0KLQkvKgotCSAqIGNvbXBsYWluIGlmIHdlIGFyZSBnaXZlbiBhIGNsYXNz IE9JRCBmb3IgYSBjbGFzcyB0aGF0IGV4dGVuc2lvbnMgZG9uJ3QKLQkgKiBzdXBwb3J0IG9y IHRoYXQgd2UgZG9uJ3QgcmVjb2duaXplLgotCSAqLwotCWVsc2UKLQl7Ci0JCWVsb2coRVJS T1IsICJ1bnJlY29nbml6ZWQgb3IgdW5zdXBwb3J0ZWQgY2xhc3MgT0lEOiAldSIsIGNsYXNz b2lkKTsKLQl9CiB9CiAKIC8qCi0tIAoyLjM5LjAKCg== --------------NDKUdRSloiY1HBEjt0rU5z5T--