<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/132471>132471</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Clang] Crash on naming data member in requires expression in local class
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
MagentaTreehouse
</td>
</tr>
</table>
<pre>
The following C++20 code causes a crash since Clang 16.
```c++
template <class T>
void f(T) {
struct A {
int i;
auto f() const {
return [] (auto) requires requires { i; } {};
}
} a{};
a.f()(0);
}
int main() {
f(0);
}
```
See https://compiler-explorer.com/z/voz3eE6ba.
Assertion:
```console
clang++: /root/llvm-project/clang/lib/Sema/SemaTemplateInstantiate.cpp:4226:
void clang::Sema::InstantiateClassMembers(clang::SourceLocation, clang::CXXRecordDecl*, const clang::MultiLevelTemplateArgumentList&, clang::TemplateSpecializationKind):
Assertion `(TSK == TSK_ExplicitInstantiationDefinition || TSK == TSK_ExplicitInstantiationDeclaration || (TSK == TSK_ImplicitInstantiation && Instantiation->isLocalClass())) && "Unexpected template specialization kind!"' failed.
```
<details>
<summary>Stack dump</summary>
```console
0. Program arguments: /opt/compiler-explorer/clang-assertions-trunk/bin/clang++ -gdwarf-4 -g -o /app/output.s -mllvm --x86-asm-syntax=intel -fno-verbose-asm -S --gcc-toolchain=/opt/compiler-explorer/gcc-snapshot -fcolor-diagnostics -fno-crash-diagnostics -std=c++20 <source>
1. <eof> parser at end of file
2. <source>:2:6: instantiating function definition 'f<int>'
#0 0x0000000003e8f628 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3e8f628)
#1 0x0000000003e8d2b4 llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3e8d2b4)
#2 0x0000000003dd2148 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
#3 0x000077d320042520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x000077d3200969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
#5 0x000077d320042476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
#6 0x000077d3200287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
#7 0x000077d32002871b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
#8 0x000077d320039e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#9 0x000000000707a508 clang::Sema::InstantiateClassMembers(clang::SourceLocation, clang::CXXRecordDecl*, clang::MultiLevelTemplateArgumentList const&, clang::TemplateSpecializationKind) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x707a508)
#10 0x000000000710c7d6 clang::TemplateDeclInstantiator::VisitCXXRecordDecl(clang::CXXRecordDecl*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x710c7d6)
#11 0x0000000007119b84 void llvm::function_ref<void ()>::callback_fn<clang::Sema::SubstDecl(clang::Decl*, clang::DeclContext*, clang::MultiLevelTemplateArgumentList const&)::'lambda'()>(long) SemaTemplateInstantiateDecl.cpp:0:0
#12 0x0000000007d8a701 clang::StackExhaustionHandler::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x7d8a701)
#13 0x00000000070b847a clang::Sema::SubstDecl(clang::Decl*, clang::DeclContext*, clang::MultiLevelTemplateArgumentList const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x70b847a)
#14 0x00000000071066a1 clang::Sema::FindInstantiatedDecl(clang::SourceLocation, clang::NamedDecl*, clang::MultiLevelTemplateArgumentList const&, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x71066a1)
#15 0x000000000701ef1f (anonymous namespace)::TemplateInstantiator::TransformDecl(clang::SourceLocation, clang::Decl*) SemaTemplateInstantiate.cpp:0:0
#16 0x0000000007020428 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformRecordType(clang::TypeLocBuilder&, clang::RecordTypeLoc) SemaTemplateInstantiate.cpp:0:0
#17 0x0000000007051dbd clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&, clang::TypeLoc) SemaTemplateInstantiate.cpp:0:0
#18 0x0000000007053c3d clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformQualifiedType(clang::TypeLocBuilder&, clang::QualifiedTypeLoc) SemaTemplateInstantiate.cpp:0:0
#19 0x000000000705128c clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&, clang::TypeLoc) SemaTemplateInstantiate.cpp:0:0
#20 0x0000000007055be1 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformPointerType(clang::TypeLocBuilder&, clang::PointerTypeLoc) SemaTemplateInstantiate.cpp:0:0
#21 0x0000000007051ceb clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&, clang::TypeLoc) SemaTemplateInstantiate.cpp:0:0
#22 0x000000000705653a clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeSourceInfo*) SemaTemplateInstantiate.cpp:0:0
#23 0x000000000705665c clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::QualType) SemaTemplateInstantiate.cpp:0:0
#24 0x0000000007056b15 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCXXThisExpr(clang::CXXThisExpr*) SemaTemplateInstantiate.cpp:0:0
#25 0x000000000705a50b clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#26 0x0000000007080960 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformMemberExpr(clang::MemberExpr*) SemaTemplateInstantiate.cpp:0:0
#27 0x000000000705a760 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#28 0x0000000007066915 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformRequiresExpr(clang::RequiresExpr*) SemaTemplateInstantiate.cpp:0:0
#29 0x000000000705a990 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#30 0x0000000007082b92 clang::Sema::SubstConstraintExpr(clang::Expr*, clang::MultiLevelTemplateArgumentList const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x7082b92)
#31 0x00000000067a3b3c clang::ActionResult<clang::Expr*, true> calculateConstraintSatisfaction<calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::ConstraintEvaluator>(clang::Sema&, clang::Expr const*, clang::ConstraintSatisfaction&, calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::ConstraintEvaluator const&) SemaConcept.cpp:0:0
#32 0x00000000067a588e CheckConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, llvm::ArrayRef<clang::Expr const*>, llvm::SmallVectorImpl<clang::Expr*>&, clang::MultiLevelTemplateArgumentList const&, clang::SourceRange, clang::ConstraintSatisfaction&) SemaConcept.cpp:0:0
#33 0x00000000067a5eed clang::Sema::CheckConstraintSatisfaction(clang::NamedDecl const*, llvm::ArrayRef<clang::Expr const*>, llvm::SmallVectorImpl<clang::Expr*>&, clang::MultiLevelTemplateArgumentList const&, clang::SourceRange, clang::ConstraintSatisfaction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x67a5eed)
#34 0x00000000067a6f38 clang::Sema::CheckInstantiatedFunctionTemplateConstraints(clang::SourceLocation, clang::FunctionDecl*, llvm::ArrayRef<clang::TemplateArgument>, clang::ConstraintSatisfaction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x67a6f38)
#35 0x0000000006fc95b5 clang::Sema::FinishTemplateArgumentDeduction(clang::FunctionTemplateDecl*, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&, unsigned int, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, llvm::SmallVectorImpl<clang::Sema::OriginalCallArg> const*, bool, bool, llvm::function_ref<bool ()>) (.constprop.0) SemaTemplateDeduction.cpp:0:0
#36 0x0000000006fc99f7 void llvm::function_ref<void ()>::callback_fn<clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool, bool, bool, clang::QualType, clang::Expr::Classification, llvm::function_ref<bool (llvm::ArrayRef<clang::QualType>)>)::'lambda1'()>(long) SemaTemplateDeduction.cpp:0:0
#37 0x0000000007d8a701 clang::StackExhaustionHandler::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x7d8a701)
#38 0x0000000006fa1c9d clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool, bool, bool, clang::QualType, clang::Expr::Classification, llvm::function_ref<bool (llvm::ArrayRef<clang::QualType>)>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6fa1c9d)
#39 0x0000000006de48c1 clang::Sema::AddMethodTemplateCandidate(clang::FunctionTemplateDecl*, clang::DeclAccessPair, clang::CXXRecordDecl*, clang::TemplateArgumentListInfo*, clang::QualType, clang::Expr::Classification, llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool, bool, clang::OverloadCandidateParamOrder) (.constprop.0) SemaOverload.cpp:0:0
#40 0x0000000006de5211 clang::Sema::AddMethodCandidate(clang::DeclAccessPair, clang::QualType, clang::Expr::Classification, llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool, clang::OverloadCandidateParamOrder) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6de5211)
#41 0x0000000006df5882 clang::Sema::BuildCallToObjectOfClassType(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6df5882)
#42 0x0000000006a01753 clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6a01753)
#43 0x0000000006a0203c clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6a0203c)
#44 0x000000000706bb18 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) SemaTemplateInstantiate.cpp:0:0
#45 0x000000000705a573 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#46 0x00000000070885f7 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformStmt(clang::Stmt*, clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::StmtDiscardKind) SemaTemplateInstantiate.cpp:0:0
#47 0x000000000708920e clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) SemaTemplateInstantiate.cpp:0:0
#48 0x0000000007092254 clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x7092254)
#49 0x000000000710d8fd clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x710d8fd)
#50 0x000000000710b8a6 clang::Sema::PerformPendingInstantiations(bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x710b8a6)
#51 0x000000000665a952 clang::Sema::ActOnEndOfTranslationUnitFragment(clang::Sema::TUFragmentKind) (.part.0) Sema.cpp:0:0
#52 0x000000000665b1f2 clang::Sema::ActOnEndOfTranslationUnit() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x665b1f2)
#53 0x00000000064c799b clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x64c799b)
#54 0x00000000064b9e4a clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x64b9e4a)
#55 0x000000000484c098 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x484c098)
#56 0x0000000004b1c685 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4b1c685)
#57 0x0000000004a9e54e clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4a9e54e)
#58 0x0000000004c0c87e clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4c0c87e)
#59 0x0000000000d5057f cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xd5057f)
#60 0x0000000000d47d3a ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#61 0x00000000048945f9 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#62 0x0000000003dd25e4 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3dd25e4)
#63 0x0000000004894c0f clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#64 0x000000000485767d clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x485767d)
#65 0x000000000485870e clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x485870e)
#66 0x000000000485fde5 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x485fde5)
#67 0x0000000000d4d378 clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xd4d378)
#68 0x0000000000c140b4 main (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xc140b4)
#69 0x000077d320029d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#70 0x000077d320029e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#71 0x0000000000d477e5 _start (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xd477e5)
```
</details>
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsXFtz4zaW_jXwC0ouErw_-EEtW7OddK97W85s3lwgCEqYpgAOADp2fv0WQEokoYstR-pOJts1E9sgLud85wocglgptuSU3oDoA4hur3CjV0LefMZLyjV-kJSuRKPoVS6Kl5uHFYWlqCrxG-NLOAPoA0AfkAeJKCgkuFFUQQyJxGoFFeOEwlmF-RL68TXwpiD22v-RdiDwppqu6wprCkEwIxVWCj6A4A540yfBClgClD4AlEGQmM4QQqi0bIiG00GT-ce4hgwEwybcaGFnMBMQwZXejJFUN5LDlmEIUGq6ml6S_rthkqr-F5B8sPNCkNza4cnteBXT0P5lemC3C77uKAAo9cwP-6QdBLypIXuNGe-o7Hkq9_XfwNeOXVAKV1rXCgRTgOYAzYlY16yickKf60pIKq-JWAM0_x2g-ZP4PaB3cY6v29FTpajUTHAzeigawZWoKPCmxEiuE1QwhQDNpRAaoHlVPa0ntRT_osT82fWbVywHaL6ga9z9eOhk-5ErjblmWNNrUtcgmIYIxe26VsztDMEUBFM73P42GDUzivGZrnMqFUDpsLtoJKGfBMGWFTQbzjX79devlAhZ3FJSATS1j60eDDp9birNPtEnWm3Incpls6Zcf2JKAxQ7k256LWpKGK7Y73blnxkvrLRG0EIDKUofFj9DENyC4BY-LH5-vHuuK0aY7hlkgt_SknHWDkpmIJnBt40iFZZ4OGx3vY_rPSOh5SyGo8YJCO6YMmhWFvKN5mZWN9sBAKFfOH2uKdG0gFvzVSM44DeLhw8QAiiBJWYVLa53VRgEs4JqzCrVGn3bpJr1GssXENwtNCbfYNGsaxDMAJr3T7rOu1rrXQMv-yLFUuI1xJ0oVafAotb7zGSjxBO8kZyaaNnwbwDNc2Oc84EtwMmy-A3LchLCyRJOhJkX17WZvdF1o68VnKyNicDJ5DmNJ1itJ-qFa_wMglvGNa3gpORi8kRlLhQ1z-FkASeTJSETLURFVsYhBLdH6TWdFce1WgkNJyURlZCTguElF0ozoto1rCMeNytdgOCWbD23wdsaUQuqb-ADwYyKEgR3sMZSUQmxhpQXUJSwZBZl1HXrhwZTBIKpsWrIep3iS1g2nFidKAYqjpISBDPGtRmKEuP0AAo86D17m38BTcsYpdBA2ZqeelHtL18k49rqxoPEhAKU9p0k_u1RKC0pXnfGa1ax-pueSQMA-uA9d-QZ42iJ9x3iC5SH-4ifVRTzpr7nC7bkuAIobbiNwAWshFniEqQaYnpS0YjUokB-mMKZ0RXjL5-ofGlp-y_Mi8qsmHYYjvrMBNf0WXcu3bP_b-cPuvmTpAiQ54UoMopmmWqDxHMaP8bhpGK8eZ4sedM-INdKXMeWZDukJzgcT5jFWUlgrVeS4uLxG6uq02a34_vZI5fcMInhUlkITiU7TOJ-4ng8MUqTMoA4F1KfNq0d2E-b7Ezr5ydP6Of9hOl4wiCjWXzahHZIP2E2VLDES3Dkpd81yr81vrf5wIlR_tz22QHUwmc8ycgPJr5HkiLeR53huAdQyPbpP5li2kElPQrY-Tlqae458scc-VmehtDmfr2H3ASKR0lNcLBPuwzExhcQTAmuqhyTb48lb_cLuwq1aHKld5nerxymtXNjf0BzsrY_QEmF13mBTUDb0o3SjVc_kBIbGhwfahAb-eikSHHi-SMTMuHv7nmFG2VA27jqNgY2_H-ZXi2asmSE0S5WLuo2Vh41rLeK4wI60_LY60wwdiJ5GiZ4vxP5ETI_vxOwDPbsh44TiGPs72d_zngxUKg9Jn_Ugf43XtM_7jxzIarLeBLDeA9LNNYKn5Z-abfwXPCXtWgU5HhNVavr2dhf7vrKB4m5KoVcn4jZwHUe3-kOTToek468EI2i4oOkdEuQ3fC8g6s7h7HW1T-81I7pm5ZPgnxoWFUYwbgRsB_3SZDT-EzGfEZ-kRcX5_N0Dt_FW-rwFpDg8rz9T4MrVjL6DjGOhp7MbeZKEqXkP0SSyHN4i3LqX5y3L4JxTeXpLA4Gnsyp70qR0Pw_RYrI4S2OAvyDeGsDxkdeilMjAwpcLuLoR9iZcRZt6ynEhy7xuR9dnPjZr78-rJi6e67lzu6mf3CiGJzcIsKRd3lD2WXhXbQ7yUXqZbF3cdrb3fouB8P2E_lwkwecfAc-ziQDJzmI4-w7WMLXrlS1y8P4yYm8uKEfZ9lfRQ6BE9pTlGfoyM5xZrYxEjOuj6z_p9kmWm62-6HxsXOc4CAPRqFjajfxX6lqKj0-MxmwpmVDQXAHCa5IY9jpIVlgzVSJSVsqnL3WY7yFsrVAN85v95sbnFx0j-683neeZ3g9tNwhTvqTnYGCPOGq2ejuG3h957qzVyXxd8F5ZEuGz5nghNZu1cFYAnIsIUpTCmcrSr6dG8P-kGwqJX75ag_IDqJgNGU4ZrHGVfVPSrSQH9d1td8ozSCXmPeJpJXyV8yX9ASBvIJ14GJN6YEy_psF8PeF-swhohNHHyJCR1hxGRyoxlhhDY8S590h8AaFno9TSjSbWQaHjK_J1YW9E-2Pg9SA1kM62inEJcmiPDp4OMvUymXnlhbNHhtw4d4L2FGlthPTYi98Vl23xWZb0j0uJle_1ZarnsCOj3bbG59AaQ_RvWRLxnE1w1U1lUubiAxcQHuy3P88WKIwHXZKFNd2qlqK-tpzs8gt9Xs8XOxKOCuTy1SsWpG5ElNv1owjVmOc1fZA4m3OtHej59cMV5Kbn3uPIHbyis7sK6wUK9kbSlYbfXiN7e2aVmk2_zVPtiU9_w01vWPalPzdq3lBOrYn7JPsQMbw__bwJ7SHs0fUVgN6_RidN8QFDVNyoNw5LYrPVK_ENsjNMC9YgTV9j4qY1ikhVKkvmMnT3i15Rb3OJcYTlfP-icpK4GILy4LqAwp3bNQXLPH6Xtqj-oORdDNq1-WFniPQCPmvCfSAII-K6E-G7EmIntWgWoS3BhWOD4aKMkrTA4dgtiJjkq8HcZ__ixJ9X1rQdgsECyJMk6vd-w_JjoWjz43GeUVPxN-d8QIgWph6EMdnCtjzkyh4BcTdM8Q_GWqHiBg7h_Nj26LXYxs42CJvfHI5cBBE3_O_MLaXwNKg1WPp1ODiPPcv_2rJfon0raed2oe71bck-ItUHEK3-pZGZXJx2hd6rR1rsC07acoZFzcr3DJFsCw2b8O-HSWntpdmyKOX11KxrkXDi120xk-mQ9_3dp6cml-GUBQeqTW9VWY_ssJkeeh9S-a8iFik5etXtvod0ubSxx87L9y_VbrE64aGvS3zkfsqdp7ieD_zX6i0b_hQXjC-HN2rMnvXyxNuSOsJH6d_cYSz6ED6Z6PrHS_uS2szlSX5F870XOKlPTzcLZS0JvbLpsfgxfjrGkvdbxB2LSZCDmW5X55K2ea65JmjaktLj-E4QwlJkmWj90G-2NtRg98fRG1tdvdt0vsa_7uhX7R0j2tJ9Q8pmtqmHHsKET0Yn0XRVPTjuhZSL7TdJF3kqLtlswdhXD0I84yGeAeE6eLhYDnt0nllS1JP8CiPCNOQeFk6LhwU9B-UT8nm9quJ-ZQ0mk43R_IXILMjpCdzlDKEuU_idFRCmEvBNeXFHjovRGFLQ0_hKFyHOKNRSKETP82ara8jdD-Wh1m6iP52dPZcjAJ0SDySJnScpVt6e2aetkHJTRZGzF4kse_o66kfBV-viLwoKSEh_mN3a3z_WcYK7xRFx21oZmsZl2GipXLLQ-yNeQiTIsBwA_vMf7B-IT1aNtphyKk0mTm6Sx2j3KiQ7InK3SAU-2MnkYVRmZ2zvNMu3KnOzJ-J9RrzwrXivdKzN3RNm6jN6tgAMABHS8aXXbhoRbsd8PhInp99v_0jx4qRR2W7dxCOOpuGRy0x02rz2JkOV5UxBSEHz02XQUI23X5boR3y2h2on0S-Rxg791EjOrw6u-_Wafvka8MXuKTVywjL713r6CjuFT5wlYt4Jfw7K4eTGO7XgnCMWpTESXEQNSs1vBMZN1COXLcz0HQ49AbHka5T56LTlrHzZgmW7V6VnGQmSpPxlvktoPwkcnUYkZ9EvvNOyzFfvNWAGjPZXeI_AcROTb4LlAasHsrYgbIsaHSI7NvB76MEYU9mcEgE3xHKC2SrFp4evMSJ4UWQdEn1JhPZEG9dyXSnwnooQp8797CU9XSPsj-P-KGXh_aLO-deuJ26XzhzLulnRXbiNxDskO2EiedOSEMPPj6aMY9KY6kfB2y9eQkaDpbw3UQtoRFsJz-_nMzk3dI7H4UBaN5_F-aquAmKLMjwFb3xkxBFmZ-l_tXqJicpyvMSl6UflEGY4pzmeULLwo8ThMPwit0gD0VegHzk-1noX4cop7FHM5wWBaXYA6FH15hV10ZPr4VcXjGlGnrjByhM_KsK57RSmw9jyRv74aO8WSoQehVTWvXjNNOV_YSW_d4ViG7bb2VAwSHHa8aXsMAaw7W9GAEZ778wRZ9rSZVigptmE1QraL-EddXI6mb8gacl06sm777qZG1r52tMlgEF0Lzj4ekG_V8AAAD__8IroAs">