<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/63013>63013</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
opt segfault in `JumpThreadingPass`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
cbeuw
</td>
</tr>
</table>
<pre>
Using `-O2` with opt
https://godbolt.org/z/3K5EPaq8c
```
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-16.0.0/bin/opt -o /app/output.s -S -O3 <source>
#0 0x00005604c69854ff llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x34fa4ff)
#1 0x00005604c6982f74 SignalHandler(int) Signals.cpp:0:0
#2 0x00007fb969935420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
#3 0x00005604c582386b llvm::ObjectSizeOffsetVisitor::compute(llvm::Value*) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x239886b)
#4 0x00005604c5826d46 llvm::ObjectSizeOffsetVisitor::visitPHINode(llvm::PHINode&) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x239bd46)
#5 0x00005604c58235d5 llvm::InstVisitor<llvm::ObjectSizeOffsetVisitor, std::pair<llvm::APInt, llvm::APInt>>::visit(llvm::Instruction&) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x23985d5)
#6 0x00005604c582366d llvm::ObjectSizeOffsetVisitor::computeImpl(llvm::Value*) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x239866d)
#7 0x00005604c5823b86 llvm::ObjectSizeOffsetVisitor::compute(llvm::Value*) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x2398b86)
#8 0x00005604c5826e2b llvm::ObjectSizeOffsetVisitor::visitPHINode(llvm::PHINode&) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x239be2b)
#9 0x00005604c58235d5 llvm::InstVisitor<llvm::ObjectSizeOffsetVisitor, std::pair<llvm::APInt, llvm::APInt>>::visit(llvm::Instruction&) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x23985d5)
#10 0x00005604c582366d llvm::ObjectSizeOffsetVisitor::computeImpl(llvm::Value*) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x239866d)
#11 0x00005604c5823b86 llvm::ObjectSizeOffsetVisitor::compute(llvm::Value*) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x2398b86)
#12 0x00005604c5827172 llvm::getObjectSize(llvm::Value const*, unsigned long&, llvm::DataLayout const&, llvm::TargetLibraryInfo const*, llvm::ObjectSizeOpts) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x239c172)
#13 0x00005604c569bd79 llvm::BasicAAResult::aliasCheckRecursive(llvm::Value const*, llvm::LocationSize, llvm::Value const*, llvm::LocationSize, llvm::AAQueryInfo&, llvm::Value const*, llvm::Value const*) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x2210d79)
#14 0x00005604c56a12e0 llvm::BasicAAResult::aliasCheck(llvm::Value const*, llvm::LocationSize, llvm::Value const*, llvm::LocationSize, llvm::AAQueryInfo&, llvm::Instruction const*) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x22162e0)
#15 0x00005604c56a1573 llvm::BasicAAResult::alias(llvm::MemoryLocation const&, llvm::MemoryLocation const&, llvm::AAQueryInfo&, llvm::Instruction const*) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x2216573)
#16 0x00005604c56798de llvm::AAResults::alias(llvm::MemoryLocation const&, llvm::MemoryLocation const&, llvm::AAQueryInfo&, llvm::Instruction const*) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x21ee8de)
#17 0x00005604c5697bd6 llvm::BasicAAResult::aliasPHI(llvm::PHINode const*, llvm::LocationSize, llvm::Value const*, llvm::LocationSize, llvm::AAQueryInfo&) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x220cbd6)
#18 0x00005604c569bce8 llvm::BasicAAResult::aliasCheckRecursive(llvm::Value const*, llvm::LocationSize, llvm::Value const*, llvm::LocationSize, llvm::AAQueryInfo&, llvm::Value const*, llvm::Value const*) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x2210ce8)
#19 0x00005604c56a12e0 llvm::BasicAAResult::aliasCheck(llvm::Value const*, llvm::LocationSize, llvm::Value const*, llvm::LocationSize, llvm::AAQueryInfo&, llvm::Instruction const*) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x22162e0)
#20 0x00005604c56a1573 llvm::BasicAAResult::alias(llvm::MemoryLocation const&, llvm::MemoryLocation const&, llvm::AAQueryInfo&, llvm::Instruction const*) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x2216573)
#21 0x00005604c567b965 llvm::AAResults::getModRefInfo(llvm::Instruction const*, std::optional<llvm::MemoryLocation> const&, llvm::AAQueryInfo&) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x21f0965)
#22 0x00005604c57e09d2 llvm::findAvailablePtrLoadStore(llvm::MemoryLocation const&, llvm::Type*, bool, llvm::BasicBlock*, llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, false, false, void>, false, false>&, unsigned int, llvm::AAResults*, bool*, unsigned int*) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x23559d2)
#23 0x00005604c57e2631 llvm::FindAvailableLoadedValue(llvm::LoadInst*, llvm::BasicBlock*, llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, false, false, void>, false, false>&, unsigned int, llvm::AAResults*, bool*, unsigned int*) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x2357631)
#24 0x00005604c667e962 llvm::JumpThreadingPass::simplifyPartiallyRedundantLoad(llvm::LoadInst*) (.part.0) JumpThreading.cpp:0:0
#25 0x00005604c668861c llvm::JumpThreadingPass::processBlock(llvm::BasicBlock*) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x31fd61c)
#26 0x00005604c66891bd llvm::JumpThreadingPass::runImpl(llvm::Function&, llvm::TargetLibraryInfo*, llvm::TargetTransformInfo*, llvm::LazyValueInfo*, llvm::AAResults*, llvm::DomTreeUpdater*, bool, std::unique_ptr<llvm::BlockFrequencyInfo, std::default_delete<llvm::BlockFrequencyInfo>>, std::unique_ptr<llvm::BranchProbabilityInfo, std::default_delete<llvm::BranchProbabilityInfo>>) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x31fe1bd)
#27 0x00005604c668ab1f llvm::JumpThreadingPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x31ffb1f)
#28 0x00005604c6d200e6 llvm::detail::PassModel<llvm::Function, llvm::JumpThreadingPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x38950e6)
#29 0x00005604c43a81c1 llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0xf1d1c1)
#30 0x00005604c56e8875 llvm::CGSCCToFunctionPassAdaptor::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x225d875)
#31 0x00005604c439d926 llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::CGSCCToFunctionPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0xf12926)
#32 0x00005604c56e0f84 llvm::PassManager<llvm::LazyCallGraph::SCC, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x2255f84)
#33 0x00005604c62a28e6 llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::PassManager<llvm::LazyCallGraph::SCC, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x2e178e6)
#34 0x00005604c56e4c1e llvm::DevirtSCCRepeatedPass::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x2259c1e)
#35 0x00005604c62a2896 llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::DevirtSCCRepeatedPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x2e17896)
#36 0x00005604c56e211b llvm::ModuleToPostOrderCGSCCPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x225711b)
#37 0x00005604c62aa83d llvm::ModuleInlinerWrapperPass::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x2e1f83d)
#38 0x00005604c6d1df76 llvm::detail::PassModel<llvm::Module, llvm::ModuleInlinerWrapperPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x3892f76)
#39 0x00005604c6149aa9 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0x2cbeaa9)
#40 0x00005604c3fa3358 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool) (/opt/compiler-explorer/clang-16.0.0/bin/opt+0xb18358)
#41 0x00005604c3eb283b main (/opt/compiler-explorer/clang-16.0.0/bin/opt+0xa2783b)
#42 0x00007fb9693e3083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#43 0x00005604c3f95b2e _start (/opt/compiler-explorer/clang-16.0.0/bin/opt+0xb0ab2e)
Compiler returned: 139
```
Using LLVM 16.0.0 from godbolt
```
LLVM (http://llvm.org/):
LLVM version 16.0.0
Optimized build.
Default target: x86_64-unknown-linux-gnu
Host CPU: skylake-avx512
```
For completeness, the LLVM IR was from the following Rust program written in custom Mid-level IR. It was machine generated and then minimised so not very readable and the variables and basic block labels are all out of order. Nonetheless LLVM shouldn't crash.
<details>
<summary>Rust custom MIR</summary>
```console
% rustc --crate-type=lib -Copt-level=2 llvm-segfault/272124-mir.rs
```
```rust
#![feature(custom_mir, core_intrinsics)]
extern crate core;
use core::intrinsics::mir::*;
#[custom_mir(dialect = "runtime", phase = "initial")]
pub fn fn24(mut _4: bool,mut _13: *mut (i128, bool)){
mir! {
let _24: (f64, (i16, bool), (f32, bool));
let _31: ((isize, bool),);
let _58: bool;
let _65: (usize, bool);
let _80: u16;
let _81: (u16, bool);
let _17: *const bool;
let _60: *const bool;
let _94: *const bool;
let _29: *mut (i128, bool);
let _62: *mut (i128, bool);
let _91: *mut u16;
let _95: *mut (isize, bool);
let _18: *mut (i128, bool);
let _19: *mut u16;
let _102: *mut u16;
let _108: *mut (i128, bool);
let _111: *mut (i128, bool);
let _136: *mut bool;
let _139: *mut (i128, bool);
let _152: *mut u16;
let _168: *mut u16;
{
match _4 {
true => bb1,
_ => bb162
}
}
bb1 = {
_18 = _13;
Goto(bb21)
}
bb21 = {
_29 = _18;
Goto(bb26)
}
bb26 = {
_60 = core::ptr::addr_of!(_58);
Goto(bb43)
}
bb43 = {
_19 = core::ptr::addr_of_mut!(_80);
_91 = _19;
_62 = _29;
Goto(bb49)
}
bb49 = {
_29 = _62;
_18 = _29;
_102 = _19;
Goto(bb64)
}
bb64 = {
(*_102) = _81.0;
_108 = _18;
Goto(bb71)
}
bb71 = {
Call(_94, bb74, core::intrinsics::arith_offset(_17, -9223372036854775808_isize))
}
bb74 = {
_17 = _60;
Goto(bb75)
}
bb75 = {
_65 = (7965716767070957183_usize, true);
_136 = _17 as *mut bool;
_139 = _62;
_111 = _139;
match _81.0 {
17880 => bb90,
_ => bb21
}
}
bb90 = {
(*_136) = (*_95).1;
match _81.0 {
2 => bb92,
17880 => bb95,
_ => bb71
}
}
bb92 = {
(*_18) = (130970262459226695022473665274451085234_i128, true);
match (*_13).0 {
130970262459226695022473665274451085234 => bb21,
_ => bb1
}
}
bb95 = {
(*_29).1 = !_31.0.1;
match _65.0 {
7965716767070957183 => bb98,
_ => bb21
}
}
bb98 = {
_13 = _108;
match (*_111).0 {
1 => bb110,
_ => bb43
}
}
bb110 = {
match _81.0 {
6570 => bb116,
_ => bb75
}
}
bb116 = {
_102 = core::ptr::addr_of_mut!(_81.0);
_168 = _91;
match (*_62).0 {
0 => bb92,
20110871145320553751023625515671144585 => bb131,
_ => bb162
}
}
bb131 = {
match *_168 {
0 => bb116,
2 => bb92,
6570 => bb137,
_ => bb162
}
}
bb137 = {
(*_62) = (0, true);
match *_91 {
2 => bb71,
6570 => bb142,
_ => bb141
}
}
bb141 = {
Call(_24, bb49, fn47())
}
bb142 = {
_62 = _111;
match *_19 {
2 => bb162,
4 => bb146,
_ => bb149,
}
}
bb149 = {
Call(_17, bb64, fn49())
}
bb146 = {
(*_139).0 = (*_152) as i128;
match *_91 {
0 => bb131,
4 => bb162,
6570 => bb142,
_ => bb141
}
}
bb162 = {
Return()
}
}
}
pub fn fn47() -> (f64, (i16, bool), (f32, bool)) {
return (0., (0, false), (0., false))
}
pub fn fn49() -> *const bool {
return std::ptr::null();
}
```
</details>
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsXFl327iS_jXMC450sJAg-OAHR466PTe58djpnkcdkAQlTCiCDYJO3L9-DkBKIijKlpc7vaWPO5awVH31oaqwkDBvGrmuhLgIovdBdPWOt2aj9EWWivbbu1TlDxe_NLJag4DC2WccUAi-SbMBqjYBvArgZffvxpi6CchlgJcBXq5VnqrSzJVeB3j5e4CX5F_Rhxv-G8uGnQIK-x_39ebjh8u7D6Bp0600gIO0XQMtaqUNMAqMNEizadN5prYBXpbl_e7XrNbqf0VmAryUTdOKJsBLwKscyCor21wAsxEg07zZgJRnX43mmZh36u8Mz76CvN3WVosrgvMAJjdarTXfAq7X7VZUxoIAAV5aBvAyU9talkLPxPe6VFpoW1byaj1DdA7nMMDLVFZdczBTtiOva_u9NXVr5g2Y3YHZZwICsmhUqzMRkA-ddhBgAgH8DiGEEYVhRhMWhUUBnL3kMiCXzUPTfbjRsjLOgi_WpACzQyPNv61UY7Tg2wDTAC-ArEyAExBg9iI7AvwefidhwcOiCHByQItGaHERh-BOrite_syrvLRSWa-8K27mWW35hu7_vSDcC4qLNKFJQqIQQ7BaadEYpcVKmx57KdMAL78zuqLhrJRV-322rtquojYbLXg-b5RF_x5-R2GIoYeXDPFGDBNG0wG7n1PrSnfyd_G5KBphfpWNNEp3lZaw1vhM_8rLVgT48tXkYpIwRlMPbDgCS_OQngv23n65-fn63yr3Ee_L6FtgTvOQepijMcFRHg0wX1fNAefiaVvwAjQm79rUXPqdLm-urWctwLiIfHA_ex48AiwE3WZGquqNSGBRHnkk0DEJlObP9LLrbV3-5zyN0twDHI8Bp-xsT_uPh0XKfBdj47AQ-OwY_v8KC4H9UE7-6WFh5wr4VwoLCxj9VcLCgsUjsDGK8QDsWpgD3mNUIFNVYxy2BWgrt0LMQamqdb-COLS_4oZ_5A-qNbtOowZfuF4L81GmmuuH66pQnvBJ_mrTvAUpGYqxR4o_39MkzeNkgOA9b2R2eXkrmrY0XREvJW8WG5F9vRVZqxt5_xRbh7qPKuM2gDqKhzUv63V5-d-t6Cg8IvkxieO61xKLEczjxCPWX5tQjrCA5xL7p-RzkP_elDmKBfSYi8bMRTE5gzmPtE9iq_TDztATYXhWoz-EkigmHiX-eonGCcuFh7Fjo_k70oGEYHbdMaAjHiWtOM3pGR5y8_P11JLmD4qtV7sJzNLcn-HYOJlngv1I5i9I5plgHrHJj2T-smSO4Y9kPkrmGI2SeZrQ6HQyXwvzSeW3ouhAT29IPN_Yb3xUbet46W1-fJ4C8uFMql6dxguYUG-7g_0FeSxgkg8X5IWs8st7LkueluLG6I-K53dGafF85_jyUIuenVSp0q90Pvi-VDZUR8ElS9mYlTRC8_HOs6vKheGy7EoqlYtVx3njNfV2jgtQ8LIR3od7JXO78zyutIXU23HIo63r3l-GBl4ed3qLXVUUJbm3gcBkNIiYEjRAtxwOoh1BkfebPDbMYTy_nkpuP4bmGUMTU4K8ofG2IJTGIqHD-Pqvdlt_cQfCslrf8KZPOI3c1qUsHm64NpKX5cOtyNsq55Wxw3R63JwB85prY-ElwBN_fKZtAUY-QMYoyp4GWGuViabp3YKd9JbXnuajIqco8xilI8AJSvOnAeu2OjqWWbbV4Sjp0bOBI8_vWnzRvGoKpbeTbT7y3x9cnE3Wjv1ycHShtl-0EL_UOTeWIi9l7ieWtpK_tWJVGz_uHPVLLX5rRZX12Ae9clHwtrSBWQojnurZncWdo1XzKtvcaJXyVJbSPE_xZOde9-sdSKDUOzDD8ciBeIqKsxzoPOe5rHj50MjmE6_4Wvg87Tv1iev11hUpKjzrvP0HzTGEYrgvG2Zka9wnlYtyGqNn1TErXvWNFo3Q9yLvrBfNyzjZnfz-KclmSQSFt9nD3p4kJJyhDL0B2a7tYxa9lNx_2pgVKEeZNyGT0WZIMBYPV_6Ln-4Wiy9qh8OOxGXO6_2J-dhKm-QXvCx_0rzedEV3i8WzbD4lYjyXHNpgelj5PNLGq3WGdXNKv9N7kwOQKGext6Pwn7aHJMkT_LwEdA4fjwzTW_n4i4fllWNyKp7-2Z5WIJxgL_kSPIpkWLDwjCR6Dgk__OKv4hcYR1HBQs8xvO0wxRyzZy6BzuHjb-hePzLn3zJCBIqZv24dvbRFRZih4bOsK3EvtblbLG5FLbgR-elt0D-cWxwlGfIejPkvl7nsk7x99pkeoR8B_Ld0MhvAiR_Ao4fRAiM0fL3sk8rbUnxRN6oxn3UutAP25Gam6_YsXvsub7NdwziKEUo9S-NROHFG8iNLr6tSVkL_j-Z1LfTpbPWHGyhQwYh3HEVGBzYoL-Ln5YudUYtzaHmrFHGg5VTQ_tFcE5bgIvbDxjuvoShMOE_OWNNNMfzXJgdnqeDce1sq9E5GSMEJiYZvLujWbbNvZC2sV3nm3Bktq_WtKKa88MTx-ieebZycyaP1weF7d24_bqVU-dndVVjKckLIq6pPmHOpNX-wpcNhcZyU7VpWRzOgqs3KKNUHb6fvX7LKH2v1q9CykELv2u3O_c_7_UqvSBEjkffWReid5hCRYkZSsOWyep0mjmNGvEQf-pcriCCQEbBalTLNVo3h2qwGah-7YZHNGzWnnZuHkHkP_kPiO3kSpViATv4ruYM8xYeV4KLvD7Qwra5EHpBLgEgyecWo-7e70PTx46-fQKcDFFptQX9rabKjaxxgtjHGXQ9yl5Csa_V3nCyc3a0h0Im-F7qRqupV7Ko-10Zu5e8iB2kry7y_ewSuuqc2wLiYtCb0lLfV10p9qwbU94J-Vo0Bi5tfbNvm60PJv4oZv_8eIfyI5UulgSW8FEZUopulzEZ0gK9vwTfedFzYwkKVpfpmqbptGwPq_h7UNy2NERWQFcjaxqgt-CTzWSnuRQmub-fg2jgx2y7rgLWohLYLZ3cNy2xEBbayklvZiBw0ClTKWKoegBY852kpdu3APdfSFjSuJOWNzEBaquwrKHkqygZwLQAvS6BaA1QBlF1_zcG_VSXMRpSiaTq7mo1qy7wKcGy6q1896QFZdHN-s79yFZBF0263XD8E5IOzemfi9W1AFgFeHqonb7JlqmpUKXZhEAHdNiYDs1lmOZiZh1oE5KqUKZgtVG062gJy1T2qnjVi7fwgwEscY4TD2VbquW4eGdJ9odV0uGIQYBRE7wvBTeveIensWG2lO7fNlBYrWdns28issd4bXe08CwDx3QhdAYfZtQ3I-0Nt2-wKbR4dSHHfrQb3wSb7Xbd9Wgii90MkLJe8FJkBAbkCAca6rYzcigBji7Le8EbsqmQljeSlqzqgrdsUFBUoKhwGmG1bA1ahjYg-W7sCRLobe5f2W4CZRDb97DO5_Yl7nA4UAvvvpTBghcOuPytoaPs5EdST4AoLgkdiyVAMQb0Y27_pX2A7SDhqH7G9IV45jXo57ViI14xB26xFdFS8Q9H6JniNUNwz5l4wmsIAn2iQhE80cPnykUHx1eFnNE7QoPGR_Uk0EvUoiYg9QzFKHlOMIH68-lmqEHpOa0IHrY_Hws6Wz5AWPW4IZSeq91Flk8iWm2wDViHwSu1_Rrcu6APyAaQpsqHh1a8GlRQf6oL4aqen_5CmqMseOxUrxFyBSwl92U_KqACzNMWDx5cHCXgswi79nAg2IYJOiqAjERS6gkMOdW952A88z_VKFTZ5Y7bqVohHWkIypSUkY1uTJ7Sstq3pNTE41LRKUG_joIzirmwSUTKJKDlBnQ3n8YgM1SOIj_TvddFwShcNfV0uzTpJwU4rQ3M41MFOj2M86QrxyBUWvCwteYmbFdI0DndT6_TMyLU0m5Vyl8NsPxTb9rMEY0JiDAllURjHEYNs1WelSVrjcDzQcU8rnLAkmhQRjT2yL8AsTmgUIxrTGMYwiWLEyGo_0djQ9BwFEdqzGAPeTGYYm10mhh3tXIwcxPU5wQ7UARuKGYOHkE_gPiEMEgFGIxsHxiZw2jUI3blGX5JYrubocTh4AAXvoYxBRlMg45Mgbfqy8nygLqn1YNkAKyIwiSGmOIwSjClNIohxGBNKIxyHYYQgizAJV7ssPh61Q_rdU2ENh77mM7V4YzBM1cM0vVuWDu0djlA0OULO_ed90GG0ImgOj4eHRkPkE-47GBb2bN9h41gjvdtCNgKy4xKhEZloQASa9N6QnEaA0Mh9J72SRjEcqqGT_hc9pmY8Se2S8HnzB5r7MwiifXpNxgPW80TxiCY4GVgYIgRZjFAYEQyjiMQRgphQHEUoorY8jFg0MJ2gKdP3C4VJ2wmaotiNpjVjAuGQ4emMMBoREr8AVjwZFhQPcgGcCvAD_gRNZq4YncIZ4kmc4ROpC4XoOHft5kfcz4-h2ygVVRg7S5LBlfiB1SEez027xQA6dqVulTNhoWV2Z0g4NGQyMpCD9pSJyWkTu6m8W5w4E5OxiX7GQyE9MSklfVgcpiW73saJnV5dQn98kOF0KITTzLx28J20Y1Zu3Ulcz8CJrvsP-x38zi3AzOp9wXbbB9EdB7oYmfc9XLD0Fxt2UrrKQ-EY8AFe4sMb7GwnFR_-IsMubVatc5ZhpB7omDzacSdOhzOqd_kFyROS8HfiAtnVIoUkIu82F5glhOYQhgmnLMUwQrnAPCcQkRQlLHknLzDEBEYEoghHEZljzGOai5DEMcUsy4MQii2X5Xx3pvnO_fmkC2plvOvO29xfiMK4Et-AqwwwDqKrd_rCHV2l7boJQljKxjQHKUaaUlyo2oDd0RaQFQgoPH7NmcJ3rS4vXv53nhzW_wsAAP__L7CHzg">