<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/113334>113334</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[mlir] -convert-math-to-rocdl crashes
</td>
</tr>
<tr>
<th>Labels</th>
<td>
mlir
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
wr-web
</td>
</tr>
</table>
<pre>
git version: d71dd363991fd533e9a2c2f43f4630b8fa64df10
system:
```
LSB Version: core-11.1.0ubuntu2-noarch:security-11.1.0ubuntu2-noarch
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal
```
quick to reproduce: `mlir-opt -convert-math-to-rocdl test.mlir`
bug report with AddressSanitizer:
```
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: mlir-opt -convert-math-to-rocdl test.mlir
Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
0 mlir-opt 0x000056008de61975 __interceptor_backtrace + 117
1 libLLVMSupport.so.20.0git 0x00007f4cc7f1e021 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 289
2 libLLVMSupport.so.20.0git 0x00007f4cc7f1614b llvm::sys::RunSignalHandlers() + 331
3 libLLVMSupport.so.20.0git 0x00007f4cc7f1f2c8
4 libpthread.so.0 0x00007f4cdd4fb420
5 libMLIRIR.so.20.0git 0x00007f4cc82d6ce4 mlir::Attribute::getContext() const + 20
6 libMLIRGPUToNVVMTransforms.so.20.0git 0x00007f4cdb0031a9
7 libMLIRGPUToNVVMTransforms.so.20.0git 0x00007f4cdb002308
8 libMLIRGPUToNVVMTransforms.so.20.0git 0x00007f4cdafffd4e
9 libMLIRTransformUtils.so.20.0git 0x00007f4cc968b52c mlir::ConversionPattern::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&) const + 796
10 libMLIRRewrite.so.20.0git 0x00007f4cc9537409
11 libMLIRRewrite.so.20.0git 0x00007f4cc952ea70 mlir::PatternApplicator::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&, llvm::function_ref<bool (mlir::Pattern const&)>, llvm::function_ref<void (mlir::Pattern const&)>, llvm::function_ref<llvm::LogicalResult (mlir::Pattern const&)>) + 3264
12 libMLIRTransformUtils.so.20.0git 0x00007f4cc968e3b2
13 libMLIRTransformUtils.so.20.0git 0x00007f4cc968b8bb mlir::OperationConverter::convert(mlir::ConversionPatternRewriter&, mlir::Operation*) + 379
14 libMLIRTransformUtils.so.20.0git 0x00007f4cc968f57f mlir::OperationConverter::convertOperations(llvm::ArrayRef<mlir::Operation*>) + 1695
15 libMLIRTransformUtils.so.20.0git 0x00007f4cc96a8690 mlir::applyPartialConversion(mlir::Operation*, mlir::ConversionTarget const&, mlir::FrozenRewritePatternSet const&, mlir::ConversionConfig) + 432
16 libMLIRMathToROCDL.so.20.0git 0x00007f4cda9a86fa
17 libMLIRPass.so.20.0git 0x00007f4cc8ba89bc mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) + 2860
18 libMLIRPass.so.20.0git 0x00007f4cc8baa61e mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) + 1006
19 libMLIRPass.so.20.0git 0x00007f4cc8bb1b26 mlir::PassManager::run(mlir::Operation*) + 2662
20 libMLIROptLib.so.20.0git 0x00007f4cdbc5735e
21 libMLIROptLib.so.20.0git 0x00007f4cdbc566e1
22 libMLIRSupport.so.20.0git 0x00007f4cc80378dd mlir::splitAndProcessBuffer(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<llvm::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>, llvm::raw_ostream&, llvm::StringRef, llvm::StringRef) + 2957
23 libMLIROptLib.so.20.0git 0x00007f4cdbc3e83d mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) + 925
24 libMLIROptLib.so.20.0git 0x00007f4cdbc3f1b7 mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) + 1207
25 libMLIROptLib.so.20.0git 0x00007f4cdbc3ff39 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) + 2025
26 mlir-opt 0x000056008def742a main + 346
27 libc.so.6 0x00007f4cc73fe083 __libc_start_main + 243
28 mlir-opt 0x000056008de1cece _start + 46
AddressSanitizer:DEADLYSIGNAL
=================================================================
==2471009==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000018 (pc 0x7f4cc82d6ce4 bp 0x7ffe77b67fb0 sp 0x7ffe77b67fb0 T0)
==2471009==The signal is caused by a READ memory access.
==2471009==Hint: address points to the zero page.
#0 0x7f4cc82d6ce4 in getDialect /home/wangrui/llvm-project/mlir/include/mlir/IR/Attributes.h:77:12
#1 0x7f4cc82d6ce4 in mlir::Attribute::getContext() const /home/wangrui/llvm-project/mlir/lib/IR/Attributes.cpp:37:53
#2 0x7f4cdb0031a8 in getContext /home/wangrui/llvm-project/mlir/include/mlir/IR/Operation.h:216:48
#3 0x7f4cdb0031a8 in OpBuilder /home/wangrui/llvm-project/mlir/include/mlir/IR/Builders.h:232:23
#4 0x7f4cdb0031a8 in mlir::OpToFuncCallLowering<mlir::math::AtanOp>::appendOrGetFuncOp(llvm::StringRef, mlir::Type, mlir::Operation*) const /home/wangrui/llvm-project/mlir/lib/Conversion/GPUToNVVM/../GPUCommon/OpToFuncCallLowering.h:126:21
#5 0x7f4cdb002307 in mlir::OpToFuncCallLowering<mlir::math::AtanOp>::matchAndRewrite(mlir::math::AtanOp, mlir::math::AtanOpAdaptor, mlir::ConversionPatternRewriter&) const /home/wangrui/llvm-project/mlir/lib/Conversion/GPUToNVVM/../GPUCommon/OpToFuncCallLowering.h:73:25
#6 0x7f4cdafffd4d in mlir::ConvertOpToLLVMPattern<mlir::math::AtanOp>::matchAndRewrite(mlir::Operation*, llvm::ArrayRef<mlir::Value>, mlir::ConversionPatternRewriter&) const /home/wangrui/llvm-project/mlir/include/mlir/Conversion/LLVMCommon/Pattern.h:165:12
#7 0x7f4cc968b52b in mlir::ConversionPattern::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&) const /home/wangrui/llvm-project/mlir/lib/Transforms/Utils/DialectConversion.cpp:1656:10
#8 0x7f4cc9537408 in operator() /home/wangrui/llvm-project/mlir/lib/Rewrite/PatternApplicator.cpp:212:31
#9 0x7f4cc9537408 in void llvm::function_ref<void ()>::callback_fn<mlir::PatternApplicator::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&, llvm::function_ref<bool (mlir::Pattern const&)>, llvm::function_ref<void (mlir::Pattern const&)>, llvm::function_ref<llvm::LogicalResult (mlir::Pattern const&)>)::$_0>(long) /home/wangrui/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:12
#10 0x7f4cc952ea6f in operator() /home/wangrui/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:12
#11 0x7f4cc952ea6f in executeAction<mlir::ApplyPatternAction, const mlir::Pattern &> /home/wangrui/llvm-project/mlir/include/mlir/IR/MLIRContext.h:275:7
#12 0x7f4cc952ea6f in mlir::PatternApplicator::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&, llvm::function_ref<bool (mlir::Pattern const&)>, llvm::function_ref<void (mlir::Pattern const&)>, llvm::function_ref<llvm::LogicalResult (mlir::Pattern const&)>) /home/wangrui/llvm-project/mlir/lib/Rewrite/PatternApplicator.cpp:195:23
#13 0x7f4cc968e3b1 in legalizeWithPattern /home/wangrui/llvm-project/mlir/lib/Transforms/Utils/DialectConversion.cpp:1964:21
#14 0x7f4cc968e3b1 in (anonymous namespace)::OperationLegalizer::legalize(mlir::Operation*, mlir::ConversionPatternRewriter&) /home/wangrui/llvm-project/mlir/lib/Transforms/Utils/DialectConversion.cpp:1856:17
#15 0x7f4cc968b8ba in mlir::OperationConverter::convert(mlir::ConversionPatternRewriter&, mlir::Operation*) /home/wangrui/llvm-project/mlir/lib/Transforms/Utils/DialectConversion.cpp:2382:26
#16 0x7f4cc968f57e in mlir::OperationConverter::convertOperations(llvm::ArrayRef<mlir::Operation*>) /home/wangrui/llvm-project/mlir/lib/Transforms/Utils/DialectConversion.cpp:2484:16
#17 0x7f4cc96a868f in applyPartialConversion /home/wangrui/llvm-project/mlir/lib/Transforms/Utils/DialectConversion.cpp:3285:22
#18 0x7f4cc96a868f in mlir::applyPartialConversion(mlir::Operation*, mlir::ConversionTarget const&, mlir::FrozenRewritePatternSet const&, mlir::ConversionConfig) /home/wangrui/llvm-project/mlir/lib/Transforms/Utils/DialectConversion.cpp:3291:10
#19 0x7f4cda9a86f9 in (anonymous namespace)::ConvertMathToROCDLPass::runOnOperation() /home/wangrui/llvm-project/mlir/lib/Conversion/MathToROCDL/MathToROCDL.cpp:146:14
#20 0x7f4cc8ba89bb in operator() /home/wangrui/llvm-project/mlir/lib/Pass/Pass.cpp:527:17
#21 0x7f4cc8ba89bb in callback_fn<(lambda at /home/wangrui/llvm-project/mlir/lib/Pass/Pass.cpp:522:7)> /home/wangrui/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:12
#22 0x7f4cc8ba89bb in operator() /home/wangrui/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:12
#23 0x7f4cc8ba89bb in executeAction<mlir::PassExecutionAction, mlir::Pass &> /home/wangrui/llvm-project/mlir/include/mlir/IR/MLIRContext.h:275:7
#24 0x7f4cc8ba89bb in mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) /home/wangrui/llvm-project/mlir/lib/Pass/Pass.cpp:521:21
#25 0x7f4cc8baa61d in mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) /home/wangrui/llvm-project/mlir/lib/Pass/Pass.cpp:593:16
#26 0x7f4cc8bb1b25 in runPasses /home/wangrui/llvm-project/mlir/lib/Pass/Pass.cpp:904:10
#27 0x7f4cc8bb1b25 in mlir::PassManager::run(mlir::Operation*) /home/wangrui/llvm-project/mlir/lib/Pass/Pass.cpp:884:60
#28 0x7f4cdbc5735d in performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) /home/wangrui/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:413:17
#29 0x7f4cdbc566e0 in processBuffer /home/wangrui/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:478:12
#30 0x7f4cdbc566e0 in operator() /home/wangrui/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:561:12
#31 0x7f4cdbc566e0 in llvm::LogicalResult llvm::function_ref<llvm::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::callback_fn<mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&)::$_0>(long, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) /home/wangrui/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:12
#32 0x7f4cc80378dc in operator() /home/wangrui/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:12
#33 0x7f4cc80378dc in mlir::splitAndProcessBuffer(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<llvm::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>, llvm::raw_ostream&, llvm::StringRef, llvm::StringRef) /home/wangrui/llvm-project/mlir/lib/Support/ToolUtilities.cpp:27:12
#34 0x7f4cdbc3e83c in mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) /home/wangrui/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:564:10
#35 0x7f4cdbc3f1b6 in mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) /home/wangrui/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:605:14
#36 0x7f4cdbc3ff38 in mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) /home/wangrui/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:621:10
#37 0x56008def7429 in main /home/wangrui/llvm-project/mlir/tools/mlir-opt/mlir-opt.cpp:317:33
#38 0x7f4cc73fe082 in __libc_start_main /build/glibc-LcI20x/glibc-2.31/csu/../csu/libc-start.c:308:16
#39 0x56008de1cecd in _start (/home/wangrui/llvm-project/build/bin/mlir-opt+0x80ecd) (BuildId: 836d2866b57d58ac)
AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV /home/wangrui/llvm-project/mlir/include/mlir/IR/Attributes.h:77:12 in getDialect
==2471009==ABORTING
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsW1tv2ziw_jXKCxGDInV9yINzcTeAswkctwd7XgJKomyeyqKWpJKmv_6AFGXJtpw6zmUv2KBoYomXbz4OZ4bDMZGSLUpKzxz_3PEvT0itllycPYnTJ5qcJDx7PlswBR6pkIyXDh6DLHSzDAc4jt088zGmMUEpyj2cewGGSZSTwMtyFzrw0oFj-SwVXel-zWcngPaf-Ti9PwffurFTLuip647cEayTulQ1Oi05EenSwWNJ01ow9Tz83ox2yaQSLKkVF-D6Ug_41bSyb6lMBauUnQsA-xYgOILeKADT-X3TckYLSiTVrcy75ukFz2hJVtR2BgDkPCXFoFx_1iz9DhQHglaCZ3VqejkBXBVMnPJKgdOUl49UqNMVUctTxU8FT7MCKCrVSDdaD5XUCz0KFwo8MbUE4ywTVMp7UjLFflLh4PEghLvp1fj-Csg6WTEFCOiNozhYKlVJ3RVNHDRZMLWsk1HKVw6aFMVj--u0Evz_aKocNGFS1lQ6aAJImQFWpkWdUaCWFKSCyCVISPpdCZLSUTP9vSLpd5DVq2oNEI4a2u4EXwiyAkQs6hUtlcYBDidma3jDCq8VkM-rhBdAL5EEDopoKWtBwTOvwZI8UmAEahpp3gAr9TsB7sbz3wAXQFJl5KHlIxO81MjAIxF61abTbzcP93_cnN9Or__3avaguzgB1ERWnJWGUaYcFHeygk4i-ANCCP0AwiijgRuHPnh4YKWiIqWV4uJhzR1w0Dlw3bAZwwUFS_TU93Wl120k-Ujro96Q_Z9m_DD30jTMXQqRa2TVWLDegM0fd4KVytA211M5KOoaCfL0wKUSlKwcFDjoArBSi2PwoChu8KCj8ASulwzhmdXlPVuUpPiNlFlBhXRQ1E6JsdtMicELc27Ok6M0ajp5plOlloKSTHeAvaZZ5uWJh-wm8U3Tm-n17Hq2Z-gIZUFKPbOcDfKxaqwMbT4uqLrgpaI_lJUg5aVUDXV2mqCd5cvd1zn__du3m7kgpcy5WMnhabMEQuwSy3x4VH-EoWUken1_kud55tGmf9z2X3f7qlghdxSgR1scRImP0h5tF2Zfa1N_R5Siomwer4hKl-Mym9EnwZTWy67LbUUFMQYbjbVWdm_sELaTMFrbZz6MA7uJYIvdtt2zzLGPQw9avl330E6IkhDu4hpXVcFSorh4byEvenspr8tUd3wQNHfwRcJ5ATaGtgM0vDQcOfjqxUEeOcvePEj3YsoXLCXFjMq6UIeNa00ACqzfddFR2kdxguwA-Dj1jZIEDCxTo8eK2ufWXW2ItqPqW0u4b_Gt6GGrht6vgW9izv0wPxzz-rXc8AZjIcjzzCzkHqDdMrlB7Fuw_jEskyiI-_uHVFXxfEeEYqToWDxwv3Qd5kQsqOqpVr_ZRPCftF0Su0D3e1t3g17wMmeLVnIPt-q1tu43RC3nfHZ7cTkd8o196xqTKMiJHWBt3u-I3OVr0LFGCYnipG9eM6oIK1qK5vy20qONM1KtrZCoy60dKOUOifvpHZekeJZM3pCSLLQuXwBtcvTvujTHiGwzbmhDUTc6SkASuPTVAt6xihas3Daxuuka94t78CiJN622lNelVMIEt1wMmPV-A2IPJPqFxX5HBC3VdZnzVifXtsGFsHVs8TGkJm6Cgi0srXSDOjJkoFAQWN1Ha-96W6kpS_bC6EcmqR9i30YWyD1qgCCgNkJEa-9weFQaQRxGWdajQVYFU-MyuxM8pVKe13mulzuSKmsa1CX7s6YPlRIb7u2Grrh4bptfgHX7jOakLtRDRguqA8V9ffDVG3zpX4Fu-6iwGwvsHia6d_dKsHKhfcu-x1bDYt8eghA-RkEwjXB_fW8KJm4rdUNY-YuDz-dx2qG7ZKSgqZrRBZNKPO8YqB76xgf1YybDV4ysF0befro2GcrdJNzLkDVq6ZI05mv82mX8lXjWmiHYLrN_1DLnOY7fRYhD0CK4ZjnoTvcv_mwc_fPQQwSsCCubMM-zlhwZ_59qkYMDRmsOvDinMMLg4UF3fZCKCPWwHhp52A4d7UlDuClNKWj6NeGMBTOQXrq8Gl9O_7i__vL7eGpTTfjyH_-vJwjyQhfCuPlwNZvdzhw8Hkq0gfurL98AL0Fdfi_5UwlI08Zy2_y4kbbNVQrgj40EQlKZJzkNwyQI8wQCufNkDrVF3QdtvqRAmpwJYBKkpJY0A8kzIGB2Nb4EK2NmAEm1CxvtHeU3vS_weI3dZLAkUNxkv35SwUFFFm0eT-udgzDcloaVYEGV3SzAQZMlX1EHTZ5IuRA1200gmh2GJjZz2D24njlosk6pyNHSweMwdPDYRRsI3AEEr8_JHAqzYMkAtrSqHDzGGp2PN9Ahi87mbSLLjwXxZn7WUZihB7mBg8detIEADyC4rc5rVmRUvBmAHadZHoSR-X9jfm9g_n4YOeeTukwvSFFM-RPVpnfjfLkiatkuJSlvK-Mn7YmQltmt-EKVHuC22nDge4z4_LmiLx-0j1OI_pF0sk6mOWgyGjUPLvhqZV4OCWzIc1FgltCS5yDs95hDGIbvxdxLSaedThtkbb9tD1l7DsYvJ-M-neEQa4L9juCgJbhJamabBF-0yZA5n06_3ayTk2-lePtY-YsEyzdS1HQnNHxvknd29wbfWv41v3bCRmkDv2-RHYTD1hw3id5kiNNPyfW-Tr26vLeDJiY_5aCJ9WIdaGvo3cDXe7W9y9RiR2uxTb7YWDlukOvtYS8wXgdpTcZkJ3lscSBX21vcMxnxAAyTuf1lXtee2Jo0ICmKhKTfH_JNdf8vif32JHbz2kHeAzQPooKXiwPVw97AdnvVPhhfzh00uZ9PJxYpKa5-KEEar-xtb1EXdlqCKAny45T1ODRBtI3GHUBDf9C0VnScNkmwng6Om0Rwo4jNa32WM5t-l37NPL56c5Sjz582ZGsCnVBzGvaEQANC_Ldx3vn2573tpxv7_XhVryPuuS-KE1evY0EXpGA_6f8wtewU6yP9Sxx4W7Gg6w0Ac1BESl4-r3gtm_qGytzgx1sqNLUCWIpbeV59ezLscD-Wiqhxtf295vdDjCgh23Hx59zHfaDQCEfmIBX0hA56Qud-SF8l9Jsv9D5SWC_yTEzVE7YXRJIoiIw1Hb4B_FhsGEXGQvTdVTSA7Z93T_mhpMXuVnTsxuuTlrngjA-wXlaTe3en5lqyvYy6LXs8HhVfb5xwetNsfmrtkGfMkNfJhLrUl7lzTd4h5G8uXs0vO6-Pwr75s0kld2DqzaBd73OySjICyOsPQ0MwkAl4jDP-xFAVoXch-Z1CVYQH0OwPVTV_V-Yt471YdbPBp4WoyBsA_7ctE3i7wrr9CMruG79HAQnc7BgK_tWFBG-mPcZ9X25pDzraEzdBvqZdM0mkNCW5b501hl7f4dhZw4FZ31Tg8FaYkQl0gi2Y0TrLa-ofjE5WVGhv29gMeejNtFwSQbOdm-l7XouU3iyENjPDMULPeOwo068umV8ZSXBugof29lFbrm4CS5Tn4q2YH8U9loKAQsNSvyjjg5CE2z5gfePVR_JGt38QFD9wt6G4A1D2HbL_0XUkL2Yl_8U1HHuShZ8pyQsr84lxIO7iQFOjlf6lcSDGA2j-Kxr7exaNvc4U22JBa5T1UZcptr7hR-G2JnS326a2bEsT_sWm6aOcnLeVOujdgpvatOAlhj-lPO0DxA6gv5Vd6O6mm2q26L3E_mvkQ9sZIXNP3Kt_MxkhW6d2KAC1O3X7Z5uKcvWGxZsFKd1dbVMsh_TUQ_Vyk6RmReagyUK_O52m1wj-WH9EI-w6aJLKui1CaP40L804o1RPDqPdE5G5p-1V3Jmgf110Fx1AQQst0QrQY-Ac_oggTbNmKSNTnnOtTQWIcJChKAgSP8z8iKRdQdlgfR9ISQlKrnSU_cgyCkiWscY1AlbmvP0659ebm_Hsjxfr4j6mCGyz0mxvVdv4_HY2v_79y-B3YU-yM5zFOCYn9MwNURy4Lg7gyfIsjEieQC-DWZh7GPnQCzAMvIzmGU78CJ6wMwSR50KEXB8HEI7yGKXYDdOAeImbZ5njQboirBhpSUdcLE7MN2XPXBdj7J0UJKGFNN-uRqgRFjn-5Yk4M8wk9UI6HiyYVLIbQTFVmG9kmw7-5b7vxJpv3lJ5Uovi7Pgv9Fqkj2fo_wMAAP__VN46CA">