<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/139942>139942</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[AMDGPU] LLD LTO triggers assertion in “SI Fix SGPR copies” when -O2 or higher is specified
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:AMDGPU
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
chichunchen
</td>
</tr>
</table>
<pre>
Command:
```
lld -flavor gnu --no-undefined -shared -plugin-opt=mcpu=gfx908 -plugin-opt=O2 -o result.amdgpu reduced.bc
```
Reduced.ll:
```
; ModuleID = '<stdin>'
source_filename = "llvm-link"
target datalayout = "e-p:64:64-p1:64:64-p2:32:32-p3:32:32-p4:64:64-p5:32:32-p6:32:32-p7:160:256:256:32-p8:128:128-p9:192:256:256:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64-S32-A5-G1-ni:7:8:9"
target triple = "amdgcn-amd-amdhsa"
; Function Attrs: nofree noinline nosync nounwind memory(write, inaccessiblemem: none)
define amdgpu_kernel void @"e_53_2_$ck_L6_1"(i64 %"$$arg_ptr_acc_x_t9_t201") #0 {
", bb23":
%"$dev_runtime_t35" = alloca i64, align 8, addrspace(5)
%"$$ipa_tmp_1_t19" = alloca i32, align 4, addrspace(5)
%r = addrspacecast ptr addrspace(5) %"$dev_runtime_t35" to ptr
store i32 25, ptr addrspace(5) %"$$ipa_tmp_1_t19", align 4
%r4 = addrspacecast ptr addrspace(5) %"$$ipa_tmp_1_t19" to ptr
%r6 = call i32 @fib_(ptr %r4)
%r8 = inttoptr i64 %"$$arg_ptr_acc_x_t9_t201" to ptr addrspace(1)
store i32 %r6, ptr addrspace(1) %r8, align 4
ret void
}
; Function Attrs: alwaysinline nofree nosync nounwind memory(argmem: read)
define i32 @fib_(ptr noalias nocapture readonly %n) #1 {
", bb1":
%"t$5" = alloca i32, align 4, addrspace(5)
%"t$3" = alloca i32, align 4, addrspace(5)
%r3 = load i32, ptr %n, align 4
%r5 = icmp sgt i32 %r3, 0
%r9.not = icmp eq i32 %r3, 1
br i1 %r9.not, label %"l$00002", label %"l$00003"
"l$00003": ; preds = %", bb1"
%r13 = add nsw i32 %r3, -1
store i32 %r13, ptr addrspace(5) %"t$3", align 4
%r14 = addrspacecast ptr addrspace(5) %"t$3" to ptr
%r15 = call i32 @fib_(ptr %r14)
%r17 = add nsw i32 %r3, -2
store i32 %r17, ptr addrspace(5) %"t$5", align 4
%r18 = addrspacecast ptr addrspace(5) %"t$5" to ptr
%r19 = call i32 @fib_(ptr %r18)
%r22 = add i32 %r15, %r19
br label %"l$00002"
"l$00002": ; preds = %"l$00003", %", bb1"
%"$f_s3.0" = phi i32 [ %r22, %"l$00003" ], [ 1, %", bb1" ]
ret i32 %"$f_s3.0"
}
attributes #0 = { nofree noinline nosync nounwind memory(write, inaccessiblemem: none) "amdgpu-flat-work-group-size"="1,1" "amdgpu-no-completion-action" "target-cpu"="gfx908" "uniform-work-group-size"="true" }
attributes #1 = { alwaysinline nofree nosync nounwind memory(argmem: read) "target-cpu"="gfx908" }
!llvm.module.flags = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9}
!0 = !{i32 2, !"Debug Info Version", i32 3}
!1 = !{i32 4, !"Dwarf Version", i32 5}
!2 = !{i32 1, !"amdhsa_code_object_version", i32 500}
!3 = !{i32 1, !"wchar_size", i32 4}
!4 = !{i32 8, !"PIC Level", i32 0}
!5 = !{i32 7, !"openmp", i32 51}
!6 = !{i32 7, !"openmp-device", i32 51}
!7 = !{i32 1, !"ThinLTO", i32 0}
!8 = !{i32 1, !"EnableSplitLTOUnit", i32 1}
!9 = !{i32 1, !"amdgpu_printf_kind", !"hostcall"}
```
Error message:
```
lld: /ptmp2/cchen/hpc-pe-cce-cce/llvm/include/llvm/ADT/ilist_iterator.h:168: llvm::ilist_iterator<OptionsT, IsReverse, IsConst>::reference llvm::ilist_iterator<OptionsT, IsReverse, IsConst>::operator*() const [with OptionsT = llvm::ilist_detail::node_options<llvm::MachineInstr, true, true, void, false, void>; bool IsReverse = false; bool IsConst = false; reference = llvm::MachineInstr&]: Assertion `!NodePtr->isKnownSentinel()' failed.
PLEASE submit a bug report to HPE at https://support.hpe.com/ and include the crash backtrace.
Stack dump:
0. Program arguments: lld -flavor gnu --no-undefined -shared -plugin-opt=mcpu=gfx908 -plugin-opt=O2 -o result.amdgpu reduced.bc
1. Running pass 'CallGraph Pass Manager' on module 'ld-temp.o'.
2. Running pass 'SI Fix SGPR copies' on function '@fib_.internalized'
#0 0x00007f46e38d8735 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /ptmp2/cchen/hpc-pe-cce-cce/llvm/lib/Support/Unix/Signals.inc:798:22
#1 0x00007f46e38d8b7d PrintStackTraceSignalHandler(void*) /ptmp2/cchen/hpc-pe-cce-cce/llvm/lib/Support/Unix/Signals.inc:873:23
#2 0x00007f46e38d6299 llvm::sys::RunSignalHandlers() /ptmp2/cchen/hpc-pe-cce-cce/llvm/lib/Support/Signals.cpp:104:22
#3 0x00007f46e38d810a SignalHandler(int) /ptmp2/cchen/hpc-pe-cce-cce/llvm/lib/Support/Unix/Signals.inc:405:31
#4 0x00007f46e2e578ff (/lib64/libc.so.6+0x578ff)
#5 0x00007f46e2ea8dfb __pthread_kill_implementation (/lib64/libc.so.6+0xa8dfb)
#6 0x00007f46e2e57841 gsignal (/lib64/libc.so.6+0x57841)
#7 0x00007f46e2e3f5ce abort (/lib64/libc.so.6+0x3f5ce)
#8 0x00007f46e2e3f4e6 __assert_fail_base.cold (/lib64/libc.so.6+0x3f4e6)
#9 0x00007f46e2e4fb31 __assert_fail (/lib64/libc.so.6+0x4fb31)
#10 0x00007f46e0e39031 llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::MachineInstr, true, true, void, false, void>, false, false>::operator*() const /ptmp2/cchen/hpc-pe-cce-cce/llvm/include/llvm/ADT/ilist_iterator.h:168:5
#11 0x00007f46e0e376f1 llvm::MachineInstrBundleIterator<llvm::MachineInstr, false>::operator*() const /ptmp2/cchen/hpc-pe-cce-cce/llvm/include/llvm/CodeGen/MachineInstrBundleIterator.h:178:40
#12 0x00007f46e0e7be11 llvm::MachineInstrBundleIterator<llvm::MachineInstr, false>::operator->() const /ptmp2/cchen/hpc-pe-cce-cce/llvm/include/llvm/CodeGen/MachineInstrBundleIterator.h:179:49
#13 0x00007f46e1489981 (anonymous namespace)::SIFixSGPRCopies::run(llvm::MachineFunction&) /ptmp2/cchen/hpc-pe-cce-cce/llvm/lib/Target/AMDGPU/SIFixSGPRCopies.cpp:685:0
#14 0x00007f46e14871b5 (anonymous namespace)::SIFixSGPRCopiesLegacy::runOnMachineFunction(llvm::MachineFunction&) /ptmp2/cchen/hpc-pe-cce-cce/llvm/lib/Target/AMDGPU/SIFixSGPRCopies.cpp:171:0
#15 0x00007f46d8b925d2 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) /ptmp2/cchen/hpc-pe-cce-cce/llvm/lib/CodeGen/MachineFunctionPass.cpp:100:33
#16 0x00007f46dac72f7c llvm::FPPassManager::runOnFunction(llvm::Function&) /ptmp2/cchen/hpc-pe-cce-cce/llvm/lib/IR/LegacyPassManager.cpp:1481:40
#17 0x00007f46d485d0b8 (anonymous namespace)::CGPassManager::RunPassOnSCC(llvm::Pass*, llvm::CallGraphSCC&, llvm::CallGraph&, bool&, bool&) /ptmp2/cchen/hpc-pe-cce-cce/llvm/lib/Analysis/CallGraphSCCPass.cpp:182:38
#18 0x00007f46d485e0af (anonymous namespace)::CGPassManager::RunAllPassesOnSCC(llvm::CallGraphSCC&, llvm::CallGraph&, bool&) /ptmp2/cchen/hpc-pe-cce-cce/llvm/lib/Analysis/CallGraphSCCPass.cpp:471:21
#19 0x00007f46d485e3a8 (anonymous namespace)::CGPassManager::runOnModule(llvm::Module&) /ptmp2/cchen/hpc-pe-cce-cce/llvm/lib/Analysis/CallGraphSCCPass.cpp:536:35
#20 0x00007f46dac735f4 (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) /ptmp2/cchen/hpc-pe-cce-cce/llvm/lib/IR/LegacyPassManager.cpp:1596:38
#21 0x00007f46dac6e4ea llvm::legacy::PassManagerImpl::run(llvm::Module&) /ptmp2/cchen/hpc-pe-cce-cce/llvm/lib/IR/LegacyPassManager.cpp:562:55
#22 0x00007f46dac73e1e llvm::legacy::PassManager::run(llvm::Module&) /ptmp2/cchen/hpc-pe-cce-cce/llvm/lib/IR/LegacyPassManager.cpp:1723:17
#23 0x00007f46de0e5656 codegen(llvm::lto::Config const&, llvm::TargetMachine*, std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream>>> (unsigned int, llvm::Twine const&)>, unsigned int, llvm::Module&, llvm::ModuleSummaryIndex const&) /ptmp2/cchen/hpc-pe-cce-cce/llvm/lib/LTO/LTOBackend.cpp:476:20
#24 0x00007f46de0e610c llvm::lto::backend(llvm::lto::Config const&, std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream>>> (unsigned int, llvm::Twine const&)>, unsigned int, llvm::Module&, llvm::ModuleSummaryIndex&) /ptmp2/cchen/hpc-pe-cce-cce/llvm/lib/LTO/LTOBackend.cpp:580:12
#25 0x00007f46de076b5b llvm::lto::LTO::runRegularLTO(std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream>>> (unsigned int, llvm::Twine const&)>) /ptmp2/cchen/hpc-pe-cce-cce/llvm/lib/LTO/LTO.cpp:1420:70
#26 0x00007f46de075b77 llvm::lto::LTO::run(std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream>>> (unsigned int, llvm::Twine const&)>, llvm::FileCache) /ptmp2/cchen/hpc-pe-cce-cce/llvm/lib/LTO/LTO.cpp:1252:41
#27 0x00007f46e485f452 lld::elf::BitcodeCompiler::compile() /ptmp2/cchen/hpc-pe-cce-cce/lld/ELF/LTO.cpp:335:34
#28 0x00007f46e477bba6 void lld::elf::LinkerDriver::compileBitcodeFiles<llvm::object::ELFType<(llvm::endianness)1, true>>(bool) /ptmp2/cchen/hpc-pe-cce-cce/lld/ELF/Driver.cpp:2590:18
#29 0x00007f46e476c813 void lld::elf::LinkerDriver::link<llvm::object::ELFType<(llvm::endianness)1, true>>(llvm::opt::InputArgList&) /ptmp2/cchen/hpc-pe-cce-cce/lld/ELF/Driver.cpp:3082:28
#30 0x00007f46e473d8e4 lld::elf::LinkerDriver::linkerMain(llvm::ArrayRef<char const*>) /ptmp2/cchen/hpc-pe-cce-cce/lld/ELF/Driver.cpp:672:5
#31 0x00007f46e4738df3 lld::elf::link(llvm::ArrayRef<char const*>, llvm::raw_ostream&, llvm::raw_ostream&, bool, bool) /ptmp2/cchen/hpc-pe-cce-cce/lld/ELF/Driver.cpp:142:24
#32 0x00007f46e4d96f09 lld::unsafeLldMain(llvm::ArrayRef<char const*>, llvm::raw_ostream&, llvm::raw_ostream&, llvm::ArrayRef<lld::DriverDef>, bool) /ptmp2/cchen/hpc-pe-cce-cce/lld/Common/DriverDispatcher.cpp:163:13
#33 0x00000000004030b4 lld_main(int, char**, llvm::ToolContext const&) /ptmp2/cchen/hpc-pe-cce-cce/lld/tools/lld/lld.cpp:90:27
#34 0x000000000040601c main /ptmp2/cchen/hpc-pe-cce-cce/build/20/cmake/tools/lld/tools/lld/lld-driver.cpp:17:18
#35 0x00007f46e2e40e6b __libc_start_call_main (/lib64/libc.so.6+0x40e6b)
#36 0x00007f46e2e40f34 __libc_start_main@GLIBC_2.2.5 (/lib64/libc.so.6+0x40f34)
#37 0x0000000000402e00 _start /home/abuild/rpmbuild/BUILD/glibc-2.38/csu/../sysdeps/x86_64/start.S:115:0
Aborted (core dumped)
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsW1tzm762_zTkRYMHSVwf8uDYcXfmpKeZJv_zyggQtk6EYAvhJPvTn5EQNmDn1jb_M7Nnd1pjo6Wl9Vt3CUralm0FpZdOcOUE6wvSqV0tL_Mdy3edyHdUXGR18XK5qquKiMLBS8dbOqFn_3pLzgvglpzsawm2ogOuK2q3EwUtmaAFcNsdkfra8G7LhFs3ysHrKm86B6-35XPixWA2-AMBtwaSth1XC1IV26YDkhZdTotFls-Wd7zlTzvG-al0Dr4C3-ui4_RmDRy8Bg6KHLxqVcGEg6_1L2_Z1p3MaVoyTgWpqKVDnO8rlzPx6CDkeEtF5JYqUBBFOHmpOzXQUbdx8DL0zYfbwPEP5OAl7j_cBo9_-GOyYDwSjn9EDl7C0HPwEgXh4VOPxHoE2U-3SfSXBJ0SsmGVPQwNM3eP_H5oPyyz92NLk4SW4f7AzN0fOLr7AOq7AUTuHnqGj764e-QZFvriCsM29N17jNxl4H6DrmAOXmosmiiZKFRJ1vCD0rW9c-GSqtD_di3paa0pN53IFasFWColWwcvgahLSSkQNROcCf2lfRE5EHUnnpgoQEWrWr44KH6STFEHrQATJM9p27KM04pWPRNBHZQ43rJ3W9B7XfpIpaAc7GtWAMf3tK3TAKcodZCfP6a3YQq1eChmoQ8cFJgfvoN8Irdpo2RK8jx9TlWSKuT1pAlwEPaAE11pSPrOCmQZwvqr8V5wZFTQfSo7oVhFU4X1TaMlwnmdE6DtilaAcLYVIDZfi0K2Dcmpg-KgxwMmYrGGpKpqUpgqmMzZYXRk57_FTvbThtGctAo0Sp7QvwlE1XqOYdmqWlK9PtD0q3d4nYExlnuQ0f-0kOf0M5JSMw0N05xwbsR1fK9kWeqgWHM2q47VFBtqJpSq9fhHfcQuOpEUDnyPujLynFMXtKhkPNeLpMr4sva8aP1WVBH-RF7aQ0jZEHslsojc2jiSlBSTODrVkqgJZ6QFos5JozpJzaRa8Bcts7ABAucBAk_iQznIPwmJD_uwZYB_PQiwmcdrUgyzrBOIc-4Y9L6QVw1ot-pgQKxpvQNVshC1OlLSf04JoSHMJGDwSK4HOMkot7C4g3zP8zxkdXduDB-T6uwmXoIP_tGO00hatDZzB1NbDZAgHgIRiPZpiseFZ3wa4ndywGC3c2qGnwz7gw_MAh0G70U6nIQ6jN5Aic6hjD6AMngNZfx5lPOka_gk76KMxyiHWCmKIw6TsXtmg3e-6o1zj0O_73ET5-0lOeuHfdYt0xYvvCHmmx3rcQRXFt6Rw5gvcIK1GQmuADy3iCEYEqzVzGzBccolSkmWdYq2thfQaKKrP9rKDK1U0-neXLlPtXx0t7LuGrdl_6JG8WsHIY2nh3CgF7Wb11XDqS4JLjGVwVL0HZurm_eBQd_C2_FOsLKW1aurKdlRQ2pUMdUDPOjh94rP-3IeSh-CusVfVGZ_sCg52Q6uBXX5QdDrrQ2t1aF1kD5FOQj69mqDAIb2GtlrbK_JeE1vtIZpeiyRg9CaZt0W3IiyBv9DZdsr3hgaI4AtEwThjIM_4vBEZHlmcnCYjGaT4XFy33CneV3QtM7-l-Yq3Z9y8rwDL_w6r6d8R2Q6WN_O9Q8z_dnM-Djz7mYFbume8tHE45LBbGJ0nFg3VFTNWFR4mBa-N80t6J7l9Pzs6HWcDzsmbh9-nJU1fn3atSAZp_cNZ-r24cdfgqkRh-PCyZvG0luURjKhyvSRieKQAvXwrm6VTuz6Zs9tumm-lrKWoKJtS7b07K5ex5SDNo2qGuSgTZ7vqHDQZtfkbkPdPDf_HLTRMeSgDRM574rRjeX6Qd_mrFUpU1QSVcvFzuxA9SYQGDK8dPBySuPg1Y9GJ532QcO5aX9S7YW0_7GqRav0zt3MlLSkkoqc_hFudWPnoKWDdOUDuR7Xif-JqR0YGPWd32zBgirCeH9HmAjqqR28OpJ-J_mOCXojWiW1BH1CPF5Nd45WoCS8Pd7Q8l2BrK75UX4jQ092HFv14o5HjhqaCj2VJNQVDC_Bsm2pNFsB7QYI_ndd0DslXQdfs_a_RP0k7qlQTOjgNK0BikBJGKfFwvGWd7fXy_tr0HZZxRQgQCczSZtaKt15_OPuGhAFdko1eo_hoI2DNm3X6PHFrqGLvNZuA4gogHUmoHYU5JK0O5CR_FFJklO90L0i-SMouqrpPddb9B3Cnay3klSAyG1XUaHa3s9--4Dqk-dT0IrzsxOCiS1oSKtLXLQinH-TpNmBO33nOxFkS6XWYS1AX4U0GS9cRatmUTso0mjRK-zub8CGPYP7b3c_QV43jLaWVTns5xwU2Z5uwYSiUhDO_kWL_tSrbz68Z93mRKUfUhwXcYSDkZO0L23_5U5nGaP1B9m3l0ciSZ7SulWSkko7kmlLVF-IP5w8OMsctLnvncFBm78Ee9Y32FYQ3i6YyB28jBJzwoSs7HAuexYVYCZoz-AfRBRcKzru42v5FdLFEdbSYSsdmkkXoiQ5p9mfnZgI2drM8xviDXLlTWOO5_yx1vBca9AjYK6mLzKg75lzTmhF8ceiIBpEcVkCA1-zC_3-mi_aehE66Mp7NhR2Q-IgHEznk7goM5CmjdrpVjB9ZJynTDeyOhUQGxCvczfzj9zDE-l8CLatAfSelD488ommfHAZ5BSQTCfFt7gYuiOXeM7FpyFIU2LydapTcJqRVudQXrzD16fhkW8y5euXGYZTvm9yM_Q9Nx2Rk3TiUZx4GL5Vmf_eGjq-Z-vje4X_69qfwKoMzlQWhSV8pUxfdTo-b86pb66Tr4e3qgv6zUx5XcQebhSb0Ld40RRvlFH4ZXhdY_W_H3CiAQ8xMUm40I-TJIY6poioxUtVdy0QpKL21CbpAdzfbNizruurvqz3dbYTk7prxRgOb03t_YWc_WD2ytphv6-_3f2lk_Z0dVtHwlgn78GM_gxVBLPgk6hu6ZbkLwdsP8QJoP8_sDCCI7DjQlPEWYKCAp367CCb7u1GqM7C-V0cJ844XvxQ-D1dbbEFMa5nBckjVEb5CMTmTk8dWtIvFv_mp4M2vf1Hqw5y-zEcZ4xxAS38OCi8LH7P1VbfTtD87Ixyfoj71WoCxthLZ8bVSB2HVt1Qh68M2hG9-5p__QWtLAXhLy1rtX1Hy49NGpvntbHVTDzTDPVI-WuaWXKub9Mz6vk1TXwJfN9EJYIWfjKHj8mvOEafe8zua5py7K2vQhNg84DeNgLIm8UnDkr_PTTfXwnaP47m7YANzEsDg1siOEUSUp-Skc_wUd4fMbupGv5Kofs60YPQvM0w2ADNbUAhfV_yv11qGCFsLlbscYtRUI8GYRCCvC7olk5l4qq2YVCLkm37rugkqPsiaQuLzYytKvrB4Wxh0o5dPzc0V7To36zp73WC_bOjaaOmnduK5DtabBin9_bIYMS8oCXpuN4HcKro2_N0s6f_6hjphHmJqehPHiZYnpigI5yJ3Qi8PmNkt9Pb911VEflyIwr6POb6eQObM2P9eUXyRyqKQ4ozb9rY2of8mWVD6I2L9sGeWc_kw8b-jzlPzPmHDRnEnnmRyhoymBoyCrMgO2dIzW1IJz_ptuNEmgXify-L_Y6eD20i0hqOhlAJZxoOsih6T8P_dnodU2iWhvmfUTcKdKn0bfOFJsdafhyUfqD3RBYv5WX_5YopXYhWddUwPpTKvP_1qZPOwkGb69vNRCaMzXmib0WanJH5UZRlJOzf3TuV65aJRyrXku1nQlmBtfKmx079A1HrFrebh5dG23GScakoGBGC6v1EAg9nUr1BUdw3x58H3EtpMaMgMYllaLaSKegwjyH-OGjzduufRTni1VhGN6Lp1FJub9kn6-UrOsCe2Qchq4PpUww_wkVM_Q_Dp_I7YdM2aSkleflJSwev8h2RQ5QtP5W6XpE9jNDx9G_6DMOPcFyU-Izk_UvIH5VwnAROH868NdZ76HD9TaTQN0ay0Tl9IOIXSVh6yRFqJ1pS0ltefM4Yvw717AIHcXoga33z-tcUsqqrqhYHnaxZ2xCV747aCU0Lb09nDo9l-j--h73MuHBa9fqw-V9rwHTks-OKh7rmq1oo-qx-oS3V8qq65u3hF-dDH2OyDbI7jcMjm0HM0IM50CJ-aKWsY4Y78jRVRR7pycInYrjFxKeiUe6bPwDyPRpmIE05y_K0VUSqNCecp1a-N55i6ImHpxjzJz--V2J_ytYYxfe-3d5crVK0QIvgHf4l9o_8o5kSEfU80HPWatzVldYLGbQlm2r4evXXze3aQZut5u-iBdZr5m3noM1i4aBN-9IWtNH6e47D1Ehi2C7utdrgcIC7zGqpqHlOlNeSmgfp1L64e3gJ5KK4xEWCE3JBL2HkR8gPcQwvdpfEg4h6fpiUYZAHQeAFcRBESUGLJIdRGVywS-ShwAugD2OIPbgIiiL3C8-PAkhJmRSO79GKML4wr1_VcnvB2rajlxAniY8uzPuDrfkPKQgNOxu8HI5skROsL-Sl-d8ZWbdtHd_jrFXtkZtiipv_0GKnBGtwe7sGtw8_gJJsu6WyBeTwpoN2jmvkxJ6TrM48UrdDa_C0owK4PxCoJdix7Y5KwFrQNjRnJaPFRSf55fTlhi1Tuy6z7zUM3ZUWu5G1KbNoY4Brg1ns-0v0fwEAAP__jCUcJg">