<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/58649>58649</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [MLIR] Crash when using -lower-affine
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          BealZephyr
      </td>
    </tr>
</table>

<pre>
    Hello. I think I just encountered a bug. When I use -lower-affine, it crashes with following backtraceļ¼š
```
mlir-opt: /data/llvm/mlir/lib/Dialect/Affine/IR/AffineOps.cpp:1789: auto foldLoopBounds(mlir::AffineForOp)::(anonymous class)::operator()(bool) const: Assertion `boundMap.getNumResults() >= 1 && "bound maps should have at least one result"' failed.
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 crash_lower_affine.mlir -lower-affine
 #0 0x000000000047f08a llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /data/llvm/llvm/lib/Support/Unix/Signals.inc:569:11
 #1 0x000000000047f23b PrintStackTraceSignalHandler(void*) /data/llvm/llvm/lib/Support/Unix/Signals.inc:636:1
 #2 0x000000000047d8b6 llvm::sys::RunSignalHandlers() /data/llvm/llvm/lib/Support/Signals.cpp:103:5
 #3 0x000000000047f965 SignalHandler(int) /data/llvm/llvm/lib/Support/Unix/Signals.inc:407:1
 #4 0x00007fb6e0e2a980 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
 #5 0x00007fb6dfd1ae87 raise /build/glibc-CVJwZb/glibc-2.27/signal/../sysdeps/unix/sysv/linux/raise.c:51:0
 #6 0x00007fb6dfd1c7f1 abort /build/glibc-CVJwZb/glibc-2.27/stdlib/abort.c:81:0
 #7 0x00007fb6dfd0c3fa __assert_fail_base /build/glibc-CVJwZb/glibc-2.27/assert/assert.c:89:0
 #8 0x00007fb6dfd0c472 (/lib/x86_64-linux-gnu/libc.so.6+0x30472)
 #9 0x00000000005a4a3e foldLoopBounds(mlir::AffineForOp)::$_24::operator()(bool) const /data/llvm/mlir/lib/Dialect/Affine/IR/AffineOps.cpp:1790:31
#10 0x0000000000585747 foldLoopBounds(mlir::AffineForOp) /data/llvm/mlir/lib/Dialect/Affine/IR/AffineOps.cpp:1810:25
#11 0x00000000005855f6 mlir::AffineForOp::fold(llvm::ArrayRef<mlir::Attribute>, llvm::SmallVectorImpl<mlir::OpFoldResult>&) /data/llvm/mlir/lib/Dialect/Affine/IR/AffineOps.cpp:1976:27
#12 0x00000000005f35fa mlir::LogicalResult mlir::Op<mlir::AffineForOp, mlir::OpTrait::OneRegion, mlir::OpTrait::VariadicResults, mlir::OpTrait::ZeroSuccessors, mlir::OpTrait::VariadicOperands, mlir::OpTrait::SingleBlockImplicitTerminator<mlir::AffineYieldOp>::Impl, mlir::OpTrait::OpInvariants, mlir::OpTrait::AutomaticAllocationScope, mlir::OpTrait::HasRecursiveSideEffects, mlir::LoopLikeOpInterface::Trait, mlir::RegionBranchOpInterface::Trait>::foldHook<mlir::AffineForOp>(mlir::Operation*, llvm::ArrayRef<mlir::Attribute>, llvm::SmallVectorImpl<mlir::OpFoldResult>&) /data/llvm/mlir/include/mlir/IR/OpDefinition.h:1825:50
#13 0x00000000005f35a1 std::enable_if<!llvm::is_one_of<mlir::OpTrait::OneResult<mlir::AffineForOp>, mlir::OpTrait::OneRegion<mlir::AffineForOp>, mlir::OpTrait::VariadicResults<mlir::AffineForOp>, mlir::OpTrait::ZeroSuccessors<mlir::AffineForOp>, mlir::OpTrait::VariadicOperands<mlir::AffineForOp>, mlir::OpTrait::SingleBlockImplicitTerminator<mlir::AffineYieldOp>::Impl<mlir::AffineForOp>, mlir::OpTrait::OpInvariants<mlir::AffineForOp>, mlir::OpTrait::AutomaticAllocationScope<mlir::AffineForOp>, mlir::OpTrait::HasRecursiveSideEffects<mlir::AffineForOp>, mlir::LoopLikeOpInterface::Trait<mlir::AffineForOp>, mlir::RegionBranchOpInterface::Trait<mlir::AffineForOp>>::value && detect_has_fold<mlir::AffineForOp>::value, llvm::unique_function<mlir::LogicalResult (mlir::Operation*, llvm::ArrayRef<mlir::Attribute>, llvm::SmallVectorImpl<mlir::OpFoldResult>&) const>>::type mlir::Op<mlir::AffineForOp, mlir::OpTrait::OneRegion, mlir::OpTrait::VariadicResults, mlir::OpTrait::ZeroSuccessors, mlir::OpTrait::VariadicOperands, mlir::OpTrait::SingleBlockImplicitTerminator<mlir::AffineYieldOp>::Impl, mlir::OpTrait::OpInvariants, mlir::OpTrait::AutomaticAllocationScope, mlir::OpTrait::HasRecursiveSideEffects, mlir::LoopLikeOpInterface::Trait, mlir::RegionBranchOpInterface::Trait>::getFoldHookFnImpl<mlir::AffineForOp>()::'lambda'(mlir::Operation*, llvm::ArrayRef<mlir::Attribute>, llvm::SmallVectorImpl<mlir::OpFoldResult>&)::operator()(mlir::Operation*, llvm::ArrayRef<mlir::Attribute>, llvm::SmallVectorImpl<mlir::OpFoldResult>&) const /data/llvm/mlir/include/mlir/IR/OpDefinition.h:1785:14
#14 0x00000000005f3545 mlir::LogicalResult llvm::detail::UniqueFunctionBase<mlir::LogicalResult, mlir::Operation*, llvm::ArrayRef<mlir::Attribute>, llvm::SmallVectorImpl<mlir::OpFoldResult>&>::CallImpl<std::enable_if<!llvm::is_one_of<mlir::OpTrait::OneResult<mlir::AffineForOp>, mlir::OpTrait::OneRegion<mlir::AffineForOp>, mlir::OpTrait::VariadicResults<mlir::AffineForOp>, mlir::OpTrait::ZeroSuccessors<mlir::AffineForOp>, mlir::OpTrait::VariadicOperands<mlir::AffineForOp>, mlir::OpTrait::SingleBlockImplicitTerminator<mlir::AffineYieldOp>::Impl<mlir::AffineForOp>, mlir::OpTrait::OpInvariants<mlir::AffineForOp>, mlir::OpTrait::AutomaticAllocationScope<mlir::AffineForOp>, mlir::OpTrait::HasRecursiveSideEffects<mlir::AffineForOp>, mlir::LoopLikeOpInterface::Trait<mlir::AffineForOp>, mlir::RegionBranchOpInterface::Trait<mlir::AffineForOp>>::value && detect_has_fold<mlir::AffineForOp>::value, llvm::unique_function<mlir::LogicalResult (mlir::Operation*, llvm::ArrayRef<mlir::Attribute>, llvm::SmallVectorImpl<mlir::OpFoldResult>&) const>>::type mlir::Op<mlir::AffineForOp, mlir::OpTrait::OneRegion, mlir::OpTrait::VariadicResults, mlir::OpTrait::ZeroSuccessors, mlir::OpTrait::VariadicOperands, mlir::OpTrait::SingleBlockImplicitTerminator<mlir::AffineYieldOp>::Impl, mlir::OpTrait::OpInvariants, mlir::OpTrait::AutomaticAllocationScope, mlir::OpTrait::HasRecursiveSideEffects, mlir::LoopLikeOpInterface::Trait, mlir::RegionBranchOpInterface::Trait>::getFoldHookFnImpl<mlir::AffineForOp>()::'lambda'(mlir::Operation*, llvm::ArrayRef<mlir::Attribute>, llvm::SmallVectorImpl<mlir::OpFoldResult>&) const>(void*, mlir::Operation*, llvm::ArrayRef<mlir::Attribute>, llvm::SmallVectorImpl<mlir::OpFoldResult>&) /data/llvm/llvm/include/llvm/ADT/FunctionExtras.h:222:12
#15 0x0000000002c59d3f llvm::unique_function<mlir::LogicalResult (mlir::Operation*, llvm::ArrayRef<mlir::Attribute>, llvm::SmallVectorImpl<mlir::OpFoldResult>&) const>::operator()(mlir::Operation*, llvm::ArrayRef<mlir::Attribute>, llvm::SmallVectorImpl<mlir::OpFoldResult>&) const /data/llvm/llvm/include/llvm/ADT/FunctionExtras.h:410:12
#16 0x0000000002c592bc mlir::RegisteredOperationName::foldHook(mlir::Operation*, llvm::ArrayRef<mlir::Attribute>, llvm::SmallVectorImpl<mlir::OpFoldResult>&) const /data/llvm/mlir/include/mlir/IR/OperationSupport.h:334:12
#17 0x0000000002c51a0e mlir::Operation::fold(llvm::ArrayRef<mlir::Attribute>, llvm::SmallVectorImpl<mlir::OpFoldResult>&) /data/llvm/mlir/lib/IR/Operation.cpp:491:31
#18 0x0000000002b3ee59 mlir::OpBuilder::tryFold(mlir::Operation*, llvm::SmallVectorImpl<mlir::Value>&) /data/llvm/mlir/lib/IR/Builders.cpp:420:18
#19 0x0000000002a621bd (anonymous namespace)::OperationLegalizer::legalizeWithFold(mlir::Operation*, mlir::ConversionPatternRewriter&) /data/llvm/mlir/lib/Transforms/Utils/DialectConversion.cpp:1923:23
#20 0x0000000002a61cb2 (anonymous namespace)::OperationLegalizer::legalize(mlir::Operation*, mlir::ConversionPatternRewriter&) /data/llvm/mlir/lib/Transforms/Utils/DialectConversion.cpp:1885:17
#21 0x0000000002a6129f (anonymous namespace)::OperationConverter::convert(mlir::ConversionPatternRewriter&, mlir::Operation*) /data/llvm/mlir/lib/Transforms/Utils/DialectConversion.cpp:2407:26
#22 0x0000000002a5a78b (anonymous namespace)::OperationConverter::convertOperations(llvm::ArrayRef<mlir::Operation*>, llvm::function_ref<void (mlir::Diagnostic&)>) /data/llvm/mlir/lib/Transforms/Utils/DialectConversion.cpp:2456:16
#23 0x0000000002a5a457 mlir::applyPartialConversion(llvm::ArrayRef<mlir::Operation*>, mlir::ConversionTarget&, mlir::FrozenRewritePatternSet const&, llvm::DenseSet<mlir::Operation*, llvm::DenseMapInfo<mlir::Operation*, void>>*) /data/llvm/mlir/lib/Transforms/Utils/DialectConversion.cpp:3270:22
#24 0x0000000002a5a9d2 mlir::applyPartialConversion(mlir::Operation*, mlir::ConversionTarget&, mlir::FrozenRewritePatternSet const&, llvm::DenseSet<mlir::Operation*, llvm::DenseMapInfo<mlir::Operation*, void>>*) /data/llvm/mlir/lib/Transforms/Utils/DialectConversion.cpp:3276:10
#25 0x00000000024458b6 (anonymous namespace)::LowerAffinePass::runOnOperation() /data/llvm/mlir/lib/Conversion/AffineToStandard/AffineToStandard.cpp:555:16
#26 0x00000000029bbf7a mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) /data/llvm/mlir/lib/Pass/Pass.cpp:471:21
#27 0x00000000029bc574 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) /data/llvm/mlir/lib/Pass/Pass.cpp:534:16
#28 0x00000000029bde3c mlir::PassManager::runPasses(mlir::Operation*, mlir::AnalysisManager) /data/llvm/mlir/lib/Pass/Pass.cpp:837:10
#29 0x00000000029bdd5c mlir::PassManager::run(mlir::Operation*) /data/llvm/mlir/lib/Pass/Pass.cpp:817:60
#30 0x00000000029b539c performActions(llvm::raw_ostream&, bool, bool, llvm::SourceMgr&, mlir::MLIRContext*, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>) /data/llvm/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:84:17
#31 0x00000000029b50c3 processBuffer(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, bool, bool, bool, bool, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, llvm::ThreadPool*) /data/llvm/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:124:12
#32 0x00000000029b4ecf mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool)::$_0::operator()(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) const /data/llvm/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:164:12
#33 0x00000000029b4ded mlir::LogicalResult llvm::function_ref<mlir::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>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool)::$_0>(long, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) /data/llvm/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:12
#34 0x0000000002ae1789 llvm::function_ref<mlir::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::operator()(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) const /data/llvm/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:12
#35 0x0000000002ae0d65 mlir::splitAndProcessBuffer(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>, llvm::raw_ostream&, bool, bool) /data/llvm/mlir/lib/Support/ToolUtilities.cpp:28:12
#36 0x00000000029b4159 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool) /data/llvm/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:169:10
#37 0x00000000029b429a mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::PassPipelineCLParser const&, mlir::DialectRegistry&, bool, bool, bool, bool, bool) /data/llvm/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:187:10
#38 0x00000000029b4c06 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&, bool) /data/llvm/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:269:14
#39 0x0000000000411c2e main /data/llvm/mlir/tools/mlir-opt/mlir-opt.cpp:237:7
#40 0x00007fb6dfcfdc87 __libc_start_main /build/glibc-CVJwZb/glibc-2.27/csu/../csu/libc-start.c:344:0
#41 0x0000000000411aca _start (/data/llvm/mlir/build/bin/mlir-opt+0x411aca)
Aborted (core dumped)
```

[temp.mlir](https://github.com/llvm/llvm-project/files/9879326/temp.mlir.txt) is minimized test case, and please refered to this [post](https://discourse.llvm.org/t/problems-with-using-affine-data-copy-generate/66232) to see the detail.
```
#map4 = affine_map<() -> ()>
module {
  func.func @test_greater(%arg0: tensor<13x21x1xf32>, %arg1: tensor<13x21x3xf32>) {
    %1 = tensor.collapse_shape %arg0 [[0], [1, 2]] : tensor<13x21x1xf32> into tensor<13x21xf32>
    %2 = bufferization.to_memref %1 : memref<13x21xf32>
    %9 = memref.alloc() : memref<13x21xf32, 1>
    affine.for %arg2 = max #map4() to min #map4() {
      affine.for %arg3 = 0 to 21 {
        %13 = affine.load %2[%arg2, %arg3] : memref<13x21xf32>
        affine.store %13, %9[%arg2, %arg3] : memref<13x21xf32, 1>
      }
    }
    return
  }
}
```

Commit : [#451b1ff3](https://github.com/llvm/llvm-project/commit/451b1ff37639e8a6194940fbf5ffdc23b8b4af28)


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztXFlv27gW_jXOCxFDovaHPDiL0V4kkyDJdHDnxaAkytZUEnVFKkt__RySkrV4iZMGaGZuitTWQh5-Z-Xh5pDFzydfaJaxKfqKxCotvsP3XzUXiBYRqwtBKxojgsJ6OUV_rGgBr2tO0XHGHml1TJIkLegEn6FUoKgifEU5ekzFCiUMiD6mxRKFJPouKhLRycV8cno2CWYT43xizCau0fyp2zxLq2NWiok1QxM8j4kg8JVlDzl8yZfyLg3h8zwlGY0EXM2a5udfb9d31yWfRmUJZEzPDyQ1Ugsm8cSXjJWnwFTMJ9hXJK0Z_Ol6c1ZdlxMc6GdQgBSseM5ZzVGUEc7Xr1hJKyIY4PHlM-yHjGVwhSJWcAV_xjmtRMoKBNyFssErUk6XVPxW57eU15ngujKaWBcT6xyZwLELf_CFVXmUk5IjvmJ1FqMVeaCICJRRAnphBUWVIgKFJ9hDCUkzGk-1FG8uL2Z3F4jXYQ4aUXqD0iWrBAIhrIQoueJuDn9L0FMdTiOWd4KWX8dlxf7SAk45rymAnSMCoNIiyuqYgp1QrexOt03zdwIeoLjOpfz1I2OK1L-bii0rkiNSLeucFkLiQK3SNbmFMqqFNqqpfDeyM0UQhGQZyHgy1v9sLzF8ghQLSkX8meuLmyothAJ1rywQ-12hijwuGBcVJbmSPthwIZRSxtbXfinru6tLKU64-r1In-SDdFmQjE9BOkDVcaWZmGaH1RxjxVaIRsA0jS8g5IxKw3pgaTzBs59G41quRNOBwSMwsR-62wR3WxcDTGuDPRBNC6PxRMOSoulgWGOZBK6DxkJ4D3XYhjcUgN207CWhSw2KSeAbaLEAjwKXpgvwE8VpQ_3JdxeufZylRf10vCxq_aIUK7CaeMrZ1JjgU-PJxEBFBoN1M06vmTiJTUJ9D1UkhdAJNMI6zWLpgUAsOj779p_HP8P1LZ5iD2644gMuplN598xjWkpPrDWb8OBBoQFk8K1IT5UBmvBhdEjcEZLIS0xEQqY4PQyJiLU0VC3ViD9qxBs2YkRWQkCqRAXChYxQi5Aczruut77QTQbDJv1xk7aHD9BdJLXmKq1ZYHh4oLVgYJYOsYlFX99z2AtsH9JVvFs3FxjwZTVGLiPOMDw6vuPZ3uF8vBcu35S4sNPhMse4nMRF22GoBxLyIGbPqoo839JkYp31qglRpWEtqOxNIYx3xe9ykmXfACyrvuZlNqh1Xc6Buu6OVUX3HVkPPBl3wZbXrA8Dr5NYDnhIh-aSLdOIZBoO6qMcstpX1NmgHPQjqWhuCnpLl5B_7CnzjVQpidNonY_sLPknrdhdHUWUc1btK9iSvJZWr0xsZ9E7SAwzepqx6LtUTBql4p5WeVoob9nk-L8pzWIpiwv9VGlzjwDKr8WDRFPs5WwGiWFORBrNIFeNiMzY7iLw2T1VvhB-S6O64ukDdNoxvUgSMIhRI9LLLtPvVMKABDqRmYd6oQkNympFnYLAotWO8i3T0hu-MPZ9p0VIK_b7wGX0UWYwG_rFL3OjJoPsHij3uS7PKXCRSqzTlQodEDWgKzM6_7E2_IeYCHomjYIWJMzoIpUcTbDZQU_5AhLmBUtGoMfeouHvkesBzvam6mM_fBORkYv-FJC1976Jyrs49tv00Pf5N1HYGQ7eRG1XpDiU2AtB5FAyh8SX3aRatTyQrKbtIDWmAjhZrAhfqA56X_115WFEgST2fzVdJHURibHrDLvCjxLRmsF9JxLxXNLPjvqzo97SUS-pmDd99bx4MaL5vaGDl5E8jKHf9D6I3U-2j2M-ArQXBlGHphqeL1MN0-5SDXsj1bCdnal6xwCERRjn6uvfVXybN-HtFIa-u0Pc2Ih_jTxb2z2DWk35z-xqa1z9zK4-s6vP7Oozu_rMrj6zq3ez-96Sz0fIBvYsu3R5VfNgdn4Pn22uc_EkKsJVaoUxhk8Td5mV08-scOQEsZX8S-LWPy5NfrU6bTWd31enO1YnDqORT3O1gWDN_W8kb3x6PZn5saX0wmCigdssQioxWZY9EpM3EpNJDLrVx9eC-UhrHkNOmwUOO5ALgP0lJ3_AZGhR6gQDJk_luh9tbkX1PNd8HqL8fSx9U-nPa3hpgLRrNTZWZu13rAxWATFxsRnGaLAhpAAz5qXaUBCMwF_SJcnSHy2jWXP7RypWL3LcvTljxQNAhFc3RIALFbf0sUqFXBY_gE3oLwuesCqX68W_izTj3dpVR3m9VoXl4jx8tALAxkgAZhTinxXAB2Tc1yP_bpEOm2PGcZAczLhuQLSMR_p2wPd-7nZ3_O_KN9Z7IqDFNd94yLdDPD_8Sb7Xr_nLwWzA7DietdnAolK1ZJo07P6Bz2XBOOSv7ZTVxbtLzFHbaHoSs8YSsx2vpz5SltnzDakEUOzIvUkS26znnlSQBW8YzbxiP2hrU42F3VHRZCm6dAfgnBacwuvdADaLXxHIzRO2t4pKZPVQ7t1t18Ke2lPQ9a7YHmsiiPEhmnhdNPp_lriy_W4pFg-zeNt25B6yF6LFpdzGp8dmN3IzpXpY1cV10WNm-w6zAfa-CpttF_fsTsA4m1TxlkcNF47jjBx4mLsGYZh4_f0Y_clcGPmy61LCnsWkVCPzBv3AjBRfLw3gehlcQbJnnvIrUpCl7AHOkN4ddIbqQm7-ovHODYkDkeh21Veb0ngyO8Nddoa9EbeR49mv5vYmLWmmdr0MnEcWXTOxtxt7E_v9SrKpr-BZldpBKgdas30Fell1ix0iAbyQHtX66AEOsylhRyf5PXvyRxKOqRWNgLWsruUpd7fxA0PRhrxeD9q3vJEnB2PQsfMS6D1w34DIlIjcDtFwYy8gcqwgQtCKDFezaDOf2NzE21pR-90bRrC6iujVctNMry6_3kJkEfRJbEThUf5x0IzE2CUOzEkAMW8eqp3weH4Fl9eluCJpG499ZXhdzjrcXiwlZkQWKismJypP6yRRW2n3CWy9zNNMv5RCTj12Na5ozqrnllSvfEwTAqwvYppRORDdVafpmTZVs1tV7yf0vpqbPk7PS1TPG_3zvdrWe6PQHNKPHqIvE4-mA4ZbsEFhNo2Svi12JD6M4n6NYl4yl2YzrSYht90ak-3TcL9CUGN1Hbbn9zCTcscmZY1NKobec5du3qLMDyHB9TwrQMvkyZNFMpwj_nSdn3EduQiRsWL5q-Sz6TGvnLO-u79sp61J1p-4dkbuMhoyUnlQ7F_gFv-suPc2Xbr-SJfOSJdG7PY36_AyS8WsiG9GCdHHDgAfQnEvltgIJy90bt1RLdnNyYmHVKS0HQvgsWbHI3TbHKwofAb7Vwb790k91OnG3oBtPLNg44B8cC0NJd7ODJxd3pCK02owd_eRRO-PRu_WeMrBjgx3p-ibuZRoRfSsyXiJTVRpsZTT0Qdz_S5cYW1Q3e7L0Rk82zQjTFEONXY2JzYbai_bVtTMRzdoto3B4cEoiSPfQ4uFPB-44IJUYtG2eMhxxYjLw4XqnKa-VC8VHXV00bJlwt5pzjbHPJKIIN1wc4RxK6MtllBqtMfuqfGkaawPM87kSU2qFkoiVlF1IpvG69ejo_fNp3MqaF6qc9cT5xyqvvq4eJJm6rR44HuBJW1lvqY4FU9qLjPlKE-LNE9_ADxBITOI5O5YsCp5wryUZ9zl-fZE_e6AYPI3CTgCaCVEi22o4pRHrAbHnUosU1YtZavwH1CFGc35sfw5guOag3k3x8iPpXCPI1Y-Hy9pIXMmmX64LrbkaVDZKKf6kLueF51uFxq2clLaSJ7f13TBZkq1Q1bNYx9DtEHt_qOL5jcOWFxnFE280-bMKZL9xFR-oIltSHEslhAT1Yog1HRItZSDWhBUwdWOMNN6wuaT-ZQAVh3NdClzSylrXSroN4lkFVPh1hVApVlGSk4XfEVK2lA0pNThz1BSP5N3pvzG8t45R3tgyYlbNn7ZYOmDwApEqMJz-kPvLxBskdMcDKBFOUP6fh-hQBHS5aZE7mJb_77C1urAhjmg0fzkQMKqhnsNLSdPqNFzQxD4ylVg6D8cCHcLMUsRM2RlbI5La3VYPTuaZozESj5SAxpOp2mrFf4LYukhUUfbdTMNneC1lDckBrC9854S-jcVFXVVtPfrV93FtvBzxnL5kxWyfQXOsh0zNJPEemMsihQ9uGjpeK4VUJ-4ZmAHtpGEiZNA3MdW6Ic2SbSj9vAc0RPTdV3fszE2j-ITKw6sgByJVGT0BBDKOWMpsDP1QxiP8qdRVJAZ_mTFUV1lJ2__2Q3Hd-3gaHVCLRjZYCP0E8_ySEItF4dxTAhOSBR5MTnKSEgzfqIkhwv6iBQJ-QshzvlReoINYMLAngk9oWFMaYBDz_MpTQI7sUC9tkFzGenaGHpUnShIYb3k8DKD3p93LyFrkgs0SgySPqnFilUnp5Rkf9Jy9VwdqdZPFPq_AThSwJs">