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

    <tr>
        <th>Summary</th>
        <td>
            Incorrect using of `final` triggers a clang frontend crash
        </td>
    </tr>

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

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

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

<pre>
    Consider the following invalid code:

```c++
template<class T, class = decltype(T())>
char f(int);

struct A { 
    virtual ~A() = 0 final;
};

auto a = f<A>(0);
```

The `final` specifier here erroneously appears after the pure virtual destructor declaration, which causes a clang frontend command failure with the following output:

```c++
<source>:5:13: error: initializer on function does not look like a pure-specifier
    5 |     virtual ~A() = 0 final;
      | ^      ~
<source>:5:21: error: expected ';' at end of declaration list
    5 |     virtual ~A() = 0 final;
      |                     ^
 |                     ;
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-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 <source>
1.      <source>:8:16: current parser token ')'
 #0 0x0000000003a2b6e8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3a2b6e8)
 #1 0x0000000003a29834 llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3a29834)
 #2 0x0000000003979e38 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007a51ac842520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x000000000679b663 clang::Sema::MarkFunctionReferenced(clang::SourceLocation, clang::FunctionDecl*, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x679b663)
 #5 0x0000000006840a81 clang::Sema::ActOnDecltypeExpression(clang::Expr*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x6840a81)
 #6 0x0000000006d9414b clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&, clang::TypeLoc) SemaTemplateInstantiate.cpp:0:0
 #7 0x0000000006d9764b clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeSourceInfo*) SemaTemplateInstantiate.cpp:0:0
 #8 0x0000000006dad5c1 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformTemplateArgument(clang::TemplateArgumentLoc const&, clang::TemplateArgumentLoc&, bool) SemaTemplateInstantiate.cpp:0:0
 #9 0x0000000006dadf42 clang::Sema::SubstTemplateArgument(clang::TemplateArgumentLoc const&, clang::MultiLevelTemplateArgumentList const&, clang::TemplateArgumentLoc&, clang::SourceLocation, clang::DeclarationName const&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x6dadf42)
#10 0x0000000006c0cf7e clang::Sema::SubstDefaultTemplateArgumentIfAvailable(clang::TemplateDecl*, clang::SourceLocation, clang::SourceLocation, clang::Decl*, llvm::ArrayRef<clang::TemplateArgument>, llvm::ArrayRef<clang::TemplateArgument>, bool&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x6c0cf7e)
#11 0x0000000006cf764b clang::TemplateDeductionResult ConvertDeducedTemplateArguments<clang::FunctionTemplateDecl>(clang::Sema&, clang::FunctionTemplateDecl*, bool, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&, clang::sema::TemplateDeductionInfo&, llvm::SmallVectorImpl<clang::TemplateArgument>&, llvm::SmallVectorImpl<clang::TemplateArgument>&, clang::LocalInstantiationScope*, unsigned int, bool*) (.constprop.0) SemaTemplateDeduction.cpp:0:0
#12 0x0000000006d16ffe clang::Sema::FinishTemplateArgumentDeduction(clang::FunctionTemplateDecl*, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&, unsigned int, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, llvm::SmallVectorImpl<clang::Sema::OriginalCallArg> const*, bool, llvm::function_ref<bool ()>) (.constprop.0) SemaTemplateDeduction.cpp:0:0
#13 0x0000000006d1800a 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, clang::QualType, clang::Expr::Classification, llvm::function_ref<bool (llvm::ArrayRef<clang::QualType>)>)::'lambda1'()>(long) SemaTemplateDeduction.cpp:0:0
#14 0x0000000007947f91 clang::StackExhaustionHandler::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x7947f91)
#15 0x0000000006d0d6e7 clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool, bool, clang::QualType, clang::Expr::Classification, llvm::function_ref<bool (llvm::ArrayRef<clang::QualType>)>) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x6d0d6e7)
#16 0x0000000006b67d66 clang::Sema::AddTemplateOverloadCandidate(clang::FunctionTemplateDecl*, clang::DeclAccessPair, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool, bool, bool, clang::CallExpr::ADLCallKind, clang::OverloadCandidateParamOrder, bool) (.constprop.1) SemaOverload.cpp:0:0
#17 0x0000000006b69ffc clang::Sema::AddOverloadedCallCandidates(clang::UnresolvedLookupExpr*, llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x6b69ffc)
#18 0x0000000006b6a2ae clang::Sema::buildOverloadedCallSet(clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::OverloadCandidateSet*, clang::ActionResult<clang::Expr*, true>*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x6b6a2ae)
#19 0x0000000006b6c12e clang::Sema::BuildOverloadedCallExpr(clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x6b6c12e)
#20 0x00000000067bb5b8 clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x67bb5b8)
#21 0x00000000067bfc0c clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x67bfc0c)
#22 0x00000000062ef1c7 clang::Parser::ParsePostfixExpressionSuffix(clang::ActionResult<clang::Expr*, true>) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x62ef1c7)
#23 0x00000000062e6f21 clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&, clang::Parser::TypeCastState, bool, bool*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x62e6f21)
#24 0x00000000062e8c35 clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&, clang::Parser::TypeCastState, bool, bool*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x62e8c35)
#25 0x00000000062e915a clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, clang::Parser::TypeCastState, bool, bool*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x62e915a)
#26 0x00000000062e9329 clang::Parser::ParseAssignmentExpression(clang::Parser::TypeCastState) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x62e9329)
#27 0x00000000062a1bb8 clang::Parser::ParseDeclarationAfterDeclaratorAndAttributes(clang::Declarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::ForRangeInit*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x62a1bb8)
#28 0x00000000062b780c clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::ParsedAttributes&, clang::Parser::ParsedTemplateInfo&, clang::SourceLocation*, clang::Parser::ForRangeInit*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x62b780c)
#29 0x00000000062662c7 clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x62662c7)
#30 0x00000000062670de clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x62670de)
#31 0x00000000062709c2 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x62709c2)
#32 0x0000000006272258 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x6272258)
#33 0x000000000626092a clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x626092a)
#34 0x0000000004367615 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4367615)
#35 0x0000000004633561 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4633561)
#36 0x00000000045b34ab clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x45b34ab)
#37 0x000000000471d593 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x471d593)
#38 0x0000000000d012ca cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0xd012ca)
#39 0x0000000000cf9b1d ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#40 0x00000000043b0589 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
#41 0x000000000397a263 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x397a263)
#42 0x00000000043b07a9 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
#43 0x000000000437722d clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-trunk/bin/clang+++0x437722d)
#44 0x000000000437822d clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/opt/compiler-explorer/clang-trunk/bin/clang+++0x437822d)
#45 0x0000000004381ecc clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4381ecc)
#46 0x0000000000cfdf71 clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0xcfdf71)
#47 0x0000000000bc5e54 main (/opt/compiler-explorer/clang-trunk/bin/clang+++0xbc5e54)
#48 0x00007a51ac829d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#49 0x00007a51ac829e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#50 0x0000000000cf95b5 _start (/opt/compiler-explorer/clang-trunk/bin/clang+++0xcf95b5)
clang++: error: clang frontend command failed with exit code 139 (use -v to see invocation)
Compiler returned: 139
```
Please check [https://godbolt.org/z/53j77M1EG](https://godbolt.org/z/53j77M1EG)


</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsW0t3o7qW_jVkouUsEObhQQbESU7ndFUnXU53D7OEELZusERLIuXcwf3tvSSBQfiRVB1Sp7vPzXJVHNDj29_e7AeSkJR0zQi58qJrL7q5QI3acHH1rZGbwIdheJHz4u1qyZmkBRFAbQgoeVXx75StAWWvqKIFwLwgXph5vvnEvv1gD17rj58psq0rpIgXLnGFpARPHlwC-9ULb0BBcKXeauLB9MmDqQcX-hPeen6GN0iA0oMpZcpcvLazSCUarEAGvOQaeH4GAACvVKgGVeAfmR3EjO2DkjJUtR2Tm_0IqFEcINOm9MJlpueDqd9P0slhmz9tCPBi3w4W-0DWBNOSEgE2RBBAhOCM8EZWbwDVNUFCAlSqlrK6EWQPryAWPBdGcCSQopxpRr5vKN4AjBpJJECaILYGpeBMEaZZ3m4RK0CJaKXH-07VZqQQ3qi6UedU4YVLyRuBiRY3zCIvzILQCzMjgNBfKKOKoor-nQjAGSgbhjU-UHAiAeMKVJy_gIq-EICMYLM9Fa0eIuAlS_AxjZhmpr0X3do__nEcJgwcmGRXE6xIATyY6KFgApACmideDnkFFZXqDwE79uNF2jhP3zZDPH65zVa3QDb5liqAQN6sgSA1FwooDjZK1VKrCt558G5N1abJLzHfevCuql67X7Na8L8RrDx4R6VsiPTgHdBWQBmumoIYA8ACyQ3IEX5RAmGiTakWpBYcEylJAVoq4dL0RFJyTJHmTjQMSCxorS49P1sphF9A0Wxra0H-pecvHgVfC7QFSKybLWFKQwYevOO1xoT5tqYVETOyqysuiNDXtNnOlGjYiwfvcsq6a9YIwWxdfEeinM3BbA1mXA-G6loPaaz3UoLZVosOZrNdGs-Q3M7kG1No54U3lClSgVnJ-OyViJxLou-D2QrMZmuMZ4rzCm8QZV54cxakbiwZquWGKzArMa-4mBUUrRmXimJp5zDEOpcdw_SzQFM0MtZUP1Oxpgk3QhCmQI2E1J6AvxBm7FU7uMQYEAx94O_87idEMI9JCowFhJkXZvJN2i-PgjJlVPRklZz2jQT6_sylEgRtPRhrRVt3CYx1_7yuPHjt71pMGrRFHIwQL9JwfgzxsiKINfUDW9G1fq5g2jATbQpQcT3FZPg0gh4fdPAtkgUJU7DUqvxGMH8l4s0C-hfEikpP0wYXt81Su92dusS1fhx888-OH7bjJygKEE7nMIJ-K0lFcw_e7dL4OZ7PKsqa3WzNGnsDX0p-GRvIpksPeD4EHCeLPI5D6_0tkSuyRfbbVyRe7lqP_I2URBCGSeHBdNja2OIXjvdxZXCz63xDcOXBTN_NOa-m0kULvhctckRL5z5Kg-OiZVg9GFg6E7jd1YJIafAPZdPXDeyJ4FpAPdzYgVss5sE8H8J9EoQ8CcRkycXWC5ceTBHj7G3LGwkY2hJZm2dz0TZvE597JhViiiKlg9dtN1Y7zpNNfYbTvNVagdcNrQotTDzSYntf06AJPJyGHDHbZCRbEv9pslkTvWclb5X5cSlSVwpURDj4fCnaVlkbBEcSje5-4RhgzqQ6orjDpm2j7in8OBOLMRPlHB5_tFZNLtVkMnxtKkW_kFdSHXSiUv245B91XTd9UvdvaEsGE03kDCyF1hnoMOdE5hj7uEzIGYJvSIma6oDn-zJ7RbRCeTV-ENqGA1f8USre5akdrw_KmRDo7RspbQl2SimmBvrpbtaEp9OHZbzXR-DqozxwYHtCi6aNkLKpFFhy9kqEMpdJMQYvXdm6AOlox5SGY80fWO_RrsMYO2R2tUVV9Z9El4H327pyQZyAanCMZ5V7KzyQ3zrY-AcmPj3jHx5g0EgbbtU7N8rZCnMdJwxX-yTRZGUdd13MvzSPfS14femP_eVe8JG31MYDXW8ZxGV54mG-o4zKzViQ_diuJZzR-VS6HvNxLpv7VOPoKXoQdK1L5SWqqkysvfC288YnrL17i_AsjC_RDUD7pkfL-Yc0G440m_o-Aq-cFqfnN3f7-U0TjKpKl9DPJTsltlXVoQP5qEWcC4dUqn0-9L4H7vJg63int4hOg93vwQD_3qDKZnXOZYOoLfuQlLSkfXB61w7eE3c_pzGW7v_MvD1JKrTNCxSYunpvUWlXYX7UipwaLFnMk3LhFiq68r7dbVAj9Qhd7WjL74b9F1WbVVOWFFPSlukrm2ieL80-aqITxdRWsD6muvVZ4RcxSY67xX8a__8i458o4TXq7o3BrX7zOCni-ESxXuwD1sMrERVHxRKxghZIkZ-xCH01w5hI-Yio-EXmcoB8RdQJEzhiCjr29XrPbr7oC_9KWfHeLI9IoO2DMIW98_ZlEACDznV1vY94rGSkrUVZ4pPa6sYhhYa5xzJ6fP-DCSJ59UqKL5y_NPX-dctnsjyRMVsCemNOR_QgiE4kfHlDqxFBBqPjuQcJ6rH3Uc7VD9H4tVG6JvxBNs9WfsepHqPLBrXR8VnhEijRWIcz3bs2q4JeQYuRgnAATyjo-lBBFupnaOiD4foT1DcA4fqdyRSgKd4rALrvN5I8j_L0jAImoP3_GaGWsp7QYERoif1THhmrB_Z_mNDJCNQU9QS6RTokZYCdbPTRLKQNvj9yqUq665cLTA6-cxn9MYc3kWgWfC9aOBItLmFwVrQlkurUMsiwsW5n_u5yD9fUxynwsKvOKnX3lTJp27jrdHq24vZkzEdkpDiM_kJkaHF7MqIRGYsgQp9Lxp_PgJaxZyAeMxDCxVkGMrNrSdcCH-FhJNd0QoR2o5IVwk3HIQpyN5oeCDFYz8hKRUT3NxcZKzKlBM2bgwy9b3Tems33ol9IKvmphZlhrzsuviG2JveMqkkVbtjouXJzc5gnqRsoj3L1m-BNfahlytb67qomRxaUerra5fxjwjtk_xip7y9hjSP2L6HbENrT7WbaMI7hO2FV0_Yg-tcp5T1TRNg9HD_O3rstzqrQvhZY7feYTUaSoWFPkrsPJ4Zx4hfko8-vw5XZQHfUH01N1WFl91lUaTJ6qtw8Fyb-AsOzVN3urPncDPc7_gp6piLAiNgTMMpTEwij877-iddmxdy-_RpK_lCj_27IoxLjVaHW4ZnM_cga2mBPEC-aitxvay66EDfdGqyVrZd8lMbG_gIeJivZ6unkeumnFGIWR4_SyS_nYZzEgZNfLnlBfiPMFgZdKUBwo0jWrfFNha2dvcfmpHvzOAyj2CkE7tr9vkfATQnLTtzDcnKweZSHc5S7lNmJ7LItJsdZOy3HdDbZguuhO5nXPAmKaBG6VasB2Uvwuo_O6TkJp3MgLagespMA-YUfQIwAxsHzFukBTqwJbJDo11nbyt25Bpdm4XNC5BZaD9xJJXxcLvKgAB3By-DJPNXp2QXlAylGa9B6jDZbc_b4FIK-EnH4Inzuu0977kfpYsoFYDtxayTLYGn34Y-fzKMqk6ptx2s9O9IEDMhRgrJ16-GtPvcdnp_xbhcE7RtqJCl-lqZ5S6HTWF94VgJRu5tF3x4Nh6pKGz0Xg_vt612nvrOEmy77pdUTK6u_8_yIMoLR5lsE43Cgh2NbbO2dbw1boZJUbw6Xv2RVtIW5t_I5HFtUgpyC9C9nEWZ5qkZC2a0Zx1UfuqwlCYTFSdaMqtBBiOuodDzzqKM5BXOimj3TNButOu0FmyDGG1l7-xnlH0n6E0z8znN5mobfeX6w2_Kc192rvUZUa_xwL9FZ5lrb-Dz-Uoc_N0cK04BgfArrzeC7E-mPhPhTvP9C_qbKKg0nPWPxKC4XZdJmlV1K0SE2niI7WI48FXWnQGvh9GCdhM3PcUSiOdAwJ5nNjtfPlrrHNeCiWPzgcQ3TpR9wMR6QzH3w_Kz7PEuFhHoeyPLhKci8nyLyx2lWlEfADj6RRvSIdr7hveEJO3P9-PFDUtjTh2RHlTn9CYLQmEojCZi9AsWBJATQQaatZ-oybCCIagQj-pHSPUenLR8rgiQBeEPwC_Ci69FJOV7kvFKXXKw9ePd3D95F4d-S5Gtw-5sX3Xgw_XhzS7efXRRXYbEIF-iCXAVJOF_M_WgBLzZXiY8iEhfFHJcp8VFRRLkPUYCTOC-jGIcX9Ar6cB5AGPpJFIfwco7wPInnflKkRRmShTf3yRbR6lI_aRrEhTnGdxVAfxEuLiqUk0qaw7cQtoqAXnRzIa7M6b-8WUtv7ldUKtkPoaiqyNU9w1wIghVopDn8WToHVJWg6zURxw6S6hzsohHV1c-fQWzxv17B_wkAAP__0SOQVQ">