<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/115098>115098</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Assertion `TA.getKind() != TemplateArgument::Pack || TA.pack_size() == 1' failed
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
davidstone
</td>
</tr>
</table>
<pre>
The following translation unit:
```c++
struct a {
};
template<typename>
struct b {
};
template<typename... Ts>
struct c {
template<typename T> requires(void(sizeof...(Ts)), false)
friend bool operator==(c, b<T>);
};
template<typename... Ts>
struct d {
template<typename T> requires(void(sizeof...(Ts)), false)
friend bool operator==(d, b<T>);
};
void f() {
auto x = c<a>();
auto y = d<a, a>();
}
```
causes clang to crash with
```console
clang++: /root/llvm-project/clang/lib/Sema/SemaTemplateInstantiate.cpp:1748: clang::ExprResult {anonymous}::TemplateInstantiator::RebuildSizeOfPackExpr(clang::SourceLocation, clang::NamedDecl*, clang::SourceLocation, clang::SourceLocation, std::optional<unsigned int>, llvm::ArrayRef<clang::TemplateArgument>): Assertion `TA.getKind() != TemplateArgument::Pack || TA.pack_size() == 1' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
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. <source>:22:20: current parser token ';'
2. <source>:20:10: parsing function body 'f'
3. <source>:20:10: in compound statement ('{}')
4. <source>:15:8: instantiating class definition 'd<a, a>'
#0 0x0000000003be9e28 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3be9e28)
#1 0x0000000003be7b2c llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3be7b2c)
#2 0x0000000003b35468 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
#3 0x0000730f96042520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x0000730f960969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
#5 0x0000730f96042476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
#6 0x0000730f960287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
#7 0x0000730f9602871b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
#8 0x0000730f96039e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#9 0x000000000740eeeb (anonymous namespace)::TemplateInstantiator::RebuildSizeOfPackExpr(clang::SourceLocation, clang::NamedDecl*, clang::SourceLocation, clang::SourceLocation, std::optional<unsigned int>, llvm::ArrayRef<clang::TemplateArgument>) SemaTemplateInstantiate.cpp:0:0
#10 0x000000000748543d clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformSizeOfPackExpr(clang::SizeOfPackExpr*) SemaTemplateInstantiate.cpp:0:0
#11 0x000000000746547e clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#12 0x000000000748ba08 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCXXFunctionalCastExpr(clang::CXXFunctionalCastExpr*) SemaTemplateInstantiate.cpp:0:0
#13 0x0000000007464ea8 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#14 0x00000000074744c0 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformBinaryOperator(clang::BinaryOperator*) SemaTemplateInstantiate.cpp:0:0
#15 0x0000000007464bf0 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#16 0x000000000746f748 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformParenExpr(clang::ParenExpr*) SemaTemplateInstantiate.cpp:0:0
#17 0x000000000746521a clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) SemaTemplateInstantiate.cpp:0:0
#18 0x000000000747539f clang::Sema::SubstConstraintExprWithoutSatisfaction(clang::Expr*, clang::MultiLevelTemplateArgumentList const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x747539f)
#19 0x00000000069cf78b SubstituteConstraintExpressionWithoutSatisfaction(clang::Sema&, clang::Sema::TemplateCompareNewDeclInfo const&, clang::Expr const*) SemaConcept.cpp:0:0
#20 0x00000000069db610 clang::Sema::AreConstraintExpressionsEqual(clang::NamedDecl const*, clang::Expr const*, clang::Sema::TemplateCompareNewDeclInfo const&, clang::Expr const*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x69db610)
#21 0x000000000725dce0 clang::Sema::TemplateParameterListsAreEqual(clang::Sema::TemplateCompareNewDeclInfo const&, clang::TemplateParameterList*, clang::NamedDecl const*, clang::TemplateParameterList*, bool, clang::Sema::TemplateParameterListEqualKind, clang::SourceLocation) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x725dce0)
#22 0x00000000071610be IsOverloadOrOverrideImpl(clang::Sema&, clang::FunctionDecl*, clang::FunctionDecl*, bool, bool, bool) SemaOverload.cpp:0:0
#23 0x0000000007161b11 clang::Sema::CheckOverload(clang::Scope*, clang::FunctionDecl*, clang::LookupResult const&, clang::NamedDecl*&, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x7161b11)
#24 0x0000000006ab3b90 clang::Sema::CheckFunctionDeclaration(clang::Scope*, clang::FunctionDecl*, clang::LookupResult&, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6ab3b90)
#25 0x000000000751a862 clang::TemplateDeclInstantiator::VisitFunctionDecl(clang::FunctionDecl*, clang::TemplateParameterList*, clang::TemplateDeclInstantiator::RewriteKind) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x751a862)
#26 0x0000000007520c6d clang::TemplateDeclInstantiator::VisitFunctionTemplateDecl(clang::FunctionTemplateDecl*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x7520c6d)
#27 0x000000000751dede clang::TemplateDeclInstantiator::VisitFriendDecl(clang::FriendDecl*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x751dede)
#28 0x0000000007489c1b clang::Sema::InstantiateClass(clang::SourceLocation, clang::CXXRecordDecl*, clang::CXXRecordDecl*, clang::MultiLevelTemplateArgumentList const&, clang::TemplateSpecializationKind, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x7489c1b)
#29 0x000000000748b90e clang::Sema::InstantiateClassTemplateSpecialization(clang::SourceLocation, clang::ClassTemplateSpecializationDecl*, clang::TemplateSpecializationKind, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x748b90e)
#30 0x000000000754d9af void llvm::function_ref<void ()>::callback_fn<clang::Sema::RequireCompleteTypeImpl(clang::SourceLocation, clang::QualType, clang::Sema::CompleteTypeKind, clang::Sema::TypeDiagnoser*)::'lambda'()>(long) SemaType.cpp:0:0
#31 0x00000000081c2751 clang::StackExhaustionHandler::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x81c2751)
#32 0x0000000007556e57 clang::Sema::RequireCompleteTypeImpl(clang::SourceLocation, clang::QualType, clang::Sema::CompleteTypeKind, clang::Sema::TypeDiagnoser*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x7556e57)
#33 0x00000000075571a5 clang::Sema::RequireCompleteType(clang::SourceLocation, clang::QualType, clang::Sema::CompleteTypeKind, clang::Sema::TypeDiagnoser&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x75571a5)
#34 0x0000000006dd563b clang::Sema::BuildCXXTypeConstructExpr(clang::TypeSourceInfo*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6dd563b)
#35 0x0000000006e7bf8d clang::Sema::ActOnCXXTypeConstructExpr(clang::OpaquePtr<clang::QualType>, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6e7bf8d)
#36 0x000000000677d0c5 clang::Parser::ParseCXXTypeConstructExpression(clang::DeclSpec const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x677d0c5)
#37 0x000000000676038a clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&, clang::Parser::TypeCastState, bool, bool*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x676038a)
#38 0x000000000675efce clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&, clang::Parser::TypeCastState, bool, bool*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x675efce)
#39 0x0000000006760eb7 clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, clang::Parser::TypeCastState, bool, bool*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6760eb7)
#40 0x0000000006760f49 clang::Parser::ParseAssignmentExpression(clang::Parser::TypeCastState) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6760f49)
#41 0x000000000671a878 clang::Parser::ParseDeclarationAfterDeclaratorAndAttributes(clang::Declarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::ForRangeInit*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x671a878)
#42 0x00000000067298d9 clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::ParsedAttributes&, clang::Parser::ParsedTemplateInfo&, clang::SourceLocation*, clang::Parser::ForRangeInit*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x67298d9)
#43 0x00000000067321f7 clang::Parser::ParseSimpleDeclaration(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::ParsedAttributes&, bool, clang::Parser::ForRangeInit*, clang::SourceLocation*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x67321f7)
#44 0x00000000067326b9 clang::Parser::ParseDeclaration(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::ParsedAttributes&, clang::SourceLocation*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x67326b9)
#45 0x00000000067de8d2 clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector<clang::Stmt*, 32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*, clang::ParsedAttributes&, clang::ParsedAttributes&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x67de8d2)
#46 0x00000000067df600 clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector<clang::Stmt*, 32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x67df600)
#47 0x00000000067e04c4 clang::Parser::ParseCompoundStatementBody(bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x67e04c4)
#48 0x00000000067e1c7a clang::Parser::ParseFunctionStatementBody(clang::Decl*, clang::Parser::ParseScope&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x67e1c7a)
#49 0x00000000066f5bb3 clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::LateParsedAttrList*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x66f5bb3)
#50 0x000000000672a2bd clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::ParsedAttributes&, clang::Parser::ParsedTemplateInfo&, clang::SourceLocation*, clang::Parser::ForRangeInit*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x672a2bd)
#51 0x00000000066e98fe clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x66e98fe)
#52 0x00000000066ea0be clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x66ea0be)
#53 0x00000000066f1853 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x66f1853)
#54 0x00000000066f273d clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x66f273d)
#55 0x00000000066e4c5a clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x66e4c5a)
#56 0x0000000004563b58 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4563b58)
#57 0x000000000481e689 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x481e689)
#58 0x000000000479d8fe clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x479d8fe)
#59 0x000000000490441e clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x490441e)
#60 0x0000000000ce624f cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xce624f)
#61 0x0000000000cddf0a ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#62 0x00000000045a6cb9 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
#63 0x0000000003b35914 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3b35914)
#64 0x00000000045a72af 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
#65 0x000000000456d63d clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x456d63d)
#66 0x000000000456e72d 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+++0x456e72d)
#67 0x0000000004575ae5 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4575ae5)
#68 0x0000000000ce30e9 clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xce30e9)
#69 0x0000000000bb0284 main (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xbb0284)
#70 0x0000730f96029d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#71 0x0000730f96029e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#72 0x0000000000cdd9be _start (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xcdd9be)
clang++: error: clang frontend command failed with exit code 134 (use -v to see invocation)
Compiler returned: 134
```
See it live: https://godbolt.org/z/Ybnxx96bq
This was broken by 463a4f15044c04279583d6d0da73ae49f4c242ec @zyn0217 @mizvekov
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsXF1z2ziW_TX0C0oqEvx-8IMix7PpTY-ztms2--QCwUsZa4pgA6Bj59dPASRlgqJkOy1mMjU95enIAnFxz8HFxcGHSaRkmwrg3Ak_OOHFGWnUPRfnOXlkuVS8grOM58_nt_eACl6W_BurNkgJUsmSKMYr1FRMOf7KcS8ct_9v5LY_1MEf9I_5VirRUIUIcuLuGye-cPwPw5oKtnVJFDj-Wj3XUJEtOP5Hq372zvrL5RLdyrEVOrDiphPV0K3jf0QC_miYAOng5JGz3MGJZN-BF8vl0sHJrXRwan7WqCClBP25t1kIBlWOMs5LxGsQRHHh-Bf6BydUV8kcf61b0bX8Pw8p_9dCyt8OSbeLCgcnDk4tp0mjOHpCjn-BqOOvibGUWMa6h57NQ7l5CK_R1JPxxSgahy5Q0kiQiJZEhzNHVBB5j74xdT8dyLySvISurq7URba_Qg6-FJwrB1-W5eN2UQv-_0D1r91zlyXLHHx5A1vS_XPb9c2nSipSKUYULGldO_7Ki4NE22yr-ivHX318qsU1yKZUmipS8ep5yxtpWNXl-8Z0p-iSa8gaVuY37DtcFV8IfdCmdPC9GL_hjaDwmVMzljWTg8K_ky3kF0BLB69GRUfr7RdKlbdFvNZfkdLx101lEk-OWKVM762R5q99biUEeb6GwvHXA8M91JXYNFvoqqWar5WUIEw6ciL3drXcgPpvVuV9iGFPR8t-dW1UE4OceO3Ea3S7WtaEPtzpEdHXNfGNPAfHqCCshHzZRsGXzx9XNx-RbLIt01ktazZIQM2F0vF0r1QtdQP40sGXG6bum2xJ-baLkv1gYVI2elBeIlJpTmjZ5IDUPXShmRH6oAShoImqBdSCU5ASciQN3WYUVDkiUnKqIypHoqmQpILVqnP5RmmsebOtdwnbXTpu-kXwjSBbRDpiZBfWvDZhzLc1K0Es4KkuuQDRh_aC9KzLhRJN9eDgy4xVL5GvRwhabPJvRBSLAC02aMG1XVLX2nqj6kYtJVpsNRdosXhKogWR24V8rhR5cvwLViko0aKo-OIRRMYl6HK0uEGLxYbSheK8pPeEVSYFHfFXPywrUst7rtCioLzkYpEzsqm4VIzKtg3DtP21idyLbh7DLnL8dcd3n309zaD1tb_CWP_HNSO5EQIqhWoiJAik-ANUyMGxzlM4bk3gKRO6tmdM6Kp61i2aipoY1zOytlHsLPjHLbAKaVZ4U-VIKqJA9zIyER7r_Btf6A99pg8mjHmh46-S1lafZ7RPtCRSohwKVrF2_OF4lJU7F5GDfRe5T27_Pz-DFHAyGPXyWXZjUrBKmWi9bUM-eXlIkG93XCoBZOvgSDejE4gZ5cmJYtbBH9ynzr0dK9p_b-R_nGE65f-6BFI19VV1wzY62-Fkl-1KrluZw1vtjOUttr31wyBK0FrH-DVQ_gjiuXXvv0iVl7rRpGPSembNKwVPqpugXPP_XRN-10Tsu0UauQEO9Rgx0NpZ7ymJ7qJgUbKqeVpsqqYtoEvJl5Fx3FSx3A5sm2mUFhTV6l4Aye8eWFm-rwFT32ogHDsdxBHaSMPFe50P4siyHdm2cRIXPiKZnhXeZdlUtCzHe5a97N02vcyymdg2_RTS6H02TRXLZjqMujhwAcD4uVMuSGtRWZtxnf6lYYyGQcdl4WDU6Szk2hQnYeDnQ-dvBcCtXqIVXGwdf_1D7H_sbXV2jnbBqGz1bkieDSkKgxhmh7QP5Efdx6MeyYibzO7--uvXy04SkHJNpNrHc-CR9wP0R_0TAJkf4On6J7Ddj4OAurO7_4FVRDxf9QtlC8i47P2QwnGPZMX8kE7XI9HI_SIO5g-oL0RAtY9h8PX7gcTjzIU98m_UD8loZIR-WlgTIWxJ96nJpFrzSipBWGUyyf8ydc8bdUMUkwWh7VQ56ZU1uf7elIp9hkcox7PhZyYVoroNo-1PLpM7gC-bWtj3LMESpbSIkwwZsEw1CmzEICXj1au4282eaCwqdlz2uNd8WxMBf4dvWqN8qgo-QL8ebwP1ZbteXvOKQj2hzbX6d21ceRZ57rQ3KzGJUn78ozGLlyk9NfDlmJ_z4T9xZHQEDSMD26IEhzmFAwz2eL4QQbagQOhAlisBExT-GRYm29kn-tVeOmYn47x8teOsigZku992VESffji3fWJ1mi3FvMhzM0Cf5NUjiJKT_EroT4Ll8GlbT_XMHue9gJpeRUyU9gTa_7Yjtndjesj6Y98zz5vuh_U90Ife2AgF5TW8ydFB6WfOH5q622c-EHz2WioaQjt1v7bQrX61JFxEMj9LDwxGw80QLhFkIkX_WZosCmajokNqUWFLv9AjSYSnRnebTcZL6n8wyZQNM3kzAW9MQMc9uIZvgiloM8bpg6clxGLMVpshdmmU_yBjw0enmbOfmGOy6hBYEONRUOSQw3shmvO9CWCD7-eBY7y14Ix0aZJSL5se7gOJuy6JlO_YHVp__XoNlIsDO0SvFL9Zxk4OjZsaKCMl-24c62fPuRJqS6DFcDres0hdeBvD0xDew_thK8fTzs8mTXMyJM0-wYjDIE9Jgcx59svGX39OcyfM5p8p7Q-nu4UcJWWZEfpwV1T29uAL6dftOb3WhiUouH2upxTLMZb_pyGlrnZQzA1tT8m3F9X3XMNFeywG3SqzLXBwXJJtlhNzftRDxEl_ymGWos_19NrTPk5JPIrj0JY7yuwo3pNGanj9OUV7DNSYVdhNUxSMMuiOi27atfRxit7aU6ePqA6jFVG2Xg3DCMJ4uhd-8Yg4_axguLDI8kdkxR4J30zWr0DULJsaLQ8WUbZazvMw8g9Mnx8aVubrr1-1o-0uQEMndpJ1cUuZXp--5TTlZZj93iiSlTB9INJvEbXHJ0ctziWxW3os_iyJHUGcFUl-YPOEqqvqdf6uavJHA1-UsNHvAu0N8P99CG35sgi1FHgUx7lLrZH7xdyPGHyeorTdl7KJ1YJBy4I5tw07fy1AsQ0ocv2EHAfUHb9MgRg-rJ8zv9vypv93rCeHVQ1hROq5UMF-1Vn2zVrkFjWJTU0IBYX_SGoMcouadBw1kMXzUvMr8WHgDvkI3DEfRZAe5WNl7ivrRdZbWBmhnAVSEaQWJM-G5JEkTo5CGmxRrQoFov-di1WVr5QSLGsUyP20R7rDw2Nxbz7nL8dBh_eWh7Uuubgm1QY-VWyu_faWGIs5bDOH0yQ_HgyahL8J3tT7EcCqTT8z7EN9Ia-73TRFhUX9-yieOPoZzb1j-fSzyTfcWuT7Nvk-9orjmemGaQl8cH_1NY7HjEwy_Hof7D_xSuLbY_e1fpqBfUOuxX4wZj_KXg_9X4v3fwGLUWbHsK3a4xySHB-P4f4y7JUYZ2Er8b5I75stKct_ADU7p9bOjdr28eTjxqjv15OGrvS2bppMGO_vphm6wbBsdcNI6-dF5Lo_0A2_Cu9zcKYpsTgbLSfADWhwXBh2F7p33H3g-bODk7nWdK1Lls8jnQ8ejY8vgfoTkrHPo_R1fHpsI6Y9vZsnog0QC6kt26MizDL_TUgvdjfjD0qU-VTc5_agrssCu5O60zPWEjJkLBwJe0xwlv-l5ebRcppbi3x7CRJBmhTHF-CaxCsxCNpPlQJRja-unEIbvNqhK0pBSnPSUzDNyAzxahixKMMjyoibvU5ZN1FZzB0c7icnbhx3P4U4zYtFnD9KjV4SHk-NH5_a0DqoYOcia468p9FadAQjOnDsH897t7w2Z8j7x-4Htox3idLs_E7InZe96d953pTwaVtz0W-BzDJjtjAtHsLReApouK8NVje3B29gzX2vpnXJ8tnSrUEY-Vlo7dyseQ5_g2rVXvjsNtuBNgpW_R3QGTztHLE8tdRikHgQJdZy8VLoubDKJ1ydycnWB8tJSx4GcZqPZqF112x7vYDCNKOHUc0Sy52fFhBL_QWpGwQe2HdTjcsveB532iA5hneWpNT5NwQQWWLMpRDhoECUendbwuxl1vBI6Z4Mbtx2p0nWd3iN2lcIzIGj9dKC4dkw8rxwCerJX3u3JlNMrxnNQfkUpsg-WdM2Oh1pHSjlgj2CmLzGEGE7bZCIZukp74S0bXcxtPbWfLslVT4e1JN9OPVHawN-lGDVpptG2g7eVbi7o09Pntf-khHJ6J00j3csWg_rL-6UIEzJvnhkjpSlHhPt4r0r14-sRkcOLeemymt3S37j2XR_-OO_e029YNAVU3_d2pZcN9UNKaB8tuj82ZdEOo-tyA9GIRZjYv2Vxn9ciGjSlzURaukejYVwNKXnkS3HLOJM35G9GbNn00rmo4r6gUNL8iOPju9R77CdWEBo2FZAjaUOxPjdvPzGM3mYlN94tncN8lhq3sVBTZgOAfO36G_nsQuWn8KmJsti05ZjYRwSCA95fjH4bAmHCcVwqBd-IpszyFlDj8VfMtInvgudnO0VSu-_SSurLim8Pm2fXJNozyzXLW3oZpmLkwBpp0_ddmt62Hbsjl4JkObpO9--YKpYNr2xTQhcdHenq91JRYS6G4B7cysQ2K3gsZJLM0Ct_ZP3mTG-a31Y7K8QCGGuwLfRhopuhYFoNyLaV_6YF0MheGI6unJAnh9oNxsJaPGIFEcSALGB7O8a6xU_EqAaUYEek7rykRdT3WhLCpXsUa-Hxu8R4nnGS7XkYuPgy-8Ovvy_rHp6SqPsj6GN23sm0TciUSbM62ayZxREPgkKL3SDgLoBjtMw8fMod3MS-wSCtAgoDjBQ5ATu9-fKxV6sP27Z90d44I_oLD_389RPyRmce7HvJiF2MT67P_fzPMckwq6Xp0kYU6zbcTPPpXGCYx-fsXPs4sDz3Mh1PT_ASxp5uZd4uQ8BSd0sdgIXtoSVSz2cNbQz8y6kc88L3TQ5K0kGpTSvp8O4gm_IlDoYO-HFmTg3r1HKmo10ArdkUskXM4qpEs5_5quhzhpRnv_4q586xI_n-J8BAAD__4Byl5k">