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 1vSW7e-00Gg7c-0P for pgsql-hackers@arkaria.postgresql.org; Mon, 08 Dec 2025 07:57:30 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vSW7b-00FSxY-2V for pgsql-hackers@arkaria.postgresql.org; Mon, 08 Dec 2025 07:57:28 +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 1vSW7a-00FSxO-2q for pgsql-hackers@lists.postgresql.org; Mon, 08 Dec 2025 07:57:27 +0000 Received: from fhigh-a6-smtp.messagingengine.com ([103.168.172.157]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vSW7X-003o8u-2R for pgsql-hackers@lists.postgresql.org; Mon, 08 Dec 2025 07:57:26 +0000 Received: from phl-compute-04.internal (phl-compute-04.internal [10.202.2.44]) by mailfhigh.phl.internal (Postfix) with ESMTP id 425E0140013F; Mon, 8 Dec 2025 02:57:20 -0500 (EST) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-04.internal (MEProxy); Mon, 08 Dec 2025 02:57:20 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=eisentraut.org; h=cc:content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1765180640; x=1765267040; bh=l0/nHYHGmQ cvHJsgwd/zIADh7Hv1RutVS3/aCL9OeMo=; b=GIP6+F4h000fQFgZgVu++abSNb KvERM+7YarbDTyF+6zQpsk+rd7+akOk8FgO0HK9vdMc7BNyNdjbOe0U6/nkH5rRN B/etrOFLADrGNgrnC0c9j2j0Pf7fHMYO8Ma++Gj6bx7zP26xubdtUKQAkOYsS9hI Q81D8seFMX2m1SXxJtrAkFaTOrxwwQpK4b2yoMyx//6fNCo2NLSaAOurGFw7Hui4 iihq8itWq947fYcnkm5S0sQlhTNo+2Dh3VPZqFNOR+793rqSxKZU4E1P6bG+Uj1m IibDrNrIBcLUClAKMBgG7ZcE9Dl5GFtGFW9oEC6O4ZRoPFye0amThy9n2roA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t= 1765180640; x=1765267040; bh=l0/nHYHGmQcvHJsgwd/zIADh7Hv1RutVS3/ aCL9OeMo=; b=QBCFn+3/HgS6AKZJiKnQr9h1WBvEUn8IxTG7R4KtAca64ywEWro lfZnA15184HeCB7uvj6U4ysS3dub5Epu809/ouWZydi7YV25kknuZ98PAhSk36D1 zsUEl89imasMjL4J5b+h55+kEyMnj0ZJ9F3YCsZxRGzQSP2mT2cXJMk7To2t9bv7 uVCAai6gAdouLZn2ShYKwARDFtFxbRAbKfBQGM7qU42GZTIXs2anwatFfdyXiOdx mJpwVIfVCANdiTFcCpPHg5FMpYleHPnEIDrz4Zv4rrE/fkvggxVCCvyvvf3ycN2R Xp42FHDwcv2NPHZNdKLoLuO+x1ykMEuwjWA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefgedrtddtgdduiedufecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpuffrtefokffrpgfnqfghnecuuegr ihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjug hrpegtkfffgggfuffvfhfhjgesmhdtreertddvjeenucfhrhhomheprfgvthgvrhcugfhi shgvnhhtrhgruhhtuceophgvthgvrhesvghishgvnhhtrhgruhhtrdhorhhgqeenucggtf frrghtthgvrhhnpeffgfdvgfefgeelgedvieelvedujefggeethfetkeethfektdehffdu heektdelgfenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhroh hmpehpvghtvghrsegvihhsvghnthhrrghuthdrohhrghdpnhgspghrtghpthhtohepfedp mhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepphhoshhtghhrvghssehjvghlthgvfh drnhhlpdhrtghpthhtohepphhgshhqlhdqhhgrtghkvghrsheslhhishhtshdrphhoshht ghhrvghsqhhlrdhorhhgpdhrtghpthhtohepthhhohhmrghsrdhmuhhnrhhosehgmhgrih hlrdgtohhm X-ME-Proxy: Feedback-ID: ie0a040ee:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 8 Dec 2025 02:57:19 -0500 (EST) Content-Type: multipart/mixed; boundary="------------mu7nze15FNx42wOnSTGmKOh5" Message-ID: <1bec56e5-aef9-4d3b-b4ee-723c6575a44e@eisentraut.org> Date: Mon, 8 Dec 2025 08:57:17 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Make copyObject work in C++ To: Jelte Fennema-Nio , PostgreSQL Hackers , Thomas Munro References: Content-Language: en-US From: Peter Eisentraut In-Reply-To: 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. --------------mu7nze15FNx42wOnSTGmKOh5 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 05.12.25 15:46, Jelte Fennema-Nio wrote: > Calling copyObject fails in C++ with an error like in most setups: > > error: use of undeclared identifier 'typeof'; did you mean 'typeid' > > This is due to the C compiler supporting used to compile postgres > supporting typeof, but that function actually not being present in the > C++ compiler. This fixes that by using decltype instead of typeof when > including the header in C++. > > Realized because of Thomas' not about how much of our headers should > work in C++, and remembering I hit this specific problem myself. > > Another approach would be to force the value of HAVE_TYPEOF to 0 if __cplusplus. In the long run, I would like to change copyObject() to use typeof_unqual instead, because that handles qualifiers more correctly. (Currently, copyObject() of a const-qualified pointer results in a const-qualified pointer, which is nonsensical because the reason you made the copy is that you can modify it.) See attached patch for an example. Does C++ have something that is semantically similar to that? --------------mu7nze15FNx42wOnSTGmKOh5 Content-Type: text/plain; charset=UTF-8; name="0001-Change-copyObject-to-use-typeof_unqual.patch" Content-Disposition: attachment; filename="0001-Change-copyObject-to-use-typeof_unqual.patch" Content-Transfer-Encoding: base64 RnJvbSAxZTczM2YxNmYxMTZiZTYzOGNiZDRmNmEzNTlhMDE1NDFjOWE1ZDI0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogTW9uLCA4IERlYyAyMDI1IDA4OjMzOjE4ICswMTAwClN1YmplY3Q6 IFtQQVRDSF0gQ2hhbmdlIGNvcHlPYmplY3QoKSB0byB1c2UgdHlwZW9mX3VucXVhbAoKVGhl IG5ldyBpbXBsZW1lbnRhdGlvbiBlbnN1cmVzIHRoYXQgdGhlIHJlc3VsdCBvZiBjb3B5T2Jq ZWN0KCkgaXMgbm90CmNvbnN0LXF1YWxpZmllZCB3aGVuIHRoZSBpbnB1dCBpcy4gIFRoaXMg d2FzIHByZXZpb3VzbHkgaW5jb3JyZWN0LApzaW5jZSB0aGUgcG9pbnQgb2YgY29weU9iamVj dCgpIGlzIHRvIG1ha2UgYSBjb3B5IHRvIG11dGF0ZSwgYnV0CmFwcGFyZW50bHkgbm8gY29k ZSByYW4gaW50byBpdC4KLS0tCiBjb25maWcvYy1jb21waWxlci5tNCAgICAgICB8IDI1ICsr KysrKysrKysrKysrKysrKysrKysrCiBjb25maWd1cmUgICAgICAgICAgICAgICAgICB8IDQy ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBjb25maWd1cmUuYWMg ICAgICAgICAgICAgICB8ICAxICsKIG1lc29uLmJ1aWxkICAgICAgICAgICAgICAgIHwgMjQg KysrKysrKysrKysrKysrKysrKysrKwogc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaCAgfCAg NCArKy0tCiBzcmMvaW5jbHVkZS9wZ19jb25maWcuaC5pbiB8ICA3ICsrKysrKysKIDYgZmls ZXMgY2hhbmdlZCwgMTAxIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvY29uZmlnL2MtY29tcGlsZXIubTQgYi9jb25maWcvYy1jb21waWxlci5tNAppbmRl eCAyMzZhNTllODUzNi4uOGVlODYwYzkwOTEgMTAwNjQ0Ci0tLSBhL2NvbmZpZy9jLWNvbXBp bGVyLm00CisrKyBiL2NvbmZpZy9jLWNvbXBpbGVyLm00CkBAIC0xNjAsNiArMTYwLDMxIEBA IGlmIHRlc3QgIiRwZ2FjX2N2X2NfdHlwZW9mIiAhPSBubzsgdGhlbgogZmldKSMgUEdBQ19D X1RZUEVPRgogCiAKKyMgUEdBQ19DX1RZUEVPRl9VTlFVQUwKKyMgLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyMgQ2hlY2sgaWYgdGhlIEMgY29tcGlsZXIgdW5kZXJzdGFuZHMgdHlwZW9mX3Vu cXVhbCBvciBhIHZhcmlhbnQuICBEZWZpbmUKKyMgSEFWRV9UWVBFT0ZfVU5RVUFMIGlmIHNv LCBhbmQgZGVmaW5lICd0eXBlb2ZfdW5xdWFsJyB0byB0aGUgYWN0dWFsIGtleSB3b3JkLgor IworQUNfREVGVU4oW1BHQUNfQ19UWVBFT0ZfVU5RVUFMXSwKK1tBQ19DQUNIRV9DSEVDSyhm b3IgdHlwZW9mX3VucXVhbCwgcGdhY19jdl9jX3R5cGVvZl91bnF1YWwsCitbcGdhY19jdl9j X3R5cGVvZl91bnF1YWw9bm8KK2ZvciBwZ2FjX2t3IGluIHR5cGVvZl91bnF1YWwgX190eXBl b2ZfdW5xdWFsX187IGRvCisgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0o W10sCitbaW50IHggPSAwOworJHBnYWNfa3coeCkgeTsKK3kgPSB4OworcmV0dXJuIHk7XSld LAorW3BnYWNfY3ZfY190eXBlb2ZfdW5xdWFsPSRwZ2FjX2t3XSkKKyAgdGVzdCAiJHBnYWNf Y3ZfY190eXBlb2ZfdW5xdWFsIiAhPSBubyAmJiBicmVhaworZG9uZV0pCitpZiB0ZXN0ICIk cGdhY19jdl9jX3R5cGVvZl91bnF1YWwiICE9IG5vOyB0aGVuCisgIEFDX0RFRklORShIQVZF X1RZUEVPRl9VTlFVQUwsIDEsCisgICAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91ciBj b21waWxlciB1bmRlcnN0YW5kcyBgdHlwZW9mX3VucXVhbCcgb3Igc29tZXRoaW5nIHNpbWls YXIuXSkKKyAgaWYgdGVzdCAiJHBnYWNfY3ZfY190eXBlb2ZfdW5xdWFsIiAhPSB0eXBlb2Zf dW5xdWFsOyB0aGVuCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKHR5cGVvZl91bnF1YWwsICRw Z2FjX2N2X2NfdHlwZW9mX3VucXVhbCwgW0RlZmluZSB0byBob3cgdGhlIGNvbXBpbGVyIHNw ZWxscyBgdHlwZW9mX3VucXVhbCcuXSkKKyAgZmkKK2ZpXSkjIFBHQUNfQ19UWVBFT0ZfVU5R VUFMCisKIAogIyBQR0FDX0NfVFlQRVNfQ09NUEFUSUJMRQogIyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQpkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCmluZGV4IDNhMGVk MTFmYThlLi5hZjg1NmIyMGYwYiAxMDA3NTUKLS0tIGEvY29uZmlndXJlCisrKyBiL2NvbmZp Z3VyZQpAQCAtMTQ3ODcsNiArMTQ3ODcsNDggQEAgX0FDRU9GCiAKICAgZmkKIGZpCit7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB0eXBl b2ZfdW5xdWFsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB0eXBlb2ZfdW5xdWFs Li4uICIgPiY2OyB9CitpZiAke3BnYWNfY3ZfY190eXBlb2ZfdW5xdWFsKzp9IGZhbHNlOyB0 aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgcGdhY19jdl9j X3R5cGVvZl91bnF1YWw9bm8KK2ZvciBwZ2FjX2t3IGluIHR5cGVvZl91bnF1YWwgX190eXBl b2ZfdW5xdWFsX187IGRvCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0 LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7Citp bnQgeCA9IDA7CiskcGdhY19rdyh4KSB5OworeSA9IHg7CityZXR1cm4geTsKKyAgOworICBy ZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7 IHRoZW4gOgorICBwZ2FjX2N2X2NfdHlwZW9mX3VucXVhbD0kcGdhY19rdworZmkKK3JtIC1m IGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4 dAorICB0ZXN0ICIkcGdhY19jdl9jX3R5cGVvZl91bnF1YWwiICE9IG5vICYmIGJyZWFrCitk b25lCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1 bHQ6ICRwZ2FjX2N2X2NfdHlwZW9mX3VucXVhbCIgPiY1CiskYXNfZWNobyAiJHBnYWNfY3Zf Y190eXBlb2ZfdW5xdWFsIiA+JjY7IH0KK2lmIHRlc3QgIiRwZ2FjX2N2X2NfdHlwZW9mX3Vu cXVhbCIgIT0gbm87IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9UWVBFT0ZfVU5R VUFMIDEiID4+Y29uZmRlZnMuaAorCisgIGlmIHRlc3QgIiRwZ2FjX2N2X2NfdHlwZW9mX3Vu cXVhbCIgIT0gdHlwZW9mX3VucXVhbDsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FD RU9GCisjZGVmaW5lIHR5cGVvZl91bnF1YWwgJHBnYWNfY3ZfY190eXBlb2ZfdW5xdWFsCitf QUNFT0YKKworICBmaQorZmkKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogY2hlY2tpbmcgZm9yIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AiID4mNQog JGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3Au Li4gIiA+JjY7IH0KIGlmICR7cGdhY19jdl9fdHlwZXNfY29tcGF0aWJsZSs6fSBmYWxzZTsg dGhlbiA6CmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXgg YzI0MTM3MjBhMTguLjhlY2VkMjRiZWI1IDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysr IGIvY29uZmlndXJlLmFjCkBAIC0xNjc2LDYgKzE2NzYsNyBAQCBBQ19DX0lOTElORQogUEdB Q19QUklOVEZfQVJDSEVUWVBFCiBQR0FDX0NfU1RBVElDX0FTU0VSVAogUEdBQ19DX1RZUEVP RgorUEdBQ19DX1RZUEVPRl9VTlFVQUwKIFBHQUNfQ19UWVBFU19DT01QQVRJQkxFCiBQR0FD X0NfQlVJTFRJTl9DT05TVEFOVF9QCiBQR0FDX0NfQlVJTFRJTl9PUF9PVkVSRkxPVwpkaWZm IC0tZ2l0IGEvbWVzb24uYnVpbGQgYi9tZXNvbi5idWlsZAppbmRleCA2ZTdkZGQ3NDY4My4u ODViOThhZDgxZGIgMTAwNjQ0Ci0tLSBhL21lc29uLmJ1aWxkCisrKyBiL21lc29uLmJ1aWxk CkBAIC0yODE4LDYgKzI4MTgsMzAgQEAgaW50IG1haW4odm9pZCkKICAgZW5kaWYKIGVuZGZv cmVhY2gKIAorIyBDaGVjayBpZiB0aGUgQyBjb21waWxlciB1bmRlcnN0YW5kcyB0eXBlb2Zf dW5xdWFsIG9yIGEgdmFyaWFudC4gIERlZmluZQorIyBIQVZFX1RZUEVPRl9VTlFVQUwgaWYg c28sIGFuZCBkZWZpbmUgJ3R5cGVvZl91bnF1YWwnIHRvIHRoZSBhY3R1YWwga2V5IHdvcmQu Citmb3JlYWNoIGt3IDogWyd0eXBlb2ZfdW5xdWFsJywgJ19fdHlwZW9mX3VucXVhbF9fJ10K KyAgaWYgY2MuY29tcGlsZXMoJycnCitpbnQgbWFpbih2b2lkKQoreworICAgIGludCB4ID0g MDsKKyAgICBAMEAoeCkgeTsKKyAgICB5ID0geDsKKyAgICByZXR1cm4geTsKK30KKycnJy5m b3JtYXQoa3cpLAorICAgIG5hbWU6IGt3LAorICAgIGFyZ3M6IHRlc3RfY19hcmdzLCBpbmNs dWRlX2RpcmVjdG9yaWVzOiBwb3N0Z3Jlc19pbmMpCisKKyAgICBjZGF0YS5zZXQoJ0hBVkVf VFlQRU9GX1VOUVVBTCcsIDEpCisgICAgaWYga3cgIT0gJ3R5cGVvZl91bnF1YWwnCisgICAg ICBjZGF0YS5zZXQoJ3R5cGVvZl91bnF1YWwnLCBrdykKKyAgICBlbmRpZgorCisgICAgYnJl YWsKKyAgZW5kaWYKK2VuZGZvcmVhY2gKKwogCiAjIEV2ZW4gdGhvdWdoIHJlc3RyaWN0IGlz IGluIEM5OSBhbmQgc2hvdWxkIGJlIHN1cHBvcnRlZCBieSBhbGwKICMgc3VwcG9ydGVkIGNv bXBpbGVycywgdGhpcyBpbmRpcmVjdGlvbiBpcyB1c2VmdWwgYmVjYXVzZSBfX3Jlc3RyaWN0 CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oIGIvc3JjL2luY2x1ZGUv bm9kZXMvbm9kZXMuaAppbmRleCBmYjM5NTdlNzVlNS4uMGFjMGJlMWIyODggMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMv bm9kZXMuaApAQCAtMjI2LDggKzIyNiw4IEBAIGV4dGVybiBpbnQxNiAqcmVhZEF0dHJOdW1i ZXJDb2xzKGludCBudW1Db2xzKTsKIGV4dGVybiB2b2lkICpjb3B5T2JqZWN0SW1wbChjb25z dCB2b2lkICpmcm9tKTsKIAogLyogY2FzdCByZXN1bHQgYmFjayB0byBhcmd1bWVudCB0eXBl LCBpZiBzdXBwb3J0ZWQgYnkgY29tcGlsZXIgKi8KLSNpZmRlZiBIQVZFX1RZUEVPRgotI2Rl ZmluZSBjb3B5T2JqZWN0KG9iaikgKCh0eXBlb2Yob2JqKSkgY29weU9iamVjdEltcGwob2Jq KSkKKyNpZmRlZiBIQVZFX1RZUEVPRl9VTlFVQUwKKyNkZWZpbmUgY29weU9iamVjdChvYmop ICgodHlwZW9mX3VucXVhbCgqKG9iaikpICopIGNvcHlPYmplY3RJbXBsKG9iaikpCiAjZWxz ZQogI2RlZmluZSBjb3B5T2JqZWN0KG9iaikgY29weU9iamVjdEltcGwob2JqKQogI2VuZGlm CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wZ19jb25maWcuaC5pbiBiL3NyYy9pbmNsdWRl L3BnX2NvbmZpZy5oLmluCmluZGV4IGIwYjBjZmRhZjc5Li41MDM0NjdjYTA5MiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvcGdfY29uZmlnLmguaW4KKysrIGIvc3JjL2luY2x1ZGUvcGdf Y29uZmlnLmguaW4KQEAgLTQ3Miw2ICs0NzIsMTAgQEAKIC8qIERlZmluZSB0byAxIGlmIHlv dXIgY29tcGlsZXIgdW5kZXJzdGFuZHMgYHR5cGVvZicgb3Igc29tZXRoaW5nIHNpbWlsYXIu ICovCiAjdW5kZWYgSEFWRV9UWVBFT0YKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91ciBjb21w aWxlciB1bmRlcnN0YW5kcyBgdHlwZW9mX3VucXVhbCcgb3Igc29tZXRoaW5nCisgICBzaW1p bGFyLiAqLworI3VuZGVmIEhBVkVfVFlQRU9GX1VOUVVBTAorCiAvKiBEZWZpbmUgdG8gMSBp ZiB5b3UgaGF2ZSB0aGUgPHVjaGFyLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVf VUNIQVJfSAogCkBAIC04MTUsMyArODE5LDYgQEAKIAogLyogRGVmaW5lIHRvIGhvdyB0aGUg Y29tcGlsZXIgc3BlbGxzIGB0eXBlb2YnLiAqLwogI3VuZGVmIHR5cGVvZgorCisvKiBEZWZp bmUgdG8gaG93IHRoZSBjb21waWxlciBzcGVsbHMgYHR5cGVvZl91bnF1YWwnLiAqLworI3Vu ZGVmIHR5cGVvZl91bnF1YWwKLS0gCjIuNTIuMAoK --------------mu7nze15FNx42wOnSTGmKOh5--