From nobody Sun Mar 6 08:46:44 2022 X-Original-To: dev-commits-src-branches@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 0151119E8F60 for ; Sun, 6 Mar 2022 08:46:58 +0000 (UTC) (envelope-from junchoon@dec.sakura.ne.jp) Received: from www121.sakura.ne.jp (www121.sakura.ne.jp [153.125.133.21]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4KBFZS0lMmz4hL5; Sun, 6 Mar 2022 08:46:55 +0000 (UTC) (envelope-from junchoon@dec.sakura.ne.jp) Received: from kalamity.joker.local (123-1-31-137.area1b.commufa.jp [123.1.31.137]) (authenticated bits=0) by www121.sakura.ne.jp (8.16.1/8.16.1/[SAKURA-WEB]/20201212) with ESMTPA id 2268kinL039936; Sun, 6 Mar 2022 17:46:45 +0900 (JST) (envelope-from junchoon@dec.sakura.ne.jp) Date: Sun, 6 Mar 2022 17:46:44 +0900 From: Tomoaki AOKI To: Dimitry Andric Cc: John Baldwin , Ed Maste , dev-commits-src-branches@freebsd.org, David Chisnall Subject: Re: git: b2127b6f1ae2 - stable/13 - Install unwind.h into /usr/include Message-Id: <20220306174644.dca71df7cf1400ea48cafaca@dec.sakura.ne.jp> In-Reply-To: <682D0394-CDC8-44AB-B9FF-2B969AE2D39A@FreeBSD.org> References: <20220303224535.a0cca57e1f033e930a7f8f9d@dec.sakura.ne.jp> <3166E99F-1616-40D9-BD8B-D18E8104D6FF@FreeBSD.org> <6E5AD771-3140-480A-BF20-95B8E8A27189@FreeBSD.org> <20220305113613.7760bb3845cda1c04707fb34@dec.sakura.ne.jp> <7482C54A-1128-4AFF-A74E-53D88334C1D9@FreeBSD.org> <682D0394-CDC8-44AB-B9FF-2B969AE2D39A@FreeBSD.org> Organization: Junchoon corps X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.33; amd64-portbld-freebsd13.0) List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@freebsd.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart=_Sun__6_Mar_2022_17_46_44_+0900_k8r4IMLhfyvUxGzU" X-Rspamd-Queue-Id: 4KBFZS0lMmz4hL5 X-Spamd-Bar: ++ Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=none; spf=none (mx1.freebsd.org: domain of junchoon@dec.sakura.ne.jp has no SPF policy when checking 153.125.133.21) smtp.mailfrom=junchoon@dec.sakura.ne.jp X-Spamd-Result: default: False [2.39 / 15.00]; RCVD_TLS_LAST(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; ARC_NA(0.00)[]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[]; MV_CASE(0.50)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_GOOD(-0.10)[multipart/mixed,text/plain]; HAS_ATTACHMENT(0.00)[]; DMARC_NA(0.00)[sakura.ne.jp]; AUTH_NA(1.00)[]; RCPT_COUNT_FIVE(0.00)[5]; HAS_ORG_HEADER(0.00)[]; NEURAL_SPAM_MEDIUM(0.94)[0.944]; NEURAL_SPAM_SHORT(0.99)[0.992]; NEURAL_HAM_LONG(-0.95)[-0.946]; MLMMJ_DEST(0.00)[dev-commits-src-branches]; R_SPF_NA(0.00)[no SPF record]; FROM_EQ_ENVFROM(0.00)[]; R_DKIM_NA(0.00)[]; MIME_TRACE(0.00)[0:+,1:+,2:~]; ASN(0.00)[asn:7684, ipnet:153.125.128.0/18, country:JP]; RCVD_COUNT_TWO(0.00)[2]; MID_RHS_MATCH_FROM(0.00)[]; RECEIVED_SPAMHAUS_PBL(0.00)[123.1.31.137:received] X-ThisMailContainsUnwantedMimeParts: N This is a multi-part message in MIME format. --Multipart=_Sun__6_Mar_2022_17_46_44_+0900_k8r4IMLhfyvUxGzU Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Sat, 5 Mar 2022 23:33:54 +0100 Dimitry Andric wrote: > On 5 Mar 2022, at 22:34, Dimitry Andric wrote: > > > > On 5 Mar 2022, at 03:36, Tomoaki AOKI wrote: > ... > > So according to the spec, casting the void pointer 'thrown_exception' to > > a __cxa_exception pointer, then subtracting 1, should give you the > > original __cxa_exception struct. In this case, it subtracts 8 bytes, > > going from 0x87b5aff00 to 0x87b5afe88. > > Ugh, actually this was 120 bytes! > > > > Now I do exactly the same in the libreoffice frame one below, where the > > incoming void pointer 'pExc' is the previous 'thrown_exception' value: > > > > (gdb) frame 1 > > #1 gcc3::deleteException (pExc=0x87b5aff00) at bridges/source/cpp_uno/gcc3_linux_x86-64/except.cxx:139 > > 139 OUString unoName( toUNOname( header->exceptionType->name() ) ); > > (gdb) print pExc > > $33 = (void *) 0x87b5aff00 > > (gdb) print static_cast<__cxa_exception*>(pExc)-1 > > $34 = (__cxa_exception *) 0x87b5afe80 > > > > So in *this* function, subtracting 1 from a __cxa_exception pointer > > subtracts 16 bytes instead, going from 0x87b5aff00 to 0x87b5afe80! > > And this was 128 bytes instead. I think I now know what's going on, > which is that our declaration of __cxa_exception changed its size from > 120 bytes to 128 bytes, due to the new unwind headers. > > Our libcxxrt cxxabi.h header has: > > struct __cxa_exception > { > ... lots of stuff ... > /** The language-agnostic part of the exception header. */ > _Unwind_Exception unwindHeader; > }; > > so the last field is a struct _Unwind_Exception. Our libcxxrt > unwind-itanium.h header has: > > struct _Unwind_Exception > { > uint64_t exception_class; > _Unwind_Exception_Cleanup_Fn exception_cleanup; > unsigned long private_1; > unsigned long private_2; > } ; > > while libunwind's version has an __aligned__ attribute at the end: > > struct _Unwind_Exception { > uint64_t exception_class; > void (*exception_cleanup)(_Unwind_Reason_Code reason, > _Unwind_Exception *exc); > #if defined(__SEH__) && !defined(__USING_SJLJ_EXCEPTIONS__) > uintptr_t private_[6]; > #else > uintptr_t private_1; // non-zero means forced unwind > uintptr_t private_2; // holds sp that phase1 found for phase2 to use > #endif > #if __SIZEOF_POINTER__ == 4 > // The implementation of _Unwind_Exception uses an attribute mode on the > // above fields which has the side effect of causing this whole struct to > // round up to 32 bytes in size (48 with SEH). To be more explicit, we add > // pad fields added for binary compatibility. > uint32_t reserved[3]; > #endif > // The Itanium ABI requires that _Unwind_Exception objects are "double-word > // aligned". GCC has interpreted this to mean "use the maximum useful > // alignment for the target"; so do we. > } __attribute__((__aligned__)); > > (Note that upstream libcxxrt also added the reserved field and aligned > attribute, in https://github.com/libcxxrt/libcxxrt/commit/b9616964 !) > > The aligned attribute on _Unwind_Exception causes the enclosing > __cxa_exception struct to *also* be aligned maximally, growing it from > 120 to 128 bytes on x86_64. > > So this is a bit of a fine mess we are in. There are multiple issues > here: > > 1) We broke the ABI by increasing __cxa_exception's size. > > 2) We compile libcxxrt against its *own* unwind headers, so it assumes a > 120-byte __cxa_exception size. But all other programs use the libunwind > headers, so they assume a 128 byte __cxa_exception size. > > I guess LibreOffice is just a good example which breaks because it does > this deep poking in exception-handling land, which most programs never > go near. That said, LibreOffice also includes the unwind.h header > installed by the libunwind-20201110 port, so that is yet *another* > possible incompatibility! > > But I think we must do something about this. The most backward > compatible change would be to *remove* the aligned attribute from our > _Unwind_Exception declaration, so the old __cxa_exception size is > restored. The problem with that is that we have to carry a patch for > libunwind forever. > > The other way would be to force libcxxrt to use the libunwind headers > instead of its own, so that at least libcxxrt and libunwind agree on the > size and alignment of all these structures! But that may still lead to > crashes for older consumers. > > No easy way out, in any case... :-/ > > -Dimitry Did a quick stupid test by *Replacing #include "unwind.h" by #include in contrib/libcxxrt/cxxabi.h, the only file including unwind.h on contrib/cxxrt directory to pick it from standard place. *Rename unsind*.h to something else just to be sure. and got errors by missing macros. At least BEGIN_PERSONALITY_FUNCTION. Insufficient part would be needed to be extracted to additional header. Emitted errors are as follows: /usr/src/lib/libcxxrt# make Building /usr/obj/usr/src/amd64.amd64/lib/libcxxrt/auxhelper.o Building /usr/obj/usr/src/amd64.amd64/lib/libcxxrt/dynamic_cast.o Building /usr/obj/usr/src/amd64.amd64/lib/libcxxrt/exception.o /usr/src/contrib/libcxxrt/exception.cc:1084:1: error: unknown type name 'BEGIN_PERSONALITY_FUNCTION' BEGIN_PERSONALITY_FUNCTION(__gxx_personality_v0) ^ /usr/src/contrib/libcxxrt/exception.cc:1084:49: error: expected ';' after top level declarator BEGIN_PERSONALITY_FUNCTION(__gxx_personality_v0) ^ ; /usr/src/contrib/libcxxrt/exception.cc:1098:42: error: use of undeclared identifier 'exceptionClass'; did you mean 'exception_class'? bool foreignException = !isCXXException(exceptionClass); ^~~~~~~~~~~~~~ exception_class /usr/src/contrib/libcxxrt/exception.cc:242:23: note: 'exception_class' declared here static const uint64_t exception_class = ^ /usr/src/contrib/libcxxrt/exception.cc:1101:2: error: expected unqualified-id if (!foreignException) ^ /usr/src/contrib/libcxxrt/exception.cc:1112:91: error: use of undeclared identifier 'context' reinterpret_cast(static_cast(_Unwind_GetLanguageSpecificData(context))); ^ /usr/src/contrib/libcxxrt/exception.cc:1116:2: error: expected unqualified-id if (0 == lsda_addr) { return continueUnwinding(exceptionObject, context); } ^ /usr/src/contrib/libcxxrt/exception.cc:1137:2: error: expected unqualified-id if (actions & _UA_SEARCH_PHASE) ^ /usr/src/contrib/libcxxrt/exception.cc:1176:2: error: expected unqualified-id if (!(actions & _UA_HANDLER_FRAME)) ^ /usr/src/contrib/libcxxrt/exception.cc:1188:2: error: expected unqualified-id else if (foreignException) ^ /usr/src/contrib/libcxxrt/exception.cc:1195:2: error: expected unqualified-id else if (ex->catchTemp == 0) ^ /usr/src/contrib/libcxxrt/exception.cc:1200:2: error: expected unqualified-id else ^ /usr/src/contrib/libcxxrt/exception.cc:1209:2: error: C++ requires a type specifier for all declarations _Unwind_SetIP(context, reinterpret_cast(action.landing_pad)); ^ /usr/src/contrib/libcxxrt/exception.cc:1209:16: error: use of undeclared identifier 'context' _Unwind_SetIP(context, reinterpret_cast(action.landing_pad)); ^ /usr/src/contrib/libcxxrt/exception.cc:1210:2: error: C++ requires a type specifier for all declarations _Unwind_SetGR(context, __builtin_eh_return_data_regno(0), ^ /usr/src/contrib/libcxxrt/exception.cc:1210:16: error: use of undeclared identifier 'context' _Unwind_SetGR(context, __builtin_eh_return_data_regno(0), ^ /usr/src/contrib/libcxxrt/exception.cc:1211:48: error: use of undeclared identifier 'exceptionObject' reinterpret_cast(exceptionObject)); ^ /usr/src/contrib/libcxxrt/exception.cc:1212:2: error: C++ requires a type specifier for all declarations _Unwind_SetGR(context, __builtin_eh_return_data_regno(1), selector); ^ /usr/src/contrib/libcxxrt/exception.cc:1212:16: error: use of undeclared identifier 'context' _Unwind_SetGR(context, __builtin_eh_return_data_regno(1), selector); ^ /usr/src/contrib/libcxxrt/exception.cc:1214:2: error: expected unqualified-id return _URC_INSTALL_CONTEXT; ^ fatal error: too many errors emitted, stopping now [-ferror-limit=] 20 errors generated. *** Error code 1 Stop. make: stopped in /usr/src/lib/libcxxrt .ERROR_TARGET='exception.o' .ERROR_META_FILE='/usr/obj/usr/src/amd64.amd64/lib/libcxxrt/exception.o.meta' .MAKE.LEVEL='0' MAKEFILE='' .MAKE.MODE='meta missing-filemon=yes missing-meta=yes silent=yes verbose' _ERROR_CMD='c++ -O2 -pipe -fno-common -isystem /usr/src/contrib/libcxxrt -nostdinc++ -march=haswell -mretpoline -Wno-format-zero-length -fstack-protector-strong -Wno-empty-body -Wno-string-plus-int -Wno-unused-const-variable -Wno-error=unused-but-set-variable -Wno-tautological-compare -Wno-unused-value -Wno-parentheses-equality -Wno-unused-function -Wno-enum-conversion -Wno-unused-local-typedef -Wno-address-of-packed-member -Wno-switch -Wno-switch-enum -Wno-knr-promoted-parameter -Wno-parentheses -Qunused-arguments -mretpoline -std=c++14 -Wno-c++11-extensions -c /usr/src/contrib/libcxxrt/exception.cc -o exception.o;' .CURDIR='/usr/src/lib/libcxxrt' .MAKE='make' .OBJDIR='/usr/obj/usr/src/amd64.amd64/lib/libcxxrt' .TARGETS=' all' DESTDIR='' LD_LIBRARY_PATH='' MACHINE='amd64' MACHINE_ARCH='amd64' MAKEOBJDIRPREFIX='' MAKESYSPATH='/usr/src/share/mk' MAKE_VERSION='20220208' PATH='/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/root/bin' SRCTOP='/usr/src' OBJTOP='/usr/obj/usr/src/amd64.amd64' -- Tomoaki AOKI --Multipart=_Sun__6_Mar_2022_17_46_44_+0900_k8r4IMLhfyvUxGzU Content-Type: application/octet-stream; name="libcxxrt_errors_20220306-001.log" Content-Disposition: attachment; filename="libcxxrt_errors_20220306-001.log" Content-Transfer-Encoding: base64 L3Vzci9zcmMvbGliL2xpYmN4eHJ0IyBtYWtlCkJ1aWxkaW5nIC91c3Ivb2JqL3Vzci9zcmMvYW1k NjQuYW1kNjQvbGliL2xpYmN4eHJ0L2F1eGhlbHBlci5vCkJ1aWxkaW5nIC91c3Ivb2JqL3Vzci9z cmMvYW1kNjQuYW1kNjQvbGliL2xpYmN4eHJ0L2R5bmFtaWNfY2FzdC5vCkJ1aWxkaW5nIC91c3Iv b2JqL3Vzci9zcmMvYW1kNjQuYW1kNjQvbGliL2xpYmN4eHJ0L2V4Y2VwdGlvbi5vCi91c3Ivc3Jj L2NvbnRyaWIvbGliY3h4cnQvZXhjZXB0aW9uLmNjOjEwODQ6MTogZXJyb3I6IHVua25vd24gdHlw ZSBuYW1lICdCRUdJTl9QRVJTT05BTElUWV9GVU5DVElPTicKQkVHSU5fUEVSU09OQUxJVFlfRlVO Q1RJT04oX19neHhfcGVyc29uYWxpdHlfdjApCl4KL3Vzci9zcmMvY29udHJpYi9saWJjeHhydC9l eGNlcHRpb24uY2M6MTA4NDo0OTogZXJyb3I6IGV4cGVjdGVkICc7JyBhZnRlciB0b3AgbGV2ZWwg ZGVjbGFyYXRvcgpCRUdJTl9QRVJTT05BTElUWV9GVU5DVElPTihfX2d4eF9wZXJzb25hbGl0eV92 MCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Ci91c3Ivc3JjL2Nv bnRyaWIvbGliY3h4cnQvZXhjZXB0aW9uLmNjOjEwOTg6NDI6IGVycm9yOiB1c2Ugb2YgdW5kZWNs YXJlZCBpZGVudGlmaWVyICdleGNlcHRpb25DbGFzcyc7IGRpZCB5b3UgbWVhbiAnZXhjZXB0aW9u X2NsYXNzJz8KICAgICAgICBib29sIGZvcmVpZ25FeGNlcHRpb24gPSAhaXNDWFhFeGNlcHRpb24o ZXhjZXB0aW9uQ2xhc3MpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBefn5+fn5+fn5+fn5+fgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBleGNlcHRpb25fY2xhc3MKL3Vzci9zcmMvY29udHJpYi9saWJjeHhydC9l eGNlcHRpb24uY2M6MjQyOjIzOiBub3RlOiAnZXhjZXB0aW9uX2NsYXNzJyBkZWNsYXJlZCBoZXJl CnN0YXRpYyBjb25zdCB1aW50NjRfdCBleGNlcHRpb25fY2xhc3MgPQogICAgICAgICAgICAgICAg ICAgICAgXgovdXNyL3NyYy9jb250cmliL2xpYmN4eHJ0L2V4Y2VwdGlvbi5jYzoxMTAxOjI6IGVy cm9yOiBleHBlY3RlZCB1bnF1YWxpZmllZC1pZAogICAgICAgIGlmICghZm9yZWlnbkV4Y2VwdGlv bikKICAgICAgICBeCi91c3Ivc3JjL2NvbnRyaWIvbGliY3h4cnQvZXhjZXB0aW9uLmNjOjExMTI6 OTE6IGVycm9yOiB1c2Ugb2YgdW5kZWNsYXJlZCBpZGVudGlmaWVyICdjb250ZXh0JwogICAgICAg ICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oc3RhdGljX2Nhc3Q8dWlu dHB0cl90PihfVW53aW5kX0dldExhbmd1YWdlU3BlY2lmaWNEYXRhKGNvbnRleHQpKSk7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgovdXNyL3NyYy9jb250 cmliL2xpYmN4eHJ0L2V4Y2VwdGlvbi5jYzoxMTE2OjI6IGVycm9yOiBleHBlY3RlZCB1bnF1YWxp ZmllZC1pZAogICAgICAgIGlmICgwID09IGxzZGFfYWRkcikgeyByZXR1cm4gY29udGludWVVbndp bmRpbmcoZXhjZXB0aW9uT2JqZWN0LCBjb250ZXh0KTsgfQogICAgICAgIF4KL3Vzci9zcmMvY29u dHJpYi9saWJjeHhydC9leGNlcHRpb24uY2M6MTEzNzoyOiBlcnJvcjogZXhwZWN0ZWQgdW5xdWFs aWZpZWQtaWQKICAgICAgICBpZiAoYWN0aW9ucyAmIF9VQV9TRUFSQ0hfUEhBU0UpCiAgICAgICAg XgovdXNyL3NyYy9jb250cmliL2xpYmN4eHJ0L2V4Y2VwdGlvbi5jYzoxMTc2OjI6IGVycm9yOiBl eHBlY3RlZCB1bnF1YWxpZmllZC1pZAogICAgICAgIGlmICghKGFjdGlvbnMgJiBfVUFfSEFORExF Ul9GUkFNRSkpCiAgICAgICAgXgovdXNyL3NyYy9jb250cmliL2xpYmN4eHJ0L2V4Y2VwdGlvbi5j YzoxMTg4OjI6IGVycm9yOiBleHBlY3RlZCB1bnF1YWxpZmllZC1pZAogICAgICAgIGVsc2UgaWYg KGZvcmVpZ25FeGNlcHRpb24pCiAgICAgICAgXgovdXNyL3NyYy9jb250cmliL2xpYmN4eHJ0L2V4 Y2VwdGlvbi5jYzoxMTk1OjI6IGVycm9yOiBleHBlY3RlZCB1bnF1YWxpZmllZC1pZAogICAgICAg IGVsc2UgaWYgKGV4LT5jYXRjaFRlbXAgPT0gMCkKICAgICAgICBeCi91c3Ivc3JjL2NvbnRyaWIv bGliY3h4cnQvZXhjZXB0aW9uLmNjOjEyMDA6MjogZXJyb3I6IGV4cGVjdGVkIHVucXVhbGlmaWVk LWlkCiAgICAgICAgZWxzZQogICAgICAgIF4KL3Vzci9zcmMvY29udHJpYi9saWJjeHhydC9leGNl cHRpb24uY2M6MTIwOToyOiBlcnJvcjogQysrIHJlcXVpcmVzIGEgdHlwZSBzcGVjaWZpZXIgZm9y IGFsbCBkZWNsYXJhdGlvbnMKICAgICAgICBfVW53aW5kX1NldElQKGNvbnRleHQsIHJlaW50ZXJw cmV0X2Nhc3Q8dW5zaWduZWQgbG9uZz4oYWN0aW9uLmxhbmRpbmdfcGFkKSk7CiAgICAgICAgXgov dXNyL3NyYy9jb250cmliL2xpYmN4eHJ0L2V4Y2VwdGlvbi5jYzoxMjA5OjE2OiBlcnJvcjogdXNl IG9mIHVuZGVjbGFyZWQgaWRlbnRpZmllciAnY29udGV4dCcKICAgICAgICBfVW53aW5kX1NldElQ KGNvbnRleHQsIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgbG9uZz4oYWN0aW9uLmxhbmRpbmdf cGFkKSk7CiAgICAgICAgICAgICAgICAgICAgICBeCi91c3Ivc3JjL2NvbnRyaWIvbGliY3h4cnQv ZXhjZXB0aW9uLmNjOjEyMTA6MjogZXJyb3I6IEMrKyByZXF1aXJlcyBhIHR5cGUgc3BlY2lmaWVy IGZvciBhbGwgZGVjbGFyYXRpb25zCiAgICAgICAgX1Vud2luZF9TZXRHUihjb250ZXh0LCBfX2J1 aWx0aW5fZWhfcmV0dXJuX2RhdGFfcmVnbm8oMCksCiAgICAgICAgXgovdXNyL3NyYy9jb250cmli L2xpYmN4eHJ0L2V4Y2VwdGlvbi5jYzoxMjEwOjE2OiBlcnJvcjogdXNlIG9mIHVuZGVjbGFyZWQg aWRlbnRpZmllciAnY29udGV4dCcKICAgICAgICBfVW53aW5kX1NldEdSKGNvbnRleHQsIF9fYnVp bHRpbl9laF9yZXR1cm5fZGF0YV9yZWdubygwKSwKICAgICAgICAgICAgICAgICAgICAgIF4KL3Vz ci9zcmMvY29udHJpYi9saWJjeHhydC9leGNlcHRpb24uY2M6MTIxMTo0ODogZXJyb3I6IHVzZSBv ZiB1bmRlY2xhcmVkIGlkZW50aWZpZXIgJ2V4Y2VwdGlvbk9iamVjdCcKICAgICAgICAgICAgICAg ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgbG9uZz4oZXhjZXB0aW9uT2JqZWN0KSk7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4K L3Vzci9zcmMvY29udHJpYi9saWJjeHhydC9leGNlcHRpb24uY2M6MTIxMjoyOiBlcnJvcjogQysr IHJlcXVpcmVzIGEgdHlwZSBzcGVjaWZpZXIgZm9yIGFsbCBkZWNsYXJhdGlvbnMKICAgICAgICBf VW53aW5kX1NldEdSKGNvbnRleHQsIF9fYnVpbHRpbl9laF9yZXR1cm5fZGF0YV9yZWdubygxKSwg c2VsZWN0b3IpOwogICAgICAgIF4KL3Vzci9zcmMvY29udHJpYi9saWJjeHhydC9leGNlcHRpb24u Y2M6MTIxMjoxNjogZXJyb3I6IHVzZSBvZiB1bmRlY2xhcmVkIGlkZW50aWZpZXIgJ2NvbnRleHQn CiAgICAgICAgX1Vud2luZF9TZXRHUihjb250ZXh0LCBfX2J1aWx0aW5fZWhfcmV0dXJuX2RhdGFf cmVnbm8oMSksIHNlbGVjdG9yKTsKICAgICAgICAgICAgICAgICAgICAgIF4KL3Vzci9zcmMvY29u dHJpYi9saWJjeHhydC9leGNlcHRpb24uY2M6MTIxNDoyOiBlcnJvcjogZXhwZWN0ZWQgdW5xdWFs aWZpZWQtaWQKICAgICAgICByZXR1cm4gX1VSQ19JTlNUQUxMX0NPTlRFWFQ7CiAgICAgICAgXgpm YXRhbCBlcnJvcjogdG9vIG1hbnkgZXJyb3JzIGVtaXR0ZWQsIHN0b3BwaW5nIG5vdyBbLWZlcnJv ci1saW1pdD1dCjIwIGVycm9ycyBnZW5lcmF0ZWQuCioqKiBFcnJvciBjb2RlIDEKClN0b3AuCm1h a2U6IHN0b3BwZWQgaW4gL3Vzci9zcmMvbGliL2xpYmN4eHJ0Ci5FUlJPUl9UQVJHRVQ9J2V4Y2Vw dGlvbi5vJwouRVJST1JfTUVUQV9GSUxFPScvdXNyL29iai91c3Ivc3JjL2FtZDY0LmFtZDY0L2xp Yi9saWJjeHhydC9leGNlcHRpb24uby5tZXRhJwouTUFLRS5MRVZFTD0nMCcKTUFLRUZJTEU9JycK Lk1BS0UuTU9ERT0nbWV0YSBtaXNzaW5nLWZpbGVtb249eWVzIG1pc3NpbmctbWV0YT15ZXMgc2ls ZW50PXllcyB2ZXJib3NlJwpfRVJST1JfQ01EPSdjKysgIC1PMiAtcGlwZSAtZm5vLWNvbW1vbiAt aXN5c3RlbSAvdXNyL3NyYy9jb250cmliL2xpYmN4eHJ0IC1ub3N0ZGluYysrIC1tYXJjaD1oYXN3 ZWxsIC1tcmV0cG9saW5lIC1Xbm8tZm9ybWF0LXplcm8tbGVuZ3RoIC1mc3RhY2stcHJvdGVjdG9y LXN0cm9uZyAtV25vLWVtcHR5LWJvZHkgLVduby1zdHJpbmctcGx1cy1pbnQgLVduby11bnVzZWQt Y29uc3QtdmFyaWFibGUgLVduby1lcnJvcj11bnVzZWQtYnV0LXNldC12YXJpYWJsZSAtV25vLXRh dXRvbG9naWNhbC1jb21wYXJlIC1Xbm8tdW51c2VkLXZhbHVlIC1Xbm8tcGFyZW50aGVzZXMtZXF1 YWxpdHkgLVduby11bnVzZWQtZnVuY3Rpb24gLVduby1lbnVtLWNvbnZlcnNpb24gLVduby11bnVz ZWQtbG9jYWwtdHlwZWRlZiAtV25vLWFkZHJlc3Mtb2YtcGFja2VkLW1lbWJlciAtV25vLXN3aXRj aCAtV25vLXN3aXRjaC1lbnVtIC1Xbm8ta25yLXByb21vdGVkLXBhcmFtZXRlciAtV25vLXBhcmVu dGhlc2VzIC1RdW51c2VkLWFyZ3VtZW50cyAgLW1yZXRwb2xpbmUgLXN0ZD1jKysxNCAgICAtV25v LWMrKzExLWV4dGVuc2lvbnMgICAtYyAvdXNyL3NyYy9jb250cmliL2xpYmN4eHJ0L2V4Y2VwdGlv bi5jYyAtbyBleGNlcHRpb24ubzsnCi5DVVJESVI9Jy91c3Ivc3JjL2xpYi9saWJjeHhydCcKLk1B S0U9J21ha2UnCi5PQkpESVI9Jy91c3Ivb2JqL3Vzci9zcmMvYW1kNjQuYW1kNjQvbGliL2xpYmN4 eHJ0JwouVEFSR0VUUz0nIGFsbCcKREVTVERJUj0nJwpMRF9MSUJSQVJZX1BBVEg9JycKTUFDSElO RT0nYW1kNjQnCk1BQ0hJTkVfQVJDSD0nYW1kNjQnCk1BS0VPQkpESVJQUkVGSVg9JycKTUFLRVNZ U1BBVEg9Jy91c3Ivc3JjL3NoYXJlL21rJwpNQUtFX1ZFUlNJT049JzIwMjIwMjA4JwpQQVRIPScv c2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbjovdXNyL2dhbWVzOi91c3IvbG9jYWwvc2Jpbjov dXNyL2xvY2FsL2Jpbjovcm9vdC9iaW4nClNSQ1RPUD0nL3Vzci9zcmMnCk9CSlRPUD0nL3Vzci9v YmovdXNyL3NyYy9hbWQ2NC5hbWQ2NCcK --Multipart=_Sun__6_Mar_2022_17_46_44_+0900_k8r4IMLhfyvUxGzU--