<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/117518>117518</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[SLPVectorizer] Assertion `SubVectorsMask.size() == CommonMask.size() && "Expected same size of masks for subvectors and common mask."' failed.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
llvm:SLPVectorizer,
crash-on-valid
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
dtcxzyw
</td>
</tr>
</table>
<pre>
Reproducer: https://godbolt.org/z/chKcKacPK
```
; bin/opt -passes=slp-vectorizer test.ll -S
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
define void @test() {
%xor108.i.i.i = xor i64 0, 1
%conv115.i.i.i = trunc i64 %xor108.i.i.i to i16
%add.i.i.i.i = or i16 %conv115.i.i.i, 0
%add.i.frozen.i.i.i = freeze i16 %add.i.i.i.i
%.cmp.not.i.i.i = icmp eq i16 %add.i.frozen.i.i.i, 0
%cond.i1002.1.i.i.i = lshr i64 0, 0
%conv115.1.i.i.i = trunc i64 %cond.i1002.1.i.i.i to i16
%add.i.1.i.i.i = or i16 %conv115.1.i.i.i, 0
%add.i.frozen.1.i.i.i = freeze i16 %add.i.1.i.i.i
%.cmp.not.1.i.i.i = icmp eq i16 %add.i.frozen.1.i.i.i, 0
%cond.i1002.2.i.i.i = lshr i64 %xor108.i.i.i, 0
%conv115.2.i.i.i = trunc i64 %cond.i1002.2.i.i.i to i16
%add.i.2.i.i.i = or i16 %conv115.2.i.i.i, 0
%add.i.frozen.2.i.i.i = freeze i16 %add.i.2.i.i.i
%.cmp.not.2.i.i.i = icmp eq i16 %add.i.frozen.2.i.i.i, 0
%cond.i1002.3.i.i.i = lshr i64 0, 0
%conv115.3.i.i.i = trunc i64 %cond.i1002.3.i.i.i to i16
%add.i.3.i.i.i = or i16 %conv115.3.i.i.i, 0
%add.i.frozen.3.i.i.i = freeze i16 %add.i.3.i.i.i
%.cmp.not.3.i.i.i = icmp eq i16 %add.i.frozen.3.i.i.i, 0
%conv115.i.i.i.1 = trunc i64 %xor108.i.i.i to i16
%add.i.i.i.i.1 = or i16 %conv115.i.i.i.1, 0
%add.i.frozen.i.i.i.1 = freeze i16 %add.i.i.i.i.1
%.cmp.not.i.i.i.1 = icmp eq i16 %add.i.frozen.i.i.i.1, 0
%cond.i1002.1.i.i.i.1 = lshr i64 0, 0
%conv115.1.i.i.i.1 = trunc i64 %cond.i1002.1.i.i.i.1 to i16
%add.i.1.i.i.i.1 = or i16 %conv115.1.i.i.i.1, 0
%add.i.frozen.1.i.i.i.1 = freeze i16 %add.i.1.i.i.i.1
%.cmp.not.1.i.i.i.1 = icmp eq i16 %add.i.frozen.1.i.i.i.1, 0
%cond.i1002.2.i.i.i.1 = lshr i64 0, 0
%conv115.2.i.i.i.1 = trunc i64 %cond.i1002.2.i.i.i.1 to i16
%add.i.2.i.i.i.1 = or i16 %conv115.2.i.i.i.1, 0
%add.i.frozen.2.i.i.i.1 = freeze i16 %add.i.2.i.i.i.1
%.cmp.not.2.i.i.i.1 = icmp eq i16 %add.i.frozen.2.i.i.i.1, 0
%cond.i1002.3.i.i.i.1 = lshr i64 0, 0
%conv115.3.i.i.i.1 = trunc i64 %cond.i1002.3.i.i.i.1 to i16
%add.i.3.i.i.i.1 = or i16 %conv115.3.i.i.i.1, 0
%add.i.frozen.3.i.i.i.1 = freeze i16 %add.i.3.i.i.i.1
%.cmp.not.3.i.i.i.1 = icmp eq i16 %add.i.frozen.3.i.i.i.1, 0
%conv115.i.i.i.2 = trunc i64 %xor108.i.i.i to i16
%add.i.i.i.i.2 = or i16 %conv115.i.i.i.2, 0
%add.i.frozen.i.i.i.2 = freeze i16 %add.i.i.i.i.2
%.cmp.not.i.i.i.2 = icmp eq i16 %add.i.frozen.i.i.i.2, 0
%cond.i1002.1.i.i.i.2 = lshr i64 0, 0
%conv115.1.i.i.i.2 = trunc i64 %cond.i1002.1.i.i.i.2 to i16
%add.i.1.i.i.i.2 = or i16 %conv115.1.i.i.i.2, 0
%add.i.frozen.1.i.i.i.2 = freeze i16 %add.i.1.i.i.i.2
%.cmp.not.1.i.i.i.2 = icmp eq i16 %add.i.frozen.1.i.i.i.2, 0
%cond.i1002.2.i.i.i.2 = lshr i64 0, 0
%conv115.2.i.i.i.2 = trunc i64 %cond.i1002.2.i.i.i.2 to i16
%add.i.2.i.i.i.2 = or i16 %conv115.2.i.i.i.2, 0
%add.i.frozen.2.i.i.i.2 = freeze i16 %add.i.2.i.i.i.2
%.cmp.not.2.i.i.i.2 = icmp eq i16 %add.i.frozen.2.i.i.i.2, 0
%cond.i1002.3.i.i.i.2 = lshr i64 0, 0
%conv115.3.i.i.i.2 = trunc i64 %cond.i1002.3.i.i.i.2 to i16
%add.i.3.i.i.i.2 = or i16 %conv115.3.i.i.i.2, 0
%add.i.frozen.3.i.i.i.2 = freeze i16 %add.i.3.i.i.i.2
%.cmp.not.3.i.i.i.2 = icmp eq i16 %add.i.frozen.3.i.i.i.2, 0
%conv115.i.i.i.3 = trunc i64 %xor108.i.i.i to i16
%add.i.i.i.i.3 = or i16 %conv115.i.i.i.3, 0
%add.i.frozen.i.i.i.3 = freeze i16 %add.i.i.i.i.3
%.cmp.not.i.i.i.3 = icmp eq i16 %add.i.frozen.i.i.i.3, 0
%cond.i1002.1.i.i.i.3 = lshr i64 0, 0
%conv115.1.i.i.i.3 = trunc i64 %cond.i1002.1.i.i.i.3 to i16
%add.i.1.i.i.i.3 = or i16 %conv115.1.i.i.i.3, 0
%add.i.frozen.1.i.i.i.3 = freeze i16 %add.i.1.i.i.i.3
%.cmp.not.1.i.i.i.3 = icmp eq i16 %add.i.frozen.1.i.i.i.3, 0
%cond.i1002.2.i.i.i.3 = lshr i64 0, 0
%conv115.2.i.i.i.3 = trunc i64 %cond.i1002.2.i.i.i.3 to i16
%add.i.2.i.i.i.3 = or i16 %conv115.2.i.i.i.3, 0
%add.i.frozen.2.i.i.i.3 = freeze i16 %add.i.2.i.i.i.3
%.cmp.not.2.i.i.i.3 = icmp eq i16 %add.i.frozen.2.i.i.i.3, 0
%cond.i1002.3.i.i.i.3 = lshr i64 0, 0
%conv115.3.i.i.i.3 = trunc i64 %cond.i1002.3.i.i.i.3 to i16
%add.i.3.i.i.i.3 = or i16 %conv115.3.i.i.i.3, 0
%add.i.frozen.3.i.i.i.3 = freeze i16 %add.i.3.i.i.i.3
%.cmp.not.3.i.i.i.3 = icmp eq i16 %add.i.frozen.3.i.i.i.3, 0
ret void
}
```
```
opt: /root/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:10880: llvm::InstructionCost llvm::slpvectorizer::BoUpSLP::ShuffleCostEstimator::finalize(llvm::ArrayRef<int>, llvm::ArrayRef<std::pair<const llvm::slpvectorizer::BoUpSLP::TreeEntry*, unsigned int> >, llvm::ArrayRef<int>, unsigned int, llvm::function_ref<void(llvm::Value*&, llvm::SmallVectorImpl<int>&)>): Assertion `SubVectorsMask.size() == CommonMask.size() && "Expected same size of masks for subvectors and common mask."' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: /opt/compiler-explorer/clang-assertions-trunk/bin/opt -o /app/output.s -S -passes=slp-vectorizer <source>
1. Running pass "function(slp-vectorizer)" on module "<source>"
2. Running pass "slp-vectorizer" on function "test"
#0 0x00000000051b7378 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x51b7378)
#1 0x00000000051b4d6c SignalHandler(int) Signals.cpp:0:0
#2 0x00007ac42d642520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#3 0x00007ac42d6969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
#4 0x00007ac42d642476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
#5 0x00007ac42d6287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
#6 0x00007ac42d62871b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
#7 0x00007ac42d639e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#8 0x00000000041e9132 llvm::slpvectorizer::BoUpSLP::ShuffleCostEstimator::finalize(llvm::ArrayRef<int>, llvm::ArrayRef<std::pair<llvm::slpvectorizer::BoUpSLP::TreeEntry const*, unsigned int>>, llvm::ArrayRef<int>, unsigned int, llvm::function_ref<void (llvm::Value*&, llvm::SmallVectorImpl<int>&)>) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x41e9132)
#9 0x00000000042256f9 llvm::InstructionCost llvm::slpvectorizer::BoUpSLP::processBuildVector<llvm::slpvectorizer::BoUpSLP::ShuffleCostEstimator, llvm::InstructionCost, llvm::TargetTransformInfo, llvm::ArrayRef<llvm::Value*>, llvm::slpvectorizer::BoUpSLP, llvm::SmallPtrSetImpl<llvm::Value*>>(llvm::slpvectorizer::BoUpSLP::TreeEntry const*, llvm::Type*, llvm::TargetTransformInfo&, llvm::ArrayRef<llvm::Value*>&, llvm::slpvectorizer::BoUpSLP&, llvm::SmallPtrSetImpl<llvm::Value*>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x42256f9)
#10 0x000000000422f707 llvm::slpvectorizer::BoUpSLP::getEntryCost(llvm::slpvectorizer::BoUpSLP::TreeEntry const*, llvm::ArrayRef<llvm::Value*>, llvm::SmallPtrSetImpl<llvm::Value*>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x422f707)
#11 0x00000000042636a1 llvm::slpvectorizer::BoUpSLP::getTreeCost(llvm::ArrayRef<llvm::Value*>) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x42636a1)
#12 0x000000000426d57c llvm::SLPVectorizerPass::tryToVectorizeList(llvm::ArrayRef<llvm::Value*>, llvm::slpvectorizer::BoUpSLP&, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x426d57c)
#13 0x000000000427168f bool llvm::SLPVectorizerPass::vectorizeCmpInsts<std::reverse_iterator<llvm::CmpInst* const*>>(llvm::iterator_range<std::reverse_iterator<llvm::CmpInst* const*>>, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x427168f)
#14 0x0000000004271fdb llvm::SLPVectorizerPass::vectorizeChainsInBlock(llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&)::'lambda3'(bool)::operator()(bool) const SLPVectorizer.cpp:0:0
#15 0x0000000004275785 llvm::SLPVectorizerPass::vectorizeChainsInBlock(llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x4275785)
#16 0x000000000427bf86 llvm::SLPVectorizerPass::runImpl(llvm::Function&, llvm::ScalarEvolution*, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo*, llvm::AAResults*, llvm::LoopInfo*, llvm::DominatorTree*, llvm::AssumptionCache*, llvm::DemandedBits*, llvm::OptimizationRemarkEmitter*) (.part.0) SLPVectorizer.cpp:0:0
#17 0x000000000427ca9b llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x427ca9b)
#18 0x0000000002fcc5ce llvm::detail::PassModel<llvm::Function, llvm::SLPVectorizerPass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x2fcc5ce)
#19 0x0000000004fb6a68 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x4fb6a68)
#20 0x0000000000e3dd4e llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0xe3dd4e)
#21 0x0000000004fb548e llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x4fb548e)
#22 0x0000000000e3d3fe llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0xe3d3fe)
#23 0x0000000004fb4ec0 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x4fb4ec0)
#24 0x000000000090ce7a llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::ArrayRef<std::function<void (llvm::PassBuilder&)>>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x90ce7a)
#25 0x00000000008ff519 optMain (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x8ff519)
#26 0x00007ac42d629d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#27 0x00007ac42d629e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#28 0x00000000008f6d6e _start (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x8f6d6e)
Program terminated with signal: SIGSEGV
Compiler returned: 139
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcm11z2yrzwD-NcsPYI0Av9kUunBeff6ftnEzdf28zWEI2TyShB1Ca5NM_A5IdIevNjc-cTs9JE0uwy-5vl5WAhEjJdjml145_4_h3V6RUey6uYxW9vL3-vNry-PX6Gy0Ej8uICgevwF6pQjp45aC1g9Y7Hm95quZc7By0fnPQOtp_jj6T6OGz49457soJ3PqrusQ3YMtyB615ocCsIFJS6eA7mRazZxopLtgbFUBRqeZpCmabSkwRsaMKxESRlLzyUgEH3wEHITrLHLyiswKFroNXGJlv-hLal_pT4JlvM3b8ANHCwSuIFrNk4dafcnMrOIgH3myjuyFkmaIEK1J6MONlETwG3qzMn3L-M5-lLC9fZru8PEpV32OasJyCZ85i4Hiu9tLRqpfACW-qLsBB_gsX0F3Mmf7fjPDCBWCBB1wH3QJYd9Q9I54_Q-g3uipR5pHp3FakOGAwaAiTOK6aalE9CAxO1Oox3ROxRPA3mjekE0HpGz1oaOhuiM6jrJjnXDXEWJQVgP7Xlmsqbw8f8TyeM-i6aA4belK5bzBy32EefIF9kDoU9qCCg7DgBFxwBBjsRwYnQusxo-El6sLWypYOceMkmkARDVNEgxTRBIpohCLqp4gmUuwxo-ElHk2-plt4Ajc8zA0PcsMTuOERbtji1sSGJ2LrsKJdTubwA3WqFu6pVHM4XqtqDb3Vag5761UtOlqxTs04LTG1rvHEgf3UOrUOl65efnASQTjKEA5RhJM59ppzWmYGSZ4WlhGQqBtku7T0ckSTOKJRjmiII5rMsdec07IzlSOexBGPcMQjHPEkjniUIx7iiCdz7DXHrj_oI6UNDZY21ApHR9lBI5UN9Vc2NLGyoQmVDZ1Z2TqgdWrtTiQ4Qg_2Wd5Zb_oRwiGIcDLGXnM6atAQyI6SM8wRjXBEIxzRJI5olCMa4ogmc-w1p6MGTeSIJ3HEIxzxCEc8iSMe5YiHOOLJHHvNsasP_khhw4OFDY8XNjxS2HB_YcMTCxueUNjwmYWtA1qn1uHC1kcP9lneWW_6EcIhiHAyxl5zOmrQEMiOkjPMEY1wRCMc0SSOaJQjGuKIJnPsNaejBk3kiCdxxCMc8QhHPIkjHuWIhzjiyRy7zRFUmd23elMuvOvepLQveaEcrEmsBefKQes0fc5mheD_odHhUv9gWwetvwuSy4SLTDpo_eOwo-mg9ebLw_FSzKOicPAKuguz7QiMCrxy8OpTLpUoI8V4fsularTItHjfIa1u3fD_LzZfHqqLzb5MkpRqqXupWEYUr7slLCepsWLxrm4lBHn9RhMH37JcOfheg-psliqu7hWECQffRjw_y7DvgtL7XIlXB630IGVu9pxjUI0LhsZ-N82SsronZW54PQojYuLb9PQHSUtqxg5swU1G0rQKyqesSBvDBQ5amg9LHZ2VlFToEYATuJtyW4nIr0Q-zWXF1ezh4judlbc8y3h-0qh16jRF9y8FjRSNgSQZBboL4AnIiHySIOECyHJb4ZSA5DGIjDrTPncQclAIEsJSGs-r7Hz4cr_a3GupjClAwLbcAUELLpSeyK3deqb25XYe8ayRtnYyMylLqnPXDM7yKC1jCtSegkgQuQdbEj0pQSJaD79RJHoCcZnpfK5uuXPHXT4IvhMkA0TsyozmStZTSE8mtI54VrCUihl9KVIuqND3UpLvZuTAWs50pXpy0LpxXsC1ClIU-rpURanmEsw2_ecIOnt5KSKqg2mMg9q4b2Wes3wHtJgOySGDHLSwFegEQAho_jwuU6o7WzoP-_uoS21bl1F0GEt3qA4A0LHUYhe4L-7hPx9uQxwumjPtVVYfHgTLlUH_XcfCSndBfj5yqQQlWZ3xZsboFFx8MAAOunFfarM0mqPdsGW3FwcR2LBdTtL_I3mcav2L2ozqtqxLoGv-HRWhWlFIIg_FgYd85NaGV_W1PmlpnLDohmgu-Tww5hkRyzhs61wGyyQChdoLSuLHJ5am5w1g5K0BvLbRXhiAnTR-nmu8FwaWbt_WjRZhggHZ6ul9lmYjaGkOTjTD7dk64dbSGdo68ZIug_N0GhFL56KZWx6kS4jR7_hY_IUHIjCP0u7H4j_wVASXeyxeqpjU8bQCvrQCjpAfJMuLvCEVgkdUypuSpXHl31lh68wki1zLNLvxuzk4Pr4ffsoT3hvgjii102HA2tNoPiixoaqOZrdyrX_x0RxuePta0NObXQiCcykE00F0ZfYEFibRL5biVQYfU1w_Lt1WiiehG56RyDuqDPsqyS4YtfNS8N_CqWlZOKGNM8ABgefh1GBOaI7TuKBXxmjLK9TyKvbDqEm_uaB8ILJ-NVTi9Ts_NnxhZ_t01tzacp5eFoP20sKAbQwhDBaJGXecxdH226zQtVk2H9uCPlMh6SNTVJD2s6AWcNDqfaacFsmD6KMg-Y5eQnkT_g2RLLpJefR0Mk9H4nLBeBjcVjy8djySeHtOKPaE5fJTXju2uIi_1S0HhSnJtjHBDgodtKiTs2rkRR0Jsx5_b61CALq2ZxprE-2433LcDxf-v-34BQOt3bECHbT83SaLYNxfUebmYdB0cH1cX7cfyBFJibh_5mlZtU95Yejs84VtBRGvnT1Wq29UlqmSJy1fOC86Re54xnKdLvrBcKpQyjIrzGseifan7Xc0I3lM4xvWMebfhWIZeyNa_BvNiHi6z5hSOlqrOqLzggg1d81qeTwvw1acIrKcMCFFmU-L0Son6atk8ivJyY7alewodPmnvHHDykdrIYiSKPIj2rAzpoqwtN4fIVJ-5TFNu621c_CEzy-5r79-f641Nourvd5KtgEJmptOhuWQjX8wrppGExey3t1diuPYu0Qa_mOY_-DwVPCt6MBWMvveohmdr2Yb9zs_mKSpr2JSHDeF2g5XAme5W4v8A7monbG8Re1cxMl5uXhw73Yio1-A0JdKvw_ZipsFFrfSyKORO2GyduH8UyjVFCxM1lrAXboRDUnDSlGa5HlgBU1Zbm-0bpRg-U6vRDuS78Tf6iXvK4n2Rs_YK2D1BtruxXn6tzk1WrO0Q8mHmnvc6VxuGyZpuWP5pP3l4-lU1y6u1mU2NHUoD_uzba28UI9KL3eqF1DjxWeWx0O9flDBEkbFoV-1XDr358Wyr8otK_ms9Zi7SBIfLgEv1FfC8ksNW2m1hm2fmyzj5ZlHVEbE0hm2dVLPBY-PWuxRKiLUY_bu1ORRqGePsmgBC-KAgkr_5XhppcdRD6fAigqznqIx-MnUHlRnYw5egc2nvzb3f_2out_WAwNBVSlyqicAgHjZ-rWMq_gax0u8JFf0GoYY-RCFrnu1v_Zcz19GYRJEIQ30gtULfTeG1Iu3vk9IcsWukYs8CJHv-hh67hzGbrRIIt9b-oighDieSzPC0rmeFnMudlfmQPwawtCHi6uUbGkqzR_LIVTPHGv9YE7obx2EzGn5jOezZ5KyWN_2767EtZaZbcuddDw3ZVLJ94EUU6n5OzxboX_3u_7-wVUp0utf_wWDGunzNfpfAAAA___TK5mH">