From a6d5a145b9a7edd5e112c16891232355430f7d0c Mon Sep 17 00:00:00 2001 From: Serhii Date: Mon, 24 Oct 2022 14:47:39 +0300 Subject: [PATCH 1/7] flutter update fixes --- cw_core/lib/crypto_currency.dart | 364 +++++++++---------------------- 1 file changed, 106 insertions(+), 258 deletions(-) diff --git a/cw_core/lib/crypto_currency.dart b/cw_core/lib/crypto_currency.dart index c6e0c02c2..d348ebdd6 100644 --- a/cw_core/lib/crypto_currency.dart +++ b/cw_core/lib/crypto_currency.dart @@ -137,272 +137,120 @@ class CryptoCurrency extends EnumerableItem with Serializable { static const uni = CryptoCurrency(title: 'UNI', iconPath: 'assets/images/uni_icon.png', tag: 'ETH', raw: 61); static const stx = CryptoCurrency(title: 'STX', iconPath: 'assets/images/stx_icon.png', raw: 62); + static const mapFromInt = { + 0: CryptoCurrency.xmr, + 1: CryptoCurrency.ada, + 2: CryptoCurrency.bch, + 3: CryptoCurrency.bnb, + 4: CryptoCurrency.btc, + 5: CryptoCurrency.dai, + 6: CryptoCurrency.dash, + 7: CryptoCurrency.eos, + 8: CryptoCurrency.eth, + 9: CryptoCurrency.ltc, + 10: CryptoCurrency.nano, + 11: CryptoCurrency.trx, + 12: CryptoCurrency.usdt, + 13: CryptoCurrency.usdterc20, + 14: CryptoCurrency.xlm, + 15: CryptoCurrency.xrp, + 16: CryptoCurrency.xhv, + 17: CryptoCurrency.xag, + 18: CryptoCurrency.xau, + 19: CryptoCurrency.xaud, + 20: CryptoCurrency.xbtc, + 21: CryptoCurrency.xcad, + 22: CryptoCurrency.xchf, + 23: CryptoCurrency.xcny, + 24: CryptoCurrency.xeur, + 25: CryptoCurrency.xgbp, + 26: CryptoCurrency.xjpy, + 27: CryptoCurrency.xnok, + 28: CryptoCurrency.xnzd, + 29: CryptoCurrency.xusd, + 30: CryptoCurrency.ape, + 31: CryptoCurrency.avaxc, + 32: CryptoCurrency.btt, + 33: CryptoCurrency.bttbsc, + 34: CryptoCurrency.doge, + 35: CryptoCurrency.firo, + 36: CryptoCurrency.usdttrc20, + 37: CryptoCurrency.hbar, + 38: CryptoCurrency.sc, + 39: CryptoCurrency.sol, + 40: CryptoCurrency.usdc, + 41: CryptoCurrency.usdcsol, + 42: CryptoCurrency.zaddr, + 43: CryptoCurrency.zec, + 44: CryptoCurrency.zen, + 45: CryptoCurrency.xvg + }; + static const mapFromString = { + 'xmr': CryptoCurrency.xmr, + 'ada': CryptoCurrency.ada, + 'bch': CryptoCurrency.bch, + 'bnb': CryptoCurrency.bnb, + 'btc': CryptoCurrency.btc, + 'dai': CryptoCurrency.dai, + 'dash': CryptoCurrency.dash, + 'eos': CryptoCurrency.eos, + 'eth': CryptoCurrency.eth, + 'ltc': CryptoCurrency.ltc, + 'nano': CryptoCurrency.nano, + 'trx': CryptoCurrency.trx, + 'usdt': CryptoCurrency.usdt, + 'usdterc20': CryptoCurrency.usdterc20, + 'xlm': CryptoCurrency.xlm, + 'xrp': CryptoCurrency.xrp, + 'xhv': CryptoCurrency.xhv, + 'xag': CryptoCurrency.xag, + 'xau': CryptoCurrency.xau, + 'xaud': CryptoCurrency.xaud, + 'xbtc': CryptoCurrency.xbtc, + 'xcad': CryptoCurrency.xcad, + 'xchf': CryptoCurrency.xchf, + 'xcny': CryptoCurrency.xcny, + 'xeur': CryptoCurrency.xeur, + 'xgbp': CryptoCurrency.xgbp, + 'xjpy': CryptoCurrency.xjpy, + 'xnok': CryptoCurrency.xnok, + 'xnzd': CryptoCurrency.xnzd, + 'xusd': CryptoCurrency.xusd, + 'ape': CryptoCurrency.ape, + 'avaxc': CryptoCurrency.avaxc, + 'btt': CryptoCurrency.btt, + 'bttbsc': CryptoCurrency.bttbsc, + 'doge': CryptoCurrency.doge, + 'firo': CryptoCurrency.firo, + 'usdttrc20': CryptoCurrency.usdttrc20, + 'hbar': CryptoCurrency.hbar, + 'sc': CryptoCurrency.sc, + 'sol': CryptoCurrency.sol, + 'usdc': CryptoCurrency.usdc, + 'usdcsol': CryptoCurrency.usdcsol, + 'zaddr': CryptoCurrency.zaddr, + 'zec': CryptoCurrency.zec, + 'zen': CryptoCurrency.zen, + 'xvg': CryptoCurrency.xvg + }; static CryptoCurrency deserialize({required int raw}) { - switch (raw) { - case 0: - return CryptoCurrency.xmr; - case 1: - return CryptoCurrency.ada; - case 2: - return CryptoCurrency.bch; - case 3: - return CryptoCurrency.bnb; - case 4: - return CryptoCurrency.btc; - case 5: - return CryptoCurrency.dai; - case 6: - return CryptoCurrency.dash; - case 7: - return CryptoCurrency.eos; - case 8: - return CryptoCurrency.eth; - case 9: - return CryptoCurrency.ltc; - case 10: - return CryptoCurrency.nano; - case 11: - return CryptoCurrency.trx; - case 12: - return CryptoCurrency.usdt; - case 13: - return CryptoCurrency.usdterc20; - case 14: - return CryptoCurrency.xlm; - case 15: - return CryptoCurrency.xrp; - case 16: - return CryptoCurrency.xhv; - case 17: - return CryptoCurrency.xag; - case 18: - return CryptoCurrency.xau; - case 19: - return CryptoCurrency.xaud; - case 20: - return CryptoCurrency.xbtc; - case 21: - return CryptoCurrency.xcad; - case 22: - return CryptoCurrency.xchf; - case 23: - return CryptoCurrency.xcny; - case 24: - return CryptoCurrency.xeur; - case 25: - return CryptoCurrency.xgbp; - case 26: - return CryptoCurrency.xjpy; - case 27: - return CryptoCurrency.xnok; - case 28: - return CryptoCurrency.xnzd; - case 29: - return CryptoCurrency.xusd; - case 30: - return CryptoCurrency.ape; - case 31: - return CryptoCurrency.avaxc; - case 32: - return CryptoCurrency.btt; - case 33: - return CryptoCurrency.bttbsc; - case 34: - return CryptoCurrency.doge; - case 35: - return CryptoCurrency.firo; - case 36: - return CryptoCurrency.usdttrc20; - case 37: - return CryptoCurrency.hbar; - case 38: - return CryptoCurrency.sc; - case 39: - return CryptoCurrency.sol; - case 40: - return CryptoCurrency.usdc; - case 41: - return CryptoCurrency.usdcsol; - case 42: - return CryptoCurrency.zaddr; - case 43: - return CryptoCurrency.zec; - case 44: - return CryptoCurrency.zen; - case 45: - return CryptoCurrency.xvg; - case 46: - return CryptoCurrency.usdcpoly; - case 47: - return CryptoCurrency.dcr; - case 48: - return CryptoCurrency.husd; - case 49: - return CryptoCurrency.kmd; - case 50: - return CryptoCurrency.mana; - case 51: - return CryptoCurrency.maticpoly; - case 52: - return CryptoCurrency.matic; - case 53: - return CryptoCurrency.mkr; - case 54: - return CryptoCurrency.near; - case 55: - return CryptoCurrency.oxt; - case 56: - return CryptoCurrency.paxg; - case 57: - return CryptoCurrency.pivx; - case 58: - return CryptoCurrency.rune; - case 59: - return CryptoCurrency.rvn; - case 60: - return CryptoCurrency.scrt; - case 61: - return CryptoCurrency.uni; - case 62: - return CryptoCurrency.stx; - default: - throw Exception('Unexpected token: $raw for CryptoCurrency deserialize'); + + if (CryptoCurrency.mapFromInt[raw] == null) { + final s = 'Unexpected token: $raw for CryptoCurrency deserialize'; + throw ArgumentError.value(raw, 'raw', s); } + return CryptoCurrency.mapFromInt[raw]!; } static CryptoCurrency fromString(String raw) { - switch (raw.toLowerCase()) { - case 'xmr': - return CryptoCurrency.xmr; - case 'ada': - return CryptoCurrency.ada; - case 'bch': - return CryptoCurrency.bch; - case 'bnbmainnet': - return CryptoCurrency.bnb; - case 'btc': - return CryptoCurrency.btc; - case 'dai': - return CryptoCurrency.dai; - case 'dash': - return CryptoCurrency.dash; - case 'eos': - return CryptoCurrency.eos; - case 'eth': - return CryptoCurrency.eth; - case 'ltc': - return CryptoCurrency.ltc; - case 'nano': - return CryptoCurrency.nano; - case 'trx': - return CryptoCurrency.trx; - case 'usdc': - return CryptoCurrency.usdc; - case 'usdterc20': - return CryptoCurrency.usdterc20; - case 'xlm': - return CryptoCurrency.xlm; - case 'xrp': - return CryptoCurrency.xrp; - case 'xhv': - return CryptoCurrency.xhv; - case 'xag': - return CryptoCurrency.xag; - case 'xau': - return CryptoCurrency.xau; - case 'xaud': - return CryptoCurrency.xaud; - case 'xbtc': - return CryptoCurrency.xbtc; - case 'xcad': - return CryptoCurrency.xcad; - case 'xchf': - return CryptoCurrency.xchf; - case 'xcny': - return CryptoCurrency.xcny; - case 'xeur': - return CryptoCurrency.xeur; - case 'xgbp': - return CryptoCurrency.xgbp; - case 'xjpy': - return CryptoCurrency.xjpy; - case 'xnok': - return CryptoCurrency.xnok; - case 'xnzd': - return CryptoCurrency.xnzd; - case 'xusd': - return CryptoCurrency.xusd; - case 'ape': - return CryptoCurrency.ape; - case 'avax': - return CryptoCurrency.avaxc; - case 'btt': - return CryptoCurrency.btt; - case 'bttbsc': - return CryptoCurrency.bttbsc; - case 'doge': - return CryptoCurrency.doge; - case 'firo': - return CryptoCurrency.firo; - case 'usdttrc20': - return CryptoCurrency.usdttrc20; - case 'hbar': - return CryptoCurrency.hbar; - case 'sc': - return CryptoCurrency.sc; - case 'sol': - return CryptoCurrency.sol; - case 'usdt': - return CryptoCurrency.usdt; - case 'usdcsol': - return CryptoCurrency.usdcsol; - case 'zaddr': - return CryptoCurrency.zaddr; - case 'zec': - return CryptoCurrency.zec; - case 'zen': - return CryptoCurrency.zen; - case 'xvg': - return CryptoCurrency.xvg; - case 'usdcpoly': - return CryptoCurrency.usdcpoly; - case 'dcr': - return CryptoCurrency.dcr; - case 'husd': - return CryptoCurrency.husd; - case 'kmd': - return CryptoCurrency.kmd; - case 'mana': - return CryptoCurrency.mana; - case 'maticpoly': - return CryptoCurrency.maticpoly; - case 'matic': - return CryptoCurrency.matic; - case 'mkr': - return CryptoCurrency.mkr; - case 'near': - return CryptoCurrency.near; - case 'oxt': - return CryptoCurrency.oxt; - case 'paxg': - return CryptoCurrency.paxg; - case 'pivx': - return CryptoCurrency.pivx; - case 'rune': - return CryptoCurrency.rune; - case 'rvn': - return CryptoCurrency.rvn; - case 'scrt': - return CryptoCurrency.scrt; - case 'uni': - return CryptoCurrency.uni; - case 'stx': - return CryptoCurrency.stx; - default: - throw Exception('Unexpected token: $raw for CryptoCurrency fromString'); + + if (CryptoCurrency.mapFromString[raw.toLowerCase()] == null) { + final s = 'Unexpected token: $raw for CryptoCurrency fromString'; + throw ArgumentError.value(raw, 'raw', s); } + return CryptoCurrency.mapFromString[raw.toLowerCase()]!; } @override From afa16fbe1c33a07b1b5ff5a8095ffa1f591634d0 Mon Sep 17 00:00:00 2001 From: Serhii Date: Mon, 24 Oct 2022 15:01:33 +0300 Subject: [PATCH 2/7] add new assets --- cw_core/lib/crypto_currency.dart | 38 ++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/cw_core/lib/crypto_currency.dart b/cw_core/lib/crypto_currency.dart index d348ebdd6..446c667fd 100644 --- a/cw_core/lib/crypto_currency.dart +++ b/cw_core/lib/crypto_currency.dart @@ -183,7 +183,24 @@ class CryptoCurrency extends EnumerableItem with Serializable { 42: CryptoCurrency.zaddr, 43: CryptoCurrency.zec, 44: CryptoCurrency.zen, - 45: CryptoCurrency.xvg + 45: CryptoCurrency.xvg, + 46: CryptoCurrency.usdcpoly, + 47: CryptoCurrency.dcr, + 48: CryptoCurrency.husd, + 49: CryptoCurrency.kmd, + 50: CryptoCurrency.mana, + 51: CryptoCurrency.maticpoly, + 52: CryptoCurrency.matic, + 53: CryptoCurrency.mkr, + 54: CryptoCurrency.near, + 55: CryptoCurrency.oxt, + 56: CryptoCurrency.paxg, + 57: CryptoCurrency.pivx, + 58: CryptoCurrency.rune, + 59: CryptoCurrency.rvn, + 60: CryptoCurrency.scrt, + 61: CryptoCurrency.uni, + 62: CryptoCurrency.stx }; static const mapFromString = { @@ -232,7 +249,24 @@ class CryptoCurrency extends EnumerableItem with Serializable { 'zaddr': CryptoCurrency.zaddr, 'zec': CryptoCurrency.zec, 'zen': CryptoCurrency.zen, - 'xvg': CryptoCurrency.xvg + 'xvg': CryptoCurrency.xvg, + 'usdcpoly': CryptoCurrency.usdcpoly, + 'dcr': CryptoCurrency.dcr, + 'husd': CryptoCurrency.husd, + 'kmd': CryptoCurrency.kmd, + 'mana': CryptoCurrency.mana, + 'maticpoly': CryptoCurrency.maticpoly, + 'matic': CryptoCurrency.matic, + 'mkr': CryptoCurrency.mkr, + 'near': CryptoCurrency.near, + 'oxt': CryptoCurrency.oxt, + 'paxg': CryptoCurrency.paxg, + 'pivx': CryptoCurrency.pivx, + 'rune': CryptoCurrency.rune, + 'rvn': CryptoCurrency.rvn, + 'scrt': CryptoCurrency.scrt, + 'uni': CryptoCurrency.uni, + 'stx': CryptoCurrency.stx }; static CryptoCurrency deserialize({required int raw}) { From 196187255fcd731decee29ce1d34dd321250840e Mon Sep 17 00:00:00 2001 From: Serhii Date: Mon, 21 Nov 2022 21:09:00 +0200 Subject: [PATCH 3/7] refactoring mapFromInt static variable --- cw_core/lib/crypto_currency.dart | 74 +++----------------------------- 1 file changed, 7 insertions(+), 67 deletions(-) diff --git a/cw_core/lib/crypto_currency.dart b/cw_core/lib/crypto_currency.dart index 446c667fd..b483f8aa5 100644 --- a/cw_core/lib/crypto_currency.dart +++ b/cw_core/lib/crypto_currency.dart @@ -137,71 +137,11 @@ class CryptoCurrency extends EnumerableItem with Serializable { static const uni = CryptoCurrency(title: 'UNI', iconPath: 'assets/images/uni_icon.png', tag: 'ETH', raw: 61); static const stx = CryptoCurrency(title: 'STX', iconPath: 'assets/images/stx_icon.png', raw: 62); - static const mapFromInt = { - 0: CryptoCurrency.xmr, - 1: CryptoCurrency.ada, - 2: CryptoCurrency.bch, - 3: CryptoCurrency.bnb, - 4: CryptoCurrency.btc, - 5: CryptoCurrency.dai, - 6: CryptoCurrency.dash, - 7: CryptoCurrency.eos, - 8: CryptoCurrency.eth, - 9: CryptoCurrency.ltc, - 10: CryptoCurrency.nano, - 11: CryptoCurrency.trx, - 12: CryptoCurrency.usdt, - 13: CryptoCurrency.usdterc20, - 14: CryptoCurrency.xlm, - 15: CryptoCurrency.xrp, - 16: CryptoCurrency.xhv, - 17: CryptoCurrency.xag, - 18: CryptoCurrency.xau, - 19: CryptoCurrency.xaud, - 20: CryptoCurrency.xbtc, - 21: CryptoCurrency.xcad, - 22: CryptoCurrency.xchf, - 23: CryptoCurrency.xcny, - 24: CryptoCurrency.xeur, - 25: CryptoCurrency.xgbp, - 26: CryptoCurrency.xjpy, - 27: CryptoCurrency.xnok, - 28: CryptoCurrency.xnzd, - 29: CryptoCurrency.xusd, - 30: CryptoCurrency.ape, - 31: CryptoCurrency.avaxc, - 32: CryptoCurrency.btt, - 33: CryptoCurrency.bttbsc, - 34: CryptoCurrency.doge, - 35: CryptoCurrency.firo, - 36: CryptoCurrency.usdttrc20, - 37: CryptoCurrency.hbar, - 38: CryptoCurrency.sc, - 39: CryptoCurrency.sol, - 40: CryptoCurrency.usdc, - 41: CryptoCurrency.usdcsol, - 42: CryptoCurrency.zaddr, - 43: CryptoCurrency.zec, - 44: CryptoCurrency.zen, - 45: CryptoCurrency.xvg, - 46: CryptoCurrency.usdcpoly, - 47: CryptoCurrency.dcr, - 48: CryptoCurrency.husd, - 49: CryptoCurrency.kmd, - 50: CryptoCurrency.mana, - 51: CryptoCurrency.maticpoly, - 52: CryptoCurrency.matic, - 53: CryptoCurrency.mkr, - 54: CryptoCurrency.near, - 55: CryptoCurrency.oxt, - 56: CryptoCurrency.paxg, - 57: CryptoCurrency.pivx, - 58: CryptoCurrency.rune, - 59: CryptoCurrency.rvn, - 60: CryptoCurrency.scrt, - 61: CryptoCurrency.uni, - 62: CryptoCurrency.stx - }; + static Map rawCurrencyMap = + all.fold>({}, (acc, item) { + acc.addAll({item.raw: item}); + return acc; + }); static const mapFromString = { 'xmr': CryptoCurrency.xmr, @@ -271,11 +211,11 @@ class CryptoCurrency extends EnumerableItem with Serializable { static CryptoCurrency deserialize({required int raw}) { - if (CryptoCurrency.mapFromInt[raw] == null) { + if (CryptoCurrency.rawCurrencyMap[raw] == null) { final s = 'Unexpected token: $raw for CryptoCurrency deserialize'; throw ArgumentError.value(raw, 'raw', s); } - return CryptoCurrency.mapFromInt[raw]!; + return CryptoCurrency.rawCurrencyMap[raw]!; } static CryptoCurrency fromString(String raw) { From d7d3b78905849c9a0ba554940e349ddec7654e5f Mon Sep 17 00:00:00 2001 From: Serhii Date: Wed, 23 Nov 2022 13:47:02 +0200 Subject: [PATCH 4/7] refactoring mapFomString method --- cw_core/lib/crypto_currency.dart | 218 +++++++----------- .../exchange/widgets/currency_picker.dart | 2 +- ...let_address_edit_or_create_view_model.dart | 2 +- 3 files changed, 82 insertions(+), 140 deletions(-) diff --git a/cw_core/lib/crypto_currency.dart b/cw_core/lib/crypto_currency.dart index b483f8aa5..bcefe89f6 100644 --- a/cw_core/lib/crypto_currency.dart +++ b/cw_core/lib/crypto_currency.dart @@ -9,12 +9,14 @@ class CryptoCurrency extends EnumerableItem with Serializable { String title = '', int raw = -1, this.name, + this.fullName, this.iconPath, - this.tag,}) + this.tag}) : super(title: title, raw: raw); - final String? tag; final String? name; + final String? tag; + final String? fullName; final String? iconPath; static const all = [ @@ -70,161 +72,101 @@ class CryptoCurrency extends EnumerableItem with Serializable { CryptoCurrency.stx, ]; - static const xmr = CryptoCurrency(title: 'XMR', iconPath: 'assets/images/monero_icon.png', name: 'Monero', raw: 0); - static const ada = CryptoCurrency(title: 'ADA', iconPath: 'assets/images/ada_icon.png', name: 'Cardano', raw: 1); - static const bch = CryptoCurrency(title: 'BCH', iconPath: 'assets/images/bch_icon.png',name: 'Bitcoin Cash', raw: 2); - static const bnb = CryptoCurrency(title: 'BNB', iconPath: 'assets/images/bnb_icon.png', tag: 'BSC', name: 'Binance Coin', raw: 3); - static const btc = CryptoCurrency(title: 'BTC', iconPath: 'assets/images/btc.png', name: 'Bitcoin', raw: 4); - static const dai = CryptoCurrency(title: 'DAI', iconPath: 'assets/images/dai_icon.png', tag: 'ETH', name: 'Dai', raw: 5); - static const dash = CryptoCurrency(title: 'DASH', iconPath: 'assets/images/dash_icon.png', name: 'Dash', raw: 6); - static const eos = CryptoCurrency(title: 'EOS', iconPath: 'assets/images/eos_icon.png', name: 'EOS', raw: 7); - static const eth = CryptoCurrency(title: 'ETH', iconPath: 'assets/images/eth_icon.png', name: 'Ethereum', raw: 8); - static const ltc = CryptoCurrency(title: 'LTC', iconPath: 'assets/images/litecoin-ltc_icon.png', name: 'Litecoin', raw: 9); - static const nano = CryptoCurrency(title: 'NANO', raw: 10); - static const trx = CryptoCurrency(title: 'TRX', iconPath: 'assets/images/trx_icon.png', name: 'TRON', raw: 11); - static const usdt = CryptoCurrency(title: 'USDT', iconPath: 'assets/images/usdt_icon.png', tag: 'OMNI', name: 'USDT', raw: 12); - static const usdterc20 = CryptoCurrency(title: 'USDT', iconPath: 'assets/images/usdterc20_icon.png', tag: 'ETH', name: 'USDT', raw: 13); - static const xlm = CryptoCurrency(title: 'XLM', iconPath: 'assets/images/xlm_icon.png', name: 'Stellar', raw: 14); - static const xrp = CryptoCurrency(title: 'XRP', iconPath: 'assets/images/xrp_icon.png', name: 'Ripple', raw: 15); - static const xhv = CryptoCurrency(title: 'XHV', iconPath: 'assets/images/xhv_logo.png', name: 'Haven Protocol', raw: 16); + static const xmr = CryptoCurrency(title: 'XMR', iconPath: 'assets/images/monero_icon.png', fullName: 'Monero', raw: 0, name: 'xmr'); + static const ada = CryptoCurrency(title: 'ADA', iconPath: 'assets/images/ada_icon.png', fullName: 'Cardano', raw: 1, name: 'ada'); + static const bch = CryptoCurrency(title: 'BCH', iconPath: 'assets/images/bch_icon.png',fullName: 'Bitcoin Cash', raw: 2, name: 'bch'); + static const bnb = CryptoCurrency(title: 'BNB', iconPath: 'assets/images/bnb_icon.png', tag: 'BSC', fullName: 'Binance Coin', raw: 3, name: 'bnb'); + static const btc = CryptoCurrency(title: 'BTC', iconPath: 'assets/images/btc.png', fullName: 'Bitcoin', raw: 4, name: 'btc'); + static const dai = CryptoCurrency(title: 'DAI', iconPath: 'assets/images/dai_icon.png', tag: 'ETH', fullName: 'Dai', raw: 5, name: 'dai'); + static const dash = CryptoCurrency(title: 'DASH', iconPath: 'assets/images/dash_icon.png', fullName: 'Dash', raw: 6, name: 'dash'); + static const eos = CryptoCurrency(title: 'EOS', iconPath: 'assets/images/eos_icon.png', fullName: 'EOS', raw: 7, name: 'eos'); + static const eth = CryptoCurrency(title: 'ETH', iconPath: 'assets/images/eth_icon.png', fullName: 'Ethereum', raw: 8, name: 'eth'); + static const ltc = CryptoCurrency(title: 'LTC', iconPath: 'assets/images/litecoin-ltc_icon.png', fullName: 'Litecoin', raw: 9, name: 'ltc'); + static const nano = CryptoCurrency(title: 'NANO', raw: 10, name: 'nano'); + static const trx = CryptoCurrency(title: 'TRX', iconPath: 'assets/images/trx_icon.png', fullName: 'TRON', raw: 11, name: 'trx'); + static const usdt = CryptoCurrency(title: 'USDT', iconPath: 'assets/images/usdt_icon.png', tag: 'OMNI', fullName: 'USDT', raw: 12, name: 'usdt'); + static const usdterc20 = CryptoCurrency(title: 'USDT', iconPath: 'assets/images/usdterc20_icon.png', tag: 'ETH', fullName: 'USDT', raw: 13, name: 'usdterc20'); + static const xlm = CryptoCurrency(title: 'XLM', iconPath: 'assets/images/xlm_icon.png', fullName: 'Stellar', raw: 14, name: 'xlm'); + static const xrp = CryptoCurrency(title: 'XRP', iconPath: 'assets/images/xrp_icon.png', fullName: 'Ripple', raw: 15, name: 'xrp'); + static const xhv = CryptoCurrency(title: 'XHV', iconPath: 'assets/images/xhv_logo.png', fullName: 'Haven Protocol', raw: 16, name: 'xhv'); - static const xag = CryptoCurrency(title: 'XAG', tag: 'XHV', raw: 17); - static const xau = CryptoCurrency(title: 'XAU', tag: 'XHV', raw: 18); - static const xaud = CryptoCurrency(title: 'XAUD', tag: 'XHV', raw: 19); - static const xbtc = CryptoCurrency(title: 'XBTC', tag: 'XHV', raw: 20); - static const xcad = CryptoCurrency(title: 'XCAD', tag: 'XHV', raw: 21); - static const xchf = CryptoCurrency(title: 'XCHF', tag: 'XHV', raw: 22); - static const xcny = CryptoCurrency(title: 'XCNY', tag: 'XHV', raw: 23); - static const xeur = CryptoCurrency(title: 'XEUR', tag: 'XHV', raw: 24); - static const xgbp = CryptoCurrency(title: 'XGBP', tag: 'XHV', raw: 25); - static const xjpy = CryptoCurrency(title: 'XJPY', tag: 'XHV', raw: 26); - static const xnok = CryptoCurrency(title: 'XNOK', tag: 'XHV', raw: 27); - static const xnzd = CryptoCurrency(title: 'XNZD', tag: 'XHV', raw: 28); - static const xusd = CryptoCurrency(title: 'XUSD', tag: 'XHV', raw: 29); + static const xag = CryptoCurrency(title: 'XAG', tag: 'XHV', raw: 17, name: 'xag'); + static const xau = CryptoCurrency(title: 'XAU', tag: 'XHV', raw: 18, name: 'xau'); + static const xaud = CryptoCurrency(title: 'XAUD', tag: 'XHV', raw: 19, name: 'xaud'); + static const xbtc = CryptoCurrency(title: 'XBTC', tag: 'XHV', raw: 20, name: 'xbtc'); + static const xcad = CryptoCurrency(title: 'XCAD', tag: 'XHV', raw: 21, name: 'xcad'); + static const xchf = CryptoCurrency(title: 'XCHF', tag: 'XHV', raw: 22, name: 'xchf'); + static const xcny = CryptoCurrency(title: 'XCNY', tag: 'XHV', raw: 23, name: 'xcny'); + static const xeur = CryptoCurrency(title: 'XEUR', tag: 'XHV', raw: 24, name: 'xeur'); + static const xgbp = CryptoCurrency(title: 'XGBP', tag: 'XHV', raw: 25, name: 'xgbp'); + static const xjpy = CryptoCurrency(title: 'XJPY', tag: 'XHV', raw: 26, name: 'xjpy'); + static const xnok = CryptoCurrency(title: 'XNOK', tag: 'XHV', raw: 27, name: 'xnok'); + static const xnzd = CryptoCurrency(title: 'XNZD', tag: 'XHV', raw: 28, name: 'xnzd'); + static const xusd = CryptoCurrency(title: 'XUSD', tag: 'XHV', raw: 29, name: 'xusd'); - static const ape = CryptoCurrency(title: 'APE', iconPath: 'assets/images/ape_icon.png', tag: 'ETH', raw: 30); - static const avaxc = CryptoCurrency(title: 'AVAX', iconPath: 'assets/images/avaxc_icon.png', tag: 'C-CHAIN', raw: 31); - static const btt = CryptoCurrency(title: 'BTT', iconPath: 'assets/images/btt_icon.png', raw: 32); - static const bttbsc = CryptoCurrency(title: 'BTT', iconPath: 'assets/images/bttbsc_icon.png', tag: 'BSC', raw: 33); - static const doge = CryptoCurrency(title: 'DOGE', iconPath: 'assets/images/doge_icon.png', raw: 34); - static const firo = CryptoCurrency(title: 'FIRO', iconPath: 'assets/images/firo_icon.png', raw: 35); - static const usdttrc20 = CryptoCurrency(title: 'USDT', iconPath: 'assets/images/usdttrc20_icon.png', tag: 'TRX', raw: 36); - static const hbar = CryptoCurrency(title: 'HBAR', iconPath: 'assets/images/hbar_icon.png', raw: 37); - static const sc = CryptoCurrency(title: 'SC', iconPath: 'assets/images/sc_icon.png', raw: 38); - static const sol = CryptoCurrency(title: 'SOL', iconPath: 'assets/images/sol_icon.png', raw: 39); - static const usdc = CryptoCurrency(title: 'USDC', iconPath: 'assets/images/usdc_icon.png', tag: 'ETH', raw: 40); - static const usdcsol = CryptoCurrency(title: 'USDC', iconPath: 'assets/images/usdcsol_icon.png', tag: 'SOL', raw: 41); - static const zaddr = CryptoCurrency(title: 'ZZEC', tag: 'ZEC', name: 'Shielded Zcash', iconPath: 'assets/images/zaddr_icon.png', raw: 42); - static const zec = CryptoCurrency(title: 'TZEC', tag: 'ZEC', name: 'Transparent Zcash', iconPath: 'assets/images/zec_icon.png', raw: 43); - static const zen = CryptoCurrency(title: 'ZEN', iconPath: 'assets/images/zen_icon.png', raw: 44); - static const xvg = CryptoCurrency(title: 'XVG', name: 'Verge', iconPath: 'assets/images/xvg_icon.png', raw: 45); + static const ape = CryptoCurrency(title: 'APE', iconPath: 'assets/images/ape_icon.png', tag: 'ETH', raw: 30, name: 'ape'); + static const avaxc = CryptoCurrency(title: 'AVAX', iconPath: 'assets/images/avaxc_icon.png', tag: 'C-CHAIN', raw: 31, name: 'avaxc'); + static const btt = CryptoCurrency(title: 'BTT', iconPath: 'assets/images/btt_icon.png', raw: 32, name: 'btt'); + static const bttbsc = CryptoCurrency(title: 'BTT', iconPath: 'assets/images/bttbsc_icon.png', tag: 'BSC', raw: 33, name: 'bttbsc'); + static const doge = CryptoCurrency(title: 'DOGE', iconPath: 'assets/images/doge_icon.png', raw: 34, name: 'doge'); + static const firo = CryptoCurrency(title: 'FIRO', iconPath: 'assets/images/firo_icon.png', raw: 35, name: 'firo'); + static const usdttrc20 = CryptoCurrency(title: 'USDT', iconPath: 'assets/images/usdttrc20_icon.png', tag: 'TRX', raw: 36, name: 'usdttrc20'); + static const hbar = CryptoCurrency(title: 'HBAR', iconPath: 'assets/images/hbar_icon.png', raw: 37, name: 'hbar'); + static const sc = CryptoCurrency(title: 'SC', iconPath: 'assets/images/sc_icon.png', raw: 38, name: 'sc'); + static const sol = CryptoCurrency(title: 'SOL', iconPath: 'assets/images/sol_icon.png', raw: 39, name: 'sol'); + static const usdc = CryptoCurrency(title: 'USDC', iconPath: 'assets/images/usdc_icon.png', tag: 'ETH', raw: 40, name: 'usdc'); + static const usdcsol = CryptoCurrency(title: 'USDC', iconPath: 'assets/images/usdcsol_icon.png', tag: 'SOL', raw: 41, name: 'usdcsol'); + static const zaddr = CryptoCurrency(title: 'ZZEC', tag: 'ZEC', fullName: 'Shielded Zcash', iconPath: 'assets/images/zaddr_icon.png', raw: 42, name: 'zaddr'); + static const zec = CryptoCurrency(title: 'TZEC', tag: 'ZEC', fullName: 'Transparent Zcash', iconPath: 'assets/images/zec_icon.png', raw: 43, name: 'zec'); + static const zen = CryptoCurrency(title: 'ZEN', iconPath: 'assets/images/zen_icon.png', raw: 44, name: 'zen'); + static const xvg = CryptoCurrency(title: 'XVG', fullName: 'Verge', iconPath: 'assets/images/xvg_icon.png', raw: 45, name: 'xvg'); - static const usdcpoly = CryptoCurrency(title: 'USDC', iconPath: 'assets/images/usdc_icon.png', tag: 'POLY', raw: 46); - static const dcr = CryptoCurrency(title: 'DCR', iconPath: 'assets/images/dcr_icon.png', raw: 47); - static const husd = CryptoCurrency(title: 'HUSD', iconPath: 'assets/images/husd_icon.png', tag: 'ETH', raw: 48); - static const kmd = CryptoCurrency(title: 'KMD', iconPath: 'assets/images/kmd_icon.png', raw: 49); - static const mana = CryptoCurrency(title: 'MANA', iconPath: 'assets/images/mana_icon.png', tag: 'ETH', raw: 50); - static const maticpoly = CryptoCurrency(title: 'MATIC', iconPath: 'assets/images/matic_icon.png', tag: 'POLY', raw: 51); - static const matic = CryptoCurrency(title: 'MATIC', iconPath: 'assets/images/matic_icon.png', tag: 'ETH', raw: 52); - static const mkr = CryptoCurrency(title: 'MKR', iconPath: 'assets/images/mkr_icon.png', tag: 'ETH', raw: 53); - static const near = CryptoCurrency(title: 'NEAR', iconPath: 'assets/images/near_icon.png', raw: 54); - static const oxt = CryptoCurrency(title: 'OXT', iconPath: 'assets/images/oxt_icon.png', tag: 'ETH', raw: 55); - static const paxg = CryptoCurrency(title: 'PAXG', iconPath: 'assets/images/paxg_icon.png', tag: 'ETH', raw: 56); - static const pivx = CryptoCurrency(title: 'PIVX', iconPath: 'assets/images/pivx_icon.png', raw: 57); - static const rune = CryptoCurrency(title: 'RUNE', iconPath: 'assets/images/rune_icon.png', raw: 58); - static const rvn = CryptoCurrency(title: 'RVN', iconPath: 'assets/images/rvn_icon.png', raw: 59); - static const scrt = CryptoCurrency(title: 'SCRT', iconPath: 'assets/images/scrt_icon.png', raw: 60); - static const uni = CryptoCurrency(title: 'UNI', iconPath: 'assets/images/uni_icon.png', tag: 'ETH', raw: 61); - static const stx = CryptoCurrency(title: 'STX', iconPath: 'assets/images/stx_icon.png', raw: 62); + static const usdcpoly = CryptoCurrency(title: 'USDC', iconPath: 'assets/images/usdc_icon.png', tag: 'POLY', raw: 46, name: 'usdcpoly'); + static const dcr = CryptoCurrency(title: 'DCR', iconPath: 'assets/images/dcr_icon.png', raw: 47, name: 'dcr'); + static const husd = CryptoCurrency(title: 'HUSD', iconPath: 'assets/images/husd_icon.png', tag: 'ETH', raw: 48, name: 'husd'); + static const kmd = CryptoCurrency(title: 'KMD', iconPath: 'assets/images/kmd_icon.png', raw: 49, name: 'kmd'); + static const mana = CryptoCurrency(title: 'MANA', iconPath: 'assets/images/mana_icon.png', tag: 'ETH', raw: 50, name: 'mana'); + static const maticpoly = CryptoCurrency(title: 'MATIC', iconPath: 'assets/images/matic_icon.png', tag: 'POLY', raw: 51, name: 'maticpoly'); + static const matic = CryptoCurrency(title: 'MATIC', iconPath: 'assets/images/matic_icon.png', tag: 'ETH', raw: 52, name: 'matic'); + static const mkr = CryptoCurrency(title: 'MKR', iconPath: 'assets/images/mkr_icon.png', tag: 'ETH', raw: 53, name: 'mkr'); + static const near = CryptoCurrency(title: 'NEAR', iconPath: 'assets/images/near_icon.png', raw: 54, name: 'near'); + static const oxt = CryptoCurrency(title: 'OXT', iconPath: 'assets/images/oxt_icon.png', tag: 'ETH', raw: 55, name: 'oxt'); + static const paxg = CryptoCurrency(title: 'PAXG', iconPath: 'assets/images/paxg_icon.png', tag: 'ETH', raw: 56, name: 'paxg'); + static const pivx = CryptoCurrency(title: 'PIVX', iconPath: 'assets/images/pivx_icon.png', raw: 57, name: 'pivx'); + static const rune = CryptoCurrency(title: 'RUNE', iconPath: 'assets/images/rune_icon.png', raw: 58, name: 'rune'); + static const rvn = CryptoCurrency(title: 'RVN', iconPath: 'assets/images/rvn_icon.png', raw: 59, name: 'rvn'); + static const scrt = CryptoCurrency(title: 'SCRT', iconPath: 'assets/images/scrt_icon.png', raw: 60, name: 'scrt'); + static const uni = CryptoCurrency(title: 'UNI', iconPath: 'assets/images/uni_icon.png', tag: 'ETH', raw: 61, name: 'uni'); + static const stx = CryptoCurrency(title: 'STX', iconPath: 'assets/images/stx_icon.png', raw: 62, name: 'stx'); - static Map rawCurrencyMap = + static final Map _rawCurrencyMap = all.fold>({}, (acc, item) { acc.addAll({item.raw: item}); return acc; }); - static const mapFromString = { - 'xmr': CryptoCurrency.xmr, - 'ada': CryptoCurrency.ada, - 'bch': CryptoCurrency.bch, - 'bnb': CryptoCurrency.bnb, - 'btc': CryptoCurrency.btc, - 'dai': CryptoCurrency.dai, - 'dash': CryptoCurrency.dash, - 'eos': CryptoCurrency.eos, - 'eth': CryptoCurrency.eth, - 'ltc': CryptoCurrency.ltc, - 'nano': CryptoCurrency.nano, - 'trx': CryptoCurrency.trx, - 'usdt': CryptoCurrency.usdt, - 'usdterc20': CryptoCurrency.usdterc20, - 'xlm': CryptoCurrency.xlm, - 'xrp': CryptoCurrency.xrp, - 'xhv': CryptoCurrency.xhv, - 'xag': CryptoCurrency.xag, - 'xau': CryptoCurrency.xau, - 'xaud': CryptoCurrency.xaud, - 'xbtc': CryptoCurrency.xbtc, - 'xcad': CryptoCurrency.xcad, - 'xchf': CryptoCurrency.xchf, - 'xcny': CryptoCurrency.xcny, - 'xeur': CryptoCurrency.xeur, - 'xgbp': CryptoCurrency.xgbp, - 'xjpy': CryptoCurrency.xjpy, - 'xnok': CryptoCurrency.xnok, - 'xnzd': CryptoCurrency.xnzd, - 'xusd': CryptoCurrency.xusd, - 'ape': CryptoCurrency.ape, - 'avaxc': CryptoCurrency.avaxc, - 'btt': CryptoCurrency.btt, - 'bttbsc': CryptoCurrency.bttbsc, - 'doge': CryptoCurrency.doge, - 'firo': CryptoCurrency.firo, - 'usdttrc20': CryptoCurrency.usdttrc20, - 'hbar': CryptoCurrency.hbar, - 'sc': CryptoCurrency.sc, - 'sol': CryptoCurrency.sol, - 'usdc': CryptoCurrency.usdc, - 'usdcsol': CryptoCurrency.usdcsol, - 'zaddr': CryptoCurrency.zaddr, - 'zec': CryptoCurrency.zec, - 'zen': CryptoCurrency.zen, - 'xvg': CryptoCurrency.xvg, - 'usdcpoly': CryptoCurrency.usdcpoly, - 'dcr': CryptoCurrency.dcr, - 'husd': CryptoCurrency.husd, - 'kmd': CryptoCurrency.kmd, - 'mana': CryptoCurrency.mana, - 'maticpoly': CryptoCurrency.maticpoly, - 'matic': CryptoCurrency.matic, - 'mkr': CryptoCurrency.mkr, - 'near': CryptoCurrency.near, - 'oxt': CryptoCurrency.oxt, - 'paxg': CryptoCurrency.paxg, - 'pivx': CryptoCurrency.pivx, - 'rune': CryptoCurrency.rune, - 'rvn': CryptoCurrency.rvn, - 'scrt': CryptoCurrency.scrt, - 'uni': CryptoCurrency.uni, - 'stx': CryptoCurrency.stx - }; + static final Map _nameCurrencyMap = + all.fold>({}, (acc, item) { + acc.addAll({item.name: item}); + return acc; + }); static CryptoCurrency deserialize({required int raw}) { - if (CryptoCurrency.rawCurrencyMap[raw] == null) { + if (CryptoCurrency._rawCurrencyMap[raw] == null) { final s = 'Unexpected token: $raw for CryptoCurrency deserialize'; throw ArgumentError.value(raw, 'raw', s); } - return CryptoCurrency.rawCurrencyMap[raw]!; + return CryptoCurrency._rawCurrencyMap[raw]!; } - static CryptoCurrency fromString(String raw) { + static CryptoCurrency fromString(String name) { - if (CryptoCurrency.mapFromString[raw.toLowerCase()] == null) { - final s = 'Unexpected token: $raw for CryptoCurrency fromString'; - throw ArgumentError.value(raw, 'raw', s); + if (CryptoCurrency._nameCurrencyMap[name.toLowerCase()] == null) { + final s = 'Unexpected token: $name for CryptoCurrency fromString'; + throw ArgumentError.value(name, 'name', s); } - return CryptoCurrency.mapFromString[raw.toLowerCase()]!; + return CryptoCurrency._nameCurrencyMap[name.toLowerCase()]!; } @override diff --git a/lib/src/screens/exchange/widgets/currency_picker.dart b/lib/src/screens/exchange/widgets/currency_picker.dart index 9f8b9e493..b785378c5 100644 --- a/lib/src/screens/exchange/widgets/currency_picker.dart +++ b/lib/src/screens/exchange/widgets/currency_picker.dart @@ -56,7 +56,7 @@ class CurrencyPickerState extends State { .where((element) => (element.title != null ? element.title.toLowerCase().contains(subString.toLowerCase()) : false) || (element.tag != null ? element.tag!.toLowerCase().contains(subString.toLowerCase()) : false) || - (element.name != null ? element.name!.toLowerCase().contains(subString.toLowerCase()) : false)) + (element.fullName != null ? element.fullName!.toLowerCase().contains(subString.toLowerCase()) : false)) .toList(); return; } diff --git a/lib/view_model/wallet_address_list/wallet_address_edit_or_create_view_model.dart b/lib/view_model/wallet_address_list/wallet_address_edit_or_create_view_model.dart index c9d2c77f5..43db6099f 100644 --- a/lib/view_model/wallet_address_list/wallet_address_edit_or_create_view_model.dart +++ b/lib/view_model/wallet_address_list/wallet_address_edit_or_create_view_model.dart @@ -30,7 +30,7 @@ abstract class WalletAddressEditOrCreateViewModelBase with Store { {required WalletBase wallet, dynamic item}) : isEdit = item != null, state = AddressEditOrCreateStateInitial(), - label = item?.name as String? ?? '', + label = item?.fullName as String? ?? '', _item = item, _wallet = wallet; From 0fda0531507073286afa7a21c64163aefab87cb8 Mon Sep 17 00:00:00 2001 From: Serhii Date: Tue, 29 Nov 2022 21:53:07 +0200 Subject: [PATCH 5/7] remove Hive from CryptoCurrency --- cw_core/lib/crypto_currency.dart | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/cw_core/lib/crypto_currency.dart b/cw_core/lib/crypto_currency.dart index bcefe89f6..686064f09 100644 --- a/cw_core/lib/crypto_currency.dart +++ b/cw_core/lib/crypto_currency.dart @@ -1,20 +1,16 @@ import 'package:cw_core/enumerable_item.dart'; -import 'package:hive/hive.dart'; -part 'crypto_currency.g.dart'; - -@HiveType(typeId: 0) class CryptoCurrency extends EnumerableItem with Serializable { const CryptoCurrency({ String title = '', int raw = -1, - this.name, + required this.name, this.fullName, this.iconPath, this.tag}) : super(title: title, raw: raw); - final String? name; + final String name; final String? tag; final String? fullName; final String? iconPath; From 292c4c396cc2a313d3b3a352c10bb8caebbe39d1 Mon Sep 17 00:00:00 2001 From: Serhii Date: Wed, 30 Nov 2022 21:18:12 +0200 Subject: [PATCH 6/7] remove HUSD and rename BTTBSC --- assets/images/husd_icon.png | Bin 69161 -> 0 bytes cw_core/lib/crypto_currency.dart | 34 +++++++++--------- lib/core/address_validator.dart | 4 +-- .../sideshift_exchange_provider.dart | 2 +- 4 files changed, 18 insertions(+), 22 deletions(-) delete mode 100644 assets/images/husd_icon.png diff --git a/assets/images/husd_icon.png b/assets/images/husd_icon.png deleted file mode 100644 index 07102709970f5fc88213eec72059a81f5220634b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69161 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 i+(ZGhrYBPZw8~94mZae_=sZY!cAl8* z`VJRBSP|=9mN(!BZ8^{Txpz;#A8tKr6Z(yeCFJ4ZbieEV5aVDjxYDAC^wn-qNQUK!`vWiF>M@|-Dm9-0)+VoZ zVM&pIz@Q@SlX^i%5JU;k0Lz1zEo&F8+^(vPXR=gzCcF*tet zZTR&y%PnkG+&Sp+&16|WB-))Tz*#F{S;e27^C_m`jPF>)(WDg)Pp1zvg_dE^YDkp2 zm(o0Xjtw9C24?J+U9E`ywu~jrj9a@6lbtyVCfzfNq&S@X#IF=?M)%lYfBMy>_zdYS z%Pfk0Ui+`bB=l0L|L}1UR(y^STqOr08gh;FlaXso#^1LM5iarGvs!>u+F*{0m&9$> zP?{YX_!K0H@jqd~NOvUCs))Ga_y6vlmMD5#1ODk*Q2+%}{qUVB349@0;kfi-e3Pai z%V+}*A;3)ZtR4zHajARqS+nC#laqMq3wauv4s zK&R$o@I}GhB8}xjjI3Ok z;FY&dIoRnX?78`GHZ|^75Ye;tg7g*~gd!@X8_WG71DKc~i0UazLc~~^@dKi(Fbq3M ziW$atCp{_QV!EP|Eeq^yBFGeloyNG4J<#W#jWRPk*cpbeu)QAEZyTvvATTlZxKixg zk*N2Bo#8MdV7d7U)v+Cvu+5!L*Kjmw6ba&$V~H#0RdGx|gX&xW_& zf(^h#_g`#qRzS2v5oAp>KEwImbX78u`uOI^0&$hfy@#KOlI{#`tuFHLS zzf&Y4?H-&RIMWIK3aF-U3T?P2&Z>t6kfCoa?Dw(w<$q$N6ub>U;i^$Mh0U(grc15e zfJymXp=$@jr`UfBW-XdooKtLM&emmEHY?mrf8ibVw}nM9Btg(7fM|qJn|-(SY#T+G zGtLPWfR7Kre_5?ju@X$PzjLaNbUwlfv07PD98@bns#2bF3Bcq@NX&QJ7j->9r8(qZ zeP-raX#bP%V7h68x~-+o#%mAyMz~ zy!KdSgQ5l6li9`%*Ff$Co<7_loZ``MLQFn0PwuzlDrp6-`=d5y9YTD8PoTGBA!p2) z1dQ2)wtUBOYd#m(AJY;SIvzSCFHw54b|?f=HPd7Py4YRLc1ql}B=`ydMtK-Q%K@>c z6Fjk_!M>+rGb00y1Tfl6M6Sz`E`|j0$dCBYK2AU+W3y^n0iZAKRB{i4me|wb;4R|8 zt${DlqnH#dJQHHDm=#|uEsbfB7_xtC$}zRz`?y4<=^?LoA7vHR-s>@WQe4G{rRP)I zra0@UOh0^&BJ8w1`d&)FInyY+S(WlUv8M&U$0gD_?>lh9Qg-#eDy{(Ox<1w;YD|2| zxA>*8zFe{P;Bc44h;&%U+1QT#*<-x2rq(WV8XKidzZI>$UAZ8Q^BIpowC0wXpOhc?FKvD05z92Ex4SAsFQhcP2FKdQj(ie9$mD-W zG>5gt2ui-|(AE{Ii1sh63-ORg7Wa`2ef#XzN5NM!JET7fJ%C<$HlxIus2U2Mn=ZS$2-x_lKXJ#zhCujP z>7$x@Uvp>XWGqkRz+?z&U!iL88H71i@s;$&*UCtO+V=U>ifcLZ5uVv4X>UmiwTKPb z@-(1YjYfms55h4;$f*ZwmT=Bog>NOUpg#rqRwGLxM4|(D4Eib|hagM~bTc zMte26lt6T_nK&ACn0;vYZEm?Q7!=tfRAA=e&_m)}&KZO#O=hP{*=hp$$8dYJl1hO= zxnj*h^=BRIDKux|VpfwcQ;?S}0*AWck9GP;mIa{vhw{nyx(i&7PM1IH^$$ZfBPzhN z?O4Lfg>kjvkJpX~$bfs%%!e4@5xA+6PuvHxDQPUE=P4F>MFgEbV~%iGZK>)DpQ9sp z-!D-s@7L}Nm{M;<&HltkJKBQvjnw@9hxWozEW1(%aiFpLB<%i2vcYQJj}4(=yX9oF zJA8>o&!#>0A_-kH{9nxy*w{q5w`NF0p1SK$v^PTx;eSJjaL6}3EjhZ)HU({b&ZH-3 z56#l#M#wrSG6TxG8ke9cSMrl)S&pS)r#l&Fv%U3kl9)K4*FHp5<*-*{b?NQppkK`( zV%T|_i7@Alegih@MW3?!Eq(&glJPg~XQzaMv}-lWk2D|MZ7+PQ+#ZLo=`y}2@d<(O zQmM~7%5}(WINZ}p52fPOPya`%=PNNtb|xaJeCyC~i-Mn3yPL5s4UkqI6qkP$MaYD% zrCiRO)~F~aIAuL}GV^1Wovs>?WRj%o7zP#A{3w9*k}0Yk#zZr1nN>&>Wh=U~wtbFDW37F%DOxwjNPKt;Dv%{B%;bviE=JV z8EBkz1=$kD|XvkTg(^0_} z()=P{28nwgH1VZ^|mcgoT^y@Anj1<-;C%HQUeMTgw6H#%o zxsuR8M-Xaw86!Y)?fdHr{6%GTdS#$bf6cg`KMK&G^8K+@ic%v+z8j& zmlMD7^U_n+s|VN;QP~QcEvY9fM+x{Fa~pmoVfWB!5U%wSjwwH`9B3>mEtyu?i_JDW z%yF|=1>~QC$_OXX8@VIIJL}2a<3(A^SUUp6@PTjSC_R1gTATO?)Ro2$C_U9rZskEk zngBggoYjA2fS+X3XK@uRAyepjHRd3J;3SbN`E+8+)4CENqr@Qm^kn5&_C*E*)sO7= zGI-Bj+hMYszMUI({yOTq7Ku$;k#5)GS)$xtzZ;*6X9O3O!T7G#%tWvs!yb`fQ2Jpe zeISWg8!3YX=*BX6;(ez|3pUl%l{3@%I(~*<3NZ$TV1rB_Gld$*nXMqAmpP2;yy3+V zPJU{er3JKoZG?+C%ZdKSDl(R_-1}{WFxrbImM6x-djI{{ekiB%Q==A)d3X1zMbk3Y zWUv5|Sd8dQDF%usL1&y%p5KTx{LZm7oI)#_)ux9z;j8(}DkJDl;fR96sG%pe8Ez6%gj@9pM)Z6|cc3cRd%G9b*+!Gw_5_%;V0U3;fr$4}b1 z8USY&-Eu9anO406dg$}Z z)xW~ijut!L$wLcCG>_yBPg~@~qmR(MyK7)rn+i1*&D;abrxWQLGeba3R4SlgM@;nY z6et?DAX(X0)s&W_x}1|=oWbpGfZom(Xs)j}njal=>2EGq!v-0S?MS>%Aeal*J5Fvv zB~XdF-xJYCot-92u0l&0!A7gVpz`59EpecG@lfJ}vuQUQcZ2fGx9+Vfia#_MXohN& zP4p_gLNT=3mUqJN%o=!yZZPKyACn>w_IZzP)OjQ4 zu|p76h@c;x40zsfqNNE@M4f6Xs6Fi@4uX&BZ52N1X7Giy7>Q{G-N<%Z-c!{zsGRA` zIH|1{foAfV>~OB8nY)^xsj6k^c9X%+8}636Ve5s=U3`J9r#bxQ95%v44*YS-x3I4s z_<$>|KKf(D)q4qqt&e-MptT)Dd0l|FJBe>b4P%V*;I~E^gly`y&wUbhCG-SDOo9fL z*_CqC#_%&n@`c&iM8F|I;v1AppxjirSkQNhMlea+5w|VgT3JyVk<4lLywJ7_Jk?{; zP`LzKrxT4LBq&oYW0f;!dnEAH^hP4J;Fn3M|2fu}4gWY&dL5m;nMlwp?;Zks!!%;R zt=Kq{kS^mc3yu*!E~`=QdcaBndVGjJ2h;o@A2Sl=2O3FCVQz~WS}zfz{&&BDjqp#W z%jDUl8gl5P-N>7>r$_VMBw;_SRB`%3h#;&K1NpFFwg%M>7mpqik72Fjdf?3#d>x}E zZ$CfSq!4$ehCFL0gaA^a{X;r2f@z! z5f&E%4#&1_bIX3<=eN<19W}63Y&?V(BJ$1D)cvI0cfnBM-?qGV_{#?9RwY<5$NQDu zNV}9E>4bnYjHr%(PKOFp!(t`@F&W!387}b6W)& zwzNM;)uC4P@8QNLnGaCRFg2(T#On zSnrk}>p)yNN^vP`8az4#;fsrxeEDa}VVW=4G=8De)R^5+D|X#W^Tg*k_cz$GofamG zB$|#=mK31{y;$ww>O(q!P4XsdHXfhkcIuXaEdZKlapYNV<`Pak zW;}UglpddqUoX``V!nfbXAey1FN;S7dE2faPu5!W%OmkJ;JJx%@=i}J&9MW?Lm-$x zBn3OVpXp6{;;l#OSuXC|F(QYDOd$vV$TqU7=8@=!V7`2FV%6g_U9iw$7t?w+xuZbRO z1IEjmb@8{>V-rX>P~c!iYY|8zt2$(TWliKsJ#3kW#IWO7(*PfR(zdLIEz>Fs;3*ub zmchhjZ_i(-jJ{iCPdpWvZGwrr>crE4%A7_MFa)&~a1M!c!B9ESXElN|;tIlaRRrEx z3~|=m*FVHCXT_)P=luo=(ydOhX2n7ptKkpAD}oWb9+aRv?+n4q%fZk$bj)M$#V z%}n=@>#Q2m>Ke6V{f+zHy5YjyEp<{Gq(C%EBHEp_9*sn@dPgq&?KiIvD0I7Cg&}}( zBdbmTa0G(ayLTiwbazyJjp@{##m&TUp|E{GKYaETK4OZ?c9gjSO1(GxJ2=Wc64MDW zCi|kDwY9}p%(?vhkSEr>2FXfmBdCrb3+;q- z_L&A%RZ|36y{e~yZqa9OKCC*{oHstnMgvO-qd(Rnf7+0&YKM*&!I&naEs7iS>AUrX zsgjg_b4x=%^}7c zw6CS7;Y8+VM)nm1T@~E}WbB1FJcc~}v9DK>7(^NaqjGjoOSf{_VfPh4#=ta-FAcQ? zQlo}2XN?%uygKJ&3XWq7^0SREz71UIsI*c>>OcOvPY;}}DyBK<%72n4<&ivU-sbB@ zEC+$2 z#?~oKEEuw$DEJ9+s<5am-L#MP`Uu#}(}~$6du$B|qn}F%#pvbSk5( zurW7H5}`>9OpBdjaX978XC*93Ri9yKSb#Hh27305-}GwSkF2vuxn0@ea7yFn>zEg+ zc9=+MNd*l^G*4PQ+=JZzX(3JzFdTXZ87R?bGR$Z-RK2OsBvlVXrFUQhq9u@6`{Ypi zTsNLY{rKNAgUaLFRxJPFaoN^Vh^e@|-mWCRk`BysPrCUZj4g6(Mng6vXnxx{goqi1 z7Lsl8t#$V>O()bR#vUC0n5!iQ%Q>C4rksu3n|U3nGLmnGT=&zc)E;BK*w0`~rA2KU z5v4zqb(4*I(OkK3X7{w2F`EU%^qJ2GpJXr*#90?3zv(He> z(pm{CZoQj%aJaB6BLd1uRAIiEo|L0Oo%I;?Yml%%+;iIm3OOPhaP!g%K)bJv4bT30 z!_m+Z zJ$e?~!gcdLuGNuL&CLOHoL-0?a{W$M+EJ=qXwV!cAlO1wh-~i zuYveTHYxB%j4`pv=<&##K_H5O$wUk_8>Nwi3JuZzwQ~u__v$0C1VSRDrAjB_-FE>9 zHo|5v3tjRhXQfy)%?a_YWBWw6Pg06MtP0yxH^K()g+jX`W|d9b92#Lr7d8YwA>1>X z;HlUe47^on1UStAej&vz$E=*gIlth;gh^eQpdYT`Eo`JIEm}Q{HeqK@{Vk=l+N2x2KAF z)DGtb3t~1tNOk@1V)H#@=?6ZJqk1Z#;R%=|9D&K! zs=Rp*CA)8$Az9)qBy^W(_rtccuYar-LN$Sg^d<#L4^-*4+c`gh316IPiIRY#Bz-f8ggItZ2JHcyZh2snZR{`h7$ILrW;zT6mUw;N*SLCD z$a3P%;~uT;OE}66-fl_NiCGE4>)jOZDb zMgE~1XS&kdZ@^?cimh7-di!Sf#q3{2Z^cT!} zu&>gYT-jxIue_ELi0Xre6@{oGcv*U7+dZwR`h8 z*@8tK=A5Pmj_x>gN$K#;dVI5PNQe|#*uIO=a_?^re(?(RqkoYPNCr(^x zG~qkzwrTEj&Va(9uQ{J9wn4mmK6aKi1)pOz|4*Fd@3)a^8R}*QG9bvbx%*;m)jA9z zWf<4TN>4)Hr=s5An@QLKCH-mJGB`;hG#7J|??X?wtj3QPw?zc%a1!YWV;JsIZ+)6u zy8FJ%Q9!67CH$YEck$w}~6 zO=4_u`pR0qtyJhndew(DN^FNFI`U7nH>gc28F%>t$uJd&EuEg&jeUiJUpisVql#~a z8W4>R`v?u=Mg2h!ANEWrq!fgZqRuP3HS-hHUWSgy(9#eUAC=pCRP$x&ksrT*o2y(c z0B5TNmVyn0q%I3@zG>^s$$^WVYO}SAyw?`8O z7-4#C&d}^a@@U-5`4=*Zj22`N6tnOWwIfZROyP}Xj4x3!Pxbgx}@hlFkM zmmg}dt4cJq#ME|?K{TQX!=`$+jE-nasF#WRZ}_H{PU$Z7%9WNWyZU&t%+7@FNN&nR zxr2^;LVP#0c-~dXzbQg6moTf5qAOWrzU6D)vC^-%J*oMaNC??-H+#U7PSBfW=X^=% zM0h6%sA<>l$Fh;9-ZZM;J}T>P5+$Bx;>9yrOH~SHGIeT_Z#5QlQzVQ+cAP2gkH~&m7I%kJAoy2_DzO&_X$L-XlL!D!XwR;OjIwiPsohI@` zhX=U_G4`CcP5By8^V7I8Yd}#10;luDUY}z2KeBsks)nm&yxVu}s2n}~moB(X&{Lt> z>*>xRVTkRyj}U+e#7m+swZpUGqY3pt88nUZFO!euu+I2*Q*y>uPdY3d^pKxJ~JWfFJ;DO$WCJpS)K!oZN5@-un+PRb! zH>OX`?`sng1M49Wgeu;Y`2^4YlC^B_IR|BLwAZ^NKq^ep=9}>@6Zi}2=H&4Fj`cbS zcF@mor)rM^K1#uiYS%sr24kwB4@AJRpK6%T(b!ziPgwzw6hbQx>k={hVI2&)CAL!^ z-~~g>Q1Axlom#tk7GMB4Ck60_IH_iV4|NSdh$5IXkVUt*C=Dg7CqRq^CHR`1PlnbV z=)0G}g`gP=IgZzq?|KNWkVV+%F5gBgV)BLj<>nax9oi7a1K`TU*`K#BufvIzYRacs zqj*@tbFPXOS&8v3T}vI86*m4d+#7smMf0l*l7XHZz+5Hz-yY2lvmV_mwD=kVK#Xf* zmriWKw(@0%7wvhs1nn@l=JicYtw7n$hPmVty|{bn8Dd7Ei#PqZW$T7(1>_CKqit-8 zuEoDdS>%#F6PUO7!Gj=imBWjtHoRK2Qt)KxzTMBZM$-!U&Kwa;DX?Gm>e}|BYQKuM zuUGz*#MIHwW@;}velWMX#NTn~iw>JTFg9yxUlT~N^foj^U24GH)EoVEso8VepOS31 z3gUjTfp4bBK_@))sshejRF8n&wf?LF<%ndI&P*-kTI^S#yABhL)?pBls3HYb!0+PR zmsD9L3Yk8@sP2K*RkFO{kTCZ1EabDKT6Oh~VA{pS0TFtDp7W%Lpc#iJVyv0rkkG#{ zjc(1lZgE;a#;~^yQjRup0Pu zJ_F4Hq@A=cV$j$JD(V|)QjFkC{Mx!5f4*;|L{gA*@rA-FXsjm?J~K^(D}C!{K5SUb zGQSfb57o_A=@GYWR?vGijkaKBb*KJnP`U4O_G2&r=z}sBj4x<{CC&$2SQyZxE1;g_ z71Q(;4wU9S>ZB8{(E?klUU&>b$<%X6vrYSSCle zkpItGD{n$$ewN=s3c5;9TSoUCz~E24U`n-XDy;jj2clT+chXLuFV%0Mq(LuOD&yz$qX<)Gl%%j}w)#!y-CvG8`A> zO)GyFW9^z%Tj4qA!fV*P@y+w{QS7=B+1ZrIF^c4fREaP2-n0I z)N;4^)q6JkKB>IWmW+JTvqSpS7`_ld?Ef(FsaYqQ z#8vG{vR{Hb(fy?sQ~bQ%N0~G4Ffa1XDwyZSCs+Id$xioa*sx5i6#c@}B{5$zyeu*=ir8~tAYj4Dy=^sj|+2LLNgSkp&SbjbF43{OSLoDdTJi%Dw8+m7PGo6 zV148{sH^>^A78}je?72zsH;aVAR?%_GfosUlh>b9w4?9gPDMtfA>TEOm`rJ`c2VcO z$Ay2Q`3L>Jt!-9`*?f|Aq8x-S;~E$+h_vevb_f({f`?cGBwN z&`~&n@cOgkR0L-_c%?XY+0ZF|x~^ss$9h+b*!=UlzZw3hG7aI*DgNRfCO>KOiJ9-1 z-y$j_x8?}PvzYu}Z=tdq-;z5O7))VQG=a4TC#sTAArbzv9v0=i41w3}th0y3s%L)B zPqAZ0l2;sYb_-TuRl6GizQQ0g@sjTgue%E9dIr>&@^Z6QYvAZopEPM4e*WVguWO$F zpthCjqTd#o;P7lvq|@pr$)~F>Obp}j^DE#u?#6jr<4&xNTN_E1=S@#w_#o;{kNtgl zi*KDc_CdpaN0%hCf{AP~_U|4*KJjza!G&G`;APO8x$*H9uyiOoKhX(4&3H4)7gG7! zv`4|P7xkW@As7G4-#1UmM~0Ezow1a>T(1Y##bx_YpAdo2dM3ADeTUU1^mPDuW23jL zmWM^m+z>wjGqk~xB$gJ6l$*oIi~r9ZScUCHc3d(s;#)>GJH}B zon*nodvO$aXo*$#Ef_{&x-#776$7V4Ff*arHm}# z7D)RE5Wkz@nkuP!@d(PpK{CAhwOI8L0H0CUR0MsLJ-cCMl*ZCc#nV0l{2$>EvFcyK z>F*GyPmPKdp^_?z8&k?tFnB49lfM&zPJx~dHLkYCNRN2?>pZPIs2li-1H(pGL*Y| z;j94v{W3#)IpIxQB8`qTW~%cB34y81|dkm}gOSp%87|(W8=?gM4xj z3$Dz-2b{^LLqeuDcgWDwCy%JCnCEC2ASN&6x^@v4Qt&#@bh`a0o$$f+Ekg2n13_HGCJ;@tm1cW=od;1M_p2$|JV5p5 zQ%BO+mxk^L6?8uoFr;E5hkg8@TZi~5iJ`|=vWn~Te%>luE~W|{V z*MYWV+s4O1-Y#8{D(LD0_)F>)Jflk>Q|xYz{c0F-IE5$4;3x1vAVD{3E8;6j2>ZBi zVLm+mZ{EUG_z5?}Z)mwpALv!tv@jv&EFGq21HbU}tFD{7n6IRJ51ukE4Awf6-zmllYGC}_1GCVpREl;!jfmbuBGp98 z2kSm%7*0O6>*PKjU@z%U&^ue$ZK)p8!(5-lE4v?Cyz6O+%C-JvnrwZf=~CyZCud0= zeCspyzIiT1oRd*-*r*lgGyn@AnJJ9^y9{m+5mkjbCyX8@7#KZe=u6fer^WVXxbD@R zE?OVL`*nYIdQ{!ru;U8UmF6)zVV72${CTNH-t(dg|f1M-69a_&RG(jsCE?M%b7kwJhAl-q-!0tl-?V*kkQ!*0c(B9%o-f zB{C_q~?Go;+c6l*Ol9GZ4d?CSR&*wNpH%xh<#zmBsbytJlz9E3;*%gjzHf9sf zCkmcNh}&9$M-b!;$fcINPWjg?YpTs2v z`x!GP0uLrnA2Lq-)l(<{o)QBIeMk1i+POCYd?9M??GtfTw)PmmL);JDH?m5UQ}>q2 z)ip*ILQ;mMjNr*D2B(X?${^v7YKoEkZ&Ygr>@}uY3-0O5JNr7f5 zsxt<2KLz39;DQ0Tny)1}oPhWoX$!wehE|*E3t2ztM`edr-vqctHZRS0 z+}aRf)IcieTQ@ptC(@tY+ElXm|GWk4Og*{u9l(baaOSiX#vXNmEnIE{#4>mO%8IFD_o!W%!U=NjeeW z=y5PIq>1|#Es1?xm!v_d+}tAHf9d4&G-Rh=zfsQgz41_g6ok2HXY1Qnf7`RqVCY$Qn4U{q`)lFFb zssh*>5Pp2~KL3XM_C;xyj(KZ3P-_HCRDX%K#JOl=d+nc@YmHY{m-9bqES|Jq7*hvg@hW+Cch@wx{@#|Ip?4xYP%6AI<%6-M(J3FKl1kJ2R<`$# zKVjYf)D^dAboG|Z_-`L>d#u3JS7B2kU)OJ0`FiLW*Jxo`Vo+b4s%yF9W{Vi9x4R)N zSwV-Nv#wd%Zz60XfNThIet=_JL$~%nBgcg}FN+e<88Bax$4JBI`oZ4#Av6dN>Z$DH zNcdh@dO}B?tF%$wOPNI&j68x;rmkC7y!NAwp(~fTyWLZEGOX2jtKE!idsyFoNR{FD zb7gEpU5&x668?ArltXx~`maed@8aV`)L8)QjxpjQU(XzAT(rQ#yXL;iWxcKmpC%*Q zw_={aHQZ4BHaYJj(Ytw~bO4uL3n?8D`xaE0;v&R}tx}{;+pE*-*@G)yD(6dDEU9`j`+n zFY2>no%hhj{y6BDmk-TqU!FL4fn=?nUcSg<9ZvW++KlGYOF|jz|IBvJG`TXc#Xe!{ zwYVV(UZ2MXd|*qy$71I?iGjrngnciEG;aGpakF}?D=-MbpVYCM7Uev%+jYspAnGH# z#R`KW+gtyaUcPx@s*bRB@O#`hlm&^xcLYmAKD`ohtMFYqlRXg9}HAn`R* z>?-G{bK_dT>i5;ClS$&#=HR0f9^XWu25g;Cl!G}FrN?&dGIjfdY+R8sVY`UkJKReI zoHuqArKHh&!V2D!y?;x=53MLYQDCgDCk0u1&f6w5?tCQ6XRR!@F^CT!CoY4!5{!DK z&?#T9oNDcZ&)2O32VLSY#NujaZv||6z}Q%&{uT$t)2#geEP2zEDpqpxw@0mOJKOgP zABrg!zRa2JPnXOz%Hzhy{D%;6v54OBhAeM-@d_?mAq|z>aa^wYih^4|^p6H#rFUe3 zeA`WgF!MS2>r(ibFlPE7Bu>GnVY7%Kzv_QA*QZA)b~s^ryz_op^j;oIN&XzJM~Dw4 zB%Z$hgY(Wi9u*})>g1D)uP0esy{zB%fK4PuI7$drg*XAR?>ffW)TX(w)%cnZ^rwvv z+Q^;T@&BfC46qC@>Zrfh=sMlJtiugo_LC}mnR8i5#sL8TBLhm3A{B)R?`8M$Z0oOE zuqIPHc44^w{Nr=m*@Ru?2?!YYk%QD}2B6=~-(}kwF>N@n0+)T>xAj}&CZudZ6yZwN z{ZfJFXtyXi;DJuR1bsh0gWuv^1;&9#=q$;*J8kPfU6T*(t$@uYDCXZEJ4E_JDysUkYpfgBarm zThP|2%xqyIYES6@$JKKO)ZD#)6GDp@m8M9977eAPkozV@QQAt8riS*ChPM)FX-8V3 zqNPp4tJF9^U1iCA`+Q}Oh5KxjSGx3UNGqrUWZjC91Z6|V>f+o!H0V(2w>rwZ47E!?7&C5c z5LtJ$PxrpP_$B@x;?^xlCHx}jS`-#v?anaT7^9m)=(qA2d9%XceCo3@(@F8@?(piySZO?TPah6q91d4QUH;-7x|LvL?jm|}=IIdY{(q@_}3W3tzCTF$hJVhnG3JuL+;p`@SlM&T{J{x~k8FJ;GJ zML#rtkLjP4z!`;c@n4*;cW7Aq_cxkXa}Q6xwm=Jsqi;vB)Q)zJcJ62@`NcY~Uvw9f z+l>Je>3xmhD|^94uw=Uqe?wE-Ff8Z7uA2L zi=&HvniJ|z62d=MEpo^h=V*S(Z^w>Rl7H*?W53hBRO93J{511qo~RGto5 zz`6E`;jm41+#nnMAIX#*w7A^UyAXZp-5^F7q&l8qTW2S?5quyxE2E#t)*`2LLWh-}vNHdY5Ep~1>-!TbMi67aU7DXl-U&;IH0#HV>ss~< zYY$Dci&Gw{%xK5==1*)aH{g2CTA<6Ui^S2@M&W^pEz^UX_iB_c976ytpS(I#wkL*G z-1K#Im0LMIR{JrS-2?B8KGX<1jHAx_vQn${itmS6R|T<~QbA^!ko32izVgoS0L8)z zzau4DG77f^%;hqzMtQ+#z)}Wd$OjoOuM?9nyLF^%mgVEb?hYo8yoCDPKJwKRePT1 ztJbyfo9s@`9gtP7P^hwAWKUr4m1R6kTVovUwRq3cow8z&qRO=D-gS}weZ$7FC_$&j zD)E!P7J5T&+fYNyD|ZXojqU%4mkAc%_W7k-kPCaxHY`vjN`Q;+yRpy=;gXh8-*coZqjOj>jOS!B;mpGfB*x*gz&SlY9=_KpQBX%fjauh_;d^#7nL zydWpwCP$Dpgi98P*Q7hdcINd2IN|Y8a__c(U&iNL>o;*MzmLPb@Su)Iu-~fxrm$PkuGE3f(-}_3@wXoWt z{bpw!XIFF;IEQ0BX#UMv&8Scr+b!_5FS(+4C zNqqW}qq32eGQz|ACb>C2a^_KvK`!nu&%vcn*nQo5(k@2r4J(8ew!4pzd6a7q+|Xd6 z$LvtVYU#z;-VJKCeI54tD%(Q-XW1pfs4ena4fjQ~AKQ?-pHyMSL)NBQ^_l+T?7wZN zM8)y@4pT5zGUmj)yQR&!sSW@woT(q8T1L4ooIK&BKjb@+Ee1$O!Lg!`!O8G%1zbkx z{v;ZB#ul{u|lag3v4~3J>P2f`-aIDk~)dPCSg^X%$~}} zE+y()UdC{hM@gR)PkN{}#&UM588<}Y&``?a$*OS8{CvflcTsS z(e=V@L*-E`Gf>@vtSQaX!m(NMjr*CV(`H>w$wAR(*;^px2UM>#GO^mtb3^|GghPL& z)NR&pT1=~=JuUG5}o*!FJf7EBY*+>z1_9(!wxRnHr|=hy34lpods45lU{AnZR%4SswmPz_s`&cNM{eH`|z3{6^HYOE}u=3 zz@zL-3EyOShoTr%v|imMb(>LbLi$&p&arI4Xt*I3N%Lz+bhgUGl)o6^nk`aEgBF3( z&)%9F;$`qyb1i&qR()%0o^~{Vg}qgHeWs|<&VUMwabSLq~asSIhXQvcs;X)KNRIXXZ(@Fi~q7J`Hcc6aVuZ~u+sxS7-?$ikCYwk zg|BopK5%zIkHWx*UWsupsB$J}o!S(#M7u?)OkNqpM`H*a9Gdo65J;k`k`#m#nv zuec7_5`F$lT7mj@@bc}%R=Z)dF29}_a8Va1 zf^bsQH58+CVnK}1q4~c7KVG@`MIc(CYgn1i9x%p+fgxrt8 zKG&Pr)V9ax8BmCJf?$mGv9bEEbzjfbNYN5uH`DP9Ca#>@7{%WYO)kf*P#6GZlh#e7 zT{}&b1>I;@cG5Cqa@2cUJIq;wd?nVq3%I!Zrm|I?Tu18N{`y=;3Yv3EdOs5>whaC| zr#vP@(BjCyQ9aRGQr(*%p#@em$J&JbUI_}HYJr#ol~Fx0d|QxxA=FB#(k6o=>K#k8qA{|LAA>GGp1 zK~x+lJssntNC>WE6*dtoine7Y?|<4_b7xwBmJRX6@2v|#cy14@GDVNt`{$=e=8D2a z6^(Yxvd%|UVe2TgyDi*gG{FKWD&_VZz5j}@l`i>V5Zlt_01BEDOU>;V8tlt*EYFsw zGX$0Y(ov>TNhJDR|BeYew7rMfS%~6#pp-dCH{`eNb#mlMIHm3SX?xrTBf4fJRcW1Q zIFG$=6;G($+Egw7if@W<*7|J~1LBRs^;q{@X>@jh)uvI*m;TaJ{-Ba5h#H55Rgg2n zn0>knw122hz$?^tJQuE#_2DeL@d1)y=#!t9UHD%tc5zvE{BNy} zHWR1cG{cdsGK*g8o*=$Db+7|h%noV>A1O*jQv3syH@vPYs-ng&K}#;I;hM{oZGVQe z;Lo;|7j~a%2^D(oXLcMVz*HPHKR={M|H05gt3jKV9CK1)?J=~Zk%&$>8Rq@j>@~qP zGwznq1xNs8EhxS#wCbeo|6(Y(EGIe;2gf08+aT!x(Hbxz0TV?)z;8#U-fT+eBPZp) z)hezt!L&nRA6?7;%nwViIvt*?U{qW!J!YbY*>B=;-b>k;lr9t0jsJYK{Fo-Jlp^@L zTXWAl^BtJphkn@VJ+~Jd4psJoKIgxvJDyU#?0)C23LEqSAagLD8ZpJj42hBSF;%H< zPcXRiWhSNJuqab?g%}OS)PF1kR-|J#m>S_^cm0@1b%ym0H!HTy7@~9e15|$&b9`nh zpC)`P`h!SzwjAeM{Cd#B_z(H%z6U99OLO8>?|ey5W}VNzj6>oF16qe~Z~o!6DNVT4 zhXM76fKChn_yFTzBEiJXRKcq`QZ!yZ-lPfAd(7u!s#j_2d4OhiS?ES{q=^aEDF0-R z(rskn>m51O3j||m&Y~eHOevkGu!%>Wf8)BXzizn+KaY}$n=c!kcivGFB?})H{@*nq z8C^yZf3V!(-(MjM>@$ z<-1CpjI7p_NOIW8$X3FgY13$0Ot|12ka*w+A*b9d1Jefl+6^$aLE?jv1o6^OeTJ|- zwmQd%H-$b%9u8yIrJ`l=;Q)#h3CeM`kU7Yw2#+r@E%u4AVl$oF*?@7#lY@%Z*e)(_ z^J-#&2NTYM?}GvB*t_65TM8j)_zT~xf`ufuo7r@6PV+w^qnlCiQ8tnkMt4}5xZVwK zaB>q=h|m_cGnVo=z;Zgu3_HUHK&JTe%$cUhOZAUTW2-+FeHsMT z!QSC@J5Wn3AZR=bqfdT#KUtW=Bg|!i8GcxWQt$sk@Z=>uf#oD8=FP>}cCB-69ly`% zcl%85KQjGN5G&8sQ*|DG*oF;(-C+I4ZtF!?M`o&~$mzH{%W3r6u_y`G+)&FHm{Z;2 zu_L0|u0nl=!~6oq0nq8+y)mJ<6atCEN6DygaF26AP4#AfK&>F?`1FtD`yRa74Db={ zp&LupKiKmmuw)qaw!Xc?DsVb{{ZOe!mPqpG0q5m#6PZ#iR; z*cfRU^I1XrR<33~o(lT`{Qq#_Y+TDnuI*vfc9VRww&v>pp|s)2xBU2Hs_?}iRKXZ! zml{-T`mHM@^R!}q3A%gBnO@9S5sfiKKfZ$YzIF+D=h6-kmR&R?woq6dxfBm6 z1#`>4RXD3dBVRV0KKa*{^G5&3v}8pq!;gG`0e=kO+Tk(YtRWaM!DvSLo)!&3^<=g>`AO##+XIWnAmM2E#I% zxK!TlgFZ7t1h(YuX{irX-`4D?4-__b4|3^9%HAh+OW}W!K&VLg3D>{~M@`kJzDB-P zImBt8hSeApfumTG&>Svy(kSrr)~3n~CJ!?s44k;T$GO05JeH3=V1 znHxs`T_h&cijj+%E=agmMO5#W_kWkT*(a4e@S;E6Z1R}{jesaB#lB?_B}Qb}8UZ96j9E`;T2kRww<1i|b6 zC(@Sd#?zx){xZZu)*Kt}-c{IKhP_+@oiAfa$VMwEOvQyETR)`gGE-|K#y zOqpPGTs|(J50=4p{LO;{rk_CNLr6W&o z0`M$4i8SYBY`+MbrQ*09md|lxBNiFxNJS}MV%z3f9ht3s$h8sP_}+-ZRk`q^J1LsK zxtF>62rNxeX+CD=>FeJW|E-L(siT`^jV_Lw*f_cv8EqHSz-;(;nEY^(HzB3j@XMVW zE*}8F54E9byJ+~$3B+d12}9yQ{;NT4vENiaUO4#|-w*4}%ZveKEw{>9sBSVdXSUf!v{ zQ*=lB_Ndz*3!{`R>F8FZQfP|9?9IXpl)^==PKJj+Rc_tE`Z~)u@_=zjV^DjjrTlZ+ zx5C_J_gS|X$(`9_D7XJFgTf^V6^B^qCd1GOuejmP`5s~qA%8@TBAZ^&EFB!dIh zq=B8CC+QtS&TC(sBqh?ZGzce9Z?(hG4Si=rxXzD>(>sKm?x}}8wp%&OAMZ*%}vorcBoqb64toG2j;9|m7Y_Ayq zhr%h_NqE(vf1&};+UxA3M9wPg@e}>8ASKuAmU{gn8HHigJbaS=x=dEMn>F=$pbEH$ zqn5<>pV8!4%0Affj?Olu@N%pGsgM2-TQH1Sm#7!5_Wk6sPa%_-AWqPW_h{xvObnmH3en|JA!(KVf-lNtg+8L_ES#FAmSC zJa~L7&^n~>x{g$~Yh>M$9L*mQVocF|;Um;3^$B-4t@G-*02kWB|3hN7G(2}NqEGqC z{OABbce3Du!T-k~M|0|e_yb@^F+M7AWR6DuVy#RUCgSfu<4Nx~t!os+&}5vTU!mK} z56X=Xf`*1yWPbiv5f~bl=q*BcGmpw9x|VnMDR5$nKwU^+0$rjo?QaL4_pULC%8fUf z)Mn2xBA$9vb>E_0w;;`z64cR2+XV=rjD@dU+c2pJm0Th_#UBGJy3uv~I4jalBXT}L zHv264t593s|xgkIB~Pm`$0eDjf|->EkJM?@F99NpE120rbpMdbiA#D@0ho8MD7Y?yB1!A~WL)oGi{uO55j^y73*F950|I;6o?XqcoC-iIJn+A8ctER-zk_W zh%l8gkefG$Kr$*3Cl0}cz9XL{hsRWNyq>MbZ}KXq3?_77BCvX^o$C@i%W02Y&Q34R zD24bg^3VFD_(e`k@7(lTdw?=bd#bD5xCP>F{~MBYSv^I9@xc0~0MBo08s0=5&J#2n zJv8no^%!Hz&?Dy65W?Pd+r5}Ps3QOG$?9WxR%7B%qgtAoZ_=TEXom2_(%`l0;V>Kb zU_ZS^hzMt|yoWN`KyS`-Qy@i^*NHhl-85dO!ji#bnsI)1R)+D&f2kP~IH`_rED()m z6y$0Ucf3G_?3Uujv6!J?YugsbWtAF|bl3cin-e*~QaWSZ;9wX~Lh!QB-(y%*CwBC25Tt zk6qswNYPvqj_c(}_et58z>`+nqI4^Qan_hotQ`G%3w10f&7fCw@Jq z4n)62#Z}uHvKp}bY^XKy^ zgm)zYnwGvI!FXmJCl%*h)3~hFg^(muGl!m?hKrGY`zf>s5^-xYt6t_(qX? zXWXx(MrXS0-*g`ByWEk1h0xTUsO1<%1z6v=l_pE=43}mB^#>?$E7?&>pW!M=vf>F3 zU#Q>5)6(q!1Cm=4^?t%Lto@5LIAgGIjPb%cJzjjX?{|{8w;sedI!IbgKjThzk>dF? z@n1J?vBUfR;lVRz{+&y6$lxsEav-sM&x)Ok$WDC7oc_hKey{Cdh4A-&385`Aw^>4X zq@7Ea3uej}p8N3%Nd-l~MHWOpU1x*>eDnpu@7YVf)|{H!4E_{gAhq4Mxhw4o&s+$} zSu|WUWmH{fv)4nlm*V^G^WbStK3~hD;oBf!Gg+GYG0*V#kpYET@1G|*lR9|qLMPnapSXhsJ!AkBHr$x^c|Z8xmkZz6@hUog)?f>y2bc;BWkj0L z%Y-CRJsKL;<;?nxFM*naozQDB^n`~#&%H;7^F;h?0_6C=r#x2iiFJCFs2C!$FgO^` zYPjg@$GuQEHVHU^jr}jk z&i-Ua1;DvbmmJ|6$s`^4XY%)GB46d)MQVWBwG7vB)@;l(`d;VDhHo4S0N;s{dB6r5 zbsp{u%>{$YJda?b1D||QyoIdyx3KTWTb2pWlAde@@PbHZ%oWZn^De58puuz`@2{?@ zjkNTlAxYE6#E8zSsDStli19ifB2s&|zjt(gglAR63ND23rbOzga@x$h{7c~l2!`F0 zyt8T8mkHmv`O#3_d(PPnq_3Eo7^nllTPe=!PnSa?PT{>~mE-EAihp=a-*(1|KWJOd zM!707zJ7`F7YnjCw0mx9KH*VzCl0<)xG3(tKw&QUAF2D94c(fdHN(xsm`n*&X%{=)S z{6d-G;y#+K6t@M+!kWXp?>rCQd2H8;Gz0wxHD{rcv)XqSY+t#gSh%@Pkz+s38>uq{ z)Q9YZOoo!;s{IEbx9p7L(&tQwcX*5o9HDTWwwkt zUi@CTeuPbm2hZ9j{xv#ZLI>x*i4&V6cepHJhC#uP2T#pUco6CSjhk91-IHD%-s_@# zBY?u9p^!Poj}yfo>H&AcD7d?dIaWXVb;1&;4HxYq>-^YG!Jab>WlE*2t?o{3Y^r)O znwal1PErvz2Ojpc)O{Z4TT=F8T%T@myv(UI|5SGZAkRty ztNV73A<0?6mj|z~#_R0-&U>4IIzalvA7lk~RZwe)*n zgxTF;#aimq5(OKpkEYXSlO24w<3p-TBx5JPZ^Cv1mXR@*=*@z7&Ss#eTqfXT??1DOJDUfErs5*pTs=D388?_LwJaH1=sQKjR!5yCqI?Ek9T1 zJ}?T@^{Xps+3d#BvKk!&Bp`qP`mue0%A?4e0b>SGY%MpjBU|Eg!+v~Y(%z=wfioWQ z6%3y7o**5Bzs5DS<0Ks&OdS*d8d1+6e8`Uz(?~GO@0a;~3dwgXAg(@LQ=S!u09v*yD_+V82X&lwY-}j4^nO}I!W13!ba$x6_I}JCsQ-th{yWm(o+t@Z( zN_(YPqH=JD-v-d2>MANNs>U-B}==pY+Y6ci}U zW9MY0IfAR!=>H2|aYYXQt8d#Z-KG#8Q~Q>>IU7$+8~;t^`ACsr=^MRL`T}clR@;Cw znrmS_KZUknq5k6oXwtAty>VFBgy{(|U)WxuV885VpHlE%mrl>gNL1QARbau< z$@g#Ci|K#)>Y&r2)+vuZ7u}yqAxVAL1mkuZk{B6o;=Xr+TZPrDD>)#8d|wW6_QOv-8WD^ypjs?n9ZSWV#~BN%H| zJNolUorE9pAtwViExB4p8u$?;@beJDsla#|iMX}<0r!9>Hx4?xJW=4p zmWNf?+j^y~9EuFk6v^jhEnbWi0_cdiS8Rl))4CbJiO-gAoQk};*5^o7JFc1uG=tXJ z?TMCV@Wf#(0Aypgq&)PuIaM1Mg1Lv(d^nu!aC+M&jAmeif({cj!6v@KJdsC3llCl| zF}{LlgS>XNv)UG@8$Y=ClED{;I0wABSi^{tkzmV20*;o-)_ZpT%>#CY+dBe1WWO7$Bfz!LF5W?7UPs4~=dg8QgbmVtFMvV7Fss z@<)MaZ*#=cLpV>XSJcRFk^0G2EQCXNXz6s9wovWHG#V_X{tdF@8cGzwO$JeE*5N`mKy<$M#@-F%FT#n9iAgwvjd|CY^ zElMYmD@DeenhlS*HJ}aqW`K9ck(&EYuFy3L~hmH zZP;Whj5bkUmwPMByHoab@g~H4WJ#7x*Ge0J8%Yd%AbQ~(QWTC;_5mtJ6)@bRnxAR6 z3+6Vz92xv+<6qR`#e}h~+?qj1$ib(5_6loiH?1gq_* znc~NPTnC%0t#WmhXj^$rEdbAv*(0}3Gai7-Xxdw_IDV+h)y{udki!P1XQ1h)48Hlc zFP~+u1LRMe&1Ixe{xY@+nG+&=B;KM-5{e#yNRU2nHZ&koJJ*K4)8agDa3J?#WGchz zOjc#CMbmWzt&aPZ)v~)|v^B)`6${5vSF8?_Cw<*}#^ixK)1weit4JCg53nJicQ{5i zLN6P#y(h3j@@vo{FZk4Zg(T>mr&Tbqj+6Nl;8v47aRdyYjj8tUsd)u&8#?q&835a-VK7GdYwwa zegv55bEjwPKPVMc{}hjT3gXpKedzVp73#C+lod?(?6%#|R& z6GGogyL_@hrkq7>G3pFY#7|$K#v%cz-}c!So7L0p=Mb2|;4I-&g!j)}h9(@QN??cg z!K;vk#MjiB%VBqtQ_keO++rSM2JpdSkXnU=5LG`pEHOUVZu%Ik?`@^sqs|bqRzbyv z!!2)?0!1B~aO`nEQt9eXtBE7@P;tIoeh+&#ELNU}v=G@J7DuoSb>Y~QWh*0Vw z4u(E}s?&f$8ZFe3iWJNVc25v(eOCqJR2g1~pLz^mdcDj6N)z}bTEYC1jTZ)WfWD5z zdJ=RE9>{R!5kD1Wp|zn3 z58_T%;%LMO2OB&8eWrmBt=s%Js8VryM*v4FK(e4!MCHqytOT{Yz%5V)k+`ZowI6ct zIs(!ck_M+}G!-pU8>4mpg=uNj2c4G`25?IRhG}fOU?HOhGL^~11J{5c4%V+t!&T!9 zBy6()qqft4%u=TuO?7DrI2=kn-Yd}zTfM;njLNuv(Sz&9kB0(!uxxYpy`Kl=yO*tK zT%kx#WdJ1-UAP%p`{}(kZ05>*XSldeWY73xM#PE4fC?u#(K|o>wxL#ACkJilZMvFl zWhnasBwQ7e3#}66N8R7LNmSm82)GI&R<_J`QE8m$xKO$`%4@rrp;}>12fCx~ z?<#T9lfZdYDFGOySRqkfk(&>G!;m=*!JqGv=HfD3^w5J3>;ih=SZVF8imqif-2}8Y zq-Y8?UJKNEI{^GblBJ$X-dvX5gw!W+2{E(^@-(5Iy@pzIApmD-{Q&WA)GHvb-X4~gTw6IB2n3a@4f0P?>> zkvT`B8wl&;m&`u>m=E(N{nA6#V(&GeU+62OOTv|dJj~D00!EME%h8}Jzu+DH-xU0G zTqUCNDL@tYW19PGrrPGQdp0DB634E#l5PCQ z1(@Ry@+igGm+xw+mN*4ju>o{Mxx=4GE($Hh_2*K+MnqCU$OBn!CCsQmu8@QzR;_f8 zNwk`dHKN|zQc>nW^Ej9DFhGSeK(2*Tb)><6tSx0as*+)Tj^)5J)m-KX>V=R9_^=O# z!NA-jZzTi{*Sc>Z92G|dN?Uu+p?W5Rt)8m7-u3eP@=%!TEAw3Za9G6xb4e)7WND=* z;*9!U-4H8jt9pq@ORpzJT0#fp z;>x{C?cI&qp2SUVx(rC8^1#AtXg^H42*cNRaGq}cPD_g1gD-U0kp!D`VizGJ5X2*# z7l-rf)lxeG6u>9Z0%9H?p=doFJtoV!kEn-IZf9!6uh(~96_M(F`Y;!pp{-8@e4`wP zOa2)RR{?~%CJiy5d(FvXvKm)Y4hddH(2GOXrR;|94$sbmE7xt656((vuOO#U{-8kYi-1%`RXj{f@;1}%$(gaeruPP+9hxKL z>9fKKnZPmtd0v;a6_*y@c5SL^|CExAZjrHwu)SQH}T|a)9>6RnZBiG)M zA0}F^RtBJM4UXF8Dr(ABMI$ae3cn>ECO`*g*dGwZ-}jf<$6Z@BHxRV4>*a;XX-idh z&Q9&*5M~)Pm%&=9?2!8SK7ls0A?0hGr2bkZ0!=ZB1h}li>EadZQ?gwBhRTQ;Kd+^v z7Z8;8qlrtxWiz*^kan3K{ihB;aBk?N-c~fp@n4lZ4{r6kGy#-z@+i0a$1(B=o{iX3 ztH*%gM+6vGTq6Tc0u0}z-2$JwVecN^0&M`C!5z1g>UC^7p$ODiiuL&m8*2{$sJwaQ z=28omOP)YbXH}=O=|rf~wz~A0ma1)codi zw4~u&B!az8ws2~yS@Y6KX{CkFh2Y97mvxqG?&6Vw;t=PPsQHs4!XjR=6&oPbc0C&M z=K1fZV9}7I+-8E`>*e^*ORJ2=f>8j)>CS#Yp7tCRHjoOXx0UiXk6Y-SLK~Irf21lZ zJ7@?QJ7hX9-n;7fkNcIlBBX)u+jMr_8*_V03u!l0Bv2RA3U`ki?*W*>SQl5i-3=%g z4?%(mNMDhdOY@5#>khocz~(x;QPfB26OSp+z_YNm7w<38>Zzh7&;PO==ksZs*Z~I@ zZV>oEMGFfh-WR93bcU9Q2#038&T!0)yYqBT}kh?2Q_I%sz5iZ-#f>Sba) zqpdI!EWTf>#ofcnspxCKaWuIwh?xK2{oHY82^GCF@rQa1dcYoi)3{ZpD9i8$zuCHkiV=$W%*W3Peao??8AU$R8%CDba zY3zOE`XB(QDLyI`^^qb<%Sb! z_a1X+Q>T5!J+zRks`6};4(_)~g)YpPU0Qy;)0w(}W^dItcOH02x+mC+CerwliZtA>3;x^}A&KGsH4Md=6IDr4 zv8RC3J_!7{>Sh{r_3hjvjO0^Qb6;joIF~TnAhH5cB=R3;d|&VcLFvofd)U+Ge$3pL zoIHd)5KAI&rHP6^c_*_NhW#sar&RT>tTopn3Bj+3V)Z#pqM<>AO%Kw@9uA9W?JOxq ztW;pBpA=Y|L$S&jA;%j@J}17Yp&dIku;t$8S}7Qk#ZW=EAhMTS&5bjO>expH(JkWxTL#Q7OlO*VeiV$nLwqz80-OLf~h;3 zfHud^=KzeG+SYptnv;5*^`Ac#UcmOJtZ2XV&&-MCeavWoKb}RTiFC(C2fKg2)ve8pl4T(u*>5tCO5MkRNt18> z7CbIk7jNeUFr1oj+?xIL3FZT6BF}if6!ZX&2{!86KSR*n!}VeDX1((%-Ppp7N2BWe z{Msgt3bxP+pulQyp!6;Th6mcRT*E&U5Q-%4GzhN#bzDWa0q%LJ=qQR;Llhm}SylDT zH`3Ck58>8r?9p0%tpf)gh~yz>as!Qft6R?&?1bhQAy@FtvW|##EtbGs029!Ef(l(7M?mj-W(6$xa_1Z1#)vcyYg@ zx|({8lXtI!yl@BauGPfrbb|4vQfOoE$e#bqxSX*R5`bI5x3yNeCbJSxD5GCb(y16;ZouGTTwFD59V;KI91?2u)GYbwlC7<4!rM6&~q5?-PN zZ?{;C2Y0j5EthF5+Tm$h;fzu}jlsUK{Sab22Uoon-&(zoUeAz^J~p4j6-==?jSD)} z0=h6_DDt#Iiyph7OeHOJx?u>b4iw>GN`8_nPidj`f~#I;BhLG_jctb*!t9K(ImbOV zKKT0k2hc=Of({F=+WeIMaRGYfpNE~iD0Ebq32^0~Ncv{_;SkES4szD3fw$Pn95>;k zi;)rZ212OAz}iHn+Gr!#l_xhNv38)B(HDMbq}PCjy2b@{@xz%qS_S1G2ZK}nY6Z!mBJM7ar3udj!;3mqC=H&Yx)n$P!STBP@ z(9f1yKi|R<_f5o+}=CNLW{`(^!_(&~>ef5;7rQM}vw=_~pxxsfEq%Ye-6o!;m5B0KOB4>w# z@2s{i4{V6#_k`wJZ8}t5?&eK)(eNeNlD_J>QU){RL^5s{9v4Z1J=i&)DsvgIiedXb zYimP(*%QvDZ#pu7%C0*0SjGGJI~0j&`IU+$X;ek%o&`|gxOjb8_KBEz(i6R#6tt~H zlXS!SHWE-e2#HmY#}n@eGCgk=>WNy6wd5MZ*+Rier6`VgZ z?^If%E5Pg968U7LS?))8q3p#d|6Rr&8EftDg)Nxgg~>(_6Dwa+60ODm`Tz~4{-^SKj)^wTET-F zS0aUcS5}KsNio}n5ucoOD{>nvE(f(1c_PQH$(LMo>|pM^V(c1W^E0GD1Iz~pbh8H* zL5QIS>(`mS4Z+0KjoZ@4Bm=M5SFI_bMl#1+=K# z%$92_yYDbRK;Yu+^lp~4b~AabmN;SVk@R)Y-!d!!g;`ur;qbE3lbPOm&GUnjH|kFN=;~>EKpL`ic&m&jJN7xe^|KE z)YhTfcb^WXdsdmI7iGje)gvChID%-AT%skCvu*006t)PI!vLJ7Wcod$W+xSWv*%a= zdiu7^m3R4N)onlJkt6kd`I-~4Y9Ak$=rqcfhv}TN%O15|eG~|mjPo=$PA+nNTe8Hx z8!N-zFZ#W><8XGQ^*wy=4K&)xC822l2sv1>+cnp`>b4E4$FI~JJ|Lr#4{O(3_|;Op0<2(qZqC(1dP>#Y!o7aWUuXnfa-q@zQMD&Cr8dNe__JutdxtFc zX_4;Nch4Y&!C57-z7B3416JI+f=U9dYjwZIAEtNz{D?S?t3Nw(Exzzr_gU00$$4P5 zcI=9ahxzy$YxHSy9BxuQ)@t0PVAA+$FwAZI>&O7R{nCY`Iq@G}6PuVt(GcrAi{aLA z+rQLS8J~urLC=djmuUtrB;T3PVup`)!H73>4lh%dReOb>hN1yZ7NzVZBJ3aRv>l!V zpmr1Pl>Wp>&+e-|oc1#2KTtQ z0w=^g53Q!ZTlnwlX7?!e#xXY#(u!)#8!l%rtg+S+^J6?x%&!50e=?uRXN{cUbw%#q^)V&xQZJ~~|#9~e40zNE1`8z|Ij zez_d9I{h>|x9FoB>YU;u!UnXkT zUJt2Pf;iClUSCAELv}*o6T`Xun(tT}M3Y@lLeR~jx0crqQ7Xp)`o&L-Qn8O<@yGTO z&>3!NkrV^EJj(SBuZMV9(E*n?=YzFtHK7X$nvL&hEfF8l2`hR~Q<<{e01X*nI2)F) zIP&I17Rst|;SnPXG_{*=$IdI(9KN^>BJ!}J-4W2v<`-=A3CP!ZhTZ7wvVU4N>&^QR z2ss`VagOxts~=q`1;{TduGqcogq)2L#GAcM`G#hsXQ@%zbpB`n&ONlSU3Eg{Z*nwm z7)%ep&gYS0rJ+84o?0J)Jx|`X5q4{9YA4ioMWx`wggyHuN)gD!|TsW?+Gx)?GJ$y;^v97l>aUw!dwYchr~ z0N+v~IHGgz&fHwEEpIL$sdu*MU7eu~Jo)L37!D#Qh-`;Rk%Jyne_uSIM;D8Qrtd6NJ`k?WcdR_13>MPiS$JOlL zai`x?Yn_rlP7Vk` zY%G`=O#K6Pa-mLLLcFA&5Ty=EQk!+FR`V7MiOz@%Tf96K%llF1qeQ-=2 zzR)@r{UdMU05wX&A(A|M-Mu%n@brow?+-XqKQJ-yd0ONh3S(PQF$>ljlQ!`&wIgWY z(i=%GAw1k8U^?RmJ3A00Hg6QBM2AXk@Efv?UB505xIDKk+hgzEvl;SLNg8SWYR(Fl zn=Ap?kn-mzyJFpE#%4q3e;Myy2A&)j(Z5$J;S~P9=nJL?nl|YZZUbYpZ(rVV@AwJ# zLY!+~F3Ya;$JvCFySr)VGB7-vdRJ_1)yKKcce{#SasT|o6UMdNCo35T3I*=<6~+XP z%V5duop8H3EeGm$)ukhEZ2n#Z>wavNa)Ux`HC}=re)hz(I2BDzxB}E}@93ISYh9_7 zUynnDCa~q7X5GDM?~jcvTlePkpMpDTJZz;EvRwA>Ub^N}mbmr7@r+w~SMD{U0uv7y zcpx!STygP}wA(vj>G`Iun8U@vdw$(+<@Z5XnJ9bo{FaUcs?l#@Nb=BXhQ-e~zh%!1 znXxmMURB$=A6q?Z&qW7~^Pp!aTucUsDl$m}KVNjbt*v#;kEpqiGHZ|wb5nN|NXG5- zfdMzSPsal-&M%NJyl5X$**d3jAb0*;x6EJmq(GnD_{N&_ zwF#y1h^5I7Dq)kAeMOkM;SwSx?%5}q9KF(G-06UCeB1M=#8T|6-78m=cEdlbx-^Sk z(p)MjuJjgv`Gt`1vwUSjGH;VgdhcN_3o?h)^P?{;^Da(YS&Jx@poLquq^{|iSoP9q z-^tXk%B5MD5Ik)s^Cq6ZrJu;+m~hnYQg9%O zy2?~3Uuv%AC<_m2C)Ji`{2RXrYlIl*UJ+zVavzuc4U3&48dIL!{>MG<1RdA!v)FC{@WHQaRR`zR2FY^&>FIgw(9Ma3~U4{pCLvl_q*QOL5bHh#x zAo=RBPFb{D%1$L6UgDfM-Qdt=_>_mg{gH}HEtf$2c*U(^3sl0uzn`PJB9ZO z*0ELB`x6_J_CU@!wH}^2}d2o-o zW_d`N>{1G0a!p)r`+0JncHm@zE7N@ZXAD2?_zCbo0uHY<#vgrdAIbBINXpMwja&Lu z@ibQU-lNH*R$`Uv4vB*3Oa`SwchZY^OlA}hh&udo1CA+OCLUg54Y(Q7?7@`0TsPBR zkW0SUTo-#;G(VJZiL$~qe~tJ|nXc@(8HIu69?7!XXOtUHn7^4+?Tx!Iz5-Fr=91IM zwIzAV=0H;;zF*xazQk)Yo)629AiRa# zBYvDRGe+0=^ukyA%em1tADgYeEjr#^v0iih_#-yS)=q}}b#=OYbb>d2qIDqw3p=>) z%hAIE!LP~8FD%^;Us+PTOe`CBv2zu_ZOOlgm-OB;(={JEv+u<6^GgyY&!7EsbWI)< zom`H2YMjAv)VRQ-B1PGg?M$ol&n;!Xt&zDFWo4PbJKayrIk0r2_rry8=7XXhyRMd| ztdTO$OBZIlnouY$|3{>yWVE?;%04crd2Ec!A-;pNr+u`svD-vi)J3Hzz_snp%9{yk znT6jx8Nbjy0($?+A!X2F;7h-xhs?-e{L-hxT~z|H5k;TkBbVvi-CY@+;`quoKRqvA zRnq-Zrr`Hn*Jl&0m3E}Q)XvTq^;g#x4nLXkUg?(&d;LSrw(|N|V|42!_iGH7-0yK7 zmsRSIPwQM-8@pwc=aSEeUML@N~=BfHbX39P!1O z`t4WTil0`PLjf^E5@LU04cQ(emd-(?U^k#MXQWZ)o?T*owdB}Haf;Pi+LrlH70sj; zC(WI*BIK&z?g2M)$GPdgmC@q6ziEzPtvBtpS&o7jZdkaYxwg>xl+-a9(CjL9Wi|Tq z^Q9NYN@P%q$#b+HjunUM4{?>9c2bej>N!~9V(dt09#5$z{xd)MvQIiJD!SIi+%c14 zOt|B+-RU-d)=@>J$4euMx``ggMh5FsXQWqTCs_oO2g_J{jl0~9Z9Ywx{gUo+C|Dz| zjdSVe?RTqZD$$RUBKp;uJ)RM-F*{K#R$(Sme67MvtoUAqS!7f%f9CL12SeuclvdHP z-)uARf^@n1aN&FeDMM|QT&n*ly?al~GKVqSVqyE0yoEQU$zW#3PL*JSrN6BV{XQp^Jq!|~B?uX?QM&=cCHy66dgQ#zL%G{T9 with Serializable { CryptoCurrency.ape, CryptoCurrency.avaxc, CryptoCurrency.btt, - CryptoCurrency.bttbsc, + CryptoCurrency.bttc, CryptoCurrency.doge, CryptoCurrency.firo, CryptoCurrency.usdttrc20, @@ -51,7 +51,6 @@ class CryptoCurrency extends EnumerableItem with Serializable { CryptoCurrency.xvg, CryptoCurrency.usdcpoly, CryptoCurrency.dcr, - CryptoCurrency.husd, CryptoCurrency.kmd, CryptoCurrency.mana, CryptoCurrency.maticpoly, @@ -103,7 +102,7 @@ class CryptoCurrency extends EnumerableItem with Serializable { static const ape = CryptoCurrency(title: 'APE', iconPath: 'assets/images/ape_icon.png', tag: 'ETH', raw: 30, name: 'ape'); static const avaxc = CryptoCurrency(title: 'AVAX', iconPath: 'assets/images/avaxc_icon.png', tag: 'C-CHAIN', raw: 31, name: 'avaxc'); static const btt = CryptoCurrency(title: 'BTT', iconPath: 'assets/images/btt_icon.png', raw: 32, name: 'btt'); - static const bttbsc = CryptoCurrency(title: 'BTT', iconPath: 'assets/images/bttbsc_icon.png', tag: 'BSC', raw: 33, name: 'bttbsc'); + static const bttc = CryptoCurrency(title: 'BTTC', iconPath: 'assets/images/bttbsc_icon.png',fullName: 'BitTorrent-NEW (Binance Smart Chain)', tag: 'BSC', raw: 33, name: 'bttc'); static const doge = CryptoCurrency(title: 'DOGE', iconPath: 'assets/images/doge_icon.png', raw: 34, name: 'doge'); static const firo = CryptoCurrency(title: 'FIRO', iconPath: 'assets/images/firo_icon.png', raw: 35, name: 'firo'); static const usdttrc20 = CryptoCurrency(title: 'USDT', iconPath: 'assets/images/usdttrc20_icon.png', tag: 'TRX', raw: 36, name: 'usdttrc20'); @@ -119,21 +118,20 @@ class CryptoCurrency extends EnumerableItem with Serializable { static const usdcpoly = CryptoCurrency(title: 'USDC', iconPath: 'assets/images/usdc_icon.png', tag: 'POLY', raw: 46, name: 'usdcpoly'); static const dcr = CryptoCurrency(title: 'DCR', iconPath: 'assets/images/dcr_icon.png', raw: 47, name: 'dcr'); - static const husd = CryptoCurrency(title: 'HUSD', iconPath: 'assets/images/husd_icon.png', tag: 'ETH', raw: 48, name: 'husd'); - static const kmd = CryptoCurrency(title: 'KMD', iconPath: 'assets/images/kmd_icon.png', raw: 49, name: 'kmd'); - static const mana = CryptoCurrency(title: 'MANA', iconPath: 'assets/images/mana_icon.png', tag: 'ETH', raw: 50, name: 'mana'); - static const maticpoly = CryptoCurrency(title: 'MATIC', iconPath: 'assets/images/matic_icon.png', tag: 'POLY', raw: 51, name: 'maticpoly'); - static const matic = CryptoCurrency(title: 'MATIC', iconPath: 'assets/images/matic_icon.png', tag: 'ETH', raw: 52, name: 'matic'); - static const mkr = CryptoCurrency(title: 'MKR', iconPath: 'assets/images/mkr_icon.png', tag: 'ETH', raw: 53, name: 'mkr'); - static const near = CryptoCurrency(title: 'NEAR', iconPath: 'assets/images/near_icon.png', raw: 54, name: 'near'); - static const oxt = CryptoCurrency(title: 'OXT', iconPath: 'assets/images/oxt_icon.png', tag: 'ETH', raw: 55, name: 'oxt'); - static const paxg = CryptoCurrency(title: 'PAXG', iconPath: 'assets/images/paxg_icon.png', tag: 'ETH', raw: 56, name: 'paxg'); - static const pivx = CryptoCurrency(title: 'PIVX', iconPath: 'assets/images/pivx_icon.png', raw: 57, name: 'pivx'); - static const rune = CryptoCurrency(title: 'RUNE', iconPath: 'assets/images/rune_icon.png', raw: 58, name: 'rune'); - static const rvn = CryptoCurrency(title: 'RVN', iconPath: 'assets/images/rvn_icon.png', raw: 59, name: 'rvn'); - static const scrt = CryptoCurrency(title: 'SCRT', iconPath: 'assets/images/scrt_icon.png', raw: 60, name: 'scrt'); - static const uni = CryptoCurrency(title: 'UNI', iconPath: 'assets/images/uni_icon.png', tag: 'ETH', raw: 61, name: 'uni'); - static const stx = CryptoCurrency(title: 'STX', iconPath: 'assets/images/stx_icon.png', raw: 62, name: 'stx'); + static const kmd = CryptoCurrency(title: 'KMD', iconPath: 'assets/images/kmd_icon.png', raw: 48, name: 'kmd'); + static const mana = CryptoCurrency(title: 'MANA', iconPath: 'assets/images/mana_icon.png', tag: 'ETH', raw: 49, name: 'mana'); + static const maticpoly = CryptoCurrency(title: 'MATIC', iconPath: 'assets/images/matic_icon.png', tag: 'POLY', raw: 50, name: 'maticpoly'); + static const matic = CryptoCurrency(title: 'MATIC', iconPath: 'assets/images/matic_icon.png', tag: 'ETH', raw: 51, name: 'matic'); + static const mkr = CryptoCurrency(title: 'MKR', iconPath: 'assets/images/mkr_icon.png', tag: 'ETH', raw: 52, name: 'mkr'); + static const near = CryptoCurrency(title: 'NEAR', iconPath: 'assets/images/near_icon.png', raw: 53, name: 'near'); + static const oxt = CryptoCurrency(title: 'OXT', iconPath: 'assets/images/oxt_icon.png', tag: 'ETH', raw: 54, name: 'oxt'); + static const paxg = CryptoCurrency(title: 'PAXG', iconPath: 'assets/images/paxg_icon.png', tag: 'ETH', raw: 55, name: 'paxg'); + static const pivx = CryptoCurrency(title: 'PIVX', iconPath: 'assets/images/pivx_icon.png', raw: 56, name: 'pivx'); + static const rune = CryptoCurrency(title: 'RUNE', iconPath: 'assets/images/rune_icon.png', raw: 57, name: 'rune'); + static const rvn = CryptoCurrency(title: 'RVN', iconPath: 'assets/images/rvn_icon.png', raw: 58, name: 'rvn'); + static const scrt = CryptoCurrency(title: 'SCRT', iconPath: 'assets/images/scrt_icon.png', raw: 59, name: 'scrt'); + static const uni = CryptoCurrency(title: 'UNI', iconPath: 'assets/images/uni_icon.png', tag: 'ETH', raw: 60, name: 'uni'); + static const stx = CryptoCurrency(title: 'STX', iconPath: 'assets/images/stx_icon.png', raw: 61, name: 'stx'); static final Map _rawCurrencyMap = all.fold>({}, (acc, item) { diff --git a/lib/core/address_validator.dart b/lib/core/address_validator.dart index 9d7b0e3b5..519cd92a3 100644 --- a/lib/core/address_validator.dart +++ b/lib/core/address_validator.dart @@ -24,7 +24,6 @@ class AddressValidator extends TextValidator { return '[0-9a-zA-Z_]'; case CryptoCurrency.usdc: case CryptoCurrency.usdcpoly: - case CryptoCurrency.husd: case CryptoCurrency.ape: case CryptoCurrency.avaxc: case CryptoCurrency.eth: @@ -156,7 +155,7 @@ class AddressValidator extends TextValidator { return [98, 99, 106]; case CryptoCurrency.btt: return [34]; - case CryptoCurrency.bttbsc: + case CryptoCurrency.bttc: return [34]; case CryptoCurrency.doge: return [34]; @@ -181,7 +180,6 @@ class AddressValidator extends TextValidator { case CryptoCurrency.stx: return [40, 41, 42]; case CryptoCurrency.usdcpoly: - case CryptoCurrency.husd: case CryptoCurrency.mana: case CryptoCurrency.matic: case CryptoCurrency.maticpoly: diff --git a/lib/exchange/sideshift/sideshift_exchange_provider.dart b/lib/exchange/sideshift/sideshift_exchange_provider.dart index a732f7ef2..cbe9375db 100644 --- a/lib/exchange/sideshift/sideshift_exchange_provider.dart +++ b/lib/exchange/sideshift/sideshift_exchange_provider.dart @@ -28,7 +28,6 @@ class SideShiftExchangeProvider extends ExchangeProvider { static const List _notSupported = [ CryptoCurrency.xhv, CryptoCurrency.dcr, - CryptoCurrency.husd, CryptoCurrency.kmd, CryptoCurrency.mkr, CryptoCurrency.near, @@ -39,6 +38,7 @@ class SideShiftExchangeProvider extends ExchangeProvider { CryptoCurrency.rvn, CryptoCurrency.scrt, CryptoCurrency.stx, + CryptoCurrency.bttc, ]; static List _supportedPairs() { From 7b95533cd3b8173be6576fdbd352bca0e8babdc4 Mon Sep 17 00:00:00 2001 From: Serhii Date: Sun, 4 Dec 2022 20:06:17 +0200 Subject: [PATCH 7/7] fix nullable type --- cw_core/lib/crypto_currency.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cw_core/lib/crypto_currency.dart b/cw_core/lib/crypto_currency.dart index 48ebede75..42e72d2eb 100644 --- a/cw_core/lib/crypto_currency.dart +++ b/cw_core/lib/crypto_currency.dart @@ -139,8 +139,8 @@ class CryptoCurrency extends EnumerableItem with Serializable { return acc; }); - static final Map _nameCurrencyMap = - all.fold>({}, (acc, item) { + static final Map _nameCurrencyMap = + all.fold>({}, (acc, item) { acc.addAll({item.name: item}); return acc; });