<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/70069>70069</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[OpenMP] Dynamic schedule compilation fail
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
doru1004
</td>
</tr>
</table>
<pre>
After this commit: https://github.com/llvm/llvm-project/commit/d3921e467005733daa8e63df4b553052c8ec72c1
The following example fails to compile:
```
#include <omp.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 25000
void reset_input(double *a, double *a_h, double *b, double *c) {
for(int i = 0 ; i < MAX_N ; i++) {
a[i] = a_h[i] = i;
b[i] = i*2;
c[i] = i-3;
}
}
int main(int argc, char *argv[]) {
double * a = (double *) malloc(MAX_N * sizeof(double));
double * a_h = (double *) malloc(MAX_N * sizeof(double));
double * d = (double *) malloc(MAX_N * sizeof(double));
double * d_h = (double *) malloc(MAX_N * sizeof(double));
double * b = (double *) malloc(MAX_N * sizeof(double));
double * c = (double *) malloc(MAX_N * sizeof(double));
#pragma omp target enter data map(to:a[:MAX_N],b[:MAX_N],c[:MAX_N],d[:MAX_N])
int n = 32;
reset_input(a, a_h, b, c);
#pragma omp target update to(a[:n],b[:n],c[:n])
#pragma omp target teams distribute parallel for schedule(dynamic)
for (int i = 0; i < n; ++i) {
a[i] += b[i] + c[i];
}
for (int i = 0; i < n; ++i)
a_h[i] += b[i] + c[i];
#pragma omp target update from(a[:n])
for (int i = 0; i < n; ++i) {
if (a_h[i] != a[i]) {
printf("Error at n = %d, i = %d: host = %lf, device = %lf\n", n, i, a_h[i], a[i]);
return 1;
}
}
printf("Succeeded\n");
#pragma omp target exit data map(delete:a[:MAX_N],b[:MAX_N],c[:MAX_N],d[:MAX_N])
return 0;
}
```
The compilation error is:
```
"/home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper" --opt-level=O3 --host-triple=x86_64-unknown-linux-gnu --wrapper-verbose --save-temps --linker-path=/home/dobercea/rocm/trunk_1.0/bin/ld.lld -- -pie -z relro --hash-style=gnu --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o test /lib/x86_64-linux-gnu/Scrt1.o /lib/x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/9 -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib64 -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib64 -L/lib -L/usr/lib test-host-x86_64-unknown-linux-gnu.o -lstdc++ -lm -lomp -lomptarget -lomptarget.devicertl -L/home/dobercea/rocm/trunk_1.0/lib -lgcc_s -lgcc -lpthread -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o /lib/x86_64-linux-gnu/crtn.o
LLVM ERROR: Cannot select: t17: i32 = GlobalAddress<ptr addrspace(5) @_ZL12ThreadDSTPtr> 0
In function: __omp_offloading_fd00_28c3b6a_main_l34
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: /home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper --opt-level=O3 --host-triple=x86_64-unknown-linux-gnu --wrapper-verbose --save-temps --linker-path=/home/dobercea/rocm/trunk_1.0/bin/ld.lld -- -pie -z relro --hash-style=gnu --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o test /lib/x86_64-linux-gnu/Scrt1.o /lib/x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/9 -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib64 -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib64 -L/lib -L/usr/lib test-host-x86_64-unknown-linux-gnu.o -lstdc++ -lm -lomp -lomptarget -lomptarget.devicertl -L/home/dobercea/rocm/trunk_1.0/lib -lgcc_s -lgcc -lpthread -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o /lib/x86_64-linux-gnu/crtn.o
1. Running pass 'CallGraph Pass Manager' on module 'ld-temp.o'.
2. Running pass 'AMDGPU DAG->DAG Pattern Instruction Selection' on function '@__omp_offloading_fd00_28c3b6a_main_l34'
#0 0x0000559b76f12fe4 PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
#1 0x0000559b76f10814 SignalHandler(int) Signals.cpp:0:0
#2 0x00007f74d189c420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
#3 0x00007f74d133900b raise /build/glibc-SzIz7B/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
#4 0x00007f74d1318859 abort /build/glibc-SzIz7B/glibc-2.31/stdlib/abort.c:81:7
#5 0x0000559b75d54bd8 llvm::ConvertUTF8toUTF32(unsigned char const**, unsigned char const*, unsigned int**, unsigned int*, llvm::ConversionFlags) (.cold) ConvertUTF.cpp:0:0
#6 0x0000559b7789ef5d llvm::SelectionDAGISel::CannotYetSelect(llvm::SDNode*) (/home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper+0x1dccf5d)
#7 0x0000559b778a169a llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*, unsigned char const*, unsigned int) (/home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper+0x1dcf69a)
#8 0x0000559b764bf877 AMDGPUDAGToDAGISel::Select(llvm::SDNode*) (/home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper+0x9ed877)
#9 0x0000559b7789be90 llvm::SelectionDAGISel::DoInstructionSelection() (/home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper+0x1dc9e90)
#10 0x0000559b778a9095 llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper+0x1dd7095)
#11 0x0000559b778ac438 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper+0x1dda438)
#12 0x0000559b778ae102 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (.part.0) SelectionDAGISel.cpp:0:0
#13 0x0000559b764c8ad9 AMDGPUDAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper+0x9f6ad9)
#14 0x0000559b7701dde1 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
#15 0x0000559b7688f4c1 llvm::FPPassManager::runOnFunction(llvm::Function&) (/home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper+0xdbd4c1)
#16 0x0000559b76b22cf7 (anonymous namespace)::CGPassManager::runOnModule(llvm::Module&) CallGraphSCCPass.cpp:0:0
#17 0x0000559b7688ff92 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper+0xdbdf92)
#18 0x0000559b774d5b15 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&) LTOBackend.cpp:0:0
#19 0x0000559b774d60ed 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&) (/home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper+0x1a040ed)
#20 0x0000559b774cc6fc llvm::lto::LTO::runRegularLTO(std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream>>> (unsigned int, llvm::Twine const&)>) (/home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper+0x19fa6fc)
#21 0x0000559b774ccda8 llvm::lto::LTO::run(std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream>>> (unsigned int, llvm::Twine const&)>, std::function<llvm::Expected<std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream>>> (unsigned int, llvm::Twine const&)>> (unsigned int, llvm::StringRef, llvm::Twine const&)>) (/home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper+0x19fada8)
#22 0x0000559b75e06f3d (anonymous namespace)::linkBitcodeFiles(llvm::SmallVectorImpl<llvm::object::OffloadFile>&, llvm::SmallVectorImpl<llvm::StringRef>&, llvm::opt::ArgList const&) (.constprop.0) ClangLinkerWrapper.cpp:0:0
#23 0x0000559b75e0dc6a llvm::Error (anonymous namespace)::linkAndWrapDeviceFiles(llvm::SmallVectorImpl<llvm::object::OffloadFile>&, llvm::opt::InputArgList const&, char**, int)::'lambda'(auto&)::operator()<llvm::SmallVector<llvm::object::OffloadFile, 3u>>(auto&) const ClangLinkerWrapper.cpp:0:0
#24 0x0000559b75e14215 (anonymous namespace)::linkAndWrapDeviceFiles(llvm::SmallVectorImpl<llvm::object::OffloadFile>&, llvm::opt::InputArgList const&, char**, int) ClangLinkerWrapper.cpp:0:0
#25 0x0000559b75d5a746 main (/home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper+0x288746)
#26 0x00007f74d131a083 __libc_start_main /build/glibc-SzIz7B/glibc-2.31/csu/../csu/libc-start.c:342:3
#27 0x0000559b75df66de _start (/home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper+0x3246de)
#0 0x0000559b76f12fe4 PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
#1 0x0000559b76f10814 SignalHandler(int) Signals.cpp:0:0
#2 0x00007f74d189c420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
#3 0x00007f74d133900b raise /build/glibc-SzIz7B/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
#4 0x00007f74d1318859 abort /build/glibc-SzIz7B/glibc-2.31/stdlib/abort.c:81:7
#5 0x0000559b75d54bd8 llvm::ConvertUTF8toUTF32(unsigned char const**, unsigned char const*, unsigned int**, unsigned int*, llvm::ConversionFlags) (.cold) ConvertUTF.cpp:0:0
#6 0x0000559b7789ef5d llvm::SelectionDAGISel::CannotYetSelect(llvm::SDNode*) (/home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper+0x1dccf5d)
#7 0x0000559b778a169a llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*, unsigned char const*, unsigned int) (/home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper+0x1dcf69a)
#8 0x0000559b764bf877 AMDGPUDAGToDAGISel::Select(llvm::SDNode*) (/home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper+0x9ed877)
#9 0x0000559b7789be90 llvm::SelectionDAGISel::DoInstructionSelection() (/home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper+0x1dc9e90)
#10 0x0000559b778a9095 llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper+0x1dd7095)
#11 0x0000559b778ac438 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper+0x1dda438)
#12 0x0000559b778ae102 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (.part.0) SelectionDAGISel.cpp:0:0
#13 0x0000559b764c8ad9 AMDGPUDAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper+0x9f6ad9)
#14 0x0000559b7701dde1 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
#15 0x0000559b7688f4c1 llvm::FPPassManager::runOnFunction(llvm::Function&) (/home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper+0xdbd4c1)
#16 0x0000559b76b22cf7 (anonymous namespace)::CGPassManager::runOnModule(llvm::Module&) CallGraphSCCPass.cpp:0:0
#17 0x0000559b7688ff92 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper+0xdbdf92)
#18 0x0000559b774d5b15 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&) LTOBackend.cpp:0:0
#19 0x0000559b774d60ed 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&) (/home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper+0x1a040ed)
#20 0x0000559b774cc6fc llvm::lto::LTO::runRegularLTO(std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream>>> (unsigned int, llvm::Twine const&)>) (/home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper+0x19fa6fc)
#21 0x0000559b774ccda8 llvm::lto::LTO::run(std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream>>> (unsigned int, llvm::Twine const&)>, std::function<llvm::Expected<std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream>>> (unsigned int, llvm::Twine const&)>> (unsigned int, llvm::StringRef, llvm::Twine const&)>) (/home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper+0x19fada8)
#22 0x0000559b75e06f3d (anonymous namespace)::linkBitcodeFiles(llvm::SmallVectorImpl<llvm::object::OffloadFile>&, llvm::SmallVectorImpl<llvm::StringRef>&, llvm::opt::ArgList const&) (.constprop.0) ClangLinkerWrapper.cpp:0:0
#23 0x0000559b75e0dc6a llvm::Error (anonymous namespace)::linkAndWrapDeviceFiles(llvm::SmallVectorImpl<llvm::object::OffloadFile>&, llvm::opt::InputArgList const&, char**, int)::'lambda'(auto&)::operator()<llvm::SmallVector<llvm::object::OffloadFile, 3u>>(auto&) const ClangLinkerWrapper.cpp:0:0
#24 0x0000559b75e14215 (anonymous namespace)::linkAndWrapDeviceFiles(llvm::SmallVectorImpl<llvm::object::OffloadFile>&, llvm::opt::InputArgList const&, char**, int) ClangLinkerWrapper.cpp:0:0
#25 0x0000559b75d5a746 main (/home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper+0x288746)
#26 0x00007f74d131a083 __libc_start_main /build/glibc-SzIz7B/glibc-2.31/csu/../csu/libc-start.c:342:3
#27 0x0000559b75df66de _start (/home/dobercea/rocm/trunk_1.0/bin/clang-linker-wrapper+0x3246de)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsXFtv2zja_jXMDSFDos4XuXDsOF-BdBrUmfl298agSMrmlCK1FJWm_fULUrItOU7idtLdTuGBx7F4ePm8Bz58SdrFTcPXkrFLEF-BeH6BW7NR-pIq3Qa-H10Uin65nJaGaWg2vIFEVRU3IJzCjTF1A8IpQAuAFmtuNm0xIaoCaCHEw_aPV2v1JyMGoEXfFS1omKOARUnq-3EahhTjjCUhLaMijkM_RiRjJEUkAP4c-NPu_X7DYKmEUJ-5XEP2iKtaMFhiLhpolIVVc8EsnEEnkPj9q3tEIZdEtJRBEM5UVU82ILw-VtcYytVLtYIXw-ptI8pKLhl8P_3H6jeIYt_3hw0eFKdQs4aZFZd1awDKqGoLwSBAUwzQDA4eV5txQTF-JADlEKRXnWQIS6UByrg0kEMQzqEPQXjlPs96OO4ZoCv3GvWFEIP4ioN47rraoQePHITblsW4HE3Rvg5CSEbVXjioBOm8t8Tug3u3gCvMZY8d6zWxepIN1s4Kev3QBeYB5L0hIHbDjWxpG1dYCEUAynrt0RQ2_CtT5a4lQLl97UAOZa42byV1KJb-EKE_BmvxI4SSNxK6m3C1xusKQ1XV0GC9ZgYyabmKYoNhhWuAMqNAOLUBDsKpk--iaVY8KSFPSuhhSb7VyQardMqEgzkwnttuRvfz2M1ecqIKbU2xYdAoJ8RBkCPQcgRYDqG9INYwXDWQ8sZoXrSGwRprLAQTljxgQzaMttbSGf0iccXJQF37n200ppg9w0j7seMW_oRcxgSDrmzfYvC8440RmQw54_tQ9N2GdHbK4K87ptR2lRu7ZmT-v2IrXtqeI9CBY-UtzlGXWnNp7DQBCF1rrTTE28AEKKY26vj-ya7aqjHbAlG6NYU9cMIGZfFMAoRslXT9t2G8HX82xHLgMwg1M62WMHjOmeOHIf5lSwhjlNEdgsPZAuHxKf_IzXDGUyaYYW8-67cYeg39PbhdoB7kG7vMpUtPsOFKQubcxJuXcxXoDLDYqIrZjEkVTBOGAVpoRWxuZXQrP62CiQ_QorDr54IILNee4PIT095njeuaaYAQ9DxVG0-wByZAOP8QQs-zQeAZzWubMc0fs2SVRF4rP0n1WVoJ7aO3li30tmK8B6YL1TDoeQ1-YJ5hVd1AbztYjc0GhPNvgyvoRAgKPQ96NWfQ-wo1E1pZdLjZeI354sB1ONjGKzWumLehGnoVZKJcdbCh17NVDwZa0bxIIjdEr8xjlnhJNGnUBEFPQcPsHHDtAFr06u_UBmixJNoEE_ViG6IN75q0jd41XBNyvHnedSnYmsvlREHv9uSe39IWoMVk8vTNWaSTc1yhYd1hj-HIx_sNWxwZ76CRs38Xg8-FnjWQaAwlHU9CT1TQE3bKu_d-3g8-TzoW00Z0g50UiA6aWBOyarq_0BO12WiGKfQEOaj7Rk8zSZevh5CcqG6-397-8R5ef_z44aNl6RmWUhnYMGG3TuEUmiC1f3iIHFHfCFVgMaVUs6YB4aw2GmJKdVNjYlfw2K0Skb_6122A7p1G8-X9ndEgvIY9w7yTsGwlsZxkRa9WqqpXqiyFwpTL9aqkvr9CGQmLBK9sjr4SYdR1vbu9ni6vYdMWFTcQw6JdQ81qpY3di33zxpA3TcsagBYQSwq3Gy1jeVPjZgMLTD4ZjQmbdMMvDSafIG2reseh_qRbZu60Wmtc2Y1EWzFpLA7413n0TKJnEj2T6E9PokHPAh9bKblcwxo3DQQonWEhbjSuN_DOlrzHEq9tcpRCJWGl7LbHNhPUTcqJAijtqQY9I3H6fn5z9zucT288EF7PpzfwDhvDtITvZGN062gVLh1_W4LthtryrZVg2fk0ykXpLiUMfeg_-r7vx3FepEkZoJJF8M4m0Y4U7y1LLvlaYvF_WFJhlcweFKf9RruraiakttTpu_93soMD2X4WRPBQGJfmVUGoF5SWaUSDLCcR8uFqpVljlGYrbXkje8mnghd9CFm68QG68h-DKEL-flcHUBiOhgnD3PcLqDFvrDMXRcsFtSEmeEG85dd3X9Or3SOahAFAi8ZpsZ1vzZeGstquQ63kj13Bg0MjW_voRE8ICKdxAMJpsEcSjZEEWRbnEBfKaXoaEnekCNDC9XKDZHaQgevjoXtiGkcFzaBbUMMpCKczJR-YNr_fLzKjfr9fhAigrJXudJd2B2pEyca4SJjaXdxzlYMa5-0n7belsyfDN1zJhcDrxuUfKJsQZVXP4R7d8ZBJhsqlWc7KmA6k7ybSfHrzbmnXYDemy5L-yUxXDVA26DH_TVHWh30Xbn95L2WjkBJS2n31IA7TMXYcJDl-FXtXOlOUzVRVWYY4Dv50N72xmmWS45Ga2YgeoqLM0hR2PDif3tyrI-r9NzySM5ql6QhpfhBMBcv9Vx0yVwPmHhB39uaWzVm-JzLLu_5BAOV-Hr8e_IqyGyankl5X3MynNz8AKk39PB5BDQ6gkijMToz1qRBXuOHkSijyqRmFxmK7LvbRnby5IjgKs5Ei6EARFvjoVUV0Kz_I95hsuGRbzCNFntRtNZnUWBuLNYeHop8SosUXjmcbyTDNn51t34_rrSZhmWCajwwcjQzsB5SyAD6LyOZlA12OKvGiVY_IO27Y0TKaZFkZkSGuxZ3tus0QvxnRG9mTFjQiwcieoxUyKRAiZepOiqWSXyrVNlDiivUHAHnPETfHlXmv-pP-gT_6IqfILl9ezmbPWzI9tGSZD6eQYGtMvnSfBzDeVfU-ap-H8Ka2LHM0suVoKUsjGhdBDImibM3GkIS7POrSm5KvB_w0zH3u3e6pj8B-bW4M7Sr3ZyyzfY_rx5oRw2h3mdyVtZL_u2Wr2uhR0xkmG0YXXLCl0QxXI-GUlbgVZrU98X6pX3jdveAwL3SZw0iXz1yyIQ_bTk9yjWGPgdueFi_bqsL6yztJ2eOI3W_vP1xh8olJejy48gMXJT4bJoQ7xxSdkJO9dvbLE7-8_XqL_chndDjl0DjHiQhJSnLMn7f3H3bs8JGtW4G1LULZr-W4NzV3XuKkJCNzB4fmpjh7zdy_nJG_Z7b_Coq_1mlpNJfrj6z8X0QqxaNEHI0S8Zj5SRnS1_IaK_qKG7tiW4uNNxPLCgvxByNG9bnGwMqq-LO7UAHh9EN37rZwXxu7fsKTL4nZG_BIR1X3A0z1-pY35nBTM3HPtVZ1l7nOrLVunbH-v7PV0RURhQeGoiQZHjN0t_8nGG4qqR1n7s56f5j5dlZ4J-vWPDVF9x2v_eFSd4TRdQEoFbgqKAYotQq1Rm0DshPNNDbu-26ubHYU_EnA0QyGbT_VhgN1QE92TTR2TRChIP67u-Jk5Q_PJXEaJe47fW9IHCjL0igZ8UZycOaK_SyEq5XgBVk1Bmuz6jGcdP5KmnZ7DNx9dJVOjjuMDSNk3_fDp2OtyyShDHYDv6HeIYoSykaHW-cbgPMNwPkG4HwDcL4BON8AnG8AzjcA5xuA8w3A-QbgfAPwdzhpPt8A_Jx-Od8AnG8AzjcAv5Di5xuA8w3A3_PY-XwD8NO44nwD8PPdABz8SvSCXoY0D3N8wS6DJM-CJA-y7GJz6UchDlKMShqlJMqiiLCsDGhU-jkL_RBf8EvkozDwURSkYR6lkyhK_dCPkzgtCCkRBZHPKszFxIbRROn1hfuZ1mXq-0l-IXDBROP-0RCEJPsMXSVACMTzC31p-3hFu25A5AvemGYvxXAj3L828qFm8v0diOdw3v34aPcT9NHPZUvMxUWrxeX3_6zMQf5PAAAA__8OtcE4">