<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/122076>122076</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Mlir] --int-range-optimizations crashes in StorageUniquerSupport.h:180
</td>
</tr>
<tr>
<th>Labels</th>
<td>
mlir
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Emilyaxe
</td>
</tr>
</table>
<pre>
git version: e4372c4454c9
system: `Ubuntu 18.04.6 LTS`
reproduce with: `mlir-opt a.mlir --int-range-optimizations`
a.mlir:
```
module {
llvm.mlir.global private constant @assert_msg_23(dense<"0x4552524F523A2052756E74696D65206F7020766572696669636174696F6E206661696C65640A226C696E616C672E67656E657269632228253234372C202536342C202538342C202533323529203C7B696E646578696E675F6D617073203D205B616666696E655F6D61703C2864302C20643129202D3E202864302C206431293E2C20616666696E655F6D61703C2864302C20643129202D3E202864302C206431293E2C20616666696E655F6D61703C2864302C20643129202D3E202864302C206431293E2C20616666696E655F6D61703C2864302C20643129202D3E202864302C206431293E5D2C206974657261746F725F7479706573203D205B236C696E616C672E6974657261746F725F747970653C706172616C6C656C3E2C20236C696E616C672E6974657261746F725F747970653C706172616C6C656C3E5D2C206F706572616E645365676D656E7453697A6573203D2061727261793C6933323A20332C20313E7D3E20287B2E2E2E7D29203A20286D656D7265663C32347832397869313E2C206D656D7265663C3234783239786933323E2C206D656D7265663C3234783239786933323E2C206D656D7265663C3234783239786933323E29202D3E2028290A5E20756E6578706563746564206E6567617469766520726573756C74206F6E2064696D656E73696F6E202330206F6620696E7075742F6F7574707574206F706572616E642023310A4C6F636174696F6E3A206C6F6328222F646174612F737A792F776F726B73706163652F6D6C69722D696E636F6E73697374656E742F73616D706C655F746D702F746F73612E2E363137646638616565663139373631312E6D6C69722F746F73612E2E363137646638616565663139373631312E6D6C69722E2E363335373532326566633662623465632E6D6C6972223A3434333A352900"> : tensor<674xi8>) {addr_space = 0 : i32} : !llvm.array<674 x i8>
llvm.func @abort()
llvm.func @puts(!llvm.ptr)
llvm.mlir.global private constant @assert_msg(dense<"0x4552524F523A2052756E74696D65206F7020766572696669636174696F6E206661696C65640A226C696E616C672E67656E6572696322282539342C202531383329203C7B696E646578696E675F6D617073203D205B616666696E655F6D61703C2864302C20643129202D3E202864302C206431293E2C20616666696E655F6D61703C2864302C20643129202D3E202864302C206431293E5D2C206974657261746F725F7479706573203D205B236C696E616C672E6974657261746F725F747970653C706172616C6C656C3E2C20236C696E616C672E6974657261746F725F747970653C706172616C6C656C3E5D2C206F706572616E645365676D656E7453697A6573203D2061727261793C6933323A20312C20313E7D3E20287B2E2E2E7D29203A20286D656D7265663C3234783239786933323E2C206D656D7265663C3234783239786933323E29202D3E2028290A5E20756E6578706563746564206E6567617469766520726573756C74206F6E2064696D656E73696F6E202330206F6620696E7075742F6F7574707574206F706572616E642023300A4C6F636174696F6E3A206C6F6328222F646174612F737A792F776F726B73706163652F6D6C69722D696E636F6E73697374656E742F73616D706C655F746D702F746F73612E2E363137646638616565663139373631312E6D6C69722F746F73612E2E363137646638616565663139373631312E6D6C69722E2E363335373532326566633662623465632E6D6C6972223A3337333A352900"> : tensor<558xi8>) {addr_space = 0 : i32} : !llvm.array<558 x i8>
llvm.func @malloc(i64) -> !llvm.ptr
func.func @func2(%arg0: memref<1x24x29xi32, strided<[?, ?, ?], offset: ?>>, %arg1: memref<1x24x29xi32, strided<[?, ?, ?], offset: ?>>, %arg2: memref<1x24x29xi32, strided<[?, ?, ?], offset: ?>>) -> memref<1x24x29xi32> {
%c29 = arith.constant 29 : index
%c1 = arith.constant 1 : index
%c24 = arith.constant 24 : index
%c0 = arith.constant 0 : index
%0 = llvm.mlir.constant(true) : i1
%1 = llvm.mlir.constant(64 : index) : i64
%6 = llvm.mlir.undef : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%14 = llvm.mlir.constant(0 : index) : i64
%20 = llvm.mlir.constant(24 : index) : i64
%21 = llvm.mlir.constant(29 : index) : i64
%22 = llvm.mlir.constant(1 : index) : i64
%23 = llvm.mlir.constant(696 : index) : i64
%24 = llvm.mlir.zero : !llvm.ptr
%96 = llvm.getelementptr %24[696] : (!llvm.ptr) -> !llvm.ptr, i32
%97 = llvm.ptrtoint %96 : !llvm.ptr to i64
%98 = llvm.add %97, %1 : i64
%99 = llvm.call @malloc(%98) : (i64) -> !llvm.ptr
%100 = llvm.ptrtoint %99 : !llvm.ptr to i64
%101 = llvm.sub %1, %22 : i64
%102 = llvm.add %100, %101 : i64
%103 = llvm.urem %102, %1 : i64
%104 = llvm.sub %102, %103 : i64
%105 = llvm.inttoptr %104 : i64 to !llvm.ptr
%106 = llvm.insertvalue %99, %6[0] : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%107 = llvm.insertvalue %105, %106[1] : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%108 = llvm.insertvalue %14, %107[2] : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%109 = llvm.insertvalue %22, %108[3, 0] : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%110 = llvm.insertvalue %20, %109[3, 1] : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%111 = llvm.insertvalue %21, %110[3, 2] : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%112 = llvm.insertvalue %23, %111[4, 0] : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%113 = llvm.insertvalue %21, %112[4, 1] : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%114 = llvm.insertvalue %22, %113[4, 2] : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%119 = builtin.unrealized_conversion_cast %114 : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)> to memref<1x24x29xi32>
%collapse_shape = memref.collapse_shape %119 [[0, 1], [2]] : memref<1x24x29xi32> into memref<24x29xi32>
%120 = builtin.unrealized_conversion_cast %collapse_shape : memref<24x29xi32> to !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
llvm.cond_br %0, ^bb72, ^bb81
^bb72: // pred: ^bb71
%collapse_shape_3 = memref.collapse_shape %119 [[0, 1], [2]] : memref<1x24x29xi32> into memref<24x29xi32>
%211 = builtin.unrealized_conversion_cast %collapse_shape_3 : memref<24x29xi32> to !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
llvm.cond_br %0, ^bb80, ^bb105
^bb80: // pred: ^bb79
%213 = scf.while (%arg3 = %c0) : (index) -> index {
%374 = arith.cmpi slt, %arg3, %c24 : index
scf.condition(%374) %arg3 : index
} do {
^bb0(%arg3: index):
%374 = arith.addi %arg3, %c1 : index
%375 = builtin.unrealized_conversion_cast %arg3 : index to i64
%376 = scf.while (%arg4 = %c0) : (index) -> index {
%true = arith.constant true
scf.condition(%true) %arg4 : index
} do {
^bb0(%arg4: index):
scf.yield %arg4 : index
}
%377 = scf.while (%arg4 = %c0) : (index) -> index {
%378 = arith.cmpi slt, %arg4, %c29 : index
scf.condition(%378) %arg4 : index
} do {
^bb0(%arg4: index):
%378 = arith.addi %arg4, %c1 : index
%379 = builtin.unrealized_conversion_cast %arg4 : index to i64
%380 = llvm.mul %375, %21 : i64
%381 = llvm.add %380, %379 : i64
%382 = llvm.getelementptr %105[%381] : (!llvm.ptr, i64) -> !llvm.ptr, f32
%383 = llvm.load %382 : !llvm.ptr -> f32
%384 = llvm.intr.exp(%383) : (f32) -> f32
%385 = llvm.extractvalue %211[1] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
%386 = llvm.mul %375, %21 : i64
%387 = llvm.add %386, %379 : i64
%388 = llvm.getelementptr %385[%387] : (!llvm.ptr, i64) -> !llvm.ptr, f32
llvm.store %384, %388 : f32, !llvm.ptr
scf.yield %378 : index
}
scf.yield %374 : index
}
return %119 : memref<1x24x29xi32>
^bb81: // pred: ^bb0
%214 = llvm.mlir.addressof @assert_msg : !llvm.ptr
%215 = llvm.getelementptr %214[0] : (!llvm.ptr) -> !llvm.ptr, !llvm.array<558 x i8>
llvm.call @puts(%215) : (!llvm.ptr) -> ()
llvm.call @abort() : () -> ()
llvm.unreachable
^bb105: // pred: ^bb24
%262 = llvm.mlir.addressof @assert_msg_23 : !llvm.ptr
%263 = llvm.getelementptr %262[0] : (!llvm.ptr) -> !llvm.ptr, !llvm.array<674 x i8>
llvm.call @puts(%263) : (!llvm.ptr) -> ()
llvm.call @abort() : () -> ()
llvm.unreachable
}
}
```
stack trace:
```
mlir-opt: /data/szy/MLIR/llvm-release/llvm-project/mlir/include/mlir/IR/StorageUniquerSupport.h:180: static ConcreteT mlir::detail::StorageUserBase<mlir::IntegerAttr, mlir::Attribute, mlir::detail::IntegerAttrStorage, mlir::detail::AttributeUniquer, mlir::TypedAttr::Trait>::get(MLIRContext *, Args &&...) [ConcreteT = mlir::IntegerAttr, BaseT = mlir::Attribute, StorageT = mlir::detail::IntegerAttrStorage, UniquerT = mlir::detail::AttributeUniquer, Traits = <mlir::TypedAttr::Trait>, Args = <mlir::Type &, const llvm::APInt &>]: Assertion `succeeded( ConcreteT::verifyInvariants(getDefaultDiagnosticEmitFn(ctx), args...))' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: /data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt a.mlir --int-range-optimizations
#0 0x00005617973d5ce8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x11f2ce8)
#1 0x00005617973d37fe llvm::sys::RunSignalHandlers() (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x11f07fe)
#2 0x00005617973d667d SignalHandler(int) Signals.cpp:0:0
#3 0x00007f078bb4c420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
#4 0x00007f078b18900b raise /build/glibc-LcI20x/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
#5 0x00007f078b168859 abort /build/glibc-LcI20x/glibc-2.31/stdlib/abort.c:81:7
#6 0x00007f078b168729 get_sysdep_segment_value /build/glibc-LcI20x/glibc-2.31/intl/loadmsgcat.c:509:8
#7 0x00007f078b168729 _nl_load_domain /build/glibc-LcI20x/glibc-2.31/intl/loadmsgcat.c:970:34
#8 0x00007f078b179fd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
#9 0x000056179a414001 (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x4231001)
#10 0x000056179a413e7f mlir::IntegerAttr::get(mlir::Type, llvm::APInt const&) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x4230e7f)
#11 0x0000561797700de7 maybeReplaceWithConstant(mlir::DataFlowSolver&, mlir::PatternRewriter&, mlir::Value) IntRangeOptimizations.cpp:0:0
#12 0x00005617976ff850 (anonymous namespace)::MaterializeKnownConstantValues::rewrite(mlir::Operation*, mlir::PatternRewriter&) const IntRangeOptimizations.cpp:0:0
#13 0x0000561797700bc7 mlir::RewritePattern::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&) const (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x151dbc7)
#14 0x000056179d44fd31 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) PatternApplicator.cpp:0:0
#15 0x000056179d44ca51 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&)>) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x7269a51)
#16 0x000056179a3a8feb (anonymous namespace)::GreedyPatternRewriteDriver::processWorklist() GreedyPatternRewriteDriver.cpp:0:0
#17 0x000056179a3a59af mlir::applyPatternsGreedily(mlir::Region&, mlir::FrozenRewritePatternSet const&, mlir::GreedyRewriteConfig, bool*) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x41c29af)
#18 0x0000561797705058 (anonymous namespace)::IntRangeOptimizationsPass::runOnOperation() IntRangeOptimizations.cpp:0:0
#19 0x000056179a330496 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x414d496)
#20 0x000056179a330dc0 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x414ddc0)
#21 0x000056179a3336c2 mlir::PassManager::run(mlir::Operation*) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x41506c2)
#22 0x000056179a32baea performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) MlirOptMain.cpp:0:0
#23 0x000056179a32b73d 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&) MlirOptMain.cpp:0:0
#24 0x000056179a3d2785 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) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x41ef785)
#25 0x000056179a325755 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x4142755)
#26 0x000056179a3259ff mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x41429ff)
#27 0x000056179a325d2e mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x4142d2e)
#28 0x00005617973b4a67 main (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x11d1a67)
#29 0x00007f078b16a083 __libc_start_main /build/glibc-LcI20x/glibc-2.31/csu/../csu/libc-start.c:342:3
#30 0x00005617973b45de _start (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x11d15de)
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsXEtz27iW_jX0hmUVCBAAufCC1mMmNUklFefOXaogEpQxTZEcAHTs_PopAKT4kCg7D6Xn9u3qdEwBOAffeR-AiplSYl9yfufhew-vblijHyt5tz6I4oU985tdlb3c7YX2n7hUoio9lPg8RBSmYYjDNPZA4oFEvSjND2bOI-Afu6bUjR9ECxAuiP_-y4NHgFsneS2rrEm5_1Xox3b9oRDytqq1zxbm0b-9FaW-lazcczMsDuIb06Iq1ZGNW2jJQWJG7R_z4VBlTcF9j957IPGL4ulgly72RbVjhV9L8cQ099OqVJqV2vdCwJTiUm8Par-FyINRxkvFPbT0IATPIcYQw3CDIUogwJBisqYhicmKYAjIhgIIKCGYQhITQmKCSGDnN2QNASEkIDFZEkxCkEBIliQmaxKQJaFwTSjBZN3SIghhBDGCyCh3CQHEiKCwfYqOTwhBhGEMAVrSe8stJJhG9oniDVmRgAKKIEArCPA9CQixuNYEd7NoCSMSImA4khAFhhtcoTUE03G0ts9_ER54ZT_FNLQ6N3baUIg3NKQxBQT3WoNoYqlZGrSkgARmhiytnZcO689xaJFuLCozsyYhRgQTavzOeCBGJKZJj9lwsNxjtCSx9ZIEAoQMHxSgNW11Qu_h2vxHV9aHEqsnw3NFIcGEoKXxQBohiGLjVYbWYrm0xuz2a1cNrAhjkOA1BNTFSmR0QpDRJgkhMGOEupgzcQiB4UsRxWRJzbyLwzZiyZqiLjYhQsDOE-MTZE0BxTSEG7IxP9tPExtYqgAk4ZJshpFu9EjsGIwghBsS2rkAbiiiCY3hhlJjdXJPkbE2QQRD48FLElMIV9ZTkOFk8FEn3dqgoYgEZEUNd2x8xjzDjfUhRAJjSURQgCgJCUERCQi2Wg1QjKidCeD6uM-P0rnVCGFEkclQ1nIEIUIggchgRYPVECUoRCFCKDGZCgAPQg-tfZOuNS9VJT20JDR8FpGH1h6MTbZmWSa3qmYp9z208oFdLRD06Mo-ejCwyZxJyV4cvf_sOw4g8V2mz5sytRl9V0ntwciD8elk3Whl5xzDWst22XcWiz-9UsTHmhCgCKF_rZrwb5iLg5_OxX-VDAr-zqCvZlCE6OUMinH0UxkU42g-gx5YUVSpByNBQsP_1m4_SJmGwiw-Upif0OZVzOQemB0P_CB57qFl8AzDZxg_GzRw6SstRcYzkzjxvYc2ZmzwA6_MU5XnimsLHG0MRiPo0nfsg-uyh9dh36rxLGOjXndm8X2DIjVGRSufSaEfF8cKZEcTX5QZfx4sDs6tDc4uheFZvuHZxeDcWnBuqVvZl9ButQcjLRvudcCDniSYJyFDOB0pCXtaMqFtyoznIzdXWjaptsU5sjV-6bc_rEsv_S4OkIkCErYOcG407kLEwQ7ncYNXYMMLaoKvyQwvKGzkF2eJ4Txx8BotumCpmLxGPdXXNy6rkam6fGKXxwPT7rnmBT_wUtdaOl4eNg2Oh7ucNunjThOVMTiCA_60519rqSthGrt23xEmX1djSeKoJ2VZ5ri1WSMYCm4m4n5tyopilFQtr05ZryRZ53MAzKCOX0UdgIHfqGZnx1rU1iuS6Xp4ImZgStCy53ZCMvCQRvJDy-ecbjqK8BRUT2D5nZDgnkSUWletUzhedrURfqJAu4AMKU0D_8SKhjsFtnsSD9-D3q-ukkT8oTR0FlMA8FERBlbwO2FF87DCIyrq4Xv4O1HFs6hg7zSRh--R-fQ77RiAeWh90MQdtN9pyyCYh9ZlgCAAHbTfadAAzkNDR2iBh-_D325Q9BatwQ7abzVo-IYwCFAH7bca1EXorhGFFuWiKSVnhfjGs21ale2rg23KlO4FuR4uXc012YPetioKViu-VY-sdkcmR7OYzrTS4XtbIVqTW227JNhpea6vF-UQz3k0QdsZvk1_J9iT8_yH5fDNOoZndQzP9MOuuanKbLuzhdilO7ze7Sg8PkZtx9-No8QIvPHgxq-lOUYl7VTQVuuxcFv0Z5sGtmn0R0yzRf8PjRP1j6bTMIJ247PGiYf6cCZRab74-igK7h9P_W7CHhyH3W13NLh1Ks_48-Csa3kiOjqVHmrhq0L3B_KuJKRnzqm-RWIkFVpUpQODqO2oe1iTAytd-VnVobAigl6K4XnGQ8k8UJZlYorw9NTdEuLv8KIx6HFL37Ijc0YIf8gIlqs5qZ878dsTfL_yjL6PZ_wjhBMdXFJ5OKdyt9mL4EV2mfdYOfQKykE0uuij4dFHT-9oZr00-h6luaE3a-4E88Bdwxl3tTTfU8rHwAeeajhFw-uOpmjjoDt7To-FHeYoODl_oqhrpR26ZLQLvHBjYDIcvnds524N2ix7_vIgP14eHPENGsSiYlkPYnwQt9zOkI-aOC0X_Llu3SFCA6c0lB2mM1wGh2H-rCVLh21q8FOnxrcVGf-of_JDVqZnrEwuWDm6YGUUHa1Mf4GVW3VVkrcW62BZEIldbUemVzUnCcsF4KV8NVl-5h72uFhy3ciyb7dn-5pBTQ9mazoYlvTpHR3LMsmVqvLxO8_5azsY4Ev3dkE4vl55y7Xday8s_PHt2vG9rsEyiKPzOx3fDU-4DF4d9wxOqdxNl8mM6SPbFbzXuEk4cyqHw2tRMr2RndH5FqJzarcs0CWdE_jzOp--Zp_XOUHX1vmc1m18tH8PvwqmNEv_8E1q5K4wnnxXrP3emdtzkzHNPLhR3148uPnw_t1nD27MjreSF5wp3n2sZfU_PNUe3NgvocGNKNOiyXg_YEkfdCXZnv-jFP_bcPnQ1HUl9eLRQ0ngOm2lmRapv6zKVHLNv_jtd9o8lGRcM1G4546P4vKe2a8b9OvelZrvuUy0s14_YUbErtF8PDzkO6Btt5hfe2TXSjNe-eWl5pnF4D5KJrR952U-7bkxrVHnsio1fzZdQ2LoE7lXvgeJB8lisbC2x_e9Muypb05Qo4jpkpHIrUTTNa_L3wp4ifCcMqzMyjWXQwPNqeYo_zkCp5Wl-96Jdfp240_v7K0_MRzwyvhQYtOEqErfI0A1acp5xjMPRr1bOdonLkX-8q58YlKw0kbtnusVz1lT6JVg-7JSWqTrg9Ab052m2jaUtv7vlTOQ_UP9nImCZwsPJJ_er5OHta-a3UFon_m7Zu9LbvzcNIKPWtfK7G4z4V7ox2a3SKtDG0en4SSUargyWZOVmd9Gla8fuZ9Kph79HUv_sOFs9n6w0Z01h9oFN1i4evpJVnvJDgZ2Y7Kh-uHoNg1wZn6Ksg3tt31J1SZnBHzwDAAAmAQ0pijDKY8GtlQvyj18kqLUVpgvNlPBqF8k2ddtpbTk7NC6hCi1OzFEv1AkD96D5yDIYcq7ZOtBFEwEQDTn5wT43JQPYl-y4j9ZmRVcqi6TXwUjoDnvMcIJRkJo5o_Q2NOd1ZkbVou0Nh4D7P-OC2q50BzQaLcL0xACf7uV3LaAW6lbWQqx8-DmOSJbEt4Womyeb_dl4yZq_Sg5yxaqWgCHNQwh6JGGoz2CKAZg50smlIn2o8z7QuzS2_fpOwiejx_hAgVGhRa_BzcmFjfqRWW8NsHSlOLZDTxZKGVjPlrWi9RDCTYtYHu5hvAYBokiHPu2_r4Zhs6cHiyV3cE2mbTdgUx3oDD291xvHeKt4nsTltvutPKmTUWpjeTmtHVQ-5S5fTEwJ96o3Zie23hbFltDtc2qAxPlz-0XU-M1qD2SoGi8IY3zjLzBU1LjI8T6CEJ5RnofiYfezMIgBCC4RhiFEAUABG5jE-lgsjHiNJ8pvoOaPi5aJjtNS5UtYDZzXSUdhBABTvNejnHKogBknPoH9rLjn3ldsJT_U-jHZf_lhV6CFdNsU1RfH6riySQNMu5wPjGtuSw_869S6DPz_22c2Uj5rtSfTUn4OKwIk5RjkI4TF8nzCAOjIlZW5cuhapRfsgO33-Zq73VQ8oFpLoW9ivmvsvpadoLYzdtkLB3CkWwfay6Zu3RKXhcrbtuOt0qCpjrfpXSwRcu73cmNHZhOH5My-_zLwF6j1uAg26W0d65wKGgWhnmGAv-pEtnA7fOmTA34rTuV29n2BNP1w-bQYxqZbV6OGr9WvKSuC5EyXclfravlPM5dVRX-iHXLYBjBbdv6qrA_xaSfeF_tRcqKz1w1hX4b3zZOPBhugR2IiqrcGy85Ue4ZR8YT-6YMB6cq_ds-P2Gfa8QphSRmeFDMyKiYIRblfPdaav0PyXn2MrbKSgpTCux8LauUK_XPSv5RCNXdVcxTnXEvOoGFYzassayui46VsoxF8TLS6me-t640KT0bWX3j5TjNPvBh7R2udpDb1cuqzMXeLDAOZp30OnU6SGHMBnU6mtQMDHD0monO1qNPTHWFryk_loOAi76nGo8bL4RAGJOZw__H-kv1sTb7Jhmrj2lANuUkBJQ6ifr5fJCUrHhRQn1gJdu7GwVnkqXflPbfZ2ZXPPqFQZiFMTnaB4KpPrIUfLc-PomaF6KcpkSz9Cgm-eUKGmdZpd6VSkt7EVDJM2l4uMDt7CZa7J-Y5KV-V-ZVF0_Xi5Ewy1LQ2yCY2ACRFE6gd8o464FjXV4JMwYkhT1mOMYMd4wzv-Yyr-QhSd3tyOX7DaWz9nrhkUmebWtz5BhUnYeqkSn_sJceWs-kuMFV44nBPxRCfqz1ByZKl_xGR5TB7GmSgGgqHEXD1m9cD3-kgB5lb-y94onsH_ihki_3TZ67ADiuz9wt3jbjBdd8nub4rxzmLfB6nzpQ0ltteXV5Buc4wQqealMrlZYvp85xyQFm2sffKckFy7zinuHYPTNIIzwQXNWF0EmZfXKdTIf1T3G6f8GQuLhiOPegpSj3n3k-O3ylVMxzGuE-FeNJtsIU4_Nx8FeL4itVZ0jxQL1kqt44z2fV2zYm6SNzLUjyvS7zmm6uJnOc9107pFOZM8h_icx_knAZ5L1w4yMJ2oWMUL-9Mr7Ce4wsYKS_W4Lx5O6agQj5220hdulWaSb19ntur1PVdK8J3KOdtHzsPTYKofnb7T19UbULccZ9t-u1ZMdZp_nhG_mb7A5lMYrZDb8LKCIIUhqSm8e7OI5ikIYwDtIoy9AuzGMU4yxihGRZnsY34g4CiEEAIhAHOCSLHcgZ2vFdHpIsZzvihYAfmCgW9hsEldzf2HeNdwGEgJKbgu14oexvwIHQvcOHHl7dyDsr167ZKy8E5uSveg5a6ML-1hzj-B5ezb8RdK8vufJF6V_8VsBNI4u7H39t2krzdAf_LwAA__9h4DBP">