From 1384e44ce93d2bcfedb19af43ec8a382f80b9157 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 28 Mar 2024 17:27:19 +0000 Subject: [PATCH 01/36] chore(deps): bump express from 4.18.2 to 4.19.2 Bumps [express](https://github.com/expressjs/express) from 4.18.2 to 4.19.2. - [Release notes](https://github.com/expressjs/express/releases) - [Changelog](https://github.com/expressjs/express/blob/master/History.md) - [Commits](https://github.com/expressjs/express/compare/4.18.2...4.19.2) --- updated-dependencies: - dependency-name: express dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/yarn.lock b/yarn.lock index 80dd638460..c278a719e6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7562,13 +7562,13 @@ bn.js@^5.1.3: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== +body-parser@1.20.2: + version "1.20.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== dependencies: bytes "3.1.2" - content-type "~1.0.4" + content-type "~1.0.5" debug "2.6.9" depd "2.0.0" destroy "1.2.0" @@ -7576,7 +7576,7 @@ body-parser@1.20.1: iconv-lite "0.4.24" on-finished "2.4.1" qs "6.11.0" - raw-body "2.5.1" + raw-body "2.5.2" type-is "~1.6.18" unpipe "1.0.0" @@ -8523,7 +8523,7 @@ content-disposition@0.5.4: dependencies: safe-buffer "5.2.1" -content-type@~1.0.4: +content-type@~1.0.4, content-type@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== @@ -8616,10 +8616,10 @@ cookie-signature@1.0.6: resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== +cookie@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" + integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== copy-descriptor@^0.1.0: version "0.1.1" @@ -10629,16 +10629,16 @@ exponential-backoff@^3.1.1: integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== express@^4.17.3: - version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + version "4.19.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" + integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== dependencies: accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.20.1" + body-parser "1.20.2" content-disposition "0.5.4" content-type "~1.0.4" - cookie "0.5.0" + cookie "0.6.0" cookie-signature "1.0.6" debug "2.6.9" depd "2.0.0" @@ -16972,10 +16972,10 @@ range-parser@^1.2.1, range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" http-errors "2.0.0" From 1ffcb87bbdc734d103672ea160c351a91c58fe4c Mon Sep 17 00:00:00 2001 From: devchenyan Date: Wed, 3 Apr 2024 10:34:09 +0800 Subject: [PATCH 02/36] fix: Migrate dialog does not show in v0.114.2 --- packages/neuron-wallet/src/services/ckb-runner.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/neuron-wallet/src/services/ckb-runner.ts b/packages/neuron-wallet/src/services/ckb-runner.ts index aeb1128d4c..a66f075d8d 100644 --- a/packages/neuron-wallet/src/services/ckb-runner.ts +++ b/packages/neuron-wallet/src/services/ckb-runner.ts @@ -124,7 +124,10 @@ export const startCkbNode = async () => { currentProcess.stderr?.on('data', data => { const dataString: string = data.toString() logger.error('CKB:\trun fail:', dataString) - if (dataString.includes('CKB wants to migrate the data into new format')) { + if ( + dataString.includes('CKB wants to migrate the data into new format') || + dataString.includes('CKB recommends migrating your data into a new format') + ) { MigrateSubject.next({ type: 'need-migrate' }) } }) From d36318b3efaf6ccd7720b243271e5b0ee1c320d1 Mon Sep 17 00:00:00 2001 From: devchenyan Date: Wed, 3 Apr 2024 11:28:35 +0800 Subject: [PATCH 03/36] fix: spell error --- _typos.toml | 2 ++ .../src/services/transaction-sender.ts | 16 ++++++++-------- .../neuron-wallet/tests/services/cells.test.ts | 4 ++-- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/_typos.toml b/_typos.toml index ae82742a0c..0afbdd74c5 100644 --- a/_typos.toml +++ b/_typos.toml @@ -1,6 +1,8 @@ [default.extend-words] thur = "thur" numer = "numer" +HD = "HD" +hd = "hd" # defined in database schema lastest = "lastest" diff --git a/packages/neuron-wallet/src/services/transaction-sender.ts b/packages/neuron-wallet/src/services/transaction-sender.ts index d91b4e7b74..139e6f8179 100644 --- a/packages/neuron-wallet/src/services/transaction-sender.ts +++ b/packages/neuron-wallet/src/services/transaction-sender.ts @@ -674,8 +674,8 @@ export default class TransactionSender { const currentNetwork = NetworksService.getInstance().getCurrent() const rpcService = new RpcService(currentNetwork.remote, currentNetwork.type) - const depositeOutput = await CellsService.getLiveCell(outPoint) - if (!depositeOutput) { + const depositOutput = await CellsService.getLiveCell(outPoint) + if (!depositOutput) { throw new CellIsNotYetLive() } const prevTx = await rpcService.getTransaction(outPoint.txHash) @@ -690,7 +690,7 @@ export default class TransactionSender { const tx: Transaction = await TransactionGenerator.startWithdrawFromDao( walletID, outPoint, - depositeOutput, + depositOutput, depositBlockHeader!.number, depositBlockHeader!.hash, changeAddress!.address, @@ -736,13 +736,13 @@ export default class TransactionSender { if (!withdrawOutput.depositOutPoint) { throw new Error('DAO has not finish step first withdraw') } - const depositeTx = await rpcService.getTransaction(withdrawOutput.depositOutPoint.txHash) - if (!depositeTx?.txStatus.blockHash) { - throw new Error(`Get deposite block hash failed with tx hash ${withdrawOutput.depositOutPoint.txHash}`) + const depositTx = await rpcService.getTransaction(withdrawOutput.depositOutPoint.txHash) + if (!depositTx?.txStatus.blockHash) { + throw new Error(`Get deposit block hash failed with tx hash ${withdrawOutput.depositOutPoint.txHash}`) } - const depositBlockHeader = await rpcService.getHeader(depositeTx.txStatus.blockHash) + const depositBlockHeader = await rpcService.getHeader(depositTx.txStatus.blockHash) if (!depositBlockHeader) { - throw new Error(`Get Header failed with blockHash ${depositeTx.txStatus.blockHash}`) + throw new Error(`Get Header failed with blockHash ${depositTx.txStatus.blockHash}`) } const depositEpoch = this.parseEpoch(BigInt(depositBlockHeader.epoch)) const depositCapacity: bigint = BigInt(withdrawOutput.capacity) diff --git a/packages/neuron-wallet/tests/services/cells.test.ts b/packages/neuron-wallet/tests/services/cells.test.ts index 3bb81943f1..8d3dcd17d1 100644 --- a/packages/neuron-wallet/tests/services/cells.test.ts +++ b/packages/neuron-wallet/tests/services/cells.test.ts @@ -630,7 +630,7 @@ describe('CellsService', () => { ) ).rejects.toThrow(new LiveCapacityNotEnough()) }) - it('left capcity not enough for a cell throw CapacityNotEnoughForChange', async () => { + it('left capacity not enough for a cell throw CapacityNotEnoughForChange', async () => { await createMultisigCell(toShannon('1000'), OutputStatus.Sent, multisigInfo) await expect( CellsService.gatherInputs( @@ -660,7 +660,7 @@ describe('CellsService', () => { ) ).rejects.toThrow(new LiveCapacityNotEnough()) }) - it('left capcity not enough for a cell throw CapacityNotEnoughForChange', async () => { + it('left capacity not enough for a cell throw CapacityNotEnoughForChange', async () => { await expect( CellsService.gatherInputs( toShannon('990'), From 1205e92107dd10a3ec13f9634ded6a4e615625a0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Apr 2024 17:38:30 +0000 Subject: [PATCH 04/36] chore(deps): bump undici from 5.28.3 to 5.28.4 Bumps [undici](https://github.com/nodejs/undici) from 5.28.3 to 5.28.4. - [Release notes](https://github.com/nodejs/undici/releases) - [Commits](https://github.com/nodejs/undici/compare/v5.28.3...v5.28.4) --- updated-dependencies: - dependency-name: undici dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- packages/neuron-wallet/package.json | 2 +- yarn.lock | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/neuron-wallet/package.json b/packages/neuron-wallet/package.json index 1f41ad3916..b8e2c2fef1 100644 --- a/packages/neuron-wallet/package.json +++ b/packages/neuron-wallet/package.json @@ -74,7 +74,7 @@ "subleveldown": "4.1.4", "tslib": "2.6.2", "typeorm": "0.2.45", - "undici": "5.28.3", + "undici": "5.28.4", "uuid": "8.3.2" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index 80dd638460..e1cb24f982 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2031,9 +2031,9 @@ regenerator-runtime "^0.14.0" "@babel/runtime@^7.23.9": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e" - integrity sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw== + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd" + integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA== dependencies: regenerator-runtime "^0.14.0" @@ -19712,10 +19712,10 @@ undici-types@~5.26.4: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== -undici@5.28.3: - version "5.28.3" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.3.tgz#a731e0eff2c3fcfd41c1169a869062be222d1e5b" - integrity sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA== +undici@5.28.4: + version "5.28.4" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.4.tgz#6b280408edb6a1a604a9b20340f45b422e373068" + integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g== dependencies: "@fastify/busboy" "^2.0.0" From 5f46825606015453938d284d1936285f1b9761e4 Mon Sep 17 00:00:00 2001 From: devchenyan Date: Sun, 7 Apr 2024 10:43:37 +0800 Subject: [PATCH 05/36] feat: NeedMigrateMsg --- packages/neuron-wallet/src/services/ckb-runner.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/neuron-wallet/src/services/ckb-runner.ts b/packages/neuron-wallet/src/services/ckb-runner.ts index a66f075d8d..003800312d 100644 --- a/packages/neuron-wallet/src/services/ckb-runner.ts +++ b/packages/neuron-wallet/src/services/ckb-runner.ts @@ -26,6 +26,11 @@ const platform = (): string => { } } +enum NeedMigrateMsg { + Wants = 'CKB wants to migrate the data into new format', + Recommends = 'CKB recommends migrating your data into a new format', +} + const { app } = env let ckb: ChildProcess | null = null @@ -124,10 +129,7 @@ export const startCkbNode = async () => { currentProcess.stderr?.on('data', data => { const dataString: string = data.toString() logger.error('CKB:\trun fail:', dataString) - if ( - dataString.includes('CKB wants to migrate the data into new format') || - dataString.includes('CKB recommends migrating your data into a new format') - ) { + if (dataString.includes(NeedMigrateMsg.Wants) || dataString.includes(NeedMigrateMsg.Recommends)) { MigrateSubject.next({ type: 'need-migrate' }) } }) From 4d1b3bbb3540a833c974b770f6758daf0efbb291 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=A5=E5=9B=BD=E5=AE=87?= <841185308@qq.com> Date: Mon, 8 Apr 2024 10:28:37 +0800 Subject: [PATCH 06/36] fix: Fix sending sudt to a new acp cell with extra 142 CKB by offline sign (#3055) Co-authored-by: Chen Yu --- packages/neuron-ui/src/components/HardwareSign/hooks.ts | 2 ++ packages/neuron-ui/src/components/PasswordRequest/hooks.ts | 3 ++- packages/neuron-ui/src/services/remote/offline.ts | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/neuron-ui/src/components/HardwareSign/hooks.ts b/packages/neuron-ui/src/components/HardwareSign/hooks.ts index cec9567a50..2ccc38400b 100644 --- a/packages/neuron-ui/src/components/HardwareSign/hooks.ts +++ b/packages/neuron-ui/src/components/HardwareSign/hooks.ts @@ -85,6 +85,8 @@ export default ({ switch (offlineSignJSON?.type) { case OfflineSignType.CreateSUDTAccount: return 'create-sudt-account' + case OfflineSignType.SendAcpSUDTToNewCell: + return 'send-acp-sudt-to-new-cell' case OfflineSignType.SendSUDT: return 'send-sudt' case OfflineSignType.UnlockDAO: diff --git a/packages/neuron-ui/src/components/PasswordRequest/hooks.ts b/packages/neuron-ui/src/components/PasswordRequest/hooks.ts index 9e335c9e4e..dbb4073155 100644 --- a/packages/neuron-ui/src/components/PasswordRequest/hooks.ts +++ b/packages/neuron-ui/src/components/PasswordRequest/hooks.ts @@ -56,9 +56,10 @@ export default ({ switch (actionType) { case 'create-sudt-account': return OfflineSignType.CreateSUDTAccount + case 'send-acp-sudt-to-new-cell': + return OfflineSignType.SendAcpSUDTToNewCell case 'send-ckb-asset': case 'send-acp-ckb-to-new-cell': - case 'send-acp-sudt-to-new-cell': case 'transfer-to-sudt': case 'send-sudt': return OfflineSignType.SendSUDT diff --git a/packages/neuron-ui/src/services/remote/offline.ts b/packages/neuron-ui/src/services/remote/offline.ts index f2ed6f88e3..6824bd9c0a 100644 --- a/packages/neuron-ui/src/services/remote/offline.ts +++ b/packages/neuron-ui/src/services/remote/offline.ts @@ -13,6 +13,7 @@ export enum OfflineSignType { UnlockDAO = 'UnlockDAO', CreateSUDTAccount = 'CreateSUDTAccount', SendSUDT = 'SendSUDT', + SendAcpSUDTToNewCell = 'SendAcpSUDTToNewCell', SendFromMultisigOnlySig = 'SendFromMultisigOnlySig', Invalid = 'Invalid', } From 2ec01b8808156c31905c39f46ce6e82080c6406e Mon Sep 17 00:00:00 2001 From: Tom Wang Date: Mon, 8 Apr 2024 20:19:07 +0800 Subject: [PATCH 07/36] fix: Add react-refresh@0.14.0 to resolutions in root package.json (#3108) (#3110) --- package.json | 3 ++- yarn.lock | 7 +------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 9d0c793ed0..aa0b2ab372 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,8 @@ "dependencies": {}, "resolutions": { "@types/react": "18.2.45", - "react-i18next": ">=11.16.4" + "react-i18next": ">=11.16.4", + "react-refresh": "0.14.0" }, "volta": { "node": "20.10.0" diff --git a/yarn.lock b/yarn.lock index 80dd638460..da5bd9347d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17127,12 +17127,7 @@ react-is@^17.0.0, react-is@^17.0.1, react-is@^17.0.2: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -react-refresh@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046" - integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== - -react-refresh@^0.14.0: +react-refresh@0.14.0, react-refresh@^0.11.0, react-refresh@^0.14.0: version "0.14.0" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== From 7118fb27c06de754a5d53841165254949dc46186 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 8 Apr 2024 21:24:22 +0900 Subject: [PATCH 08/36] Update ckb client versions (#3097) feat: update ckb client versions Co-authored-by: Keith-CY Co-authored-by: Chen Yu --- .ckb-version | 2 +- compatible.json | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.ckb-version b/.ckb-version index de4d9773e7..003d88e0df 100644 --- a/.ckb-version +++ b/.ckb-version @@ -1 +1 @@ -v0.114.0 +v0.115.0 diff --git a/compatible.json b/compatible.json index c2c41af8a5..bdf141600c 100644 --- a/compatible.json +++ b/compatible.json @@ -1,5 +1,6 @@ { "fullVersions": [ + "0.115", "0.114", "0.113", "0.112", @@ -20,6 +21,7 @@ "compatible": { "0.111": { "full": [ + "0.115", "0.114", "0.113", "0.112", @@ -34,6 +36,7 @@ }, "0.110": { "full": [ + "0.115", "0.114", "0.113", "0.112", @@ -64,6 +67,7 @@ }, "0.112": { "full": [ + "0.115", "0.114", "0.113", "0.112", @@ -78,6 +82,7 @@ }, "0.114": { "full": [ + "0.115", "0.114", "0.113", "0.112", From 129aa3c3c86f7959d8500a05c7823a87a256aca9 Mon Sep 17 00:00:00 2001 From: devchenyan Date: Wed, 10 Apr 2024 16:20:41 +0800 Subject: [PATCH 09/36] fix: Neuron for MacOS crashes on quitting (#3103) * fix: Neuron for MacOS crashes on quitting * fix: spell error --------- Co-authored-by: Chen Yu --- packages/neuron-wallet/src/main.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/neuron-wallet/src/main.ts b/packages/neuron-wallet/src/main.ts index a65b386bea..182eabd076 100644 --- a/packages/neuron-wallet/src/main.ts +++ b/packages/neuron-wallet/src/main.ts @@ -16,9 +16,11 @@ if (singleInstanceLock) { appController.start() }) - app.on('before-quit', async () => { + app.on('before-quit', async e => { logger.info('App:\tNeuron will exit') + e.preventDefault() await appController.end() + app.exit() }) app.on('activate', appController.openWindow) From f4027aa88985f0349d249fe6ea6468809f707c92 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Apr 2024 23:43:37 +0900 Subject: [PATCH 10/36] chore(deps): bump undici from 5.28.3 to 5.28.4 in /packages/neuron-wallet (#3112) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Chen Yu --- packages/neuron-wallet/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/neuron-wallet/package.json b/packages/neuron-wallet/package.json index 1f41ad3916..b8e2c2fef1 100644 --- a/packages/neuron-wallet/package.json +++ b/packages/neuron-wallet/package.json @@ -74,7 +74,7 @@ "subleveldown": "4.1.4", "tslib": "2.6.2", "typeorm": "0.2.45", - "undici": "5.28.3", + "undici": "5.28.4", "uuid": "8.3.2" }, "devDependencies": { From 71bb064b0f7e37d31ffae609443e3d4eef448255 Mon Sep 17 00:00:00 2001 From: Tom Wang Date: Thu, 11 Apr 2024 12:06:50 +0800 Subject: [PATCH 11/36] refactor: rewrite shannonToCKB with lumos formatUnit (#3114) --- .../neuron-wallet/src/utils/shannonToCKB.ts | 20 +++++++------------ .../neuron-wallet/src/utils/to-csv-row.ts | 2 +- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/packages/neuron-wallet/src/utils/shannonToCKB.ts b/packages/neuron-wallet/src/utils/shannonToCKB.ts index 82c1a01871..8d9ba94c69 100644 --- a/packages/neuron-wallet/src/utils/shannonToCKB.ts +++ b/packages/neuron-wallet/src/utils/shannonToCKB.ts @@ -1,18 +1,12 @@ -const DECIMAL = 8 +import { formatUnit, ckbDecimals } from '@ckb-lumos/bi' const shannonToCKB = (shannon: bigint) => { - if (shannon === BigInt(0)) { - return `+0.${'0'.repeat(DECIMAL)}` - } - - const isNegative = shannon < 0 - const absStr = isNegative ? `${shannon}`.slice(1) : `${shannon}` - if (absStr.length <= DECIMAL) { - return `${isNegative ? '-' : '+'}0.${absStr.padStart(DECIMAL, '0')}` - } - const int = absStr.slice(0, -1 * DECIMAL) - const dec = absStr.slice(-1 * DECIMAL) - return `${isNegative ? '-' : '+'}${int}.${dec}` + return new Intl.NumberFormat('en-US', { + useGrouping: false, + signDisplay: 'always', + minimumFractionDigits: ckbDecimals, + maximumFractionDigits: ckbDecimals, + }).format(formatUnit(shannon, 'ckb') as any) } export default shannonToCKB diff --git a/packages/neuron-wallet/src/utils/to-csv-row.ts b/packages/neuron-wallet/src/utils/to-csv-row.ts index ce3d32e842..9992a4e327 100644 --- a/packages/neuron-wallet/src/utils/to-csv-row.ts +++ b/packages/neuron-wallet/src/utils/to-csv-row.ts @@ -41,7 +41,7 @@ const toCSVRow = ( txType = +tx.sudtInfo.amount <= 0 ? `UDT ${SEND_TYPE}` : `UDT ${RECEIVE_TYPE}` } } else { - amount = shannonToCKB(BigInt(tx.value ?? '')) + amount = shannonToCKB(BigInt(tx.value ?? '0')) if (tx.nervosDao) { txType = `Nervos DAO` } else if (['create', 'destroy'].includes(tx.type || '')) { From 476e982b7baf3239d464942e946de02597d8d0b8 Mon Sep 17 00:00:00 2001 From: devchenyan Date: Thu, 11 Apr 2024 12:07:21 +0800 Subject: [PATCH 12/36] feat: Remove unnecessary package electron-build-env (#3116) feat: remove electron-build-env --- packages/neuron-wallet/package.json | 1 - yarn.lock | 49 +++++++++++++++++++---------- 2 files changed, 33 insertions(+), 17 deletions(-) diff --git a/packages/neuron-wallet/package.json b/packages/neuron-wallet/package.json index b8e2c2fef1..48e38216b0 100644 --- a/packages/neuron-wallet/package.json +++ b/packages/neuron-wallet/package.json @@ -94,7 +94,6 @@ "@types/uuid": "8.3.4", "devtron": "1.4.0", "electron": "28.1.0", - "electron-build-env": "0.2.0", "electron-builder": "24.9.1", "electron-devtools-installer": "3.2.0", "jest-when": "3.6.0", diff --git a/yarn.lock b/yarn.lock index da5bd9347d..d756cab0ad 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8350,7 +8350,7 @@ commander@11.1.0: resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== -commander@^2.19.0, commander@^2.20.0, commander@^2.9.0: +commander@^2.19.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -9562,14 +9562,6 @@ ejs@^3.1.6, ejs@^3.1.7, ejs@^3.1.8: dependencies: jake "^10.8.5" -electron-build-env@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/electron-build-env/-/electron-build-env-0.2.0.tgz#5649ee3e5fd006e267086caa945b77a1fa220b92" - integrity sha512-L431TbXtXe6iw3ko7ITr/qCu+jumVKLAhCDyhqfab6421LGlawVcT88Ws/DHR57+1lkLN1POQqwNOkjPwQJQmQ== - dependencies: - commander "^2.9.0" - mkdirp "^0.5.1" - electron-builder@24.9.1: version "24.9.1" resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-24.9.1.tgz#4aee03947963b829a7f48a850fe02c219311ef63" @@ -18708,7 +18700,16 @@ string-natural-compare@^3.0.1: resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -18826,7 +18827,14 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -19707,10 +19715,10 @@ undici-types@~5.26.4: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== -undici@5.28.3: - version "5.28.3" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.3.tgz#a731e0eff2c3fcfd41c1169a869062be222d1e5b" - integrity sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA== +undici@5.28.4: + version "5.28.4" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.4.tgz#6b280408edb6a1a604a9b20340f45b422e373068" + integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g== dependencies: "@fastify/busboy" "^2.0.0" @@ -20610,7 +20618,16 @@ workbox-window@6.6.1: "@types/trusted-types" "^2.0.2" workbox-core "6.6.1" -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== From e03982446a1ba85541105b45b6992675f6c92839 Mon Sep 17 00:00:00 2001 From: devchenyan Date: Thu, 11 Apr 2024 15:58:01 +0800 Subject: [PATCH 13/36] feat: Displaying DAO rewards (#3054) * feat: Displaying DAO rewards * fix: spell error --------- Co-authored-by: Chen Yu --- .../DepositDialog/depositDialog.module.scss | 101 +++++++++++------- .../src/components/DepositDialog/hooks.ts | 33 ++++++ .../src/components/DepositDialog/index.tsx | 66 ++++++++++-- .../src/components/NervosDAO/index.tsx | 6 +- packages/neuron-ui/src/locales/en.json | 3 + packages/neuron-ui/src/locales/es.json | 3 + packages/neuron-ui/src/locales/fr.json | 3 + packages/neuron-ui/src/locales/zh-tw.json | 4 + packages/neuron-ui/src/locales/zh.json | 3 + 9 files changed, 173 insertions(+), 49 deletions(-) diff --git a/packages/neuron-ui/src/components/DepositDialog/depositDialog.module.scss b/packages/neuron-ui/src/components/DepositDialog/depositDialog.module.scss index 821546c681..b2fc0b5edf 100644 --- a/packages/neuron-ui/src/components/DepositDialog/depositDialog.module.scss +++ b/packages/neuron-ui/src/components/DepositDialog/depositDialog.module.scss @@ -1,7 +1,11 @@ @import '../../styles/mixin.scss'; +.container { + width: 680px; +} + .slider { - margin-top: 16px; + margin-top: 10px; :global(.ms-Slider-thumb) { top: -8px; @@ -32,10 +36,31 @@ margin-top: 16px; } -.depositValueLabel { - line-height: 20px; - color: var(--secondary-text-color); - font-size: 14px; +.depositValueLabelWrap { + display: flex; + + .depositValueLabel { + line-height: 20px; + color: var(--secondary-text-color); + font-size: 14px; + } + .tooltip { + margin-left: 120px; + } + .tip { + width: 400px; + word-break: normal; + white-space: normal; + line-height: 180%; + } + + svg { + margin: 2px 4px 0; + cursor: pointer; + path { + fill: var(--primary-color); + } + } } .fee { @@ -43,46 +68,49 @@ justify-content: space-between; font-size: 14px; line-height: 20px; + margin-top: 4px; color: var(--main-text-color); + gap: 24px; & > div { - &:nth-last-child(1) { - width: 230px; - text-align: right; + &:first-child { + flex-shrink: 0; } } } -.notice { - $lineHeight: 24px; - display: flex; - box-sizing: border-box; - margin-top: 22px; - border: 1px solid rgba(252, 136, 0, 0.2); - padding: 7px 54px; - border-radius: 4px; - background: #fff6eb; - color: #f68c2a; - font-weight: 500; - font-size: 12px; - line-height: $lineHeight; - text-align: center; - - & > svg { - $size: 14px; - flex-shrink: 0; - margin: calc(($lineHeight - $size) / 2) 4px 0 0; - width: $size; - height: $size; - - g[fill='#D50000'] { - fill: currentColor; +.rewards { + padding: 6px 16px; + background: var(--tag-green-bg-color); + border-radius: 8px; + margin-top: 14px; + div { + display: flex; + justify-content: space-between; + color: var(--primary-color); + p { + margin: 0; + padding: 4px 0; + font-size: 14px; + line-height: 20px; } } +} - @media (prefers-color-scheme: dark) { - border-color: #4b391c; - background: #4b391c; +.acpContent { + display: flex; + .tip { + min-width: 190px; + word-break: normal; + white-space: normal; + line-height: 180%; + } + svg { + margin: 2px 4px 0; + cursor: pointer; + path { + fill: var(--primary-color); + } } } @@ -90,7 +118,7 @@ font-weight: 500; font-size: 12px; background: inherit; - color: #f68c2a; + color: var(--primary-color); border: none; padding: 0; margin: 0; @@ -111,6 +139,7 @@ gap: 8px; & > svg { + flex-shrink: 0; path { fill: #e5e5e5; diff --git a/packages/neuron-ui/src/components/DepositDialog/hooks.ts b/packages/neuron-ui/src/components/DepositDialog/hooks.ts index 2a28144db6..41fa272d06 100644 --- a/packages/neuron-ui/src/components/DepositDialog/hooks.ts +++ b/packages/neuron-ui/src/components/DepositDialog/hooks.ts @@ -275,3 +275,36 @@ export const useOnDepositDialogCancel = ({ clearGeneratedTx() }, [dispatch, onCloseDepositDialog, resetDepositValue, clearGeneratedTx]) } + +export const useDepositRewards = ({ + depositValue, + maxDepositValue, + disabled, + globalAPC, +}: { + depositValue: string + maxDepositValue: string | null + disabled: boolean + globalAPC: number +}) => { + const [annualRewards, monthRewards] = useMemo(() => { + if (disabled) return ['0', '0'] + + const value = CKBToShannonFormatter( + (Number(maxDepositValue || depositValue) - MIN_DEPOSIT_AMOUNT).toFixed(MAX_DECIMAL_DIGITS).toString() + ) + + const dpc = globalAPC / 365 / 100 + + const mRewards = (Number(value) * dpc * 30).toFixed(0).toString() + + const rewerds = (Number(value) * dpc * 360).toFixed(0).toString() + + return [rewerds, mRewards] + }, [depositValue, maxDepositValue, disabled, globalAPC]) + + return { + annualRewards, + monthRewards, + } +} diff --git a/packages/neuron-ui/src/components/DepositDialog/index.tsx b/packages/neuron-ui/src/components/DepositDialog/index.tsx index fd4125033f..abc69ca05f 100644 --- a/packages/neuron-ui/src/components/DepositDialog/index.tsx +++ b/packages/neuron-ui/src/components/DepositDialog/index.tsx @@ -7,6 +7,7 @@ import { openExternal } from 'services/remote' import { localNumberFormatter, shannonToCKBFormatter } from 'utils' import { Attention, Success } from 'widgets/Icons/icon' import Dialog from 'widgets/Dialog' +import Tooltip from 'widgets/Tooltip' import styles from './depositDialog.module.scss' import { useBalanceReserved, @@ -14,6 +15,7 @@ import { useGenerateDaoDepositTx, useOnDepositDialogCancel, useOnDepositDialogSubmit, + useDepositRewards, } from './hooks' const NERVOS_DAO_RFC_URL = @@ -28,6 +30,7 @@ interface DepositDialogProps { isTxGenerated: boolean suggestFeeRate: number walletID: string + globalAPC: number } const RfcLink = React.memo(() => ( @@ -53,8 +56,9 @@ const DepositDialog = ({ isDepositing, isTxGenerated, suggestFeeRate, + globalAPC, }: DepositDialogProps) => { - const [t] = useTranslation() + const [t, { language }] = useTranslation() const disabled = !isTxGenerated const { isBalanceReserved, onIsBalanceReservedChange, setIsBalanceReserved } = useBalanceReserved() const { depositValue, onChangeDepositValue, slidePercent, onSliderChange, resetDepositValue } = useDepositValue( @@ -81,6 +85,14 @@ const DepositDialog = ({ }, [disabled, onConfirm] ) + const { annualRewards, monthRewards } = useDepositRewards({ + depositValue, + maxDepositValue, + disabled, + globalAPC, + }) + + const isChinese = language === 'zh' || language.startsWith('zh-') return ( {isDepositing ? ( ) : (
- +
+ + + ]} /> +
+ } + > + + +
+
+ {t('nervos-dao.fee')} + {`${shannonToCKBFormatter(fee)}`} +
+
+
+
- {t('nervos-dao.fee')} - {`${shannonToCKBFormatter(fee)}`} +

{t(`nervos-dao.estimated-rewards`, { days: 30 })}

+

{shannonToCKBFormatter(monthRewards)} CKB

+
+
+

{t(`nervos-dao.estimated-rewards`, { days: 360 })}

+

{shannonToCKBFormatter(annualRewards)} CKB

-
- -
-
- ]} /> +
+ {t(`nervos-dao.estimated-apc`)} + {isChinese ? null : ( + {t(`nervos-dao.estimated-apc-tooltip`)}

} + > + +
+ )} +
+

{globalAPC}%

diff --git a/packages/neuron-ui/src/components/NervosDAO/index.tsx b/packages/neuron-ui/src/components/NervosDAO/index.tsx index 24fcef51da..c31269a8f0 100644 --- a/packages/neuron-ui/src/components/NervosDAO/index.tsx +++ b/packages/neuron-ui/src/components/NervosDAO/index.tsx @@ -222,6 +222,7 @@ const NervosDAO = () => { isDepositing={sending} isTxGenerated={!!send.generatedTx} suggestFeeRate={suggestFeeRate} + globalAPC={globalAPC} /> ) }, [ @@ -233,6 +234,7 @@ const NervosDAO = () => { sending, send.generatedTx, suggestFeeRate, + globalAPC, ]) const MemoizedWithdrawDialog = useMemo(() => { @@ -260,7 +262,7 @@ const NervosDAO = () => { const onlineAndSynced = ConnectionStatus.Online === connectionStatus && SyncStatus.SyncCompleted === syncStatus - const isEnglish = language === 'en' || language.startsWith('en-') + const isChinese = language === 'zh' || language.startsWith('zh-') return ( {
{t(`nervos-dao.apc`)} - {isEnglish && ( + {isChinese ? null : ( diff --git a/packages/neuron-ui/src/locales/en.json b/packages/neuron-ui/src/locales/en.json index 4204d777e0..5cc728b75c 100644 --- a/packages/neuron-ui/src/locales/en.json +++ b/packages/neuron-ui/src/locales/en.json @@ -709,6 +709,9 @@ "compensation-accumulated": "{{blockNumber}} blocks compensation accumulated", "withdraw-alert": "Hint: there are only {{epochs}} epochs (~{{hours}} hours) until the end of your current lock period. If you wish to withdraw in current lock period, please send withdraw request in time. There are {{nextLeftEpochs}} epochs(~{{days}} days) until the end of your next lock period.", "balance-not-reserved": "Don't reserve any CKBytes for future DAO operations (Not recommended)", + "estimated-rewards": "Estimated Rewards of {{days}} days", + "estimated-apc": "Estimated APC", + "estimated-apc-tooltip": "Estimated Annual Percentage Compensation", "deposit-amount": "Deposit Amount (CKB)", "deposit-record": { "deposited-at": "Deposited", diff --git a/packages/neuron-ui/src/locales/es.json b/packages/neuron-ui/src/locales/es.json index dc163b043b..7ee4f72514 100644 --- a/packages/neuron-ui/src/locales/es.json +++ b/packages/neuron-ui/src/locales/es.json @@ -692,6 +692,9 @@ "compensation-accumulated": "Compensación acumulada en {{blockNumber}} bloques", "withdraw-alert": "Advertencia: solo quedan {{epochs}} epochs ({{hours}} horas) hasta el final de su periodo de bloqueo actual. Si desea retirar en el periodo de bloqueo actual, envíe la solicitud de retiro a tiempo. Solo quedan {{nextLeftEpochs}} epochs ({{days}} días) hasta el final de su próximo periodo de bloqueo.", "balance-not-reserved": "No reservar ningún CKBytes para futuras operaciones de DAO (no se recomienda)", + "estimated-rewards": "Recompensas estimadas de {{días}} días", + "estimated-apc": "Estimación APC", + "estimated-apc-tooltip": "Estimación de Compensación Anual", "deposit-amount": "Cantidad a Depositar (CKB)", "deposit-record": { "deposited-at": "Depositado", diff --git a/packages/neuron-ui/src/locales/fr.json b/packages/neuron-ui/src/locales/fr.json index 6a76f0d5e4..7d39eebac9 100644 --- a/packages/neuron-ui/src/locales/fr.json +++ b/packages/neuron-ui/src/locales/fr.json @@ -699,6 +699,9 @@ "compensation-accumulated": "{{blockNumber}} blocs de compensation accumulée", "withdraw-alert": "Astuce : il ne reste que {{epochs}} époques (~{{hours}} heures) jusqu'à la fin de votre période de verrouillage actuelle. Si vous souhaitez retirer pendant cette période de verrouillage, veuillez envoyer une demande de retrait à temps. Il reste {{nextLeftEpochs}} époques (~{{days}} jours) jusqu'à la fin de votre prochaine période de verrouillage.", "balance-not-reserved": "Ne pas réserver de CKBytes pour les futures opérations DAO (non recommandé)", + "estimated-rewards": "Récompenses estimées de {{days}} jours", + "estimated-apc": "Estimation de APC", + "estimated-apc-tooltip": "Estimation de Compensation Annuel", "deposit-amount": "Montant du dépôt (CKB)", "deposit-record": { "deposited-at": "Déposé", diff --git a/packages/neuron-ui/src/locales/zh-tw.json b/packages/neuron-ui/src/locales/zh-tw.json index 32130fbf4e..e3d4260af5 100644 --- a/packages/neuron-ui/src/locales/zh-tw.json +++ b/packages/neuron-ui/src/locales/zh-tw.json @@ -703,6 +703,10 @@ "compensation-accumulated": "已累計 {{blockNumber}} 個塊的鎖定補貼", "withdraw-alert": "提示:本補貼申請距離 Nervos DAO 規則允許的最近一個鎖定週期僅剩下 {{epochs}} 個 epoch (約 {{hours}} 小時)。如果您希望在本鎖定週期取出,請及時提交取出申請,以確保取出申請能在本鎖定週期結束之前上鏈。下一個鎖定週期的結束時間預計為 {{nextLeftEpochs}} 個 epochs (約 {{days}} 天)。", "balance-not-reserved": "(不建議)不預留未來操作手續費", + "estimated-rewards": "{{days}}天預計獎勵", + "estimated-apc": "預計年化鎖定補貼率", + "estimated-apc-tooltip": "預計年化鎖定補貼率", + "deposit-amount": "存入金額 (CKB)", "deposit-record": { "deposited-at": "存入於", "completed-at": "已取出", diff --git a/packages/neuron-ui/src/locales/zh.json b/packages/neuron-ui/src/locales/zh.json index bef868f0b4..0611594ee6 100644 --- a/packages/neuron-ui/src/locales/zh.json +++ b/packages/neuron-ui/src/locales/zh.json @@ -702,6 +702,9 @@ "compensation-accumulated": "已累计 {{blockNumber}} 个块的锁定补贴", "withdraw-alert": "提示:本补贴申请距离 Nervos DAO 规则允许的最近一个锁定周期仅剩下 {{epochs}} 个 epoch (约 {{hours}} 小时)。 如果您希望在本锁定周期取出,请及时提交取出申请,以确保取出申请能在本锁定周期结束之前上链。下一个锁定周期的结束时间预计为 {{nextLeftEpochs}} 个 epochs (约 {{days}} 天)。", "balance-not-reserved": "不预留未来操作手续费(不建议)", + "estimated-rewards": "{{days}}天预计奖励", + "estimated-apc": "预计年化锁定补贴率", + "estimated-apc-tooltip": "预计年化锁定补贴率", "deposit-amount": "存入金额 (CKB)", "deposit-record": { "deposited-at": "存入于", From 3d3e767f3a8e446b1e9d568545abcd99aa8c9bd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=A5=E5=9B=BD=E5=AE=87?= <841185308@qq.com> Date: Fri, 12 Apr 2024 15:58:50 +0800 Subject: [PATCH 14/36] feat: Keep screen awake (#3066) --- .../GeneralSetting/generalSetting.module.scss | 9 ++++-- .../src/components/GeneralSetting/index.tsx | 27 ++++++++++++++++-- .../components/Settings/settings.module.scss | 2 +- .../neuron-ui/src/containers/Main/index.tsx | 11 ++++++-- packages/neuron-ui/src/locales/en.json | 3 +- packages/neuron-ui/src/locales/es.json | 3 +- packages/neuron-ui/src/locales/fr.json | 3 +- packages/neuron-ui/src/locales/zh-tw.json | 3 +- packages/neuron-ui/src/locales/zh.json | 3 +- packages/neuron-ui/src/services/localCache.ts | 11 ++++++++ packages/neuron-ui/src/utils/index.ts | 1 + packages/neuron-ui/src/utils/wakeScreen.ts | 28 +++++++++++++++++++ 12 files changed, 92 insertions(+), 12 deletions(-) create mode 100644 packages/neuron-ui/src/utils/wakeScreen.ts diff --git a/packages/neuron-ui/src/components/GeneralSetting/generalSetting.module.scss b/packages/neuron-ui/src/components/GeneralSetting/generalSetting.module.scss index e55142e967..bd41cc7b53 100644 --- a/packages/neuron-ui/src/components/GeneralSetting/generalSetting.module.scss +++ b/packages/neuron-ui/src/components/GeneralSetting/generalSetting.module.scss @@ -4,14 +4,19 @@ $action-button-width: 11.25rem; .container { display: flex; + flex-wrap: wrap; width: 100%; + gap: 16px; .content { width: 176px; padding: 16px; background: var(--input-disabled-color); border-radius: 8px; - margin-right: 16px; + display: flex; + flex-direction: column; + justify-content: space-between; + flex-shrink: 0; p { font-size: 14px; @@ -19,7 +24,7 @@ $action-button-width: 11.25rem; margin: 0 0 12px; color: var(--main-text-color); } - button { + button[data-button-type='text'] { font-size: 14px; line-height: 20px; border: none; diff --git a/packages/neuron-ui/src/components/GeneralSetting/index.tsx b/packages/neuron-ui/src/components/GeneralSetting/index.tsx index 7866c4eaaa..bc0dcc5ba0 100644 --- a/packages/neuron-ui/src/components/GeneralSetting/index.tsx +++ b/packages/neuron-ui/src/components/GeneralSetting/index.tsx @@ -8,8 +8,10 @@ import { ReactComponent as VersionLogo } from 'widgets/Icons/VersionLogo.svg' import { ReactComponent as ArrowNext } from 'widgets/Icons/ArrowNext.svg' import { ReactComponent as Update } from 'widgets/Icons/Update.svg' import { cancelCheckUpdates, downloadUpdate, installUpdate, getVersion } from 'services/remote' -import { uniformTimeFormatter, bytesFormatter, clsx } from 'utils' +import { uniformTimeFormatter, bytesFormatter, clsx, wakeScreen, releaseWakeLock } from 'utils' import { LanguageSelect } from 'widgets/Icons/icon' +import Switch from 'widgets/Switch' +import { keepScreenAwake } from 'services/localCache' import styles from './generalSetting.module.scss' import { useCheckUpdate, useUpdateDownloadStatus } from './hooks' @@ -173,13 +175,29 @@ const GeneralSetting = ({ updater }: GeneralSettingProps) => { } }, [updater.errorMsg, setErrorMsg]) + const [isScreenKeepAwake, setIsScreenKeepAwake] = useState(keepScreenAwake.get()) + const onChangeScreenKeepAwake = useCallback((v: boolean) => { + keepScreenAwake.save(v) + setIsScreenKeepAwake(v) + if (v) { + wakeScreen() + } else { + releaseWakeLock() + } + }, []) + return (

{t('settings.general.version')} v{newVersion || currentVersion}

- @@ -189,6 +207,7 @@ const GeneralSetting = ({ updater }: GeneralSettingProps) => {

{t('settings.general.language')}

+
+

{t('settings.general.keep-awake')}

+ +
{ } = useNoDiskSpace(navigate) const needConfirm = newCkbDataPath && newCkbDataPath !== oldCkbDataPath + useEffect(() => { + if (keepScreenAwake.get()) { + wakeScreen() + } + }, []) + return (
diff --git a/packages/neuron-ui/src/locales/en.json b/packages/neuron-ui/src/locales/en.json index 5cc728b75c..5e16c40df8 100644 --- a/packages/neuron-ui/src/locales/en.json +++ b/packages/neuron-ui/src/locales/en.json @@ -394,7 +394,8 @@ "version": "Version", "language": "Language", "select-language": "Select Language", - "apply": "Apply" + "apply": "Apply", + "keep-awake": "Keep the screen awake during synchronization" }, "wallet-manager": { "edit-wallet": { diff --git a/packages/neuron-ui/src/locales/es.json b/packages/neuron-ui/src/locales/es.json index 7ee4f72514..590e452f5f 100644 --- a/packages/neuron-ui/src/locales/es.json +++ b/packages/neuron-ui/src/locales/es.json @@ -386,7 +386,8 @@ "version": "Versión", "language": "Idioma", "select-language": "Seleccionar Idioma", - "apply": "Aplicar" + "apply": "Aplicar", + "keep-awake": "Mantener la pantalla encendida durante la sincronización" }, "wallet-manager": { "edit-wallet": { diff --git a/packages/neuron-ui/src/locales/fr.json b/packages/neuron-ui/src/locales/fr.json index 7d39eebac9..c42bfc3594 100644 --- a/packages/neuron-ui/src/locales/fr.json +++ b/packages/neuron-ui/src/locales/fr.json @@ -393,7 +393,8 @@ "version": "Version", "language": "Langue", "select-language": "Sélectionner la langue", - "apply": "Appliquer" + "apply": "Appliquer", + "keep-awake": "Maintenir l'écran allumé pendant la synchronisation" }, "wallet-manager": { "edit-wallet": { diff --git a/packages/neuron-ui/src/locales/zh-tw.json b/packages/neuron-ui/src/locales/zh-tw.json index e3d4260af5..b6b4baad1d 100644 --- a/packages/neuron-ui/src/locales/zh-tw.json +++ b/packages/neuron-ui/src/locales/zh-tw.json @@ -389,7 +389,8 @@ "version": "版本", "language": "語言", "select-language": "選擇語言", - "apply": "應用" + "apply": "應用", + "keep-awake": "同步期間保持屏幕喚醒" }, "wallet-manager": { "edit-wallet": { diff --git a/packages/neuron-ui/src/locales/zh.json b/packages/neuron-ui/src/locales/zh.json index 0611594ee6..c837c54415 100644 --- a/packages/neuron-ui/src/locales/zh.json +++ b/packages/neuron-ui/src/locales/zh.json @@ -387,7 +387,8 @@ "version": "版本", "language": "系统语言", "select-language": "选择语言", - "apply": "应用" + "apply": "应用", + "keep-awake": "同步期间保持屏幕唤醒" }, "wallet-manager": { "edit-wallet": { diff --git a/packages/neuron-ui/src/services/localCache.ts b/packages/neuron-ui/src/services/localCache.ts index 02ae5b823e..a53f75513c 100644 --- a/packages/neuron-ui/src/services/localCache.ts +++ b/packages/neuron-ui/src/services/localCache.ts @@ -11,6 +11,7 @@ export enum LocalCacheKey { LoadedWalletIDs = 'loadedWalletIDs', ImportedWallet = 'ImportedWallet', ShownNodeId = 'ShownNodeId', + ScreenAwake = 'ScreenAwake', } export const addresses = { @@ -165,3 +166,13 @@ export const lastShowInternalNodeIds = { window.localStorage.setItem(`${type}_${LocalCacheKey.ShownNodeId}`, id) }, } + +export const keepScreenAwake = { + get: () => { + const value = window.localStorage.getItem(LocalCacheKey.ScreenAwake) + return !!value && value === 'true' + }, + save: (value: boolean) => { + window.localStorage.setItem(LocalCacheKey.ScreenAwake, value.toString()) + }, +} diff --git a/packages/neuron-ui/src/utils/index.ts b/packages/neuron-ui/src/utils/index.ts index eb762f388d..4fe2f818d6 100644 --- a/packages/neuron-ui/src/utils/index.ts +++ b/packages/neuron-ui/src/utils/index.ts @@ -28,5 +28,6 @@ export * from './multisig' export * from './getNetworkLabel' export * from './calculateUsedCapacity' export * from './outPointTransform' +export * from './wakeScreen' export { CONSTANTS } diff --git a/packages/neuron-ui/src/utils/wakeScreen.ts b/packages/neuron-ui/src/utils/wakeScreen.ts new file mode 100644 index 0000000000..20e2ff6109 --- /dev/null +++ b/packages/neuron-ui/src/utils/wakeScreen.ts @@ -0,0 +1,28 @@ +let wakeLock: WakeLockSentinel | undefined + +async function reAwake() { + if (document.visibilityState === 'visible') { + wakeLock = await navigator.wakeLock.request('screen') + } else { + wakeLock?.release() + wakeLock = undefined + } +} + +export async function wakeScreen() { + if (wakeLock) return + try { + wakeLock = await navigator.wakeLock.request('screen') + document.addEventListener('visibilitychange', reAwake) + } catch (err) { + // do nothing here + } +} + +export async function releaseWakeLock() { + if (wakeLock) { + await wakeLock.release() + document.removeEventListener('visibilitychange', reAwake) + wakeLock = undefined + } +} From de1df5d57b8589d7f94065d33ada8570a1969493 Mon Sep 17 00:00:00 2001 From: Tom Wang Date: Fri, 12 Apr 2024 17:36:18 +0800 Subject: [PATCH 15/36] refactor: rewrite sudtValueToAmount with formatUnit in neuron-wallet (#3119) --- .../src/utils/sudt-value-to-amount.ts | 37 ++++--------------- .../utils/sudt-value-to-amount/fixtures.json | 10 +++++ 2 files changed, 18 insertions(+), 29 deletions(-) diff --git a/packages/neuron-wallet/src/utils/sudt-value-to-amount.ts b/packages/neuron-wallet/src/utils/sudt-value-to-amount.ts index 4791a68544..37c1ed2c03 100644 --- a/packages/neuron-wallet/src/utils/sudt-value-to-amount.ts +++ b/packages/neuron-wallet/src/utils/sudt-value-to-amount.ts @@ -1,32 +1,11 @@ -const sudtValueToAmount = (value: string | null | undefined = '0', decimal: string | null | undefined = '') => { - if (value === null || value === '0') { - return '+0' - } - - if (decimal === null || decimal === undefined || Number.isNaN(+value)) { - return '--' - } - - let sign = '+' - if (value.startsWith('-')) { - sign = '-' - } - - const unsignedValue = value.replace(/^-?0*/, '') - - const dec = +decimal - if (dec === 0) { - return +unsignedValue ? `${sign}${unsignedValue}` : '+0' - } - let unsignedSUDTValue = '' - if (unsignedValue.length <= dec) { - unsignedSUDTValue = `0.${unsignedValue.padStart(dec, '0')}`.replace(/\.?0+$/, '') - } else { - const decimalFraction = `.${unsignedValue.slice(-dec)}`.replace(/\.?0+$/, '') - const int = unsignedValue.slice(0, -dec).replace(/\^0+/, '') - unsignedSUDTValue = `${int}${decimalFraction}` - } - return `${sign}${unsignedSUDTValue}` +import { formatUnit } from '@ckb-lumos/bi' + +const sudtValueToAmount = (value: string | null = '0', decimal: string | null = '') => { + return value === null || value === '0' + ? '+0' + : decimal === null || Number.isNaN(+value) || Number.isNaN(+decimal) + ? '--' + : `${+value >= 0 ? '+' : ''}${formatUnit(BigInt(value), +decimal)}` } export default sudtValueToAmount diff --git a/packages/neuron-wallet/tests/utils/sudt-value-to-amount/fixtures.json b/packages/neuron-wallet/tests/utils/sudt-value-to-amount/fixtures.json index d98624cd1e..f4b1c9c6e5 100644 --- a/packages/neuron-wallet/tests/utils/sudt-value-to-amount/fixtures.json +++ b/packages/neuron-wallet/tests/utils/sudt-value-to-amount/fixtures.json @@ -14,11 +14,21 @@ "decimal": "12", "expected": "+0" }, + "null value and null decimal": { + "value": null, + "decimal": null, + "expected": "+0" + }, "zero value": { "value": "0", "decimal": "1", "expected": "+0" }, + "zero value and null decimal": { + "value": "0", + "decimal": null, + "expected": "+0" + }, "negative value": { "value": "-1", "decimal": "1", From 5fe467e73cc607d53d82dc4c28bd379708569ca2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 13 Apr 2024 12:57:57 +0900 Subject: [PATCH 16/36] Update ckb client versions (#3122) feat: update ckb client versions Co-authored-by: Keith-CY --- .ckb-light-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ckb-light-version b/.ckb-light-version index d379b578ae..534baa8df5 100644 --- a/.ckb-light-version +++ b/.ckb-light-version @@ -1 +1 @@ -v0.3.6 +v0.3.7 From f05cff7624e97a8bd7cb4dd451b56e7b6fe62053 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 14 Apr 2024 22:16:23 +0900 Subject: [PATCH 17/36] chore: Update ckb node assume valid target (#3123) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- packages/neuron-wallet/.env | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/neuron-wallet/.env b/packages/neuron-wallet/.env index ea6ce9081c..f32862920f 100644 --- a/packages/neuron-wallet/.env +++ b/packages/neuron-wallet/.env @@ -117,5 +117,5 @@ DAO_CODE_HASH=0x82d76d1b75fe2fd9a27dfbaa65a039221a380d76c926f378d3f81cf3e7e13f2e MULTISIG_CODE_HASH=0x5c5069eb0857efc65e1bca0c07df34c31663b3622fd3876c876320fc9634e2a8 # CKB NODE OPTIONS -CKB_NODE_ASSUME_VALID_TARGET='0x397d7d41167051cab2bf1610e334ad3aa5cf612e2cd442f71b91422e0361141e' -CKB_NODE_DATA_SIZE=51 +CKB_NODE_ASSUME_VALID_TARGET='0x9443ad8da9172d484367bc5467988cba7a0c46028398309edfdda7d2d79be897' +CKB_NODE_DATA_SIZE=53 From 59fef75a3daaba63d58236572caebb02a8122787 Mon Sep 17 00:00:00 2001 From: Keith Date: Sun, 14 Apr 2024 22:40:50 +0900 Subject: [PATCH 18/36] chore: update versions and changelogs --- CHANGELOG.md | 29 +++++++++++++++++++++++++++++ lerna.json | 2 +- package.json | 2 +- packages/neuron-ui/package.json | 2 +- packages/neuron-wallet/package.json | 4 ++-- 5 files changed, 34 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c618b3b53..1442482595 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,32 @@ +# 0.114.3 (2024-04-16) + +### CKB Node & Light Client + +- [CKB@v0.114.0](https://github.com/nervosnetwork/ckb/releases/tag/v0.114.0) was released on Feb. 29st, 2024. This version of CKB node is now bundled and preconfigured in Neuron. +- [CKB Light Client@v0.3.7](https://github.com/nervosnetwork/ckb-light-client/releases/tag/v0.3.7) was released on Apr. 13th, 2024. This version of CKB Light Client is now bundled and preconfigured in Neuron + +### Assumed valid target + +Block before `0x9443ad8da9172d484367bc5467988cba7a0c46028398309edfdda7d2d79be897`(at height `12,703,957`) will be skipped in validation.(https://github.com/nervosnetwork/neuron/pull/3123) + +--- + +## New features + +- #3054: Displaying DAO rewards.(@devchenyan) +- #3066: Support keeping screen awake.(@yanguoyu) + +## Bug fixes + +- #3055: Fix sending sudt to a new acp cell with extra 142 CKB by offline sign.(@yanguoyu) +- #3103: Handle MacOS crash properly on quitting.(@devchenyan) + +## New Contributors + +- @twhy made their first contribution in https://github.com/nervosnetwork/neuron/pull/3110 + +**Full Changelog**: https://github.com/nervosnetwork/neuron/compare/v0.114.2...v0.114.3 + # 0.114.2 (2024-03-15) ### CKB Node & Light Client diff --git a/lerna.json b/lerna.json index 85d52c39c0..0e77734cb4 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "packages": ["packages/*"], - "version": "0.114.2", + "version": "0.114.3", "npmClient": "yarn", "$schema": "node_modules/lerna/schemas/lerna-schema.json" } diff --git a/package.json b/package.json index aa0b2ab372..0f08c1da14 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "neuron", "productName": "Neuron", "description": "CKB Neuron Wallet", - "version": "0.114.2", + "version": "0.114.3", "private": true, "author": { "name": "Nervos Core Dev", diff --git a/packages/neuron-ui/package.json b/packages/neuron-ui/package.json index ba3c788a3d..9901985b4f 100644 --- a/packages/neuron-ui/package.json +++ b/packages/neuron-ui/package.json @@ -1,6 +1,6 @@ { "name": "neuron-ui", - "version": "0.114.2", + "version": "0.114.3", "private": true, "author": { "name": "Nervos Core Dev", diff --git a/packages/neuron-wallet/package.json b/packages/neuron-wallet/package.json index 48e38216b0..f59790491c 100644 --- a/packages/neuron-wallet/package.json +++ b/packages/neuron-wallet/package.json @@ -3,7 +3,7 @@ "productName": "Neuron", "description": "CKB Neuron Wallet", "homepage": "https://www.nervos.org/", - "version": "0.114.2", + "version": "0.114.3", "private": true, "author": { "name": "Nervos Core Dev", @@ -97,7 +97,7 @@ "electron-builder": "24.9.1", "electron-devtools-installer": "3.2.0", "jest-when": "3.6.0", - "neuron-ui": "0.114.2", + "neuron-ui": "0.114.3", "typescript": "5.3.3" } } From 359d7b784408b7c82696ab2356c71fd0c2ab832c Mon Sep 17 00:00:00 2001 From: Tom Wang Date: Tue, 16 Apr 2024 16:37:13 +0800 Subject: [PATCH 19/36] refactor: rewrite sudtValueToAmount with formatUnit in neuron-ui (#3126) * refactor: rewrite sudtValueToAmount with formatUnit in neuron-ui * Add comment for using any type Co-authored-by: homura --------- Co-authored-by: homura --- packages/neuron-ui/package.json | 1 + .../formatters/sudtValueToAmount/fixtures.ts | 14 +++++- packages/neuron-ui/src/utils/formatters.ts | 49 +++++-------------- packages/neuron-ui/src/utils/getSUDTAmount.ts | 2 +- 4 files changed, 26 insertions(+), 40 deletions(-) diff --git a/packages/neuron-ui/package.json b/packages/neuron-ui/package.json index ba3c788a3d..a36fc216d9 100644 --- a/packages/neuron-ui/package.json +++ b/packages/neuron-ui/package.json @@ -50,6 +50,7 @@ "last 2 chrome versions" ], "dependencies": { + "@ckb-lumos/bi": "0.21.1", "@ckb-lumos/base": "0.21.1", "@ckb-lumos/codec": "0.21.1", "@nervosnetwork/ckb-sdk-core": "0.109.0", diff --git a/packages/neuron-ui/src/tests/formatters/sudtValueToAmount/fixtures.ts b/packages/neuron-ui/src/tests/formatters/sudtValueToAmount/fixtures.ts index a91adedd80..e6ec65d7b8 100644 --- a/packages/neuron-ui/src/tests/formatters/sudtValueToAmount/fixtures.ts +++ b/packages/neuron-ui/src/tests/formatters/sudtValueToAmount/fixtures.ts @@ -10,18 +10,28 @@ export default { expected: '0', }, '0 decimal': { - value: '1', + value: '12345', decimal: '0', - expected: '1', + expected: '12,345', }, '1 decimal': { value: '1', decimal: '1', expected: '0.1', }, + '2 decimal': { + value: '1234567890', + decimal: '2', + expected: '12,345,678.9', + }, '32 decimal': { value: '100000000000000000000000000000001', decimal: '32', expected: '1.00000000000000000000000000000001', }, + '32 decimal and commas': { + value: '12345678900000000000000000000000000000001', + decimal: '32', + expected: '123,456,789.00000000000000000000000000000001', + }, } diff --git a/packages/neuron-ui/src/utils/formatters.ts b/packages/neuron-ui/src/utils/formatters.ts index ea630e6fad..45dc1f36e0 100644 --- a/packages/neuron-ui/src/utils/formatters.ts +++ b/packages/neuron-ui/src/utils/formatters.ts @@ -1,3 +1,4 @@ +import { formatUnit } from '@ckb-lumos/bi' import { molecule } from '@ckb-lumos/codec' import { blockchain } from '@ckb-lumos/base' import { TFunction } from 'i18next' @@ -236,45 +237,19 @@ export const sudtValueToAmount = ( value: string | null = '0', decimal: string = '0', showPositiveSign = false, - separator = ',' + showCommaSeparator = true ) => { - if (value === null) { - return showPositiveSign ? '+0' : '0' + if (Number.isNaN(Number(value))) { + console.warn(`Invalid sudt value: ${value}`) } - if (Number.isNaN(+value)) { - console.warn(`sUDT value is not a valid number`) - return showPositiveSign ? '+0' : '0' - } - let sign = '' - if (value.startsWith('-')) { - sign = '-' - } else if (showPositiveSign) { - sign = '+' - } - const unsignedValue = value.replace(/^-?0*/, '') - const dec = +decimal - if (dec === 0) { - return +unsignedValue ? `${sign}${unsignedValue}` : '0' - } - let unsignedSUDTValue = '' - if (unsignedValue.length <= dec) { - unsignedSUDTValue = `0.${unsignedValue.padStart(dec, '0')}`.replace(/\.?0+$/, '') - } else { - const decimalFraction = `.${unsignedValue.slice(-dec)}`.replace(/\.?0+$/, '') - const int = unsignedValue.slice(0, -dec).replace(/\^0+/, '') - unsignedSUDTValue = `${( - int - .split('') - .reverse() - .join('') - .match(/\d{1,3}/g) || ['0'] - ) - .join(separator) - .split('') - .reverse() - .join('')}${decimalFraction}` - } - return `${sign}${+unsignedSUDTValue === 0 ? '0' : unsignedSUDTValue}` + const val = value === null || Number.isNaN(+value) ? '0' : value + const [int, dec = ''] = formatUnit(val, +decimal).split('.') + const fmt = new Intl.NumberFormat('en-US', { + useGrouping: showCommaSeparator, + signDisplay: showPositiveSign ? 'always' : 'auto', + }) + // use any type to avoid TS errors since string is not listed in the args IntlFormatter.prototype.format definition but it works + return `${fmt.format(int as any)}${dec ? `.${dec}` : ''}` } export const sUDTAmountFormatter = (amount: string) => { diff --git a/packages/neuron-ui/src/utils/getSUDTAmount.ts b/packages/neuron-ui/src/utils/getSUDTAmount.ts index d8c66a1ce6..ac151fdc1d 100644 --- a/packages/neuron-ui/src/utils/getSUDTAmount.ts +++ b/packages/neuron-ui/src/utils/getSUDTAmount.ts @@ -11,7 +11,7 @@ export const getSUDTAmount = ({ let amountToCopy = amount if (tokenInfo) { amount = `${sudtValueToAmount(amount, tokenInfo.decimal)} ${tokenInfo.symbol}` - amountToCopy = sudtValueToAmount(amountToCopy, tokenInfo.decimal, false, '') + amountToCopy = sudtValueToAmount(amountToCopy, tokenInfo.decimal, false, false) } return { amount, From e26700932f5942c59b17a7bfdf0b6d375012c1c2 Mon Sep 17 00:00:00 2001 From: Keith Date: Wed, 17 Apr 2024 03:06:18 +0900 Subject: [PATCH 20/36] docs: update ckb version in release note --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1442482595..a35aea95a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ### CKB Node & Light Client -- [CKB@v0.114.0](https://github.com/nervosnetwork/ckb/releases/tag/v0.114.0) was released on Feb. 29st, 2024. This version of CKB node is now bundled and preconfigured in Neuron. +- [CKB@v0.115.0](https://github.com/nervosnetwork/ckb/releases/tag/v0.115.0) was released on Apr. 1st, 2024. This version of CKB node is now bundled and preconfigured in Neuron. - [CKB Light Client@v0.3.7](https://github.com/nervosnetwork/ckb-light-client/releases/tag/v0.3.7) was released on Apr. 13th, 2024. This version of CKB Light Client is now bundled and preconfigured in Neuron ### Assumed valid target From 5b64e719fdeca51cc89e2f8601fb735be8ab635b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=A5=E5=9B=BD=E5=AE=87?= <841185308@qq.com> Date: Wed, 17 Apr 2024 13:59:02 +0800 Subject: [PATCH 21/36] fix: If all of the previous Tx hashes are cell base, skip fetch tx. (#3125) --- .../src/block-sync-renderer/sync/light-synchronizer.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/neuron-wallet/src/block-sync-renderer/sync/light-synchronizer.ts b/packages/neuron-wallet/src/block-sync-renderer/sync/light-synchronizer.ts index 1adccf187b..ece089a109 100644 --- a/packages/neuron-wallet/src/block-sync-renderer/sync/light-synchronizer.ts +++ b/packages/neuron-wallet/src/block-sync-renderer/sync/light-synchronizer.ts @@ -262,6 +262,7 @@ export default class LightSynchronizer extends Synchronizer { previousTxHashes.add(previousTxHash) } }) + if (!previousTxHashes.size) return await this.lightRpc.createBatchRequest([...previousTxHashes].map(v => ['fetchTransaction' as keyof Base, v])).exec() } From ab2e85d66d9075f9dfc62a3ad54c14cca26e30ad Mon Sep 17 00:00:00 2001 From: devchenyan Date: Wed, 17 Apr 2024 14:40:37 +0800 Subject: [PATCH 22/36] fix: Pop up window can be rolled when error message is long (#3118) fix: AlertDialog title Co-authored-by: Chen Yu --- .../neuron-ui/src/widgets/AlertDialog/alertDialog.module.scss | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/neuron-ui/src/widgets/AlertDialog/alertDialog.module.scss b/packages/neuron-ui/src/widgets/AlertDialog/alertDialog.module.scss index b89b270757..2ed26542cf 100644 --- a/packages/neuron-ui/src/widgets/AlertDialog/alertDialog.module.scss +++ b/packages/neuron-ui/src/widgets/AlertDialog/alertDialog.module.scss @@ -15,6 +15,9 @@ font-weight: 500; margin: 14px 0 16px 0; color: var(--main-text-color); + white-space: pre-wrap; + word-wrap: break-word; + overflow-wrap: break-word; } .message { From 8b3486e3b45a37d0309bb114c8667d2b96244330 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=A5=E5=9B=BD=E5=AE=87?= <841185308@qq.com> Date: Thu, 18 Apr 2024 10:53:23 +0800 Subject: [PATCH 23/36] fix: View the address transactions order by time to get the first transaction block number easily (#3121) fix: View the address order by time for better get the first transaction block number Co-authored-by: Chen Yu --- packages/neuron-ui/src/components/PageContainer/hooks.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/neuron-ui/src/components/PageContainer/hooks.ts b/packages/neuron-ui/src/components/PageContainer/hooks.ts index 7122c13905..ce87534fd6 100644 --- a/packages/neuron-ui/src/components/PageContainer/hooks.ts +++ b/packages/neuron-ui/src/components/PageContainer/hooks.ts @@ -74,7 +74,7 @@ export const useSetBlockNumber = ({ ) const onOpenAddressInExplorer = useCallback(() => { const explorerUrl = getExplorerUrl(isMainnet) - openExternal(`${explorerUrl}/address/${firstAddress}`) + openExternal(`${explorerUrl}/address/${firstAddress}?sort=time`) }, [firstAddress, isMainnet]) const onViewBlock = useCallback(() => { const explorerUrl = getExplorerUrl(isMainnet) From 3981ba6a6e0376602fa6a8dfecf7dc893c4851f2 Mon Sep 17 00:00:00 2001 From: Tom Wang Date: Fri, 19 Apr 2024 13:46:25 +0800 Subject: [PATCH 24/36] build(ci): upgrade Electron to v30, ci Node to v20.11.1 (#3133) --- .github/workflows/unit_tests.yml | 2 +- packages/neuron-ui/package.json | 2 +- packages/neuron-wallet/package.json | 2 +- yarn.lock | 20 +++++++++++--------- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml index 4ca3d472ad..e77a974953 100644 --- a/.github/workflows/unit_tests.yml +++ b/.github/workflows/unit_tests.yml @@ -9,7 +9,7 @@ jobs: strategy: matrix: node: - - 18.12.0 + - 20.11.1 os: - macos-latest - ubuntu-20.04 diff --git a/packages/neuron-ui/package.json b/packages/neuron-ui/package.json index c75147e94d..dbc6ed8595 100644 --- a/packages/neuron-ui/package.json +++ b/packages/neuron-ui/package.json @@ -91,7 +91,7 @@ "@types/styled-components": "5.1.34", "@wojtekmaj/enzyme-adapter-react-17": "0.8.0", "babel-jest": "25.5.1", - "electron": "28.1.0", + "electron": "30.0.0", "enzyme": "3.11.0", "enzyme-adapter-react-16": "1.15.7", "eslint-config-airbnb": "19.0.4", diff --git a/packages/neuron-wallet/package.json b/packages/neuron-wallet/package.json index f59790491c..5d56449c91 100644 --- a/packages/neuron-wallet/package.json +++ b/packages/neuron-wallet/package.json @@ -93,7 +93,7 @@ "@types/sqlite3": "3.1.11", "@types/uuid": "8.3.4", "devtron": "1.4.0", - "electron": "28.1.0", + "electron": "30.0.0", "electron-builder": "24.9.1", "electron-devtools-installer": "3.2.0", "jest-when": "3.6.0", diff --git a/yarn.lock b/yarn.lock index 74342fdd95..8e79b01590 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5704,10 +5704,12 @@ dependencies: undici-types "~5.26.4" -"@types/node@^18.11.18": - version "18.16.18" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.18.tgz#85da09bafb66d4bc14f7c899185336d0c1736390" - integrity sha512-/aNaQZD0+iSBAGnvvN2Cx92HqE5sZCPZtx2TsK+4nvV23fFe09jVDvpArXr2j9DnYlzuU9WuoykDDc6wqvpNcw== +"@types/node@^20.9.0": + version "20.12.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" + integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== + dependencies: + undici-types "~5.26.4" "@types/normalize-package-data@^2.4.0": version "2.4.1" @@ -9639,13 +9641,13 @@ electron-window-state@5.0.3: jsonfile "^4.0.0" mkdirp "^0.5.1" -electron@28.1.0: - version "28.1.0" - resolved "https://registry.yarnpkg.com/electron/-/electron-28.1.0.tgz#9de1ecdaafcb0ec5753827f14dfb199e6c84545e" - integrity sha512-82Y7o4PSWPn1o/aVwYPsgmBw6Gyf2lVHpaBu3Ef8LrLWXxytg7ZRZr/RtDqEMOzQp3+mcuy3huH84MyjdmP50Q== +electron@30.0.0: + version "30.0.0" + resolved "https://registry.yarnpkg.com/electron/-/electron-30.0.0.tgz#6b72a27dcc46759fac5f12e147ef64554e596391" + integrity sha512-GRwKphq/TUhSlb44OwSckXKl50f5OR/pm9MvF3rBLyqcxwfu7L11xejrZ0hDea1eKyCkzGd4B+cIqaQiDguPEA== dependencies: "@electron/get" "^2.0.0" - "@types/node" "^18.11.18" + "@types/node" "^20.9.0" extract-zip "^2.0.1" elliptic@6.5.4, elliptic@^6.5.4: From 820e073496cc0d603fa3081e27f5e654d9957617 Mon Sep 17 00:00:00 2001 From: Tom Wang Date: Fri, 19 Apr 2024 18:12:12 +0800 Subject: [PATCH 25/36] refactor: rewrite shannonToCKBFormatter with formatUnit (#3129) Co-authored-by: Chen Yu --- .../src/components/AddressBook/index.tsx | 2 +- .../src/components/Balance/index.tsx | 2 +- .../src/components/DepositDialog/hooks.ts | 4 +- .../src/components/NervosDAO/index.tsx | 4 +- .../src/components/NervosDAODetail/index.tsx | 2 +- .../src/components/NervosDAORecord/index.tsx | 2 +- .../src/components/Overview/index.tsx | 4 +- .../neuron-ui/src/components/Send/hooks.ts | 2 +- .../SendFromMultisigDialog/hooks.ts | 2 +- packages/neuron-ui/src/utils/formatters.ts | 40 ++++--------------- 10 files changed, 20 insertions(+), 44 deletions(-) diff --git a/packages/neuron-ui/src/components/AddressBook/index.tsx b/packages/neuron-ui/src/components/AddressBook/index.tsx index 5bcd15bd13..19c5e5d7c3 100644 --- a/packages/neuron-ui/src/components/AddressBook/index.tsx +++ b/packages/neuron-ui/src/components/AddressBook/index.tsx @@ -118,7 +118,7 @@ const AddressBook = ({ onClose }: { onClose?: () => void }) => { return `${HIDE_BALANCE} CKB` } return ( - + {`${shannonToCKBFormatter(balance)} CKB`} ) diff --git a/packages/neuron-ui/src/components/Balance/index.tsx b/packages/neuron-ui/src/components/Balance/index.tsx index dec27a4b9d..6a2b073e35 100644 --- a/packages/neuron-ui/src/components/Balance/index.tsx +++ b/packages/neuron-ui/src/components/Balance/index.tsx @@ -17,7 +17,7 @@ const Balance = ({ balance, connectionStatus, syncStatus }: BalanceProps) => { return ( <> {`${t('overview.balance')}:`} - + {shannonToCKBFormatter(balance)} diff --git a/packages/neuron-ui/src/components/DepositDialog/hooks.ts b/packages/neuron-ui/src/components/DepositDialog/hooks.ts index 41fa272d06..6465bd25a1 100644 --- a/packages/neuron-ui/src/components/DepositDialog/hooks.ts +++ b/packages/neuron-ui/src/components/DepositDialog/hooks.ts @@ -136,7 +136,7 @@ export const useGenerateDaoDepositTx = ({ payload: res, }) if (isDepositAll) { - setMaxDepositValue(shannonToCKBFormatter(res?.outputs[0]?.capacity ?? '0', false, '')) + setMaxDepositValue(shannonToCKBFormatter(res?.outputs[0]?.capacity ?? '0', false, false)) if (!isBalanceReserved) { setErrorMessage(t('messages.remain-ckb-for-withdraw')) } @@ -181,7 +181,7 @@ export const useDepositValue = (balance: string, showDepositDialog: boolean) => const amount = shannonToCKBFormatter( ((BigInt(percent) * BigInt(balance)) / BigInt(PERCENT_100)).toString(), false, - '' + false ) setDepositValue(padFractionDigitsIfDecimal(amount, 8)) }, diff --git a/packages/neuron-ui/src/components/NervosDAO/index.tsx b/packages/neuron-ui/src/components/NervosDAO/index.tsx index c31269a8f0..5801fc1980 100644 --- a/packages/neuron-ui/src/components/NervosDAO/index.tsx +++ b/packages/neuron-ui/src/components/NervosDAO/index.tsx @@ -288,7 +288,7 @@ const NervosDAO = () => { ) : ( @@ -303,7 +303,7 @@ const NervosDAO = () => {
{onlineAndSynced && !isPrivacyMode ? ( diff --git a/packages/neuron-ui/src/components/NervosDAODetail/index.tsx b/packages/neuron-ui/src/components/NervosDAODetail/index.tsx index f4ed335c33..550999bc2a 100644 --- a/packages/neuron-ui/src/components/NervosDAODetail/index.tsx +++ b/packages/neuron-ui/src/components/NervosDAODetail/index.tsx @@ -99,7 +99,7 @@ const TabsVariantWithTxTypes = ({ {isIncomeShow ? (
diff --git a/packages/neuron-ui/src/components/NervosDAORecord/index.tsx b/packages/neuron-ui/src/components/NervosDAORecord/index.tsx index 36256afcdb..76316dbfa6 100644 --- a/packages/neuron-ui/src/components/NervosDAORecord/index.tsx +++ b/packages/neuron-ui/src/components/NervosDAORecord/index.tsx @@ -220,7 +220,7 @@ export const DAORecord = ({ ) : ( {`${shannonToCKBFormatter(capacity)} CKB`} diff --git a/packages/neuron-ui/src/components/Overview/index.tsx b/packages/neuron-ui/src/components/Overview/index.tsx index c9984eb15b..9ce1a0a94b 100644 --- a/packages/neuron-ui/src/components/Overview/index.tsx +++ b/packages/neuron-ui/src/components/Overview/index.tsx @@ -178,7 +178,7 @@ const Overview = () => { )} {showBalance ? ( - + {shannonToCKBFormatter(balance)} ) : ( @@ -191,7 +191,7 @@ const Overview = () => { {t('overview.locked-balance')} : {showBalance ? ( - + {shannonToCKBFormatter(lockedBalance)} ) : ( diff --git a/packages/neuron-ui/src/components/Send/hooks.ts b/packages/neuron-ui/src/components/Send/hooks.ts index b0dd76f996..d75947b0af 100644 --- a/packages/neuron-ui/src/components/Send/hooks.ts +++ b/packages/neuron-ui/src/components/Send/hooks.ts @@ -103,7 +103,7 @@ const updateTransactionWith = if (type === 'all') { const fmtItems = items.map((item, i) => ({ ...item, - amount: shannonToCKBFormatter(res.result.outputs[i].capacity, false, ''), + amount: shannonToCKBFormatter(res.result.outputs[i].capacity, false, false), })) const totalAmount = outputsToTotalAmount(fmtItems) setTotalAmount(totalAmount) diff --git a/packages/neuron-ui/src/components/SendFromMultisigDialog/hooks.ts b/packages/neuron-ui/src/components/SendFromMultisigDialog/hooks.ts index e2463e3c31..b3fc8e71b6 100644 --- a/packages/neuron-ui/src/components/SendFromMultisigDialog/hooks.ts +++ b/packages/neuron-ui/src/components/SendFromMultisigDialog/hooks.ts @@ -189,7 +189,7 @@ export const useSendInfo = ({ ...v.slice(0, v.length - 1), { ...v[v.length - 1], - amount: shannonToCKBFormatter(res.outputs[res.outputs.length - 1].capacity, false, ''), + amount: shannonToCKBFormatter(res.outputs[res.outputs.length - 1].capacity, false, false), disabled: true, }, ]) diff --git a/packages/neuron-ui/src/utils/formatters.ts b/packages/neuron-ui/src/utils/formatters.ts index 45dc1f36e0..55273b9a7f 100644 --- a/packages/neuron-ui/src/utils/formatters.ts +++ b/packages/neuron-ui/src/utils/formatters.ts @@ -1,6 +1,6 @@ -import { formatUnit } from '@ckb-lumos/bi' import { molecule } from '@ckb-lumos/codec' import { blockchain } from '@ckb-lumos/base' +import { formatUnit, ckbDecimals } from '@ckb-lumos/bi' import { TFunction } from 'i18next' import { FailureFromController } from 'services/remote/remoteApiWrapper' import { CapacityUnit } from './enums' @@ -104,40 +104,16 @@ export const CKBToShannonFormatter = (amount: string = '0', unit: CapacityUnit = } } -export const shannonToCKBFormatter = (shannon: string, showPositiveSign?: boolean, delimiter: string = ',') => { +export const shannonToCKBFormatter = (shannon: string, showPositiveSign?: boolean, showCommaSeparator = true) => { if (Number.isNaN(+shannon)) { - console.warn(`Shannon is not a valid number`) + console.warn(`Invalid shannon value: ${shannon}`) return shannon } - if (shannon === null) { - return '0' - } - let sign = '' - if (shannon.startsWith('-')) { - sign = '-' - } else if (showPositiveSign) { - sign = '+' - } - const unsignedShannon = shannon.replace(/^-?0*/, '') - let unsignedCKB = '' - if (unsignedShannon.length <= 8) { - unsignedCKB = `0.${unsignedShannon.padStart(8, '0')}`.replace(/\.?0+$/, '') - } else { - const decimal = `.${unsignedShannon.slice(-8)}`.replace(/\.?0+$/, '') - const int = unsignedShannon.slice(0, -8).replace(/\^0+/, '') - unsignedCKB = `${( - int - .split('') - .reverse() - .join('') - .match(/\d{1,3}/g) || ['0'] - ) - .join(delimiter) - .split('') - .reverse() - .join('')}${decimal}` - } - return +unsignedCKB === 0 ? '0' : `${sign}${unsignedCKB}` + return new Intl.NumberFormat('en-US', { + useGrouping: showCommaSeparator, + signDisplay: showPositiveSign && +shannon > 0 ? 'always' : 'auto', + maximumFractionDigits: ckbDecimals, + }).format(formatUnit(BigInt(shannon ?? '0'), 'ckb') as any) } export const localNumberFormatter = (num: string | number | bigint = 0) => { From 453b2ef6efb0b6b161af9054882c7bb0ca26b134 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=A5=E5=9B=BD=E5=AE=87?= <841185308@qq.com> Date: Fri, 19 Apr 2024 18:13:10 +0800 Subject: [PATCH 26/36] fix: When address is not enough, stop update localSavedBlockNumber (#3052) fix: When address is not enough, stop update localCachedNumber --- .../src/block-sync-renderer/index.ts | 2 +- .../sync/light-synchronizer.ts | 4 +++ .../src/block-sync-renderer/sync/queue.ts | 4 +++ .../block-sync-renderer/sync/synchronizer.ts | 5 ++++ .../neuron-wallet/src/services/addresses.ts | 29 +++++++++++++------ .../neuron-wallet/src/services/wallets.ts | 19 ++++++++++++ .../index/resetSyncTask.test.ts | 6 +++- .../tests/block-sync-renderer/queue.test.ts | 9 ++++++ 8 files changed, 67 insertions(+), 11 deletions(-) diff --git a/packages/neuron-wallet/src/block-sync-renderer/index.ts b/packages/neuron-wallet/src/block-sync-renderer/index.ts index 95576c84a7..cf690f014b 100644 --- a/packages/neuron-wallet/src/block-sync-renderer/index.ts +++ b/packages/neuron-wallet/src/block-sync-renderer/index.ts @@ -64,7 +64,7 @@ export const resetSyncTask = async (startTask = true) => { if (startTask) { await WalletService.getInstance().maintainAddressesIfNecessary() - await TransactionPersistor.checkTxLock() + await CommonUtils.retry(3, 5000, TransactionPersistor.checkTxLock) await CommonUtils.sleep(3000) await createBlockSyncTask() } diff --git a/packages/neuron-wallet/src/block-sync-renderer/sync/light-synchronizer.ts b/packages/neuron-wallet/src/block-sync-renderer/sync/light-synchronizer.ts index ece089a109..6a7d5bc761 100644 --- a/packages/neuron-wallet/src/block-sync-renderer/sync/light-synchronizer.ts +++ b/packages/neuron-wallet/src/block-sync-renderer/sync/light-synchronizer.ts @@ -267,6 +267,10 @@ export default class LightSynchronizer extends Synchronizer { } private async updateBlockStartNumber(blockNumber: number) { + if (this._needGenerateAddress || !this.pollingIndexer) { + logger.info('LightConnector:\twait for generating address') + return + } const scripts = await this.lightRpc.getScripts() await SyncProgressService.updateBlockNumber( scripts.map(v => v.script.args), diff --git a/packages/neuron-wallet/src/block-sync-renderer/sync/queue.ts b/packages/neuron-wallet/src/block-sync-renderer/sync/queue.ts index a09055eb58..027bc14967 100644 --- a/packages/neuron-wallet/src/block-sync-renderer/sync/queue.ts +++ b/packages/neuron-wallet/src/block-sync-renderer/sync/queue.ts @@ -22,6 +22,7 @@ import LightSynchronizer from './light-synchronizer' import { generateRPC } from '../../utils/ckb-rpc' import { BUNDLED_LIGHT_CKB_URL } from '../../utils/const' import { NetworkType } from '../../models/network' +import WalletService from '../../services/wallets' export default class Queue { #lockHashes: string[] @@ -254,6 +255,9 @@ export default class Queue { .map(addr => addr.walletId) ) if (process.send) { + this.#indexerConnector!.needGenerateAddress = await WalletService.getInstance().checkNeedGenerateAddress([ + ...walletIds, + ]) process.send({ channel: 'check-and-save-wallet-address', message: [...walletIds] }) } else { throw new ShouldInChildProcess() diff --git a/packages/neuron-wallet/src/block-sync-renderer/sync/synchronizer.ts b/packages/neuron-wallet/src/block-sync-renderer/sync/synchronizer.ts index 7b1fd0b4e8..b8d1a789a2 100644 --- a/packages/neuron-wallet/src/block-sync-renderer/sync/synchronizer.ts +++ b/packages/neuron-wallet/src/block-sync-renderer/sync/synchronizer.ts @@ -58,6 +58,7 @@ export abstract class Synchronizer { protected addressesByWalletId: Map = new Map() protected pollingIndexer: boolean = false private indexerQueryQueue: QueueObject | undefined + protected _needGenerateAddress: boolean = false abstract connect(): Promise abstract processTxsInNextBlockNumber(): Promise @@ -96,6 +97,10 @@ export abstract class Synchronizer { this.pollingIndexer = false } + public set needGenerateAddress(v: boolean) { + this._needGenerateAddress = v + } + protected async processNextBlockNumber() { // the processNextBlockNumberQueue is a queue to ensure that ONLY one // block processing task runs at a time to avoid the data conflict while syncing diff --git a/packages/neuron-wallet/src/services/addresses.ts b/packages/neuron-wallet/src/services/addresses.ts index 91647a04e7..c9530ec1ca 100644 --- a/packages/neuron-wallet/src/services/addresses.ts +++ b/packages/neuron-wallet/src/services/addresses.ts @@ -95,20 +95,17 @@ export default class AddressService { receivingAddressCount: number = DefaultAddressNumber.Receiving, changeAddressCount: number = DefaultAddressNumber.Change ): Promise { - const [unusedReceivingAddresses, unusedChangeAddresses] = await this.getGroupedUnusedAddressesByWalletId(walletId) - const unusedReceivingCount = unusedReceivingAddresses.length - const unusedChangeCount = unusedChangeAddresses.length - if (unusedReceivingCount > this.minUnusedAddressCount && unusedChangeCount > this.minUnusedAddressCount) { - return undefined - } + const [receivingCount, changeCount] = await this.getAddressCountsToFillGapLimit( + walletId, + receivingAddressCount, + changeAddressCount + ) + if (!receivingCount && !changeCount) return undefined const maxReceivingAddressIndex = await this.maxAddressIndex(walletId, AddressType.Receiving) const maxChangeAddressIndex = await this.maxAddressIndex(walletId, AddressType.Change) const nextReceivingIndex = maxReceivingAddressIndex === undefined ? 0 : maxReceivingAddressIndex + 1 const nextChangeIndex = maxChangeAddressIndex === undefined ? 0 : maxChangeAddressIndex + 1 - const receivingCount: number = unusedReceivingCount > this.minUnusedAddressCount ? 0 : receivingAddressCount - const changeCount: number = unusedChangeCount > this.minUnusedAddressCount ? 0 : changeAddressCount - const currentGeneratedAddresses = await this.generateAndSave( walletId, extendedKey, @@ -140,6 +137,20 @@ export default class AddressService { return allGeneratedAddresses } + public static async getAddressCountsToFillGapLimit( + walletId: string, + receivingAddressCount: number = DefaultAddressNumber.Receiving, + changeAddressCount: number = DefaultAddressNumber.Change + ) { + const [unusedReceivingAddresses, unusedChangeAddresses] = await this.getGroupedUnusedAddressesByWalletId(walletId) + const unusedReceivingCount = unusedReceivingAddresses.length + const unusedChangeCount = unusedChangeAddresses.length + return [ + unusedReceivingCount > this.minUnusedAddressCount ? 0 : receivingAddressCount, + unusedChangeCount > this.minUnusedAddressCount ? 0 : changeAddressCount, + ] + } + public static async generateAndSaveForExtendedKey({ walletId, extendedKey, diff --git a/packages/neuron-wallet/src/services/wallets.ts b/packages/neuron-wallet/src/services/wallets.ts index 6d7306c8d4..cc9c15be14 100644 --- a/packages/neuron-wallet/src/services/wallets.ts +++ b/packages/neuron-wallet/src/services/wallets.ts @@ -110,6 +110,10 @@ export abstract class Wallet { } } + public async needsGenerateAddress() { + return false + } + public abstract checkAndGenerateAddresses( isImporting?: boolean, receivingAddressCount?: number, @@ -179,6 +183,11 @@ export class FileKeystoreWallet extends Wallet { return `${this.id}.json` } + public async needsGenerateAddress() { + const [receiveCount, changeCount] = await AddressService.getAddressCountsToFillGapLimit(this.id) + return receiveCount !== 0 || changeCount !== 0 + } + public checkAndGenerateAddresses = async ( isImporting: boolean = false, receivingAddressCount: number = DefaultAddressNumber.Receiving, @@ -365,6 +374,16 @@ export default class WalletService { } } + public async checkNeedGenerateAddress(walletIds: string[]) { + for (const walletId of new Set(walletIds)) { + const wallet = this.get(walletId) + if (await wallet.needsGenerateAddress()) { + return true + } + } + return false + } + public create = (props: WalletProperties) => { if (!props) { throw new IsRequired('wallet property') diff --git a/packages/neuron-wallet/tests/block-sync-renderer/index/resetSyncTask.test.ts b/packages/neuron-wallet/tests/block-sync-renderer/index/resetSyncTask.test.ts index 8cf8258bab..848f155c9a 100644 --- a/packages/neuron-wallet/tests/block-sync-renderer/index/resetSyncTask.test.ts +++ b/packages/neuron-wallet/tests/block-sync-renderer/index/resetSyncTask.test.ts @@ -5,7 +5,11 @@ describe(`Reset sync task`, () => { jest.doMock('services/wallets', () => ({ getInstance: () => ({ maintainAddressesIfNecessary: stubbedmaintainAddressesIfNecessary }), })) - jest.doMock('utils/common', () => ({ sleep: stubbedSleep, timeout: stubbedTimeout })) + jest.doMock('utils/common', () => ({ + sleep: stubbedSleep, + timeout: stubbedTimeout, + retry: (_: number, __: number, fn: () => void) => fn(), + })) jest.doMock('services/tx', () => ({ TransactionPersistor: { checkTxLock: jest.fn() } })) const blockSyncRenderer = require('block-sync-renderer') diff --git a/packages/neuron-wallet/tests/block-sync-renderer/queue.test.ts b/packages/neuron-wallet/tests/block-sync-renderer/queue.test.ts index d181a4ae5c..0e1e8661cd 100644 --- a/packages/neuron-wallet/tests/block-sync-renderer/queue.test.ts +++ b/packages/neuron-wallet/tests/block-sync-renderer/queue.test.ts @@ -183,6 +183,15 @@ describe('queue', () => { }, } }) + jest.doMock('../../src/services/wallets', () => { + return { + getInstance() { + return { + checkNeedGenerateAddress: jest.fn(), + } + }, + } + }) const Queue = require('../../src/block-sync-renderer/sync/queue').default queue = new Queue(fakeNodeUrl, addresses) }) From 76c3871e71907f9d490135e942176a7530807e86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=A5=E5=9B=BD=E5=AE=87?= <841185308@qq.com> Date: Mon, 29 Apr 2024 14:18:59 +0800 Subject: [PATCH 27/36] fix: Fix menu when switch language. (#3137) --- packages/neuron-wallet/src/services/settings.ts | 2 +- packages/neuron-wallet/tests/services/setting.test.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/neuron-wallet/src/services/settings.ts b/packages/neuron-wallet/src/services/settings.ts index 55dd2a3e16..8d22f4f3b6 100644 --- a/packages/neuron-wallet/src/services/settings.ts +++ b/packages/neuron-wallet/src/services/settings.ts @@ -100,7 +100,7 @@ export default class SettingsService extends Store { private onLocaleChanged = (lng: Locale) => { BrowserWindow.getAllWindows().forEach(bw => bw.webContents.send('set-locale', lng)) - updateApplicationMenu(null) + updateApplicationMenu(BrowserWindow.getFocusedWindow()) } migrateDataPath() { diff --git a/packages/neuron-wallet/tests/services/setting.test.ts b/packages/neuron-wallet/tests/services/setting.test.ts index aec2419474..78f2bf4530 100644 --- a/packages/neuron-wallet/tests/services/setting.test.ts +++ b/packages/neuron-wallet/tests/services/setting.test.ts @@ -42,6 +42,7 @@ jest.mock('../../src/services/networks', () => { jest.mock('electron', () => ({ BrowserWindow: { getAllWindows: jest.fn().mockReturnValue([]), + getFocusedWindow: jest.fn().mockReturnValue(null), }, })) From 128e425e61ccac688580ded37dcba77d775dfba7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=A5=E5=9B=BD=E5=AE=87?= <841185308@qq.com> Date: Mon, 29 Apr 2024 15:19:15 +0800 Subject: [PATCH 28/36] feat: Support lock window for Neuron (#3064) Co-authored-by: Chen Yu --- .../GeneralSetting/LockWindowDialog/hooks.ts | 113 ++++++++++++ .../GeneralSetting/LockWindowDialog/index.tsx | 103 +++++++++++ .../lockWindowDialog.module.scss | 30 +++ .../GeneralSetting/generalSetting.module.scss | 5 + .../src/components/GeneralSetting/index.tsx | 31 +++- .../src/containers/LockWindow/index.tsx | 172 ++++++++++++++++++ .../LockWindow/lockWindow.module.scss | 55 ++++++ .../neuron-ui/src/containers/Main/hooks.ts | 16 ++ .../neuron-ui/src/containers/Main/index.tsx | 15 +- packages/neuron-ui/src/locales/en.json | 22 ++- packages/neuron-ui/src/locales/es.json | 22 ++- packages/neuron-ui/src/locales/fr.json | 22 ++- packages/neuron-ui/src/locales/zh-tw.json | 22 ++- packages/neuron-ui/src/locales/zh.json | 22 ++- packages/neuron-ui/src/router.tsx | 5 +- packages/neuron-ui/src/services/localCache.ts | 18 ++ packages/neuron-ui/src/services/remote/app.ts | 6 + .../src/services/remote/remoteApiWrapper.ts | 4 + .../stateProvider/actionCreators/app.ts | 28 ++- .../src/states/stateProvider/reducer.ts | 8 + packages/neuron-ui/src/types/App/index.d.ts | 4 + .../neuron-ui/src/types/Subject/index.d.ts | 1 + .../neuron-ui/src/types/global/index.d.ts | 5 + .../neuron-ui/src/utils/getSyncLeftTime.ts | 6 +- .../neuron-ui/src/widgets/Icons/Locked.png | Bin 0 -> 221987 bytes .../src/widgets/Icons/dark-unlock.mp4 | Bin 0 -> 248770 bytes .../neuron-ui/src/widgets/Icons/unlock.mp4 | Bin 0 -> 211408 bytes .../src/widgets/SplitPasswordInput/index.tsx | 65 +++++++ .../splitPasswordInput.module.scss | 19 ++ packages/neuron-wallet/src/controllers/api.ts | 36 ++++ .../neuron-wallet/src/controllers/app/menu.ts | 22 ++- packages/neuron-wallet/src/locales/en.ts | 1 + packages/neuron-wallet/src/locales/es.ts | 1 + packages/neuron-wallet/src/locales/fr.ts | 1 + packages/neuron-wallet/src/locales/zh-tw.ts | 1 + packages/neuron-wallet/src/locales/zh.ts | 1 + .../src/models/subjects/command.ts | 1 + .../neuron-wallet/src/services/settings.ts | 37 +++- 38 files changed, 903 insertions(+), 17 deletions(-) create mode 100644 packages/neuron-ui/src/components/GeneralSetting/LockWindowDialog/hooks.ts create mode 100644 packages/neuron-ui/src/components/GeneralSetting/LockWindowDialog/index.tsx create mode 100644 packages/neuron-ui/src/components/GeneralSetting/LockWindowDialog/lockWindowDialog.module.scss create mode 100644 packages/neuron-ui/src/containers/LockWindow/index.tsx create mode 100644 packages/neuron-ui/src/containers/LockWindow/lockWindow.module.scss create mode 100644 packages/neuron-ui/src/widgets/Icons/Locked.png create mode 100644 packages/neuron-ui/src/widgets/Icons/dark-unlock.mp4 create mode 100644 packages/neuron-ui/src/widgets/Icons/unlock.mp4 create mode 100644 packages/neuron-ui/src/widgets/SplitPasswordInput/index.tsx create mode 100644 packages/neuron-ui/src/widgets/SplitPasswordInput/splitPasswordInput.module.scss diff --git a/packages/neuron-ui/src/components/GeneralSetting/LockWindowDialog/hooks.ts b/packages/neuron-ui/src/components/GeneralSetting/LockWindowDialog/hooks.ts new file mode 100644 index 0000000000..a1213dc389 --- /dev/null +++ b/packages/neuron-ui/src/components/GeneralSetting/LockWindowDialog/hooks.ts @@ -0,0 +1,113 @@ +import { TFunction } from 'i18next' +import { useCallback, useState } from 'react' +import { verifyLockWindowPassword } from 'services/remote' +import { updateLockWindowInfo, useDispatch } from 'states' +import { isSuccessResponse } from 'utils' + +export const passwordLength = 4 + +export const useOldPassword = ({ t }: { t: TFunction }) => { + const [oldPasswordErr, setOldPasswordErr] = useState('') + const [oldPassword, setOldPassword] = useState(new Array(passwordLength).fill('')) + const [verifySuccess, setVerifySuccess] = useState(false) + const onUpdateOldPassword = useCallback( + (v: string, idx: number) => { + const updatedOldPassword = oldPassword.toSpliced(idx, 1, v).join('') + if (updatedOldPassword.length === passwordLength) { + verifyLockWindowPassword(updatedOldPassword) + .then(res => { + if (isSuccessResponse(res)) { + // verify success + setVerifySuccess(true) + } + throw new Error('verify failed') + }) + .catch(() => { + setOldPassword(new Array(passwordLength).fill('')) + setOldPasswordErr(t('settings.general.lock-window.password-error')) + }) + } else { + setOldPassword(value => value.toSpliced(idx, 1, v)) + } + }, + [oldPassword] + ) + const resetOldPassword = useCallback(() => { + setOldPasswordErr('') + setOldPassword(new Array(passwordLength).fill('')) + setVerifySuccess(false) + }, []) + return { + oldPasswordErr, + oldPassword, + onUpdateOldPassword, + verifySuccess, + setVerifySuccess, + resetOldPassword, + } +} + +export const usePassword = () => { + const [password, setPassword] = useState(new Array(passwordLength).fill('')) + const onUpdatePassword = useCallback((v: string, idx: number) => { + setPassword(value => value.toSpliced(idx, 1, v)) + }, []) + const resetPassword = useCallback(() => { + setPassword(new Array(passwordLength).fill('')) + }, []) + return { + password, + onUpdatePassword, + resetPassword, + } +} + +export const useRepeatPassword = ({ + password, + t, + encryptedPassword, + onCancel, +}: { + password: string + t: TFunction + encryptedPassword?: string + onCancel: () => void +}) => { + const dispatch = useDispatch() + const [errMsg, setErrMsg] = useState('') + const [repeatPassword, setRepeatPassword] = useState(new Array(passwordLength).fill('')) + const [isSuccess, setIsSuccess] = useState(false) + const onUpdateRepeatPassword = useCallback( + (v: string, idx: number) => { + const updatedRepeatPassword = repeatPassword.toSpliced(idx, 1, v).join('') + if (updatedRepeatPassword.length === passwordLength) { + if (updatedRepeatPassword !== password) { + setErrMsg(t('settings.general.lock-window.different-password')) + setRepeatPassword(new Array(passwordLength).fill('')) + } else { + setIsSuccess(true) + updateLockWindowInfo( + encryptedPassword ? { password: updatedRepeatPassword } : { password: updatedRepeatPassword, locked: true } + )(dispatch) + onCancel() + } + } else { + setErrMsg('') + setRepeatPassword(value => value.toSpliced(idx, 1, v)) + } + }, + [password, t, repeatPassword] + ) + const resetRepeatPassword = useCallback(() => { + setErrMsg('') + setRepeatPassword(new Array(passwordLength).fill('')) + setIsSuccess(false) + }, []) + return { + errMsg, + repeatPassword, + onUpdateRepeatPassword, + resetRepeatPassword, + isSuccess, + } +} diff --git a/packages/neuron-ui/src/components/GeneralSetting/LockWindowDialog/index.tsx b/packages/neuron-ui/src/components/GeneralSetting/LockWindowDialog/index.tsx new file mode 100644 index 0000000000..629eda59f6 --- /dev/null +++ b/packages/neuron-ui/src/components/GeneralSetting/LockWindowDialog/index.tsx @@ -0,0 +1,103 @@ +import React, { useCallback, useEffect, useMemo } from 'react' +import { useTranslation } from 'react-i18next' +import Dialog from 'widgets/Dialog' +import SplitPasswordInput from 'widgets/SplitPasswordInput' +import Alert from 'widgets/Alert' +import Button from 'widgets/Button' +import { passwordLength, useOldPassword, usePassword, useRepeatPassword } from './hooks' +import styles from './lockWindowDialog.module.scss' + +const LockWindowDialog = ({ + show, + onCancel, + encryptedPassword, +}: { + show: boolean + onCancel: () => void + encryptedPassword?: string +}) => { + const [t] = useTranslation() + const { oldPasswordErr, verifySuccess, oldPassword, onUpdateOldPassword, resetOldPassword } = useOldPassword({ t }) + const { password, onUpdatePassword, resetPassword } = usePassword() + const joinedPassword = useMemo(() => password.join(''), [password]) + const { errMsg, repeatPassword, onUpdateRepeatPassword, resetRepeatPassword, isSuccess } = useRepeatPassword({ + t, + password: joinedPassword, + encryptedPassword, + onCancel, + }) + useEffect(() => { + // when dialog open, reset all status + if (show) { + resetOldPassword() + resetPassword() + resetRepeatPassword() + } + }, [show, resetOldPassword, resetPassword, resetRepeatPassword]) + const onReset = useCallback(() => { + resetPassword() + resetRepeatPassword() + }, [resetPassword, resetRepeatPassword]) + const content = () => { + if (encryptedPassword && !verifySuccess) { + // is verify old password + return ( + <> + {t('settings.general.lock-window.enter-current-password')} +
+ +
{oldPasswordErr}
+
+ + ) + } + if (joinedPassword.length !== passwordLength) { + // enter password + return ( + <> + {t(`settings.general.lock-window.set-password`)} +
+ +
+ + ) + } + // is verify repeat password + return ( + <> + {t(`settings.general.lock-window.confirm-password`)} +
+ +
{errMsg}
+ {errMsg ? ( + + ) : null} +
+ + ) + } + + return ( + <> + +
{content()}
+
+ {isSuccess ? ( + + {t(`settings.general.lock-window.${encryptedPassword ? 'change-password-success' : 'set-password-success'}`)} + + ) : null} + + ) +} + +LockWindowDialog.displayName = 'LockWindowDialog' +export default LockWindowDialog diff --git a/packages/neuron-ui/src/components/GeneralSetting/LockWindowDialog/lockWindowDialog.module.scss b/packages/neuron-ui/src/components/GeneralSetting/LockWindowDialog/lockWindowDialog.module.scss new file mode 100644 index 0000000000..f4c099a097 --- /dev/null +++ b/packages/neuron-ui/src/components/GeneralSetting/LockWindowDialog/lockWindowDialog.module.scss @@ -0,0 +1,30 @@ +@import '../../../styles/mixin.scss'; + +.content { + text-align: center; + + .secTitle { + color: var(--secondary-text-color); + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: normal; + } + + .password { + margin-top: 24px; + } + + .err { + color: var(--error-color); + margin: 16px 0 24px 0; + } +} + +.dialog { + width: 680px; +} + +.notice { + @include dialog-copy-animation; +} diff --git a/packages/neuron-ui/src/components/GeneralSetting/generalSetting.module.scss b/packages/neuron-ui/src/components/GeneralSetting/generalSetting.module.scss index bd41cc7b53..92e5f8d34f 100644 --- a/packages/neuron-ui/src/components/GeneralSetting/generalSetting.module.scss +++ b/packages/neuron-ui/src/components/GeneralSetting/generalSetting.module.scss @@ -38,6 +38,11 @@ $action-button-width: 11.25rem; margin-right: 4px; } } + + &.lockWindow { + width: auto; + min-width: 176px; + } } .showVersion { position: relative; diff --git a/packages/neuron-ui/src/components/GeneralSetting/index.tsx b/packages/neuron-ui/src/components/GeneralSetting/index.tsx index bc0dcc5ba0..45216d4d9b 100644 --- a/packages/neuron-ui/src/components/GeneralSetting/index.tsx +++ b/packages/neuron-ui/src/components/GeneralSetting/index.tsx @@ -9,11 +9,12 @@ import { ReactComponent as ArrowNext } from 'widgets/Icons/ArrowNext.svg' import { ReactComponent as Update } from 'widgets/Icons/Update.svg' import { cancelCheckUpdates, downloadUpdate, installUpdate, getVersion } from 'services/remote' import { uniformTimeFormatter, bytesFormatter, clsx, wakeScreen, releaseWakeLock } from 'utils' -import { LanguageSelect } from 'widgets/Icons/icon' import Switch from 'widgets/Switch' import { keepScreenAwake } from 'services/localCache' +import { LanguageSelect, UnLock } from 'widgets/Icons/icon' import styles from './generalSetting.module.scss' import { useCheckUpdate, useUpdateDownloadStatus } from './hooks' +import LockWindowDialog from './LockWindowDialog' interface UpdateDownloadStatusProps { show: boolean @@ -136,11 +137,13 @@ const UpdateDownloadStatus = ({ interface GeneralSettingProps { updater: State.AppUpdater + app: State.App } -const GeneralSetting = ({ updater }: GeneralSettingProps) => { +const GeneralSetting = ({ updater, app }: GeneralSettingProps) => { const [t, i18n] = useTranslation() const [showLangDialog, setShowLangDialog] = useState(false) + const [isLockDialogShow, setIsLockDialogShow] = useState(false) const [searchParams] = useSearchParams() const [errorMsg, setErrorMsg] = useState('') const { showCheckDialog, setShowCheckDialog, onCancelCheckUpdates } = useCheckUpdate() @@ -221,6 +224,22 @@ const GeneralSetting = ({ updater }: GeneralSettingProps) => {
+
+

{t('settings.general.lock-password')}

+ +
+ { setShowLangDialog(false) }} /> + + { + setIsLockDialogShow(false) + }} + />
) } diff --git a/packages/neuron-ui/src/containers/LockWindow/index.tsx b/packages/neuron-ui/src/containers/LockWindow/index.tsx new file mode 100644 index 0000000000..3afb787ed2 --- /dev/null +++ b/packages/neuron-ui/src/containers/LockWindow/index.tsx @@ -0,0 +1,172 @@ +/* eslint-disable jsx-a11y/media-has-caption */ +import React, { useCallback, useEffect, useState } from 'react' +import { AppActions, getLockWindowInfo, useDispatch, useState as useGlobalState } from 'states' +import Spinner from 'widgets/Spinner' +import Locked from 'widgets/Icons/Locked.png' +import DarkUnLockMp4 from 'widgets/Icons/dark-unlock.mp4' +import UnLockMp4 from 'widgets/Icons/unlock.mp4' +import SplitPasswordInput from 'widgets/SplitPasswordInput' +import { useTranslation } from 'react-i18next' +import { clsx, isSuccessResponse } from 'utils' +import { isDark, unlockWindow } from 'services/remote' +import { retryUnlockWindow } from 'services/localCache' +import { MILLISECS_PER_HOUR, MILLISECS_PER_MIN, MILLISECS_PER_SEC } from 'utils/getSyncLeftTime' +import styles from './lockWindow.module.scss' + +const passwordLen = 4 +const wrongEnterTimes = 3 +const formatterLockMillisecs = (lockMillisecs: number) => { + const hrs = Math.floor(lockMillisecs / MILLISECS_PER_HOUR) + const mins = Math.floor((lockMillisecs - hrs * MILLISECS_PER_HOUR) / MILLISECS_PER_MIN) + const secs = Math.floor((lockMillisecs - hrs * MILLISECS_PER_HOUR - mins * MILLISECS_PER_MIN) / MILLISECS_PER_SEC) + return (hrs > 0 ? [hrs, mins] : [mins, secs]).map(v => v.toString().padStart(2, '0')).join(':') +} + +const getWaitMillisecs = (retryTimes: number) => { + if (retryTimes % wrongEnterTimes === 0) { + if (retryTimes >= 3 * wrongEnterTimes) { + return 24 * MILLISECS_PER_HOUR + } + if (retryTimes > wrongEnterTimes) { + return 30 * MILLISECS_PER_MIN + } + return 5 * MILLISECS_PER_MIN + } + return undefined +} + +const LockWindow = ({ children }: { children: React.ReactNode }) => { + const dispatch = useDispatch() + const [t] = useTranslation() + useEffect(() => { + getLockWindowInfo(dispatch) + }, []) + const { app } = useGlobalState() + const [password, setPassword] = useState(new Array(passwordLen).fill('')) + const [errMsg, setErrMsg] = useState('') + const [retryUnlockInfo, setRetryUnlockInfo] = useState(retryUnlockWindow.get()) + const [verifySuccess, setVerifySuccess] = useState(false) + const onUpdatePassword = useCallback( + (v: string, idx: number) => { + const updatedPassword = password.toSpliced(idx, 1, v).join('') + if (updatedPassword.length === passwordLen) { + unlockWindow(updatedPassword) + .then(res => { + if (isSuccessResponse(res)) { + setVerifySuccess(true) + setTimeout(() => { + dispatch({ + type: AppActions.SetLockWindowInfo, + payload: { locked: false }, + }) + setVerifySuccess(false) + }, 1000) + retryUnlockWindow.reset() + setRetryUnlockInfo({ retryTimes: 0 }) + setPassword(i => i.toSpliced(idx, 1, v)) + return + } + throw new Error('verify failed') + }) + .catch(() => { + const { retryTimes } = retryUnlockWindow.get() + const newRetryUnlockInfo = { lastRetryTime: Date.now(), retryTimes: retryTimes + 1 } + const needWaitMillisecs = getWaitMillisecs(retryTimes + 1) + if (needWaitMillisecs) { + setErrMsg( + t('lock-window.failed-times', { + frequency: retryTimes + 1, + time: formatterLockMillisecs(needWaitMillisecs), + }) + ) + } else { + setErrMsg(t('lock-window.lock-password-error')) + } + retryUnlockWindow.save(newRetryUnlockInfo) + setRetryUnlockInfo(newRetryUnlockInfo) + setPassword(new Array(passwordLen).fill('')) + }) + } else { + setErrMsg('') + setPassword(i => i.toSpliced(idx, 1, v)) + } + }, + [password] + ) + const [theme, setTheme] = useState<'dark' | 'light'>() + useEffect(() => { + isDark().then(res => { + if (isSuccessResponse(res)) { + setTheme(res.result ? 'dark' : 'light') + } + }) + }, []) + useEffect(() => { + if (app.lockWindowInfo?.locked) { + setPassword(new Array(passwordLen).fill('')) + setErrMsg('') + } + }, [app.lockWindowInfo?.locked]) + useEffect(() => { + let interval: ReturnType + const needWaitMillisecs = getWaitMillisecs(retryUnlockInfo.retryTimes) + if (needWaitMillisecs && retryUnlockInfo.lastRetryTime) { + interval = setInterval(() => { + const hasWaitMillisecs = Date.now() - retryUnlockInfo.lastRetryTime! + if (needWaitMillisecs > hasWaitMillisecs) { + setErrMsg( + t('lock-window.failed-times', { + frequency: retryUnlockInfo.retryTimes, + time: formatterLockMillisecs(needWaitMillisecs - hasWaitMillisecs), + }) + ) + } else { + const newRetryUnlockInfo = { retryTimes: retryUnlockInfo.retryTimes } + retryUnlockWindow.save(newRetryUnlockInfo) + setRetryUnlockInfo(newRetryUnlockInfo) + setErrMsg('') + } + }, 1_000) + } + return () => clearInterval(interval) + }, [retryUnlockInfo]) + if (!app.lockWindowInfo) { + return ( +
+ +
+ ) + } + if (app.lockWindowInfo.locked) { + return ( +
+ {verifySuccess ? ( + + ) : ( + Locked + )} +

{t('lock-window.neuron-is-locked')}

+
+ +
+
+ {errMsg || t('lock-window.enter-lock-password')} +
+
+ ) + } + return children +} + +LockWindow.displayName = 'LockWindow' + +export default LockWindow diff --git a/packages/neuron-ui/src/containers/LockWindow/lockWindow.module.scss b/packages/neuron-ui/src/containers/LockWindow/lockWindow.module.scss new file mode 100644 index 0000000000..a35391d16b --- /dev/null +++ b/packages/neuron-ui/src/containers/LockWindow/lockWindow.module.scss @@ -0,0 +1,55 @@ +.loading { + text-align: center; + margin-top: 20vh; +} + +.lockContainer { + text-align: center; + margin-top: 25vh; + + .title { + margin: 10px 0 24px 0; + font-size: 20px; + font-weight: 500; + color: var(--main-text-color); + } + + .notice { + margin-top: 24px; + color: var(--secondary-text-color); + &[data-has-err='true'] { + color: var(--error-color); + } + } + + .passwordContainer { + &[data-has-err='true'] { + input { + border-color: var(--error-color); + } + } + } + + @keyframes rotating { + from { + transform: rotate(0deg); + } + to { + transform: rotate(-10deg); + } + } + + .lockedImg { + width: 88px; + height: 88px; + + &.animation { + animation: rotating 0.5s linear 2 alternate; + } + } + + .video { + width: 88px; + height: 88px; + } +} diff --git a/packages/neuron-ui/src/containers/Main/hooks.ts b/packages/neuron-ui/src/containers/Main/hooks.ts index 9938e20ff3..e6dd1b7363 100644 --- a/packages/neuron-ui/src/containers/Main/hooks.ts +++ b/packages/neuron-ui/src/containers/Main/hooks.ts @@ -8,6 +8,7 @@ import { updateAddressListAndBalance, initAppState, showGlobalAlertDialog, + updateLockWindowInfo, } from 'states/stateProvider/actionCreators' import { @@ -114,6 +115,8 @@ export const useSubscription = ({ dispatch, location, showSwitchNetwork, + lockWindowInfo, + setIsLockDialogShow, }: { walletID: string chain: State.Chain @@ -122,6 +125,8 @@ export const useSubscription = ({ location: ReturnType dispatch: StateDispatch showSwitchNetwork: () => void + lockWindowInfo: State.App['lockWindowInfo'] + setIsLockDialogShow: (v: boolean) => void }) => { const { pageNo, pageSize, keywords } = chain.transactions @@ -304,6 +309,15 @@ export const useSubscription = ({ case 'multisig-address': navigateToolsRouter(type) break + case 'lock-window': + if (lockWindowInfo?.encryptedPassword) { + if (!lockWindowInfo.locked) { + updateLockWindowInfo({ locked: true })(dispatch) + } + } else { + setIsLockDialogShow(true) + } + break default: { break } @@ -332,6 +346,8 @@ export const useSubscription = ({ dispatch, location.pathname, showSwitchNetwork, + lockWindowInfo, + setIsLockDialogShow, ]) } diff --git a/packages/neuron-ui/src/containers/Main/index.tsx b/packages/neuron-ui/src/containers/Main/index.tsx index 28421862c7..038ca40a31 100644 --- a/packages/neuron-ui/src/containers/Main/index.tsx +++ b/packages/neuron-ui/src/containers/Main/index.tsx @@ -1,4 +1,4 @@ -import React, { useCallback, useMemo, useEffect } from 'react' +import React, { useCallback, useMemo, useEffect, useState } from 'react' import { useNavigate, useLocation, Outlet } from 'react-router-dom' import { Trans, useTranslation } from 'react-i18next' import { useState as useGlobalState, useDispatch, dismissGlobalAlertDialog } from 'states' @@ -13,6 +13,7 @@ import DataPathDialog from 'widgets/DataPathDialog' import NoDiskSpaceWarn from 'widgets/Icons/NoDiskSpaceWarn.png' import MigrateCkbDataDialog from 'widgets/MigrateCkbDataDialog' import { keepScreenAwake } from 'services/localCache' +import LockWindowDialog from 'components/GeneralSetting/LockWindowDialog' import styles from './main.module.scss' import { useSubscription, useSyncChainData, useOnCurrentWalletChange, useCheckNode, useNoDiskSpace } from './hooks' @@ -20,7 +21,7 @@ const MainContent = () => { const navigate = useNavigate() const location = useLocation() const { - app: { isAllowedToFetchList = true, globalAlertDialog }, + app: { isAllowedToFetchList = true, globalAlertDialog, lockWindowInfo }, wallet: { id: walletID = '' }, chain, settings: { networks = [] }, @@ -52,6 +53,7 @@ const MainContent = () => { onOpenEditorDialog, } = useCheckNode(sameUrlNetworks, networkID) + const [isLockDialogShow, setIsLockDialogShow] = useState(false) useSubscription({ walletID, chain, @@ -60,6 +62,8 @@ const MainContent = () => { dispatch, location, showSwitchNetwork, + lockWindowInfo, + setIsLockDialogShow, }) useOnCurrentWalletChange({ @@ -181,6 +185,13 @@ const MainContent = () => { onCancel={onCloseMigrateDialog} onConfirm={onConfirmMigrate} /> + { + setIsLockDialogShow(false) + }} + />
) } diff --git a/packages/neuron-ui/src/locales/en.json b/packages/neuron-ui/src/locales/en.json index 5e16c40df8..8d0e298fe6 100644 --- a/packages/neuron-ui/src/locales/en.json +++ b/packages/neuron-ui/src/locales/en.json @@ -395,7 +395,21 @@ "language": "Language", "select-language": "Select Language", "apply": "Apply", - "keep-awake": "Keep the screen awake during synchronization" + "keep-awake": "Keep the screen awake during synchronization", + "lock-password": "Lock window password", + "set-lock-password": "Set lock window password", + "change-lock-password": "Change lock window password", + "lock-window": { + "set-password": "Set Password", + "confirm-password": "Confirm Password", + "enter-current-password": "Enter Password", + "enter-new-password": "Enter new password", + "password-error": "Password error", + "different-password": "Two entered passwords do not match", + "set-password-success": "Password set successfully", + "change-password-success": "Password change successfully.", + "reset": "Reset" + } }, "wallet-manager": { "edit-wallet": { @@ -1254,6 +1268,12 @@ "size": "Size", "lock-time": "Lock Time" } + }, + "lock-window": { + "neuron-is-locked": "Neuron's window has been locked", + "enter-lock-password": "Enter lock password", + "lock-password-error": "Lock windows password error", + "failed-times": "Failed more than {{frequency}} times, please retry after {{time}}" } } } diff --git a/packages/neuron-ui/src/locales/es.json b/packages/neuron-ui/src/locales/es.json index 590e452f5f..0b501ca7c7 100644 --- a/packages/neuron-ui/src/locales/es.json +++ b/packages/neuron-ui/src/locales/es.json @@ -387,7 +387,21 @@ "language": "Idioma", "select-language": "Seleccionar Idioma", "apply": "Aplicar", - "keep-awake": "Mantener la pantalla encendida durante la sincronización" + "keep-awake": "Mantener la pantalla encendida durante la sincronización", + "lock-password": "Contraseña de bloqueo de pantalla", + "set-lock-password": "Establecer contraseña de bloqueo de pantalla", + "change-lock-password": "Modificar contraseña de bloqueo de pantalla", + "lock-window": { + "set-password": "Establecer contraseña", + "confirm-password": "Confirmar contraseña", + "enter-current-password": "Ingresar contraseña actual", + "enter-new-password": "Ingresar nueva contraseña", + "password-error": "Contraseña incorrecta", + "different-password": "Las contraseñas ingresadas no coinciden", + "set-password-success": "Contraseña establecida exitosamente", + "change-password-success": "Contraseña modificada exitosamente", + "reset": "Reestablecer" + } }, "wallet-manager": { "edit-wallet": { @@ -1233,6 +1247,12 @@ "size": "tamaño", "lock-time": "Período de Bloqueo" } + }, + "lock-window": { + "neuron-is-locked": "La ventana de Neuron está bloqueada", + "enter-lock-password": "Ingresar contraseña de bloqueo de pantalla", + "lock-password-error": "Contraseña de bloqueo de pantalla incorrecta", + "failed-times": "Fallo más de {{frequency}} veces, por favor inténtalo de nuevo después de {{time}}" } } } diff --git a/packages/neuron-ui/src/locales/fr.json b/packages/neuron-ui/src/locales/fr.json index c42bfc3594..9065be440d 100644 --- a/packages/neuron-ui/src/locales/fr.json +++ b/packages/neuron-ui/src/locales/fr.json @@ -394,7 +394,21 @@ "language": "Langue", "select-language": "Sélectionner la langue", "apply": "Appliquer", - "keep-awake": "Maintenir l'écran allumé pendant la synchronisation" + "keep-awake": "Maintenir l'écran allumé pendant la synchronisation", + "lock-password": "Mot de passe de verrouillage de l'écran", + "set-lock-password": "Configurer le mot de passe de verrouillage de l'écran", + "change-lock-password": "Modifier le mot de passe de verrouillage de l'écran", + "lock-window": { + "set-password": "Créer un mot de passe", + "confirm-password": "Confirmer le mot de passe", + "enter-current-password": "Entrer le mot de passe actuel", + "enter-new-password": "Entrer le nouveau mot de passe", + "password-error": "Mot de passe incorrect", + "different-password": "Les deux mots de passe entrés ne correspondent pas", + "set-password-success": "Mot de passe défini avec succès", + "change-password-success": "Mot de passe modifié avec succès", + "reset": "Réinitialiser" + } }, "wallet-manager": { "edit-wallet": { @@ -1244,6 +1258,12 @@ "size": "taille", "lock-time": "Période de verrouillage" } + }, + "lock-window": { + "neuron-is-locked": "a fenêtre de Neuron est verrouillée", + "enter-lock-password": "Entrer le mot de passe de verrouillage d'écran", + "lock-password-error": "Mot de passe de verrouillage d'écran incorrect", + "failed-times": "Échec plus de {{frequency}} fois, veuillez réessayer après {{time}}" } } } diff --git a/packages/neuron-ui/src/locales/zh-tw.json b/packages/neuron-ui/src/locales/zh-tw.json index b6b4baad1d..747241e5a0 100644 --- a/packages/neuron-ui/src/locales/zh-tw.json +++ b/packages/neuron-ui/src/locales/zh-tw.json @@ -390,7 +390,21 @@ "language": "語言", "select-language": "選擇語言", "apply": "應用", - "keep-awake": "同步期間保持屏幕喚醒" + "keep-awake": "同步期間保持屏幕喚醒", + "lock-password": "鎖屏密碼", + "set-lock-password": "設置鎖屏密碼", + "change-lock-password": "修改鎖屏密碼", + "lock-window": { + "set-password": "設置密碼", + "confirm-password": "確認密碼", + "enter-current-password": "輸入當前密碼", + "enter-new-password": "輸入新密碼", + "password-error": "密碼錯誤", + "different-password": "兩次輸入密碼不壹致", + "set-password-success": "密碼設置成功", + "change-password-success": "密碼修改成功", + "reset": "重新設置" + } }, "wallet-manager": { "edit-wallet": { @@ -1222,6 +1236,12 @@ "size": "大小", "lock-time": "鎖定時間" } + }, + "lock-window": { + "neuron-is-locked": "Neuron 窗口已鎖定", + "enter-lock-password": "輸入鎖屏密碼", + "lock-password-error": "鎖屏密碼錯誤", + "failed-times": "失敗超過 {{frequency}} 次, 請在 {{time}} 後重試" } } } diff --git a/packages/neuron-ui/src/locales/zh.json b/packages/neuron-ui/src/locales/zh.json index c837c54415..9a7ff8f0db 100644 --- a/packages/neuron-ui/src/locales/zh.json +++ b/packages/neuron-ui/src/locales/zh.json @@ -388,7 +388,21 @@ "language": "系统语言", "select-language": "选择语言", "apply": "应用", - "keep-awake": "同步期间保持屏幕唤醒" + "keep-awake": "同步期间保持屏幕唤醒", + "lock-password": "锁屏密码", + "set-lock-password": "设置锁屏密码", + "change-lock-password": "修改锁屏密码", + "lock-window": { + "set-password": "设置密码", + "confirm-password": "确认密码", + "enter-current-password": "输入当前密码", + "enter-new-password": "输入新密码", + "password-error": "密码错误", + "different-password": "两次输入密码不一致", + "set-password-success": "密码设置成功", + "change-password-success": "密码修改成功", + "reset": "重新设置" + } }, "wallet-manager": { "edit-wallet": { @@ -1246,6 +1260,12 @@ "size": "大小", "lock-time": "锁定时间" } + }, + "lock-window": { + "neuron-is-locked": "Neuron 窗口已锁定", + "enter-lock-password": "输入锁屏密码", + "lock-password-error": "锁屏密码错误", + "failed-times": "失败超过 {{frequency}} 次, 请在 {{time}} 后重试" } } } diff --git a/packages/neuron-ui/src/router.tsx b/packages/neuron-ui/src/router.tsx index 319ebc3274..042c32b7c7 100644 --- a/packages/neuron-ui/src/router.tsx +++ b/packages/neuron-ui/src/router.tsx @@ -1,5 +1,6 @@ import React from 'react' import { Outlet, RouteObject } from 'react-router-dom' +import LockWindow from 'containers/LockWindow' import Main from 'containers/Main' import Navbar from 'containers/Navbar' import { RoutePath } from 'utils' @@ -50,11 +51,11 @@ const mainRouterConfig: RouteObject[] = [ { path: '/', element: ( - <> +
- + ), children: [ { diff --git a/packages/neuron-ui/src/services/localCache.ts b/packages/neuron-ui/src/services/localCache.ts index a53f75513c..84851f4c03 100644 --- a/packages/neuron-ui/src/services/localCache.ts +++ b/packages/neuron-ui/src/services/localCache.ts @@ -12,6 +12,7 @@ export enum LocalCacheKey { ImportedWallet = 'ImportedWallet', ShownNodeId = 'ShownNodeId', ScreenAwake = 'ScreenAwake', + RetryUnlockWindowInfo = 'RetryUnlockWindowInfo', } export const addresses = { @@ -176,3 +177,20 @@ export const keepScreenAwake = { window.localStorage.setItem(LocalCacheKey.ScreenAwake, value.toString()) }, } + +export const retryUnlockWindow = { + reset: () => { + window.localStorage.setItem(LocalCacheKey.RetryUnlockWindowInfo, JSON.stringify({ retryTimes: 0 })) + }, + save: (info: { lastRetryTime?: number; retryTimes: number }) => { + window.localStorage.setItem(LocalCacheKey.RetryUnlockWindowInfo, JSON.stringify(info)) + }, + get: (): { lastRetryTime?: number; retryTimes: number } => { + try { + const info = window.localStorage.getItem(LocalCacheKey.RetryUnlockWindowInfo) + return info ? JSON.parse(info) : { retryTimes: 0 } + } catch (error) { + return { retryTimes: 0 } + } + }, +} diff --git a/packages/neuron-ui/src/services/remote/app.ts b/packages/neuron-ui/src/services/remote/app.ts index ce391b86dc..48a16e2962 100644 --- a/packages/neuron-ui/src/services/remote/app.ts +++ b/packages/neuron-ui/src/services/remote/app.ts @@ -47,3 +47,9 @@ export const invokeGetAllDisplaysSize = remoteApi('get-all-display export const invokeShowMessageBox = remoteApi('show-message-box') export const isDark = remoteApi('is-dark') export const setTheme = remoteApi<'light' | 'dark', void>('set-theme') +export const getLockWindowInfo = remoteApi('get-lock-window-info') +export const updateLockWindowInfo = remoteApi<{ locked?: boolean; password?: string }, State.App['lockWindowInfo']>( + 'update-lock-window-info' +) +export const verifyLockWindowPassword = remoteApi('verify-lock-window-password') +export const unlockWindow = remoteApi('unlock-window') diff --git a/packages/neuron-ui/src/services/remote/remoteApiWrapper.ts b/packages/neuron-ui/src/services/remote/remoteApiWrapper.ts index 5be98553fc..92e70066f5 100644 --- a/packages/neuron-ui/src/services/remote/remoteApiWrapper.ts +++ b/packages/neuron-ui/src/services/remote/remoteApiWrapper.ts @@ -52,6 +52,10 @@ type Action = | 'start-node-ignore-external' | 'get-first-sync-info' | 'start-sync' + | 'get-lock-window-info' + | 'update-lock-window-info' + | 'verify-lock-window-password' + | 'unlock-window' // Wallets | 'get-all-wallets' | 'get-current-wallet' diff --git a/packages/neuron-ui/src/states/stateProvider/actionCreators/app.ts b/packages/neuron-ui/src/states/stateProvider/actionCreators/app.ts index dd63438b57..1a92c5b6b0 100644 --- a/packages/neuron-ui/src/states/stateProvider/actionCreators/app.ts +++ b/packages/neuron-ui/src/states/stateProvider/actionCreators/app.ts @@ -1,5 +1,9 @@ import { NeuronWalletActions, AppActions, StateDispatch } from 'states/stateProvider/reducer' -import { getNeuronWalletState } from 'services/remote' +import { + getLockWindowInfo as getLockWindowInfoAPI, + updateLockWindowInfo as updateLockWindowInfoAPI, + getNeuronWalletState, +} from 'services/remote' import initStates from 'states/init' import { RoutePath, ErrorCode, addressesToBalance, isSuccessResponse } from 'utils' import { WalletWizardPath } from 'components/WalletWizard' @@ -150,3 +154,25 @@ export const showPageNotice = }) }, 2000) } + +export const getLockWindowInfo = (dispatch: StateDispatch) => { + return getLockWindowInfoAPI().then(res => { + if (isSuccessResponse(res) && res.result) { + dispatch({ + type: AppActions.SetLockWindowInfo, + payload: res.result, + }) + } + }) +} + +export const updateLockWindowInfo = (params: { locked?: boolean; password?: string }) => (dispatch: StateDispatch) => { + updateLockWindowInfoAPI(params).then(res => { + if (isSuccessResponse(res) && res.result) { + dispatch({ + type: AppActions.SetLockWindowInfo, + payload: res.result, + }) + } + }) +} diff --git a/packages/neuron-ui/src/states/stateProvider/reducer.ts b/packages/neuron-ui/src/states/stateProvider/reducer.ts index 5579dcd438..2d64d0c029 100644 --- a/packages/neuron-ui/src/states/stateProvider/reducer.ts +++ b/packages/neuron-ui/src/states/stateProvider/reducer.ts @@ -69,6 +69,8 @@ export enum AppActions { // Cell manage UpdateConsumeCells = 'UpdateConsumeCells', + // lock window + SetLockWindowInfo = 'SetLockWindowInfo', } export type StateAction = @@ -121,6 +123,7 @@ export type StateAction = | { type: NeuronWalletActions.GetSUDTAccountList; payload: Controller.GetSUDTAccountList.Response } | { type: AppActions.SignVerify; payload: string } | { type: AppActions.UpdateConsumeCells; payload?: { outPoint: OutPoint; capacity: string }[] } + | { type: AppActions.SetLockWindowInfo; payload: Required['lockWindowInfo'] } export type StateDispatch = React.Dispatch // TODO: add type of payload @@ -420,6 +423,11 @@ export const reducer = produce((state: Draft, action: break } + case AppActions.SetLockWindowInfo: { + state.app.lockWindowInfo = { ...(state.app.lockWindowInfo ?? {}), ...action.payload } + break + } + default: { break } diff --git a/packages/neuron-ui/src/types/App/index.d.ts b/packages/neuron-ui/src/types/App/index.d.ts index 4ba289b716..4bf65bf429 100644 --- a/packages/neuron-ui/src/types/App/index.d.ts +++ b/packages/neuron-ui/src/types/App/index.d.ts @@ -176,6 +176,10 @@ declare namespace State { loadedTransaction: any pageNotice?: PageNotice showWaitForFullySynced: boolean + lockWindowInfo?: { + locked: boolean + encryptedPassword?: string + } } interface NetworkProperty { diff --git a/packages/neuron-ui/src/types/Subject/index.d.ts b/packages/neuron-ui/src/types/Subject/index.d.ts index fcba2123dd..aaf34f6a82 100644 --- a/packages/neuron-ui/src/types/Subject/index.d.ts +++ b/packages/neuron-ui/src/types/Subject/index.d.ts @@ -16,6 +16,7 @@ declare namespace Command { | 'migrate-acp' | 'sign-verify' | 'multisig-address' + | 'lock-window' type Payload = string | null } diff --git a/packages/neuron-ui/src/types/global/index.d.ts b/packages/neuron-ui/src/types/global/index.d.ts index e4bc9f3091..168a43dc32 100644 --- a/packages/neuron-ui/src/types/global/index.d.ts +++ b/packages/neuron-ui/src/types/global/index.d.ts @@ -24,6 +24,11 @@ declare module '*.png' { export default value } +declare module '*.mp4' { + const value: string + export default value +} + declare module '*.scss' declare namespace Fixture { diff --git a/packages/neuron-ui/src/utils/getSyncLeftTime.ts b/packages/neuron-ui/src/utils/getSyncLeftTime.ts index 9b45a9f274..812c3f2ca4 100644 --- a/packages/neuron-ui/src/utils/getSyncLeftTime.ts +++ b/packages/neuron-ui/src/utils/getSyncLeftTime.ts @@ -1,6 +1,6 @@ -const MILLISECS_PER_SEC = 1_000 -const MILLISECS_PER_MIN = 60_000 -const MILLISECS_PER_HOUR = 3600_000 +export const MILLISECS_PER_SEC = 1_000 +export const MILLISECS_PER_MIN = 60_000 +export const MILLISECS_PER_HOUR = 3600_000 export const getSyncLeftTime = (estimate: number | undefined) => { let leftTime = '-' diff --git a/packages/neuron-ui/src/widgets/Icons/Locked.png b/packages/neuron-ui/src/widgets/Icons/Locked.png new file mode 100644 index 0000000000000000000000000000000000000000..ff6636f8cc235334884b91a748cf3828de473ef2 GIT binary patch literal 221987 zcmeFY1y@_))-8-vpm>4e?ry=McyXt=77f9jQc7_sP>OqT4Hn$p-L1H5afdJT+&jMa zy}#j%u^A)`vh&ECbIrA$wZl}EWzkWIP+?$T(B(c#sl&j)JHGzBL4y9p{vdP?`U}=Y zT~-37Y?Ndl28IGgPD)(U)99!Lt-@kgYxU0eVR^}02ctiMm4;A(wJ0xPJH!a1lE!Ci zjR-CynFv+LKg%&xZbr2?mWkowJr|(M{6|;c@2GOWaNuR{w%)o)7hXGN;rP8vpoSx4c~EoQm8m`(8gE`zrgrw9MYW zxNMN)P{980%U=$wKXzW>ga+j&%>TYVWPjU~{s2ewzb{ z|5e5R$%xn2|FstX!*L0Pw|4|=SAU(GD!(1fqF4TNHGGd}lc1hFavj(DlA@d8>wBB7GqcmM0TIL^5+HD1=`#D2)) z>uqxDvB>Db)IB2)|D3}y64O!uzGpxu%U|6etN6#no@2z7til+bd+(qAL z`p8^)lG|ayO_7*bUZjG0vSES-p7E86KptwDrZe8>tB5!aW!l8Jh-a|hLC$@FXw}i- z+1cW?o6nU;xaefTuf{k&dF9mm56|*)PrFu-%a8J2#tUiW^Zieo1Q{-Lh$~^Op||(1 zNT}$9jzRl&%W>}GHw5Svr3e#WUC?^JRl~SjqHbI^YS^mDqnoJ=c*=tt>DJ@&r~5wq zj7ah*$)E!6R6sP;1TkF%`%#=8Tx@36kKE%fkQrfpAD1#?yt2AZTL#5x0yGAU8S}!M z9#2aud@O74?nJE8-H^+X|Bt8r|J8{D1uj~|$@)ga*z16}N%uZM{anlUz&J)jP!~ZD zPnND#DmVF7k8X0yN<4DLRzFd&zgX1@5+bpn6z-<=Q>!Cru4rR~$%|_1QGn?n1&b%f z3QyG6;Ly7Y+=?P)SMXdfn$cJlqrP&a{J`*fm9=P#7qu)3&h&zi#IvP{iijH8QN#nc-#fm zYU+z=c_&#`_jktSpldPS%<`wZyWPy^1@PJ!=s!6{DH|+m{fr3TGWY9>&8s2U1|2gS z-yQI|7d=K7r5dKl3*?2frK=I6a36xE$$8ImFMuHJkscyFD)CF*;Dtq&wC8IVloo2V zD)B6pB^ucWfc-$+A4#FSYUgVZwfMOBq8x0wh+odo-Lq)C*vF@PKmMDvsb>>e!w5N8x4FW7*qwZmJUKeolmK*3EK zlh9+y!{ta6hEFqgR-S$+z*vPi0Vpg>jv^sgKr-o@au}2GUC=bd%FW-|+8%z>)5Lac zRaLHCAPH8sJaAt8Nb7Lz>u1t(_`J;>GV37n@;IfFu3y6kdlT{sQX?4Xnh?N5wn_XW z&fm^AB*LD5tJ}UZ`T5MndnD-I?C4p<-f>S^=z%oEcVwsvE8G}N5hZ_4w3!X1(d7L( z6F@X@$%rf1@TfLczhQLeZ)B!@tD@;yV{2$L0{~{lnSXDxNKfVt9675BlT9w_x&WWk zEtTU5>`r-ewoFV08a=eyiY+8Y>K>eo6@3XcI|(vudSrcFEgd{))>h(7S5N+rUP>sM z6W56$_jP64C-4o2MyU$CWD^2_L{3wCrJ#tBY%^TwnA9ogQ8wyyDl=KdP9l&+P2D7h9_xwyr8^JjN>?%yrXeT zUE^GKUyIfW3p|%5qsHea+}?6b2Td`Y8Cts%O>>i9gY@nXPc8>>f$1F z9*4wuIzn?H-+<_2Wvl4v59WBRt$UNpwH&+nkooN2U4Z5mHM|8ggLVnkx@TMzg_rFa z;Rx9ApC=Vsu?5%Vr7!k{bO&cT)9q^2UbUMQWup^>XN3GN1Kl^bA+3#{4u(49rWTp6 z82A+AiG5FA6ub|%Zd{B`3fVkF!(IWW{00g*-0$h^^8Z#c1g02NRQqw~aWU37BS2Uv81dx5NQlfl|+g0C!H&N_`zFmspP6#vn=w>t{Q4=V=DXWw%1NVCj3Ji->fG@g*YkGvxVFG(}WAvq2~My z>K|*PD6NL$3(@Tus5;n@L!q{`YjFPYRlC>faj*ym3Z6HXE=nKE8Mj?>;Vd9_S_tA4 zydu*`?Y&xj1e`eu1M_sDp)kH>PyQXUhXy3Bj50C1j#3U;@oMCxZ$1pK-YKxyY`*10 z>JMV(b!rONdfT)RrH!F(b%{SQD^o-@lAHS8HoJyr^sXnMYa&%AG6c5A%5-BxhVVg2 z?Hihl)A=H}Pknbkccv;oe0Sv6kc=|Kn14GDg6XV%Qs3HgYxc?tM=9vQoB3Zy{S6_5 zz~6`b>n+I3<@l*+$gfU&Ny>FP$nR5-{K#T31Ca;gqT&)nPlCI5zFkIqv9j>< zcN*=rUgSAFG_drf9$^bAU1tHAY{?$_68jRqp;%9+DPBm5{Td9?jA%&}D{f`LSM@M> ze)T`)0!A_fLmidbox6UADmen-NC72~yk}KJ!$0|77_|fjvX_!>_7i?hVj6gk4mo@= zB6ypr_)la0cdTAYY&XOdd0ZWxynkp)V^szE*jA1rY zdn8Fd`Fj%(&_C%^XN|DI%Z|%--lDbdT2eVuxjiP0JW{Bq=1=^lN1N*sUkUz)_?G z{dn#n^booC$I!#lzh3J9Pz4fjht+da2$xe>WNHCVb(JTEQR4zu4XHQ;eEEkLfif)kqr474uL; z$s$9-JQBCP8ZV;9Fh4SW&kREVMkkh+V^XE0jwi5)M;zG0da?Kx8`(SeV`oGkbF@CK zVp}gaY?tH#Qq~IAWaUQfxV){F%z_!n=gP$Ck2^Py4L!>Gx?ViQpy9sG)o3={z{8Je zKQrBDbndxh!btxM*?*)9js64dP3OWHpBxm~Ci*yqcy%>g4<8O1hn(^3>8u-i=IBaHDFc5?W=-I9WJyfAXy_{}+E zmdMe}9dgp`B^av7v!^D@zjL%%5it+e2U!PT85u<@^%N21Q}|)b3}fVTX#1A1L!taW z_qKIDs;dZxEm6Gm?kfT-ak{|MyTOlXou8JOe%A0#Kd+`SYsgRPHRuld2vFCtis5^z zLdnT2^$pHGNEyi^=%4V>K*{NS3(6b*+Bo#bqG1Tg)YoaJ&oTX8GfJjPDVmb$H#M&U zn?v;FhHk}lqEgD5s*||{T=am8lEKxzwvUW_qJxG79 zg|eWTt&>7CM6><}%f2L^@v>)WC+m;kpk?m5X$K;Eni7fPrNYC?28Kp&?hXJ~$)$UT zngBZd=YZCpza$TnkQxG{QG>(ON{w5ok_pv2XG;wuIWo)I!=Vo8!FYCWC z(p0#;W&u&ObyBZGj-^s{Stb*^+$KL(_clJ56g&{9`2h!co5*x#95GL81JP9P3cItJ z2^Q7f$)*o33=1ySc5|*Qj;}tH-skhoE+iN>V@+KrdL!xQTTM&l03$RNm#n?oJ4#U- zoyD|W7ENYYLE%4ah_I3%e(TN2-QJz(pDr9IT(7n!U<68n%t;JOR}|gPG6W1j*fz!TG@U7BudiWh*druj^2*vu8=J2{C-f|DKEm8&vA+a}#z%VyWFGC%tc=br(w*J^q^3TVygM@q20fOe?#ylY2M$J} zeme-}M4iH*Vjm3}z|Gok&U2nOvJsfIcc0uDAHK}Z3s4wfLLK3BNQ(7jHb2ZFk*Zz4 zX}0C#K(T=urJ`j@jV5;Z)5`t}`NHEoEs2<>knn==R?k|^4x7Vmh7C$#KC)Fv@5RE< zLqi2_R@UmQxZvN4Y6iHP^5r8J!FmDq)A@_yM8A6-gQ;b@S4JPvKqn)#Z+D>sCA7OR ztWBaK1amvCd|0;yn-nr`2Xma}jCu4>1PoD7oi0sEc8Ua-tZ-d&wphJ8*L5ZYBk zi&oEg{w`wGxBy`)bxW$lx|VC78LwO`CK5TkZz>g^cFkBn|3V*8*UO}%LR2-qFqhWhLnv6HZFF# z>Nl(Y*4oM`rN&ZiC)08C5FTDQHe#`qAJ0o!Qz}1K?0hfC$v{$$F+mpbb-sq5@5XMf z7R?m*#-44;z>>xOckN7qrgR!{`epWCfczl&yzlkUytY6dCiV$4G$k2?I!OIwjSf;u z=(&o&x#U_Ia@!@yP>%ex(N(^xICa`QSAL3#&CJ5sYGSLBj(WqW$ChNLm&awqxko~t z7$K2}Cq*F(v;f-I>atPDBDU^E4)&VMze~_QH=`p)$O$jht|Goq=q6KK!q%iRPu*61 zO2$WXaT}7^H7KEUZJMc(A&m{dm&MlGxo#N8CnRCX5n}KbxVjUiwZh~R7sU@_x>elk zaP9fSNhy%Xj=MI`I4x}3-d+F2c&tuZK+{Y-z`d9+Jnn)Xaot6guIu2XpdeJXDVNe4${@L1eGr2-bQo8&N#0jS<;u` zgO!{<$C5`k$mxVu+zK_OV(D^fkM1G{z!BH}#)wpMBpU~Wt=UhRduK>o+27WL1KwEs z4Tu9REBY>{19l8hih?VgI6o4iG<1lvcsZD2ls&)Uj^t3A2=%Ai*nX$;)j-Z-)1m9V zPUPk;-YdC;F`?udgU8SO=czR)DYWY1L^E7O5o2IR8Y+MgmGlv*4k?;psr~Fff#JK~ zNp&msOLfvct2AvAO;{fn;&f93iFK!tpDbw`Vv;Tvi32nEwDm-j5em_NDC-e_Ub^8w zoY^@yOSPW2=l|^C$TBjU=M`AJ>SQHbVw;UR-$<7ldVOHQ!x6S=|JD9ib$m+p#bA1L zQ&56D!J&~ZP)ofHV~h8o=C`wMck`DeoWV`It%>12f7%^VT4H6c2hI6`O|viAyDHsA zjH$kI$Pd+bqiACSu`~5WU-})zpo*dV{xxd|&S3v%A@x<(+C`#|3|DKehYZ;gJp{@d z^1c`>M0(%`Lf3@cbH)r2i@G2wU#)vD?7V$|Gn6%uX2CqcjRSVo$t z>N~hN+%SG2jKx>t7o(aMiVMR38th9F^mUW}>-c#ME zb|T7}3Oz}^0qt7tS%PyzHPa5c)0ISZSLA5RR8YzRs6W8gjVLoTM!?ioax}HM|ed#Gk#EMSH-f#s$|>$-|7DMJWz1b%aeT z+3BSgw27AGAR@<6x9x7(U2+&!a$9Nf-;H*AJvHt0<_Qwd6$IG0T%;3Z^w}Yw1q#VP4N|#r$c3cvFg^41sQ@s zw*+uxKYCyWapsyuz|XGr@cAJnnD1L_jkfO-S|gAyV(W8D!ByIunrq_oGwcdXGeul; z3-t?_r=ky+FXkH#Dkq|^RJ0R-0+m&E5dEJ6KcjZseZp)5>!vU&Fx9GCr(D+Ny+CYgQo~S^Yc81>mOQutQxQlTMj%vh zDgCV@Ny+?SJmoR9)A-1%M{ViY9Oz?-6;O6nDuR1q`pj-w!q9Lfx`86$^BGqnt8*s> zoE#cDjtdKL{qX~}6sP3>_5yS&`jIJWn5E{Th&W*f$)O{Veyto8j50%RX4+*NmyZ9l$7?7*WSE!Vb!?iTp6LCwC6bql2v!||X>H~8QWyW$LW zT1_(CAoWOW?(o`P*)?}=s*W*pUbb3oy=@k|&-`L}=N*V-_wOd$`9y>L-+>;sk*JL5 zTwA7>@kIc?EfbSDoDQs?dGHWj@E6F3GkI6zOdQPgL%|6O-6UO~((N3^Q&0{1% zjih))P}4c_a*fZ&VWmJThWwh1{C+Btz<-S%AK)~oRQ2gzHj3DvCRp-@Xvkn{@b=x& zPJ+jYZ`=Fq5*y$euUbkoA9h6dvgP#uUPj+3^p46qglXQ$`7E}FBFu0jI0MTdT635kV)B0R=+?h_SH&JN0)x%XdnvFPLa)c!d; z)d$jLkSi$)+6+nYj+I5LZI81PzB#$wIhQvOR`6yM{`x_W$!8>{#CYJXVcSH(r9axJ zXu$fa#(l*`D-_ZsxNxQIq`0Na46k4(A%?55a0VQH70o-zevi4fL51LwN>)MIVXOB- z7GhMAtL7HW6uHgWw3Pk0>_!xvxkeIJEAxih;TJKA(2KS)=kNsOp00HIF+2Vv&Rf!I z4ZFfiR5B9G)Gb??lvYYS9&4|+5`RB#8h9?uiZ3v!z^f7bkfZ2PZPMV>T$lD3&@PGH zNDvsTcO)7f%xb9wQECru6?6R-1rbq7WSBD8<#F;SXCaZk>l3^BNb-~@7YIpYvoKG%ma5g$t|Whbtdn(f>f z{=&8FWYz2*SJ7p*%Ru2v^8IzLpIU!`YQ#-h*=-epY7Gjz_f~3;B;vdpw{Rb94SmQv z(9HPu=p?+A7%!woRD-4RZC48As4R}d!=?sesk6UB&5DM8XGex^j}gNm?Br#2{i0N6 zV^M>`d%9xh68$&pNHZL8oL?IUhMP-M(o9S4l}xqtWHTxc`jSe821>n}alIb>s2jvd zw8!G};QcnJ=*Uthb|waAF3J#i|5()^z>aK{3Q_Pl6@5ba$^xDB&vs=RXpq7k6O2xV z1}Sv}GN01st+0Z&M{33^F)FrLdj?a80wo%Z<#{1j5ByA@CZXpLHU83y`uh^Ik!G6F zeBMmCVU~R{TBiL=PKO{86n0;;)by@p1LA-#fT}<6BoTfBe`lu`9Baf$T<0^3s)JS8 z713^M0eB%ul|?pVe=J!bVR0j0Lddqke3LVgmd2+cPdL0t!rH`E`>}Dxk3+^u!S9U> zfuVJ}RQgD+aUDN7fjMkS<$$BRaxG3ENnpWX9RQww19L3)98|Kl-XQA@$-;x6@EzLq z@CKgSv=~XaDMOGhvc8&MfPN4qP0JE`BtWMc@kX^Bg#FPz_*KuM5Mi+$RDAbi852vU zCrQ!v=EIRw{SLJwNWW(Jf|~sr9qqy4>H-k@EJL*tGA!pLw<%PTAN0K&$_HWj%u7nB|idJQeuF*%Ny$#eI)GT zXl+ACan3vX32FXY0zex3gTNvtvKBx~7sPDnX2Iv~1wCr2W&tilVwy z(!yA?A#PcM!p>^0;JmQ9V!L?oV(n3(IWHz0o8=0tPqe4Lg(KI@fj+3DRBQ%KDz`;b zm(`XcK5~TZpuhXx60}EaY{OCW9L@3CJ90R*4&pR}LB(7vc95%=u1}njCbcWa7gDV)gMKbUtLP^dF04TG9<@?! zX-nd2q?QlsYZ*3Jddk>x;1FF;=@>3*&W7K^NKK1C-X&)mGQs4;7~i@Av&ZLrveNcY zn)o!V{L;L32K6gPB(FK^uEE7esO-~8t&NKLUFx4(-XEu3c$fY%F+D-TZ{;A<_C)G5 z=LoUfKs%6n#t5bsgt6kbW{Uppko^s^T|LN~u7oOsH-eQXvb@M_YT$p6cvzsCci~&e z?Lu|r`oNa)w`T0PC$q1Sh$&R*Fh$XBl*s7ZmLQbiFk>^trl!F{o&DD1HZ)1DzN3F$ z^>04_ObfBELFM2jpBSWGd{^U(t!oGFoZUI%Stkb7FkLE+&lIEri{kgxt@w~BR(>+i zNf9q|a7J4pud^k9t3Hjz)f>uy0r;NgwQAky_DqG6w&e#(`mQc+MbpjolLaGpmUp)q z7o)!$1_DJl>r0?fjy(-p1VyvzTYc?^@i&+FPfpknXFS3P9x@}X{agFqo_u*P-r!lS zOp7v<^U0!IFWI_eEG8^_uh%*s+jDpuYj!NZKKpMt$R5ih<9K_cq{dL9djZ2c52U&c zZ^(>^L5npxpQ$eJ-w*wbm5otnL%!UTT?QGCR4sI^0%Bd{J;Auztm*B5dgXc6A5svdAtWawL_V|5P#fD|xI6 zt$iF+1mdA00G?b}YlTYTktdvo-}8i@y869N;&~%Jhh2xgmq|s4Z0)DQGZu&I2-ul% z#Ht-Fg$KG^31SOom%ZhfRJq?(NKMb$S2*jm*zkorJvgW`JI#Joyn5Ge!Ju(&fx_Cz z-9rvy#GyEGtx*JK9&F2Pq{X)o+d^mYkL_;G?_|Ke?6S`VIB=*E3qgb5KTIR@v}PTv zm8|XerzF0oTm<73^l(2(Cx?~v)L_+u#X>J)YB{m3Gl<9EexyJE8PlwebQ}1>64+gT zKNmr@g_l*}o;+(1)?C*tEnee>4f{o@r=s-b-mA*@jIgicZLXI0gnUHmo2x2_Km!qX z#llpUbDv)*4s`Y~uasD$xxj)_B42!M6q)Q{fGv+)Spd9ShQwbN9y(`R(O>6YKYI|u zBvZ(rY#LJcp>t(*Ski1p=_(PGMc3OWB3pr>-22VQc<1~gF~Jh6;b@0678`j$F^S-& zUU`8%t_-dBb4pUzryM3?WeB3nL*2ZxNkJc(%$wr@y)2UFQjuBBWYL0_=L&zVo0&gk zIZ51EHAmsyfRGms%n{iyOqhQn#Jh`xwknwB7FpHqZ8z*xivlW9-f9=?#l8Uik+8#( zn@8ccHw;LsQ2x|Z8M#cRgvqbtToJw1LoyRGuwJoWV%yOUf}|qH-+f{GbVhA4x2S)e zc2{$wvY9^C@{a|(vftoN?#?zKua3}U2!%vgNBN2;JCf)NFS zy=44uu|Xw+?Bg2Uh(Vy&Va`eEm|PSB>05=rX|r%)gJmN%>%kuiJGJm9Gjs)6pJy@` z2tqNf;n42_l6fv0%M0V3ARuAnqsi)dKeT*x9nI zP#;(VZa-*A+hiMB0s}uXZeT#8gq;h)aj_X#2|87vZIp6(slOE@GQ|;CV$VNC^ntB|Hz7St*aTi6z1J?)*`-TXT|S2RNZ$~ zU?gN2YBhl9+_;;li^Z3m)qy<^{0+p%cY%ZgKDz8b$a;8p;)UwvqA)2n4Rc6HT_+{> za_}ZbWJ?j%FW*%yOYpv(;lVbMHegWu69N9oB^kmg$Spo`HoPZe15V~-XVW~?q+l~z ztu)j!){j>I18|~Us=>Dx-Mb3W5sP&LEHNU{|H7mH#45e4W)SiP6>0^mp=zjf_{GTq z3jJCXf2I|TuUC~Sqw1~B9DG}H{T1x~Ux3Bt)}`3=m3HnU+O>`+8csYo&e>@!NkT{r z5!hk+fe7ms(GB-{JR<%uvFB=UU_!o4UGY^l|L!kc0bu>k!Z2q`!HQT3o{!68y^N+< z%+?{s+oHg~{MM&om$gRwqF$^Q${Ll=Q|-@rQ~<(2z9m8NRbaEmbs59^_D5>@FSA>T z9UZ+Wa$U7LzLIj4)}P>D239_0ea4CBy-qgNzQ073#RV?TZfq6OX#Fhdb#_e1^haj= z!|sAQO`^l?Qc<6{)>9_JrdMs5EsBr?EOJ(RS z*=zTLZNDZRDIz9nY{l(NWXka_n(0K3Ryk6g$94H|v_rAC$2sXm z>TU3tY<8#JajZ8)yc|1>uyBV?J?xNu!DT1ewO~t@6S@YuPytZ7zjWGtjf7G#8(@Wf z`9Ssuvsux|ngHj^i6iD`@hls0pK2x|yAQ6WM|7BicROZ-R`VQa1o$n*SEW^)DGtQ- z(t{g1W8XtqH+f}(X-9IU2&{Lp#7paznzne{C1tEgE||Lu z<4iUhKs`jMZ8pn(-Nz3;UvZu7zin{3c7giiMV&|Nv}8(zkv7RZPOE_$?1D*~dwhZ~ zfKryBrmSG!8<*rT<|b6>lKHjZiUR!5!PQtkYQbh-~h zIPotd$Vbr5yIf(Gsrz~m2DQmk0l>;WjmM#HZIBi#bH_0t9F~rT7!8vR6BWEP4!Tdiwj7=} zmN+rT3d9%QIY$2Gn|6N>{>fymNYkUeWP(A}Il@-sKlC~869idWv!^)O7X$$%%}t{k z06R+CHZPng!$0V8w9rneb5?-IwZpWPeUB$t-yT&3{Wf12ztq=sq?+z!jn8n<(Pt_V zvKWXS-Z5@)y*c@#LQ>)~dJK)LKieyznYRbazVp&+$?2!MbJs8RGR5?oeBG;#Ki6Lj zeRFH;E0odk?<)`T(L7_hXAeSc*u0EDz_?!q{YDXE7qznd5`*jrlvY%wpR^{Je5}E5 zzoY9q6b`ex3>#>_`9^jLW5tK%4a`H|27Aq!)2pU-0@#$KaLhG@$Kuj0$E2Q{Ly3gKhauR=`l z;dgi)yWjSN%2r&NbUalf+^kZssyQpPxbA!T{lwKeh&dTeLoL9I{0?M8IRy~Yy-4M_ zAkyJrBK&NfCBFl*(bm0STJn?`-8pTxP-1p)OJ!}-H=YS%$^cF&o15dznTY@RE|GK% z2}#LT>qrpI+}+3A1p;5rhRa`4h_#hUNsqT(o>*_1vxaw9^(XCAMz@uGSIfr~$I-bq zJCXWW6J&9mD-YHCMpY{{oOWiomQ8+=&!u9_q;)R~_Vh{ZZkS1rrn7@Pe=IbJ3*~PU z*|PXQ^_6(JAI}j~p^5KaT{ghaji2dv8CpZz99JNPEwMQXgSNKngFD=LFI_F=U$^;4 zkG<9}pjC>GCR(rg%3$)^S18-;gy4`d$%K#BR)_t{hn`aPf$xjoOAcL%f2a$qpZ~Z+ z)h};nk7>ph&1P>vVS}`+I$v`d&=NX^?sb^#ki+IWff1%#w+?XiWs!HbnI-OR{VZ0x zQOhw_Q>c;n+2#S&FyqgS1@-Qu)LgvSV$$}@!!X2HRJY^WfS~nFW9#EZ+~AT@Qu;wQ zeou)-)&^Z}?^5&*2UBTR^Fn*pq#2^3>m5m&fRgRZXkez+iWGt^;M*WXxsBjL{(Z(; z!=$``J-t006P5O{N6L?>oC(6d9-K0xQ&w3lExtQa7X|RxzEU@6c&hIv!=tw;^N{54 z?ki0yI7e{Cebv=Pz{fu;Gwj_E5X{9e+2#_0OS(1JhR%PI9q$+eE09 z&Z{w&aD(h|;H+AA04SeY{kQKwlxAt+z`L@tnXt@K+>b}0G`ZseXIlxcG5e0dzc%G# z>Vg2+hhS&gPg5wkAd9~6TIv?wl%%240|nhvb)%bMeq6^Dc^fTe&E*ZZU}ohfm6V@{ z;Uhq87u@nr@t-xRIEC3WEU;fhFz&7y;Bg%$eBCGzj(daMtQS|TX*p<=lLCrX=qmW4 zpGcXy>8^`IOUl`^R+3_3fm+#!G)5-ec{fInSLL^2bqjr1|4z_SUmK6}=@VXCH61tJ zET64)ohn~EmOC4&>ep(4b$-*bjMDcoNi1)6G^-qn8d!%(Ri~mc0#kp$uGq5Z5|nhf zi|CZ`&9&}G6m^cUEYNa~GI{0bz*Soh)>fL-hQg4HnT(G@XG%DE+huB!#VKAZ2 z;-|2_;EZ|rfMrQ{HF59emak}GPQ86&B!PYNg9=)L71ZV z*Y-wVnG14fewtkVJ{-&1GyTSmoz8A9$d5(;K_CKVmfNvV}8Y`Am6Du0gT z8^%de|9VeN0RfrzVwj=V9)a&I%YtW_8a&+%7Y5)As*OsU#jCF@sC6Sgi|Id{)fu^+ z8QZNgZ_kq~Tp?qm8DW(Ba=6_YT4c;N=^EYa2{2Gp9|GL?<_W8{_42g6_bmz4h$?mg9@B4G4R^qK3maL)r*w|vn~ z><&(Uv`UYto9D6_v8ntyZq~%ohISndXbVuHCP2?ecbwx^5XZARxGc;@EAz>!nIxYA z$YP2F@146V_KV=@Qq6vkus~C;eeeIinuN*0+(S+vPOSz#3XBQsG4T9b_qlrn z7`068Giu)4UfD?3U||)+MS`8qp+mZ z+#?<1S1n{WWJJ_)ELp0-UM1!^VwK)WJ9Zd+F0v-pE3PZZkq;^SwzCr=&8El7=|DeZ zPo4@qcniww9w~VgPvQVexPnDiT7(&#c&y zZ94W8odSPQum)8Z>w;o5L3zrtMoJJ4M_$UxTYqm6eV;tdb;b6Yw~gb<0>y)-U#D69 z4uG?BSTXp_PHZBH@3(ZW78Ko(_yinXIv1H9)B$|ELHTrjf4#Tzp|0CV7+RSo82hRJ z+WNSTU~ABx_`LI%-m0i+63JiK7|q@rd~aHT#BFjPssG$m5-3_n_^tXNiHO_!Bd3&3 zrcY64M>Rs*r(%mn`+g(p_ae9DOFvW}SBBNH)#QMcBpH`^czn(IHAkk3Wh&ceX%~KJ zVDJ-~_Hxu}YC%dyT5ZV}9*;kM>0qil4q_`ohVZ7OeXKvUPm2kIDTEo*gL)ZqciQ@l zHC4gaa^;;p^RPg$YbAa$h!c4cR8 z?5RBn`s~8Qric5j{A)mSyo6#oDg!T5?)BJF0cH8?DuEyO?jvY3nQyG3s)2Yum;I2Y zTVnBD>PTCSHlKq}^&MxW;hT+-9=*~=U9Y!Zj`tq&GqJgI&mVE!XEBQG=>r4=kAIW& zVE$O7n`x#g9NpvD&!?r0_gd_SJOba@(_cqwGCTXOzI@rA=}wV9uU6X zQ}vNIad3|;Opzbkf$nI!Q0mWv*%cd7R9&(D(H&1x7N`o9Z?wK8G~(#}lP#Wes>QPp z?d~Txf%1o;Bp6%La6s&SbV=yc^}x8y{+&}7i-1igkNB(}Be(@;G~T*$8dlKj)I?^K z`&|s~Cw&eeT3(oVD%;GV@3Pi@V$Ky)U$ROwfyA1~3iU;6d6Sdp*H9>C_s%yhUongD zidop`HfXC(1q5Z;{WQm6%fou-J2BWzMJ>W!Rs3K(&4S&KLXBz)LmI zcP`rK=^o8~Y2nk*0ofDzY11yeKq7fUf}J(b|Lp}}5x{lcyyJSOYkm|YTiX#cxy;}T zP+nxz7yghM-=%0+*f`*WEJG*Y#^pg@%-)R_sI3T@odz8Um0hbJJVy>IeeWpI%=ptS zOOrVolTtDD%>k@DHYB|5)%x7|r`&VsAVcJY5SqpO&-24IY20~_wU`$AOs<#ow5ABX z!`zY0dByQH>4YzfY|~(wU@>ZUv&Ek((qpifU-HmDHp(LXm$C>f(X4d9TFL!u4hSW>Cs zUHH`BJS9%IL3CmYB~IFTWo2_@08dlYiGIP1lY?imZ*AN40bSNqNf{Em3M1#y^qqd zD6?N-eJR0$B*F6WJ8j15g=t&`-vKzKV?fzV1;=r=NR;|yCn7)OkLKl#0WNb-&vw3% z$G`e64}?UCU#6d%{E82U9%#fyNi{-R!q_&X8mM2uL2f?EX+ho(cBz_s<3wS*Aq=po z{v~|UKM4wA;6pJgKFQ=Q8LdLLhkx}j_nOw_EJXi$t7V%R2ILc6Q(P!`j=8!k`**Y* zw&{X&%k)oOKSOu0S@1P?TJyrHKYo^7&G1R}(eOZQSv^g5Fg34`6hnpOi$Z+^RET%( z_(rpMA0eL0zrWzDx#M-@gKN#fX47Vcrm4A_(4Y}~uq1K#`JKbPbF@R;UEBSG-_0bs zFB!w#G#s;jM?#8^pXH2z<~j{B+O(lz2{Sw{M@~u&R;t#Z(!_@ba^iG5Gk_Ta!y`$YqNP0 z^Zy*t)CPYWZ2>(i4?-fUiA?a|JY1~ZkGkC1F5d?~y+H(PQ)-yb2!9;jFp&C{9ElKs z%`ZI|t<-_eGJyRvxtMbX##&TPCJ^-I*a z0UHh;Zm1KPAs?lRcV&Mp8htCPn7d9V`vWyJYXu&HtGQSDf>N#ghYr$ff>yqF)ktnIx>I<6B<+qI{c>_SGqjee$ z*cPiQErqYrI%=+|vM}^=8(m@rQ38+6Ls2}nyKpkym|xBt`HarT>R?#;DmM_GJzor0 z(;pr$1hzHIwbLR5aNTWT2_uz;lkt#fIr;3x3n^3DpRcv$fspFb`Ydh>$D+8*u6sPV zvKBD{ENbRa=85|s_fd`-nYNZ@r#Y>ebL3-KW%xEsoFi z3wI$sv`h~6QrTL7^5LLbh0NrLw{$ek4g6|r4U|tGVFkGd_G6w;avjN4wW0$|hSpp7`kQGk9 zm!7f!)2AsMBWcHV`G5m)4k;#aH&n%e)~2;@18><#G!s~LO_ptc5L2B;RozS)NEtjw zM$F3#1Supue1uy{czr-lq(+$I)sjM+r07)y8rt$)@7}Rcm6XN=F-R0-x54Yx9cn*OHhvq&>KA*s^SnGf(!qjeTBQuQg2)YB*l5wF&x+yKa^O zpc*Asr1_m@3b`;UX0Sfl^?(_yRBaaR)t9jH77rwmre|FYg6L>~@_LVT})f0YUfNu`1rsAC?2v|Mh5o)oaW(DNR z<;4J1NqvZFpJQXs)GYBXwEDCi*cwMW>@UlJQxwat*$ZfC`_cm z=KE?yTYy(R)1)9C@Lmekq{(S@Izh3qs6TU0Yv@#5*!A$%rO*iF2DNr1sgc{FE#}_v zbQ$t+xtcr=4FJ%RvEpmHMz;!u$7?NM9;*->8!htnHdbJlxklc^MUV`qG(y@9SX!de z1SCJ7>h;+%ik(&0wX*$u&C;kkJ6!Z5oVfG_T*F25Gn8#gTP}&ca1Vm7h{=GlRF|Oe zNOoO5(r9YRT;4XZ{Rnhu{dHmAw}ZMQs!y7l`j*M5YS3B%J)JTrE38(&u_)|XWzd{z zFqev6(q%<`pA(jDPmjfabm`9Th<8f{wL5!Iuq37K>3eDk{$L0w&RG)ic*HjbpgaI=_3a}0s_Fz-!Rpx zEo>%^`)BI>Lt}GLDVG5*IT12Gmi^8bJ-I}TJe7c?8Gkvsl37#tQFN6{i?f5;QcylE z)r$Ik=IWOj+Ls3>DbeD;IT7FIBtK+aITRs*TkyhD7A5}j+X?>vdEHSn3szd(W5i*u#q$Xc9mNZ62_9F8Cn??Phl@ML81sd)GpLthbtJx&Jwd{bM}L6!&Zy?Quv> z1Nm0LzMvC_!7KuhPmZ|1+Gjy7bek1Npqe`LL7TvUJbE(*g? zA}t_-h;)k}3?-7%-6@Ua&@dp#&`5U;piM{iJ2zp-RoyhN715}q{?5QEz5C+rMj^-bnCVc;+@cS-r1k0`Dn1se zW{NTUT%TC}2oj1xx1zYcAC*o4{;{)QBIv@vp}D^^VqLAsO|Hj4S>V`3gMo47KoE;& z94g?__?D))(}F3RHm5hh27}Sr%77zyY>eBY!>)B8MM?t1DhIrlxe~5>H~>5eLOzE> zvU{eyF9tmFz7h37#D%z?O(8**} zLdUv&V~Y=-F4rZ5gqW5xYmFLlL|+FBTt*f0LAa;(KBirRN=vdcERLGQT0==|%|f$e zY4O}kDs8w~7}o0wNY)V2UsB3?>2{AH0M>|0nJspqs-lXZtpl zS5U20qUNy=HV3hp+Rlg!}gfNmB}?S3~%eb<%tz zUSs5H>T_n33hk@9MJP_lab>Ki)m>8dC2}Xj7;aPI=eRQpiQ4a9(NWP{bV%yGsdks} zp(BL4nPv}nO~C5Zc?Dji+V0w{9uv;Z)0le}&&G$Dis6h*QbIIrqrVWnBw(={%6H;}lejw61+bd`tJhjuqSPO5I8GLw@wXkOpJbQ#g}(im_WC|BfT%C@$Q_Mh5ZnN zC2krg_i+d+Ur)`rc%Q#BG>%j1+ogqFBAda^nEqU1A+7nHQhMO-n8m>fKesgi5Yy0de^=@ zS*sW#nq5%rT%t-@yC<3NdwJeH&~$$r6XwpXX{2Y^3+z77e*O3rT)663AHPDR2oHx0 z{ii9{&-DenJjEbs`eE+eC61I`Pesybs_6*hS5UtIZJcwC!aAL|H0lHDH8STz{{B7i zg}sDmPG`qvMKRk`|FQJ&(~EXGoHLBc6$3TWPyJsH$!=|LbVWjzcCIq zDXS&vQfLZHqjN*c>3&l7q;{19O2zr;NS- z%q3?w-1K{2_X>6s2dmWnF0YRFwXmp&J}337!?cU#eIVU*AQ*pH2>rRByXI@z^7@Om z*7tiU7S9PgrwIGFLbsRp05;>i-4`+%4n{o@2PouHD@9@(zmW{%RmBxU-F+j)Cm21l z_`4q!^_#E!Skfi&Kkw#hEVG^HEpB05;>pp#o*#;aZI|^JS|0f=I33no)|FgJg~90eS>P-PxAJW-sM)B zB{Po&QiISix;W}2Qp>UIk2=0&-)B^rrc~1%{0pm1k8Fjxatx1J;b^6e!PV#ol3Jp9#)}u|NFN_!3!~@ihv@+Y?#17eT7ZvH$zeyu z{{R0N30Qlrn>dS8Ikz$M>pc7MMRxkd5f#|=%LbkgM-m4V>g0IC5sc#DZPd^C*2+Q& z#ca~!&rOr9)JU`}Z3lCJaGOkSaD`e>ae=K+yE46;zge|^mHBP9S3*f^dd(Y+&h;U2 z{LOeJt1HT5F%8DPSw-fbg*6(wkrXV>++h@dYV(J>>O*C0S|#RDce`(P9=D#0%F=ZuM4j8?ojpHTL()%&C{3UrADY$>VaU9!rOanCUo1{-& zf!cy*WZO$j{0z5$r5Oz{_7RSgdI~~EhNYsPK`5+$MQgUk{6!zM!my8g_dZ)%?y5mv zhbFE~s^)*dDF>m&5gABFzGP5IKYfmR8(FPe5aet*5D|Y3^&ZeDy;?{RB%J^8QgZ2f z1bP0_iu=JSsgdWy5y9C43zVI#1gV{}>`fjnt1P2;A;?wBvXCging{u8yEELG*%Y>W zO6nwPYd=2A)b+AvI8|11erNBOj~r>1=D_*>e4dZtgO<-lEY8UF@0YGlurlDN_XGj~ zrsMCy$Ksc^Bq+0a7w1r}{tMs8_`V{kC%2tWykvS8dN1aB?9r#)q$=^#4H@t0St=F1 z=K?Car1}QWQhQpf-kWSNV7;9Sua@mjhLbM6oMXCkH3{*^Pl_`+oKeqtoza_0i&vZ=N+fhWjd^!RH;NV$Iwh zOZIO*Wt!2ao70qO^Eo{Q$~4($CCydVur9kT&QM|Ll;U#D{;nAa4)Mp0v@aE2bL$qL zELy!6G{~Br&6P0RZKa4rn%dah8CKf$n5Vp$hl(URDNm5uL-p0NvN`OjsR5ZhKWdXP zgM}I_lmnP2Ik~M5X$Nz51P2BcFb;M2x@D>KaV{-L?4=Cnggz7TO#(a+$zyB}g#JeK z*z=xK;;;VAxh_VzFUZq^j69X)JFQyRzCR(GV^&1iU+4h&jn;u$pE>~2Z-6{Z6ZE(a*9?3fkpfiTkO3Hah=o#o+diJEYX zlYml1-j0bQiq7*AG%M7nXxT&v~v{;OTokv59yAT4O38zI9@DV5QiEhbcS@TFRDFF>`(m%Bnq4lo?ha3g2Kxmj`R&D|uP&Sd2#y#pBr6x#OrIRY&eqcxcDU8PTEVO2<3NrQ z!@T#0rka-9=d>a|0Bf9R;D8W>_wVI>tH5Ze($QU(FfY%9Jl~e+{6M>KQ z4FU!T&_^%32HOicj3Cv-&xg=_i#s>S9gZ}#EeuzJb;vxeXAUDYTTUty`z(~VyBVx~ zj4I!KZX|NeEsnXSC-v2It?c?Ku<-hZ9gI!u&L_t)VWHK4ukSU{^`ZINGQdk3RGn~w zjEbLcwM+!2Np!;6yIHKObxYXeezi~V_HU@?UpZXckN4!f9hFG0mI-5)odCvgCArrJ zt3K=SzC=!iJd3XVA?35>e!V!$we42PvP4I$XtBZzOcA3cA-)bv!AgLfOWKI_ag+yL z(%v7q<^mU-n&l72afzE+(Dx?z<xZB4tkI-F^+tr|U3bE@cyNOXbLnOF$3B%Y<0jnl&@_PaHK z`yHWR(v8#ZB5bDQ>run$$ipa|;uH5+aCjRdv|%%%Qm6j)W>X2RmEGj{=FDFAfJaI3 zP)8`GT)O&-?MJ-!VX;PYgFWC-e3mwu1oJxu(Vv&gU9(X*`;@Vm*5N8Q7_8_fzQUEP8QG>2-=0g)n^t6K+B zG8L<4);s4nO4zC61{e8PjI4n05Wg1NwfL{$K=M#WSsyndwxk5ekCQ&JvVRlC&+C3Y z5u@6v=Ngp&<83BKBPMo?mGm-C4m?dJkO-1^t92>K;*@c}<%m|1Mqqp4HuW8PH`o?I z`kW}=tEgH~uFAKXe@dq=7VmQ5c4rFVKFr>P@?X273n;00y*>Na_=v054g>G;y|oSo z-t6wB1%YVAWv8G!ADP2G=u~Y#z-)e&tnGOOQ@Q$I$UF}RH#(}%&99*ZVTNFrS?evd zsBi5>w%lubF{Qymp9m$>^-?9o^Cn;Nrr5*?Uhjdk6P$|Y|7eI4yFM@Hl^U`}CG)@i<#5p0H z5X7f?=7J6p;QJez_)P^gDVrbFkua*unMD}NuPlo`tXr1t#8?vV23cH1)78`DZeokt zod4v5dx~Ume(xleneJPqda-^3+*{m0p2bNc{s$2wxg*0ohTY#^e`bbKFDf^5Llb2O zn?k26zaLtr`&W|g{PVfIELl)KmPQ@$EQ0PD7C5Z`q2J8xGJ>|C0@gQt_Sg#!jA{kS zK%D46S)u+RqW)9k+x4c6iCT^vom49o_9`p(dDzzyB^h_TQag2OsSxG7^&^n6ek}j^jwJLrpHpJ?B{c(!Fo>Ych#(UCo zz7@5M&@XP!X?a+cDcTcfB<)&JB`BgJh-|}-4 zu3C}2JX0bgZ-dj7-ka97-!h1&z>Z8ICD7EO=Txa%&W&4q-_V)HV$Xv7{l{~8;XaFZ#@t+7MY87>;Vx?!Cg>i<4#WLOW%{Eus zCvon$P1xI`M{-j11x1pf0binqq3m!N6Zv6aL1}9N#w{d570-Uef?_861J*CU5r8Yq zlGwqJ8$s2H<3 zchartlp*XGv-TW&?f3p?(9|nF2T#c2c~^Xcn)h#$6@_LIp*>HNf5e>W@?z?S@JWO`ReXZnUA=sdVdB57?44PdA|u5e_tM+^bV+8Z zix8kE$J>98;%8R*rScvsuRbyx7m))uQ$Q3?YOp0*w=MPK8((9`f%}r(1-b@=63Y4W zjK3BgEl$@;jhHBZ7(KXO+itA!oCRf~snZ(fADB5b5{hKaXT6FlZCRnIF)ltj?=hHr z0h;)e9r8nlRGb**Zj^{y9M5~hU^iMPN*k5$K^&)(=1hD!xMPa zmHA`c&ZOginPOZ2)V-(YlA=cJ&$+pAYR|IL$?ghD)Z)Xw1q1S@F(L$c)H@ z>1p(OiOXdNed#zu!C?B`n_Y76qL;=zg#5Cf;3Zt?ugHk+ib-5&{IH<3F`m8ymC|b- zzpQB~wb2-2ajIq^GX+u4)9otUj}$sobG<1?vC#Lc*ZLy7#b#@h`;o+udq=&UM@_a$ zJT1-EAyb2vR>89fV$e|j4SxB>g3O(euesxv#=stfknGORCuv)u>^J9 z-EJ+dYEObUj<`j0_Romov*r@gJ)B#_{$Oh~ClPOo&LhbVchx5Dlr<8o@&J&l7 zH43H&`~0imk7C28)KOKsViOCq^b;MulvaR5MbjW@C2hF<9ClwW=ia*GRU1T53oJD) zivz;G{p`viQ+oJI38O{0*G0*Y;_N4j?X@k%+9hGDnz&IO5?!WM8kLu?mc_~Q7E@6} zk%3Vvs21=1E_##EA-{Tc<}^P42mnfOSjJko1XZ}Z#|U==pCOXX4^@wrPXLdeLl*Dq zb*2n_FMl?fDpbkHtvzLrLwL_6is`O9KU=O_mq7yg z>EcD}99=yEo)5_%O1P-DXwMNZt@llFXsQB?o$&!M_U1@?gP(hHz)4;=l)B8=A zi{g~$A!zG-MN`g8oY$kaaxMp5jL_TOzZW6&dI<0Qk&;SVnp-o+V17R5+(P#yV?&dA zG($L!M(wqUwTE*0ZkZX|2iQJ|*9T6xTAKkKoSptCWd!+<5plI4WkIgN=bh;pE|UH= zu3%oi!2a(aGi8`_M=Sw1bvezopeHNi^K|Kjxxw)6!rb5UK*c1LBBr_LxVYQbNLX>6 zNp5!Q^s4fB(Dv-nbN2ya?&+>T!H zc!FN*#aUd-)#yUwtGN`*1gYjR>~R+TDOWNPi~MZ@7W)lp=80<3m)|dKixNidm&WVs zEzF+H7Amw^Dc13;>$(~?{8$~LLOlJ1d!$0IG1z{F{o=LMo9@?}eTQwqYMJE&@m`o>%Qz&FY-0cRQ7Ehx6(4J#nl?td;-eIS(OR>k_5h}bNX~+Q@ zf!;HS&D-=+!H1$xoBY6lB{e*Y9w?+$W&aZbu4M@LJdT#EKJooqgWD&%Pe~?ghj;J_ zX@}6(QPe}79H{93;PC{x4`d~7TMSeu9y8!i+oq8x_40+6uCLiQ+S7#aJ|MyA8^5>x zN;Q}0{v}P+%IJH|_pOS57f`*(`SQT#z8mr{I)z7lf{j-Mik#L*XsrBwu}w&$nmpzJ zRi6&xchD?86~}o?tLg3E7jv$bwra~M=!auhn)$*ZKB4tScxY^+$I$(E;r2(^7mimg zPq1xqfGYFc%DWS4z!``v<$4`_HLXp7rn++15|tLKop<2DR2uZh8V_cl%!oCat`OIR z;`fuz&rvcEPBuDBHQ!h8OLGjiht|swyYzlNMKQ9e^usYGkn(2bB=m17i20;#5 zFM+0Wz9;QR|EfaYv9<$Em_J&v=3;6J;l_#(g%c-n9z8FK6RG6)S42bknodjV(S5I& zvj*Z3!Yd_JH|u|L$PnHvBkcbzdSM5MD2u*p^M3-P7D1|ifr!S# z{IEB;N18GlzZd?!@WZpIaI}ekxi5x}Csz}F6EOL!JS5IKwNasfIkaSdC;c+@A(y1) zI&i4NgG7nN!J4P#@A`dX>Bin1UCD=owd2>yg%12VuT%qbO7k`Nc(`Knr)F95?HP2< zPs!`7J!ys#Ck^u%7_S#K%b`Dz0^)_maU0Tl1G^^{RQ%(Sg?q+|HPx!Rg*obblASLP zCP#Ua5MCEUJ;79;9%q$z0OaTTVAMYVfdm@Bq{ml4C_e(7fxd2{5JkFK8YG(gKhd9m zrkk@@z9nXLwO}vocXN>Z6`R{pl_yiN?9vsELDrzXNJhFa;hlnSlZ2y?8EKd^?VQ((eo0G&DTp+)w6@)?VEugF+|z| z3xrOnZSbq+vw?a4S;lk!HjCw*h;(7Q+^ZhL5nfrt$0-&m86X;E5E!$4ATL{mvfBDe6@!kqDd+yfAHoeo1>!`%}`j}Tn2zR9G z7Kg>nMD}OC>Wh~I?F|N6ndn!f_rqz)P5wH`RflRptPYW)!} z?XsHgdB`&E5{ZAulmaSc&i4S|#{?|_r3^Kkmf+Vx9E|;IRFz6SEY#ahM}@$mMZ3^j z#Xv6>9X*dD!N>G{GErUf*ehMXw8p`F2^%}ra!{W8s;l0wewbWN%J+~7k9^Uk?a9K@ zx-F*+2jHGS;TidL(e-rnVY6h+2nuU;qj!bn+Qlb(aZkx?M?OoEam{xz-Xy6vGFyoO z8G5PxwXB4$QV8weMWv%j=dnq{)YN}koIoV)JrUPFvjxuiIqKy+Q{%#Dn2y6N6_tZ|+&`!K14%NZm@9!nUa1c&SOitZk%LI8H z>FvG-pL=Fi;DXTIR<)MF?HFrhdZQGGG2B<;$+!{J#=OY={TW8&P*nMl z6)Pu^gXdvS1x?4`o{2pj-dw*E5xN$%DPROAinx5IIi!~F(%LS;JM+5aHft*Vfu$Q8 zQC1iVEX5mp{5h<2=dSnks6-y5plWZYL`%pTN3qSXL-~wia^(${&9|W0e*r>y|Eg1G ztD`;+)<2!!FcPrDKtFfo#1C#YHljHh+UszfTCj0oXJ|X@-8Hy^-Q5p-YP6Z!ebel6 zX)1IK;BWwY-ob{GyFBj~T*dW=-A9Ihlp*a3;tk?;wcd)Io0AIGgDCd5^wDw@py~AOZ4k>87|IW>wF&_Zf{!WpA{(n zjZCDlVjs&<3g%eo;DZypFdv)C01J_rmKaM9?PElt^B%?)(8^59z{YL5HVIz!W& z{^;FjFV}+(ocy04Tt1@T^buT{bwDcwY3j27eqPZi3Cs-6M0{Pr@J9=LtTRw7k3(w`Yx5YzS!x9IweyP#M4KnW6Z#%q?Ej8}rA| zY?%yHFYK2q5nYiBzaEbt6-GO{#|J5PQigw%AMca;$ZTb}_>UgoM{>rtU7*;$R1bt^ z?;*6pk5$nw?7ca6BdG9tm7eNwp7bu=38Ebl*8A?I&GCacmV>mrpH3aW0^SFjW(8HA z)E-ok+KDG=!UcBfq|g6=n*Ax#(=x|h=RRMsCmpCk8*bZoH7Nz%qrjSeZ4tF!4h+0^ zzWx}1y)-G*ShS_8QLKi=i#VhdMZNYxDW0TSD*iCW#{XV@P4*f-X9=$|?P%?kNE>Mf z#shr>#wmDSyyEga9NEktB-&ikTq#&ljBc|AHWcgapLR4qc0iwiYLWL>&{^rb!%|lp zDkQ57C$U4pOlpVzo#BQl=ix?yqH~(WbXU6`*1n{xLPDxiT{tDvT)TWGX+XMe(7=XG zBi%vUfPQ$b?AI6zqosR_ephe#O7xkqu~fY zpWzgMlM$ez8<~XlU%lj(dH&gZ?m()y=~YQxx~vyc5cS<-+>bN~NjVjv18a znAD~oRG*${LUfz+)g<*0a0-gF?>wrMHm^6VbM;jSficuO3U^p4W=?;F^0!ka)Hp}Y z=nhKTbl>8eg2;FQZktc94yI0dNEF z)4vi6H4PdU&lg7Ga48c;Eh<^!ZMalP+lkfI)Tzg)M@p&Bv>tuLkK#;RrQVp*XCYfT z$X~Y!yT5WFnzjOX#BG**6X+cC(mI^(UwVJ~)R0+N$w9PaqXVt*sQg}wj>@=Wwru@8Nroj!@jPf%fzFZU9E{<=wNNJa$5G9tR%FKw$`ZUI_>5~y(~9m_HP7LC;_Ke z*6eO51)qtv`q#-zt1Pb#(LAj5gcTH@B(1M>rv`IPz_c)niC{B7|-}d7!JhKGeD=l8*&F%;6In`|j1SleVy=>CZ{b%cqy{Io9KYZ7&b5r8 zYu~jD*E}V&I)N%}jr}P8mS9@73D5N1XUZ;=`2=S~nwXm=}~+!TQlM zdOR$4spxrl3DtQG_gc{FDpJ{-6pf89!n`%w-&AB(Hf68;Tg4x$N7`nj0+8k9N>52_ zT<1<;zRwB!;PIsU;-y(JeaH2mfiVS66(F7>e(yMM2gE+{_VeyWhu6$`$kCh`=3gyV z>k5a-__|r$Zc8->?FKIOHc*_muPonsGb}eLly6hYh5xJJl@`jommhi(1X9dSn-1PJ zv5yR-m}7+T$F%{c#PPvfX(L{->qe(D4V#BgwTAle8m(|tGHI6OM66oDdFgCuUf*_T z+Dx=*8&lHdXE@B^y!nmYl$5B%9mv`5YpmRFWB4I@zxo!O)BM9$aOamSHi2IN3YDr4gYdkw;)jOd zl!Zgg+ENA(Z2Qp<>JN#)D7;MZ17PAjh$DAcA4hm8oIhZokaD`Ft?u)o9P)wmhKsQ!FwLEKwb8xNh;I z$%oM!TcOps#C_7$Zn86VEHOaV_!3d zcaI44W@3SvkKQF3}Daw+&943H3I2E&xxjWz{1YE zoAwz)CnOqeeI|nzdUS1&=gC#*I?kDAuv*&WB#Br@LI#a@hreu57wkIGx$P~qmH-{K zhVI1hY|hT$eA7s+q4x}W(qU0$PZmAAm{ECiX;LkbpYN|OFIwITyXI673BM4TM#E>b zpU1S5!l7v*b<4z>DktV7cH)@CHnn*6)rKh$Vq#)v6HoOA#-NYe#HEX;1<)B!vHx}* zyHNwD@8vK}6ddfv1W&`8e=s{Z$+uS}paIhn<9(!GKB%u%>}KP`*{nWb%;6t~ixWW0 zP@o!o=>{=INP)Ety97^6!*B(R<%Q}OT8Hg6jp~b=na$THIA0xtGd@!BV%svqDWJ`l zGJpyXm5gig3zgzrzTS8D;;zCzY!>(8JKfCPs~7^8e_zU_WAp_Gq2(u}bA`*FSx+lh zT+MR4agKxXV?KUc6EAJtqU6W8|8EWY+sD1d#E;P_oieWcq@uuiB8U6$HoAc0SvE>i z#~rY6(O^C9Kj}eZ!d!t8X8w^cl`Q%LKt=0??eBFmSE}6Ms$Z6J18UkeDXNjkm-NuD%cn3m@W?;(Wot4k zHa~SRzEH4jHize;*G*&Rq_TbEpR>f@x2M5P1@sQZGF&F@+d zTsJcxayFIV|J5oPsGS|shkoaxObWlF3Jp?@B|@mnu7;Ptb3O z_By^hKoj`Y*LF3t`MHu)#!F2RA%opRHbv5zCw+GsfMcIeg9QPeK-x$ih?l0o|2ds` zk6rJ@ce|s9Vers3p&!?zq{cM_Hes9w*`jT@2S2l(FuISDU>87Fm6548yj4$X%~NLl z!wU5^{bO}~#^!4`w3+P^y=6~*GOlBV&vOAe@dBL^$UPOT8Qqq5x#(_?+5dG?s4o8G zDa51d+vF^RD+dtnvAcnP7B3KdGe#C{9KAJWkOro=zb0xd3ZV@P>-@2ZNE77b7ZWu9 zPU5A6Dn#it zv+nvl9N)uO3-xOlIFb0@S@Grj6xC7wy65yL+;P7xF;>v6BW$0q+2ug)!X4oZnGDzI z^|L#SVfXN83IXMsXlP2P6Ep~1WQVZVz;}$X*;DdMAMNI#b(+pqD>N@sp`h}E5qfb4R zQ?J@SHNmOT++8E?D72sSi+B!?!7;b}L7AMWt>o4m>i-<|LBAZB?--o|CMDLn(wVf* zu2<}1+CmwCGU3k=luwVd59oyd&h|5Jwu(j$i}zJ{&=e!E{@?}j%GTeN_k}&{lBo8WF^A(gY05NGk`;6(6uB0&?O62A6_VU4I169KdmCiuyvg*` zUAdjZX#o9`qjN9=5p6BxJY+UsMwRahjdZp+A4D@SGuBkeOHGB1-}=5>KRT=tUD=Mc}fP$v#-s;!Srk=%7j(L&IE+pOsU*OZ@Yb)fG}>LwnG^ z5gl)b8yrs%!yUU?C$s0elE9u8Z*jn%cXRK7JiHrjPRjl%cs9Q*CzX;Sc$wif?A&rQ zbkp=9W78N(Sk;_*iB0b?D$9I>{_sk-tXdVH0u}knV>fzr>C;<$$Zzq{Ly}v8^T5;o z_)!Jib=~|ux$2gztLbX-!+$Avj+tn15o&@hS^_Y~qy#kq)*u}yZzTO|)6ND}5oRn; zElPOjlcgE(2R|(Y z-+*L(wQWz33CI3wUH29l6)AiEqts+&D9VPFzEG94vSI_>eLK?qR$d$1c0G`ElN9SV znE(rPX$les7Rh0O4PSwjK6ovMX+YdR@gBK-Y&IQVqccUy&?`>QF~OZl_?T2=vlB*0 zob5frnN#WhxZW!miiqlT&A8?`-ck;g03FQjhSkHS)s3hYVY-zGz$kyDjI3bi{u&9| zC}3`fT(NBuW)*m4f7+>^nn{v%{y4DHU}&hH$^;3uejBYmjW}&5&neBA7~7V?3V%*IkCSu-;8im6LG_TKYF3!I*E5afUx7}|c89H( z!*@zUYq%kCc;FgNkYQ+SBXz!PsR_dhDq{`p3d_%%;2I;jDY{na*-}>&JYKXfGXkcp ziyfH5S0DW{VdpZdwz4a#thtN2zsag~2?c-h_UDr4T9gR5xqJeQy_`du2N+xXKV!q+ zBi}t5`wf7RmLn4bjnm!|wX!a|ctx1%?V{pVK%mn+#<>q}f592`i{!`!aH)8lIqqo<%;2^oF)_cX87O-vXB zR=Wct6XXM$jvwk=Rk0DolKqObxsoX|h{{)e8lDQfZDe?o{Pgbe1S|D?#e*_GgJXph zUby%N+qd!*flc6;fPq6r2s6La|ZcHD9 z12rct790B~KCOuf(Uj1fCkXWwz8|X_E6R@I^q;;#1$e?VZJ3ufWqtB8V#CqF(b+_n zUT7?5*I1o$73U$RA@6PoWw1h(=vY;RU6`=u!;9+phD4TTUlV{2W{qDSKEnco)WnRo zZ7iY1?g#h8)|qP$*X;4B>?6fWoJVdT#=z&IGs2-)5bgH2j#)ZngT>Nf??;+`fEe)` z7DG#kSsefMv&VN_42~dSr_0QuM8Vi#5S$8RMz5?j(M-LSCra?YwE$-7fyBRQEg6;7 zm$G?ApV`#E$Qx8(b!;LQVPZ~N8MFuIEy*D4aGL8OLOli0Y1WXsn04u?KVLKXJZ(IF zcdg(7Hzs<7G|eNVHwgI3zbyaJH(=ND7r^zvh@|)~agf%BsKjM@+7$C~ikxiKE><*e zul|WlV)B`Ue0bB_m@&@5mVSN8TG<^o%1&&fak*2d#vDSx^QOhi0`Hb@S;Xig0iTQ} zNaMWBqiMTnudQ0QFd4g3p)PSFPE>x@x}@p!-b54aiSN1j?o)(t(TlhfwMmw8S)upx zc5z$}7+!=Vf?{*k!+p6N-q*u($or#k5vn|Lz{FEnz=Ka=ZF!^t9GFZ6k{c;$X|*5Q z#5flr*)ZxXth87BLLHX$YcnpCbn7aaiT-x!1lCRxDPHu}0!d>8l5v2=Mnj?nQoQ|{ zP(uvl7?1|nS&h)lhqg22P+D{l+!x@GtM)97bgIGz0Sz<~E|p4q`yc8*hzR-nPob)T zab}SOA9CF`h_RRBY#$gBya^!pp&{DzbP?_t2jA33HS?wDLMh7ma$1N;X;llzN_$zn zFOJxu4_9@SkGzfL0rqR_@&sN5o+7@q&0UD^rs3H{<=Yn88ux6OZs{b&rP6Dxp7hCZ z!#sHcTGha7I18mNqur>aE*(9FS{z)Hu7lZ^ILk1_%D5b)ja9V}=e}5e)HVoz#Yl-Y zhy~g}m%4%1=!$oC)*8sI8(!j_fAO!SQ-h=@tS8!jcw<8tPt5(-OzD0lj(@8(k)L1Y z%n0gW=peiHf>g*_=~au}p`a!B1i&^mLET3zFud`jNY5Pbv~6bueAOo_SsD|<-ThAI zBI>K-MRV$F1h(~wvf)J{p`$Zir+uPh-~AdX_YeOs6KWiu=^t?YUWRJ*+^~_+^k@MMS?vcZYRZO7}Sxngd0t1L?Acm5TAt-)W?<|?{mq5&{S8x!d9>hXC8 zUpt)CS4T}LTytV4|9Oglx{3{CV{S+SO{VF`{Q^Fd{q&Q2L|;eYLnQnz#b+N0Se2%M)F+yFxF0Y{bCBj zH;%tkxF8=68St&DBl;);uvv;*LKlh6Cn1w*QV0A^4{>UKba=!7xZZzq3JO^l6s|v1A)~}Sw_Z0(-B4-!?T5Qfx5?W@oqNL z(FBeI*40g)!0@nym%#040U(4)5&~D;!EIxJC+Ql`xiK2nW9i}NMrM>lEc?yFB^xsJ zIT=z;^;5)AhdZ&y1CmU+>D^SF9cNrYD)DE-u3rhFT3_(bIJR15Y znO?S{jj!Ww0Xvtfj^Yy;K1Q$Vc!7fkCwQ9@Lr(^9g+BMAiMfBRMm(BW7mF>u`Djm{ zM;oz)YB}RvrBWb}Gu(mwRgD2tESLpBKQ1S3Xj8Bkmf}Go3qeaNgbIv+{(|ToC@2;h z7hOFTN2`EePy%2j66&kIP} zJLe>q9-^5tE)m1vQ}IVdCr3*$uag}o)nO$VTb~5XLFxv;Kb#tf;z%VQqc}>CQl>$3 zvTAc0h%3YLZ#X}TBkyJ|2psqWqQ0)~?`z7V27zbBX^z<9De9#I0fw+53!f3UJ?F)6 zx01S}KNH++I^VlO&W>AtqA=;=rJ&ml&j0K9zFei8x*z=7<>sOll&<*nODelsKCz&B zWiCCl$AtbUZ0(zmreG{x^gpSeaTT_iXABN2SHJ{bK!H5YMh}T6d1`{UUwG5pPNh^9 z2tv!sp~y{8=k`brZrVM90Bg2ABhbE{ozcS-bbpgqfRyBBcco#4XP}nW68m~zVtu(fyAs@V)3B^N_*e;*pXD<4&q4XJ-~m;}2UKCQ>HB0Uy?;%0b5<23 zV}-@$$4?dR7MF0OqB?k~DZDHzg03JiJUfcmy=Bt=T<@LUmD@W<|Np}1qeoz$0}&F4 zJFqQu9VZyW-#UeRM`-G2cDVnWx4Vg@0-KFv?#|WaR4pygzy|ot;J8Z+s@Cz3E^3`|9sVUW68;s7{9e|ZOX5m45s}P zzN%qDP(8&s*}fPAhgappY6*F)vP>L7BsAYmlYb((Pb{E$5eI_??i`dEG;EH)0LI^X zEy4@Z(D0VonETwS{DCj?Y+Ga3N@@9Pa*Y2UI&jQ)ov^L^Uv2Pl8S5T(hJ>nW<-7o_ z*cxrQLRaLQx`_&f{O#27;##Gb^|UMw<#m9Gze`YK=@*4OdTVBIhH&Mzkyc(0s}?+K zPvEZ78i8T_lao={@tLv;fmVT%SULD3NRenhqWKCT@QjHNk#bcsP(nL4Y^X?-5}FrR zt<0Mj$#KwVnd=)BhYPlNipt>NdQCL7uF)2tOBYtqthxGEHv*>1k_{V?etV#(zcAI{ z{jozzRTnO9o{<^QjLJ(Zu|_vVOBZ#4$$dTP?I)w3HcRcmU9+>|f(Ezo2f|Mqf9EE- zM-yYi)mYyM>uT(qQhrv^dp7d>JOGOtZ5Wj-o{0x#cc|^hb4D7l>=Hr1Yw|-oG*1n_ zPk^!q5kknPLadGTS#P{-JEQ3)G7vKtEJMivAgr6(VP$^j2E*=Jh>+tVe4HGj`XgSp z`C;UyW%;;*gdzZsD*>?xd}W4Ad$WaMTTTr#z$y zM>VwXn{YE;j&|DmPOYt{4+F#Sb49lch!_ zw;ZodP!-DPWJD=&B6#&2ySoV=K}JLUh7nO$*igQL@NAG7PYA^3958WOMv_IE|CUUq zcHKWV#f08(y>kpT1xQFF6omy4|44NyTt3Bmi4BY6=TA-7V5XyWopi&+L{-3g8?#zF zNT*l}UU-g3%6=06@4Yw{Wqh<52Hr7?BKJ4wDge#a?Q z!;;?tD?R!J{oQ5BSexc#&#Fjq8Z6ejfoK5!GX|D=pWc}hBSubidXmWsg_{D$v1+*WO@3Wz7lUCHt& zu=H^rogGg6>ib9QS_9UtyiRB+L9$mYsT!}6^R0Zczfic%n4i}xjUZx_7@>_t*Mr9p z^QeI6p$sC?H>~wu6*NH%PAjpJQxD%o^6wP^{~R$s|8->LJ}(zTmXhf|o1nm1Ssa>o z(yC<}cx4%EJ{P-~l@N%$m~&27LX~-mrS!tMk}kSRb`}s=);S#-bbwG8Wuud=e^d{glLA<-x<;v?4_g9v94p{$;jhci z24{nJM6aLKN;L%Fhu76F<>t=A9)9s-(~?{lnS@z4C+?enim_a$lD<*2m9(wFy`Y)? zpj@3tB+POx#8Su}KdU>#YiC{fNDF)a(SqM2Er6VxWFBb&2d-xM>B|qHrIW|NRE%_9Fy+Ajp84j8p(grT439D zLUovi#(u7EI2yCGpMU2zqMsU<&S3}LGF2dHubxF?!?vMW5?16TNPY`WOq`-B-i>6J^1v7#8Q{Xs8f_kK zKT*1_RLcm!4c#Ma$lPM^n@y8RZVLnlC|o`{4p%=yc%uyUjxtEJ=Ix}xI?DH@2W}({ zw0iItoYb(WhNfr#b8{4rZZ5)s@&kaF+@QA6sbQqRbp1_=1UOQU>68-j{K)zyu157I z?*F3eEyJR0yS8B&kdzh>LApbb?(UQr8l-zj=^Oz8l@5U+M9CqfJBCs~I;Dpekdl&; z?;Nk|zMt=TxA*-w=bzcmS#um~?Q7rnbsTT3Su2}7?-eg=Jrt3xLd<`tIfl7IfhKzG z5I7U>*?QlFS%J&udkdQEUGLMdIJ@r)>dJ&ehnbJrJU;;C=+Rplpm;n!a(H2HXEnop z9rY7GO0435)=c43yL{P|JyP4`= z%>mHx0lG_-Bq3bfjS;uNCOe}>4|;TFPft2aq6p9czMJ2loJ8AWo{EeEy)^MXC_kZy z^QXw<0{&wmkTR3Du_-Y3W(M)aW4oVVOETh;^?ezcA}J>RO?&1|+djjHTV#dG?+b`? zOZtc~z*PYEWA4jX@&hl~nEB&NHHy=M1DFbh38|+X`VTct*!o&aGpwu>)kx@(`D96$ zhYsVK;~3K-j>MKkm31UPI0uf=#&H#QQy!jrE~M0{Rg)CHNgvZQew^KJs-Ahabvhm) z-02NR^md^V5C%|;%zqmRmP>V?xX(zjGmYrG)bk}=8tHE<&6hnxcYw^w&0Wb(#rPGZ z{~TA!9LO}1tFlB5swvOz>A+jYYrl*Y5dbzBa%IbZF z&+h?I3w!w!u}nDh;D_f&AZIY#1F>F5jeJuhWKI!b@X_e5a~@p?*Q==~{|QgI6cOgf z8)rQH!;&TfuAa`yCKfiV=aEECDU(>MY|xj!Nv(@^eYwx*M{9&V+D~a7;W-aQ*aNhX zTWw<8IwpXPr-=QphIS($IW)!a$HYwni85R%!b3GGbSz7{kNur6CEvamIk%4zruW#q zfhF?Rsa`&4dAP&;kbUiFqf=56~y$@nF ze0md_29K_YO18HLE*l~Tbx*vcrL3nJc$4z@>40x{y>Ol8)n{LjL4Y^+%$0iCRGBl5 zzH7S|w;v>GRt$jT+D7k zGv*#2a*K*?c65>ZZH9;7Q)L^zW1tHPeYE1jX=hr06NuaP>)l&i5)V9PoXjfP#p3uU z8Fz)5Xp&k2L>W35S{3D?EQO~;T*}Dnt+Mmvjig;_){r*M@cH{P)Umm&;NYyZZ~UIt z@@o!uipC_@k**ZULjyt4zdJmwV_K^UhaaERS2UOjpM631TWYx*plrVn#9fB2N)-h& zm@L<;P*o-bLo3HLNT7bnhHvsCZmQNhnYOk~PlA$?VK0SLnKEzQUkxG}I60J^PU?09 zeM}D~ebu~4iRMI(UwQAQo|39Z^i0Nf2%WZV<g5_F|G9?zP*rpVJWZdTx;CMC_{%T1HA8O;ZD;=|5F=0q3b$yldMu z79o08)oLBDXv%syml5@ex@Dv#!wAi8rZpXcF)z?|SJ?+p`~OKR9$uH-&G1S>HN3*_ zaYq;5vGm&%UdH=Bs?2!br$LQJuln>W*$SPDz6p+hmaWq_Bs_aUX$utLwvNCXfCEy+UY)dG->c1Eh2DNM$?V zWqzJwQZe%7msxo%4Nm4KZfKcjn{)|pGD!oMD+6JFuGO8pErHf~yl#0fKx-^8@r%zX z@s-M-X->IP&GWqOsoQ(KyYeDC@6LB|5lG{xeFJcFl7G25x~jUG^Pgs5Zm-r9`zb4W z1X*)#;k{_%d4f$zn()wgASk+pYM#ma zx}HNVJu~lBNx<5dr%WdGjf2^5G76^515YX?@lHOJ{Dl|Oi;df`G@eQL^3nVJ`X4s;+x@HEXlr*qjv zS$^Y#AwKA*UD!TZ+5!HJxYO5>EanLzCvbBv1$AfZNSACOxioA)2E1&N`57GH&J>_9 z)v)fn_tfWo{9=Qj_Tuc{NME54px|Ew81WwjxRuU!5Ja*fOw6gX?sm8t$pL$hXXwtF z@dB3ploNosN)241hRM0>?6Ce)}y&XH>F{JQ5#V@!{Lc4HimsnqZ4!@u>oDSZrPZrbvp;?{I%PXknR9~l0SX(baiq%T2 z{X+(MLu0j{!VSNjSIXq{aEW$bXbr<$P0&LL5}HbM*o!Ra)X{{%!w#LtpPR5TBhSJld(#N6?;9=kAft+GxBWl^>*}^-HE#;T-FVw$ZfM zpkvn}iPLL}gT3N?xjv_4YH1s}tA?*nc54a`Xq#K2#@kzl*=jEUzcJ@$9z`C0zD9NFK(ZiKeH9_#y z5$Gc4PywewsaSj{#K}S=;$y$Rtvh}D47_3lCMdu+0NsiLDC<;z>&ilFMs9#@Oak^D z-%-QPTu1T#$b2rH8v|G!M21NkH9B$BgzMd=lv10~{^GL_AVJpPp+DYHu0%MAd=YEWc~m;m|plvt#_?W(I% zOWX2%I9V$D_qe278e2dZ@_d&|G!rMML??@cxrJ?2eQi0z#TBT*z8-w6u-oNC$~6v{ zeXQ#r{DHi5dt}xW*^O50;k-v3VBEBdKiDEC_ZzuLGf^L9F)#gXGO%#rsO`pws);_p z-au&3{ne`sH7~4)M95j_0z_e+q@^CXW0;GarN-XOZbV6XK^C=8d7&qe6w$b+3ycL= z0` z%EiUo&^`-&wt&Wg8Ai!qUQuytY3t=AxS2YWrV-U0shwJ##iRr`bFc~g>WTEr1a-~MmIYn;}11PYHUq+aMjW*n+y2td8tv0{Wzsqh@HMTYQer1ZQ zc-gnog6uJwb&u|`U*{Q{h{6GqH71RfZ2wqdk&~Ab5)zkU^$_^{*6*YUVPzSi=`><2 zJPajbk;}#TuW+jiV&~?qTRFveKIr6|_SCI_gd^_ngVT{nQE{|+VcW*=rI?ZN7H)a_ zRe|vc8rK(HhwQpp`NERRYH~3qY z_O!D|b8qP=DTv_UZsUJaMsDj-byw9NZ06uAwN$ct8Lv&v&A28@9x_p_gCC;7 zY#*hx@r*$&`&zfM%2GLIJ#qH0c7mct7tSn8^Q^!MFC23P4%U7PsBj#-o>jnhe`DS$+feNZR+-UrXaDw zpvN~dMUlf=4kO+kITL~C8$?w{925>I{EI`Nhynhx7o~fXPV}> zT@`3mzGKsQwc#nS75D+*h<@!Vnx+;_MGq%_ zkpUUY*Tf<|zWaEkd&{P?5dw4!LLU6?HrUkr%zSrQeHuT0WiCQ1GItB=OnY)7hg+uQ zlN&KgW_Pz_gV0QP`m7a_rBB;D$wBtwx{VjK%|7%bQv7WM>p(pmmIIK8Jw4S|eBcKF z#`k}LDv4ED8FZ-5!~O}4`!C6@wdar?!1ZTVlb3Q5p3+gG!|49_eZ+k;?OzKfpY#Fd z-u&gCI7M86Ps?8F`YAKB3v?cO=43#GEhPYW4RnvY6G2XSkH$iuA-KwMGk}ae#hOD$ z5}Cxs-mCxg?R&>=EVWeo9ei~6+hDeF7N-f7DKQ*k(wHZueoPD4Q&fbDK6`&y z*J=K00b|N2p(Pgh2QzRmv?|*Gvyab-W9*=sR{;4)ql!}#3z=A<6_M~N-i!hJrId7Z z*a6J{6B#aA78p6k#hfNYoX)tZI$c?3F!&T7W(Bu!x_Bbqa2NI8Os&QJ;ceZaQ7BW84r0nAjE_by?NiineBvPl> zMfs81-iMOW7daWL3q-)W#sI-00bW%TBt$?3JWMJgPX~AV^ueu)I+fXBRIE5|xM>+S zp0(VIzibnzA~?ZpY5l4V5^o7JGGbq5H!vUMme+kO}AJi~>nq5|Q zMYm68ExPs-z3FNzcm?orNG5SvgU(bdz6?Co2~;{qFUcNJEnT~%drN0msJd*_D_ygP zLz5q<%{|*AR45zr^9MvYMDhT&`B2Fp@NQ%QAE4X`|1y)+LCx@8bAc2-WNOQsv??;0 zIVqf=d%1y0BW&Xt5uie^1}^LaIu8bB>M_{@jINBbZhE!|Lh3E!=dtPqDy48Q^I3BV zFUv!GQ<|S5T{4zbbX70y_oG_0@C5FZ3_yz(l3UVsmNru9VFsKexpqBw*F9aU`^XcvNOheaxj5_Ld*#Wnp+hF*Y zRaE}F0uWy4!Ptl8=65m==3Wv%>sqAx)>8^96mJJ2N&2m%JSY^J6LMf?Ro?0g$U=pInDj)4w^gahcH zp0BuZw2|_*|8dbiw*1Ghz$GSs@Xu z*$1RQ?|)rm*)J46oUi4TzMFA(k60jnk6I#ns6HkYEv^Tpik}i21^S-d`lLv)f>!VXTyc=Tb-n1tZ^BYD7H6uxb|-8L9F{-p@Ruj){FBa+5`rS3OmL z;W{O%+Ux~CO`=1)V<;Q6VyWD5q+z)oPeKopuG;L1Cw+inPmRXxG5U5oW~9>-uaG6| zdDpg(OMzEStT0|S+rUXhiptqu6I!LxgF)U$Zj{axaxlk=$&WRc|sWPUd=J35$Xz zgM`U51C>j|5%2Rv!?xp_uO5WV0BTC;s)MZ)?K5aH-$2Bmlme?}^^6el_8NqR*>3IY zl(XU+T?KUxddNqq(%$&cVL29S#cpzt0RMt7=U4Iznl~_NRJai$s6^6&`UoTvU==Fs z?b68OZTc&UvOe#g^DdUyDaY_)EsV*FnJ_z~jnwQ-czS=h>(E zN`UW#h4C;|%I7CSv$O6$afYURTk+Qh6Lv=8QWNw2r2NR2Sq8C|WuSWf1EvCw_ail| zDBeD{uu8jnkbIb%O71%M%yJQuF!#Av>E1Oi$JvCU>PFn3GQ)W84oN^e_}nLQD`Q!U zY7ve5zj&gyC7>?`yX~(7%bJT!M1N&Wj=hT#%Tnr5#8J4E7Hf(rSH1?4Z^yz|Yk`HE zyjIPW#hZ8Use-1=cP@X@Y0<%|;s(*s4dgIw&VQvCM67q&Ar;^(Hw&P`mIYMIZsn?n zp4YE$0_kv5j>2Iw$a22zDVEH4<7TkjBxe72-*AF#=17==WY(TTKiLxQ)8h*p{nOQY zz6D+pfHBc1t&sxwShYzk@-N=wvNu8A+AnJ{5FVJakTd}5NE(G z882Qw%{IZ|9egRu&J;@mJ!uaWP_Hku5+c4Z9Lz3jO@G+Dfx zO2-n{;w8%P{6}8IS^{qI)<;CbJ=(DR?^HC;v7J8M)#TY~o!WAumCXkQPw9U6Y`__k z43{%z@^|fFCzY09eVaKaBuKRcTo43>9j84irp0!pK_O_u1raY4g2sUsrs0hezypcN zn&hH%ub7m%@0UPo;F%r)WNQ7d7PhtpyR4`Xm7v7ykuR;8C9-po^Z86aK8ES~$X_$H z$4_tQPBu7&vRQE|FtYqv>^DfNE`&7M-rLh4 zO1`gxq)!#nXt4Dq!87_SBh0ad{H==e4~;qn#~0&X+=DDiKaJ`e@=EW=0$~Aow4e)zP51&aIhJc&i8Tam<2F` zlp#9JA<3EnmwwG8?<4q1zmV;xB&N#WCy;$q-bQcxan2hPN0#!wtr%Xkt5_sXOdU?N zH$(^G_dj@)8{aqEjIIhFFwfRpWv0TTV-WaFAmJjD!(_>F1@`u&^o`YhH0~4@={db} z?s+y=Qjzai2&xHKuy>!P>E{5C4<{#GYiQC|;wg@lH#z;^(m``=mPHL&)cwBGe{ z4${-vn7pQZ-$4ge$xu1k+A?m7PVo?on=mp0MCc*JCW)ClfmR=;#zJrGLz$3dK=$p0 zU4ME?gQ6Qtp(I$iz+V@OZ3{B2b}txe8#g>BWjA3B;bh+S&#u3Rog-1Xs!J@`jGGPD z3S?HR965W?nzSe@7egxbyavoSTc`QBVTsWX3;Gs}!uO;o-Bz6uSQ-riAl7sq>chu(JVH(Vf zBvs&KRR`h}Awh_k_w3qokLlwdBF!?EFuH$qt=V?JaLOjnlbX;KOM7MR)a29ZH`MNr zR3Exk8?q^7Bk4IZT1#?{l6>{O)(es)>dak!eKkC({hg%09)ke;_}wL$QpnZ&!paAl z-pN?b1IPj<^wF~oRsA{sHJDFq$28?fP3W`LgM<_7S{QxmF>TdOudG=DU-SMLX8k$E zEEzGW(SiZtdd8aa6#24To{mh|o%NpHa*?XTK?_hv^(mC7xlnMTbQAA|R>bbItRNeS z)C4;_ndlr(2{YAF%2m76frHKEWoqiUsL5SJ6=9-m)AAzMPoDg0W)ks% zkK$(}G!6s6J|v5e!fDZ0^&`DQx3c+Dm$ycl%8p{H65e?3t)o?y; z4YxI;QR$Fy_`t=Cv9;l#!u=04$zH8K6^89BA3U zYq{9KB3J-CY{Ou^)}GxKAUvOEt1e%(1QNvWwSCt|ED~xKrLGaB8>ML`o|?pOAILY` z&8>&s_Hst?RTcF+RXk=q5&*qUlyPafiPQ7SAuX9@x|N8Yji0+z)@1TzU-iV*KRL!t z<-0Qg=;IobObXfg>iwA;5%5+ZhL*kkLaHyp#ghfv2F3*^^Dp&4?+kb>7X`-O*`R*$ z)Ia1|S<&^85vZ7-JL(w^9tonv5Q6z-2vN!cl`u4AVV<9OL;aRen9^zAc07sGVy&$g`V|B_)9aaoRGF?ux1p13m z7s1^wXw4Uavx8AQ;{WPC9{+1&G@xaXx4^JvuufJ~w;fT8HZ0M5W9~N~_hEalfJ}J0 z=;gGqMoZkYU%s!~Zq=yoLx^~iewWV@+^2#zhy&O%IOCVwP8vCD;}fFagNBA~nG4Mh zK%c(ky0&j`ADb~CM1SILP-<9jVo>2Dl{_Igmx+(#s?2q1lcg+q{3+M3VCLtvF5Mw< z@(nSm`?C1=DcIc#(CjU@|I_S62a(L8-h2|^TozBC#WA969uNP4ndXlr*j~3WsL5Ef zBtIK{#Z2eHdy-B!JcnJynvLQ9xI4}%4+C(P-s3?(*az{RSX27YyW0bUN5(BIU`P;3 zw~s(*dYbps7$2|8^a2W{^Kb`BEDFy=L3j0Vphw6w3yCP$6PsC@`Q% zap7aj>xgIMOpgd?o3}@9^A;y$z7E_6E!>0hNPGVoc@oh@Sy^?Qo4=eSc7o}n>VwIf z;=VxYN<&bQt`AK~SJSB&4#<08=$5ZwTHuNo(*{u!dxE%pVtP z1bt8`vZ*Y5UXV)JSguy;wMv~5`%ol?3d==dxveqfzAePLb@diVqJ(7P$GntC9B2!aw~T6RN)hDhbfv#UUmJqa3in?HOcjcJcSggj^Cn22f}w zz`{ryjkn0zh(yYUJR{TZ;}{_@LNy(|2jLhRTTPm3L4`wg3*W+FbZG3)C&D0sKK~-l z`Ts_n)WKjyxMX6xHawQegI9R3LUBwh)0u>e@_D9(2}^BjBlx)5fzHv(RM9OHBkJT& zBHKWj5l*TLj&p99_x1fo?V2XlpsOS3rJvh>*o*&7$)VCd9?uL|m{6NF*JYI>n@vOQ zz7|Np&3ocpwa9K4{j0;rH4LKk$!H_Vkym`oFRknFl0?8+-jv?93yRsgx&1|LC4)N; zs7s-Z!@NE|A^+GNv66srqn6}<9I##R`iP$t12}oPzll@CmZ&ub3;dVxc}qd8B`nU**|0B1)AvFYe`7dy91MiXNG3poCFk~TEpDT2@M^Y11D zQ^G2BvVe)0(OKh1$s5dSQlTy1bI>Du9V#^Z&rCzQq8@vpAMa_r^-dP_D_V;AMrZaB zlDdXATjZ;9;x*i1(->VmnQr0e>9qg?eD^a_`h+doNl4<+L6RhN_DOOV{e9+3M%Zg2 z5vROf3GPE4v5TS?4;hzS#;hw60*O;8h^mD}z$l2Do@HDFDwhcSGfuIW)B3(lf8QEZT_;!6L_ zwwX(^d{j>UvAPk@=-F{A2J>GR&0&su1BdAqOz9Y_KH3R|YN>`|Yg9V0T5{BvZ0T*r zT|BHnjL%kT4u3f+Z9Vu-0Zgp~qP`L3?&pd}rInh0bz_xpU_ljY#&BbDW)Bk|&R}HQ z9gNjG*>N^gr15O-LAH|3b2MRg4`z2d-+6|fvdOFB&vMA@SYZg4LFQ<| z$Y`slVmzt%ckP#>AC#xiwSZi>n|1J4CTz<&P&fN)?xz57|70KkUrA3-0XdZ^ecKFw z{HNM(JPpBorN+#&Xfb!m;m!GG?)>>lZ?*ldik>kav1pL?2%DaIG)cM+NFAx;Erp%nV@4*aMg(i)D zmb^3iuA<|g6yg`kb8^DdS88sll3LrO`#b2;L~&b?clMD4{I&DG=6=)1@^6Ks+-M?7huRqK$a%4EGWm}8R&hKMla^m>rS2Us1L)hp3NWAX<71n z+oi;Cp9_L1k(X5fmL+l&Y=rqG<+9h<9&Gn)(cD7 zO(;im#$$lzD8jV+Yt}D{`wy>ZBMaiOoN$k=p(J;LrNUuDjbqY8qB=qD5?T|yJG4z#;J=`o9{=$?rYg9F*mBns>ZXM2MqrnuR|2Je6f0z ziZfIo&N-0zp7b_;fvfNrCZ95z3Dp}fQ{RxjSco(L`T@USWm%uB;PYvdCC;V=6O+p7 zFoZnGHP&6OFIFAcT8rGdA@k!V7g56Kpd0;CQs&rk{0EG<7l__UaJ>nc=y%|R4J0lUzNp7JYdLc5gFDjLK)Lu|@{2)#Nc zuuz@irl<%(w^>>0bD=sVSy?UHjW#a-^mHmn6d!Z5T9n$D)ZF0ElK@ejA6qzP0HZX9 z@;tw$>zblKxxyYrAWCapcnVUBgt9ZM#CN;Q179fngoD#S^~A0QRhV%DF3^dbK8&l#HKHF zI3M<^TW&!x+l2Pgw@pPRKH7?NYHcCjzN&RyTWWRn-kx?9tCw}w-(JWM=6#*6TBjKM zF`Gyt6Y4TiwNKN0ZHZ0dI;RMv>IzhQaQ=y-P*UaUs0|PZ18eMKY2n{weI_zP7;!LW zSbXjz7|JR^fMb>|b801!JGCavRu^kU#i_l>HmOdx0ip(soJZl0s)2yJ_8j!wy@|%|mH!Br zqkC<@Hq_~uYM=S?w@9XRwh69)`TP%H)XUU23Roe+C=ZUpaFY?_47mu9(h&lvai_9n1Bn;M{DfXq+WvtwwP zR@e5yjzxcxe#f&F_e^UvIH&fcvXU1elT5~?ZnRKW-z*gVxl2yIz1{hwQ3Mr#D9TR# zw*Id$L=H{)>w%n*h-*{ziR19hA~R%G%Qd!|brU94Hte-#wSe+Pzp&m(jo>Tkv7-yD zcuvGSj)((2ty9QMjD;H{d*D2QndAe9V1%^C1*CJgb_1D^6!ao=>n2AWGlIWdW&o1% zoku^(pzPeSOlXyH_BEtpPUt8d#wNR_MqFTVe`F5(!O zUAPuslgyI*pB-5$kw|+@pia#W2aem9C0%QqS~o^#IGu7N0dA_zd_HiJL0$?6%owxj zo#+d>&rvo04M*L$I{?AY~DUl^eSXe}Uy3P#xZ8xRng{>@O zHE|*nFs@fOJpWVKt8dtFH4@>pv#jqdxYKj}TKk@A)bKe$9oXw^8NAj6`U-BY@4<4L zrxh0c8{KbzE6l%}GS|Ym^*cCrA)hEQe_C~FZHyqTPpx1VQ`DnaYG+CvNodHHC4*(w zhe_mtlb}~GGJD=z{hm)cGfE!sVO(nrn{4efjp@L~yC35j4s(C2IiREdJ8{_dyOZ76 zJ1y`W`V+kRT`XK>F{2>iQW>|tHc}fcqpS%!Lx0>OFwzA3{`Lb=G@NR_sy0r>M6{vl zVyvN=-IE@LIM`8=+e4%E55U7wAo1UMUlc&y(?7KSRRqy7^Nbj!x-2{^pb0j?x%oDD*-;tP|WAgte%<&-wIp-`tqm zb=63qlM$7r>D*DOcI~a<_1Kr;2)ETeaYx6S-4KBADsE!(`;movJ9bbdw!ZBAeM;I>-*Kr6hM>(?rX*pAK+S zyhRpZW0AVkdzizXJ~4j>tm9_HS^=t}zc-ZrKD~pZ|Fh79=bXW;I@&J0K@-lMO&KI# zs;iJ_*2gWL#Fpv3pEB>e&y8`VO2a*7%G|lg8M&x)Ex1n!p1ltRWJ3O@Y(yDSs7jvT z^mp2z2;dC)!>+tb=YQMO$ya9!*Nb}MJuIFKaEs#bI{nPMxev@G=D=KY3mxb`FtAu} zR5*KPo4-%lc4K|;RaDd?RK>weBS5$IU{MW69nCr4wbd~?tJ@?-9s^_;ftcWTp@n1Z z=$+98bkr%d&$-57~F(TGNIGETH@YOe36t=0sABWoaF~K`>w4Ze5{Q z1?k6j`xLbMD&V;b+*cHxVzC@-v1pUn7ID zPsO0qw}<8r;Shk*81%X^ZFVb`myspMasX~r+(lZv3(tT#67+Mu#cMliXCH71C&zG8 z=cyKHh5*xGzve&rEJ-SzxR)%No(*4i5bN#1{Ji;8qHT8k`1oAnQUgX4wL_O>fcg@3 zL|m?FR!GC+(8b8Hd2%;!!-YqSAFT}x7j@8iEVx3xYyu1pO0KUXj$21jXZl3{8PuWG zN2j-SW|raB5nRBuJrkjS`2>%Gm(qKUrTK}Pc9~C1xRLw!*+r>{2K#C zH%36w{lQc&Jgr*p;hj%dZt(%>rR6aqDs&zJ7+Mkl!ilgt1KcMc6)NEVEb*$wfPer` z$;dBMlY($*#gRPJqIuaHCq&K~9LW@aK#+wTP-}3kFH#^b)mA&RP`g#RiSe_&*s;Od zri~B!zpd%_vow{vr`OFOz*TV^LF$P%RF3FfnE&AaNAqb}whQqv+9BGuDO+t`c-`~# zu16*xYc!hbfO|KKc#AjUURAq2+JA29KJ@bDqgD;Cc=G6UGrK=dCrTv_s_3C zeaDG$@+0Sg_9yApOxLtC`};@qGq5zT&kGU4k_34~=Jel05+=*mIZT25ZpI)dv`gv2 zY)?6WTvzlOz)YpGlz$Zlr@sR!pGx;>_+>$O-Ged@x+nnazeOf~Tj3&$oL93?a#+Hg z@TuXA+*aWCQ zD0d*z82}o7^(uWQs5P9$P<6Vv`*qLiiub+^`uR(_P0dJkqxgH?9B?6a)eETYBp^|p zcGuE>R?U29jnQ8~(d^@rmpY>|wO+Ri6tm#H0t^Rk;Ls5>^*VX;NieCquO#Dtv%1{{Q_9AjbeKTIO~{XTs)9mFga? z`;3$Xdsc|;qchj@F_-)y*+&~)=44uA?A{7R*34J;;BM4)nILBI0B@o%-rT#}y`6@# zuf$MDR7rd)!RoTt)FK+22wK*1YQf;bs7ecbMJyeICyRkK;5Xq(c7SlJO+*q;IR)@1 zwks&D_KHuGD+dnN&s}hvCXCVl_Pmm2_AnRzr%zcEYYXulKoyV2KqkI;jCfOwqB`n< zLFl=Y1V0Vrt^jfuhMl<~G_a_~{w9@y_&_u8?I0}cVvx+%36y?s*0Q|6!1Nww)F80M zy2#rpf|0uFU9d;LCJc4a53_{s1IJP9F)yVzLj*zNc?@YVjx&8mU){%lYvD{4qQ2lK*nQ*+z67cX7`3zIxp z_E*q7dDdBjSOjMn*)J9zrH%X2Pzx$%`xSt%IFT^Oe%OV6h|XI5Xo`JdN)Uxml@H>5 zOJ-XiuAM;C(W%rt;H!Bf;!2H!wt{ z_L4&aAzkJqJlU{JogLqtIg=fe+^=R;V{ZVm6M7<>;V&ke_(Am_fNVS2IOM>sWoyd# z*FqTj zaN6I)Dl{8RoY2TjDcU#;* z{0?tUgRsD7dH8;HVL@X>OQMd?^Z1!rCfq)O8D4Nr_-&{qzQ#5-)3( zZl*}0d_$eO-L!j(>xY@#Ren?EODvkI{HI3KT#&jzoh+rNa(64sn*l4)BA`BGGwAfy z`Rjul54VgNznMLrwxs^mz^gAEPbl(U7+sc~O23d4l?d=XGg|^d*X$spb1Q7i)OG`K$czN*oWejM5^bzLyqrMbY4O)Nc`xF`OM^T9s%{TicK zW9&z>-QQ^WhfaWo4re#1TyeMZ>>_RxSfX|~5a z-er*lTjCd~_HBFnO2{6M`-6!vKF8LjMa&X!dt*Jee&L#q*8X7op z5&hJiN-;G(j93jE=0KQyz_`BgANe4!Nk9(zs5(~E;52y^SSJsOC47oEbHX*8 zstL{l|Hzno?vW(;dEdvZ-Ah5ozU_u;ckw;d*!#5{45mK&kJ)3O963MJ7`zmaJI}5za;F;~8OWu!3OstSk*(h!UKvtM z;*!m1!m$%DHP8NBrcJ?qT|oyRj;mCs1F5=k$ z=ekkos`7H!kd$8vIZ*Ui8|z|kw}xV8>xyEzSV?&o*BS?th5Da)QHQX+x09E`Ze8SZ zemnTBEm3`!m+mjn``5TpE{@kIMY%_qM=J!65z)IZecNYF6_GGnf98h65UDto!@;pj z)TW;jY3bnsg;S{{jd;f;E%x6tf)(~)U=5#Y$`j9el_vD3D$QxBZck5So4?%&Ni10O z8qmkJty0nUF4ZbE$R(rqvenT3p4s3nCTIWtLmiHd%W2ac&8WBSLqhsf2CqI!Kjuuj z2GNLv{tt}pl(F$*T6)UcrD#vA6iGO|*e7aY!wxS~8vC;?-cQV%h9!2KecAF0YdT4j zhOA6w(@qRoO;>(i{+;ta=5grxtU>3%=j)1uF)46lO4pm+=2(y{I%tVnUhr*^beKnYrkL0R~t6 z)|jfJ;K+7i)E{iwlz45!!rC(SL%v)+31>1<`r2Qg3yd>goL4UJn`S3~x#JYcG13wU zEZ(?^HZk-4>|0nLvHhj~74hjZ_>4~RDE+g*C>xv^ZC>p%Qeh_8L9bKe1*~D6D_Feb zX}!0u@}dDdh&4-o5HizNk5H4j;9H;oobLP2x6oJh?_58vXk$-VQCCbmvN&m2u5TlX=+Sz!7b#WX0V&zVpXQj&1 z@#(ZUZyB@Kl$alI@B0Sml zQKvuSh$-#V{-rcS!aiHDy=nU4#w9R#9LwolxP@)L*_`mbZB{wzFHWNy(O!hEX!=F3 zny*+L?q%=aY|1L9OD>NIYL`-NWcD!eNAKYGG{1*URm?)HyC}0nUH9P11e2Up`-uaq zS1>Uh&Wf2?L-(6Kx@f~@ir&de$^XvGsh??XS@fM~_9YCJEO5?Ed<9>aFUM5VCS*c6 zvwCm;?ApJQMV3cR6op^%f8(CnrBxlmkNoViFjbZ0*XZTyd6@5#V9{m+V6Pz*rER|- z-*@RIit*>IvZ0&*!ePjrAy&_6khfD+4+!(1Cnj(G+uL*@rm><$VycrxG zo%8-iuDuSv&-pW{_tny=ab^b=v5dio-k`0o0a}VL3=-9a!;H8j_I`6EI24Q~>9=x$ zN&1G~5!BW*O@e#jHUMY$LceQrI1A7DZ>_1%;U)$^&}~6pIbFJ z)1QJc;Cz`SAiB{$f%R@JhvOM`t&HZo@Le8w!>vK>r`yo?DywyxCDbIM+3M`KADm}9 zOAW{u4b;-3Y2P$Va5s)aj!F4I%KTsSq3Z-{5JOgC#u=U@0m`Aas46GHk)W=8LsP#W z*+kxXDu%8-9Zt3GY8yXn3I&FfpUQ0*g-%SdJwu=M?U__2T)Y|KCh*C&0D|p`2B_8$ zD2%9>w+H)XFf8obq0~9;T^FIdk+hH{Se0ZDN!0a_MO22UQ%LW5Z#GQ$?dD7l!?(RM zDM^rl3`?$q=siEOr_7PqJDvoW1EP+_hjot}Khi3meM{pWhN;;nedloTc!@qGl2dc>OLIlS8haFo>6s$9;Ux{bp zmXMg$<;FME!Z~tW6gN-g$)+p6zU|zoFpV#s#e~9^4NrY2MbAQ-gCTBcs!osI+eJ>0 zkuUvX|CUZ;b&0P=Z0F+C*-AcY=k>zyJ#USQb7AXiZ=Ol3*Wkw7IVSVFh&xo9@2*CR+Fe_LnAYdz_IXDj{htHCQh1+^9?N$a)YY$OUAi5}~XzZh6* zR2Pcaf@-t;7UV|BdD>oEv47m7@diwp$WU#J_|UC%wUU_z2t4cHbT#5c7HQEFk^nS7 zvz)*RubdU9oxN=#{@v<+7jeCOd$aJT_^fM@drNz(;Ad>V4$;A$`~Sz(IdEsf1lu~c zZQHgpv2A-|+nm_8ZQFJx=EOGM_~bixowe>?=w4l2yK2`{wZe;)_AFs5Wp-Z~Ju0pw zlp388jx|4jBQcLblo`~ajMe6bv&kniw4h^ul)T!Gh|TOn7sCf(~;ifQ?sR1Wqm z=JmAHf@&~MZ!O`s5yiExj1Ls{4l9sq47FCewFVQ;S0GkB{@zwTs;}A*c5T3ouEIm; zlgK-RCl4o+e4ym?J1OboYd_e}aPRxre$*j^Va}wrmCORXmmI;yt++m6z4sNsKmwy4 z8#QzDf>7GXjg+W{qR1dkw(Up*$^3<%8&pUV935AS;BWI0$S9fMys!C+GvB*ypXqO@ zz;*k7!>w{5)Cm6-Q8xdhJ8vF}kDBS~fcYJjebpIwTp08oA-We2ApC(nS2Y1_Pb4L) z*!p20B!IMs9J{j{3jG^YU3imDjMX#~*%z4oG{i;6hYQwX+ILv`os-vbUUUv!@V!k| zI1Zdxsfke&Tnmm`Jlp07!|nJB{$!;JL_1}2?gRbdH$S*6|CzB1ywg7l{X%0F6Pj3U z8(Qdm(qOZ+vYn9W6ViZ@q`|u& zHWVO(SSI~z)YDLF02Yyrv|))_dp7>`*2=c1KZ00QZQ{V!hZ%Pwmx$-pitM@U%rvst z#QuSKpqHLr;V4%JI(tQ1}b*O*OXXE)}@Ly3bXzO#Qf>fP`XAPUQC4S5E}vQmJy85tYF zqM4X-ki-t)Ygo;CpJp~&3jcva)7l#!&wx7e;jS*?Z8-q`>bYOSg18@T;?F^W)q4L# zA-xwFA|Q_%C?BrRDg(cRDsKU1$tQ%YhCL3cJG?@{%MUK_bUJ|y%56X#9|+{kVIc}J zaCKO6Ev9WV2P8&f6oyz=t~mO0x(b%Cm?Fzq306c8;>c>KrsR+M7?D)H)6Jr&$HTo$ zyBtOL9Bqbpt`%pB%ZKUKBr6G2u{%)}-Iz*70mA%=>_?!(N4dys!GO&JnVhhbs1NY`)`IQX*els_%8&h z_^@#!XTP4`tKkz#Lsu%?eE&B_TiFjUnLf<7H;kB=;+vzzc{BNlrw?IiFh@esD%i=+ z*1&X?Vy#CW>x`~gq)H;;4IGtm`!M_s4_0g2^+WOF`o6XP%tD*{kIiuLUx#aTmp_iy z4N^Mw`83YYyqb)J3Pg`jn9%+kps`6)KsbTETuW1K_>B9y))2oYEJJydUJ-?FxDM^CG6_P@zmC+VnEwDRpeKMh*eq}2O6e`Xz8Kkd+op* zgH%tR@qQkTTf@|9-BWKVzT{$y8C)f)Bp$O@DUtyH!$jMei}0(pcsq)js z@R~rm1S(&~Vt1>_ANlxwhy6&yIzq!-9yQlWZkl}cum3ma{wqUe{81EwaDDt60eDChhOLG~sI0z z=KIf4vOIK73fh8Ho&!U!K)%{2zD^m7YAe0P7Cd@j*RvwEU8_gVKr6prBy1g!1`lQ^ zJl*b9D=kRmNTFK@LLqw?($CHYs^K~ox5e?jV2nNdABgXVIw$;}g(pgAj|LeKj{7|) zh}Z1g$69`l4{ASJv#yiCkPwHqF)uw>y6#SUolGeBr)_JVPXm%{@0J9ewCo~C4|iUcv?m{$z+Ke@?i%jjX=C4RbY$xC2F2Lyt;3VUkK2M5(OQYITLu@>4oq z06C>s7U$h8lR&%20255f5EReJu7BYgyF6g4%kO9jDt&H4lpoC$aaHCjfWhm8-DFvz zhvX9*rno(`K?C}Jp{l%~bKF|wiV92rg|8Z0(Ax4v{EDV}!}JeGcnxOF8T1-}SFxJ; zy})q$*=7171sWJVYQUnT-GF>5OBMXWS@g5Nv2K63B_g9V;ZR2Z;dSTG{aNj{7o^g^ zw{J9vjE1_&oZqK*-u7I8cQFj6j=3n($@A@77MNqnI_+$NKF}}cpZ8D=q)o55XX!_$ z%r69A9cnGD_!#idTt0+9BIt+p7ro2VuDg_RqC6mK2%DVjCreBvgqN19XUr(YucHG$ zwHrcKXAk2a$4ziD!M>*{h2yWk5QUihfWbwZslN|u@!VB33WJuPh$f$UjtK&j!&WkRZOean4D+T zIt?A>aH&*+;Rad`MLa(v>MFLHWfq|)R%SD?G(Pu7p9pF?!KhA~gnX2aZ_rsrJ#OO5 zHEq)uPn5bcGLv1xfzeU(M(DalAOK>ZS)N~mJ-G@m=k8ns^?ey%hsOj9oj>jR&q!CU zW!E`cU)v5P><+RkuY3^3;+&#_GoD47Q9N(!uke@^{%+ z?vY;F&!Y{w2Vy63=?IIsi2XlywJ2(K&9#%-S7vyTbE%M9zJjGC%XWY2$w`H{Gl)*8 z@=!+>xGF2X&%H$Z?YY`vIP>1ITK{<4EL$VFTj&Mym(uY)*X|N_uWryP@_b9ZcrvW` zd>08?F}4Jb5&#cA*s3V)OQl^)w>3UHy#TkQbbde+n!SiO9W2IXS|m0Q9>{;?Jorb| zsnggeq6fp2*jtyK+!(f=F#L++YzvlU9Q|m*km6>O%<^GGOy9+w>p8;-sQ&}#D`~Y| ztiSj%Q|t{=QVw9n{qO9Lq5nNd^H)noQz}=i%I5+9=LLwsBm9*@ekIEmV2F~hhN?gy^!Ny-8QE!oZL;pZ zD`iFP<(nojaiL-70~Z`HiYnqKP{9)4nHLo|wPx`brq-Qq8R=htSbZ~%{(>my@tZFA zlqyRLd}Djj$orGFj4yiur8X0_=D}tOD?9kV#rN^LruH5Qn7elCmWLaYmo>~JAEX=5 zDdu8FQ+Td9-s&*q#E8fSYeIIGiyeCxjCxK3OEBmlvRdmq782GE8wsoc#&89vo^j1Gsj%X;yc#Dyiy*w1gu5DVc#b$zRFpHeI1PW}f=}XdePc%G-bLl# zsG#t$WA=-xn_|>mIld*TrNjn%#*Ymvo)T7z_J^f-h<&^Ftu`$*d0V4jEHd{^alif`hT^3jS#^fukFe$Q*=B*P&DA6z0$pnZzUIMg2^7B?AM~Gs`~q&fd(ly zJEusQgmC!vLg)#tY)9D1-O7-AK=F0|E~cpQCPv*+0ab=Q^s@5Q2&sQiP9+5{hxLJN zB=I#CsApqj(LkQY02V-VbEVmn4WcZEcy5qjFO=w>U!m%r@A2Cz6S)a*QTdnqzM{63Smc>w>0=+c|m~ z`Ra9*$X?mX``58gYYJZjbB4*Rqt`*I6CD1$2DL$G`W^ytq;6vZrQNM08!2j`OT=R6UJ66=e2j&5m{hclZ0fY#GuajG`?(?$X zEkhIEa|R2Qp>@4k_Nqj~QWLK#3v2xX(ec9<5^2v(uD}yYKBZlGoi7jS9qx)%U>PLZ z=(!rz8WN`Em^Gu%~09kdS{%7jVu zhaQY2V^0EP_PLlJW@tjoMNjWerIcmq4wxmJoM|m?;Cvmfs?vMX=OUuDh4y-}g-5y% z(gD7*A=GUW69sAxpVnjX%+@tSop+p4tMa)W(=R%ygNK5cq%|dYwig2py-%(0>``t) z0=={57nF$w<9i;FiNEJ2X%DaYtBU zoGn#3szZ?7bau0MEj!Maiz=Ims}=zrV+wAEtoG$46{sUe; zZgU>r6QOce9j8VN3ayj)<7G$YLXs^)+Sx^yzIAB!37ySR<_J0^u5`3$mabyX!(hH(q9D6^|8DU4unU?Gr8@c)66%~1mVAA7!E zWa=(=JP@OeGFqvTkx(d=0>HTLl~@Af1@0CiN;XHQTKSKC;9F`OLV#|2L9H0&#Jxa#3%;KbD@8( z65(x!6dK6AO1u(B9T-(ilC%=Zg6T`8l^;~x%Qy3Y}q0nSyY8YXd z;9v8z!o_8XpuWA_3lH}@VM$eu*W{S!>V5lz+xB>F`QaQ{{Y^{Z@wQFzBDsAMb@w-R z8Pk2s7+@i`>bLyL6LqlwWqkBuoC^8KWC7-FwWHll>(WJD1Rbnj-^cpx*RtV__i2oWsVSP5p=t(KCV?{RIX^f&E(ZYcrHW?CVno zSLZ90nXS=vR{QrV`;R>T=a;;!3BhN_#lU_zk{<^>guQn5{W0k+qWJ1~?Jxff{y-CARJoD;VAbZRe{p45l)@>*b0=LGgqRU)j{V}AM>;{&eDtUREU+;T ziEy3M6-PIE5Cpb{;;~>FegYN|^f@`eC!886h9|Hq6$bQS?bFZue<NHR3)9P|f#< z6f7jeqch8UwiCzDFj=`ij}Za7MJ0PPRft9%hH>Y?xj?LK)sIYz8ERm;p4T<=8VhjV zz5cbr)50^W5-*w1q4Xi&E@-zrX zZs?TupwqsbLh4@-G*usb9=T@+_akMhO?@(;&U;*J?F0Y}0%LIAc1QT@zL9e^)oBUp zikt?g27-62mn%R5FP|^;+6a16l{Gieo2GgFavO3vVG(4%ZMI|VS!XVwIkkDg`H)?f z#{@86$l|Y)pn#sL(Yn*6wKAPBFz>(Ai4Wgd-zqLJrz2ac1f%B*8lZ7~88sUL&qfwY z%FU%y@)r?10M21u0=Gy%kl{p&HOhy^6?X@+jeI(eEWWlsHKnVyywnzhSPuoKljVAC z8>f|an(o0(LmmHA{98_r{67Wt-*_p1TCX1eSyz8Hh5eMv2>tHPZ6o>>KF;lT-)IT@ zygldP-DZTtI;RBe_g};VSr5yP>L~etKWK{OCkQ7_+fWnU1e3y&cnz>cqM=ncEfyyN zhtL45^@cIu#=4u~9Rg+RV&Dc$nK46A@9|!h>-+%ioB1G>zv|Kt5iO@siVT!u(I17pF#OPY+jmFW7#-n z4|O9rpj;>nUKub`#CfDR(|+x4cBkkNCV6md_<_s4e*5^49fXQmEGvHUuQ)V3*FSI1 zlh3j<7BB->wFd5^+4v!)*kTIDSx3=L!ZM9NukNp!#*N1ro~?9JI()+HSc=Wn<$r{I zUgR~a$&;x9re8lnWOg;^-|2?ttoK>vCxE`SMr)SYRkC&L;opB3>UEJiciTnFrtmO) zaD4Vm3m%W(4ENZ>IS`GDQ9$BD2@DkA3VZtXJgbp4e!P1)W(QF{3pK}-Zc%}YDBytK zW}8ls(5uccYG-+S*Cv0e<%~&MykgUM(HR1vsm+0YsZ;s&O8hla?dG|4$IV1g->GoTT{ur>VhiG$s@riDC z{chs=TpV9Uz1JAaODnUq-5$CVn&|c~SqOl@e#q>QiyLqz44r98-JEy>kel%g&PWc-_ZMEVGU=MXcn4s z4V94y@B^MQcv*uXo-5(Pfw7?Jk8h%2SA*&6Eo? zQTS2&uMi)Gdu)gBa5uqx8j0}yp1|5b9-Pd|?Q&)Qtqx|uvDdQS(IW0@-pANX*VoZ< zZIs7<&4pwr-I-jpba0SWco0I5DMCNPf1CDin7ow(cpp2OzKt(}UtQDpi}%R;K)X*< z6L}op;hn2>mV)LiDc>t6XdZbXPfhD4v|`tG=ssX^anO6C0``M?FE`w0?_V-^dBdD-My z)B9l5_M0299|C|p{Za#QY;5tXX}@yWOld$q&^|mDbQ?sA@cQFQr-#%{!4-Q=H{ZLa z4r%Z&o~fvX#B04trMQor*R+5Zo#1;9wq|-~l zV$-nMWT3gusqD`;FJ$hd!RBInHWl7BVWXm9q*hoy>t|#A0bqGUly=9k;68r!=B9dGOqvKiUHv5WvBZq7Pw75aou{xzZy_g zwc8IXPugjtZ5zVy?a25=^p;#lyz@{;(>QwY{iSWV2+LMy-fO1o;6)CS1{$d}00!Ia z{l_fILf3H$L=G&_v$`5dvt#j<>ol5DW>LG+nMjF5wy<~%yxGZ}ZKEaHMZQf(jZq>1 zr_Ta~WWcBNOuYs>?d{)$CZS z8rwZMB)YQ_e1pBFoM;fC|6ZCt*kx9i80_+kq7%D;1n6Yas8?}xlfRgaZ&$8HH=Zz4 zP4H6|@fuV!Gbh-9HB!Ool}O?70&}=M&*PT4W}5YQ4vr>O%d&ND{NCHb1F!LuMX3)Z zd@ek#kz-1N98HsZC5&u<2^g;BwrL}?PV?r-GFuB>B=XlK>_d7 zV!DO+WUj7{5nIN9IUFbkuf;Tr^xZ73`uPOz>aQ1>>z3c4Ku+DKP8%J};*H?F7q!3y zryIj!MHY))EYyRUM@)vXua!G^3q?~OQ9Z#^>+mTMf2hxmgMa*ZvUE0|^e*Py0)H5R zwaP}h3VZdYODdF}>Z$(w;vWrNL8wP(i`BW5u@s1(m12G-p9Y`Du|`jG5G{YVBAO?X zfByYt91JK&)mbn~zM+Lv3%-o|e^PcGbRcFDlR~C|o6GckBfJG_f+n(a%gtgz^Mt#W z6_Q=2V*hS$GTSZgo|RCulPDo4Sz4Odb;`sf8uAV&GkggYRSyFS&fA+Pn_QD3Ug+VwlP7}QT|vc~=VRSmM}isMTz!bLjhQEH&hRz>(j zBepHZR#{nr+p~5IHg|lljz;~Q27Zud<5b&4;|0`z{k^NH*#?CR<^?3_)c6O>Rq>j) z+P`WnZACBgzw@~#j|HMxL^HZvqFgN*?-Z~wKRThdv{OUtwArUQC)Y__m(8n%jt+JL z!ER1B-Cw;K8BH!qx@Y>&S1VD>}YuA#wv4lBLh0oL0lcNusZ%yi!_ zF|F7p^yc?jtW-{QO`L{1WuYH;nfdZw8}U5E_VCnpH zPhnhQ-I80;Z#tp3WF<5cZSMZXTN%>GLi90+%TK`Yp(m=s>}U(-kznVM_uH7aUI=L? zxri5=N3PKQn`xDTyurl{e{C9Rzs7IT9G6dDC!dy-DaVi^s6;O}R56<~A?#gc4($_> z_uBX_I+38)p|5e+TFy4L&dCsqIxhxsW#4xre@7~<3wUqra3MwekO0udojgKcdu&RV zRhB!GXhedwsIFLo2ds=Lr{xgGaK?zdLkDqlbmZx@5Y=6*=v{JsX{XCty*JU&#`1QA zXNX(bgI}>9Czaz|3d|KkPQ}@t3bG_!FaOhM6KF*|2fw#()*+1N;ZUFvm2RVJ-PyXu%8G-%J|GDd* zd)ge$>VSbWeY3tFIKQTZ`Ns}p%)Q#r)sfoupJu$I@un7ETpZQyAeHyc{ArQv_irp2 zOKDk#d=;oLyJbm4lAy+xQ8Mw0(uS*doh$;+%p$VzXbH>6iVv!yJ~ui4?4{8EDxv6a zk6jjEK48rf5+Fat?u&n07UGuov+Jwmyrw#ENJksjUv?UO=XDJG!_~RB1-SvWLcjLl zPyPm6yR+i=0V#(`J$smRKgc%X%oa6gsNjfdWE9Zf&VIp^ z45U13VjN{TF>NC+pC8B{2D@R~6@VX((!TRPZhgn7VM4FSFdX>Ubd>v(`XgG_d0oWa zWJdb_nd`kl_0xf|)MH=)$9~^;t(Taeg@BWeX}+K_YQ{MA!x&5;>26hgIzRTo< zS#!IpuRV`pa1}nRJx3Jbv*P^^zsS40-QHRyzSsA9ebW0C%!v^9cUcGuZsnfQSvkOGu?(`dR0{;K{H*X$p43S)u2QM~veg+w(vm z;Z}Qmto!Hmi8cw(JZ?aIwm~*0j{D$HpN7xmZi7 zzntV`u>dJ(wyoQW-J~rzNpbM-F|Y|aGc&aYZ*7~?^)l;+Ow(!cK+Cv z27RER;O9JLN0>`T&Dn7%zpT8AF1V6FTrBkj2HAHqk%=ozs7fG(U!Rj**LRy@Y}SQk zZ=rcjlGj{$kMi-Z_735&`alio=6uT9f<@z1n5&xYkI5Eb@TKp1^Xy-7Mpz#1;`~nip6}$wzacaQHo>kn z+SB=N=Tp4;V(Wd>-zBAbGJj(}&(l(>JNH(&nGI|Ax2mo$jHFWKH>tOVXrwM+4e zs&t}}4oR`E<#Gi`t3;?m4OSO{i4eHTWME;HhQCYv4fmC`EtG{tUmfzndDl$wU?7MO zFd{1hmI7cj!aZQ(fJSaUPH=PI7{4d%R7Hu_$o`CoS2=Wh@I*$=&aaXqX0 z-ZxK|7QXemZEpcLGkfyuXtIt!MLtP*9pHiGVy?de5JTZW`xpW2Lr70?V;xCNtIWR& zfum;z`(@uz&evyDFM}yyK+)I#gtS1smrbxwvo9Y94$x6#f&?uTg9urMHBhSGVTt`} z|1GEBZtE;DrR9ghG_buX97dKUiR&GSJk4xp1#g1M59B$1??U9`6Gl!K;F439{u1w9 zH-bFMLuBsPUP{Y)hHcu?g0xa`LZDoQWST0JF!CEm5dtI8b-{&Ah=2%BHxBRtA4YIt z$8&0|vG|LTn#M()UULA+W3-%nj%Tji9^dOd%HRtLmliAd9f;qM^^%i{>(m*?zX)6HYf< zB2(CMG#fXhy(q&rwXrPpPow;7y&hZ}Ya%K&&?r49pP$9ptR4iHYgj9@Bvc{b^P&$J zDhwaCZenbjmcjwHJe^qISZvQ1-`gDvsdk&gv)b#J=B?Ff^+S>kUzmH+7QD6f@q*>5 z-xNNr%WpHZHR+!RLy*}Au50x>U$l!Th?4|JP)t=p6I3N5bbP)S$^aYc+B94)@X9a% zUQ`vu0Id3#F-?=YAsKDa@!p7Op>_Q5vD93)_K)2&9oswEAQrSNdMbMt?pI=!PQATh=` zc&wC{$qQckAf7RraTv8V9_oqUVtoV-GHjL8o{{mge>gf49s58=*=pVt$>m(`%Pq+5 z|MB?vnAP`c6BpMto!MpZP$mk(8}Pow9P7;}00Q0p{Ni`M-S@4un#T&XNktfMvMWy> zzx$xH(NSb)ZFW$TWovWKyuGK(8Eyw4PcunCaP^*&JZS=?To^STS&kTzZorwF1kINu z#N_PAp}yxd8P@jCm;p(Q;h8~P*3%k+qx4J_HGt5jNwHRRbt8uZ?XGAN1#lFx#f9VO z%K2;wAIlnSfzI2uEv3YcHhE#BxsK-s+tz;-An%YjYn?&u?6#uzu(m}TGC6}s1Dgj# z$0R}h`UTJU<;NKcV$oy85>{Ttb$Os(qKwQDk^I*%+r9%qBuUU0mcOF!6 z)l!V{Wf)hc>JSVyySTP=;45%oTn+^!h;o46WHH$`4kHaqY+dD!tBZjQe)^J;k~j-Z z%Lyqhpco%vxCZpg$NVLX0e6VYveZMtd=qcHi?QJ!v;CfnV2e$4jlOHvgiUN`BF^B_ zH5Zm!bBY4trJ?X68rHUw{8%g)T(hwJ@g3TG?y5SjsEj2`?GqZsv2?|}t>r@u><8kiIwiw9K*(>CTcBlAut8&4P_7P?%7I!0aa)VKtJ|(1mO@L2D#QRe zAV=CC0D7l5M#EaR+upVgb|$E<5P`MY1$TUO!4!L z&Ga*3#GRRGdT?#PJj7!XY3+fx`3Cw{>r=R9Dgv7OSD6w9Pis5In{WV2gvVz*>ll7) z1J+$=WDDQRlnd!f>gY-V5hlfI_b(uGx>dBscMLsB)8vbRsHm?mQS}X36rbWONe;x{~?L9U}jyXx$qj!FSx(m)Y^I-^@=G zto$zus^WL_Y%4^9^?nt6e=f)62snK&YqjeD;hE>VxJ$?SKge-ziBI=4?-FlTn}H_b z?kD31N}6x-9H0k6gSMl0#S2TCHSxSmnA&@?Ac0qcU#gLIv1VhVwE~@>XrUrvU+KUs z1lH->Ev(Az5xdRNp!$IjKCyMOxZ^X4+}iR4a#U=#z>3#wEv;875Vgh%BMR7+1nc3d z3vu-yyUmDr-=yv|@hPR!uPxtQx=_XK9vu%BwAO5_KH19LbomwdAf5+wFjo@C+|V>A z^{>^-6m?9JW58jxiJ%a-E7k{MOUofR8cSWf6F z!}tIN$KDwx2*8ZXhiq%ipZpWiPl~+%Y;qeNovLI%4jXMU=;eTF6_W_E+KP+Bz(Pki zaOPE+xi2`zqzZOa(LCD&1z+Uuz$hKyFUb*F;rglbm)Izj+jC4O|IZ7cFO-y#ohRca zP5UADd#E5);24wgByN|h=YHn*XeQ@xKS8;stmf^)E*8n0fcRPy0H> z<`fv&rYzh1^D|7(Pk5cwxDD?nA5B~Vi;1hz+#j9CH4$>Qj6L}qX(A5hba;HKRutd4 ze;t+^!V0`{cto1hh&RPOzvD_dB8<3^kCq|=Uj0I6ED_&W-(i~ZAoYv`jyda;WuuFb zWpfpj(NCcD2I=&26vAxe<;BEvE%c6sXs^-vk1(i!_l5i4jB7nwrp2a&6fNB|5lT^0 zN>Ri{+LP334Wi_+FU36DY9n-|RSCSMjas`{o4`@}fSi+ix1gd}PrdWhKtv~Ebe8$Z zYEYnzL8t&Da;#Dt9+LGudjrvbZgJKs<`d=A-blmLUgonC$2qytT=W*5x7$|pphOs? zlgQa4Wx_cE#>1Zq0wD`~++gkuL6>*wu-m+Qu1{q=xIy!!kkx~>mn~Xe+4?Gz-=^t5+2%b4y?^IG*5zhzd%Cfp zq{CszPeD#2K><6k)=V@jgH3AzwdI+Xl98XjFLwlX3_+9efMSvXVe8mA(sD|pB7yYW zXLy@U*kM*IKRC@}SLlqs!+4mA=UXr#fiV-oleR&20QCJ3M)xubI$2JSxNYbNBgNoS z;4&;Q;>HR=$!cVFffebUYJdbs%k8~SC^j34p&XD8T^wU*Npm+7T}_ci*O;s8Ez+7_Xl5M|zl#JcgfA-11>5wfG-kMpxBc>GS~xsR*gg{dqr22>t2 zGO>vxjt;5Z_kn&Ez@qod>J zi-HuZp0RnoNpLQAiBjd}(vY&v#iztwGv-v|?t|rk{Yo0J|CGO)rBB$ZInNVkU2Wlh zi+0d`3!@p}KB|K6J$@mah)$LyJj(PgVV#TUU>41;K7hLttiu!y?Gqg~2S(GWAtaAy zFc`BJG=#u;jAlblXy5pF?2LA3COB*eA5IyWiwwRAK|rPc+k(Xr;+A3!SDM^G zlmapMmazAKBGn-5@DFIc+dVro+#tI+To0{xd=RXGwYW|i?KYwVE>#l;(ug64`BsA$f7wt7k7#R zDqtP#*rl-j36-1vDx_ZjzAXfdQ$Z_=1#AWsfm0Omdsawvr_H>+kg*Uq4LpZmaW>kq8i-yl@+YZ3vCQTgZf zY)`g*BK+@J3j~VmjhH5T-z&YmyEdh==Uw-os73x?)Ve>tvi*)AyX7Q!58w4aIavKV z2D3vQJ|d&ghqSX%L+iG!C7wukUBxI8G8GjirEI_%9~`$U215f)nNCbkINs#XnXio@ zU>bHFIx#SBUv6)9xHAo8RSB`P(;4MoqkR~e7Bb$QHyi@=#*5UI4@QoKF z-Ob|CFdHtLB?HUgz_9N(&W@w!5dVIuU4sBiU>;4Gs6TlC=#P$H!5>yO(H`_dmKDU2 z1IGtxtf(Y|_f~;oFYZnnKZ(2N#^p?V=CU%~>@GK1rV(C<<~N+voWEk^PdYO+7hasG zf1H{HXr)@XQ#GWbwmHLc)sEUe!L3|~J}@3n8o9BZ{T?FP(7oc|N~Oj?NVENQ0K+O( zcZ3YI#)XT8S(qDE7s2QJfnS^SoK^F;QD;Mddz;eY6)HL<3IJp>K@rhKl5hI~%Q@*# zmHqUudj5s#-k0D~55#6eoZF@Nm4C<4=?-wf%6oKjy-v+LvLWa_DP;)hpwL0QiThzH zwTHX&V$%00F~{|dcC?!vi2L<%Ou!N?Q4O1>#U(idzX!jq+sa{Vkyb7`P_5d}o|j{8 zYo>9SqmIS_=kH(JJC_@3NW>53=t3It`@AFdo8<5Lj z&frgYm$z~83TkFqN;t+x0vPaC_icM|%f~#@gTKG>;L^9~9D<1@)N2FQl7&!*4G@_| z2o_0|fNaHHD`I%w>opN=)5FgouZHBj__7NuoT`3E1J_D}G^k8Dq}jq3cYVM~%}BH= znw?@0*ItDLaW&gs8z5g|u*vYd$2uuQ4dPE_&uXr@Q9G z*fz(eD)Q-{n27lYRzVJ7=V1lhL7IM|YwAZK8E88pZIx}%;qmeP?*6?eX8)DO=zC)J zXx(R?*3T^SbNXX^Jl>mjm0DRi0!E9gHhcSM!YZH zEodXB_F&j(Pfy3r*UTm#aD49CZY&)uWG)58}$eGVb_>8`XTvrw#B? z1q-RC9n*BFOjY6COb06As=l6WEXLF$YwK};x2dbP&XfNP9y?7tRlK2C>kjW^c57Tx z3odD>5E{DmL{Df8j)!!*k_D?2Wz zNmE1^6M+r$F)`>yd8fd@bU@-n$;qbehV{9K&Y&O}Fr_H6NBxT(fQz^7Qjt7N;TAx0 zT{?Oz#i+}`tasvk?RRL^_n`1SCFr@c>31texTYQTeB%a<*Y%?<+%HL++iprF_jcdY z7{Av}zBgY!tEw>Y^knR0`_Je!*#`!+s{<7u}ON0y5@VfX(vWydpl{k2Zu9gbjMnL#c$&a)0&k8as$G0NMxLr#ja zC19&hL9szeJGxzi==8g4-XRNbeXAh?*867BoIdi9{EsHjMl;ujPx6-0>?l=P9E%qf{^yus? zzKq4;Ku8rl9@bw%$t!DDUE0tzH+!T9xH;x7&kT%Bx8q}3w`Q(DFBzOfd{L2+h)b_`_gk`Ro>q_ogCAJ1X zw}`vMT$k%wIzo zp%X3xbkh;E0))DNuSvBZB;OO#ckgtU)=KzVX$r1Ywev-AVU45S++F8&-3H*-N_UOL z;{)+A^o6_oXR1J%XG~d~{%@i!)MY_2;Vd#BR>D-rDspgE%&9y5YQ}Kf`E+`99z$Ku zY%)sAE-Wn?a-Ad7T{hN|28W8yh`fUSg-kQlWom8)?Aqiw1Mf?9Aqz=;rNj`{sg)aEZM%=22RohqhGAgyp9NmGH7o96I!*)9pV$;=AqT`1*70R@*Auxg(3KlatpeSDop~!s$!w{71WD(Bpl!- zw6<`=tSyL0q1cLMc8*qu{HEWXAOt#RkXgn@-EJ7dT#vnqirw2baSTm|=841tE&|jS z<3g_*%3IQ68f+ZMr;yjDMpIG-#Q8sKg;33GugXV#Qy8Zr-U$zu&L%S}F4B|XvR5Dg zsgC2mPCX%a>*p$`j&9BuE+wF
UO3B{tR@&+~j_wo=u*wvKV#W^hl@3rP`hKeVc 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

*8Z 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

|to?#Bm)w`O?y#zGJ*nEf+FN57q zke8HAfVUKNP};lXI+4qZAxUo1_isb~9c%noy>lo%2P0G72i-Ki&##|9MC$+Eax+R$ ziOMw9e4Q4s-lKIY3xW?qxox(+r55Ly{Bks?TCie>N2_T*4(eWx0MUpR%13pQcpnax zh!uxOnX#o?K$&ykCo*_<6C$;9+SD=)v-{_t^TCz#^{$YZ0OrL~$vUZhO!H+GT{YCX zs6xp1u)r)vr9NEtnVN2 zPZVG_3sZvauI7RN?J3lo03xJcP-&_LirKenteFqHz{t+=-Zy|%g$yf0GddB`=NS|A z9ge<9w`Sgj_PO}{W1B<{#|5*o__c_X3UZ#Z!1E1`Iwj|Ag2h!;af93o8LhU|1<5OG zFIb;+K5uQ~z*#H){TAhYhDqR1cgVs&Fcoad_<6PhixjnsAGNaESa~0N@f#2JmO_3m z;?OBr;4@ksPnlDs!Q`Cbjtr%G9;z+mEW;^% zVf+P+f4}LLSGCS`n-}7O?qP#QbB5>Zr?Jn}K>Qf_tKavrmHC=5)0mKbqDm)!*14Ni z-1gzBdWNh&`ktj*c^3$oh7s)}F@?Og8^M_Kx4$kQ@&$076aGUr7p|J~T!KkivpS^_ zDN<`LcyplUx=DN(CdSy34}|EUvyxwYsU$JP5}93U#W-@N!nn7Q&9s9P$+=|9kk|EsA4k8>c_WPzl)$$1z zqiLgUbtE~G1@b-;+m&Y(<6Lf87y!==v7w8XKAN{(do{h)=jl&`X87+_@Am3sH}^oE zKfd}3-48hOz3gO38hO_92!1_COoEA1gH53b7x~u3Q^^%E4u&Ff>;GfT&cwsLkC|*l zx$jYLE1O9>?=t;w=R8#fh4!)kG>R6)pnHsKB;kh0<8NxXzhX7I3=>HKPUm2Uu)5D& zOx|!&b5so<*ndb`3xwoFvNA^M^>;wN+oWMpyBC0cFhc*SWe(Y5o&&*s@bvgQC3oEK ztvu7B$jL)Enzo)jv)weI{!3TevGBocXR~Pg9Oxty4qWIe)2Mvzd%C5nlM8)!cUcQl zCT}hVS5D(Y^b;Ktw&Wj7i)rB-9rJAA8czc(tCT&;){dQ8!#J7ny}!fj8Ym*GSFUk@ zX@j-#E^6H;XlBG3@a|+2uF(Zpt(<7@VE$%~Ol`t%(d>ehR`l` z_&h)#43YQ=+Q?@4ix!hI+o^fJ7r)-$;VhN-7|G-_bduRYf4Wr^xjBBW&;KnV409<@ z+ax0?Qc24mjdryH$%bG78P`X6mS!S4AQbIiC4EB#(7rZa)&XrwwHLxXY zzkXZ?aK}a4y?Z`~!f(SSl*%^6diF6G)AF@JN~c~!wtB9mTo7t{9+`ShYV)`Tk;6RF zIqf2VWZX@HevBS1(%8oe^`^|vk*fQu8GL$gdSdHKBNb}I6Ckd~p9}Kt{%!(8- z9dQ1}{apgui`6azTWRz7xnnX3oB2Ap#8UhX4>6!ycG!Bs*%AfCS62;&%|a}h48by^ zY}mu!$yGH;c#sVWb#^^KcUF&RWjgbwLISAUqkIG3uTPIo6+Z5t4gE)Eb$SANWVb(q zymq(~nS4o>?)?#Dwz){!55H)63~|-N=udn|1~>@@!9lU@=!s3DaUsIDk@i`M{zJ}; zQ7KXjNMPpwA%7kO0|nJp(g~@|KyQ(^Q^bmo+Uu|V(?9^w4rx(=iIG-yV}RqQ%=4t+ zy7+7!L@A5Dahqj_D%^Z(U(=(~{l=n~b~lS5vO^NPgE+^mTA!XZ>jW+HeNnv*IUR%T z46`H<7ng?9%OT)*q|TyYMskXe`1?-SAFpl>(o0>=-!mPVgvnDb`Ie;0n)VcNo80bT zwRAcI+`g~c9m9mUO%vZB8^?1%JVY+bMW$_TMqY_`pFv;FuMEKN&g+%Uy(^&nIjHF1 zF=3Vh^~ZzuUh|vWG|EfK9xn5p-z$_QXtW0@RJ+BHOyxaSp5(=Y>m6}SEdF==7OwIF z67)~aYkp5xhTS*k4Tn88&c3=N+Eh*>RJEX1IYD9Dn**xLJtp4?l#Od&t`9>kk6&Es zB&|fQ_5(3VWcmtp%0iY~Em@)f*5z6mX&c^^wn9y)pN&2MUN4wsA;EvA=RAp067fpq z>I?=ub_zrf4|FHl3922dR_17xI!0;D@gfFM5t@g54i|93#AHWL#-b*iGK5-(Ah z8$xpEET4B4FO|OVNAgx)OiF5)(rSUc-82!fJk#oa?4B;ty1_2O$Lr0Keh?J{5?8(# z5%#`y&j4fAKes$J{5FVAgGk|7=dJAI8slee@K+>LPQ(IMU2{v6n5m8U%t*FvjdCrd zxX5{LJC&EiRdpofd)kWYaOB;dn6zv-cv#Xf1?*u2>@XHt*9El5Zlh9u9={lFNmHyE zy4TEbWx)Cex{-W2b>(C?JNnN-tTQpdQQ1hr8qb3x!*2B~~g>?Mig zs=%}xs5@;E6UMwSZL~36{;+$OA1{|7-N_zx!4_WCpB?_(yzzZ)qfINcut5K)qPh(M zP-W1~J%sNuI#GR%8CWE2G|r|rTrS4aNOtZsbGvmWR`;GD-Z6;-?U;muTrHaWS{|4L zfh?BE9Q1`c33dK&=U@Md8Tv6L89KlN;JG3_CrHA0+iXgs-mPVg-|g+d`{Vp5eT#>x z=dR$hjMV;ItQlTfaWt`j`p4-@JGl+x?&(=}_|A_cU44N0jBv#+;MALeQ}Y zyv|nAu+8jkNDHN-%wEe31l*%w8LE^Vy;!Yg0NdnMy)xQDkuaAtcEKGP8TFf7BK;8a zjx?ITZu?w1n$E6-Bit5Y%e0Xqq9EygAh2stxTQD!0fVD3;*JeE3BiIsKmXJZ1i`SA zR0cXD4=-D854Nyd&eM4I#Sc@Oe7MWl=k>v! zL?GfbncBF(_QTho`1V)JLM*tv!tt6G$4Q)RdTBLz!AOzA9K1;`kEnD{=%@6s7TT8()oba8|qavvz^OMvXN1^9fp??ZpcQ+cKaPr`hZy(C-4b3-tI-sf7$-s}~kH@*Cx5H%k?KsXMsr?oV zlP&rn3^CcOK(?Ea0ooLVmU0Wp6%bGZy_dQN1rx3K@ntscn_LRBdcL~MjjVO{F{v7H z7DZ1QHgJpE9>hTnW83|iWe}I2Dm#kTQDzn&oZ%Q>_k-3JvYK4kG2l1_YS4O7Fu~Gt z(+iuWdbN^qug-&Yo7a|T)$dphL7EzKDEbkl{VQ2M-rLU+A_V+k5wGeB@xv4F=J#t1 z^S0dN6~D%(B=M_lCR091Q@-UHGyp)a5Fs@{#!vdnwO+JLU<;-)M*EAFV_*Oyo8`zd zo3QlOH#>|N1^K^U$(?r>v$5k{cGnYPSqOexE%LB%l}F2v7MFj2c=_gIl+U<^U_9#e zB1;nvT4a7Mu6NY13qCRZvZX2&%LhjXHSd>%$IVf0R!g&8&Fsdxe`O-SXy1`Uam=@s z>-c_M{vdGD6Yw5Jf?rvASD^udA^RkSME%TFu{nwVBN=SHZ=?z_iOA7A@$ps*rFxq# zDu6QP`{Z1foZj&@#x-6FsnA7&P1m)b>Wb!&YwF^0ZIO^{Tc-6qCF6tBZhsMGc<@B| zhlnW!NBCg}iL2GXxOLa~OMpa@)$oP87El*NFt7PHN#`hdT5a(_$x9jEMpE9&XpM>| z@h;I?^kTSeSRcms$Fa}MiGZ#Mstr#I_e=3ew~oV*+B^Xhw}K>fq|DV6`}`s4)uKeb zrsQisutaora9sm$z4h5zseN4=I07dQFUKd-`5Ry@)_)jHR(?$wL~n(`W51B;*<+(X z{Tcic#o>$RnrMav?c_J{u(`_L4`a2@&6tie2Vy7pwDXGkYB;+7;&OV#V? z&j~eP41c0|_HcT0=5bRH_+Db^cWTP?8jVn0dDrxbF_Iv*)!q{8)71nG5Ct5+<3pTb z&sD|H1p}bE6x9e|`R;fMqxH6t6eu zDr}7q9Ratf-NOLBn1Ts4)pC3i?x;QSZ3f2KS zr(hr}(8l_&ExIaea|=Wl8*wK@c46YZ$fe)h+)Tg(yg2@RFXwtar+FZn`QLh^!hZ;F zM^WE=_y_&5s;1|J%X4eFivz@sWT2`*hv4<4CCp5j4kn&i(2F@E)N_+k<9zwz_e|<7 z1iZC8rHaWQ_T;|ijzj7mtY)PHqztjwf~Bll4jnv5oY%PNU1oz%%|@kwl_#@MLgHqJ z*x$L8&A#mw`G8zihzHQ6fr3b?-D~!Jr%XOlHr-(=O5}EKgzmtf!g}%teFkWzqoqj#X%BU}-LHT#hNobp!r`qw9 z&!i$dPrtMe3veCEtwT+!I+KgIgmV z%%LXdMXw)+D_RFAWnb3%){k2fzGZ(;fmn zJbu(nRiU^3Kbg{3Zrl8!>m#m4-}};?#-Af}%B?rY2U9LaoQUdW>(A?Hi- z1Qit0A@-(;-h?TMmmhpa<`e4*#(S}U#*~DUH4_=eh=oo|M*($GEs#5kmA#r=5P~Wc%by;JJc&X`hYy%)(FC!F7~UDVpqz}u})qX*v1w1 z1cn|;9cpd4z16I9>pGu!RzM<4e7<_VltkUNHrn9B-1WQX>~6n}F}cg6tj_E?C_<7K z*c7aB4d1sSn<1ve#?qA*r&4pIJE3Jn!RnLU73hGr90SlXuWS}e?r z6r)DM0upht)4AB&^cvXnWtT^hV*qsri@i9R07mEmeZw-}T&&Lz?bKPF?|1G(#+UK7 ze_WWK8bRZh6AhXTc*lRCHWk+!2!OCwu(CG4mg&zjq86{|smm|3o z5j^nClwH%i(CegSqy@$62`_dQ|1heF<|35#lEn-16LZI(J=8owoJ3>$ht?faUkzEM zyZR_sAd#+(nDCZe=eUxkJjhRHG&6_gj5q^OsN?FOy09XQzOFeMX_on6E&K(WZ1_9sQ@O3y{*%az41?K&;ZbpbF4CXc#?I z@k&4({QJxSKpC9^{HgXzah_rFRm39*Nzdu)R3h(u)`L$z2bA>sX&m4W7$2R)g)c8y z2|cjY54Je2C&YevGU4$tXOBgn2hqCH2_- z>`;?R<39_A^tk)hcq7A``^MdnLksPq(jbq?JAjjI`+6RZ4!goCa&JnlaYwx%#N|O( z$-h7OTTkX%^)jt*4w&ns;WX&Ssp1F#bbTCi;$ncD+_r?)e+~EZ(Hr^~%?axGh{(`e;GL_?G2=VH2%6RWEADjm z9#xRDDzvCO5`;&7g;)Z5C*&Z_QLEjWg+=xs!V%Zv+G(;{9c%DX!5V?!`DeNi~$cEGv zA~Gn<4t?|wGD%wAbTJ#0iAQwsfAv?o<^koiAbe>wAU8?!l2d$^dU@-~V=#!-g! z&?g0-=FolpRK;_W=kwu|+4AT%>W1|I=bk^##TTnA&7N7#3JOvbRu{ng*28?OUYP?ei*bYVjlrgEGPFxkmMK+b zUPmI?{kuWf=xwBzZKS>6V=Z1nCu0gd!e8*yW}BT31I6{@9VYZTYKYRufXnc{F1>r- zx?hz=u{a^;$4Q5;4lUlhp}$B1CX(|SK&`D3m4PJ1keUF`guZ4@-emAt&+Sj&p6k{d z%LUq$RBH-s}?xoP2WbyExXaeg@Ah|x&Yl=or0ediEP)he5*dJY- z#`12}drnddvnn?=6W*)yGX^pL?*Yin!BrtJ8IDI;QN@E62ZbSRob{|!0HJd>+tjOH z$DeTxyjNtG22+E#H+zbvL)m-KplE|Qbo&=jV&3XDIJfR1uV3@Vqde^i!F-hc)k4JE z&$m+H(L3O2+MGcRbpfKvnaJ$Kgn>qf=yt9`DsJa+A*Uh3Ic})QWGnt5+dvOy-&2A2 zDk=ZlzK0{2CX2ii7V$|vf!`@9N~%(47^l}h;I8KSV;UxIr8x^mahwVP%vVV0L^T@e z;zSl9Ls#~5$q6rk;YiQqpR$LNlm=Lh;=v6TNh*v|8doWIap z_ih4T>zD%8o=^;Vc&jQ`Wn{3FZ+cbUx#YLc{I>f8NXD0Mhcy5*nk(xj?aJrl@>jOF z^N_uTYB|cr${R($a!xqf4NkrwV1bKS2|&>Rxl4LP5&7F8iy|&lMj&43uP4* z1pjyowkr0q1^_KrVe`Sl?qJ8<@UP3jsZgumqoO}ytZ1|C3?$4qLe>9`m38xvmOeUO zjY|6=sd%{ONCbxgzIu1f52kV4(n;yoqW2o<_mD@I96J3m!3!YoXy&5+QTv&BO4Nje zT?0`&>^2Dy%6Yl!9PTX^z`6(GgA+valW9;Y;BkQM@r#C5BB+m7%}`Ztm!f@}sS;F? z9Vc8#l0gs0@F*Kk5-PM~k1~H8WIiXGiasVi0SC8gti=rDIef|Z(CCySTTdratOe`# zo{qkI3N2lvag+c5)p_k7ZoZT=2^zn!UwN~AaDg0CAmZ}%dAcdXgrE9pfUsPzx_TY@ zIe2DH*^=9+Z!_|}vafoSy4fcs4;pOL)a2p$!XcZ=Sfmlt5rXcxe<3pYJ*PdFneXht zwDHp(iHUP;;syDV+DVt&a~3u_Mi6KzEXyhljpF56<*j8Iu;SWbDpgxSzhG8o$su52 zrHggoV+!VAsbj5g)!NJpjQH_VvdEM32OYLCHD`$;4)vVPpLwI)K(*IK+=AC;W1K#j zJNQQ7vT9$%nDI5ly^(p%4ZYyJ-w5^Y{$0k806>9Yds$-Odc`e zZb7$(yBmDO7$ufqi}pk__%alyoPOmiKK<$xMXDeNbjo1XWrl7>udml#oPbb-EP$4@ zAKPu`K)3MOL)WU%%ke>j_NLt+^f289Y7aIJT(7>z?=P^1ILsk!*Fb%ju3zYyt77~a zNOUt{BN`bjXI8CQ;d5KS+0&vc!BIqcFHbH%duYcyA|n4=$9#W#xpEiyl>UFb0IHpb zA*UmFnFrAwwK9uhR~>w7IbCNHT(8IQ+pl#E@9z2kk;7o*_0>~NP|wpeU$;v;U)z-% zjWy)*o&+;p=@yLpx&xB-fLEU$5eI5$ET7uB zY>9G;u`O^zdKm-4qCf(+vf{6LB6{}Onayd23lGTX@mwNU#flD?i{H666f^B>B_9Dn z`Az9-Fm|yhNo0X5gq*RFz3$kVYM69p{yNrESlXS=u$p#o+;{2d_tjb%v1m?qjmNjc zoR1vzeFVMVH1G(FzDJp{;Q`~@Y!m0779qrlU%lG$vyni=8S!L3UqJi=3c|;@roX;O z(tD61n#&19+KA@_yhiN*{08}EZWxWyKf(1E?!YAKaMpr=a;55 z;Rv%J(>!{`PNr5j9X}^I`*8yHI(j~?rrvsL?35h%d3eo9S}7DLNZ0kucbbQ&iaa^$ zD#Nq94fvpXgLzWENOs8nB~qZ=-!2{%9zg_hXlE;vfP7~|xm9?Jk9A4@O1oObpw@~8 zLqqahZHP8Vsj;ss@MjA};TsD_uiPhDb?}4c6%6F09q%w>6@oxmC1hZKG6{Y^(#d6G(pt=2x?>EXO4I_6;4F6L#8yiX}_oqlrqH;3Ky_fH>j_0S?QGaZ*?trjyKR@m_ap)g3>GFzbmmfiscRt6`hiK3g~q zG#JWI_(u`GM0y;Cn2gKVQ8)o-SnI`KOQ@6gOqux0>;tKVy6_@{lPbm;Q!0SnY6@DP(z>$|j`P3N@)qkr>8FF~w%p-S2l(}WXI}%`{&Xz_QQN(%{ABFt7N4;Rih`gR+il55eQE$% zB-C0v`~+@u*vT`dX(*YokdH80mO>LhuQ48`~Wz*#Rq|*#l+!+AOywGqKGn9?3Ua8j^#kD+TVwTrXOk9YK zLDvWMb4C|dxUz?gPo~`2ex?0DQVz@iT*i^?tVHiZvh#{hGQ_9`iNlxQPw~i}usMm5 zT=x||Rx#`4*tpNPhsM{C`ecxyrKRT&$b+GJWQk2h01SHbbe-aIfKBSXNU(_{vgOLg zc3KS!4r+vzwi!`i&eb*)3~s1buiy0@w+vt7OB{>ZR*;Aq|5U6rFR8B+Quu2*@9HZp z;EW78k@Z!HZO3V_mUW1^$&VujZUp^imNbxwj8V=mK!~3Iqna5*IgK5UKlcNrji8)h zn5Ato(y5%r8UjD0K305t4w;nVYwSjY$z?hb#w4vlwBDYN(g4v>@az&R#jr>`5`4?76p`ab(6gc`D0jt z$w|XuX>JS?W_S=*UoDcEQm5#6M{%OI3JYL|a;+wrceD?sHi(bhln@-0pTz}>y0r5= z*F5!t+vUxe(~HL;aYtIS&9Op=^$@;#$>vU#U8+@qmg?^aUrK~Y?{N+(Dbqa}eA+jt z&Ju4?QLE+w5wfFx-yi=B8Y*umaggY=7+wLSL2e^PR0ROEZbCDigxbMB=YU&UwBT@;ad&TwQ^E)DT2&I1>ocaHF71A@p zW7o4?`y=X#l`2mcL9$b*p$&-z$2Bt5GnP-<(BmONJXXp0gywrn8J&Ug3{L-p#G{CPNf1+qxa?kb*jGr%xp1&Kro6}A`lnYFGi%ANAC_*LL z58-pO@T8YbW6t?Yq~U!Gw@_Z106`+C+B__z^1B6T>6im-HdnC&n?HzKU?xuLRQR0yP=3E20)><|||)E+Q;mmL%3VEUDC$Bk*u36MVSOk_EKa#aam zkKi(jTB55LXfEUr@^s~@{Kp+Q;8@QBr2&Pv3I%Z+dmxqLdle!gl5N?8B;3pI zNu56ufH7WQL72l-MmO3ioFyQ0k0S3;m=|fF#l>-!eU_=IiQMFwu*1jT8za|NOOyIK zs#y?P|ID)7I~oDPijrIyXjJy()6%p}UEe&(bvQnr>S`_H}6OlXcT2_9!DgCAtfna3@y(T z@~(2f*Mj~~gCTyW4^1CdS;vn`JJteQed?vLsB@Dk`R6iOYpI^5vy7-<<<;>=#ZMGo z!HDXI<&=;(*jNe>*5FtmsFY)pF&8J64xf2==WW#m;OqsLXh>eG3^(93)aK7Tl2Auk z2^w`pu`8$qtIw_uFN~<#VS4sRVu7umQ6T&rBuGtdzJWY-?g>mVG$Ekd^X(nT@`1|c z`SGhkm5CFtPWxn^yc#bRNliMI9yXnETlog&J|staf;j)>8$L9`kn#`FLE*2uZo1zo zA3#3}6x78L=3hDVtQ26FX9G49?N_`0sv=j&E;3R$;OMXtGj67EsmIvYM0Tz`D4f&n z`yc@IHv+z>&*?jb=}?U91P%zDcQ#i6nv+C>0?;Y6K0*P>ja9H~2TCwqF|(61OqOd6 z6EGK#{c}QhKepbANmB1>KGk=+|K#9<)~YIGbg!8OUxV5e;!d$!mT~iO1?)-vIaET{F66^dOXB1e{J_x4zXbZQR!}A^_a{oeI}58d zFGC|J8{0%2{dr{YUzBW9!w{dAxzo{%691<*$H|_142d$+9e!cEvK(lJbHsiT0x59X zb~#81w{<9H_?(W^v`Zg2BQFMTukK3x6(dtcoku;bSBklruUSIjqcE~acRA5wKh+*0 zu{4FCNIR7hr>PFghqrp$m&)HhxYeWkD$q`w{Vab!QT0BSUC_wfd$S(JV2=87tEjtg?j(R?H1`4 zL(w>$g=O0Bv^I`$7zx~yfRo2EKZQ`p*2UXq3)V?%iurc$i_Dl3RA5%O4ey$+>~P^J z4M$3>R_4-1(VJZXqmP96L!4_}P-9U+-jXgsMu7wzEFY0-Iwupyt)oEC(-Z_P*oz3f zvqxDkc71Q38g%guXnqp<$m0rJ8glghux#-6f3r&k7sz}fayX}nt*;tf=Pk)*;LrjA zvEMhA0*39X_YeHo*>PGHd~@&89JK{ZNcrGtKU4*6WimXZ;GR3jc-+pbm{TQwahA5` z`SN`j2^wPaLNBuelXDB9jDt3xe)+gmbjU0hzfvRER1+g|n2QAn` zqCwUsKDz|FQ;egy-;ZrQ?!_gjYd3PPG1&1~W%D;bn=~tU^VV$pI3%(zY&CdBJ~vp<;H#0|f*(iYFCDEo{W)PF*j-Hd0>=Vz z8Mkx-KaoGK^LZrQf$fek)bqoA#L9M->HdF0Ap+*yoR20p>%M_z_4PPn;c~N&_~_fV z|Ni;xcaqb{ZY%g|z12X{@2opOm8CXROBPky=_TSw<*&0K4587wJN}UfIk-AC4d>yE zULH|*^}XAiT7PSd-+Haa0$2I`ONgfnfVr*#~wmQ%5w(e6;3o6KeIZFE5EK>5Y>d1=kT!)n6YNfg>^`p*&P=Q3u?w; zg&L8?!G*4AKuVlLZ|<+cAEdI-Q+WzwIvV>;A6A&NgNI=qePJrI)gJjgYw(s?=eSJ& z$@3)Y8MDnqq2aM@e~pRS#X|%IQ3v3*p$1_}IZwB&KROk_YeE80Hl+;ZU=T&kY(aF3v_ zUsg`<4(2r`QBPqHOLv@2vk72K?WCvpwcs4O=X=-Pg1p=Ve=1|~d$Acx>4t~dQ&b>E z^N*zG*V!#2B$|JTN8>Nz)S8A4aJv4+QDBCR{6JcSV{K&i=v=cXP}Cd@`1^GAw7?~B zuH}$}+WS0A9~_$SUt`rIV^Q*}%=Z0WOZR&zOif@Lv1=Dxfc32OaU*EHxje&cj<3si`)ai*KGAVXRbw5Ofg}NPY#O6#wJoFq=Aog znSi|bTq?m#kZNZaYN`!lDFjM*LEAHTT>9+V;$jQb{`u&1UcC(1 zeW?_o-w*1X1)C5HCxoF?#`(qDxNyk8cJ0r>y-o8-y-X;W*4rOOYeue`#s%Bxf8=G1 z{bxvo;w=W6%NVA=+koq>op~C;SEXUc((=C(Rm3z|4MM!Pt>kr} zETXK8uwl|r7}51}hb4z#e^2zH1$R|>Gl?;wBtaw88sB)yw;l{S0o!% z!h`<#S;Vj9ge>6}ic?Lofj3eN+ zBp@ZVv|#|$zjEc{UClXHlP-COywTOv=P*WKd^^ew%`Pm3q*6%}W1FwY>6EyqfPDKwERlH4?!OIIs3OX>rbFc%?Pd?&A zo*Bpa=;)C54PtV#*iHa?#;1n;I9Q|QO<>iwjv}19fDmZGBK|l!xDGKvPD8S@W{B{0 zKw|4~;J1r4PLt(fOg>2)q;BWJ;QNeIa9X)O`50xTFDju)MCn%Nvzw48DRFP+t%R1u zT6`<@Rn(}M+(lm09y*iXG2s{gy}(V9WEkDm*wO+x?EyJlU=c3Q0u(^hxOW``dt$;d z0jmi%r2m!yUX)!^uZJwKFbj(9afeZc+!LSlI|AfJhw!m=zkCJ}xYT+n*w{_w3z;|P zd6HZGtPn>*%G22aJ`^*WPGpbXlO9+n*mghh+0%H8``Qf3c_2o0DUAxFg$#lgXO*4{ zwPgI4-@j2Q!?%r3GMk%y@)=zDAMaW8s;WAZ-llr!c?mTX+IW{|DJYgs`3s{ZLh#b7 zaZp9b@dwQEk_O^df!9dRz!0FPEZRcLFf%e$aW-T&kGV+R%wiLAI|xa_N?A{dg|&#; zQPqBHIGR5P^i79DgUMbFLWsp(r2%1+Lh{lvutL@h1p6vjY$}|OJiu>p`_hHhtfpuy z6y?Jk$d+~}8M7mHuClDPDFUT6K(5M1ip!z`B|f{R7DvC3;NljMEN zS-(P7e++z|r)eI0+7?^0u$W``YzqriA_RP%a>;x5aFc*$TZ-NoM7@xm(^e({TS z_{N|erzX-Vmn1Z{szb;AfgAmvtkk#Kyl*ay_>y&JTxysP;<~{pn%~I*gmW)>+7+3; zgJ2~A4nb0W5%P8MqkP1oJo6RPNG*F584{bF@XREZZtbdAvCqWWEy6b~*-FX45 zL&#R%DIAhlO)5--;^KJrn*ub3NU8pBaU=cYKG!i5w>hh421^JC!%t=3#r>ek!`2kX zvKk55djuJz_zl&JiaFrc2?6kSIMEc=HCL++Kns>wWO1I3{VDOmg)>>K_>E+ytWjJQ zs61xvfPN@hnv^2A-8mWs%1p^K6W4jiQa+TYnK6M{d4lG>)?Gd0ToQ15?H2NzW!n7l z^6>ofDI@+jy@>36yVzU-X>b+x@Vem7mAfShsAhJeN$KyXwL68O0aVwz7C+(zi5Y#5 zkwM_pEqLjW)#MZr5rsPSMJPjY&110Bl+VkvRt>16d>xpK`mK&P{(|1(ZvE?~bo!Bz%6Sm-|#HpDSIINLU zVrw-{na2*v0x4_>w*uH{44vc0pr`C%_>nGM{z*7*G{I$tJ@h4V?jLo6$dd($~q+(I!m(8!%} z#%l;B4yGu80Mjn#1#S9BaQaH1F`%F(8@@yxni zUyVbspG(yX4bHDv7}>NSC68*(iB>kLb`wm|NadF{00U!qYb!9Eb}KrX>9+T zJKHd{#N}jdn%ER;hZ{|95Jl#ge*Ep{E^^bhAH6e1((v_{|JJTjyAd@L-?Qb`E!Ukh*JIS`bYwY^0wSc9bgWz(Kkn$rE+&SYNz z%l{7B0{D1WRJAwoApJ7!El2Nk0L+Gpb(K!^wt`$Dg~oR2nKek`R-zur-(Olis> zt7685`bbI<&h2!SjO;tDfTe5J64gE z^%GUBaXYVb(6LVC4u%o#H6$7az}MmyHJoz4{ufp6;9ghYWq;q?IF0S3F&o>B&Bk^b zqp{J(wr$(FX>6NqY+LW`_c!y-%)fA+=bW?m+G~AQW}=k_L9|ssX-uID?7o=h!SL>& zKpdozp+PC0;6W}eUUznK??kE*fyD+_UXEjrQo}*4HsxAHgFyQ3q0h;&u3hT0tHvx3 z0LRW)Vc9z+4e}%#EA6!Z6<3vHyY)mY_9+HC%7}vbFLJslSFhadcQFz35QlNQr6+Rm zB5294+J7Mbw!Q42B1ehGfs;#BoN%jJ->aMs!KDum`HQqUIt8dELw;E_wB>f-$Ne&) zLAiGLJOkbv{$t2+T3(cpgzwzWbMwA)@$wWkT94*QbK}V4r`qBggOPl9Foq#RB&17o zg?TzOMgz?Bio=G`F|HJ~(zF5Aor*w^#NP_Z4M!7oq=HW|FLS-c+KRT}?94NQ*Z`64 z(d9q}1hdN=OS!ASPO(o|A=GpVX?t=T{jmZrTp;6Oto*|eOgJQ+*xI=KOkSb3()Fhb zhXW0)fXJ}YDAw?nm9x%hFxyJF4Ptm8rvc(m?z! z3e+Mtqhhi#nW_ir@unDdwBcKn!1DevbS}w+tFe7=D8IU%i4X++$4lCiiH-4f=7g+? zBW8VII!FzPiR6|H788tZ7AP>UjIdD>)TT(Ml9?2qqIJ9^H^eqGuujz>&e(j8I%P^O zaP=N0V@iu9$ADGVHc`{jnqx_g@W)6H92piRO^bR(+A#y7c>e~hW!(`iSrAHQ91zV# zpwhtNEv;%+@)c_U{O3-6R#o`}Ous7kh#@B?!+QS}J4Za1c^pxZInwF1zg6wrB5e{5 zit$AoBcqc?Z?^-iW-7EoCj{7`@N=IbiSN|h17;TT|Yht_{t?nUDf~g z0sziIunxBG<~NZV-S@EeZ8v2kJR8~T!h#MZ_#X8DZrNRV$(VGd-y)cMp_Q4-TNU}= zh_>Hm!w_^e;*bpGj%Y_lTXn{7r%PWN!x1dM?lFiv0|gSgawny z#!qPZa9+uV?SC)5EC#U8xJ}n>x`!E>FXIs`>EBMp6#r1Fd2R~s?_c4UJqV{0=1IU@ ziI9N!Ns3eMPF3uw?8{pbcNN~V6XmA}10N*sX~axVE-&zr*<-z|>;apKOsIOyM1e5$ zgaAN=D004s7g1v6Y#&=T?+&l_#Uegh-oBu5$aO3GyGmb=C>WnjTM|z;H-e?pKj!|Y z*KADp2hP`7Zo(nM=U>;XoS)uaIzOt{sNFYJ4OrA9vnL_sX-~So#`EjEK?O18{(xS# zOVn78&?Ke!;=qB-IHj@`;lf`+$VL~3$^^7$?PyY}b*`w@l~G&iqEZ!h{?!M40F`@Lqz z5atjrt=q@b<-Sru$T1@n1#oj`@|p*iV-5$HE@f6DrOk%GHbWwX<@^+k2)75)IP^x_ zxp?K0z7X>LO{@v-8UuZPcKlos7*4_}Q`(vzJ`G(4e=@syDQQQ_rAic)pjxXrW3|lG zdfw!O6+6tQrR;N!Fg)&2TymA~M6D~(FdTu>Lo5Rz2JZ9GFRRsoCMRF0SQi<+7t663 zgt{zAw;X$a?85${N@RA{lwe&O35+jL_Vuwulmio7X{-5GvHfHRx+#kzAViBfa$ywo}p= zIBM!*xXvQt65reTO-|cI+!L0>w@r8k#K4x;Xq9G62&;IKxvH07q?D^(pEih;+FS?z zqOIGx47L+9h+;zF56PA7->ctu_qi+**iNCjVc%M}@h|zz8Jq1GIpB2#41R2(ZSmj( zi2c~}3e(gDX^mu#?fEzhDkIlt%*VD46(>JwWG{5F)#l7oLj71KfOIhMd|k1<;QnaB z0`+$4`U%+lyYki!+1tLEH#{BL_naJLKf7tXcRqG!*(o5^F5E)&ckzghrcb{}&B29A z|D+MX`?Rq6>N&H+(!x&T0CNLfrYIGOAoVJcEC8e^4K6~E3=K|ZF+@s*f<{1bOETGf*|xB3$KV zadu-taFOgd-a{AvAxlG-E7J&bMvGk(v{H5;;;|hD!e)lVew>`DA@XUt2|#=$1!5$X z4~igbn>vo;oF%T+m9=;-Z7ig@e=PZDS@Ul_x`fi}zwVzhD8`d-REYxE*;kNwi1bMM z#6v3Mk|pz6EI-EOd(Her3{Rf}d!-yY9hu|?(dnpcW}B9Wx4ZGkM!k!!$xw^mnjN&+qYY0d-^|NV}iP- zt|%xwA+MJ+E}ysE?0Ej|+fs`2Vs>Cs+$Um(#D1Mro(}1nHE+26X_Lvo7o9m`HQ~!K zxqt*XhbyYhF3G3@QDz!aJUDIEg#JGL<1l|}=(^X-&=BqPY&}k<)aYe`OI4)NaWzm5KE{no(n`#Lbv0|#{Y>p||?IoI-pbM+W zue+U4ttDquno6k_&kBZan62UH-2mMNkL;SEQsGb5!j#+VUrDH72hkUqtJ@-_PXhEi zZ9uZvrx?MxF4h$E32>jLrtuRjJ|AX9I{J;L?l4EQ`@J$mbX%?vHo83?_4ibdK;q!a zTFesd$DdQ9nVR6SA6bq;d_EZnD~O|bZeeBPXp!YE`nobkApw) zBL-Qd;bRSRMoW=uff5cE_Dsc(8wq|O{%=7+&?4u!fZx&edzKrhic`n(!3|FL*9Q?mSUIA2gi`P)i*5ksCTQ+e*o~b+; zXj?uW%=@JT?vEPz(?b1~=RV>h4Cm`2A|CS#dt=GU?GisvTBmP-?QGvOjno{9fg20W zZ7lH*KgHjxEGR9I2|yrc{h@3$wk$T=hR8h7Ea{Nlgd!ACt}qIq%!QF(%>>eniyUO3 zEhls@+#9j30ccpazl?gaH#ysAm^#iAsyB(vMrgvp0rKnDRp}hP@m;BRr=6x&H$p5{ zRX~PxdhBm=94Y?a-L%lInf`j8LkQCHWsGUsV}QUygQLQrKxqf8%kq{>G+#qMKwbJW zI?eh^ofPSWxQwfn%GNhkVMHnPSIV|LII_37#`xFtUHl;XtV$j(^>y=z>5&v8Y34|q zEw%09Z_O4#bSe0e2M*~+@u+GLL*MVJXyyd7!akGcj%i zY{Y)a4_-x9rgui?ln9qOO9xm_L#hM{q8V}kN}PKGm5IGhdxoKgBwu#8)9Ms6t2rRz zK3}z+nEVz#T9sQdP7{Rbc8M~fQ0nTmEVwRaNb<*qmaA$bUkEB!w_ZH?!htTNJbqI) zkW@~g2O~Df&eJZ9x4NwnwU+Zp4{f*VDE((bME3Dj4HajZ$+*9?7Wnr&#jyO9Ge&_F zTMniYwKDY>24<8BfKV)Lw@O&vL+?_y8r3cnVa?6Av&-|s;@o$2$liC!!r~#~t_>Wg z)dMfG9jD}t&GyPbrjCm@H}AdCpc=LtX_;L;trl{i6J;#?Q`gLa*$tClgvvDGKH4oN zN%VCxm9Sk#5^d+Bnqt_+4{!oJ06H=# zR5y?xRZZl|IxG#RjH7A7SDpIW+sO+ni0#9d0Ii|A&=mMi>CzGHLG$}v;l3G*8*-Z8 z2VTX~gK*GnLby_TY~X`;2CUX)YHRjS94ZRZyWGv|eoX!$#+R|`W;GX%8HS3Fu=##fRz0bANqTFN=c%$2i~4Cnn)TF)hPwu^jezc-oPIo9b*2vg`jF9~@7JeM?e%o! z2w_Kk{30H8`N<;#w-r5wYD5Wmz#vBpF5i zU_M%IKO^Mjl>OGDidc<0DHb_2xL`UxaE zTiMGnedRxr{Hyrd|2HI^5zlQ;ilpHM;!S32Oq?d9WS7oVfcEnsRXn;+{dRpil|M1F zUn{zU=~%C9YJli(T>=Y}V}`hlJB0w1>}ya`O!qUbke{^$pQeyLr95L29am zK8!f5>X6o}Vbpz*+>aiqn++}0B@j}~%nsf~e6P9$#BFW}U{1!&op}&2YgS&5e`d*Z zx!thVjDi}VqQfj@_AQK+U$^*$tH*we8=l>xXHJ&B2j72n23-{Dy!wLC+aiq`y8KZp zR&j*)h-QA5R(oT*Q`aNk!|GS}s5OX-BrMjq8nCrV29WaJ#@9+hq3ZR7S*>r1xY4`^ ze*JdaSWk~S+XHbA$6ml>X@QI@TY|+SqykTtbk~x`ma3bch{lUmrREI z1&$SCe-k=OSJ>a`^FrVfg06i6Y;^;Coi{y9qSz)Fyq*Yoqk2a0(msN#u_J9hkUyp4 z@spGwO;ZNB72)lxKTCX^eZ`sqG}clsO~*vS1>b+Lho9*E*A5IdbGrTq$1aQRKJs?) zzP(hv_C9Wfr2l(AVIep^UtSx4A?TSJCkpfBxjhXl^r>(7#(}zHp8ZWQkcZn~eTJ8= z)(A<=QOA()SQ#f#0vel$60jE6ECBC~p46yskiPaensuId#x^XPF~ljeoYnA@th6dz z;#S1bmw#-0P_CoEdm#rB*PnPScC^NXGc5`tDnU{3e7*zu6Lq8nRKAL&tH`toH7g(o zV&n+=r!%4G8dGiFaNuWL>-}$23>>3$&q_aVom;5PU;)i!(3AQ7)Rk7e_6hAfA;O$P ztb;V8(nI_#9%n^{AeI;<?!bj4NIkpyf{x=x}c0R$7BI2eFdV=&RxnvFK zsFjoCqGRZ`VfQN0V$y;Rjeg-gMPiu@IXZ{&@fg*Q6UwLwmJ?y!KPJx;M#{Q=I}5e6yj*S zQemjw+34@0xbgE*;%ns9Q2=DsR6Oq(p}0rH*Do(f(XdjbBT|bxs&JVb@3Ro*wDcLZ zDJ$Y%2eW53H}SYq%@Di;;9YjoqcrO8>j=x+%r+eC$ZH$iK7X|UoUyovf2`GTZb*XG z8?|DLziN%BB7av=PMjW=c#&45*vc4B8ts&JK!?%1cANN6-&KN4U3T`&lfj7UlT|^I z7{`}NaaGmom;ghWpXau`{xS(zxcX`3=urNz^m5+6tB%_T_^NYe$5VEi0mb}zi%WV} z&yNX>=8289Ow12X(Sj?)F9B@A&J%`8{V{4LmV#3i)e`{aBZZhntUb%{wDAqt}H>E--+)c~G&;$X|K z`fD$fqVGh~9vViOGN`@EeW(v`p$Mwr5!Sn^T2{8g9R%9`>icZ@g~C0K^fIXnXAhr= z+A@|wtLvO^IvNqm_>KGFN~PQaxjcmjlxw6TuqBFgRK*Be+V@=HBT~$4q@D6gRb&^b zeY81qwd*>z-z@fEM&IZtx$ja zi`!ZTPx+Frqa>^2I0)*cgVL@(&jXVcck>D!-ZH4)W^G^2F-~qOpuRNx)1J~KEo|2k zq4b~H9=x9~Nc?89oqd=V-KnATpYu)e(!INlb#KjAZ(2 z<3$BJrVWTKmGFlawPk~C@zc1Ns;n$Ta=o}4^cjRpPF&Ylhh3{)Z0TMX4h^YPfH1m{R5f*l^Sv%n3NSR&hC7grfn48z^g)bAc}+i=}i zYqtcVyfRoyId`>5%6yC;Wt5L>!J6^4wEEqqFk^b{DWDCWC z95x>P0>K;cb{V(DX5Hreg{E(|W%~g1vknNVR+Nu5OOp(1kkKJ<`|>LHuA+uM-%3N@0w;Xm*W)D^M3?|HC4jJ zjYj00zVJR43Ij!%?`7hp6lcGUK?at<7m|sZd6(WZAX8CHvZ)HyM>8?xEw&poUlVKrEfj2DBM29`l z7>xDBvi>U&*zHKT`m6mM8>!z0fAl#+4ABLS*}UGeNvjd>H|ppFz4|!D9G+VvE8*#I z?7&LeLiBKEb5U*){N}FD4yH*&+$^{04`yX{2yv_kkoWhgFi&1HR-h$z8Xv{Fk#V$z zGi1wdupZLoIAv^UYEz0a7<~f1x5#B-XyGDW3H7wq;2x?&Eium*X zqFVfoT|cm7n-3xfM(i*ujc2i=@#v0=ZXXSkugJ@Z`95o?QpWmYy*-5Hr=6{0y#@FS zXlE-@8$0~kE>Q36$egZG5P_&QH?ckmJYFt54{SA}3jiHIb%j7q9}@2z7?}o3mLUXN z6^jmFm+9kEk-9(?k{3ikba>9q(+6SKsoG#3c_Himc4a8?;Xt6wP#NWoe^Sz*?4VLp zmC!H4Dy20vX|8_mWAR_Zf;rF3IY4W%q~tC5+KEqK;+$F`?06IP-z766l(4=;Ns{`vcpZYSqmB`{7bcn*^Rk1~^O95An1vYrr}&Tx4_}09+WC zGwA9ciLOj02JYRTX2z9wzKrMCp;~J9y(>(aLxUFp(C(nKo<`XocaehYlP@=~`J$cE=<`9n&F#Wo2|1OMFUhRQQs+r;a;@`RX!# zga`YS4OIPL6nMAmV9g~Nj=Oh)r!J6C*_?X~C%M-a@jl3v1=)I*=J}lqFGYt6GL<1D z2Z)jm2Km2~$)cRW3nxqdE|f5*YMJ%!N<12`fH9;r#MCk^M+K%(jH~l9&BWM(gj)a< zM_ZtNwvJk>(bGqflh|Lu$I$^1zQ0~o8j(S5q0U@%-vugw5Y~7E8=4Um5$$D?PF2oZ z6%dpMzf|p8FC#O<{!US0$n&pLaOv!=E{oMSwn$_#DAPn(QA(EdOKZO*7NSnaGzpF0 zvVi!u?7*YX`)PB>q~Dp(QhiL-MKyY>&A+YEj3BN_z)O0&#LjcAq37ae=|jtCUg6W4 zx-a&nx_^dPex-ER3~V*N%A)74(pV=&CQ~qB>+v|!c&0i2h6#^ZuDmxH4EnOpQx4Rx zZ`fY7;#wFF-{wtrz*#@!{*xAM0Id!Zh<-NC8_tObU>&3swObAJOYWNBHf9ND$mYJ|~B~5u-U(p{| zsMp_4FWx%n{nX#KWG>?o7DJ;73@Q7Y7kYTIga!P#-Q?c{1PYHFERiSNBj{=2=I0RX z;RR^Yzj@w&>;JXqirfB4J`Nc-6Ph^U&5wJH_i)>o?{Nb!HkI}*O@#v^z^PbI);68C zK!>JP5~5o$8Y2<)f-2i>@G-|FELM z%m%-Uii+1^9{yq(&9_Yu&fL^*K0)bN~?ngiF1oGZF8@vK`jOUbDqP28zH<_kSVt1d>mm55W*?Ch#nv_xxF# zfIA*^W?|p+R$P;{sS47G5*`6mOXQnA7SlqdhSC2bO%I%ITP9wc45o~T-DfA|Rt6y( z*e~-%67be^h`Izubxe<^LK&%=31ymvAb5?cq)3N?jAELPaMO~dKO@6_c%BW9&$2of z>(5k?nc=Lx3`3Qe*Stq0F41cw8bg17-A0tHqlge6;4!i?_NwnO>EcFlxJC1x^v7i2 z;s_H{1;Gmq&14?lS;I50s!fURaP7w!@hf-XbQhc#WcAuSqe4dCj{D#MKHVGmbOo-M z*{TfnvwgbHqfqn5|8FkgMma#{TL8zniTMg^Zm;wdtrg_5RblU?E&fD7bNRXPVZLsMo#

@7q;fjBULtX-OljZ((aJ-!}hZy%dTp#gr{6m79kLQHU??|Q!&-$pA`ii#|O?h zGn|pXlTDSO5Dn|@kr$`E5(UWT?Hr0i&5N90 zom2xdz5M!c8Pc$OJU)^6d%k00ynXzk0aGoOO(7~1Ca3iQ#E{|5@!92k)j<}G3=YZR zm=e@B2@yoZfBkgPS72_7_Pag&G#GCuvHr|XERQHoEAg4?xQlAQ58K8V3=jCCvdQs? z_a&ehh5@R`js!Fd`4b1iyo&{c1O32Az2=2M`sB|~YY?F6dc?VB;747}x{25Bh0kuz zofXB4e)Z7!?u@^fi`Mb(96{Z8qOFFA>bd1jD!>?2Xi`_FMe)h~arBID&+71iA4iG^B_qf4(CO0m)0p|X0Gc;T01xL(xn7X#xXWaf=Z0;h)%>tH5 zr?6oglI#gUBC^?z*v+sp*DLB^AAl3@Ah{ei=J-HRz~7t&wseedZF}JsL+Nl~Vr4mi z71;}L+tliC4`p%0Y>AeCw^~WG?2v(bqIw6{N6K!>LtwgnLB>t{FhXuYktn@FKzXXTe{C>je;Z|t&p}G{%kIau-jwe%d8=NPcn!L{ z+`qANNbJIj z;&z|2)*Gfj<-X~YF;y=Pk%fu>q9x5U344)#i>T-1!g}L9KJc>kaa*d+b(`gb|s{#jaqCo6`xQ*{7R!OIlZ{*P|j{U zjVFg}X(W1?hfCv6-dFi_4c-m}^7tO|!uzHOWTjQiayJ=t>nppM&so)+)3V_9MQwkF1lJVuGA2NAn<1(wq{pAvI= zepnGMUTFNIcYrk&OY-LCCF$)J;?9%oiJ2c*ATXSYFd%-MV!%BfLa*tq)&+Pzt`&Zc zg<_599MTfJ(eFUM-9$~J3NM!11c;Q<(LtP^$uah7b~Z@9N?*MnW{C6&h*|&21TB)L zyw0>h zJliLGxAOqr4;MJZ082n!(cTzSKI-RX|A2t9BL;_7PQxvGc3=tICM&jGUDx!|fW=O& zd@X)mmmcL4kkpV{02WcL1_?v8$isAA$fI>={?7vrM9;G?HLQ-k;CyJ{=b}&Pu*N#| zPwEh$-@36i9f(`R&c7zH8vf6phg4f-pT04S2mdW()|EO^qk=YK0EcG_^EJM1p`IkM6k9Vv(CC~M# zEOLaJK#kWF*%r7#gBV9-RYXganVE345-%mPh4p$@#73dAghI{H=j34@V|^;t)PkQ4 z-)T?NTaiE`TB%$R4#PYw=r;ivQj*(~8A|1y-<``OI&7k- z>Ww9&&C@J08o0Wio(;T4IOJyT7QhAo6(CAbu_NtE6X&sx7?8>RkjOw_BWu&4eg_js znFO%#b#B{sg`T#h1F1@$dZzyQydU!ORA--t=~pP5bO6?#u&`uH^YrAO^SQkd=@Q=OxChTTe% z9n|4melNte$Z@`nD8W$nvJ|t1k|R@XLzG8&KIXaTz2y5GO+dEnsE_I;u|FmyzcK0@ zr|=i?b-ZeEOtuSiTPx5~;WQOVhLyTt6R%)+!`&c#j#danRJ_~8EBz3c>xq5I`mWUH^n^L6dwdHZSbk|=83>{89Imr9u@mP zjd3?RsxOZLLR+?6DE#jMd>4XV?-gIjcJ8vkk53DTL49Xt_rBU}ZwCMRIHrFi+VZ;j z;I}(^zw3GJS79W_IW#o1pwL6e{r82cCjsH2z$)q*ec>R>KvW9A(2|%hN{&Xg4gcG) z!(j}3%WB*c5d)O5C$4BA<|CvQ~0ueBpo#tVm|4!Ll;!A=tW3eZw4RFa*#DR8e zAhq~fXyqAF^l)D$B$%Q1Ll4uNvB~7f>(m0$U19cyWO{PSjg1j73~1LnmPPjv3MKjYAy&Ha|taKcvQs74+O)+M4-b^p==cK zcZ&M|QyyL9(ekfu=6@`6bOCAXKSw&?$CK#4${flMAyZi6ME>jx z5ebV?U%As07~ojA+F9V>iVO72yf6WIdAI)<4Pg?2OFdjL!=U_nTQ$E$c}8kn|11r?fe1rX01!W#MkY-J{EKV#}iN-D#xGW{9BE+BM?q$c)+{DuNV){^J`5^<%&J@BWTf0U#~ z`^(b4e?sM3k+B+@g;__z^n<@#i#x+FKN4Vn#IR7O^Jk@Yik!)Z2*Z@E44>$2G)GU!2X|8moF@H3)jypA=rfO|BJN zDTfJ}{cC#x1%2gc(K!jN)YDuC9XAsx)gOb-7d+2*LTL$qpXb3g=l@VyEGie1Vc=hH zF5FKP-x59^og+?E@3Rg;F)X+p<&b z4{S`Y(;T*XCu87|E$`n701s^a8GR9nHbYX-S8T=HKRirufCmgMDAc z>^Q&`joaq)ZdRPw1a%pOK`KcyM{ANBhNS^e@4vr_!p$vSuPGBzt4oy{6ArV$4&fg&#)kPkXGZE(um*uTF$Cdmc6MqMcW4dgb_^`^ z0&KN-BHaCqp6p?RR6D{;6MLyleY8Pgekts5%$itAy?rqP&~0d8%7rpx!56_^)A7Tk(hJNA z4lcPvM1t4c2$t$qLv8)@^+?|kLTu)Vy9oMaX##VDxQ)vQkA zwci?K9(5Aj?3**t1ytTWU?yL$=UMx*3m0Go9sVz?XSchrMesjmXaDVX`2ns0t$64( zY!G-Z0B*{F)m1T%ujUDR_II8psxre6C0udaH;WZ;1xnG#V~dq2iTJG?Vw4XPLG&3-kV+-a=xTgp`E)u*aPd>mT)ytcdvlR{ zvq0X(+<&zZt6RT$X>^ttG0~l#yz#Tw!5;vJwnXfdoasay92n^)zC4k=Rf6)uuTuh7 zqg;vuG0V>FgKN4qzi=`ZxL&e$id-ay9Gk(|jzqdiojalPIX_ps+dYQBfz5zhtH5>T zTR>tkQyEDEiSC`_jtc}oQdj`ECFoio-X*^SW;CWs=kS|0m$8wSP|(F#4K!%urN#ce zI%ezoeX6<~{Qb1&gl8xt*|K@ld%2MZ6U5*9UM^Za`+{n~K-oxY*)Ofv9|H$SL8+ST zGNVR2K_0Q1&ywcJ&Lu2QDmOX9r<#}OEVRmV;+@lqnhk0qKU!m>>(#8H-yv;)4W=+w zs{O)=>w)c_vC#cl6wsC!;ZDz?uud|T2nlna#fpnPexA7F?-u7~N8QL-!?3@$R(y?5 zt>)ZWH-jnb8!Ij+4G`RvaXHrtXb#~`ozYK)96HsC_z5hOn-D%|9cW z7?tc8M;_jQ{KAu*lC61=c{nyTFR4) z+tepwnBE4>Qo;M=~Tk103`s1^n6ztVkR^LZF1r<&d|FPM-?E( zt5dj0maKWcN|olEiIdx6$O0^Xer&$~7o$d=DEvh97sbE7{H$e_?GJSK%@Mtto};m) zuFiDD#Sfx7TC+Ar2IlB-O1wcUb{Q7PFgY~rYzWS$Zk*RbVoJ+qxORs(T@hp4VUSai zS?c}8@uf_IsOy=HmAaP_z88S*`S8bGQ#3lh7XQK$KevwY%;ENV9pAE^p%ME~?4`Fb4icP9C_+mlI zEhpEEO1$+BU*s}(^e1B<=~v71L*EPA=DPf%o)peAb09+(Xp8ziNTEWHcUAIE9}4&7 zPSTGh>xPEPlmx*Z@NB+Zoo12#O#X;yJ3N|MZILg8{3?Hzb;yadGX$!ly4X*sd`wu2 z8w_Zh*IfhmVgocp^a4CPeuK0&xi<~FY$^VTJzCso2{G*v+SmL? z9CdV3u8IMlI%(h;&aPn>(wgeFw9y|m47^@+NZfp%Gr*?94|>w-cP3n=#ZHHBCAqm& z`#_U2pq%GB+*v@I+!d1X z(=Ll5<<@_<#|LB?@9QRbUZ=$olozlKIjQd>(lmGyhtU+OvU;gSm*J%y6sO?WZ9>tP znlYt)KUc-ZS!H&c9Kw~O|D^PrVng~D`HOm$`t9_tA=P!7zZ&mrDi1v(0hX@6&cqAM zenLnbz1i1&u4lbjxZyG6dp%%|Y5B8zEb56zg>;Dq|?tYuJcel!HqstoZ7q<3K z7-Za6F$8RRURHa#QiGu`ptU2kr|zsoeutzmdNk@ZA9_CxfFvl2wRfh6Ff&e1fbLv? zhdk8UXFHI#XkFp!#>{sNERAp8c&hVDta}(qE}@ZSR6GF9UkK{3P<6S8gdDk`7eUkd zAN7A=)0^Smr`X|D#d;n zP%1%@o9oW1&bSRUoFd0s1dB!cJBh3j5kxs2r0W1(QA13FjPX7JvqBtLa(~{r8p*>n zOdEON@Fx!1L?WMly4rkbW%;UJ*vaVlcU<;lG6!W#5xGN#r1~SmB7ta$6#(HtLZSWl z#u3IerCF`P+$xD2Q#RRmIk7n)`)Y#YyKENCBoIC47IgH>;AZ!L|K_W)zJd0CnkFw4 zJV!bjI4^XhflO^58zisKNgGpY7cKb1rl=q&boYuI4*CbDVKgO6Bu!6WD6*4k6Zc~K z(BH|mDw^5Po<{wB<6;f)&j8ugwJG7R_KL;3mA_!k4lkB!$>IH7mWLW)j*ZpsF~n2* z`{ihdl|j1Z`^%3woDl(^WB`G%hTb|vc(Wm;+4@r)A1&jEv$Q0`h30%t(_RAp^}R+SM11$=(jf z7KxzSdFaKQ_N!-|*z&g{6a^b-KA~vUKU$zl;92%jZ0^Y$Z@_`902oGF%No%bNXyXH zRT+WMN3JwI4qR}D@U0cDX&Kalt-w}E&w;8vAy@R)MZNtx>nH7-md^jJI%4+kHrCrE zh0wp-FGR+V3(}!zbgwxg1W@=(t9g?tl}f5J+sa~5cZbM{?$Z0_>dc(J!Q|%lM62#P zlT^?9S+flILlEFl1Y^k^fmsguWFT8-8?8ZK#W`tK)NehA?`mfX0W>pXN%8OTOFZ3H8UaVmT-J;A6# zuKkXrX6zN-pDV^D<1B8dMrmP?rp)g)@*xktjTo9Jwj7_Re^f|!MO&DlNx)Y1y|NcLECQ6X$5}7)@F7H1l$}G~zYOWT1=ig5kPZckAyglL|9fv%LZpx;V6!~M!*F${EC#Ln&xH!=Xro6gx9SML1);HMJ{6-DBmpPk}x%fAE=`j#% zp}upkEE+{W@Q}j~I2-unWHLKIeh$M6F~jXjOD-LBdV@B2)&HcMEeWD^uC=+1%ag)!Q{&+U>RyUeLz3>j{%{FS5vrNzw6RgE#-x&S@qW zjd~yvoMPZ!A`ma-uZdA*mxdY^RT&O z;2)(br5hib3Ps775XRPLnkz#4Eq_`#P@WZL)s*zJcs^R15UX%fPpK|aI+Vl&1syh2 z)1Uv3r?X&-visWpz>w12-6`FvbcfR2l0$bR0uDoWN+U>0*C04_cXxM}z{~wVj_3Uf zdtcYN*ZQqEr-(0UG``V?vDzCK@f50A6p!=q6it3gPDF5Yydr(-*aP31P(3xxnm9;~ zwcKSsEP#rzt?J>Q6!EXn6}V}NSikP<|LX;C(y?t`XxUt` z&?{UjcKvY-W>sK_gKdz<@69tU3#qba19^?J$xkoLvOJ{1DrNg`tud;0l^Cm7%>vq9 z@|X1YFp2u5pOC2Yd0Tl6i`}CUqy};YDW(ur%Dn@x<@{{^W!Vf`6-$;K}zd0 zaRKKQ@=JvdXfkZ$dT0GXaVF72g+ zf8KTxhmnVRctd)KktvIKW_n!IQHvHC#8Er&bkjz_;e^{h10WJtA^QRS9BJX~xeZzv zR`*Cpdd*k;J{u3Nr_x3pDs?8LurN1EE5r3)6~#$ew!)%?Y`m;PT!=_blEhNFovaM8 zIgTNvmZQ*pr=N*L;Z3JuBkf1v9$_S2el3hv1&Ok&SX7mHj_jy+)HvMHK?qWx2v{z0 zhxN*>I3irnZl)Tfp^alPhm;iXHzlXSNsb;$rUK?eW9A!3Pg1+N$LIQSula!@L{4?{ ztKs!5HT&)6Nf!*f)+=|8bsH;oe}O!~XW7X8VW}eL!HIkKJIx(`dF+I&9i>B4ds5-? z?!9MZ#f2x>lM%msev4=gpB9=m+{A@8mYMMwQn1a+Z1G|b#HKS>IR0X+(dAc#{C#rq z*@v`IKDW8#N-7Pdd`GyIhi8(gU(Dm=2>Xk_9kVYLIUNnj&=cEUtGNW0W@dN3&(YH7kgUKNUu8+wE;e)rpC2{e#M z?63&P3N4y;cSI$%Ti5*SDFp>kV1u)a`%_ppcCt)l3vW#iF*_G^EKX4d14AkhE-IG) z`i>+`0J+!S66LKuLLrYw4q6j+NBiGp9Gm_Kn>>TuU#-I4JT5_Ou#H>RjODkIw(cYiNS zq9Kaiu3;hq&7`BK1AD&{52>9Y5j`x5GAtWTD}amJRW##=G17|fzXwH|#{%(rza?Ra z{6)mO>LZu>J!ggN#{_4uzcu1#*UnHjGP2TftbP6MQ{3f^F0@2Z1psx8R91QUe74s) z>ss+zL9oi2UU8bzTkN{4_@ckHg>c;+ z?#wb(A-vUqdnvMtt%0ZkcSmct#%oWFE)PA*S%nS|rO8BKj1S$MBFBoVCJ1quA~`Th z(iAT}^NPtsGTMlY3D?U9u$6(l!cF%PMdCYgYgz21przSQWJ0EG5T}o48$_yzH&OH> z*O&S<7o<%sZ^<*-`A~aCiq;QX!vcJ4y#k0}+Y{dARavlIgJM7j4>w~Dt1L2{N!5=x zXPqH9V|P;kA%46SfP`VAkK=xYi*sIk&6)Tg`W? zt3|)fmO+o*1i5U>E}}5O+1>&v@FS7ak2{WLr||JmlW-)d=7L5yvwZXikG?-aD#HzY zj$=)6BJoqHQzJ)%J2Kx$=8X_tq~d0A;oIdE7zY_UU>Az;N$-BL`mljXLt6)be-Rgg z_hH0mNDM3bD>vnNVAogG^{FqHFyfpBF`|gAdwvk8g(f-~JULx%G?)BB;Oe{rvKyszi$=OE8!j`d%?(1|YmD;Np0Ft7D5)V{nKr+$(l%i02< zlCsEVM)M;&Dk*V$p?lx9LovpS6}N~u!Fnjn9{F7;PWfC5aXC)@B7vC|Q@f^VFEMJj z9A23C2G%m4AsIvNcVucamE;BNLY24-vU!v|B8Fcm$+8)<^bREx1SBptFCOg0Hc80h z7EmufO&1^Cwj4{{Y0&2me57%B_F(4tP#>2ffxsSij|N1IaiSH8?n(4+>fdbe)2r^2 z53A*xXHpscg6=2u7r*&KOF)U}@@=+Q(!&8BS1NOe)56~SW>#o{E>6hBXwYiwzbzV9 zIvGVqUf|D@yDTGMUPRtYxJ&g!brFqpdw2*1BbEX2z+UMP|J`f4oke24*&S6 zaM;6c67tK&qXF60_&j}m#x(|RK-8{YjrEbfPRf=~y}$@5xWZ4N>{qSpKPj|ZY9Irb z6aQ!|N#naJVo>>z)iZdR2`wFO_@_hCV5A>iFI7W}X*?>_Nf*oLs$of@rt_JuJFz3+ zw}ROj16MHO;!_nTg^)UK^Ul}T`&2`TTd*Yi+rC2X4fN!9s|J`#n=3-0isoDMp!0Rw zM0HP&PzqYhZ9DBRauf@oMxzj;a9Hl^0&!Tl7SP^m67n;|V|%q6M(sUKb~+y{)-b2X zvC1s#yz3j{`g|wHIcXwr8Au4NR3%}Hbc`UjteY!6i9(kS9>ii-vUl7VXs+XOG)6eK zVR~Q6ONz%okjo!}U&prN;5u-11^^Monz9BX<`AAA@-K#3z!F+a;4p5$hDjV$eS$=`6E%I zNF}Lh@3EFwf#Xj;uVsY37n>dw_yXy+F|<*L`1U>gxbR0C>&02Y z8D_iUBR#h4U1I*G;C{RUc~X)~11Pfgiop;#Lm%yP+UB>4!KAyQ-RxxA)srMQ=6?O0 z1#it-{5T3>dE9yt>mPv9*4Ji;k?LIYBe%U8|NyY-yt zLl71fRaZpTP=NPF8HjwWhhvUXG9j{ULub>fV(|5FAg9t@yjq7*sdv((xyJ=GSatl4 zDWq~9(%U6V+$rh(z1(c&+!BbK6yvv#4ng1M*(l;rMU{?!?weKRFRUh_CLw zMFnpqTJJdmlxuRyODn`zaxvsY zWrhcy6lmL~9IYHNLwBwdTz#6P#VHkH%tAwb0YX@R7vB?zq2CDW43&qgnpsZX8nL-K zIJ>_@JAL@49_(fyGDPqud+PtmUKh8aLA${(lb{{o`{2nr$f-nGt;;VkpjAVsNs(o9 zq%FvL%ZU9mr$&CteF1nQ(bj|M9ulp%!nuN!OfqCa9LWTOTiSe@ZE=ya#)TKq%uC9S zu^q-Bt=nw;`7q3*D_F}5q>g&N$gj1;D5f;wLV6_cBQKFku1t`y=?kU6vdUbBGGGBv zI^tpl`pmBR`?mjyM1MvY7n;_#oJU4#2UgIq5rp)<)9D?T|48)22Jg0p*0v)Z-;dRe zJql-O1$6&%3JkQDbEMFa<#CdT4o)4ldxW$6xN%n^k12EEH^tC`QKitFi&G-(-dzyHvIAhLwa0>v1pxE z$G~M><0EnNpWpnestW>2Hna=~gIylR)*JI*wF2mPspY3MaLM^=n6=OD?*|XJT>d55 z2H&1^`K%c|u+MSe&NHF11Dx~Z9KKX2tus{xtnbW8`uTWsY#P51&c?o)TCP*?s%mFe z>fT(f@|QR{tXjL#yI~>Bq{|fM#&(SM)3SZCRE2G zv96CWMYX!}%UO3`1CAf?H~Wn;3P)F02DA5{WJubj3p9D%zD!qwmZR;@&r>1KbxbXA zM_Wr+OxafP%qNrFnv~ela3q0MFa|<50gMz#&6huCH&P1Vv8p&~Ng!w<9yL)xMhZ>x zNQ$qYIJON1@I#vY#G6-}*lJq|#b_Um ztgNa=YgV9r2iF8DkZ|cMioh_rplBZPV5)4Aua#N=t(S5u!m;I`2qL>M={)ls_WDOA z9wOsxBAAbSyl8leTzoV#l1OkCE!)TFk1B=Kj{0PR?&)~kwZLrPyKxE=&+oamD+uxK zZJK=zD;sTy!e#|zStvu5zbL`QoCTQP7*9?}oovHZeiA(e^=W{ZiW@CMwRl*yCTgz8 zX=Z=KuG@ik2eRe56~sc?c^1(%r82?wNM}9^K;ELGL{5IAM=0}<5H!~?Pv83mrP`)Z zY~HAIuhU!Nh%ef+?i|g}nxYG4lRBiHf^^HGN(ftRz zGo_Y7ewd(|y_P`OBbkd-DM6%Q6>YdLkq&EHm*`gyn0zlvnKb*Y^!lSMSX;nR$c$;^ zWxrbm*+3*bXC=&x>Q;_0jMhcNm#{J^0jQD7&xK?M5C8nscH1oRBlINJi7L?&AQYEn z&B7j~P(o9867o_mx>fL`aI*SdP+3Ea;A*E=j z%*G1%bC!s!3vUFK8(KeCYdAslOqhR%vZMbm;?4o3%~)5#J`V`IU95+4?kcw(CVm9i zN!O&Obw~C}*%NA8<9YJQ7(+rnWVWHrtNo5#Lzt`uai7yH{aLIJh;NmPJ#34tM!}Z# zcP7Qz><_vA)+Y+UwQJrtONB7xG^L>YG~`3(s*05-%ML5zl8Y7?fSz8*=h<`5k^bLgY$m_3TTja2)owCa`F!C4v+ z)R*?Q>1U`)*=GOpf;O}x4GO=08-()S2HB*=@2uMR?tG?NvJ5>N2wF!f8*SYlu&I`fCm^*qf9uUrAfNQ;(&;?!0JW4M>ha_L55UR$B!RR$np)p`3ENqV+ zZ>N~WV`GWh6B0lcuovA2o(}7Ygv9U1MOwdC4BRkrJB#34rLjp>F2Q$LNv1j@nLYZ; zcIz>T2q&~PQ8uMg(CyGU(fD^`dhL#UzI4vPSH$)cIgtyU+HiHBCOGXgY z1FL=atJ-vrdeVrHActKPzc4W)0^fKmUOK*DT=-ynil3_$N=~mQ&l>tSq-IAq3xB1J zi4epLc#VyLw=7fi^JoapElPF57!JbYDp^Q>;BZLlqE_cw^JCP+RIR!aU8YL9{*q|? z*I5O?aZPo?zjN`4`UxRSYZT6KiXQwBN=coBU(`a_UCUqP44ueh|rwE?sf%Z-xXljL$v&Rr{Eew zY-Zn8I#?Z}*v&M}eq(DV;p*n6?aGztHB1o+yBV&xw* zMsNWjyGqY|Y$NjtQU@e@GNpCKpD@b2W&f@B@OWj~>44ts`S2Rr8Y^l0F%{}3D}D5% zQQ|=gj4?lHpha%zpBKNCOUt#|nIK({WAYBtI;2)tzAFKEJWd)kKLouH$AzD2CJjkK z)V1iJU%4g_>y%Hzs57F5AZ0QbHR2@NJG)s_c!e%WDn?TmA;XiL+x-NvcHB!hR{$Ms@hjigAi;{#mu%J+3+bF z8wiZJ>Z3>cIoki+pPSZs%$J(y8(&P&ytKc4Z?kG?BzP!MNoLiGPMY=k!l@PKj>{OT z@{PycIpF+U+r{@$IoGz&^}#6t`jGIZSfgWlCS|$pr=e>vy>nHqm*IbX>j`NCIZPhcw#Fz0DjCd^C0}MOdp58uJxmfPK(XTwWbrgfYj8zC#%%=UrlfgNw zD18@lPPl3GSXHF;mKfJ4T=ryQ&90WeEPnH=} zcJm*xPL*oEZ8FC61V6Og|NTU|6B?71mx_Vb$XA`!ZIlc|&M1}RT!GWh(w4(Aemd#y zz0Yk`vpMY$F*l>e12_UiofRMizd2i;(`;g07nlQWRIqNh&tnS)%10OpF^!muAyVcu zG3>=EfEG=yHu}?FM%pAoRam-k*{xcW4WH9g3%JC7L2=<}$pPL=Cx@-o6wjwixsRJf z$OgaPu)w;J!kc*QSrETBVG7z93qD#~dEMUHBmc#zIhh!Ka|oJx=Zkh_lbCLWPVW36 znz>N>5{#i09-T)JTA1vrg*Hy=GG7^WGo+r%F@FvN8~E1<`h~Oen*1(T6f;Fg7WXFz zO~K*C3$5JGnBcMjVDzz(YA0vR|F}WOvHUJ~IS7+T%;Da|Da-%NZ-yUf#x(S{c)z?x zvVfVfvyb$td^m?JMI|UvY+bW<%?5k13r+79qns+Dl?4#a55-^NxKd_j z60?cXKk+*cZI}4o_dgbPd2Pk5kp5C0vi*)Q8vb7>OeuE(f4f2TFKz8%*;H(2aHJtb zie=XrHx0itmP827`CHZ{$xIL)(IASR%+ufYfr(MUXLnx00W$Zxg{^WYtKkYb{2J`Z zms9)&l7dH0zW5msLn8xHxS8HU_&8^fomHhz57Jwbz%&NRmnI}pN(i;t28L6>u|JE@ z8FoyZY?cN{(gMKNG&N3(l!xg8)>dLzYeZb}a&HstEGRc}bWO}6At+DXv#Ht{e&zfI zd)$&ApGQ2r?b}7uU;3SlOp zVA(SU7=86&K(iiEQAF%udxD{p!-*MSE&g^rCi9NWxA7>bB_Y`+aahM-^;JXp z1P|a&lrG9!jVC_<*%XziNJH&@kjt<4lg-ol`tKGU<`2zB-C-^8)oNz9WsBkU(UE6$ zr$;3vi?7-+Qjd%F$k00%n~W9QnlD{Ejuvx%Z*t?gIE(V=SPf&kgXD0DY-z#bU{y)N zAtYO;NKOz;e=$q3zw{3maTW-4Ik8e1`pV?~WR$;~dpSCtjRZ`coO{I4AD{Mdg|eslBkLq^Gey zLP$Xosv8iup!|GQBSuv4XAMSI*X(u~;ug2BtvY^4RT8E~te&j`NTXJKU)ucOVz8Fa z*D1WkAGKX5Pl$%R-%yJFe<)>dq7CX4d_za|?{MSxe31_FHkifuBfUwc0~JsH^Lkmc zAnZ6>CW0i~22AO5P7dX5g^@|Jgzo{&ZGOv{*&q;3fQSd!L=MKlJ?P1?^Ar2IQ8(GZ z)=vUvpoh+br}omh5E5P_E8G00^q-^sSb!X=q7_Df=}6$kat#@lN&r^^?{;Z#t-8G(j)i;>Ae_UV5!c^U$j2@B_1 z)1}+Z#!bdlFhjk0yhSOXjEuK?XY>b zzYfB$%lY44t_1xTs6L4Y5!KziKEFOTp81Ww-f{%{d~x@{NWm@}SLM~v5mZt$)I#%j z!K%oP2+U&pEey_fj)~TEKp%qokZ_w$M7Ig17GeZ=#7d^5-ImG~^PYDc^9ZuJr0eM0 zL?*J44%_(cjVi+AMXhh-+K@T5r5LBeQ2-Xf1$Q#}24LT0R|FwmqKS!l8?#xmOdOPD z>)}AE>6fqIw1m*pP~1V%r@uPZLbEvYhuiD`BVwMu5G%`aeR@S=jx@2w?{E8Oaxg>Q zd{GwoR4kH4ZuUDBf-)pz%+diWn_3yonUDO?8n(rU-CE{j-6C}o!>GqM`(IcBkz$f<=ml_aAmKa zl~SepK_?T;8ZD4lL@whS+m2rgISk)ZjPeT)79P#5`aUbK@q2ffRvFUQxZvsmmOEqT zCs${@yI!2uZkA0SXM;_Zk&@YyiwTW5=2bZplU);oSNWO--W?BO!h3qP3*r3s1qh~{ zT#OCRGh)39*sXIc>u^mb1u=%}p4k^6O#+HW5E(TMwV?uVUcBL4VotaEJInRFC4FRx z^Dl26J7WaKmu{CZKLMN78ak;dvVq(MDH2(?Qx7&XjGfF;5YtAP0#7628qFm+g@{T+ zeb#qu!+l?arTzcw1@Qb6Ry3b7+Jx07h8Wf@s;PFrib8IKOgbSJvrP(zy5_u=D+~pt zIe^G%H3U6tuvhY8J6_w9_%Yhy=6@_(VI-j)3zuftL4`` z%cG`Lf&=m1>Jc0f(BE1wv-5uT?l7jPhE$lLuv_X_eqUFi#RIs~uKs}r-b`Mwtp;A# zVOc-zUp~-=2L3OD4n%lw_T=KbA=$a(FZosxsaz)G1G1}z;iu3ABq>rM{s^sFN^GC*s3RAUM%2I!^Dw9JBKss-C zg+vx3&>-ti}7G4%bV8Q`F4LsM{<*29*0PJU@;vj z45hae;x)6{JPqr?sOAll_>>S&K*>l*a-hYR_b(u|&#-RXc}IIVR-&Fi(t_tgru#3M z4U{GG$nRIp5d?8)w%E~$n@3hq%41rD8~&&2ZoMKJ4kfu9~x~b6_U(BSCo7GWi%C)U5uHQM80#2i;KMB@TnZ3}htlcoY&gzO8wl zSTywvml0SZ$6~tx9?t6gH4?x-Mx6CBF2v;FViPviQtI#22L9dwG1mIAW5A6pjdq;a zcVJG^_(Cr^=ua|b@z_%W9-tFtfDNqORsQRp&z9diA)8~|L)xV7Av?+;&+?7;It-@7150Cgh1K2J@e&!eD34)ILr_!0C3a%&I{0dY zU{Df;n^j%$Q_lOIkcqG6JkGNT!(v>g9!Y()Q~HH2LeA3v%zs1H{~bRrc(&9UdZ6wnZV+Tj z4>F;z0W@FnBodWTNqRg#nO^^Teb7P#5d%xXhH$QikZ?8zgu@>{nnN@)1D-9t6pv!8 zrE(Ig1t(ZK+2GAG64K$`VI}vjM}edJH3X3csSS6czC=ScicAWpEZZqDpg2)CPIoXZ z+vam+9%_20erPG;&k?6_a4eZUJn`nHC7RJw?Vs8)sgyJa1kz`IcjA2X>p0?EmAQhu zIFB)2?8Q_Bm7C#g^h!jt7ZHlmkO}bi{>@_Z&zO_6zk01gBb6NPsTO(A^+%D+(aw4=lRqx4od1c%wSrZKoB(H*WAIQfMvDT z{?{FV9^^WwSp`01%i-wmr{(0iTokHL#eht+3gCIEPRm|ZXm^{Lu9#z!BK1iTH(g=a zXy;y_uR^_jV=VW1q3QKcAg@fVQJsR>dxp0!w}ZU#`^x^@+H0+#SinrU%dgX?}KrOY_*gaN} zFG4;tU^xluKdtxJS^kVq{}YE!#6C-~ zS(_TWckRJJUdk3y<(n~v6bEc%elH)DIcNlqRof4#Rd3sPXKa zfc=Jt-HMv0mlU;*$w`UX%+bY`FR^%;pb?>feCb1a#2h@E=Oo)IoxY>3p}T;W=ds7( z5vrFks->MfS@=EKH%%6OPv;x@c=6cvZ_mZ&ezCfa(|^TWRvI$fWe-KdWq< zG#X8_n_Xuk8L19{=craLNN7MI-lJW84iBykSwrl+^5iJvHeiny=Oc25jX+B z!Hwkh8E=k-!lrp}5B#P%B{6a4$0gKj;>xfR+B-U}M6ho-;GKPf1#Ia1geWEzs*5ou z%+Z79#|lw6Py1nV`6mTVh)z`X9ek+MU-!g3X*ZBcwyNh8rS3AV zaFFT>Q*n*AYtHn3Qwk#+w{vm>R4@gH3&4TqJ1!(N6)}^#xzE|Pb(m%>*pSPy_8xcM z_J4&(`LnRb=i3>Ve~U>}ou@b7kQ<_;5S<&NyxF#l@v=a2N_eIDS+w{_e|xl(Pgsmt zJd@O79OKmHct7%qd>&DI^GFy(2^i(>pB8c(*0xGNfhXqa!NIcJ>$JoK#mxU4y}#s^ zg)Brvq00g>**@h?H z@VlAEPN`a5v-h4{@KPp(%_RlS%=6vwn^5Mj)HsXk&l|1&p=?F%bJq(UYzXzxn8(Jr zS;CVgs2s}O$4<&FHbo}oOI&Wk?|sTw;{@ySf~+9C$k=+d)Uychq-}w0NVGy&D{%~_oRGl4EI6_S_7X!f)mE1lH;MaqaI`&ZK=c`X5RD-|c*Lvgcd z#Lb$4fXN>7bxtqH;}b}=d+m=vFNb7@M7?_*Jef|`ycmn_goR!Ey5Q{|TZ3sW>|!CmsA4k4EnHH*^Eu(Pa+wS?1Rvu~oC zd9lw!(6!`cF^vnU-Z)>r)Xo(jRe@W5)1F%)>!@w68?pDu$F|R>_*K7c#G4K%TafgX zl?dQF)}e#@efhIxVptBn55OYfZzP5M2E9|Fo|DF{CdB`&N2K40+C7y-(%4~$6rUaP zI@l;?Bqc&4jOmB&J{7gmbF;i+gDMnNrxOy7{;<>#Ov^dR#f|(_&ysM}V?Y;Nnwg>$ zYQKYInYbzQrKOG$qGl7leYB_T;BCaizA>YqwYS49P9wTgWTlhZ0S;sH+@CwNQ4QZicrp#EkLt*16x1Z)}0u3=q*TR6`tnL?in{(RnXc*(v z&agr*Tg8NDhL|hmI{VdxJB`~1{PBeZ9ET8pa<4GbGQnmR* z!ZftUPkEZ(+r!_aq-aK4jQlBR;1fntR{v%RT_(bXI`y;?iC3H34gs4B%Nhi|?6z zb7U1S-l;F06duX7b|mNRmnzN8ZYby3InOn0HyPX!DtL!rh*1{dG_=U?x7Oc(1+$)3 z$5N}oAaPHClMLvb3-6B~K|i*0oB-hq%fYJWiiPDs0?4%bR_j3!$5Kor4LO{3h!tt0 zcz+CWhbY3%Va(iNOB{iI3tuOZ{qCvbSt%xYLr5uNRp zO$7Vg@@&sUNN0d%MuXGQQMDVy1hAe9=K@Jgra0)%kr|jkwq@_ z4ye1N`9fHvvmjuz*!x*a=^aRI(4fDK%M)?Cdqasrx%_GtL_2*;=rN~eObZlBb7B@Sc%8Er}|Hm<+%qcMH!#1+J8(Cij*_VSW=M z7%N-M?vF4wZ29Z4=4gryG64xS`LFWAhEIzW2NsQ0vQi-Wr3tuIlyw^?o?{cUjT=;6zn-aFGCjIX062 z({1KUymLL-o>yDzV?ub`%V4ae-;v#kVdooqIQt)Zh+9W=42AGUj&lq#Z>X%A&Ouh%-}2B z1gcAqAaIeA%(nq_$rn^!_lENvovlKahRA}~cJxu81-9Ujs@0>}eDJ{cMe>7NyFk(d zc?1=nXUdTu6ExqJ(*{Hx+K`iZ|FE=c4H6NC8Mis9{{jtyU` zY9t#JVfouJ)Rp*mlFt|~y$pf$Yrl(2-H-d$8LyjM(dv$ynP`;MI3m<+wEx7@2z~4C zVQ*IFy==`EZ>KT9~Zg`H2kw^tVIfwwK^ zqJ*41F%`%U7LuK9%~~?orOUtD#X`q4Z2Tl^Xy0LnIVNj6Nb&w2V5K^cE}FWbB&FwB zSsDu#E-5+6e4o}_Ykoah zp9oI-<0+JKZ&$cU4Wb(zfmh}4hD`m4XM!CDlv&YA0g#G6Gma@n*KLsUt9UrIuaJdfWAQ`K{CMi>Hs%0!V3hpvS2k zjtNx-r6&5w3eL^iw4j%P|)k!Kn@&bcwmJ7|dgDF*W5<&?>8;%#Wp|GazyPhM$ zTXCTE#9jg?WKjV5Ty?<61N$kxLA7du;P=}uBWgO}c;QPfe#nS^=CeOthV0mY6;;E` z-GZbGX20~a&cZD0mI1NA6O?ulJDa2Mt*%qfy*5iXe4E#;%k-oC(Z+Nu`LDi(X2>m$ z@uS|YCdY>^FJJ7^=cEV`WI~lK9eK^|-^;jAJa6Ua^5Sp!L~;<%!h)4+N3Y~cN5kj9 z4jLp#QpU89(160hM|`uP+YDxYIm`(CWuCLHjSbOLzw5J3-%)a-Dt-Ez>i_-kkYz-t zJNLC~<+X>oGoM{5eHe}=IhY}UZRvGmZ%zg+~Woc!3nNp}8-IVD+=>x;Nf zF@^Mp?&uG~bL*l7N8a2h@{uo!(+-e{v%K%nFfe(o%3=!6eSdCJgTK{r&hP3B&D7Y! zv%ck{c4?Lq3b?Xz3Dvii(ba*-EhaXC1m3BMV$l!ag7&wIzUp-bEfvc7y zAz;8EB97kpR_OuLOeZkg+1x-vDi7P)bHuvNr|GwykYU0%-Zvwh63%4!?RVfMGnzAw z6#OzMq+s*slhp%RtxM$djeJdNc@jNiMIWZA|K81e-??d#=725*v%LQj(m=`%wE0{3 z_0A`%)qhNS?OE?o``0|Jw}etqh5c)u=%Xw2DOO`A6GV`XJPqyo%*auB><_Yg18{{3h`Z8x(yfz7x zV1NNECGOghZ?87C6Ki5IeC+aUS@u28g33XXOEtvltlt*%MvDTNHdLmn{Y)`J6YP?P zEk~VMqyteW{lX;Ujb}aE&rwT&6^{$FV!h=CRXS~M_9HX&mf(mQzRvmx!aM9d^i^#6 zZCzyA_Yg?wzN88$k{c5g>g+ok7)wt1bRex;NlLC#R%22bcHHI}1uwy`tJPhw-yQ$g z>DMIqv4QWc*z9k59UL%r_iwc6pQiQdtPvu_a-_p(N1*3eAu_oYgEWp!k#rW zG5^qcC{f65=;S`&p}4a?|J&|V?EtwmPp^5k_h?sUYX`qzAV@cq+`qt#oO~vHOER$- zpBHy-UQkKrgDVJkOHNT`x>(C%W00V@Mlf9HCISxdZIz?}s|dlk`OPHTwDY>($(yR< zl1}^R^78qOQ>Xsd>E(OPX||N-J>_qDKPTZmL#2Qk`gkV2wf4@Z;=;v9E+i&yQh<>& zInuX+Fa#q~eoS#iQmD8N(JheGnoo(=Tgv5p9oq(}y;^e)y>PWTucvihps^Rt7MQ8l zrywf_d2oz(x}cvjA1sSOFB#6iiM-bDzv3GkMt>^z8sU%FBWDEzKINd{Z3**BxJ%*Tvdw*9G4I-_YH zp~XFWbaFbu)^ABs`^)8Dm{U9pY2o>*nG+Nf(6~XpO$k8j2Y(|Tc^$dadB)WZrs?3! zQpToFyA?M-7aSqFc`uMBQ_$F6@MDtuUa#BA+i@oUcbu-%oS>}W^~k&DbMJtcpKGRR z+YHAdzMtwe+}aIQZM3AwZ3~a#$embL@-Ta)(X(57@1x*XKYJu)3?+_qKn#Sfxl~C4 zwVC$YeolSzpT5upmE*47#pz?n@Dxt~kKD0#m(!YAEyj@7SQ>bkj~JlKu1N zti-46@B-t#JmLeN{9R9pHXFVw_gQ&FZfLgbBXNUmuT7js>(tJn#eDUhzUV)(z9Wxi z{t_YE&0gU|K{60tarl@Uz~IFW7cVGzAEgwr*qA^G6~CsWDp^k=WC-Q$72&*8y>LO; z_h>JQ67+_>*e4|nn15-x^Kox~EOcpmMSR`;{zmkzyNs$%%4udw3}P4@&#SgS!R zx>ypQl#rAEtn9p>2`-$3+m;)UZFiVe98?%!aI#p)U{AjNH0G=Y5hHvLKA2@ zD`+zRI;gbZ$iZjL*}6oj44Iv}t6OmG-Cdt#TArVXpq4%gSdaVnxN?T`-mHQG8l;@h zUK)n3_6>x~;0b$-C{HIksGt@>VTo6Eo z{ANV?B%vBcecQIK&%7`(K8sPKgoh9Ly}9yM>+aXfDwILXrOR@AU`0NOn`dl8LHoF? zD3wyZZIkFN&7rgNp5ZP`C`*WSnj)OruWTvvb$c1|nShD`HG|oKLlb>8KRmQjhsZ3; zAdYArjnt>OxavxY7nr2)t?k;&_q&r;wfA#xWa$65q#qsf#|7PgUSiAgPP=a+M3&cd zK^*^#tOW6OsLal$zSU>`JJ4h6T@+iCb9sRD(^2l(^%RYosRmMa3UDOUK)s$>w~VDd@bA%!$Kg?`NMUFxP*x zg)3ftW{U22v6}FG9^apr!DZUm*VaRw9@yeN+Wj@y=DNxbU7nhqtlBsi@1O$?7t>76 z-4CI?pyd$mBLYmU|9p#2H)!HsDX-%nEj3-9bu0M+wCrTTT(Px;VR-+`H7(Fl+w$v^ zj^La%>30H@0qLLZi0w1j2)hSDz9^xJA~~9~@hdb#9f?sg%S=bMDZX2OR*VetLs|_! zNLg(6;vvPv$W!v-8_J(%e&882>C|_5|5`Ejw$MAT<)Oz^==rcq%sc^#r~5`R{Wl>a zlXX(?)m^WaZy0m(qYDEPB%7J-iSf;qG!=mxv=MEo*H=c;x4J)W>k;Z<)2zS00bfRy4@<^RkP;aqj2Bhf!7PF zl9#fFe7`md5w$oh^t!!Vvxe+GLRuwl!E`ko4sRpoDBC31VrJ@lqkk24CsUnG6)_`A z9=YJt7O51hENlokL7<+qXQm0IlIua#_g;JO?Y^8=+$MN9NwF`KTzndd974coVoq?h9vzbdQQEZKK`bz z_noF4r);{<0nz?!r-@&`(gAdTWT#?D-TtyFsEmOuQqptc)O;k%Lv*F}N?Mok!Zh`{ z2KU)najB4q*e>JyWb@Zq4>=7Fk$-d^<+oi3Us-0j7}2(jZ<_3?f6fJdc9m=>88%Yv zCmwdXT0W9H8v|gF=9g9Ad=wDF8oR3}HWeKCYz%_h*E0CCeXnbo_b#!hWgLO-{>m)y#g5y0eM&Pv1W`mVD%BBX@*i#`)h zKLJQSgY|2QWvTKo`@yGL%d;F2{CJ-LP{2cuZkHn*$UViS#o6V56$y&g?+fQ$SNq68 zTZ?@Vleh8*1A-Fza%<}Ou4588un$xfU~=1?DvhQSAm4Z$NpnKE+U!7PnL53FVNv15 zTbb|ZFz6*_0()|X)=5U^@$i){byQTU3FgVc9uIO=ylqP#P8K?<3eZ4En4<+w%OBjG zCB!8HyJ|Sxq3ZZ9^pPI))ht_q1~8^Ho!euUjtsUw6a>|qzVLnfIqEw^)n&xUfuNEF!3l zySuw3q&)b(-*?XM{0nq)oQADJp$c*3*pi);vbtLb#q#aktR$v+}TV&`&9Ra zSh7v$tB8l4Q)BucYqC7-;*vhP2E-50f_8G7lts&ggnq+qU>uVp5e)yZV5Fr4lt=39 z$A^T-Thb?V(30D$p?D=(*f&5nmb8D?r7VU)##?xFsMU(53I9$6r!O)i6VBNahRjjj) zmK>7IALy^vS*G~f^I8!t*BK-l_KjsJzM<8ddwKWBkDRNaR`WH77U`#W7Sk0PZ*}yB zi`m$wd);P&rwM0sd2992*7WnpVHrijV==R`eZ?L09&RIwWBT3>6+&nO5o`PesDFHf z5DA-H#=OpFxaf&W3P;<&S7&KrHAe5BOa<$eQ~OydY|i*nkO6w0>k)Kv{moq#&*{q| zwh23nZtvSSe!#pejCW^kkRPSciV=(a`*h6~`Oqp&l<}KC8KcVFa;>3(7HV%v`nuF( zm5{yFMjM8P)afDt8Bb!bk0Z^FIlgVG-7m0~%OAPQZM%o>4FD^HNyEEiLjRn?x2D;N z=CKg}7x@mi@$PwB15sMYD@h>{leZM0NVSP>L&m!XUHH~v@3@wHt`~eDFDs+z0>prClGj=f%zC;SE35f%4WGFZ;!Qtp`Ci zZ8jic{^Z3=)OAE*WRR6Fzj;PD<x|LGjRaA$KUvjL6ZM<>~hZBW~U#fMGpv~HS zEswO_x&E72U(F`fXrx{>tc_G>5exOz3@9~HNQ$YCc~HKr6^VYB zKE2`}z=%?jm8b4h+*M==1>gNa#maqdgObg&b1xO_`9IGCpC=Z*_69Y-cE-Quy0@fwqq?gC=HM0L*ZH7Ut1X4CQ(M# zDMp!xijAAP>!=9bHL3A8gc0$F+TJ+n7qUdK5g3@OxghXO+zhs-+ zV^E!rMkDeoIe_sj8nQKD<*fKR8CGW|Q9EAMz zgx?N-Bv289yd3E<>zNstv*EwbWg!(r`K*m~XOBHy6P0AFU*5DELDu#_0@W%IvwnsT z7PpKLC$Rgzt=PTe>-t@hOwf<*fF!vpH^? z(&1IhGNq%m%t@2n4dRP@t(en#=a6*3WNGX-DOnT&^OyHA@(A%niJ}R3jo9RiW&CQtzPE9+m9$x z=V_qY?fN}YJ2@(9e5qtP)qO7$P7uC}s0;o#yxzPqAe-9rI-CMEuPB|(5t+Fy!dc2y z`rC3gpMFxZF;^5=TEI{LBrVTh1F|c`w2VJQYM-VZT<-@v2-p?mkq=~Z*G%=^3V6si zqpmUxkLPdjB;aFeS-5|GkR;^oO=)&g+acp=E%bza!w~w@C9vkR`*Tf@t93G7z@U@i@io>ELA6+kMvrt;C z=4fL$F^6xLx*B83PDibmw>}C~?jrw5vTAi>Bn@9>!ZAJ@ihX~UF4Yc?n+caZm}P|4 zUE?{Q9+?H18TGRFRfOOdxABA~$m@ZxeaI>3uzYsbg&zDggFdfuz_BU|BiouNv&OhU ze;9p^g*U6dJgz+CwY6-(xl ztJz=P-hKZ2&$8PLXq+B9+Mhm0jO-SiOLP5qjd+34__e($#*aEFoghd$qur^@~t zGfF$%nG+S)oEYd{d!10{ddDUY76bOd-BM`_rTD>=6 zp;UsV;Ug8=lEO-==a93h;UkBUOCymYWd}&`uiZb`Y?RS*VTZRb+G>_Cmi*V_Sr=yi z|J{TF>tD-+ewVDf3_Ao&Q;?CWybM092c=d^5b-*_CXrN|a^Q`UP!k+==(pk`pxmYk z#({?iB#xqqwg);X;TVC@sGP1@!w6z}nX8IH`she83>hgw#s%d?b|)q@zh{91Y1VTo zEAn&X`B|CIzc^YQkrgB>LeKaHUB*gDIKl_XmKso~afwGbw$j7d^eZe-*b-z>$@>j$ zg7w@RS&iiG3`o75(%)A%P3y1xxi|@q2*Q z8qakZ17}YobaH)q#M-W$v9GNqUwp5yjn?_I=dDXL{#*-7+Q-nC$eK`fmd9hfo&Wem zG6Q2ARCINrdoJ*s<4*6>=C)Pa_o-X8)%e_eJGp#ju>KOG-)Gz89@8l-x6u(QR1+1b zv-I@&Gibc!uhZIlS?yI!+T>FCyjNX-|bpxto z&CJeNQvJ)OmT&ZBkCGi?G&yn&7yxI!A`*h($~isdlFn~M_gJ4ozN#Nrstf(TST;!WrB<_h~# z+(O%&QupaT%E*=y+$PcC&dDO}^i~aa%DUpx<43C|%S(2y79X0Z&6P#c{190`3p=^E zPbdA*!>%8@o34rY)h8*`m9KFtOXA!4&6yPA+jYXN0?6q|YEZP)*8Xh^Kie&)E((&H*}_AXOA3xw3IRP(e+$@NZ643@99UJ$dK%7h{S+?K2@yn zfuzY%QxPviAx0J0ccL!?)iCBp!G)IJd~Y1Pz#4{EPhB>Cb`X^(3$>2i2)C((Uf3X? zX9dx<+FUxxUp_ldL(fi@vGgMA@Mz;IE}LH}OIjzLmZQGUgYVOkJa z0nwb})v_w{x6;jgK=pg2HO1v&ssbj%oq@7KmmDGygamqH@SDs^B12<;+&jsJmAukK zxJCmDA$+d&ZH`>-P`%kHqH)9$#-9*J^z6~0C4z#6F|R#602j{2sMqei z16ois)x*>u%B|zsu_meK)?3f|gA-%y%V&B!m&8W8GhJbgHR|nJyEJq8j&|?qHbqfF zkN8_EC&mU8G+M?*)n}d;xo52rB-}PhVd7>LIXhkkS``>+lQw>m+`Fq)Ejy!|kwh>; z=}iU*ev|aX)5Yv2gy(6nM&$AKbE`vU`+Ln-xWZ?o6Jx3qhxbW|Stv-Ydy^O))-JpE zt6%*X&*IF27%0o>m@j1&kiV3m2uSvR?X@xGa8bHV5eO~dz@Ok=h^vA!H|rpOFX0VL zqZNMUCz94+!X-J+WXv5AD0U)Rc@wO3cYx>!p+rxSIi;u$z{2nKADJ0bV)`hOYe6g8 zXb?*Cp_Vw4D`#K{`*3Pyb}?$Y-0pUsq;s4~4!Trck*c3*w2v_UDQD8mrRzY}fXnk% zwriw(H2GY$={T-qZT=iRn2KmT;ZeIPpC-Tk)MdFUES`k7Te3VL@WN__lP}zsLD3S! z?q+?+|Hvfd*tyF_N>PsLxY|5@2SQhF3ecCQEN6A9rAG!^D6fzFhP8E@<}jH-xHUC8 z?kEDDD_;8deNRwY25kO&lo^(XR7UyfF8PkpT>OvcF7?~Gw*!ZP*li$h~uhqJYYw%k2OfO`=o=$TTI!mLqB=apW`|!OT604qh;nX zbNV4@NyT9XE~V-9Q$=bz5}U0@c_w%07BUblUr6RLF!3+wYS#|ngyuwbPis;orvb}Z z^F0PA;ahTn0YUC*$*n0Tc(c?wVMW7pb_M=aXBi6}P%%!nF!CMvIEmd8C~v(<&y4DF zdK#0k{2HH$`i=O{jxh30mrjM43Vt2(pUw5cSPqATok+%ly;9-1W=4vRm+o3B-7F@* zS=|luot`6z|AN#$`i3MysvX(C^_a!3DFhskH?!1rqrf=`z7J7k3{fQP!ILWoHGnq0 zyWu3sMg~qRBn%Z^)~M)nrC9>b^3c+5_O1lV+fSQ`iktqKYhM9S-7^c1!mj`*`d6sk z+0wVQcU2DY4%NNwc-ig)8%o?6_$d8}YHr)2X#+Z+wz?*(6}d}VYv}i(EGFM|IjA^! zg%G3nE<4Ci{){dXZZ{*1F^SqgfV0^_3=2vaQj0lfa?GZb?~iJDcDm%wO*_FHDNZh? z_qo2itDbEODi;|M0eJ``Jyq^f&3CSBk@sg`{wd=XE^i4RKbn|d^MjmTD9+)fyZSw_$<>RHsh{o?7sCM z^;VTUQ>ddOo|YIHuTuiki0&UH>tE`0<)IAgw#7R3OF#-!A1Zjq7JZ>-Shvr4;~{NB zx39`5ak%^=GiBa)f@zl zve98K+na6!BH20-LJUy>d&f__7d});B37Wt!q2~{45?OS&^FLrxg3S-3WE)iNMMFQ zfep9OVSb+~i}!74!~?u8SqiYIM=CgRUU!!XNyms7iXlpp1^qVN=k$=hXIafHK0orY zzx`cyF7%!5Q<3N6etZ*x0xB|7(KM=yRDSF!R@UzzI$cZAy@RvzO{StDUb*XU@X<3F z-Im^c2WLwy%WZB9?WctfTemK!z9H{#Q-_Zfxnr`*cxQh~B`X<5+hp@U$^6%8Z~^bI zz7IW&LD%G*zn1gR?ZQ$ard6YueDzYm*&t3uP(n;hMJK(xNzZ*-G+ro_ z2Jpd;E6n9LYHpo#P8i$+>oz@TNVHG5)+BLMkjMOe_2wS&J)r=8xY8Ya*Sb3e9qK zW!~><>;tzT?w~!UYi%N4_ZTMq_m}nuEV6(|k&=zb6$W`eU{iaOO8wVjFPv-P-J?Sp zwILh_-;1gLx(gi=50b+0kxrWaP1g6po-wI^Q>6o5SF&92;jFp|cS583qiWYjmbJEm z@#D|%uBy?s_A**l6lz+SEs|j>aE7@1CWCeC4d zNJtqQ0tW|a1G^Db+?+mL8vPtS3ORRqMp}Ja6P}D-8h*6))%(1!4*Uy|g^ZRU5L`9< zBwGnm736?-XRS(a(c+FSL*Ob5GH~$Ky}2tM-~d9xwJlkx7ucN9F0e~g zjLq$*?JEP-GK1@MCenbU^RLk`B~X|A04ag?Pt8db>yALwc=p<_gDwBhCMQ`Pme_8f zha~thaXw4{BtLE;zkyKhzm5^GoD}8X@zyTFgSxQqVieY>BMjB%L+YMGJQ0Qk_oCAR zTB=l=y^?>Gv{rc$U?hL6zFW{@kR4WX2w$N*bU~mYW3bdJAPUx8z9&S67cBv5BS;1A zW31wl9iXHr`D4>KeBvX??~$(-W-rnyA>=K~B@BFJhK<_BrSE1EFLr z{P_u3Miq-`!7K$U3w#^P18#vKBZLF}u#}U>74S&?OLVn)CIu*3hV(gL_~(hBc1L3R zn3Vb(1I4Wk-!~3Mi$i`xwQNvof?-u~d8Hd|V?<>tk_EJz{g)GGz!6uqk~0SKE7#if zdGd41X8-FaJq^)jS<^&HceYxcw|{@SCXFO`SI}Z`KmTHTgOC7wZ3NxgsH7vUa{l_Y zgtB~&nwDp1jdB+a_;fUhS7oo&`VmbZ&{a0RMF0$(!;A<&zW7rKYjSqm^k;#8@3$yQ zx5(xg8{*T^o{LcS0>OouA&g)~8*|GZc|Qj|pDhRDxGm+#3%34NR+#q62txc%d_bxI2*(Y9^r zu_{l{C0K>4M`=fJ(>AdMo9^uEyp>rq8N!GLAs8B0!3z#l8>cFAUmUu_*~s(8W<};T z{MuZuB}<9ixj@juVR~ETW|2_|msK-$B}m^d>B3Hn=16$7JU)-B$8SDYBm4D@+`?a6 zapuH@zt~rrIHIZVt$3mii$I=iMHtVDQ|K7ZBK*I((vgz9wg5ddmdB_2RMW8oJy6Kr z$na{+3pW%FR&drX&$_G0Bem|2(XT!n`PDika=(tN)j<|*t!ED}yAP6}8rqAezmAVQ z0goI3Ps$kF$H$>t_!sWALOJ}7zxwb9|Nik6V1l9zzGI{3egY{`o z&(T(pctePClSjKR5FlXV8)U`}n36;KU2s`oNhf8&bL5I??RU?eImAw-v&+tbz&Dy2 z13|dthm|7ikmn!OAQ6fhvCohbxK_WpV@^jwSdI&{(l$x)1KM!vJLfj??e0EmL(y$N&ahqs`dYM2Jg zU<7}17jm)bN86)lr=AR`Et*9nqXmVQ*_$ys8hq(AvrgJiqpSLe+dvfYJo9K?ac}Sc zc)7I8x2Q9j=&$WQs`k_DiWgYV=a&X>vm?}-U_Fi_DtOQia!G~7t}<9H{wR%KHBcX{ zM1htg;y7)(RK#h0?GU-~o-^32 zapx95Z*px|+j!zg%w*|ik%NqF!I|hC5Yy<+?F|PDFE{t(ZQD4HVQ1{I4Wd-~2=#`k zX;xW15h7Y=WIMa}oQ(2L-&-Qz<~B?6~_{lqe3TMvxjb7U6|}5l^Ju158XHq zpYfs4r-jEDoOo7T8*K)d8)IBfJZiR$tsSp^a9$!t;0NIim2<@WomA1NhP2rr9zoCk zM*@I{hEBcUKGHwisZbY!rB!A^=X$_Kxes}>^-W+-;|`T}waSOR!K=Y8qgALv1TVAn z5O4{=-BUIWkr&t|)rA>;vqfD}JT~2mP#2C`c`wa`Z*LqyyDj8Ob!?i)ShSqy;!&zN z&oBCvhb3bOt~)y&yWoO%HPxfFIu%cn5GJhuIu;lGhVx7chaQv@V}v^IC8btMJbj0l zP4)IFn2ba!kK4=k6OIFB+JT%Pp{6PraL7EsPeRQCeh;2ljHm(Sbmnu$g2U&(ONOl& zDc1CyjuSnRi(37?iKYeoU=1)6CZXewjRPx-1CUJ6hv7=8Hp-9OlGlTtkMwkEP71It zkalRV7i-3+I&JO8mwvKOVD;c1+J!VOr!VBnz@Xij8 zx{!bu1SOY((&Y1f_d0c+wXzLbg2(xa@JX|zWUwpk&n_QmonOD!xw<3vLBsH)j>+>+ z?ym`_`}7n)bj9xx-F!~5jAK&V-D`P~(Ler@;wUYMZYR}Y&T8Ei#@9RRN`EI223#aC|O3`r48 zp86r~A@KLw4TFiiMT@O7iS#$Dn5v4^3n|{ngyeW2A(p---mpdwVxE`0AJwHa0u?*K z2ZW7US?cVz4jY)Z&9q=_~w5Lnu7F7g(Aqq8~%`zX45_k%8O9bj-tThL9(^!7O4vas(6qUY} z_lh)k3{G~`$t4o2B83Z`wT-u7nHdFO$Ro=D9R^hy78ytJr(5~!$n~gqmkv`am;2L3 zkA~-ky_Z*ymqlWkQHJ+l!z^+C!Yr9m*P!3|@z|axL)7Qx!Tdppe*fzQa2Sk)8&p7V z_*T*lc2A?RFHh~CO{lh2A;qB2hnpdzj!r}1wzie7GHym`F~vyvXr7Fvo8F8N^JES$ z^^pn(V`FA*t9uc?aEF9Dk@Oh9+Rgv#g`YFjG}MXHPTtw%;Lz*B_5>x+*ji)H9*MFn z1nTenJh*_5v87-xVJdZ>5~KTB9f#!LwZqgCy%@J1tJ`426V8MvkbA-n=L1fafN}Qh z0zrG#qN0#VTA9cq3l3B@i&MOM$_>g9`bQiESJY*1jv(U4(a(c8aa{4}Em-q>g(1sV zz`{-U@mr!X!+U8L+|12=9CWoj@Y`z!QCzg95y=c|(i+YaM&SXlItS4T2?7F8dl~ob zm{BW;viPiuy*(2y>cRL6ddI!jen0s>W8gUYNqxv-3-6V@sPb>FVnCUUH6Lzo5bd!P zLwVQLh=vqYbfLMgCdQJ|NS67H=sMnQ#EWkG&sdNugw#1CMPbB^Fna_V4)fJ>wW(Pw zf7zPaUG~2|NI-!O&u#5qyU@NKUKu5uf`2pqyodyha@hM{VXQV7l$DpIjU?hEJ3jNg zI(|0F=-4*-om5pt{gYC;(RwBm=akr&m5w4bA^w&$(nKtF4=DRO_?h7~isMpIk#9#n zu?;jgrb41)(obXqc32jJD3j8SAO_TxM_W+UQ&;#jr2Md03+N^V@eF`{U?C$Wn0$$% zCc#ON48+A1f4M`5*`;KwzJt#T7ybK_$T;0nP2UUP$9O7n6U6;QhxKI@254BXL|h|3 zw;L7ysF?i?v30UAEZG5!oUb_QFG(`hDA}#jS2_qN48HncB4m=n@%*(rqCAQkunDb5 zAtC3L>~sXBe=#Yc>^;(nAITRM21>k1p1B;(8nw(}?wu3@^woxyPTOU`d0Z;IT&0Uv zgcth&=780v)i!C)bTghI6ChqDdc$NN$Di>MbZ#<7gnW>P=$&^yZ9TNITz z3A$J()s?rGK4U}R5{YRz3Kco;Wz$doEB`T>)^~Vz34MO@$x^sW-3@yU+seEO1On1Q zULTvUn%}SAR8X{=KR%mH(!ncjt>&?i(y}s?Cm>%~OUZ$J5qdMKS)KI=#@O-f5x76( zA7WQwCD#Jb=8HzNGNs4s?)Y9$;`Eg1Ya&rI%kLf=4(VRXy&(DlTOTeTfKsE-+o5Fs z80iCHBq_BP7NEsi=Z7HVaLR-ZpZed*DO!Ns7}D-01b8Qlw?6aC{f=(u2TSwlq)%Ny zh9VOJH7~6{k|S@1ptuP>VJ*^-4fXFZS3tHmlq?Y0^9x^R^mv=m@m^e3UjfRPrxLIr z&ZuzOMU-@;&QpobzS%#L8gQ~BN|C%rgTR_Oc;lkmC&&+F&9)Am9NN0hKE-;K9nKz2 zT!p5*W?qX4c3d!Y#4HuZo#(F_>0qsvuQY}mCgaeEHL0p@d+S33cxs0&8#aSwW?aZP zr+P>tHf4;AlY{r0!C*POnRPF<(kgqd0yM%#rR@)1Sx ziU=}E8U&3&`Vt76blyiU@`1c@IW*nrK~A;@7Yt^rr58P_Jbt=S$jqkA z-dn4t`KbHGj=Zo_&F2`5+zbKZ62J4xYjoE~r^B5u0JK$J?RxzV(#~;oCs&r1{re{N zA)V#JFD$LMl)2#VF$NOfu*i9`m5wCbpv)?@pY86dl-Cgk;Qs8sg$zs#1v&q<2p z@WtQok*T?fxUo1Ddje|~m^#LuSvVIWu<4j&aZM1e$=tdZYUt28QqzP?R)%v%Z(`C- z+liW_M+ySPJAylPFxhGmpH}tQ?b9wY2ET0XOUI}8k#XJ!p~HYi)fDioo0|hO=|jmp z5ZQa*Nw!9Za&(N8I*7_Ke?;}o!@ig+D-h0E63|fYhtMW0XX}+Qzm=bpN##5>A73ok z@@zLk5>jfG&eZV{2*U?|yL9Y15c?*S`|g?Ngx^ogrdrBTp}-$NtCIqdB4N*fai(2v~!1EX*(u8x3Zm+crzR-!+us}cGWo(DdXKzl6;}S zvXthYo4hdEuy88ZurFJ4jzjNkao5ZGi-h&t2Or*^o11*#_8Ms~Oxay1uI-drlAB%w zOF;C0y~`2FGdhcgVQv?k-Pf`V}QH#0IUdHJ0|8 zVJz`ZgjH2&C;=(a!kgjeP9OOz$yxLDML-^}(H0^`oA8D&DL2D?q@wf8T$Z?xSrKP< zXI=VRs8}@?gk9~^6e*Dx*`e{i(HG)kI?+g+d;^x3c~xO9pH*`$@^ddw^$g5dyy)nR zww`_Gs+_)&W*XVK{6r)4#@!&ybs_`u!l^pPmGBjcr+VWwHX#A9lknFIXu7EM&6BPY zpL&HL^W+(Sv5w(~<&sfpwKPYsqj}RVhAwQZcsne#9L-B>`%?8UT{p`^x`xE9KGQUb zLkj~P`NZ=6%p$ubNznG+2$vzyqw1M$BDTt&=mK5M!sV!N$e0K@j@gRD+Bs`65i|+g zN4qX}J@lTdkDJ}B{ust|@+EYJ9|kD-w7c3=(5kGwef2~$IP@q*lhC?2mUENNez93k zcr0$&)mUNJt*xpew*Hnpb8o5rC+lkw_HY-mWc8ceA0~d!cKE#m^Bs0uPH(IgdRLVy zV#I3jTM^z3jTI%K3eg&qh6BN1Sb3}`Rn*TzAsK7-8p=d%&Uqn%x9*U;_w^4Jh5cZ zG#>7lbuM?J5iBo#$0HHhhf3d@U698A@Cdlso&jFSU|f=!`|p3_Syj33rgx+#uS>%J z&`#yDdm}IMLVnng@1VFR`L~_5eAcx*3)Qv0D*|4q8bSY4P<2KM=Y__atPf3_Oca0m z$*bHnFAH=?!+z{@+psQ>bt;08N3JjubrSVRoquwScuL3MTd>zu_PLm9^YGn{T486q zNvwFyg_8W6$FHF7_8tv{3Hv?r2%c&;Jpa5&to}GRnh&bR2V0n|CkN@uYs0|I;wn5v z#5mGfi>R1F**_ax@o{JQAt?p@m9wLr$yFVUmaUvpC&G_e*7;h;tVPEw9N z4v2G?a}ryl(MkSv3;DoJdH>`lQXo(5cpLcxS9jy=R~L52D7WxLKZLY7UZSTbGMI9V zg(23xzht;Qf-x4Zq|4ZWZjWj`%7|D56#soJ{ws*E09 z0-;C?k_ZP+z|S;lc4~kR%b4{$RHHr;nxN?qpwY57olUd36HD+U&+zfwYz|bGu6ea5 zY4~V`=X5-BEcBJTPw@wj2APNRq`V8!&qVufK$vpC#>JX|z4st!gC&u{^M_9hpb2dW>R_oKaaO0A}4f5~nihOW=L`ccY)BRmG?q9lnOy}aAjuUh3fN5>97Sn-rLsFi2 ziVK#&HC9~A_@;wDSYj%(y&im+2~G5=7SNA@!A@E6aH1(8e9-ur2`z{_x!`O69})Bn zvQl620f_@$9~;$ThRcMAnU&(MKN^LZ$zo<&Ymy_H>;n307z^j?_pSt>gNX(awdB%# zKRMOHv7XfGy~bfv5Y%!dKVTrTNNnIv`uTRAQvAo!rWPND0X3AYI;0dCD_aUm<9CKG zH*qj(yh0i>De9nBZJ&u2ZWaGC<65vi$HgA)P(S8+NA8N|ynXTaJf?JnU|45}LWBJq zYl{0Iz&GH*2j6;*K9Y$s41cP&n`Scr`iO~ddqzW*fXj4Ju)muO4(3YVY@o6!ozF&? zQ*LX4*EBTn|8yiQ$+M=0_bMD1&xWK%7Wwmvz4w481 zlCj$xjXk1fE5U$B+yT#@2P~M3c3yiCpZQ)*(d~!5<0ukU|KZU7vn1|2YrU8Hnfdn# z!*88Ki68*qPi=uZ8pjitGmL z!VdK>OmS*ug-d4_z?m;!be6VO?1>{@S>lL>7 zE`GR+^MYQY2``AryO`xeFf$_hTH1tIdi(PcpO#zvtsJWfPM@hW-FB;0s*{NPg0d?{ z_>yI(p(8J5JBQyq;qTBfiO%{Ox*DxF>D;9#)(6FB5y_lBGGfmz;m8>J5aMp}WYiHN z=p;Q)mxl-RZKd`pEChkB+JJMTpbGl^ogPzaIRTQ|{ya{%%n{T$_Lo6>#-&4d3IE2v z33U$J;0|;~cFjo(~?-7}f})ToxCm>-LGqyst1g`cmD2 zYF#WMFFaUc|6stNpK6U6(TUb=Z{V`^-P|W~sKm;Zgq)MTtS;5!+hI4Ii56DJo1U<5 z<2?tPN<(0b>yH>ia;U4;HQrOy2py00KVKHY+9H`d-edFrCq3*%wumxSk=6FsFUxbM z_y*(1zfT~PhPenmAv&h|1AnAnNoTpe$|n*fK*q@?cO5&Mo7?q%9$n^hrFrvvfr(_y zfIu>~cld-8bC#VHB=Do(9TEceLDJKF->eZ+V=*b1PdTTsB3tgCqxzWJ?27`clz4_5xJJDRMtYa zV=*~x!$G(#&+WbajPgS|yfjZTr1O9aowYbTJ(FaD^*e!hCmzMSoe*p5Yb;DT4^aMT zmneXhw6Ze$%WixVM5!0|=ofva?aM?V+xQFRuOL;T^MO^hezh(&_z&A!0+4k09nrtm zZS0!AXyNXG11Eb94KF)v*}^Hd6{r9R;a+M{?$x3V z(P^|~PZ#{~7ZEIPR%5!~q>j#bmHyR$rar|4t|lkv`7*n$v;H-0OI&Pvpwb$5W9BjG zI)}N*e0(&oYd-qF5QmwIf3zXq_y3+WUPOZ^OHunGcdP4nBLQBbOr%c?lx4PpsWW+% zPOlGEXVq#STD&)u0L=_(UU{>{iX+J41jg)T?D6&iUoNSb@hKbUyDD&n%pZ9mhKF z@=?5xYoIjr=W=G#wVjmX$*R6U6FdTj@FT-uj_krXT#Wkor)6<;KPdpeqyPPW5lfd< zM|g+CK6!#?k3oXMkF3_I(JD9p!($S zSD_>LN8ya6hu@v|G_Xl@EaRA_vU{`9ES%B3Pg{oQAY!grCU|jEzkfyY8V>_+i7)Z9 z_Q*MCPKsbsjFuVXEaXn&QfsZCZ?>UBjV#KzF005B3VW@Zd&n})+8IZ2G~tmC$%tdq z)R%PB>-bHg{+L&9R^vCGq1=2kD-L7&%!17;{cofAh)2Sf66OUj+M@zaEuY1;rlpin z*j^&GmJw$r$5nNpUHXId>QHGopI^y%q886?L+1MWGCFi--_zngTDB;2IUb6tDHBaT z=Vdxy%`tRV5A?1*NWe(rg2XM&7O=qSb$|s}W_2w6Y#I zltrM0v{u=o?ucPMd=D84SKyOS(dJEw)Dp%x==GFZy*!`Q1|y(jH6C;_Ex7TPlOG^| zsZc9u0N3S7aZABA0GjJmfG?3kF z{Wbe#nqvx}Phse7$v?zk4JwCcIIQh~k8^f-9RpAwZ+kq|*!VxW8AK(mzh2=q|6So) zBTwLt=GX5@D4rcSt}YDyWO+o+I%pUsJ$X&ntxHMtKmJH>{K&qPUZyR045R-)Nt)LDj6=tmLe%1&K$iU`!fr0cGJop-iOfa$pE_%Qm@57i>$nocM#3(XNw0*>rb$ds0837Ui?iBowrQ{`E^; zb1vd8W{TTrPtK0#Pg6eg8v~_PdifL>8ioC@MdY@G{S?-#N&?~p#`DEe zjn7^~nrEJW6SBNr*vbCGWD)q!-5c$&_he!?a_tYJrr&OAmVh3aUNs9vEn`Sp9vzPn zkL;%;pq}V@oK3{|8`QMkkuunAo)@Hj$zy7rcdeH_P`F8g!;)IGSUETrx!BwL zi2TP1Hzj`jM5k_0<2cM%r{9;xkjs(TUlt4spLx&(p(wHUZ z`eR?7Q$H)(A8yrhOh|jrx??}!$)U*PVB0b1%NqgUvIni@P<4eSmSv3WL;R+{^99N_J{I()Wze9_EDpA;{`1O9SF~L}B(*Ze4gRC?Ueo;(uN$!1I-mb6zVEne zuP|tPa1S+e+0$Ia<<@(&b1UT9p!qTQ0Bz!Tk17QyRjXDH8=@V#E8v-L|3Yi(9TI!O z8|Ma#KFQ`1uH>W8R%td#bF0^X7#XCYCS>cY70UDr>U445jqhV!z=SrVHL=rX?t+6$3X@_Aa2S@ zaIX0evr-ApS^n1*(sU*MyxeCp2_7fEsIwu9IbPe=rc6*r@c?SqV9^Dq3x{znu~AZM z0B?+XMm*^TYI2Tl=@IZkNXUj-c&2{h*u4eQA)wX`ueCK$9HK&ph$*wR`f97hJxO;m zNe<+AA_2zL$?t#Hg%dWw)7X_Yq04N-#vvEg2&AZpP_{R1mCllt?^v@xQvf)D*)d)w zKta-E86O;O+ge2_=gwP_c`2`G+Tv8{;PLDu(L#NZYZ?~bxkmH190+9A&Ix}|@;|5d z?gRCF6nsNfrE>#W;OANUKGmk}VN^Nv{14l+FZ)mTR?hY6dc1l{6TaZ-*ma5Wd$RQNlvOU`N-Rs! zP<<{l{b9?b%K#dya;Q6t$WuuSVD_ZebDLNZoOtO^3KM%PqtGuCjSZxdmx7yvp4o(g z(tu-3Mtpd94N{x!kQ0Uj@!X-27jvy*Aax%C{g*cvG`5+a`7PBP+;OPj*h+1gBv&)5 zKI>~pR4sIR;eKwhDlhwO4D>l|a&ys?3bRH@7|C7Ih%hnbnKHH*IBd-uI%`>CkG<+W zkb4&n7vbmv{&mPOMdigc=;eqDgsZb5Wt^3%;q5lI(cF2EwYv$Jx@$q1L{sYcpkRkw zw~Sh#R+>UMZp}!Y!HH#)SXFFUxb%fNmnjEdfil+|?K6Ni=hr|nyy3@(?|lsx1Ep9L ztgh%ZH+Oe{p##$isS0dz6{@)1#cFrUXrR@8;yVl!G3E0Q$LSE>xp4~bg&;!6%v+bg zE_4KfmaNZifCjR@i}r1zoi8zA=#8l1M8IF2sT=_EcAjHbQy#<%uCtqwMp+P@0n59j zKA+4+1@a0Ww}2^Z(1tMsOOmP_)C6bg><2xYA2T8n11qDt*X`>rj*McoZe+fH`Az@6 zk*L=7FX*2bOJG^~{)482(5s5R&xIkpdrnb~VJ(?ev4|6!d=7Af({JZUI3qMC-I zh(ny}K!+(^c)UO0hkAtlTRb*E8vd8??>?%2x#sjeo;;58pM3Jz)I8;6NBgLRRxs{j z1f{h4tUGB8#jEQ$c?gb$i&->&V?K!gF-#VM;6TuboW9}~;B=q#a3SkSvgJ~(Zmr6_ zp^LH{E&%w6s(^E6wW?I)%#cgPxXK%qUv@g&iGoh?vT9neD*ZeIqeRm_6>10G(yZ!y zAK0Rjsfe0zpAbrU^ZwT>aEo1KH^t49EKHRPm`v?sr-ry5JkTh;hnU5o*Pxf`2T`X^ zWHR=y9v5uEtORi`Z+r5*llpOG@WduYBQ7eo>K~`%rXTaA~h++j2%)4G-AY(B>Z!m)!-0MhVSB zU$L37Wz{#@=!l!VNUeWTHaHLxZnXRRO9CznMEw4Xoj{up+a3OYL#QU#uQV5_2y1sC z-=erh933m$XHc1=PuvLauVFcMiOs7)MisF4T^+*UA=@fWe7q zF7Yo4XmyLNV6!jCs{>Q^@P>b>xMu=Q9+l4PEwbQ7vcQFm-0t`U0_kRq7l9NbxOCoEYRaGtHh)}t~zOW^(#9lTyu zLL-~wM{fqsqa*F@4*3Qu?L+@vGB5qyI%{l}PmM4d^h)*he>t;w7U2oFN9mgTZ-vkQ zNGC~3ZF?_w{4><5ftDCADrE&jAsT!|G;jFg*fk<1s`2c)9*8YvwOP58egsM0wz4%N4F=Z9 ztK$m@VKwL}i;KWoDoilm`3W>B5YGE0sP{Y=`oCTP?vjB%qP{tFp)^`8vtQ#VyeJ(oXR$$5n>of1(gw%CTs11|EhJhD zp5+Boxe@8REU|q!36*w@zX0P}!-F9ApD9`!Z^Uvgi*34+GuRPjKT zzDn&$K90q`7KD9w+HigE2+}`pDPiX7L%`w!XP$ysQfy9osEJN1)8PEtF7GwFiy zDz9+lD@@B>l|8$s$A$+@YYYqjjz(6%Fq4v)f&Z7X>9g z#=@#IA&|3URB0!iiTl0Rhg!EZ`lXF0-w?)Zo0#kFTseP%3ByDrHF=4&pHe};KO(a6 ze&wc&JE=pCq`6pW1US3QoXXzmrhSBqAO`jwJV=dNP2mdvpZ30~y|Qn6GfAalSH-q% z+qP|2k_vZNv29mun-$x(ZS7Qc(D|KzpVNKOAD}PJzFd1fYtA*e#+Y-yufqNW0sv-5 z73kY7YP!O-PR^(K2Orn94{Zsmu?Q7W5;7d3Z-mGW3M1;C5s%Q#1I`T3#N_=WK`9GOYBk17>U}l3fB&%esx|% zy4fPUMBSmYNywj;W+X&@EMyM4#2}(Z_kPtn1X(FI7&KPClkzoR38AZW88h~1aK!uQ zhoWf%8amp5Yd2uns?E2}Uo$W;oT)oRiIjL3X-#xsEg0V8#!(ZD+JQffmE1;wWzf+J zw{hBo<|rv`4qG%~`;UKyi}Ke=$GLgr!qP4Ig;^N}4G0T!sg1r2-gx=*><8p$o^956 zoD_c2CTF-Rndwa1|1?Eyu8PWO<(KJbGV?dfI$&>Lar(M(t5+p0N8?Z0*4Vd&3+1$@ zhfUV9E84$?6lN?b6yr>9&*Sm)e%5{K2dGNbS*!aKxJuUTGyv`!}(FuBoP^LYUz5($+yu#7i=jhNNpl zgv=Ry#Ypj0;?^3s^O6gQ|(JSgt9fyTu-Fi zT=ZWuJO)hO@GcYjmi;`2n9p#NG+4yyHN<~i2NXAzws zUyqx}?fpM$Fam8=OM?l97kVUbF1$lbI?v|(nrvYmSm#*vw{XoT5|#TDG>uiTGFGv+ zet*4=6;@e)9&l)f&AFv_=lg^+w{W#DyqNU1<)mH#Uy?`Qat`jd9Tc*^b$A5GHT00= zX=u|TyFFM#qMm+F%&9RNrkn#4kqyYziAFSM*BGH#DYb_I%f-SnnNTB@+@vU)Uf}vF z-WTG3u3zjwHQ|`jb!V?oYtqZg^(}SoXoeapr1hT7O{G@~AMPsD;XTKgtu$@T-+xW( zc>>IJh<{8?p9^*{FI;~UE;zZ$)QH~J36tJ5_OvOv4uXmPjoP6nBS0;Anp@LTP43t1 z7dXjFG>ID?5-$BHtIE;P#0s!Foo};o;>F!b5HR5G-hMuf;o1joDQFm#$Vpot2WmEJMWQ?<`Yn7pd57FO57O+)z!EPSZCD=UDg#Bi^WAQis-=Nb(>gaCusW zJz=ebszirmV)^qNbRbQBrr=`go_#TJ^mRA&7h*7vz)MTe4rQoVI!xA<1~OQOj;O6| zgVjwOmcG4ed@U~I9CL$0&{*5BEmnXNE};ggoFi~pc9>*b#4iF&k!&y)!- z{vI3b&+f_arodQT9S5yKk(Z1T_cqr42@ID-OI}O8*sNKxc>B^Su#|*6Lp^XWs_4U2 z2)-sQ*xY5^u&MVKxc$0_`JTzhh)rc~mg>hC^3TpW=ApkLzpL)f}>Fa^)vp| zSwnansA=j6ZHE8+5KM|lt#QPdzg zQBhlNJul_Jav8YR_8%2s6ww1x!;gfbK0~-XBU4?`2Y-HXCIyes6^*8GCRn&uxP&Dp z4--y`bBa}^==xwBn2{8u+EB!dADtxM5>GJAJt!>XNBw`_S~EvM@D0!>$*OYYN$>a9 zC$N4QnV=c^?HI-LkZtOP@1=diIh*<*P6tsILxkZLkuRKYmK&?=K(@-KlP>#JZd#;HRw5+7X%@0KUewP8}d81zD@N%zDQ}~aXes?)*^0mOn|wtr832& ztK!OX*t+?NERzO`Z=7-rCZRJ)`>}70wz1^L(_dcxA#K&VgR;)CmgvrX*Fx#o3JvLq ze&uA=%wP*b)Ju%|5{zq=!`#P=4L*!5Lnp@WF<1nv4-Y-DLB&elb}S~Z1dB74b1iCNfp3gm80WEE(hB5|8AXmWhW z)>7IctRO3S2&U73nA%VcOL$x&l(+dF zd&Wp`MBvCX(M^VTD&W8Ens`QfMF{AuM(-BiQk z<&2FG(8Oe6Zx1Lk0UHhc(-VLYr{Cuaovej+EJcS_Ly3_id?`L0HPR_z6a>a-x$c!0 zc&kVsgOE7EhB@-=!=$)~$XXgnNdxB}$1u!KTy2X9-WC--p~uCl@x6;QNjDa4o{X2b zQo+3@u@8Zg=)pI!x*YVUZKSKN1oVn zE}^Z4E$ClwC7xo>zA3AyP|cZr3zV-PcD`m zMVM77y%YhVubZF9@&o1-U%-A#@L0H;kw*J}vFsEJEU3snn%iAwfk6=HM9yR#S)2i0 zBeV7SV}aw+qeWlMcyMibtTx3~tsE(YU=R%ujf%3Fl7Gvl_$q)qASKnrg)T(Xhl02< zV*|+MTXlmy4uTFE(SsE&pfk2Ffo3KnW0M|WtIYjHnZtroOb#Aen5P~pWQy1Xiy|mh z9j!EiMah zI?W|d9wjgiHD+*}0IeYi{k*!N-{$mU)3Ec9!Ka5t!be}?+FwyyDxg*Q>=*gJlLr*$ z5_l{?!^N+CYsX{5}>lmu7Ua^s!X%Ax~h{vtu1VwGxKim zSg5X&uA_X4&h}4b4u)yK`Px~r8nQ=5+x4p9K0jD>Az_u}aA3zz`jlQ| zy^keMzj@4_Q~A)$Mb}Bmpk^fI*MXHg2G_=Z|9Jl>?Pu23F>Z}M7Sp(;u7$T>-;5A` zi?~xcF@HBAmP>BZ%iJZ#<&*b1UJJ`C1lO9pnZKX83nWWKq5US5z3F&p|KSHXCj7nX zx&;JvHx#UoFhbM9h&aF6fckn9SIzJ z$e{oUYB^(Bh=sd368%d}d>Kr`;e+07YlkJVJl~qwcXO*GyND%^qFk?%QNQ?_6=hhT zBl&MgQ}tJTwnm0@v}1}H0iq41Ry(xUk7>{+B^eF_X&A%jaf7N{l0D=7jixP3YP zBZ%t@;#G!0n2ng41j-soWw7?vqWmj7tqUCXVKSIh0*2|z27LzS!9ggTEJ1hQ$w1hH z%vkpYa-p7lIw@ANE|yx2Y}M;E)^ZodIQATmjdhu>ugX!1IWomuc5~ zZ<|A#elt{~L{E9TNpq0!ZLvgLMtPB*jatWSZQ16+4sh9^t)fuhjknwrdkH{vmg-m8 z8+qOrJwfBzLHB6$NkSxUPQI9;z6oLF;VF_#!)n%9VxMb5vobTUg&jDmHEmov=w>&l zCpGhXyo+yl&#Ds#?Gh702B(Cqf~qQiS7NXgjdWqh!#UX|zW0gVW+W~2TwO-8E3dw$ z=#tZ%(72;8TNFn&tnz}p65+A_qhf8FQZE9!cxgKMq;0(M+fmld$w>!8B82ZB3$0J(?-(V~-2g{+xz5GFs3{s(sjLhI0=160L_CrG<=J5%J`% zzY~92CsUkn9Md11@FLf@$7Meaz(t7v%Z&dq+_@tCD_p`i&@=~*hn%PDtELEh%d?Ez9u~-@uXiOUf4nrpd4>iQ2pGs zcQ>?@`aYOU_;;rmNbVQfyPn>g$s)KtMO3=Z2kU)vrTFo%ShEdEJWqUlS~6+l*PFBx z*L(wbDr4p^cXwvnorBM9_fwS)B!*fan$fl|TzC~AeX|*~xOZEiAXrYg<-ms<%&$w# z(YRn|rXAF(!yZD0B=mq@$ENCQTdIS&HXlvr17N(lxN!8UiB4WnU4M3RS=u`ju6NTP z%e}!9zbcM;?QP*vQfp=$E7Y@U1*XLP$+xV*x^a_iInX<9|6wg&?~&;2qiboJ+50E4 zyj8PpOS42jp9^mDTs=z0((v*xT3u2{d}RMFUc&W>Q(F6UgXkI>e+wYCgz8oq*>yC1|HPJ}qk|*_{#4v|u#lhpp>PMVyAiQck)Q zYK2tP9929Q+9a52O`4+MY#O90H}xEbTv=R&sXmkhkGVNt`rB)V4tv}I_t(OPE6Z)P zXW8BF7|T04AIc8@dZ6G~UVbG58ND6&!t=$?qyB9E~r`lk?PO zivw*Qgr>rz{0$zo{ABeyVe?-zY#5}ntJg?z_v9ekLZwqSZT|v1eR@U6_;164);dxv zdo0N)<459okm2K0p{lNpUzdiSE3VzH3`Te#P8J5psD%41Oe5W}jRH)J=_@6Tc5K<(J z*mDw@LQGTDJky&*n1d26xN%X{KDpcnU1rsbi#v zo6YUcwt9mGpJoq@?LgylX6_cNhW{J|*RQ&k(X)?TYbb3{%oV7}qLt%}O zpe4mA|DsPSt)4TM`cP<+NAZMh|L+=yg7pzN?vRcYc_-j|jQ!rPJepN;<{U`=rU~ z!-v{v7?YEjv5MC1MNBdkbId9iXCO^fK&eI+x@NMa+*>(u{-Dd3_A(p#tc$BN^H0{a zPI2c@lS1ngn=5zuT$|1aAJ>LdWzXbaUVi0~-P$=NmhEx3$AFaSBz|_w&jCmxi?57j z2~*#UwvdvEw+s^tsymtGIoXe1p!PYtEdb4Y2jj7pH*Q!IYIUsD6E2wgg_89TZ@L0l zX4;~g)Vt<&Pq1~GQ`8G475?zI8toQtEZTJ1$;pkVnF6qbJW2=yERyQ`3qy_!Ueav8 zC*a?WwX9LsT<=m^b1#Xfa0(EDOkQ-`<^%_E2@o01MEf1jm9{rre29Cy>`FW#3ZSub zQO4SIkKXCw`Em{$f7*b`mdoAJyvd+Z9kqA`HWSmd27nQ96Z3WaypMjSOCR$=ztnW$ ztKRnV#IyHAS=aFP;8i$)=d;A*h0M#0jBsh*iKLJl=Szm)K$~K6#VFFaT%+eH1ed=j z=TcYRIWKL;lt9@(vuy~*?USg1?moBKey;~L8!xxHRY!Kd0liT$S@xonFi`5jLW(;z z`hFKVk6qgz4S-NgfjR+gdm!L|45O@$X%bHAL&_~Y-(oZ*H23YhZD&9K^P#y0v}W*| z1!gOA4r0Qc;YnlI)p+iUYg5}+vF37#CUW^=313Yz^dY(ZW3pYc#rUwYPM|Zd0zaos zp>BI%&5JKOM3HgH8kR#8=NT=3fgUG@NJiu?S~-2vm=>#A|43QM>Key5$cb-YLG-2` zi8|aqA)h-Xpz(Gf=}lnCT~2E7z3d1kG67ccY0rxO9*VKXYyQ6RTd6QZNU6I{k9gLk zB~&pS`l(l$Yvoki#TB?MPx}Vv(|udOdgxq{T;$|RZQU6VUy*`X-Jx%@ez>6Bp4)Kz zYoljD0vC|&<4@BB_H3~)lHPn3lyZ^zk3~Qz4bppLYxVwpJ&Wq&icNk&btb?qGO%i( z_Ju?V*UR8CUA_WtFmNd*%NQ-sBIIr=GpWi_*?!@D#9QrWv^iE)B4fxmULSV88Ax(pV>Cv-qV~-cI4uPtZ{6}CH*In#Y!1yYqOYGzpZ;#^Zq+kmv%$;j|H(59@W&rV;m{SXZ zI$}lDuw;6{mZ!_@0!Yy1+R*c2wCBNlJ@*+O!iCu1KT}p#b=ooPvlw{>ZiA*U9o{Cq z+8zU?C+Jhwt9A>F=}#Xio@^_BR>bEmDU?=G3=Dq|3>8HDYN*)T<-nmia;x&y#c+g{ zDANsV&ciWQBE98zAV{e#V?wkst>ptulrw}>`Ps@@n5$BKXjT=c_U5+!UYwnEbKZAD z`wr-W*u=R^{>pEKMqWX<#G-c|Uo*C?+E0FF4P}ND>@2!u*7H+F6Qx7I#zbK7-YI^Jw_Z(A<&lA zFY+7seRC3eHu}b_O+Ud4T5+mlYN-HwogLp}J9D3RA34C|yZ6E!y%QSTZVRaAa^IAM z2}7Jw+7Ext-c0>mrrD0$R0SfR5wXW7#8^pBC)_OUSu%nS#JE!b_6_vblikf0eo|@6 zWB2(s2FnYv*krC&t@W2BYP12&*sCBN($7g3L|>#m!rAvj*-gZ-M_#e=liYH2<4rjl z(mckGyUd+VP2~o46eJSVe}oC2>oPniFe(6hnsQqH@M&Xw7eV0MO}Nxs+1^X;F#Ido z^Yhiz&+o$R74iSldd5FmpWg29^LQJj<(%Sw9@9SuR`>Cy8j6_eI_)_|Kh|K6Z`7*S zDWflS+txfrvyexTj1nD#+V_}@(LKXuY#tY0Ea%N=`v!2a^##2CHicP;K)yQJOy&=GDD1aADa(zxcu^`)oA?e-9bI{ z8Zob!(3`gY{=tNYKrYZsU*XF&I<+2}PEr>eoE*Z*kjIokc%93-3?W0lS8&5Qs(feM zheZ*N2Uit>vfAU1)UTl=LC&-Xq|kKS(Q4F?l8eD);1cLGw*2y4)9my?Lz1Tk(E4fnv|oY$vw?Or z*1g1soURnbgE`Y4w+FIL_92tG6FA6k$G}N+XYU^HiN|C8%&`ea2Y>4~i8>v222dW}YsB|-)In7G#r$~4b>XxO4V zH{*R&Kaa;P5r@~`iW557!W}Q!`lz|-w)Zf-J;p{A>YXgDD?4jR5n?=<>UsJE_PLAB zz827N@Y#Ox=<;!B8zE??8FWp=@e-X2HYwrER}`IOb~cFjB%Sa=uF2bOT)kIGU}6i! zhHpGqDh26<-124!QYmP-Zm z!rR&BZneT*Xxrdngcs(g*~50qKiD`q#Gp8vHh3UMF5u}2JeTV8%)l2a*eI>a-zOJc zE=KO>h;hQJ6EuS|%D2#Crv+P|EBd5xKgo8s`Ow<8XZuI%)m%|eMM|tvq<-!DILE~m z@W<(~o-Yh}pbjFH!4! z58VJ6usP1X8%|S{EhCxhU>E(R3SwPqS6DjV$GrCWOZbZX)Sdm3bI|XJ@~O~*?6N~$p*+l=l;<@*&x$@iAB^4I zP4D-cCUpkI{e7E1M*FL#$d-!z2)VhI4E7d%$-hZ7Gh`CxF$!Xa*Manb5Qv(7`yGKd z3aBBI5I*J6l+d#XVRsWGWRj5L=lm5K6XG~(%wQSCBHY?B10`9C*CIKGq2^>wk)sV{#U5^2uL z01)rt=q4#|mO>1Dizh-)`}bae;WT?%6Y(eJ3=1iPB7s>sK(ldB5=I^Nt~2V|nXYnV zYh;{?dHfQ6l=<0!d7N0bp1+3(>h)MR+)NHFrTnF&cA?-ZK_!ppC&QAdoGe$Bp=Ey2 zBG#1olPNJ9AJb4OpszC`@Jcf@_egmzgWpt^iv-fuO5M0{4Om2=&gD#<7P*EpKEyCa z_M5|R{A|10fqgLc<-rfg@8oOod&u?~K-RaOT>4d9hf})e?{l3M1R+QrNd`WC!Z_pa z=91S9o2i9*i5rPcF&d&dF!$Qi^ly=$=OOcyk8O#*Z!Y;~H-;`VTc!sc^8L&-m%sJ4 z%~J5a`V&+8!^Yl`}5(&6_5%RuSiR znFfzjWJ8!(fu^ZM)G*>|p>|HMyFORx0tB;L(HS=Bspnva0C`n9%k@vAyz?+svx zfUql-i#f~m+=^eFt7$0mO&}|8QN&(k2PzX75@KU8$_PkIV8+hR_`4y^f6l>L1}L z^g-fW6*`K|BFj+vg+GQWaS!R(1v{1Wb>tgGsFPsTTnm~Ah8FY^G^C+9F1|sR3(B6nsgK2TAt{1Xw$7ODp2!_1a^lw zgn@B7ij53ttCXPa{<^H1vT6GYe%sTytAzpWizeqdtjcCmE;{ zxxIrIO+r1N6VBX^gAcw({lQR_G}uoy%Hd?#_#VSP{JLtIW~|opJbXz6aZd9;pG}>0 zQJ#X`4!Y4Aut7TSd}Zk`K=-a%t=OJlvrVZFcy@`E`v#FQ5v2Nllp88c3$0jUS(081 zxz7G4Akd5~nbmj$5ktFi|2-M?2-O%@B?rKj7f^=qfcl3I$IvvnG4~ zfU7bN)2YFX^e9qL6W>Dp6T#8@3eGR#0&5=-ppq@ksnP(UVS;vAuPJq+Jurf&<QT4SEkg8}B_eBv zTR{5f`GYLDthz#))oQ}qgh4ZnKJ4}W^WmT<2eInLTuWDW#dxnjB)Db4FVS}96|D;{ zdhyf&l6wl!!~QFlsCT?+g+8OBL+KyijHCK}A{JZady=ARnGNKG%$4;;Nbo}yO~@e| zJa!V|B1xfSC}gfvDL2C>_;oT!QttUMSS{MSX)@)WwNq`!X2e@`YGRPLZ_lRRfa`v# z1LUSPNbel75bjS?IpjDrhyjj*0X?snzKD?WK;5t;LY3QxZrHb573;|b+|-;|y%uRbFHdLf z13L0i4K4l>)KGhDHn9cyV;Vae5xT(ywZlam(S!-}IAe^7@|`V^Ui?fUuDoml}-id^YvjFP@_o?37C`^!@PvZ z3R~>&?*OP#=8Og9zcgSmSZnaZlS9WHnfI9Kon1O}&SqkW3rDTK>vE+hjd|F+7&^$< zcm7VMC1sDS58&UL%)G$i!R%83l`S5!)w@zzJUKrajJeg(f=Erz4P7m>8N6$B$-dt@Ig(Jl;p9x~ z1#;cjekduhlqO`gLRbA1pf$DNz!5k%1u*THH4W*E1^+ldjP{h^^G|NQ<~L92r3&TK z0j=t3z2t-l#}MMjNfrlbJDiBKUpp&bMB`O1{3S__2@-E{seiv<)O&eG_5*E?@PR|j z|5NZN=qjtgKn6(myq^rdr=AnO54^qgjN3{AB5^A~FS&-k%bJ8+SAMNcO@QetS&)7Y z>h;l+=v!`c%+%#YW&8Lk?{MVizPbD3&|lXuQA~6OB=xMuJ_l77GeDjky}NTPM`6R8 zLUZ4QmK|SQ#){aW4HZtfIUa4K7g>X}UT7u8ZgON1G;o3>E z-OV|+g1M`q=-}P`rOvwhZ~Iw_gOQU;{=Pm=m7|>U$hl4o8d^HT^!T&3kX^II;^{#e zY}(&xrf%ga`F!%_Y$xXyq2FkGSQ6lOPwOFlHnBrZ-20ZA;XVkRh zbe60DR!L1OzOw$*da8hOU-gREzf476R-2d^q9bXuXYDG2v!4hZOVktzBQai%2*iC5H(#5nso`Hf%Jg#>_N)9eva%F1G(u!o68zl zw>iBX8HSgMA4jZ{%O2lC^OOFzZ{(;;Rk2Ce@gl?#nd8;{dKZ$XtDoL^9pqG zPAd2~i0or8mD3|+)D4O94a6au^ZHm2-zKC|54f|5X=3sA9RzF3~ zJ8gM2s>wpWrp61XG}FX?fAGSJ+KhCO5hDNw4%2B4nZUIn_<7`Q zWFMJs+Oa0J$A{DtDHkx^6bLZj_5+%GgO0^EU5SMSbE7f%Kq;{&@i;r#-Y52d>J z4_{+yRq8ZID;rVW4F0g~+QX2`LoG^ConU35=u|x?fE@2=V#2#r`_ zrB({Hly0;Cd$rcOSV)r)K~)~?c~}B-9R#x>^;k_@6J5vm1K$o! zf#jEBozyu?TilNi`SbbGrf2H3a(%IKZW_-etn*;Ea~@h6itz8NUpU^g*Rb5Fl^_)^ zwJUGKDBGRr(7EG!P~Qxu9O-1{$Fpn=T^k-QPo&%6NC9}Z*XbA(e%qoUw$lkAD5(ts zm$;d{jh4)p<4pelFCfUP8{SukC< zy4SecS7NlhiXO&!~e5 z`p#1Z%Ceg->W8iQjb472leSmN$J%~f3$gZmTHfW3#<*rik4U`k5eyN1P!QXthU2>? zl}<8c6F&ceQ4)@TQlExb2PMb?1TD0t)Rtm}( zq9dDkS6_k;nwA)MEt*7F5I=p*D*k@PPEXQyuCPQoEO{I&c;8mlbL;NGEDQ#b`H$rB z|B-xmAf(syuI$G_eDab|A!s;FvFqwDzQ=2dj_u5inx)d25d zXvg;Ra}V9*ZTj<%%GyaL{$ai#Qe#VBpQew`6=DvE+3}=qO9^B2DeCEwRJI(9JjUKeB-D~4e58P}^NntKlc2OUXx981MlbyZQX8V=^3s>y|jplG<5 zL>BCMvy;ke?v(<{Up56!W-T+k+2&G*wwzTWR-h9xwH&6a*-9WW26Jn=IYEs=vGuVH z5?!=`Nao_Y!B2fUh9=aKHNy3-(Sm6m_pW2a+b4W)?AsG*R4&`CbTxA-I!L0=;Qbwf z7^&yShwsNSN+`4WzOfN@+?0B((YO?XN zJ`2&J<{aubpMeD!_jrP_9O7tcd~sBJJXk$BIvW!dCrNa0a=6AZ8g2$VbrNKm#av~p z{8ocA{v*Recu1LEE*R{k2dI=UDn;=v26+Lea07{ihHnY=G5DtrJ z_|FU9_Dtr!%HT|3)S#EoTN`xF$FQOA;k8c&Hy#8ES0)(5m7RnhI5>_vFjlT(STat-xZj^VNT>60X?0*u&pVp6LqmP z>XI=pnWWP6F@wB;WceEpj*-U1<9yF^ToBt8q)=^AVANI9bXJJSXk!4t^xtt5Cehlq?eWe`b7|n!&aF+rDcMr{LMS%F1 z*S$f$M)jw@uafePGcM$|czkz`+G_Y7S7wKM9&B@81-IWflt=5HW2@^ zi4v6Oy2k=cLy!FPoVVrJ3%&QgH;|9iseV`4#x*ye$C=T`)8GO31%F8D)(WE2O0H9@ zp1o@q7awrQ`Jck`6XKw}uUv4*qyPn1TA@I^iqGHDgK#mC{V4UJc9gm1(0cdxV~&LU zig7v-2qMzMew?t6Yomnx(9h*!Jui8vA*(&8X?$2s$OF>cFa^|#GpzI@GH$?odo8nw zp=7u2OW=qsYGu2j-OhQ1USg3ES~^YG1y_(W-X56Y`RrWzSpn2rK^M~)<7Jh$4lO-p zt?RUHV{t}OM!G6bkUpT(06$xB`7P9N!}E1tP6x%mH6y865 zeNFgrHM^xRNrANOa=9}`i^-VX(Il7CUw`}=cYUPFBKr?-O@LMv9cMZH@3q#`kSCUS zUU%Ps<}1L{noeaP`1RsS5u9~0j)d$6ME%K^>a4+~kfN7kgP7)verMTd^F$-b ze)Wn(h#_?QDllE*6$mU?bhZ4{v&&Jff$(K7p5ay-k!+cHYnk^m<8Yl!(VuBN68*CL zu*IdF5vlVx_Yj#JkIu_cwzVX}mr=dlo97=%k_n@}k&mO}J&(sZZ{aoXQ-ZH8a-^TH z$tm%v=4hvV-G6MI2rQr_s8=$_cW-V=H1s_48t@uWa9{Cw=N|jSgBl9*X`a&^?-Flm z>iz+6_q+b_xyU`f$io*p97#L=*@^Y2=6n4JO~w%@ZPOq!XO46>X`|2Xmw{cQ*{37HByvI#WWLkNx?B| zodIb@mSAkG4NRDqpy|cXkM zGzH4GFdD3-1hHWrVnx2c_WzvP{ZypKs{SQw@)}aCf;!h?0xtek0v zV#8&Eb(J>BEqBvef44G-8z*)ZP7B>4Q1pU^yr?G(C?C8lgc_mBAduKUv>1Lo#yF7t zmgki2D^CjXI2|ZPj@uWcS@Af#sSl)`_Wt=-)$r93rX^j0T@9ow_o)?nsIklcJ#CZ| z9z`ja`}ko(E}hDy;pLce{?IpNjPdoqC?J7KHglRLQ@YPfycHEK&G*=$I2vn~wEXg9 zrv$xw))mNAj)TTqXc}?_bxexr-pODaC`a114QMi4ZWja3%HIiUwShE@6~2~q!is46 zq~^9CZo@v!TW2Z1N%uEAr48zJYGN6?X5U^|{oLLT9Qp1?KU{}_$09I7J8}>(t*od{ z;Q!+zU=V%@FwZ&t=Yo2Cq49ANPk2x1G9aH&Ok^OzS&HQ5(rjDy;$7i7{}ztC)c&uj zhU6RyUye&bK6^uxivV2I@bGJD0KzpHnd?OVs@J=TV+KDXQlc$uoL8VM#aw;pv7b(lS?Zabh)PqTo4;qrq1x1>-!;9>Y~AHJm`eKME%Xq}$d zbZ=F?=dE7`8-JYOUca36zxBLvhx!ifZcW~gx}>4at>pASQNcgfJ{lL%EUhukxy9!B zRxdgN;m<59)ZG{C>0=nXw>J4U0Q)YAg3lL@`fn=$!AL6rJP%5&zyIfI+bsIOt;xT4 z0G4dpc-fV)>spdfD`(q)u?GM0(Gu^;5Ae8E!{4cw^Ye4?&kQ%svjMndxW}tbIA#h? zCSY{a>+yPj{$vX)5bSJozZ>?u=_P!7@2D1heW)?~h~G}*Vu(Nv zkp6T(`S!n5eE)g#e*z5?<)`IvH*vTI{}Xlo<(mH}j6xm^ob&Xk;O5`j`*hh)(PhC9 z?HnzvEujA^BmevUG`7!Hc4200pXfg~{pUF@B%kdxRa;fffBgMF*Nx^r4I|M(01o*- zgZ=ZIiEuCo2Zbtmed7N!iO(qb-%0-;$$bj(zmop1dHmNA{~JC26FUDJr~hBc1=o{& t9}EmUU0O_7?Z1iUe`nwSe@x~1L!&-53as+yHQ47*T3kV_TEytr{{ruPUAq7P literal 0 HcmV?d00001 diff --git a/packages/neuron-ui/src/widgets/Icons/dark-unlock.mp4 b/packages/neuron-ui/src/widgets/Icons/dark-unlock.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..191a383af0f1ed097b7a300b6dc387d9c0bba7eb GIT binary patch literal 248770 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 literal 0 HcmV?d00001 diff --git a/packages/neuron-ui/src/widgets/Icons/unlock.mp4 b/packages/neuron-ui/src/widgets/Icons/unlock.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..c7a054b2c7bb1a6c07f44705a9c2aa147151c698 GIT binary patch literal 211408 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 dps^LUk5*>b2$Msv64B*NI{Aj(6+{j{)%` zTFWL{9xSNQmdM$5u#g^aO)+Ag`mQhi2-ot9QQcYVE{ZT5C$9=OSF1y+E1d{*A+T(ed|i9Itc;=TQd76zE#%6~bqB~#f_px|Zt%m~ z22kdOAqqgyE?j>d-07U6y!hFQIGl>pfUm>g?Bt2-7M1^iar4I*nYXGzk+dY|*vTP$ z+p(=I>e;^JYxil+L8&+ z7f6%!o!S04`(BQ1uFpD#n#Sjivhbbi+8D%_0>4yeoXy^hRMDl9<6XB44C&S%SCa;O zdH0`T+G&I!BdUVCepF#;ImP67VNrjG)8@p?x|>FT!Y*bL09l}(=Et<3YJ5@x5)fb> z7BtDOa{0mz8jL36kzu6HuZR^ZAKyF=&LO8~MCs{@=(VU|@F~(GG0%T!C3Spzys|XK zy%wt>{?R9aGiLN2*r<)ohmVj@-vj%F4h0GY`XpWV@st8WD} zt-%7+LiWatXf6_pUZdp11?t!jP!%wp^40Iyc51mK#lA5-zQ9>a4`8%~60ZCh=l+<0 zV8z!-E+;vQJ3<>=(cmTq2o1%eAU6O4!gs2mZ9jT1gHBhwF`N30uc~I31 z?pT7A(o~Lm;z)1*D^XC0P`OGknfc?k&0%r213%K`?LCP6(xL>FfXx|(KlVyh*T(NU zHH9oBlfUmYNuz>vzn$$VjY#I5va4zon_;hl8!;X3m)IANMsG?q({m-INf>)Pvp1(h zpCGVAs4~?_X z*^{SQo1Qgf-yMQP?!q;j&But0e6KK`*txb%r*pKzZ!Eo=T>>g`q&SX6F?GVd_(3dzUK*;VZPGQ>2gEUM=V5pKNXc>SW zJ&AU7r91CMXSbi{I?D&g>-}{bd7*Fo$=kQduiw72j$7kv$b&;>@j1IAfk}RT4moQ< zKJ(dW75+G;uy<<@drjCiQNj10^riZ63dY6T(H=xcsa$R=!UYHi6TH5Mbo0BGT*Q}` zMRU>yO*&b=FsG|WkkM*OO=BFJ5hV1*=-+T{8m+D$=OdOAmZ{xkyqOi3f>C1xQwd7Z4^M!s2s(SCn=ArhbT0;w|o7 z<veHxcyK?1wyG=Mb4+3pwng1i$}hfYLy6Mp=gO2j4u7BhboP%NDX6*m z^LMhW$lb_HrvB@75*K?`NET7Z0OF{;SoO7TsfGr3AHXv<@&JhAF|y&{jf?jL#M&MW zOaC+_H+qx{eQ@pBdq0s!)RIe+RUDq+$b3(cLf74)=lRnP-x&L{MUY~A8p=p! zNc%0N<9DCYf_JtU7J%F*qKC)tjK(nr9|M7 zc@imtlxF_W<>a`iet@OQHKbs)ha4T`SfuUdPei~y2Y8Kp1Gl(sA5#ma8eo4?u7vuo zRRwRnYVM8$eEPyF#h$|sj*&|XWu$DDg73Qn{fHK~14XXh{(PS8*$DmhuR2w4q09G? zb=~5m`m!Q{qVC!&*9ws6OSwtRFQ>&3(@N<_K^r$hM;-yuF11y)oXmoOSE+jse~;65Y0xUZxMB{r8Ig-^c`?~or&CxF1|s@~nxMIKvd009H5 zu&ai%8}<8NRTmir5ski%lcU^5-?C~w5um^0$q(*od7>Iqmgc;m_a#$_48cx6_lE`0 zIu)n>Mde5t1a||772&U^w;AUjY>dTx?p@65iGKIMEvRJQ`d_SV@Paz7+R(MOAAdxi z`!Z*L()gv1WLP4!qV70X+wzQhv*}|N*FHqeJ>I8<Vr(?xwLI(@ zx;9VrQ?wS)DSVhG7

+ + {t('nervos-dao.attention')} + )}
diff --git a/packages/neuron-ui/src/components/DepositRulesDialog/depositRulesDialog.module.scss b/packages/neuron-ui/src/components/DepositRulesDialog/depositRulesDialog.module.scss new file mode 100644 index 0000000000..22455d7c0d --- /dev/null +++ b/packages/neuron-ui/src/components/DepositRulesDialog/depositRulesDialog.module.scss @@ -0,0 +1,28 @@ +@import '../../styles/mixin.scss'; + +.container { + width: 680px; + + .content { + background: var(--table-head-background-color); + border-radius: 8px; + + .item { + padding: 16px; + display: flex; + justify-content: space-between; + border-bottom: 1px solid var(--divide-line-color); + font-size: 14px; + color: var(--main-text-color); + &:last-child { + border-bottom: none; + } + p { + margin: 0; + } + .description { + font-weight: 500; + } + } + } +} diff --git a/packages/neuron-ui/src/components/DepositRulesDialog/index.tsx b/packages/neuron-ui/src/components/DepositRulesDialog/index.tsx new file mode 100644 index 0000000000..b934091fbe --- /dev/null +++ b/packages/neuron-ui/src/components/DepositRulesDialog/index.tsx @@ -0,0 +1,39 @@ +import React from 'react' +import { useTranslation } from 'react-i18next' +import Dialog from 'widgets/Dialog' +import styles from './depositRulesDialog.module.scss' + +const DepositRulesDialog = ({ show, onClose }: { show: boolean; onClose: () => void }) => { + const [t] = useTranslation() + + return ( + +
+ {[ + // TODO: calculating by the capacity of the lock + ['deposit-rules.minimum-deposit', '102 CKB'], + ['deposit-rules.single-compensation-cycle', 'deposit-rules.single-compensation-cycle-description'], + ['deposit-rules.withdraw', 'deposit-rules.withdraw-description'], + ['deposit-rules.unlock', 'deposit-rules.unlock-description'], + ].map(([title, description]) => ( +
+

{t(title)}

+

{t(description)}

+
+ ))} +
+
+ ) +} + +DepositRulesDialog.displayName = 'DepositRulesDialog' + +export default DepositRulesDialog diff --git a/packages/neuron-ui/src/components/NervosDAO/hooks.ts b/packages/neuron-ui/src/components/NervosDAO/hooks.ts index be667bff81..e78dd44f67 100644 --- a/packages/neuron-ui/src/components/NervosDAO/hooks.ts +++ b/packages/neuron-ui/src/components/NervosDAO/hooks.ts @@ -2,7 +2,8 @@ import { useEffect, useCallback, useState } from 'react' import { AppActions, StateAction } from 'states/stateProvider/reducer' import { updateNervosDaoData, clearNervosDaoData } from 'states/stateProvider/actionCreators' -import { calculateAPC, CONSTANTS, isSuccessResponse } from 'utils' +import { NavigateFunction } from 'react-router-dom' +import { calculateAPC, CONSTANTS, isSuccessResponse, RoutePath } from 'utils' import { generateDaoWithdrawTx, generateDaoClaimTx } from 'services/remote' import { ckbCore, getHeader } from 'services/chain' @@ -131,6 +132,7 @@ export const useOnWithdrawDialogSubmit = ({ payload: { walletID, actionType: 'send', + onSuccess: () => {}, }, }) } else { @@ -158,12 +160,14 @@ export const useOnActionClick = ({ dispatch, walletID, setActiveRecord, + navigate, }: { records: Readonly clearGeneratedTx: () => void dispatch: React.Dispatch walletID: string setActiveRecord: React.Dispatch + navigate: NavigateFunction }) => useCallback( (e: any) => { @@ -174,7 +178,9 @@ export const useOnActionClick = ({ } const record = records.find(r => r.outPoint.txHash === outPoint.txHash && r.outPoint.index === outPoint.index) if (record) { - if (record.depositOutPoint) { + if (record.status === 'sent') { + navigate(`${RoutePath.History}/${record.depositInfo?.txHash}`) + } else if (record.depositOutPoint) { generateDaoClaimTx({ walletID, withdrawingOutPoint: record.outPoint, @@ -192,6 +198,7 @@ export const useOnActionClick = ({ payload: { walletID, actionType: 'send', + onSuccess: () => {}, }, }) } else { diff --git a/packages/neuron-ui/src/components/NervosDAO/index.tsx b/packages/neuron-ui/src/components/NervosDAO/index.tsx index 5801fc1980..c80a7b2a5e 100644 --- a/packages/neuron-ui/src/components/NervosDAO/index.tsx +++ b/packages/neuron-ui/src/components/NervosDAO/index.tsx @@ -1,6 +1,7 @@ import React, { useEffect, useState, useMemo, useCallback } from 'react' -import { useState as useGlobalState, useDispatch } from 'states' +import { useState as useGlobalState, useDispatch, showPageNotice } from 'states' import { useTranslation } from 'react-i18next' +import { useNavigate } from 'react-router-dom' import appState from 'states/init/app' @@ -16,23 +17,22 @@ import { useClearGeneratedTx, } from 'utils' -import { openExternal } from 'services/remote' - +import DepositRulesDialog from 'components/DepositRulesDialog' import DepositDialog from 'components/DepositDialog' import WithdrawDialog from 'components/WithdrawDialog' import DAORecord, { DAORecordProps } from 'components/NervosDAORecord' import PageContainer from 'components/PageContainer' import CopyZone from 'widgets/CopyZone' -import { ArrowNext, Attention, Deposit, EyesClose, EyesOpen } from 'widgets/Icons/icon' +import { ArrowNext, Attention, Deposit, EyesClose, EyesOpen, DepositTimeSort } from 'widgets/Icons/icon' import TableNoData from 'widgets/Icons/TableNoData.png' import { HIDE_BALANCE } from 'utils/const' +import Tooltip from 'widgets/Tooltip' +import Button from 'widgets/Button' import useGetCountDownAndFeeRateStats from 'utils/hooks/useGetCountDownAndFeeRateStats' import hooks, { useDepositDialog } from './hooks' import styles from './nervosDAO.module.scss' -const DAO_DOCS_URL = 'https://docs.nervos.org/docs/basics/guides/crypto%20wallets/neuron/#deposit-ckb-into-nervos-dao' - const NervosDAO = () => { const [tabIdx, setTabIdx] = useState('0') const { @@ -42,6 +42,7 @@ const NervosDAO = () => { tipDao, tipBlockTimestamp, epoch, + pageNotice, }, wallet, nervosDAO: { records }, @@ -53,6 +54,7 @@ const NervosDAO = () => { settings: { networks }, } = useGlobalState() const dispatch = useDispatch() + const navigate = useNavigate() const [t, { language }] = useTranslation() const { suggestFeeRate } = useGetCountDownAndFeeRateStats() const [isPrivacyMode, setIsPrivacyMode] = useState(false) @@ -63,6 +65,8 @@ const NervosDAO = () => { const [depositEpochList, setDepositEpochList] = useState>(new Map()) const clearGeneratedTx = useClearGeneratedTx() const { showDepositDialog, onOpenDepositDialog, onCloseDepositDialog } = useDepositDialog() + const [showRules, setShowRules] = useState(false) + const [isDescDirection, setIsDescDirection] = useState(true) const onWithdrawDialogDismiss = hooks.useOnWithdrawDialogDismiss(setActiveRecord) @@ -84,17 +88,27 @@ const NervosDAO = () => { suggestFeeRate, }) + const onDepositSuccess = useCallback(() => { + onCloseDepositDialog() + showPageNotice('nervos-dao.deposit-submitted')(dispatch) + }, [dispatch, onCloseDepositDialog]) + const onActionClick = hooks.useOnActionClick({ records, clearGeneratedTx, dispatch, walletID: wallet.id, setActiveRecord, + navigate, }) const handleOpenRules = useCallback(() => { - openExternal(DAO_DOCS_URL) - }, []) + setShowRules(true) + }, [setShowRules]) + + const handleCloseRules = useCallback(() => { + setShowRules(false) + }, [setShowRules]) hooks.useUpdateDepositEpochList({ records, setDepositEpochList, connectionStatus }) @@ -116,6 +130,10 @@ const NervosDAO = () => { networkID, }) + const toggleDirection = useCallback(() => { + setIsDescDirection(!isDescDirection) + }, [setIsDescDirection, isDescDirection]) + const MemoizedRecords = useMemo(() => { const onTabClick = (e: React.SyntheticEvent) => { const { @@ -136,30 +154,51 @@ const NervosDAO = () => { return record.status === 'dead' }) - if (tabIdx === '1') { + if (tabIdx === '0') { + filteredRecord.sort((r1, r2) => + isDescDirection + ? +r2.depositInfo!.timestamp! - +r1.depositInfo!.timestamp! + : +r1.depositInfo!.timestamp! - +r2.depositInfo!.timestamp! + ) + } else if (tabIdx === '1') { filteredRecord.sort((r1, r2) => +r2.unlockInfo!.timestamp! - +r1.unlockInfo!.timestamp!) } return ( <> -
-
- - +
+ + +
+ + {tabIdx === '0' ? ( + + + + ) : null}
{filteredRecord.length ? (
@@ -205,6 +244,8 @@ const NervosDAO = () => { tabIdx, setTabIdx, isPrivacyMode, + isDescDirection, + toggleDirection, ]) useEffect(() => { @@ -223,6 +264,7 @@ const NervosDAO = () => { isTxGenerated={!!send.generatedTx} suggestFeeRate={suggestFeeRate} globalAPC={globalAPC} + onDepositSuccess={onDepositSuccess} /> ) }, [ @@ -276,6 +318,7 @@ const NervosDAO = () => { )}
} + notice={pageNotice} >
@@ -366,8 +409,11 @@ const NervosDAO = () => {
{MemoizedRecords}
+ {MemoizedDepositDialog} {MemoizedWithdrawDialog} + + ) } diff --git a/packages/neuron-ui/src/components/NervosDAO/nervosDAO.module.scss b/packages/neuron-ui/src/components/NervosDAO/nervosDAO.module.scss index dd83689f4d..328427c6c6 100644 --- a/packages/neuron-ui/src/components/NervosDAO/nervosDAO.module.scss +++ b/packages/neuron-ui/src/components/NervosDAO/nervosDAO.module.scss @@ -180,6 +180,36 @@ .recordsContainer { margin-top: 20px; + .tabContainer { + display: flex; + justify-content: space-between; + align-items: center; + .sortBtn { + display: flex; + justify-content: center; + align-items: center; + background: var(--secondary-background-color); + width: 36px; + height: 36px; + border-radius: 100%; + min-width: 0; + cursor: pointer; + &[data-desc='false'] { + svg { + transform: rotateX(-180deg); + } + } + &:hover { + svg { + g, + path { + stroke: var(--primary-color); + } + } + } + } + } + .recordTab { // To achieve animation on switching the selected target with pure CSS, a layout with fixed width is required. $itemWidth: 96px; diff --git a/packages/neuron-ui/src/components/NervosDAORecord/daoRecordRow.module.scss b/packages/neuron-ui/src/components/NervosDAORecord/daoRecordRow.module.scss index c533d52c3f..f7500d7e01 100644 --- a/packages/neuron-ui/src/components/NervosDAORecord/daoRecordRow.module.scss +++ b/packages/neuron-ui/src/components/NervosDAORecord/daoRecordRow.module.scss @@ -19,6 +19,20 @@ justify-content: space-between; } + .spinner { + width: 14px; + height: 14px; + } + + .depositingMsg { + color: var(--primary-color); + font-weight: 500; + font-size: 16px; + display: flex; + align-items: center; + gap: 8px; + } + .compensationAndAPC { display: flex; align-items: center; @@ -244,6 +258,26 @@ } .action { + display: flex; + flex-direction: column; + align-items: flex-end; + gap: 12px; + .lockWarn { + color: var(--warn-text-color); + font-weight: 500; + font-size: 12px; + position: relative; + &::before { + content: ''; + height: 6px; + width: 6px; + border-radius: 100%; + position: absolute; + left: -10px; + top: calc(50% - 3px); + background: var(--warn-text-color); + } + } button { width: 216px; line-height: 56px; diff --git a/packages/neuron-ui/src/components/NervosDAORecord/index.tsx b/packages/neuron-ui/src/components/NervosDAORecord/index.tsx index 76316dbfa6..9b622beed7 100644 --- a/packages/neuron-ui/src/components/NervosDAORecord/index.tsx +++ b/packages/neuron-ui/src/components/NervosDAORecord/index.tsx @@ -18,7 +18,7 @@ import CompensationPeriodTooltip from 'components/CompensationPeriodTooltip' import { Clock } from 'widgets/Icons/icon' import { Link } from 'react-router-dom' import { HIDE_BALANCE } from 'utils/const' - +import Spinner from 'widgets/Spinner' import Tooltip from 'widgets/Tooltip' import styles from './daoRecordRow.module.scss' import hooks from './hooks' @@ -92,7 +92,14 @@ export const DAORecord = ({ ) const leftEpochs = Math.max(compensationEndEpochValue - currentEpochValue, 0) - const leftDays = (Math.round(leftEpochs / EPOCHS_PER_DAY) ?? '').toString() + + let leftHours = '' + let leftDays = '' + if (leftEpochs < EPOCHS_PER_DAY) { + leftHours = (parseInt(`${leftEpochs * (24 / EPOCHS_PER_DAY)}`, 10) || 1).toString() + } else { + leftDays = (Math.round(leftEpochs / EPOCHS_PER_DAY) ?? '').toString() + } const compensation = BigInt(withdrawCapacity || capacity) - BigInt(capacity) @@ -106,15 +113,18 @@ export const DAORecord = ({ }) let message = '' + let showLoading = false if (ConnectionStatus.Online === connectionStatus) { switch (cellStatus) { case CellStatus.Unlocking: { message = t('nervos-dao.compensation-period.stage-messages.unlocking') + showLoading = true break } case CellStatus.Withdrawing: { message = t('nervos-dao.compensation-period.stage-messages.withdrawing') + showLoading = true break } case CellStatus.Unlockable: { @@ -122,17 +132,32 @@ export const DAORecord = ({ break } case CellStatus.Depositing: { - message = t('nervos-dao.compensation-period.stage-messages.pending') + message = t('nervos-dao.compensation-period.stage-messages.deposit-in-progress') + showLoading = true break } case CellStatus.Deposited: { - message = t('nervos-dao.compensation-period.stage-messages.next-compensation-cycle', { days: leftDays || '--' }) + if (leftHours) { + message = t('nervos-dao.compensation-period.stage-messages.next-compensation-cycle-hours', { + hours: leftHours || '--', + }) + } else { + message = t('nervos-dao.compensation-period.stage-messages.next-compensation-cycle', { + days: leftDays || '--', + }) + } break } case CellStatus.Locked: { - message = t('nervos-dao.compensation-period.stage-messages.compensation-cycle-will-end', { - days: leftDays || '--', - }) + if (leftHours) { + message = t('nervos-dao.compensation-period.stage-messages.compensation-cycle-will-end-hours', { + hours: leftHours || '--', + }) + } else { + message = t('nervos-dao.compensation-period.stage-messages.compensation-cycle-will-end', { + days: leftDays || '--', + }) + } break } default: { @@ -149,7 +174,7 @@ export const DAORecord = ({ const isWithdrawnDisabled = CellStatus.Deposited === cellStatus && !hasCkbBalance const isActionAvailable = connectionStatus === 'online' && - [CellStatus.Deposited, CellStatus.Unlockable].includes(cellStatus) && + [CellStatus.Deposited, CellStatus.Unlockable, CellStatus.Depositing].includes(cellStatus) && !isWithdrawnDisabled const depositOutPointKey = depositOutPoint @@ -279,10 +304,20 @@ export const DAORecord = ({ /> )}
- {message} + {showLoading ? ( +

+ {message} + +

+ ) : ( + {message} + )}
+ {cellStatus === CellStatus.Locked ? ( +
{t('nervos-dao.deposit-record.lock-warn')}
+ ) : null} {isWithdrawnDisabled ? ( {t('nervos-dao.deposit-record.insufficient-balance-to-unlock')}
} @@ -305,7 +340,11 @@ export const DAORecord = ({ data-index={index} onClick={onClick} disabled={!isActionAvailable} - label={t(`nervos-dao.deposit-record.${isWithdrawn ? 'unlock' : 'withdraw'}-action-label`)} + label={ + cellStatus === CellStatus.Depositing + ? t('nervos-dao.deposit-record.view-tx-detail') + : t(`nervos-dao.deposit-record.${isWithdrawn ? 'unlock' : 'withdraw'}-action-label`) + } /> )} diff --git a/packages/neuron-ui/src/locales/en.json b/packages/neuron-ui/src/locales/en.json index 8d0e298fe6..037af66417 100644 --- a/packages/neuron-ui/src/locales/en.json +++ b/packages/neuron-ui/src/locales/en.json @@ -705,7 +705,7 @@ "free": "Available", "locked": "Locked", "deposit": "Deposit", - "deposit-rules": "Deposit rules", + "deposit-rules": "Deposit Rules", "copy-balance": "Copy Balance", "deposit-records": "Deposits", "completed-records": "Completed", @@ -728,6 +728,8 @@ "estimated-apc": "Estimated APC", "estimated-apc-tooltip": "Estimated Annual Percentage Compensation", "deposit-amount": "Deposit Amount (CKB)", + "attention": "Attention: Once deposited into the Nervos DAO, your deposits will be locked for at least 180 Epochs (about 30 days).", + "deposit-submitted": "Deposit submitted", "deposit-record": { "deposited-at": "Deposited", "completed-at": "Completed", @@ -744,7 +746,8 @@ "days-hours": "{{days}} days {{hours}} hours", "no-deposit": "No Deposit", "no-completed": "No Completed", - "insufficient-balance-to-unlock": "Balance is not enough for transaction fee to unlock the deposit" + "insufficient-balance-to-unlock": "Balance is not enough for transaction fee to unlock the deposit", + "lock-warn": "Lock to end of current compensation cycle" }, "compensation-period": { "tooltip": { @@ -757,12 +760,14 @@ "withdrawn": "Withdrawn" }, "stage-messages": { - "pending": "Pending...", + "deposit-in-progress": "Deposit in progress", "immature-for-withdraw": "CKB cannot be withdrawn for the next {{ hours }} hours", "immature-for-unlock": "CKB cannot be unlocked for the next {{ hours }} hours", "next-compensation-cycle": "The next compensation cycle will start in approximately {{days}} days", + "next-compensation-cycle-hours": "The next compensation cycle will start in approximately {{hours}} hours", "withdrawing": "Withdrawing...", "compensation-cycle-will-end": "Compensation cycle ends in approximately {{days}} days", + "compensation-cycle-will-end-hours": "Compensation cycle ends in approximately {{hours}} hours", "compensation-cycle-has-ended": "Cycle has ended, CKB is ready to be unlocked", "unlocking": "Unlocking..." } @@ -785,6 +790,16 @@ "cancel": "Cancel", "next": "Next" }, + "deposit-rules": { + "minimum-deposit": "Minimum Deposit", + "single-compensation-cycle": "Single Compensation Cycle", + "single-compensation-cycle-description": "180 Epochs (About 30 days)", + "withdraw": "Withdraw", + "withdraw-description": "Anytime", + "unlock": "Unlock", + "unlock-description": "After the current compensation cycle", + "get": "Get" + }, "lock-info-dialog": { "address-info": "Address Information", "deprecated-address": "Deprecated address" diff --git a/packages/neuron-ui/src/locales/es.json b/packages/neuron-ui/src/locales/es.json index 0b501ca7c7..0a62c02f52 100644 --- a/packages/neuron-ui/src/locales/es.json +++ b/packages/neuron-ui/src/locales/es.json @@ -711,6 +711,8 @@ "estimated-apc": "Estimación APC", "estimated-apc-tooltip": "Estimación de Compensación Anual", "deposit-amount": "Cantidad a Depositar (CKB)", + "attention": "Atención: Una vez depositado en el DAO de Nervos, sus depósitos estarán bloqueados durante al menos 180 épocas (unos 30 días).", + "deposit-submitted": "Depósito presentado", "deposit-record": { "deposited-at": "Depositado", "completed-at": "Completado", @@ -726,7 +728,9 @@ "compensated-period": "Período de Compensación", "days-hours": "{{days}} días {{hours}} horas", "no-deposit": "Sin Depósito", - "no-completed": "Sin Completar" + "no-completed": "Sin Completar", + "insufficient-balance-to-unlock": "El saldo no es suficiente para que la comisión de transacción desbloquee el depósito", + "lock-warn": "Bloqueo al final del ciclo de compensación actual" }, "compensation-period": { "tooltip": { @@ -739,12 +743,14 @@ "withdrawn": "Retirado" }, "stage-messages": { - "pending": "Pendiente...", - "immature-for-withdraw": "No se puede retirar CKB durante las próximas {{ horas }} horas", - "immature-for-unlock": "No se puede desbloquear CKB durante las próximas {{ horas }} horas", - "next-compensation-cycle": "El siguiente ciclo de compensación comenzará en aproximadamente {{días}} días", + "deposit-in-progress": "Depósito en curso...", + "immature-for-withdraw": "No se puede retirar CKB durante las próximas {{ hours }} horas", + "immature-for-unlock": "No se puede desbloquear CKB durante las próximas {{ hours }} horas", + "next-compensation-cycle": "El siguiente ciclo de compensación comenzará en aproximadamente {{days}} días", + "next-compensation-cycle-hours": "El siguiente ciclo de compensación comenzará en aproximadamente {{hours}} horas", "withdrawing": "Retirando...", - "compensation-cycle-will-end": "El ciclo de compensación termina en aproximadamente {{días}} días", + "compensation-cycle-will-end": "El ciclo de compensación termina en aproximadamente {{days}} días", + "compensation-cycle-will-end-hours": "El ciclo de compensación termina en aproximadamente {{hours}} horas", "compensation-cycle-has-ended": "El ciclo ha terminado, CKB está listo para ser desbloqueado", "unlocking": "Desbloqueando..." } @@ -767,6 +773,16 @@ "cancel": "Cancelar", "next": "Siguiente" }, + "deposit-rules": { + "minimum-deposit": "Depósito mínimo", + "single-compensation-cycle": "Ciclo de compensación único", + "single-compensation-cycle-description": "180 Época (unos 30 días)", + "withdraw": "Retirar", + "withdraw-description": "En cualquier momento", + "unlock": "Desbloquear", + "unlock-description": "Después del ciclo de compensación actual", + "get": "Visite" + }, "lock-info-dialog": { "address-info": "Información de dirección", "deprecated-address": "Dirección obsoleta" diff --git a/packages/neuron-ui/src/locales/fr.json b/packages/neuron-ui/src/locales/fr.json index 9065be440d..c355aabd83 100644 --- a/packages/neuron-ui/src/locales/fr.json +++ b/packages/neuron-ui/src/locales/fr.json @@ -718,6 +718,8 @@ "estimated-apc": "Estimation de APC", "estimated-apc-tooltip": "Estimation de Compensation Annuel", "deposit-amount": "Montant du dépôt (CKB)", + "attention": "Attention : Une fois déposés dans la DAO Nervos, vos dépôts seront bloqués pendant au moins 180 époques (environ 30 jours).", + "deposit-submitted": "Dépôt de garantie", "deposit-record": { "deposited-at": "Déposé", "completed-at": "Terminé", @@ -734,7 +736,8 @@ "days-hours": "{{days}} jours {{hours}} heures", "no-deposit": "Aucun dépôt", "no-completed": "Aucun terminé", - "insufficient-balance-to-unlock": "Le solde n'est pas suffisant pour payer les frais de transaction afin de débloquer le dépôt DAO." + "insufficient-balance-to-unlock": "Le solde n'est pas suffisant pour payer les frais de transaction afin de débloquer le dépôt DAO.", + "lock-warn": "Verrouillage à la fin du cycle de compensation en cours" }, "compensation-period": { "tooltip": { @@ -747,12 +750,14 @@ "withdrawn": "Retiré" }, "stage-messages": { - "pending": "En attente...", + "deposit-in-progress": "En attente...", "immature-for-withdraw": "Les CKB ne peuvent pas être retirés pendant les {{ hours }} prochaines heures", "immature-for-unlock": "Les CKB ne peuvent pas être déverrouillés pendant les {{ hours }} prochaines heures", "next-compensation-cycle": "Le prochain cycle de compensation commencera dans environ {{days}} jours", + "next-compensation-cycle-hours": "Le prochain cycle de compensation commencera dans environ {{hours}} heures", "withdrawing": "Retrait en cours...", "compensation-cycle-will-end": "La période de compensation se termine dans environ {{days}} jours", + "compensation-cycle-will-end-hours": "La période de compensation se termine dans environ {{hours}} heures", "compensation-cycle-has-ended": "Le cycle est terminé, les CKB sont prêts à être déverrouillés", "unlocking": "Déverrouillage en cours..." } @@ -775,6 +780,16 @@ "cancel": "Annuler", "next": "Suivant" }, + "deposit-rules": { + "minimum-deposit": "Dépôt minimum", + "single-compensation-cycle": "Cycle de compensation unique", + "single-compensation-cycle-description": "180 Époque (environ 30 jours)", + "withdraw": "Retirer", + "withdraw-description": "A tout moment", + "unlock": "Déverrouiller", + "unlock-description": "Après le cycle de compensation en cours", + "get": "Obtenir" + }, "lock-info-dialog": { "address-info": "Informations sur l'adresse", "deprecated-address": "Adresse obsolète" diff --git a/packages/neuron-ui/src/locales/zh-tw.json b/packages/neuron-ui/src/locales/zh-tw.json index 747241e5a0..e1de094b06 100644 --- a/packages/neuron-ui/src/locales/zh-tw.json +++ b/packages/neuron-ui/src/locales/zh-tw.json @@ -722,6 +722,8 @@ "estimated-apc": "預計年化鎖定補貼率", "estimated-apc-tooltip": "預計年化鎖定補貼率", "deposit-amount": "存入金額 (CKB)", + "attention": "請注意: 一旦存入 Nervos DAO,您的存款將被鎖定至少 180 個 Epochs(約 30 天)。", + "deposit-submitted": "存入已提交", "deposit-record": { "deposited-at": "存入於", "completed-at": "已取出", @@ -738,7 +740,8 @@ "days-hours": "{{days}} 天 {{hours}} 小時", "no-deposit": "沒有存入記錄", "no-completed": "沒有解鎖記錄", - "insufficient-balance-to-unlock": "沒有足夠余額支付交易費用以解鎖 DAO 存款" + "insufficient-balance-to-unlock": "沒有足夠余額支付交易費用以解鎖 DAO 存款", + "lock-warn": "鎖定至當前補償週期結束" }, "compensation-period": { "tooltip": { @@ -751,17 +754,50 @@ "withdrawn": "已提取" }, "stage-messages": { - "pending": "正在存入...", + "deposit-in-progress": "正在存入...", "immature-for-withdraw": "{{hours}} 小時內無法提取 CKB", "immature-for-unlock": "{{hours}} 小時內無法解鎖 CKB", "next-compensation-cycle": "下一補償週期約在 {{days}} 天后開始", + "next-compensation-cycle-hours": "下一補償週期約在 {{hours}} 小時后開始", "withdrawing": "正在提取...", "compensation-cycle-will-end": "補償週期約在 {{days}} 天后結束", + "compensation-cycle-will-end-hours": "補償週期約在 {{hours}} 小時后結束", "compensation-cycle-has-ended": "補償週期已結束, 可以解鎖 CKB", "unlocking": "解鎖中..." } } }, + "nervos-dao-detail": { + "tx-detail": "交易詳情", + "deposited": "存入", + "withdrawn": "發起提取", + "unlocked": "解鎖", + "basic-information": "基本信息", + "transaction-hash": "交易哈希", + "blockNumber": "區塊高度", + "datetime": "時間", + "income": "收入", + "index": "序號", + "address": "地址", + "amount": "數量", + "cell-from-cellbase": "來自 Cellbase", + "cancel": "取消", + "next": "下一步" + }, + "deposit-rules": { + "minimum-deposit": "最低存入額", + "single-compensation-cycle": "單一補償週期", + "single-compensation-cycle-description": "180 個 Epochs(約 30 天)", + "withdraw": "提取", + "withdraw-description": "任意時間", + "unlock": "解鎖", + "unlock-description": "目前補償週期結束後", + "get": "好的" + }, + "lock-info-dialog": { + "address-info": "地址信息", + "deprecated-address": "已棄用格式的地址" + }, "updates": { "check-updates": "檢查更新", "checking-updates": "正在檢查更新…", diff --git a/packages/neuron-ui/src/locales/zh.json b/packages/neuron-ui/src/locales/zh.json index 9a7ff8f0db..3355e80542 100644 --- a/packages/neuron-ui/src/locales/zh.json +++ b/packages/neuron-ui/src/locales/zh.json @@ -721,6 +721,8 @@ "estimated-apc": "预计年化锁定补贴率", "estimated-apc-tooltip": "预计年化锁定补贴率", "deposit-amount": "存入金额 (CKB)", + "attention": "请注意: 一旦存入 Nervos DAO,您的存款将被锁定至少 180 个 Epochs(约 30 天)。", + "deposit-submitted": "存入已提交", "deposit-record": { "deposited-at": "存入于", "completed-at": "已取出", @@ -737,7 +739,8 @@ "days-hours": "{{days}} 天 {{hours}} 小时", "no-deposit": "没有存入记录", "no-completed": "没有解锁记录", - "insufficient-balance-to-unlock": "没有足够余额支付交易费用以解锁 DAO 存款" + "insufficient-balance-to-unlock": "没有足够余额支付交易费用以解锁 DAO 存款", + "lock-warn": "锁定至当前补偿周期结束" }, "compensation-period": { "tooltip": { @@ -750,12 +753,14 @@ "withdrawn": "已提取" }, "stage-messages": { - "pending": "正在存入...", + "deposit-in-progress": "正在存入...", "immature-for-withdraw": "{{hours}} 小时内无法提取 CKB", "immature-for-unlock": "{{hours}} 小时内无法解锁 CKB", "next-compensation-cycle": "下一补偿周期约在 {{days}} 天后开始", + "next-compensation-cycle-hours": "下一补偿周期约在 {{hours}} 小时后开始", "withdrawing": "正在提取...", "compensation-cycle-will-end": "补偿周期约在 {{days}} 天后结束", + "compensation-cycle-will-end-hours": "补偿周期约在 {{hours}} 小时后结束", "compensation-cycle-has-ended": "补偿周期已结束, 可以解锁 CKB", "unlocking": "解锁中..." } @@ -778,6 +783,16 @@ "cancel": "取消", "next": "下一步" }, + "deposit-rules": { + "minimum-deposit": "最低存入额", + "single-compensation-cycle": "单补偿周期", + "single-compensation-cycle-description": "180 个 Epochs(约 30 天)", + "withdraw": "提取", + "withdraw-description": "任意时间", + "unlock": "解锁", + "unlock-description": "当前补偿周期结束后", + "get": "好的" + }, "lock-info-dialog": { "address-info": "地址信息", "deprecated-address": "已弃用格式的地址" diff --git a/packages/neuron-ui/src/widgets/Icons/DepositTimeSort.svg b/packages/neuron-ui/src/widgets/Icons/DepositTimeSort.svg new file mode 100644 index 0000000000..a6591db275 --- /dev/null +++ b/packages/neuron-ui/src/widgets/Icons/DepositTimeSort.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/packages/neuron-ui/src/widgets/Icons/icon.tsx b/packages/neuron-ui/src/widgets/Icons/icon.tsx index ecdd2b8c2e..806510ad82 100644 --- a/packages/neuron-ui/src/widgets/Icons/icon.tsx +++ b/packages/neuron-ui/src/widgets/Icons/icon.tsx @@ -56,6 +56,7 @@ import { ReactComponent as DetectSvg } from './Detect.svg' import { ReactComponent as DeleteSvg } from './Delete.svg' import { ReactComponent as ImportKeystoreSvg } from './SoftWalletImportKeystore.svg' import { ReactComponent as ImportHardwareSvg } from './HardWalletImport.svg' +import { ReactComponent as DepositTimeSortSvg } from './DepositTimeSort.svg' import styles from './icon.module.scss' @@ -128,3 +129,4 @@ export const Detect = WrapSvg(DetectSvg) export const Delete = WrapSvg(DeleteSvg) export const ImportKeystore = WrapSvg(ImportKeystoreSvg) export const ImportHardware = WrapSvg(ImportHardwareSvg) +export const DepositTimeSort = WrapSvg(DepositTimeSortSvg) From c75979b9e3969e71a228917466e41c612ab07a60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=A5=E5=9B=BD=E5=AE=87?= <841185308@qq.com> Date: Tue, 7 May 2024 10:56:51 +0800 Subject: [PATCH 32/36] Fix light sync (#3141) * fix: Fix light client sync when import existed wallet. * fix: When set a bigger number than current synced block number, reset the start block number. --------- Co-authored-by: Chen Yu --- .../sync/light-synchronizer.ts | 12 +- .../src/services/sync-progress.ts | 12 ++ .../neuron-wallet/src/services/wallets.ts | 3 + .../light-synchronizer.test.ts | 107 +++++++++++++++++- 4 files changed, 130 insertions(+), 4 deletions(-) diff --git a/packages/neuron-wallet/src/block-sync-renderer/sync/light-synchronizer.ts b/packages/neuron-wallet/src/block-sync-renderer/sync/light-synchronizer.ts index 6a7d5bc761..f87dddf99b 100644 --- a/packages/neuron-wallet/src/block-sync-renderer/sync/light-synchronizer.ts +++ b/packages/neuron-wallet/src/block-sync-renderer/sync/light-synchronizer.ts @@ -175,9 +175,11 @@ export default class LightSynchronizer extends Synchronizer { if (!this.addressMetas.length && !appendScripts.length) { return } + const existSyncArgses = await SyncProgressService.getExistingSyncArgses() const syncScripts = await this.lightRpc.getScripts() + const retainedSyncScripts = syncScripts.filter(v => existSyncArgses.has(v.script.args)) const existSyncscripts: Record = {} - syncScripts.forEach(v => { + retainedSyncScripts.forEach(v => { existSyncscripts[scriptToHash(v.script)] = v }) const currentWalletId = WalletService.getInstance().getCurrent()?.id @@ -205,7 +207,11 @@ export default class LightSynchronizer extends Synchronizer { const otherTypeSyncBlockNumber = await SyncProgressService.getOtherTypeSyncBlockNumber() const addScripts = [ ...allScripts - .filter(v => !existSyncscripts[scriptToHash(v.script)]) + .filter( + v => + !existSyncscripts[scriptToHash(v.script)] || + +existSyncscripts[scriptToHash(v.script)].blockNumber < +(walletStartBlockMap[v.walletId] ?? 0) + ) .map(v => { const blockNumber = Math.max( parseInt(walletStartBlockMap[v.walletId] ?? '0x0'), @@ -228,7 +234,7 @@ export default class LightSynchronizer extends Synchronizer { ...allScripts.map(v => scriptToHash(v.script)), ...appendScripts.map(v => scriptToHash(v.script)), ]) - const deleteScript = syncScripts.filter(v => !allScriptHashes.has(scriptToHash(v.script))) + const deleteScript = retainedSyncScripts.filter(v => !allScriptHashes.has(scriptToHash(v.script))) await this.lightRpc.setScripts(deleteScript, 'delete') const walletIds = [...new Set(this.addressMetas.map(v => v.walletId))] await SyncProgressService.initSyncProgress(addScripts) diff --git a/packages/neuron-wallet/src/services/sync-progress.ts b/packages/neuron-wallet/src/services/sync-progress.ts index 47362710a4..33b1d86c65 100644 --- a/packages/neuron-wallet/src/services/sync-progress.ts +++ b/packages/neuron-wallet/src/services/sync-progress.ts @@ -68,6 +68,11 @@ export default class SyncProgressService { return res } + static async getExistingSyncArgses() { + const syncProgresses = await getConnection().getRepository(SyncProgress).createQueryBuilder().getMany() + return new Set(syncProgresses.map(v => v.args)) + } + static async getAllSyncStatusToMap() { const result: Map = new Map() const syncProgresses = await getConnection() @@ -132,4 +137,11 @@ export default class SyncProgressService { .set({ localSavedBlockNumber: 0, syncedBlockNumber: 0 }) .execute() } + + static async deleteWalletSyncProgress(walletId: string) { + await getConnection().getRepository(SyncProgress).delete({ + walletId, + addressType: SyncAddressType.Default, + }) + } } diff --git a/packages/neuron-wallet/src/services/wallets.ts b/packages/neuron-wallet/src/services/wallets.ts index cc9c15be14..8bb5064f73 100644 --- a/packages/neuron-wallet/src/services/wallets.ts +++ b/packages/neuron-wallet/src/services/wallets.ts @@ -16,6 +16,7 @@ import { getConnection } from '../database/chain/connection' import NetworksService from './networks' import { NetworkType } from '../models/network' import { resetSyncTaskQueue } from '../block-sync-renderer' +import SyncProgressService from './sync-progress' const fileService = FileService.getInstance() @@ -435,6 +436,7 @@ export default class WalletService { this.setCurrent(newWallet.id) await AddressService.deleteByWalletId(existingWalletId) + await SyncProgressService.deleteWalletSyncProgress(existingWalletId) const newWallets = wallets.filter(w => w.id !== existingWalletId) this.listStore.writeSync(this.walletsKey, [...newWallets, newWallet]) @@ -489,6 +491,7 @@ export default class WalletService { } await AddressService.deleteByWalletId(id) + await SyncProgressService.deleteWalletSyncProgress(id) this.listStore.writeSync(this.walletsKey, newWallets) diff --git a/packages/neuron-wallet/tests/block-sync-renderer/light-synchronizer.test.ts b/packages/neuron-wallet/tests/block-sync-renderer/light-synchronizer.test.ts index 8e3b83be0c..ccd7ee549e 100644 --- a/packages/neuron-wallet/tests/block-sync-renderer/light-synchronizer.test.ts +++ b/packages/neuron-wallet/tests/block-sync-renderer/light-synchronizer.test.ts @@ -12,6 +12,7 @@ const getWalletMinLocalSavedBlockNumberMock = jest.fn() const removeByHashesAndAddressType = jest.fn() const getOtherTypeSyncProgressMock = jest.fn() const getOtherTypeSyncBlockNumberMock = jest.fn() +const getExistingSyncArgsesMock = jest.fn() const setScriptsMock = jest.fn() const getScriptsMock = jest.fn() @@ -61,6 +62,7 @@ jest.mock('../../src/services/sync-progress', () => { static getOtherTypeSyncProgress: any = () => getOtherTypeSyncProgressMock() static getOtherTypeSyncBlockNumber: any = () => getOtherTypeSyncBlockNumberMock() + static getExistingSyncArgses: any = () => getExistingSyncArgsesMock() } }) @@ -134,8 +136,9 @@ describe('test light synchronizer', () => { 'partial' ) }) - it('there is not exist sync scripts with light client', async () => { + it('when syncing script in the local DB', async () => { getScriptsMock.mockResolvedValue([{ script, blockNumber: '0xaa' }]) + getExistingSyncArgsesMock.mockResolvedValue(new Set([script.args])) const addressMeta = AddressMeta.fromObject({ walletId: 'walletId', address, @@ -182,6 +185,67 @@ describe('test light synchronizer', () => { ]) expect(updateSyncProgressFlagMock).toBeCalledWith(['walletId']) }) + it('when syncing script not in the local DB', async () => { + getScriptsMock.mockResolvedValue([{ script, blockNumber: '0xaa' }]) + getExistingSyncArgsesMock.mockResolvedValue(new Set()) + const addressMeta = AddressMeta.fromObject({ + walletId: 'walletId', + address, + path: '', + addressIndex: 10, + addressType: 0, + blake160: script.args, + }) + const connect = new LightSynchronizer([addressMeta], '') + //@ts-ignore + await connect.initSyncProgress() + expect(setScriptsMock).toHaveBeenNthCalledWith( + 1, + [ + { + script: addressMeta.generateDefaultLockScript().toSDK(), + scriptType: 'lock', + walletId: 'walletId', + blockNumber: '0x0', + }, + { + script: addressMeta.generateACPLockScript().toSDK(), + scriptType: 'lock', + walletId: 'walletId', + blockNumber: '0x0', + }, + { + script: addressMeta.generateLegacyACPLockScript().toSDK(), + scriptType: 'lock', + walletId: 'walletId', + blockNumber: '0x0', + }, + ], + 'partial' + ) + expect(setScriptsMock).toHaveBeenLastCalledWith([], 'delete') + expect(initSyncProgressMock).toBeCalledWith([ + { + script: addressMeta.generateDefaultLockScript().toSDK(), + scriptType: 'lock', + walletId: 'walletId', + blockNumber: '0x0', + }, + { + script: addressMeta.generateACPLockScript().toSDK(), + scriptType: 'lock', + walletId: 'walletId', + blockNumber: '0x0', + }, + { + script: addressMeta.generateLegacyACPLockScript().toSDK(), + scriptType: 'lock', + walletId: 'walletId', + blockNumber: '0x0', + }, + ]) + expect(updateSyncProgressFlagMock).toBeCalledWith(['walletId']) + }) it('set new script with the synced min block number', async () => { getScriptsMock.mockResolvedValue([]) const addressMeta = AddressMeta.fromObject({ @@ -262,6 +326,47 @@ describe('test light synchronizer', () => { ) expect(setScriptsMock).toHaveBeenLastCalledWith([], 'delete') }) + it('when set the wallet start block number is bigger than current synced block number', async () => { + getScriptsMock.mockResolvedValue([{ script, blockNumber: '0xaa' }]) + const addressMeta = AddressMeta.fromObject({ + walletId: 'walletId', + address, + path: '', + addressIndex: 10, + addressType: 0, + blake160: script.args, + }) + getWalletMinLocalSavedBlockNumberMock.mockResolvedValue({}) + walletGetAllMock.mockReturnValue([{ id: 'walletId', startBlockNumber: '0xffff' }]) + const connect = new LightSynchronizer([addressMeta], '') + //@ts-ignore + await connect.initSyncProgress() + expect(setScriptsMock).toHaveBeenNthCalledWith( + 1, + [ + { + script: addressMeta.generateDefaultLockScript().toSDK(), + scriptType: 'lock', + walletId: 'walletId', + blockNumber: '0xffff', + }, + { + script: addressMeta.generateACPLockScript().toSDK(), + scriptType: 'lock', + walletId: 'walletId', + blockNumber: '0xffff', + }, + { + script: addressMeta.generateLegacyACPLockScript().toSDK(), + scriptType: 'lock', + walletId: 'walletId', + blockNumber: '0xffff', + }, + ], + 'partial' + ) + expect(setScriptsMock).toHaveBeenLastCalledWith([], 'delete') + }) }) describe('test initSync', () => { From 074e64eb72f0963f8e08fede49aece553ee7d45b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=A5=E5=9B=BD=E5=AE=87?= <841185308@qq.com> Date: Tue, 7 May 2024 17:01:57 +0800 Subject: [PATCH 33/36] fix: When set start block number is less than before, remove all of the sync data. (#3120) Co-authored-by: Chen Yu --- packages/neuron-wallet/src/controllers/api.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/neuron-wallet/src/controllers/api.ts b/packages/neuron-wallet/src/controllers/api.ts index d871ebd3a0..0d9c093f8a 100644 --- a/packages/neuron-wallet/src/controllers/api.ts +++ b/packages/neuron-wallet/src/controllers/api.ts @@ -373,12 +373,12 @@ export default class ApiController { startBlockNumber: string } ) => { - const res = this.#walletsController.update(params) const network = NetworksService.getInstance().getCurrent() if (network.type !== NetworkType.Light) { throw new Error('Only Light client can set start block number') } const lastSetStartBlockNumber = WalletsService.getInstance().getCurrent()?.toJSON().startBlockNumber + const res = this.#walletsController.update(params) if (lastSetStartBlockNumber && +params.startBlockNumber < +lastSetStartBlockNumber) { await CKBLightRunner.getInstance().clearNodeCache() } else { From 45cb237b9020965296047d2f74189443174063ac Mon Sep 17 00:00:00 2001 From: Tom Wang Date: Thu, 9 May 2024 14:39:48 +0800 Subject: [PATCH 34/36] refactor: refactor ckbCore.utils.xyz with lumos methods (#3142) * refactor: refactor ckbCore.utils.xyz with lumos methods * refactor: check lock script hashType before converting to address * refactor: remove redundant script hashType check * refactor: add scriptToAddress & addressToScript to utils and refactor --------- Co-authored-by: Chen Yu --- packages/neuron-ui/package.json | 2 ++ .../ApproveMultisigTxDialog/index.tsx | 8 ++--- .../src/components/HDWalletSign/index.tsx | 28 ++++----------- packages/neuron-ui/src/utils/index.ts | 1 + .../neuron-ui/src/utils/scriptAndAddress.ts | 23 ++++++++++++ .../neuron-ui/src/utils/validators/address.ts | 36 ++----------------- .../utils/validators/assetAccountAddress.ts | 4 +-- .../src/utils/validators/capacity.ts | 4 +-- 8 files changed, 41 insertions(+), 65 deletions(-) create mode 100644 packages/neuron-ui/src/utils/scriptAndAddress.ts diff --git a/packages/neuron-ui/package.json b/packages/neuron-ui/package.json index dbc6ed8595..1dcbb376dc 100644 --- a/packages/neuron-ui/package.json +++ b/packages/neuron-ui/package.json @@ -53,6 +53,8 @@ "@ckb-lumos/bi": "0.21.1", "@ckb-lumos/base": "0.21.1", "@ckb-lumos/codec": "0.21.1", + "@ckb-lumos/helpers": "0.21.1", + "@ckb-lumos/config-manager": "0.21.1", "@nervosnetwork/ckb-sdk-core": "0.109.0", "@nervosnetwork/ckb-sdk-utils": "0.109.0", "canvg": "2.0.0", diff --git a/packages/neuron-ui/src/components/ApproveMultisigTxDialog/index.tsx b/packages/neuron-ui/src/components/ApproveMultisigTxDialog/index.tsx index 11580fe6f6..9e06a70ac9 100644 --- a/packages/neuron-ui/src/components/ApproveMultisigTxDialog/index.tsx +++ b/packages/neuron-ui/src/components/ApproveMultisigTxDialog/index.tsx @@ -2,11 +2,10 @@ import React, { useMemo } from 'react' import { useTranslation, Trans } from 'react-i18next' import { MultisigConfig, OfflineSignJSON } from 'services/remote' import { useState as useGlobalState } from 'states' -import { ckbCore } from 'services/chain' import Tooltip from 'widgets/Tooltip' import { Copy } from 'widgets/Icons/icon' import CopyZone from 'widgets/CopyZone' -import { shannonToCKBFormatter } from 'utils' +import { scriptToAddress, shannonToCKBFormatter } from 'utils' import ScriptTag from 'components/ScriptTag' import Dialog from 'widgets/Dialog' import getMultisigSignStatus from 'utils/getMultisigSignStatus' @@ -15,10 +14,7 @@ import styles from './approveMultisigTx.module.scss' const Cell = React.memo( ({ cell, isMainnet }: { cell: State.DetailedInput | State.DetailedOutput; isMainnet: boolean }) => { - const address = useMemo( - () => (cell.lock ? ckbCore.utils.scriptToAddress(cell.lock, isMainnet) : ''), - [cell, isMainnet] - ) + const address = useMemo(() => (cell.lock ? scriptToAddress(cell.lock, { isMainnet }) : ''), [cell, isMainnet]) return (
diff --git a/packages/neuron-ui/src/components/HDWalletSign/index.tsx b/packages/neuron-ui/src/components/HDWalletSign/index.tsx index 9b8a70c99b..feb81838d0 100644 --- a/packages/neuron-ui/src/components/HDWalletSign/index.tsx +++ b/packages/neuron-ui/src/components/HDWalletSign/index.tsx @@ -1,7 +1,6 @@ import React, { useCallback, useState, useMemo } from 'react' import { useTranslation } from 'react-i18next' -import { ckbCore } from 'services/chain' -import { shannonToCKBFormatter, useDidMount, isSuccessResponse, CONSTANTS } from 'utils' +import { scriptToAddress, shannonToCKBFormatter, useDidMount, isSuccessResponse, CONSTANTS } from 'utils' import { getSystemCodeHash, getAllNetworks, getCurrentNetworkID } from 'services/remote' import CopyZone from 'widgets/CopyZone' import { DeviceSignIndex as DeviceSignIndexSubject } from 'services/subjects' @@ -13,7 +12,6 @@ const { MAINNET_CLIENT_LIST } = CONSTANTS const HDWalletSign = ({ tx }: { tx: State.DetailedTransaction }) => { const [t] = useTranslation() const [isMainnet, setIsMainnet] = useState(false) - const addressPrefix = isMainnet ? ckbCore.utils.AddressPrefix.Mainnet : ckbCore.utils.AddressPrefix.Testnet const [systemCodeHash, setSystemCodeHash] = useState('') const [inputVisible, setInputVisible] = useState(true) const [activeInputIndex, setActiveInputIndex] = useState(0) @@ -24,7 +22,6 @@ const HDWalletSign = ({ tx }: { tx: State.DetailedTransaction }) => { setSystemCodeHash(res.result) } }) - Promise.all([getAllNetworks(), getCurrentNetworkID()]) .then(([networksRes, idRes]) => { if (isSuccessResponse(networksRes) && isSuccessResponse(idRes)) { @@ -55,23 +52,10 @@ const HDWalletSign = ({ tx }: { tx: State.DetailedTransaction }) => { address = t('transaction.cell-from-cellbase') } else { try { - if (cell.lock.codeHash === systemCodeHash && cell.lock.hashType === 'type') { - address = ckbCore.utils.bech32Address(cell.lock.args, { - prefix: addressPrefix, - type: ckbCore.utils.AddressType.HashIdx, - codeHashOrCodeHashIndex: '0x00', - }) - } else { - address = ckbCore.utils.fullPayloadToAddress({ - args: cell.lock.args, - prefix: addressPrefix, - type: - cell.lock.hashType === 'data' - ? ckbCore.utils.AddressType.DataCodeHash - : ckbCore.utils.AddressType.TypeCodeHash, - codeHash: cell.lock.codeHash, - }) - } + address = scriptToAddress(cell.lock, { + isMainnet, + deprecated: cell.lock.codeHash === systemCodeHash && cell.lock.hashType === 'type', + }) } catch (err) { console.error(err) } @@ -106,7 +90,7 @@ const HDWalletSign = ({ tx }: { tx: State.DetailedTransaction }) => { ) }), - [t, addressPrefix, systemCodeHash] + [t, isMainnet, systemCodeHash] ) const inputBody = useMemo(() => { diff --git a/packages/neuron-ui/src/utils/index.ts b/packages/neuron-ui/src/utils/index.ts index 4fe2f818d6..99c96228ac 100644 --- a/packages/neuron-ui/src/utils/index.ts +++ b/packages/neuron-ui/src/utils/index.ts @@ -28,6 +28,7 @@ export * from './multisig' export * from './getNetworkLabel' export * from './calculateUsedCapacity' export * from './outPointTransform' +export * from './scriptAndAddress' export * from './wakeScreen' export { CONSTANTS } diff --git a/packages/neuron-ui/src/utils/scriptAndAddress.ts b/packages/neuron-ui/src/utils/scriptAndAddress.ts new file mode 100644 index 0000000000..5dabdb9f32 --- /dev/null +++ b/packages/neuron-ui/src/utils/scriptAndAddress.ts @@ -0,0 +1,23 @@ +import { predefined } from '@ckb-lumos/config-manager' +import { encodeToAddress, parseAddress, generateAddress } from '@ckb-lumos/helpers' + +const { LINA: MAINNET, AGGRON4: TESTNET } = predefined + +const CONFIGS = { + [MAINNET.PREFIX]: MAINNET, + [TESTNET.PREFIX]: TESTNET, +} + +export const scriptToAddress = ( + script: CKBComponents.Script, + { isMainnet = true, deprecated = false }: { isMainnet?: boolean; deprecated?: boolean } +) => { + const config = { config: isMainnet ? MAINNET : TESTNET } + return deprecated ? generateAddress(script, config) : encodeToAddress(script, config) +} + +export const addressToScript = (address: string, { isMainnet = true }: { isMainnet?: boolean } = {}) => { + const prefix = address.slice(0, 3) + const config = CONFIGS[prefix] ?? (isMainnet ? MAINNET : TESTNET) + return parseAddress(address, { config }) +} diff --git a/packages/neuron-ui/src/utils/validators/address.ts b/packages/neuron-ui/src/utils/validators/address.ts index cdebaeb3e3..d6f20b917e 100644 --- a/packages/neuron-ui/src/utils/validators/address.ts +++ b/packages/neuron-ui/src/utils/validators/address.ts @@ -1,4 +1,4 @@ -import { ckbCore } from 'services/chain' +import { addressToScript } from 'utils' import { FieldInvalidException, MainnetAddressRequiredException, @@ -6,15 +6,6 @@ import { AddressEmptyException, AddressNotMatchException, } from 'exceptions' -import { - NEW_LONG_ADDR_PREFIX, - LONG_DATA_PREFIX, - LONG_TYPE_PREFIX, - SHORT_ADDR_LENGTH, - SHORT_ADDR_DEFAULT_LOCK_PREFIX, - SHORT_ADDR_MULTISIGN_LOCK_PREFIX, - SHORT_ADDR_SUDT_LOCK_PREFIX, -} from 'utils/const' import { DefaultLockInfo, MultiSigLockInfo, @@ -44,32 +35,11 @@ export const validateAddress = (address: string, isMainnet: boolean): boolean => throw new TestnetAddressRequiredException() } - let parsed = '' - try { - parsed = ckbCore.utils.parseAddress(address, 'hex') + return Boolean(addressToScript(address, { isMainnet })) } catch (err) { throw new FieldInvalidException(FIELD_NAME, address) } - - if ( - parsed.startsWith(LONG_DATA_PREFIX) || - parsed.startsWith(LONG_TYPE_PREFIX) || - parsed.startsWith(NEW_LONG_ADDR_PREFIX) - ) { - return true - } - - if ( - (!parsed.startsWith(SHORT_ADDR_DEFAULT_LOCK_PREFIX) && - !parsed.startsWith(SHORT_ADDR_MULTISIGN_LOCK_PREFIX) && - !parsed.startsWith(SHORT_ADDR_SUDT_LOCK_PREFIX)) || - address.length !== SHORT_ADDR_LENGTH - ) { - throw new FieldInvalidException(FIELD_NAME, address) - } - - return true } const addressTagMap = { @@ -82,7 +52,7 @@ const addressTagMap = { export function validateSpecificAddress(address: string, isMainnet: boolean, tagName: keyof typeof addressTagMap) { validateAddress(address, isMainnet) - const script = ckbCore.utils.addressToScript(address) + const script = addressToScript(address, { isMainnet }) const lockInfo = addressTagMap[tagName][isMainnet ? 0 : 1] // first is lock on Lina if (script.codeHash !== lockInfo.CodeHash || script.hashType !== lockInfo.HashType) { throw new AddressNotMatchException(tagName) diff --git a/packages/neuron-ui/src/utils/validators/assetAccountAddress.ts b/packages/neuron-ui/src/utils/validators/assetAccountAddress.ts index 6478e36b14..8f8e91da72 100644 --- a/packages/neuron-ui/src/utils/validators/assetAccountAddress.ts +++ b/packages/neuron-ui/src/utils/validators/assetAccountAddress.ts @@ -1,4 +1,4 @@ -import { ckbCore } from 'services/chain' +import { addressToScript } from 'utils' import { FieldRequiredException, FieldInvalidException, AddressDeprecatedException } from 'exceptions' import { DEPRECATED_CODE_HASH } from 'utils/const' import { isSecp256k1Address } from 'utils/is' @@ -24,7 +24,7 @@ export const validateAssetAccountAddress = ({ return true } - const lockScript = ckbCore.utils.addressToScript(address) + const lockScript = addressToScript(address, { isMainnet }) if ([DEPRECATED_CODE_HASH.AcpOnAggron, DEPRECATED_CODE_HASH.AcpOnLina].includes(lockScript.codeHash)) { throw new AddressDeprecatedException() diff --git a/packages/neuron-ui/src/utils/validators/capacity.ts b/packages/neuron-ui/src/utils/validators/capacity.ts index 2f3a53f0c6..d91c15cee1 100644 --- a/packages/neuron-ui/src/utils/validators/capacity.ts +++ b/packages/neuron-ui/src/utils/validators/capacity.ts @@ -1,12 +1,12 @@ import { CKBToShannonFormatter } from 'utils/formatters' import { CapacityTooSmallException } from 'exceptions' import { bytes as byteUtils } from '@ckb-lumos/codec' -import { ckbCore } from 'services/chain' +import { addressToScript } from 'utils' export const validateCapacity = (item: State.Output) => { const { amount, unit, address } = item const capacity = CKBToShannonFormatter(amount, unit) - const script = ckbCore.utils.addressToScript(address as string) + const script = addressToScript(address as string) const size = 1 + byteUtils.concat(script.args, script.codeHash).byteLength const outputSize = 8 + byteUtils.bytify('0x').byteLength + size From 53c02ba6712bbc4cd42841f5b318e7efa142e378 Mon Sep 17 00:00:00 2001 From: Tom Wang Date: Fri, 10 May 2024 03:29:41 +0800 Subject: [PATCH 35/36] refactor: replace ckbCore with lumos CKBRPC (#3145) --- packages/neuron-ui/package.json | 2 +- .../src/components/NervosDAO/hooks.ts | 20 ++++++------- .../src/components/WithdrawDialog/index.tsx | 2 +- .../neuron-ui/src/containers/Main/hooks.ts | 6 ++-- packages/neuron-ui/src/services/chain.ts | 15 +++------- .../hooks/useGetCountDownAndFeeRateStats.ts | 4 +-- yarn.lock | 28 +------------------ 7 files changed, 22 insertions(+), 55 deletions(-) diff --git a/packages/neuron-ui/package.json b/packages/neuron-ui/package.json index 1dcbb376dc..5169a6057b 100644 --- a/packages/neuron-ui/package.json +++ b/packages/neuron-ui/package.json @@ -51,11 +51,11 @@ ], "dependencies": { "@ckb-lumos/bi": "0.21.1", + "@ckb-lumos/rpc": "0.21.1", "@ckb-lumos/base": "0.21.1", "@ckb-lumos/codec": "0.21.1", "@ckb-lumos/helpers": "0.21.1", "@ckb-lumos/config-manager": "0.21.1", - "@nervosnetwork/ckb-sdk-core": "0.109.0", "@nervosnetwork/ckb-sdk-utils": "0.109.0", "canvg": "2.0.0", "i18next": "23.7.11", diff --git a/packages/neuron-ui/src/components/NervosDAO/hooks.ts b/packages/neuron-ui/src/components/NervosDAO/hooks.ts index e78dd44f67..b9c65b2e59 100644 --- a/packages/neuron-ui/src/components/NervosDAO/hooks.ts +++ b/packages/neuron-ui/src/components/NervosDAO/hooks.ts @@ -6,7 +6,7 @@ import { NavigateFunction } from 'react-router-dom' import { calculateAPC, CONSTANTS, isSuccessResponse, RoutePath } from 'utils' import { generateDaoWithdrawTx, generateDaoClaimTx } from 'services/remote' -import { ckbCore, getHeader } from 'services/chain' +import { rpc, getHeader } from 'services/chain' import { calculateMaximumWithdraw } from '@nervosnetwork/ckb-sdk-utils' const { MILLISECONDS_IN_YEAR, MEDIUM_FEE_RATE } = CONSTANTS @@ -239,23 +239,23 @@ export const useUpdateWithdrawList = ({ return } const depositOutPointHashes = records.map(v => v.depositOutPoint?.txHash ?? v.outPoint.txHash) - ckbCore.rpc + rpc .createBatchRequest<'getTransaction', string[], CKBComponents.TransactionWithStatus[]>( depositOutPointHashes.map(v => ['getTransaction', v]) ) .exec() - .then(txs => { + .then((txs: CKBComponents.TransactionWithStatus[]) => { const committedTx = txs.filter(v => v.txStatus.status === 'committed') const blockHashes = [ ...(committedTx.map(v => v.txStatus.blockHash).filter(v => !!v) as string[]), ...(records.map(v => (v.depositOutPoint ? v.blockHash : null)).filter(v => !!v) as string[]), ] - return ckbCore.rpc + return rpc .createBatchRequest<'getHeader', string[], CKBComponents.BlockHeader[]>( blockHashes.map(v => ['getHeader', v]) ) .exec() - .then(blockHeaders => { + .then((blockHeaders: CKBComponents.BlockHeader[]) => { const hashHeaderMap = new Map() blockHeaders.forEach((header, idx) => { hashHeaderMap.set(blockHashes[idx], header.dao) @@ -308,10 +308,10 @@ export const useUpdateWithdrawList = ({ const getBlockHashes = (txHashes: string[]) => { const batchParams: ['getTransaction', string][] = txHashes.map(v => ['getTransaction', v]) - return ckbCore.rpc + return rpc .createBatchRequest<'getTransaction', [string], CKBComponents.TransactionWithStatus[]>(batchParams) .exec() - .then(res => { + .then((res: CKBComponents.TransactionWithStatus[]) => { return res.map((v, idx) => ({ txHash: txHashes[idx], blockHash: v.txStatus.blockHash, @@ -334,7 +334,7 @@ export const useUpdateDepositEpochList = ({ useEffect(() => { if (connectionStatus === 'online') { getBlockHashes(records.map(v => v.depositOutPoint?.txHash).filter(v => !!v) as string[]).then( - depositBlockHashes => { + (depositBlockHashes: { txHash: string; blockHash: string | null }[]) => { const recordKeyIdx: string[] = [] const batchParams: ['getHeader', string][] = [] records.forEach(record => { @@ -349,10 +349,10 @@ export const useUpdateDepositEpochList = ({ recordKeyIdx.push(v.txHash) } }) - ckbCore.rpc + rpc .createBatchRequest<'getHeader', any, CKBComponents.BlockHeader[]>(batchParams) .exec() - .then(res => { + .then((res: CKBComponents.BlockHeader[]) => { const epochList = new Map() records.forEach(record => { const key = record.depositOutPoint ? record.depositOutPoint.txHash : record.outPoint.txHash diff --git a/packages/neuron-ui/src/components/WithdrawDialog/index.tsx b/packages/neuron-ui/src/components/WithdrawDialog/index.tsx index d639999767..9de128af2c 100644 --- a/packages/neuron-ui/src/components/WithdrawDialog/index.tsx +++ b/packages/neuron-ui/src/components/WithdrawDialog/index.tsx @@ -50,7 +50,7 @@ const WithdrawDialog = ({ getHeader(tx.txStatus.blockHash).then(header => { setWithdrawValue( calculateMaximumWithdraw( - tx.transaction.outputs[+record.outPoint.index], + tx.transaction.outputs[+record.outPoint.index] as CKBComponents.CellOutput, tx.transaction.outputsData[+record.outPoint.index], header.dao, tipDao diff --git a/packages/neuron-ui/src/containers/Main/hooks.ts b/packages/neuron-ui/src/containers/Main/hooks.ts index e6dd1b7363..307e69e956 100644 --- a/packages/neuron-ui/src/containers/Main/hooks.ts +++ b/packages/neuron-ui/src/containers/Main/hooks.ts @@ -29,7 +29,7 @@ import { ShowGlobalDialog as ShowGlobalDialogSubject, NoDiskSpace, } from 'services/subjects' -import { ckbCore, getTipHeader } from 'services/chain' +import { rpc, getTipHeader } from 'services/chain' import { networks as networksCache, currentNetworkID as currentNetworkIDCache, @@ -78,13 +78,13 @@ export const useSyncChainData = ({ chainURL, dispatch }: { chainURL: string; dis } clearInterval(timer!) if (chainURL) { - ckbCore.setNode(chainURL) + rpc.setNode({ url: chainURL }) syncBlockchainInfo() timer = setInterval(() => { syncBlockchainInfo() }, SYNC_INTERVAL_TIME) } else { - ckbCore.setNode('') + rpc.setNode({ url: '' }) } return () => { clearInterval(timer) diff --git a/packages/neuron-ui/src/services/chain.ts b/packages/neuron-ui/src/services/chain.ts index b7ab5c18bc..31dac003db 100644 --- a/packages/neuron-ui/src/services/chain.ts +++ b/packages/neuron-ui/src/services/chain.ts @@ -1,13 +1,6 @@ -import CKBCore from '@nervosnetwork/ckb-sdk-core' +import { CKBRPC } from '@ckb-lumos/rpc' -export const ckbCore = new CKBCore('') -export const { getHeader, getBlockchainInfo, getTipHeader, getHeaderByNumber, getFeeRateStats, getTransaction } = - ckbCore.rpc +export const rpc = new CKBRPC('') -export default { - ckbCore, - getHeader, - getTipHeader, - getTransaction, - getFeeRateStats, -} +export const { getHeader, getBlockchainInfo, getTipHeader, getHeaderByNumber, getFeeRateStatistics, getTransaction } = + rpc diff --git a/packages/neuron-ui/src/utils/hooks/useGetCountDownAndFeeRateStats.ts b/packages/neuron-ui/src/utils/hooks/useGetCountDownAndFeeRateStats.ts index 9caf6cf076..1171ceccdf 100644 --- a/packages/neuron-ui/src/utils/hooks/useGetCountDownAndFeeRateStats.ts +++ b/packages/neuron-ui/src/utils/hooks/useGetCountDownAndFeeRateStats.ts @@ -1,5 +1,5 @@ import { useState, useEffect, useCallback } from 'react' -import { getFeeRateStats } from 'services/chain' +import { getFeeRateStatistics } from 'services/chain' import { MEDIUM_FEE_RATE, METHOD_NOT_FOUND } from 'utils/const' type CountdownOptions = { @@ -16,7 +16,7 @@ const useGetCountDownAndFeeRateStats = ({ seconds = 30, interval = 1000 }: Count }>({ suggestFeeRate: MEDIUM_FEE_RATE }) const handleGetFeeRateStatis = useCallback(() => { - getFeeRateStats() + getFeeRateStatistics() .then(res => { const { mean, median } = res ?? {} const suggested = mean && median ? Math.max(1000, Number(mean), Number(median)) : MEDIUM_FEE_RATE diff --git a/yarn.lock b/yarn.lock index 472e5c43d8..3fb9f2f89a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3401,25 +3401,6 @@ pump "^3.0.0" tar-fs "^2.1.1" -"@nervosnetwork/ckb-sdk-core@0.109.0": - version "0.109.0" - resolved "https://registry.yarnpkg.com/@nervosnetwork/ckb-sdk-core/-/ckb-sdk-core-0.109.0.tgz#9ac514e119c3fb2e1cde28437351b06e92700a06" - integrity sha512-c0pMKrZxVG0zRaPOMY+sV7CubW+Fr1YGEj/c3iEZadlXQPeeZ7wdhblG/F4oEtGebRv2lO+F8gTL9FwQlHAXRw== - dependencies: - "@nervosnetwork/ckb-sdk-rpc" "0.109.0" - "@nervosnetwork/ckb-sdk-utils" "0.109.0" - "@nervosnetwork/ckb-types" "0.109.0" - tslib "2.3.1" - -"@nervosnetwork/ckb-sdk-rpc@0.109.0": - version "0.109.0" - resolved "https://registry.yarnpkg.com/@nervosnetwork/ckb-sdk-rpc/-/ckb-sdk-rpc-0.109.0.tgz#89a46227c22a56820260d5d72e976b6b4420d650" - integrity sha512-qkb2TBMb/gqECNqzVlrx9p6V4TdyYcGlN4sOgjVrrDQw7wVcezZFMjj6usNZZLxzbyEmjksTxbAucUnbftumxA== - dependencies: - "@nervosnetwork/ckb-sdk-utils" "0.109.0" - axios "0.21.4" - tslib "2.3.1" - "@nervosnetwork/ckb-sdk-utils@0.109.0": version "0.109.0" resolved "https://registry.yarnpkg.com/@nervosnetwork/ckb-sdk-utils/-/ckb-sdk-utils-0.109.0.tgz#4ac4b70f5649bd641c6cc35c70e0130f043cc98f" @@ -7161,13 +7142,6 @@ axe-core@^4.6.2: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.2.tgz#040a7342b20765cb18bb50b628394c21bccc17a0" integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g== -axios@0.21.4: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - dependencies: - follow-redirects "^1.14.0" - axios@^0.27.2: version "0.27.2" resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" @@ -10950,7 +10924,7 @@ flow-parser@0.*: resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.210.1.tgz#6e04775dc2ebd5bde6a37de38532836678a5ac3e" integrity sha512-M0SdOwD0wZHhk6K/AOaPReBnw2vB7p9KUFUFZHJRsU3ZMl/+WVrMpmb8AfEM6GXZ5mEssCx9vHugxxJg1ieoew== -follow-redirects@^1.0.0, follow-redirects@^1.14.0, follow-redirects@^1.14.9, follow-redirects@^1.15.0: +follow-redirects@^1.0.0, follow-redirects@^1.14.9, follow-redirects@^1.15.0: version "1.15.6" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== From 87af5c3a73cac3927239664669852c7ae7a4386d Mon Sep 17 00:00:00 2001 From: Tom Wang Date: Fri, 10 May 2024 16:25:24 +0800 Subject: [PATCH 36/36] fix: fix ci build error (#3148) --- packages/neuron-ui/config-overrides.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/neuron-ui/config-overrides.js b/packages/neuron-ui/config-overrides.js index aa4d60f53b..6222691d70 100644 --- a/packages/neuron-ui/config-overrides.js +++ b/packages/neuron-ui/config-overrides.js @@ -4,5 +4,6 @@ const path = require('path') module.exports = function override(config) { const webpackConfig = { ...config } webpackConfig.resolve.alias.electron = path.join(__dirname, 'src/electron-modules') + webpackConfig.resolve.fallback = { fs: false } return webpackConfig }