<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/144801>144801</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [bug report] Clang 18.1.3 segmentation fault while parsing an erroneous class template specializaiton
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          xealits
      </td>
    </tr>
</table>

<pre>
    Clang 18.1.3 crashed on a random test program and suggested to submit this bug report. I was just trying out a couple specializations of a variadic template with non-typename parameters in C++14. In the process, I tried an erroneous specialization like `template<char& a, char& b> struct S<> : public S<a, b> {...};` and got the following.

The log:
```
$ clang++ -std=c++14 -Wall -Wconversion specialise_variadic_templates.cpp
specialise_variadic_templates.cpp:32:8: error: partial specialization of 'Port8bit' does not use any of its template parameters
   32 | struct Port8bit<> : Port8bit<p_dir, p_out> {
      | ^
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: /usr/lib/llvm-18/bin/clang -cc1 -triple x86_64-pc-linux-gnu -emit-obj -mrelax-all -dumpdir a- -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name specialise_variadic_templates.cpp -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fdebug-compilation-dir=/home/ubuntu/tests/cpp -fcoverage-compilation-dir=/home/ubuntu/tests/cpp -resource-dir /usr/lib/llvm-18/lib/clang/18 -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13 -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/x86_64-linux-gnu/c++/13 -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/backward -internal-isystem /usr/lib/llvm-18/lib/clang/18/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wall -Wconversion -std=c++14 -fdeprecated-macro -ferror-limit 19 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fcxx-exceptions -fexceptions -fcolor-diagnostics -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/specialise_variadic_templates-b4a691.o -x c++ specialise_variadic_templates.cpp
1.      specialise_variadic_templates.cpp:33:18: current parser token '{'
2.      specialise_variadic_templates.cpp:32:1: parsing struct/union/class body 'Port8bit<>'



 #0 0x000072d562ba63bf llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) build-llvm/tools/clang/stage2-bins/llvm/lib/Support/Unix/Signals.inc:723:13
 #1 0x000072d562ba44f9 llvm::sys::RunSignalHandlers() build-llvm/tools/clang/stage2-bins/llvm/lib/Support/Signals.cpp:106:18
 #2 0x000072d562ba6b00 SignalHandler build-llvm/tools/clang/stage2-bins/llvm/lib/Support/Unix/Signals.inc:413:1
 #3 0x000072d561645330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
 #4 0x000072d56aea7a8a clang::InitializationSequence::Perform(clang::Sema&, clang::InitializedEntity const&, clang::InitializationKind const&, llvm::MutableArrayRef<clang::Expr*>, clang::QualType*) build-llvm/tools/clang/stage2-bins/clang/lib/Sema/SemaInit.cpp:8618:23
 #5 0x000072d56ac2272f BuildImplicitBaseInitializer build-llvm/tools/clang/stage2-bins/clang/lib/Sema/SemaDeclCXX.cpp:4946:24
 #6 0x000072d56ac21f9f clang::Sema::SetCtorInitializers(clang::CXXConstructorDecl*, bool, llvm::ArrayRef<clang::CXXCtorInitializer*>) build-llvm/tools/clang/stage2-bins/clang/lib/Sema/SemaDeclCXX.cpp:0:11
 #7 0x000072d56ac2549d clang::Sema::ActOnDefaultCtorInitializers(clang::Decl*) build-llvm/tools/clang/stage2-bins/clang/lib/Sema/SemaDeclCXX.cpp:5994:5
 #8 0x000072d56a19c1d0 clang::Parser::ParseLexedMethodDef(clang::Parser::LexedMethod&) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/ParseCXXInlineMethods.cpp:599:33
 #9 0x000072d56a19af1a clang::Parser::ParseLexedMethodDefs(clang::Parser::ParsingClass&) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/ParseCXXInlineMethods.cpp:530:33
#10 0x000072d56a1d1eac clang::Parser::ParseCXXMemberSpecification(clang::SourceLocation, clang::SourceLocation, clang::ParsedAttributes&, unsigned int, clang::Decl*) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/ParseDeclCXX.cpp:3694:21
#11 0x000072d56a1cf284 clang::Parser::ParseClassSpecifier(clang::tok::TokenKind, clang::SourceLocation, clang::DeclSpec&, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier, bool, clang::Parser::DeclSpecContext, clang::ParsedAttributes&) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/ParseDeclCXX.cpp:0:7
#12 0x000072d56a1b0e1d empty build-llvm/tools/clang/stage2-bins/llvm/include/llvm/ADT/SmallVector.h:94:46
#13 0x000072d56a1b0e1d empty build-llvm/tools/clang/stage2-bins/clang/include/clang/Sema/ParsedAttr.h:820:40
#14 0x000072d56a1b0e1d clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier, clang::Parser::DeclSpecContext, clang::Parser::LateParsedAttrList*, clang::ImplicitTypenameContext) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/ParseDecl.cpp:4403:23
#15 0x000072d56a2506ec is build-llvm/tools/clang/stage2-bins/clang/include/clang/Lex/Token.h:98:49
#16 0x000072d56a2506ec clang::Parser::ParseSingleDeclarationAfterTemplate(clang::DeclaratorContext, clang::Parser::ParsedTemplateInfo const&, clang::ParsingDeclRAIIObject&, clang::SourceLocation&, clang::ParsedAttributes&, clang::AccessSpecifier) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/ParseTemplate.cpp:241:11
#17 0x000072d56a24fa56 clang::Parser::ParseTemplateDeclarationOrSpecialization(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::AccessSpecifier) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/ParseTemplate.cpp:0:0
#18 0x000072d56a24f3d5 ObjCDeclContextSwitch build-llvm/tools/clang/stage2-bins/clang/include/clang/Parse/Parser.h:1059:11
#19 0x000072d56a24f3d5 clang::Parser::ParseDeclarationStartingWithTemplate(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::AccessSpecifier) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/ParseTemplate.cpp:42:25
#20 0x000072d56a1ab2cd clang::Parser::ParseDeclaration(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::ParsedAttributes&, clang::SourceLocation*) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/ParseDecl.cpp:1960:10
#21 0x000072d56a26148f clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/Parser.cpp:0:0
#22 0x000072d56a25ff7b clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/Parser.cpp:760:10
#23 0x000072d56a19747e clang::ParseAST(clang::Sema&, bool, bool) build-llvm/tools/clang/stage2-bins/clang/lib/Parse/ParseAST.cpp:162:5
#24 0x000072d56c00662c clang::FrontendAction::Execute() build-llvm/tools/clang/stage2-bins/clang/lib/Frontend/FrontendAction.cpp:1073:10
#25 0x000072d56bf830b4 getPtr build-llvm/tools/clang/stage2-bins/llvm/include/llvm/Support/Error.h:279:12
#26 0x000072d56bf830b4 operator bool build-llvm/tools/clang/stage2-bins/llvm/include/llvm/Support/Error.h:239:16
#27 0x000072d56bf830b4 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) build-llvm/tools/clang/stage2-bins/clang/lib/Frontend/CompilerInstance.cpp:1057:23
#28 0x000072d56c08263d clang::ExecuteCompilerInvocation(clang::CompilerInstance*) build-llvm/tools/clang/stage2-bins/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:272:25
#29 0x000060a51888442e cc1_main(llvm::ArrayRef<char const*>, char const*, void*) build-llvm/tools/clang/stage2-bins/clang/tools/driver/cc1_main.cpp:294:15
#30 0x000060a518881894 ExecuteCC1Tool build-llvm/tools/clang/stage2-bins/clang/tools/driver/driver.cpp:365:12
#31 0x000060a518880a26 clang_main(int, char**, llvm::ToolContext const&) build-llvm/tools/clang/stage2-bins/clang/tools/driver/driver.cpp:405:12
#32 0x000060a51888e383 main build-llvm/tools/clang/stage2-bins/build-llvm/tools/clang/stage2-bins/tools/clang/tools/driver/clang-driver.cpp:17:10
#33 0x000072d56162a1ca __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#34 0x000072d56162a28b call_init ./csu/../csu/libc-start.c:128:20
#35 0x000072d56162a28b __libc_start_main ./csu/../csu/libc-start.c:347:5
#36 0x000060a51887e255 _start (/usr/lib/llvm-18/bin/clang+0xe255)

clang++: error: unable to execute command: Segmentation fault (core dumped)
clang++: error: clang frontend command failed due to signal (use -v to see invocation)
Ubuntu clang version 18.1.3 (1ubuntu1)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
clang++: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang++: note: diagnostic msg: /tmp/specialise_variadic_templates-dd3a0e.cpp
clang++: note: diagnostic msg: /tmp/specialise_variadic_templates-dd3a0e.sh
clang++: note: diagnostic msg: 

********************
```

`specialise_variadic_templates-dd3a0e.sh` file:
```
$ cat bug_report_clang/specialise_variadic_templates-dd3a0e.sh 
# Crash reproducer for Ubuntu clang version 18.1.3 (1ubuntu1)
# Driver args: "--driver-mode=g++" "-std=c++14" "-Wall" "-Wconversion" "specialise_variadic_templates.cpp"
# Original command: "/usr/lib/llvm-18/bin/clang" "-cc1" "-triple" "x86_64-pc-linux-gnu" "-emit-obj" "-mrelax-all" "-dumpdir" "a-" "-disable-free" "-clear-ast-before-backend" "-disable-llvm-verifier" "-discard-value-names" "-main-file-name" "specialise_variadic_templates.cpp" "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" "-mframe-pointer=all" "-fmath-errno" "-ffp-contract=on" "-fno-rounding-math" "-mconstructor-aliases" "-funwind-tables=2" "-target-cpu" "x86-64" "-tune-cpu" "generic" "-debugger-tuning=gdb" "-fdebug-compilation-dir=/home/ubuntu/tests/cpp" "-fcoverage-compilation-dir=/home/ubuntu/tests/cpp" "-resource-dir" "/usr/lib/llvm-18/lib/clang/18" "-internal-isystem" "/usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13" "-internal-isystem" "/usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/x86_64-linux-gnu/c++/13" "-internal-isystem" "/usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/backward" "-internal-isystem" "/usr/lib/llvm-18/lib/clang/18/include" "-internal-isystem" "/usr/local/include" "-internal-isystem" "/usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include" "-internal-externc-isystem" "/usr/include/x86_64-linux-gnu" "-internal-externc-isystem" "/include" "-internal-externc-isystem" "/usr/include" "-Wall" "-Wconversion" "-std=c++14" "-fdeprecated-macro" "-ferror-limit" "19" "-fgnuc-version=4.2.1" "-fskip-odr-check-in-gmf" "-fcxx-exceptions" "-fexceptions" "-fcolor-diagnostics" "-faddrsig" "-D__GCC_HAVE_DWARF2_CFI_ASM=1" "-o" "/tmp/specialise_variadic_templates-b4a691.o" "-x" "c++" "specialise_variadic_templates.cpp"
 "/usr/lib/llvm-18/bin/clang" "-cc1" "-triple" "x86_64-pc-linux-gnu" "-emit-obj" "-mrelax-all" "-dumpdir" "a-" "-disable-free" "-clear-ast-before-backend" "-disable-llvm-verifier" "-discard-value-names" "-main-file-name" "specialise_variadic_templates.cpp" "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" "-mframe-pointer=all" "-fmath-errno" "-ffp-contract=on" "-fno-rounding-math" "-mconstructor-aliases" "-funwind-tables=2" "-target-cpu" "x86-64" "-tune-cpu" "generic" "-debugger-tuning=gdb" "-fdebug-compilation-dir=/home/ubuntu/tests/cpp" "-fcoverage-compilation-dir=/home/ubuntu/tests/cpp" "-Wall" "-Wconversion" "-std=c++14" "-fdeprecated-macro" "-ferror-limit" "19" "-fgnuc-version=4.2.1" "-fskip-odr-check-in-gmf" "-fcxx-exceptions" "-fexceptions" "-fcolor-diagnostics" "-faddrsig" "-D__GCC_HAVE_DWARF2_CFI_ASM=1" "-x" "c++" "specialise_variadic_templates-dd3a0e.cpp"
```

The `specialise_variadic_templates-dd3a0e.cpp` file is 81K lines long and github does not let me attach it. I will try to attach it in a comment. The code part is simple there:
```
/* many where were 2 headers:
#include <iostream>
#include <vector>
*/

// I want a template - i.e. the same name - for 2 sets of parameters: N and K
// not just the parameters themselves are different,
// but their number is different
// and I would like the more-parameters template to inherit from the smaller one

// https://stackoverflow.com/questions/73888241/template-specialization-for-variadic-template
template <class...>
struct is_first_a_vector_impl : std::false_type {
 is_first_a_vector_impl(void) {std::cout << "variadic template\n";}
};

template <class T, class... Ts>
struct is_first_a_vector_impl<std::vector<T>, Ts...> : std::true_type {
 is_first_a_vector_impl(void) {std::cout << "template with a vector\n";}
};

template<volatile char& ...>
struct Port8bit; // purposefully undefined

// partial specialisation:
// https://stackoverflow.com/questions/35283056/too-many-template-parameters-in-template-redeclaration
template<volatile char& p_dir, volatile char& p_out>
struct Port8bit<p_dir, p_out> {
 Port8bit(void) { std::cout << "basic port control\n"; }
  void print(void) { std::cout << "hey!\n"; }
};

template<volatile char& p_dir, volatile char& p_out, volatile char& p_int>
struct Port8bit<> : Port8bit<p_dir, p_out> {
  Port8bit(void) { std::cout << "port with interrupt control\n"; }
  void more(void) { std::cout << "more "; print(); }
};


volatile char dir, out, interrupt;

int main() {
 is_first_a_vector_impl<std::vector<double>> foo;
  if (foo) {
    std::cout << "foo is true\n";
  } else {
    std::cout << "foo is false\n";
 }

  Port8bit<dir, out> basic;
  Port8bit<dir, out, interrupt> interrupt_port;

  basic.print();
  interrupt_port.print();
 interrupt_port.more();

  return 0;
}
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsXFlz27iy_jXMSxdVJKj1wQ-0ZM24JnOSG2tO8qYCQVDChAQ4AOjl_vpbAMFNiy07zpx7qqbKiUQsje6vG40G0RBWiu04pVfe5NqbrD7gSu-FvHqkOGdafUhE-nS1zDHfQTgfhaMIiMRqT1MQHDBIzFNRgKZKQynFTuICME9BVbsdVZqmoAWoKimYBr1nCpJqB5KWQuoR3MIDVvBnpTRo-cT4DkSlAQMRVZlTUCUlDOfsf7FmgisQGWC4x5LhlBHQtChzrCk8ML0HLrivn0rKcUGhxBIXVFOpgHFYeujaQ9fheAS3HPSeGkYJVcpDS7gFLRlNAXOgUgpORaUOBoacfafgTYNmRC9akj2WHpoCNjSah8SLbkBpWRENd160NI9eFENZJTkjtsi2t-282fVoNPJmKy-69qaBBW0ntOUvE3kuHhjfjbwg9oJ4s6eQi50XmQdvGri_IPbQGIjRTS0i-EqnXrQijcTgf8V5Dv5XIvg9lcpI0win6LbBcttIpkakLL0gfrlNFEfIi-K5kc8AJ62gWGqG80P8RAYemn0WUs8Tpj00g1RQBVxoqBQFzJ9ME6ZVp9NOg14QA0CEwJstG3BbUh3GvaJymzJpcC63otIO65oMgCXjTW68IP788Sa-u2mME_cs09jsXutSGcTR2kPrHdP7KhkRUXhonef3zYdfSvEnJdpDa6ZURZWH1laVjJO8SqlVp50wkGDyXUtMqGVNUmeENAUlKlkXm55YKUEYNlNHVhwUkazUxhDuNCbfIa2KsjaEYOQFi8_NnJO7qqBcG5bBQ-tKScMiSxpGw7mH1gnjHlpbiwGfkBB8LZmZao_z6XY69kvi54xXj_6OV-DTgmlfJH-CX0ia40ff2pJhIGUSsA9-yhROcupnklLwSU6x9LHSfkIzIalvRKY87dpZTu6pZBmj0hYTLFP_HucV9c3UVeAXmHE_Y3ld8LK51twJYm3NL0RKcygZAb9kxM_pPc0B1Q9M-SWj4BeZMS6_FIxrKr1oZeXKCqz3PpWSC_CzrPSJ4EZf2otWgoOfceFLUfGU8Z1v2oJfEMFrkxTSxznDygiQVfyB8dTXRmTlRSsEvsZyR7VPyspA7U_H4OuKU1uwo5xKw3BKE-M1palifOdFq12agJ_Zcp-IomR5LaUx8GjlofVeFNRoO6m4rjy0Nn7Y2KDFJSPinkq8o2_oK2ltlab5eXuqn50HWodz8C2kHOc-U09K06LrW9veaNR22xHiobWzvNbsDJ2oaXjwn5tUZsjaw9nGf9ugJ3r9R_joD2poY_L9Acv0ufFfUlxH_1kqguD8sqbvIPCJtscD00fzhRwzcF5tz_d-_RCnFtnjhThLaSkpMX7dLzCRxsnYhdPPmVl_wgX42Y5XxHc0vGg1HqFRCH6mvrPSF6n0yZ6S7z7j_q7IzPx-fPTpI6FlHR_52eCBiFxIP2V4x4XSjJgynKZSsR34q-32l-Vy-2v875vt6mv8ZY22y_XtNr773YtWIfjCiKmL0kPrZz2wn4zxdBGOBPiP4MS9KMQIzep1UZwReVEc2kCDVFJSrk10oKgELb5TbkILs76jmRfE6GKiJngJXcyiTORZ-3GjW27At5NDKTDh7yB6sSFHPVr7Bx6KAggegyAIZiidTFGCp1GSgY0UotiLYvWk6i-fJePaLuWbOhiYd40kftgKpSXFhYemJiBgXHtoAUnF8tR3cYcWIle92as03lHkJ4yrXnBiJ91dVZp4xkPrPzh7NAVsx3GuRowTL4pnyGIbORHCAxHG42xxSoQvFa_p_Ip5mpsYDc3fh8uGvVpJYTCtVV-zhw4RToIABoz8LJzGocXJ8RH1-Qin40kUBWAhcNROOK6cJWSkxGjqoevg0Xbx0MIRHPcJYopneI5dWG_xvuVMd-H0Hf2ropxQZ05UZkIWHpr3OtzRAjsDOkWGpjdcM_0ENnx5pqEd7zfG00HLziJ-r2yME0uJn77QzOyLOio3j6X0UGxny4D8_1Q43zyV1FS-zmqaUqc0K6X9MBw7o5lPra9AjVFPBuAShGYog2sz5m1R5owwfY0V7bB5lRGdZWhFSb789s3xNF6MjSWjseNpesBTmC0yONSf-6aXWsgee2qo6uW3b8suCDXDWliXkAiRD7V1Wk2GwHCERmnvo5ohEoGZR81Emh3AMBkv0tMwxER_4iua4Sp_AY8WgZ_B_WSxGJsPx_98wH-4IGEa9Pn_bJep3veP9JGmv1O9F-mKZkPG-4177eyc-wFZLNnmc_nt2y3PGac1bdWJVa-ztViLA7FwFuJXiKXOy_W5XmuXZmX9WwSLgkYws7wFQ8HSkGLyrGDLb99-p0VC5Z0JKTJW7zEPfK3dJn0UTd3A1T1baYdIY60lSypNlXOvFbfv49J67R_0eA_jHuA2NO9oas0bhQ6vcIgXydB8_DxeRrEOK-NH-jhp8b3-sjFRm1lUXoOVYdQQPl6sjphINy7Wu-WZOLfExYTQAaudwzxDu-FgKbimj4eaOanLn6MlY9IzpyE01FAS0DAFWpT66Q2hULdjcgXxamPcYIHz_N_ULC-jvRfF1kbGU8dB9C4cNKW9Pa4rcb64w9fyMEcGhXHgmBifYuI5GzGIYlmHU40NnFhIfrLFvd3SmnUCa9oh85GZcePDYM5FORv3cryl-p7W2cQ54yBqYi-jl2HshSbBlBKwZwDvYBkfqQnUrTep7XJuIy039PTU0M8p8Y7xXd43jDjTVDaaPbYN00rIl3V0uYW41dEQ_xLf3n5K6hfLh80O_eRJ8zxeVp4zxfcyhUZKZw5oHDbhnlHJMNxD4wxPps-i1pDrKeVTvRS3m5PX6eW_B7rA_qtxmx_iFqUT-JT8ubTrQi3o3QPTZP8-E2vAV-1vw2Cy6KtycYqlSx2uxlIzvvvK9P5t0-u_R41jZKbBpEYNHcSfOEHk4mXq70bo5RaHY7xzWNq8A1pM7Z7RTQY0jEnRNBzPs2cxvHmsX-OexfI9sOi57jpmeEcw5LFLQOhgdcuyWfK8KxXlR3pP83oH0Rf_U4n_quhnLYevBUzDX6SoSvvC4OaE-tvN-e8irXJ6W5RC6jttZ_M7Br-N-LOhHRzEnYvZeEaPEIjvNmdfjDXhfv35XtzGd5vGcKfIvSow7A4iVBIE0ykahCNraeYxT2NiDdS9QKOksr7xh_hrSPe-1qO0b1lnUR_ZQdCWZPMoSMawo_qzfsv71aNNRfeq9UZKt6VAM7u6IMfB9BQHoqTW4VmF_TRGIsuI29yg2SlG-u_O7LEqlbdcady-knV6c6oc2N-Bmn9wnvQ0e8hJq9vJrBeQo_nQDOdoGg1WIMd6R-1enHrncST3D_q7RpCNnYvrs1w0ceVssKw2wcg0wJNwPp-Px4gCIeG2wIwPzlf6b0D3WDaBePuOelCGlnAvWPp22ZpWqWT3JsZYNzw1YtiddOjEaA-QGjHC-WIMDRTLcPNKsz_LRf2lfeUz6c289gSo4SHAyIXoDZjNSymb8hQ7nDqEDZcuJOltc94HvgHj42DAODpgnEbzCAzLrxn5FU0Pa491bSr8AcvhrOdmD0-REA4Jhu02ZwnZKhMibwnOcws7jAxBVTUH4-pJpbQ0w_FS5-506bCT9WczY2Fu8g-PmcyIaJ6Abc8404eD1F8NZd9SHhGLtz1baWSYnKI4kOEU-ycpR-NZt1y2ByROnTOKJhOoSbqTthfzm-xBm-lXn7N5QdwUm79-1lrFcZJT0AJoPduAiKLAPDWVd3RXUK7rRDZ7_mAYIEJSm4lF05r8Odq2HDLn3xrCkGGW0xTSyg6r7GGjoVspCv69LaMUWM_9mkH-sJk6jmaTaeCSMj00D-tMnrBuvLEZR4aHE7ldNqdQUpyCzZey5-BCsUcviK1Pz3Oarpgc5JIZbI8E5UKbVQ-6LAMo1M72C-LGQbzpz6rMpejFm028_BU2v97A-tPHj5--3v7rF1jffry5g80nW3z9xy_w5ebzpy-bOjfu86n8urkyruhsjl3bQFKw-WQ0BaxrepeLfVnWRJpGOKAuFeInEVf71-rrx1XWz021j5dyOg0gYzk9k-KKNSTVbltnZ25bl3wZ7doUI1jaNExrGGlFqIRMSHjVnDJUVtalA5Y7l2qJfOfmbe6hF60auBGytQeZQE3xV5zn7fcuc8gVvZzDgtzSB58k2zHjP3pey9Re5CPr8QkJm691Pqh7OuU5XLsmN7R57jJEmxKXJ-oesd-W93JGWwbOZI4e9hnkj_YqD7NIW64GuaSvwLaVaZBX6ipKRpombY6pK0D9ijrftKV2Iuu0qevlnrZFhxmobcVhHmo7wIls1LbTUU5qq_A2M7VTuj9tzbTJUnXPLle1hf5Uxmo75tvyVtvub85ebSj0c1hd2SsSImsahxmOh3R-YmLnf4CBFzJc_x-A0ma7XsrL5ZmvF1McZsH-jaCcz4g9YuIgafWQmedUfimlHx36knXw3Op5lE3bVvRyal1ZuGgrT-XXtpUns2w7bzTIte2GOy46yrtta1z2bfP8fA5u00p0AL4mH7fp_ui-kEFUcmF88U8g8U8g8U8g8Y-PeslHvcHJ9LfA9V5muHfc7O2dy4tpuA0kMAXz8DfIGacKcsF39c1Ke3-vu3eYUw0FBaw1Jntg9V1Ulueg5RNo0VUA4_ZCalFQrkdguCIitRcUtRlLsaLM7TU_eXLzuvZQDAXmT_BgmsCD-Q_BnuKUSuV6oKi5SuJFS9bcAIhujurubRpWU2PJu2372kNre5-Wa8DdPUof2IiO7C1EhQsK9kqdb3e-CBTV9lJt77JlFMO_LGC_dVQNXvUd3f3gaq3e00LR_J4q-8okZVlGJbXvh7vOSWX7MQm8KhIqDWZdy7aZGfIWHkSVp_V1WzNWYRx4f8BGKi2A8T2VTEMmRVGLV-A8pxIEpwNMhvc4lcbku3EHWS4e3HXOvyqq3OxYz6L5fI7GofUD9Wj-8DarnwnpN6bot1eCg7jlrj5IVWo0GtWacrdWmdpmTCq9xdtaj1tjO_b2qvUgsRfFGc4V3eqnkjaXVk_38tC8PpxYmHZtdyIqDfaKytJMwKO70t5kabyWF117s5XBqL5-bPE64h827sjXigIbdYE0XrRsmWmMdblx5ysbB8lQZC2r95N4eCkcg-PhArHN7BJmbchpe6H7UIPdJaBrcOZVVrIUimZVnj9BxVOaMU7TgQUe3opWuDnjfaORRhM0j4LJtD538I13aQ2xN1_M6tAWS5r2EiCeF7u9QH2ipr5RfQqS8_euu5vffRXCOR0mWDEC9h62jVtE3ukPagWCPZqDUtrjqIuo7umTh8IjSpeawkuYnK4x7J1B61UX11-JoMXOzgAbIsqqfBFK42svpG6agqPRaMBDi9OYekE8wAWciA6zlr-2A-Ma3FmjY-QZn3DK26SiSnJqYI9uIBOipgzAMvDQ3BR0ZAHOSpkJYdYq45167sP08WYroLmilxOxXn1IxSE1UG607IET3YCdCM2op1sNIbzpHrY2t6EBFWpao6G6algGPU60OGjgDKWtt0Qk1ZXkELiiWrYmDvqQXkXpIlrgD_QqnE0C47zQ9MP-aoKms0UYoHEwm5JwQSZpNpvjcYLnESE4WnxgVyhAk2AazlE4jsbTUTLDlKQ0CqcTTOgCe-OAFpjlI7OfGwm5-2B_heEqHI_nQfghxwnNlf1hE4Sajao3WX2QV3YDmFQ75Y2DnCmtOhKa6dz-Gkr3gxDeZAWD30BRx8eCD3tj48110sHvidTLabs2dQEF04J_qGR-9fZfm3Ci3l-h_wsAAP__pgznOA">