diff --git a/.github/workflows/qodana_code_quality.yml b/.github/workflows/qodana_code_quality.yml new file mode 100644 index 00000000..dbf221c7 --- /dev/null +++ b/.github/workflows/qodana_code_quality.yml @@ -0,0 +1,20 @@ +name: Qodana +on: + workflow_dispatch: + pull_request: + push: + branches: + - main + - 0.3.0 + +jobs: + qodana: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: 'Qodana Scan' + uses: JetBrains/qodana-action@v2023.3 + env: + QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} diff --git a/qodana.yaml b/qodana.yaml new file mode 100644 index 00000000..ad377678 --- /dev/null +++ b/qodana.yaml @@ -0,0 +1,31 @@ +#-------------------------------------------------------------------------------# +# Qodana analysis is configured by qodana.yaml file # +# https://www.jetbrains.com/help/qodana/qodana-yaml.html # +#-------------------------------------------------------------------------------# +version: "1.0" + +#Specify inspection profile for code analysis +profile: + name: qodana.starter + +#Enable inspections +#include: +# - name: + +#Disable inspections +#exclude: +# - name: +# paths: +# - + +projectJDK: liberica-19 #(Applied in CI/CD pipeline) + +#Execute shell command before Qodana execution (Applied in CI/CD pipeline) +#bootstrap: sh ./prepare-qodana.sh + +#Install IDE plugins before Qodana execution (Applied in CI/CD pipeline) +#plugins: +# - id: #(plugin id can be found at https://plugins.jetbrains.com) + +#Specify Qodana linter for analysis (Applied in CI/CD pipeline) +linter: jetbrains/qodana-jvm:latest diff --git a/ton-kotlin-liteclient/src/jvmTest/kotlin/test.kt b/ton-kotlin-liteclient/src/jvmTest/kotlin/test.kt index 8e3acb94..ffba58b0 100644 --- a/ton-kotlin-liteclient/src/jvmTest/kotlin/test.kt +++ b/ton-kotlin-liteclient/src/jvmTest/kotlin/test.kt @@ -1,16 +1,19 @@ -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.runBlocking -import org.ton.api.tonnode.Shard -import org.ton.api.tonnode.TonNodeBlockId -import org.ton.lite.client.LiteClient +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.jsonPrimitive +import java.io.File +import java.util.* +import kotlin.test.Test -fun main() = runBlocking { - val liteClient = LiteClient( - coroutineContext = Dispatchers.Default, - liteClientConfigGlobal = GLOBAL_CONFIG - ) - val blockId = 27750192 - val block = liteClient.getBlock(TonNodeBlockId(-1, Shard.ID_ALL, 27750192)) ?: error("no block") -// println(block) - val accountBlocks = block.extra.value.accountBlocks.value + +class Foo { + @Test + fun foo() { + val a = Json.decodeFromString(File("test.json").readText())["boc"]!!.jsonPrimitive.toString() + Base64.getUrlDecoder().decode(a) + } } + + +// "te6ccuICATUAAQAAJacAAAAkAMwA6gGAAmIC/gMwA1IDYQN6A5QEBAR0BMAFaAWoBpoGtAdcB5wIjgj+CUsJbgmSCj4KXAp6CpgKtgrQCuoLBAseCzgLUgtsC4YLoAxEDMYM6g0IDVQNoA2+DdwN+g4YDjYOVA5yDpAOrg7MDuoPkhAUEGwQgBD6EUYSEhIyEsgS5hMEEyITQBNeE3wTmhO4E9YT9BQSFDAU3hTsFPoVCBUWFSQVMhVAFU4VXBVqFbYVxBXSFeAV7hX8FgoWGBYmFjQWgBaOFpwWqha4FsYW1BbiFvAXphfKF+4YOxjmGQQZIhlvGbsZ2Bn2GkMajxqoGsIbDxtbG3QbjhvbHCccQBxaHKcc8x0MHSYdcx2/HdgefB7JH0oflx/pIDQgUiCfILwg2iEnIUQhkSHdIfoiRyJkIoIizyLsIzkjhSOiI+8kDCQqJHcklCThJS0l1CZWJqMm+idHJ1on1CghKG0ouSmEKdEp8Cn+KksqaCq1KtIrHys8K4krpivzLBAsXSx6LMcs5C0xLU4tmy24LgUuIi5vLowu2S72L0MvYDAOMLwwyjFgMW4xuzHIMhUyIjJvMnwyyTLWMyMzMDN9M4oz1zPkNDE0PjSLNJg1TjXGNnw2ijbXNyM3MDc+N0w3mTemN/M4ADhNOFo4pzi0OQE5DjlbOWg5djosOuI68DumPFw8qTy2PQM9ED1dPWo9eD3FPhE+Hj5rPng+hj7TPuA/LT/iQC9AOkBAQEpAckDGQNZBfkIiQi5COkLAQ4BEBkQYRLxFfEWDRglGGka+RstHDkcYR/xIFEgiSDFI8Uj6SYBJnEpNSu5LTwQQEe9Vqv////0AAQACAAMABAGgm8ephwAAAAAEAQDcps4AAAAAAP////8AAAAAAAAAAGVSIskAAA8L1cxogAAADwvVzGiEoI37zgADBycA3KbLANymxcQAAAAEAAAAAAAAAC4ABQIRuOSN+0oO67AEAAYABwqKBLDno6jCV9PpsS7upsApzkC/2fxAHBcbTJjBhMRjDrbG3IYC++hkhK244kDTkeF/YtUyO22fW29l4EMk30SpfLYBwwHDAAsADBSJRxiV5MyKULPgHYlFGOe9ZED8MciJ8tZy+uHyHLGFQqgAB0oz9v3ZweeO3n9nqindPfS7o7WzuP9idb0MpkG5dIiYY1RF36/baTKcc6EcOrEQPn/CQ6aUcqJ8spxP5PvrZKMvoIvGwAETARQBFQEWAJgAAA8L1b0mRADcps34VQT3btQfxsnVPB1khyX5RXdNBajHe2eVbEEzL02n/6XZBIqoYBGSXRjjsKdSNkrzEA6qbb1teRD3N1nlodbaAiWEW1Wt2hxpj/wi2q1vIVqp/8AIAAgACAAdQ7msoAJQd12AEZVPxAAIAgEgAAkACgAVvgAAA7yzZw3BVVAAFb////+8vRqUogAQJFuQI6/i/////QD/////AAAAAAAAAAAA3KbNAAAAAGVSIsYAAA8L1b0mRADcpspgAA0ADgAPABAkW5Ajr+L////9AP////8AAAAAAAAAAADcps4AAAAAZVIiyQAADwvVzGiEANymy2AAEQASABMAFChIAQG+LbbroSlzv6TuUj5WaFA6adpi+0WazDj0X15RdBQ4UQABMhNsPtnRnaT7TVL6wzA7NJ61PeFRcYHrsmEyslIIsW8LmgpGTkkFYMDc4jtoF26UJHa1E1Y4BW0Grs2ycx+SMLNkAcIAFYIRbVa3aHGmP/AAFwCyIjMAAAAAAAAAAP//////////hFtVrdocaY/4KACyABY0VRTGhRx90aaWLuAj8VPPwQHLe7AufUvGiP/R5kX+11CJH4Iy/VHjBRxCanWiu1FfNqlhCxMtpuq9ePTFy7kLHaAAGgAPzCaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqsIvlq8mh3xBRgA9ALAAPgCyAREAAAAAAAAAAFAAFTITLfZEakjw5yFHEwJtcoJUxDInUf1KIB8xIv9tgZeiIJaNozFtslnX4G4DP18D1M1V7UkBfKIOX5pK6rehXHyNWgHCABWCEW1Wt5CtVP/wAGwAsiIzAAAAAAAAAAD//////////4RbVa3kK1U/+CgAsgAWNFUhlLiMcYs4yg5jQsnCA2jzbJ1AdLeVZBvjGPbfy9B7hx8NfyUxoG5b4gIfh7mPYdciVm+WGRVweCgoRyx1JOhbABoAEMwmqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqrCL5avK47yGUYBJwCwALEAsgBrsEAAAAAAAAAAAG5TZwAAB4Xq3pMh///////////////////////////////////////////AKEgBAV7DexDibsowmq14egkhnIYi6Mqn3JMW+41s0cdu4s0hAcAjEwEItqtbtDjTH/gAGABuALIjEwEIrXZSIyyWE/gAGQAaALIzEwjzLXPhGqmZpolSbeejwPW/83ABr0zz7etyhVDKtO/tFQI+Hb4IrPlQI3icceWwbL7gcjp2Y7lXSPWDDEN+LxAAHwASAQinyF5mIXlBeAApACoAsiIRAOWt870LHNKIABsAciIRAOJl2zYi4G/IAHMAHCIRAOG5CGgwMWToAB0AdiIRAOC/B/9iJURIAHcAHiINAK+HV9cpyAAfAHoiDQCuxnKmscgAewAgIg0Aptemef2oACEAfiINAKbXpnn9qAB/ACIiDQCmOCamhagAIwCCIg0Api/ajXOoAIMAJCINAKYv2o1zqAAlAIYiDQCmL9qNc6gAhwAmIg0Api44G2poACcAiiGbvGqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqBTFxwNtTNxK4BPkAsC/iLsvz+A3NqP8J6bKnkmjk86F4DYVcn/MAAAeF6t6TIcACgidc/1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQFkMB42EAAAAAAAAA8L1b0mRFMXHA21NXQAIwAjSMTAQiYFo1ksB+N+AArACwAsiIRAO+x0QFxWbOIAJAALShIAQFFqyG5dh0WkXVfFqdI6Sp1+k7RSQwH88JD2kiq0ugPGwAcKEgBAebBjOLu45Zf3cQpSnnRJA+dRzRCcw5as8cfimEl5kUBABwiEQDvBWAdzTC1iAAuAJMiEQDu/Irvg9fwaAAvAJUiEQDu/G+zsvvNyACWADAiEQDu/G7H4pU66ACYADEiEQDu/G6/cmwX6AAyAJsiEQDu/G6/awCt6AAzAJ0iEQDu/G6/awCt6ACeADQiEQDu/G6/awCt6ACgADUiEQDu/G6a+CSlKAA2AKMiEQDu/G6a+CSlKAA3AKUiEQDu/G6a+CSlKACmADghn7xmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZgd343TXwSUpIe3qR3Wsl7iQ3wwHwFMY+Fq+I2z5UPN+hPyGw2iZGQSAAAeF6t6TIUADkidc/zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzPAvQDAAAAAAAAAPC9W9JkN3fjdNfBJSlbQAKkAOiJLYqLKpA58XrLE4E/JOfaYYOMemI6qkNw05cm/fuMgTvvY9dRsx2EAqwA7IgeSZVIgADwAriFxtOfMqkTcQAAAcIXrLE4E/JOfaYYOMemI6qkNw05cm/fuMgTvvY9dRsx2FzLDwoUkOeNgVk8vzkvUAK8oSAEByBKq/WzMKEoNMNF5VyPJdfZxzUebgQTdbN8d9NwnfeYAAiK/AAFAm87wAAMHJ2AAAeF6tbyAiAAAeF6qGKI4BuU2L+Fj1KLhm01xLkQwxPHliA3XTmYxxh2/GCuDW/l3Cfo1x5NqOGkxQ0qKNJoOFeaEztUuuoQyt0RPw59b8HGFYzC+AD8AQCITxEAAA8L1a3kBIAC1AEEyAWGJ2CyIw6DHyHupkGCwoZHCqOnnpOptrbtk+/hWB2tVJW5l/OuwufvOPQdG8puxxCTWn383mAgXx4nYWSLwqDEAEQANIABOAE8iESAAAeF6tbyAkAC3AEIiEUgAAHherW8gJAC5AEMiESAAAeF6tbyAkAC7AEQiESAAAeF6tbyAkAC9AEUiEWIAAB4Xq1vICQC/AEYiEUgAAHherW8gJADBAEciEWIAAB4Xq1vICQDDAEgiESAAAeF6tbyAkADFAEkiEUgAAHherW8gJADHAEoiESAAAeF6tbyAkADJAEsiEWIAAB4Xq1vICQDLAEwiEQAAAeF6tbyAkADNAE0AqdAAADwvVreQEAAAHherW8gIAblNmYhLAgdj1zIMwBJpU6pd1Dpp1txbgt5ccadjfYRuW4/5XV+8hUMO7mIYGY7cI05TLovYwxD3er06FU/0GZL5lqMiASAAUADUIgEgAFkA6iIBIABRANYiASAAUgDYIgEgAFMA2iIBIABUANwiASAAVQDeIgEgAFYA4CIBIABXAOIiASAAWADkKEgBAQbWmmjPcxjmbKgMfG3AqfIJeZXc9SLnjeJGVbCJ3ZNvAAIiASAA6wBaIgEgAFsAXCIBIADvAF0iASABAQBjIgEgAPEAXiIBIADzAF8iASAA9QBgIgEgAPcAYSIBIAD5AGIoSAEBDQ3JRXHehYF2MgTMdjWSNkEf0zu8pebgl7V+g92BAGcAAyIBIAEDAGQiASABBQBlIgEgAGYBCCIBIAEJAGciASABCwBoIgEgAGkBDiIBIABqARAiASAAawESALG8+8r22HkVY57QA/58R0NBT6aZetunS68m/cGZ6kjzmjKpEUQAAAAAAAAAMoAAAA59roccgAAAL+l+HngyqRFVAAAAAAAAAEeAAAAUMjjrZQAAAEPPD4tiQCMTAQi2q1vIVqp/+ABtAG4AsiMTAQitdlI3Sm1z+ABvAHAAsihIAQFlhE3bJlkBFudS72jKmNJE0hNUwiAK2ijx9L5wlVF9agHAMxNED0XC+LXMIZfnsIHmwXhbzQHLuEqk9qTUu6jnabqekfCIArqBRhDVyEgleC3h3NcIiN8sQconvHEGSM/Hxe8ZAB8AEgEIp8heej9QoXgAjgCPALIiEQDlrfO9CxzSiABxAHIiEQDiZds2IuBvyABzAHQoSAEByhhlDYr9kmcrLXW4jLpMf1MnwLuhYsDYh62ivI27epoAHShIAQEJx8X+CnwMR6LJI5i1Gm3BXn+oRdJRO/ggHE3HzlTp8gG9IhEA4bkIaDAxZOgAdQB2IhEA4L8H/2IlREgAdwB4KEgBAYf6awOXeakcKpfTdevjBrh3QjQBDbl7+Ywn3nei0iB/ABsoSAEBpac+/pPai1uaWsJ5kLuABNQrxsnIl3tpO0ubfLtwkqsAGiINAK+HV9cpyAB5AHoiDQCuxnKmscgAewB8KEgBAV+ZNHycrXA4aetPCseR3qEm0I1E17JI7Ofg/V63DMO9ABMoSAEB3xU6sjEPhZMaTbcgyJAvgXTw9vdz7Zcc5JBivpkngtEAEyINAKbXpnn9qAB9AH4iDQCm16Z5/agAfwCAKEgBAYxvdfajFCslb56bxfG+eu3lVHB6jRXQKScx9PWubjDdABEoSAEB+MPJFWTx2NwLqGCWEYYXBGhD2H+wr12+RPY2Ph/981AAFCINAKY4JqaFqACBAIIiDQCmL9qNc6gAgwCEKEgBAZ/ImPHdAmmH3NXUHA2hoe2JiDZE01PW7dHaMn/sRBD+AA8oSAEB2A/lBZ26bwclCL7kqwFUzYHXGCvc7BiIHk7/nvgS2e4ACiINAKYv2o1zqACFAIYiDQCmL9qNc6gAhwCIKEgBAUecUrvPTov0dOlrndxtjpzN7YQgTB5ZqxaG2BV/E0+qAAgoSAEBklrmR0/5gRMUYalk6FlwHHUj91SSd+G7zzhqZbv8LXYADCINAKYuOBtqaACJAIohm7xqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqgUxccDbU2mlYyeE6cYtHP6cjUUKEVy4W1zGIwh16/EpHZIaHZB+AAAHhermNEHACLKEgBAY4RmVwEQm/iT4t7do5iD79EyM2FsOdyWBx3oXeN4mWAAAkidc/1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQFkMB42EAAAAAAAAA8L1cxohFMXHA21NXQAIwAjShIAQGnlKgzKp9jvH94WfHfBjz6yXD9XTUjAXdHrZXSSON21wAMIUkAAACZM8C54HVwLQNNoiMbbwj+xwmyjGghJwQT0s226JChhrZAALAoSAEB9HRK66JVeElK0wpDubj9UJLiw2KG5mLKNNwWoKarFcAAHSIRAO+x0RWPMROIAJAAkShIAQFyA6u+pr+Ik1sPb3ye32kcG+QIu6CbbRLZF+t0/1qBJQAbIhEA7wVgMesIFYgAkgCTIhEA7vyLA6GvUGgAlACVKEgBAQHk41e1c8L0TLA2mC//xz2IauUH1YOpBm3xHzErWEZOABsiEQDu/G/H0NMtyACWAJcoSAEB4mb1hrkrpiMspMeRXrfNtU2BaMXti/crx44mnHhWNM0AGyhIAQEPIm/oBOf0F95M5WQTSwMB5VysA8BOnoweoaj+0I1I8wAYIhEA7vxu3ABsmugAmACZKEgBAVZk3byBlrhzxe+coZjtjNpyYJbK7ixhB2p2FRKTLflQABYiEQDu/G7TkEN36ACaAJsiEQDu/G7TiNgN6ACcAJ0oSAEBcQ4qiDPi5VxA99pGivTbtlMFlz0qtR0Gw21zb3ulasAADyIRAO78btOI2A3oAJ4AnyhIAQEV63wl29MWoIEiW0x7yHfMj1pvjQBQENj0FGx0I8APbgAOKEgBAWbIQNyh4hMOpUGXGJjWWzELHSEXusLmKzSNb/D8kk1QAAsiEQDu/G7TiNgN6ACgAKEoSAEBkmqVKo7ze6VgX4DQ6K9QgMxPfkJVFjS1zID94mLIis0ADiIRAO78bq8V/AUoAKIAoyIRAO78bq8V/AUoAKQApShIAQG7pmckU6PaErYSKsvkU4IBCebzwrnL8wsnZgM0nnIeJwALIhEA7vxurxX8BSgApgCnKEgBAWzBdO0uElOPZw30DrGfrtFmT0nWTG8xfkgbPumktR+WAAcoSAEBpPU20VmMCfLuZFTME8Em5HB8M+n4ZWWdxRMVwmeFVD8ACCGfvGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmB3fjdXiv4ClYA9Och9QHfVO5PdFHFn0MsWfHOo04FI16Fk+8yj6hVQAAB4Xq5jRBQAqCJ1z/MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM8C9AMAAAAAAAAA8L1cxog3d+N1eK/gKVtAAqQCqKEgBAWIX+HLJn6/Lhw8sEaNi9ZM5vpUJX3DQC5z/L23NadPdAA4iS2KiyqQOfF6yxOBPyTn2mGDjHpiOqpDcNOXJv37jIE772PXUbMdhAKsArChIAQGXjznxBa2zeIsSYpzk23ZXkB6Hn6DiwlC5D00cxx9mxwAIIgeSZVIgAK0AriFxtOfMqkTcQAAAcIXrLE4E/JOfaYYOMemI6qkNw05cm/fuMgTvvY9dRsx2FzLDwoUkOeNgVlk+ufvUAK8oSAEBb10k+RGGbuIA8oqE396lcNECRw2bFWx2R3T1yz2rcRYAByhIAQFhev2yzrr7+sWf9p9z/dipaxFbvpj225VsgsISBkxanAAGKEgBAbnpJJMxzpNLqJmsPTmKGXAsZYWnhsJV8UINIhpChe+pABEivwABQJvO8AADBydgAAHherekyIgAAHheqhiiOAblNi/hY9Si4ZtNcS5EMMTx5YgN105mMcYdvxgrg1v5dwn6NceTajhpMUNKijSaDhXmhM7VLrqEMrdET8OfW/BxhWMwvgCzALQoSAEBsg42o7NqTN7mARBsZC6QcYsKWNryAHU9uzGJ+Va0lLYAASITxEAAA8L1b0mRIAC1ALYiASAA0QDSKEgBAS15XBIfa7Pm9WWq7JH9aRKJ8joBiVgYNuP9K/W8O+7fABciESAAAeF6t6TIkAC3ALgoSAEB3ZZVtHTqPTfBvl5v+1egIvDi0p0SBK9yBDx5kht/aBEAFiIRSAAAeF6t6TIkALkAuihIAQHMMz2y/eqW6lnlSprQkCwSptCrhC+FGEPk3gt3nwB0vgAUIhEgAAHherekyJAAuwC8KEgBAT20007jHKBK/3/QPjfjQjQRNpZtdIzLs0wVgVbqaFzcABMiESAAAeF6t6TIkAC9AL4oSAEBVyTTnOJROi+xX4pmISH8YgR7VxmXyAgK73pAfSNSmBkAEiIRYgAAHherekyJAL8AwChIAQGGgQsilqweyhyq2VEvAHtfUHYtcfgna8/9Qsx28YdWdAAPIhFIAAB4Xq3pMiQAwQDCKEgBAdjU0oQlDMerSqNZ4C3qiur5esgFOMU0ygvhlCEXWOa4AA0iEWIAAB4Xq3pMiQDDAMQoSAEBQrbRj4iHX8PFqhLtprYwWqG3p0Kgu20iaUG/o8777EEACiIRIAAB4Xq3pMiQAMUAxihIAQFrvLw5pyI12nAnuSVZJsAUJPLofLJNFhOKSOsL0Fm/fwAJIhFIAAB4Xq3pMiQAxwDIKEgBAahI4zSNApq2h6FdI4K6GZuiXvjlbSi2yDyvnYkpuhzeAAciESAAAeF6t6TIkADJAMooSAEBasWmGOi7czkJc6bgmjWaRbtCbCuA0N7LAJaXrDPr9OwABiIRYgAAHherekyJAMsAzChIAQGgWpuF8ct9fXSEMRTg6nr7TMRFYQo1pvCSpbKDwNFITgADIhEAAAHherekyJAAzQDOKEgBAYXUK/iTf8MG1VchlZldYGR7uygdC5KQ3XkJ1UOIsgtmAAICEUAAAHherekyJADPANAAqQAAAeF6tbyAgAAA8L1a3kBADcpszEJYEDseuZBmAJNKnVLuodNOtuLcFvLjjTsb7CNy3H/K6v3kKhh3cxDAzHbhGnKZdF7GGIe71enQqn+gzJfMtRgAqQAAAeF6t6TIgAAA8L1b0mRADcps34VQT3btQfxsnVPB1khyX5RXdNBajHe2eVbEEzL02n/6XZBIqoYBGSXRjjsKdSNkrzEA6qbb1teRD3N1nlodbagiASAA0wDUMgGwgiESduhqR+8qJcQy77hsHnSyX49AvBvLvgT7fk8hVUDp6u6U5SUw9AztYZPp/Gjo58oAWUN3X2H7Br3A1qm4ABAADCAA6QDqIgEgANUA1ihIAQEO7N8F1Rtap8V0Dm6a/Ah9Nb97uiceP9hl+u/x9gYQtgAOIgEgANcA2ChIAQEek/2p5YFuSv6OFw0Jem2dqJGM02ak3A0IVKBFQBYiYwANIgEgANkA2ihIAQH8PK+DY4X00tAYpe74PJS1PmV40hwGbPk57YqAnlWiSwALIgEgANsA3ChIAQHp9A/1ChpGMGfmJZvi1qUivqB8VX1zz4izWakVAbepsAAKIgEgAN0A3ihIAQEQBGEo+A1KJm2ZH/2eURuJmcTbpc4xTD3fPbjzn6YfgAAJIgEgAN8A4ChIAQGDVEgogsyoU3Sdw8dyZ7kkRQdY5Z9aaMjbFW4gcv9vngAIIgEgAOEA4ihIAQGzz/vlLEWeSpuP/4ENPI4Lmka+j5ew5XzxdvXU11hnkQAFIgEgAOMA5ChIAQF23Db466nQNtYwvaIU/M9RT3kjzwwA1AA8TyJV2jjahgAGAgEgAOUA5ihIAQFvM9Dl/5f8AvEWO0FnYzpwfjXEmWlYWVVdgYRhbuhU4QADAgFIAOcA6ACxvXkht1JIH6expomZtCr/rvxNPfb8aeP2igSQ29oQT1SMqSegIAAAAAAAAA+gAAAEf4ADVsAAAA7Ta03UTKknpsAAAAAAAAARoAAABQufL4HAAAAQtw9RqTAAc95oyqRFkgAAAAABuU2WAAAFDXdiC6wAAKQlMSMvxsqkRZIAAAAAAilTEAAABNVxP/cQAACdgXp4TXEAsbzwx9lSrmjb5QaMcMdpOEZT7fe9iGBfOdCI/YhqFWpCMp3OtQAAAAAAAAA3gAAAEAp0APQAAAA0o5hwXzKdztKAAAAAAAAARQAAABQ9K175AAAAQYfE8yTAIgEgAOsA7ChIAQGMwyUtz98bIMf0ChxjgiJO5DGQx2Dtow2V68Le3p1OVAAPKEgBAUtUMRXX5zGfvRm6UNGPthdSQzquKVkDd+jKW0DJNj98AAwiASAA7QDuIgEgAO8A8CIBIAEBAQIoSAEBIq/0aib4quN4nBNKviKkyFTRs2WH99YtfQxo7B9kXksACiIBIADxAPIoSAEBaj+F2Ecoqc3Ic1sPietz2VYBsgxTi1FSEHPC0fmm828ACSIBIADzAPQoSAEBsUTInzNmnjC+EypjgF6/1TMZhmhdrLiLlD37htx5VDgAByIBIAD1APYoSAEBXCkRGEt4gWxYOUyJeCAUlHZjV2oPwsyBY/chrPWz2gQAByIBIAD3APgoSAEBNxieEEPrrqdDzl4+BuGj1us7AoMSAH7pVfEhvsBMiCkABCIBIAD5APooSAEBXub+Y7qvuW7aETenrt7qv6JSfP7W03DTCPjcszOOYB4AAgIBIAD7APwCASAA/QD+ALG9dytMMtHz8YRZLzc+QtEXRqcIYFaSSGZyVMQ/Q1qwBoyohe6gAAAAAAAAEGAAAAP4kKAowAAAD20IgmMsqIXvQAAAAAAAABLgAAAFA74fqeAAABHcGjyCkACxvRnpphHiEvIn2DYecppnXaz0MrgfUiaEZ/X+tLLqNx0ZTgZlQAAAAAAAABtAAAAIRWFKjgAAABnm/KlaGU4GbcAAAAAAAAAmQAAACt0caWVAAAAkP1ef+WACASAA/wEAALG87fUcVGu5zOl8zj5I+kYgvwk5nwHvdTxZMe9JnmlomjKcw5qAAAAAAAAAOIAAAA/9CUY5AAAANZf94twynMOiAAAAAAAAADQAAAAPXus3HAAAADF+gdTXwACxvNtJlOOdCOHViIHz/hIdNKOVE+WU4n8n31slGX0EXjIyqRFkgAAAAAAAADIAAAAOJm6z7gAAAC9lq09eMqkPhYAAAAAAAAAKAAAABpB5fweAAAAJwgiVLUAoSAEBsfC6vtCRkJ9035lxptgdh395fj2bSgqAz7seWg8eMLAACiIBIAEDAQQoSAEBC+g9tkVagPcuVMhUHAyOEW78OqkQcZOrTbySfPqrKA8ACSIBIAEFAQYoSAEBu/0t23CbhvgqZ4zJ9doB35zsJo8bDs81H/6fNLLkG0YAByIBIAEHAQgiASABCQEKKEgBAdzWMcApGGr1wqmar4Be5vFszSwJjb+0Fq8/1A2YTwC4AAUoSAEBjxqy/JgRjy9VGdR5L7IymX5Ca43EJMAHkXCqb8dyK6wABCIBIAELAQwoSAEBKCoJ1UIun8CXqoU1BJLcqcYiai1leIqsG+eiOFvrPeYABCIBIAENAQ4iASABDwEQKEgBAdSMOFNJa56KPM5DUKhOn0P5TR9pG40gKT3PT8RnIW7bAAEiASABEQESKEgBAUi9+X0uBSx+INg9FX9yLSfw1/XWVMc1oyN/bDR+/h96AAQAsbz7yvbYeRVjntAD/nxHQ0FPppl626dLryb9wZnqSPOaMqkRRAAAAAAAAAAygAAADn2uhxyAAAAv6X4eeDKpEWSAAAAAAAAASAAAABRkjSzGgAAAREbZ98FAKEgBAU8ypm8pe+EIfuwahJhJCSvfu/vltvsLi7m97qKBUuqJAAEBA4AgARcAAQIBAYIBGAMXzKVodzWUAEO5rKAEAScBKAEpAkegFCrF44IRDFSy8z5nThRp3YCyX7irCUYzjkdarYTogvYgBhABLQEuAgNAQAEZARoDl7+zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMwKZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmc+AAAPC9XMaIAQBGwEcAR0Cl7+VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqtAAAAPC9XMaIMEBIgEkAQNQQAEeAQNAQAEuAIJyNIn+yVwC6xLvPCLwHvhf3FSFACAdww2JyqzgU/86mplOB5Jo3OtVriTl1eUHu64FdDaPUSjgJCxAASbhYtL2eAOvczMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMwAADwvVzGiBQ9vUjutZL3EhvhgPgKYx8LV8Rtnyoeb9CfkNhtEyMgkAAA8L1b0mQmVSIskAAUCAEjAR8BIACCcjSJ/slcAusS7zwi8B74X9xUhQAgHcMNicqs4FP/OpqZ9dGWJAXS/KBnZxGKwfEmfyRtuQr3LIRSTrCz2YFwEOICBSAwJAEhATQAoEMBkAhYOwAAAAAAAAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA691VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAAAPC9XMaINuJXAJ8gFgX8Rdl+fwG5tR/hPTZU8k0cnnQvAbCrk/5gAADwvVvSZDZVIiyQABQIASMBJAElAAEgAIJy4GKf+xWEcuVJ6YVaoZQDKUlXeKCHIkaI7f2s77RXRa1uk2lJ4zU/dCfx2thO5Z3FULJvanqgc2gedS4Ct4CnWQIFMDAkASYBNACgQYGwCFg7AAAAAAAAAAAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA9BAASoAP7AAAAAAQAAAAAAAAAAh3NZQAQ7msoAIdzWUAEO5rKAEAQFQASwB21AHhEIgBuU2cAAAeF6tbyAAAAB4Xq1vIA5023SNi2BlRcr7VIKKBmfX8TqOBMNrkJWwt4tjhHDvN0icK8CI3y6cpa3fvFz++WrkDjh8c7hDvQTagqEgE/2ggAAYQKQAAAAAAAAAAAblNlsqkRYqASsAE0O5rKACHc1lACACAWEBLQEuAQZGBgABMgOvczMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMwAADwvVzGiC75VeI6/IpVtzW1xBWugdYTNaNbVPbSIDIgGPOnNH9BQAAA8L1cxogWVSIskAAUCAEvATABMQEBoAEyAIJy9dGWJAXS/KBnZxGKwfEmfyRtuQr3LIRSTrCz2YFwEOJOB5Jo3OtVriTl1eUHu64FdDaPUSjgJCxAASbhYtL2eAIPBAkoO67AGBEBMwE0AKtp/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABP8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM0oO67AAAAAAeF6uY0QDKpEWSQACeQq9sEHwoAAAAAAAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbwAAAAAAAAAAAAAAAAS1FLaRJ5QuM990nhh8UYSKv4bVGu4tw/IIW8MYUE5+OBGy8wsI="