Allow user to enable / disable wallet lock on device that has a platform authenticator
A locked wallet will require user to authenticate in order to access it.
Details
- Reviewers
bytesofman - Group Reviewers
Restricted Owners Package (Owns No Changed Paths) Restricted Project - Commits
- rABC4f64348f48b9: add the ability to lock / unlock the wallet with user's device platform…
cd web/cashtab
npm start
On device without Platform Authenticator (FaceID, TouchID, Windows Hello)
- make sure everything works as before
- make sure under Settings / General Settings / Lock App - "not support" is shown
On device with Platform Authenticator
- make sure that "Wallet Lock" page is shown
- click "Skip"
- make sure everything works as before
- make sure under Settings / General Settings / Lock App - a Toggle Switch is shown
- click on the switch to bring up the Platform Authenticator
- follow the instruction (scan your fingerprint, face id, or enter pin)
- upon successfully authenticate yourself, the Toggle Switch will be "ON"
- navigate away from the wallet (minimize the browser, or switch to another tab)
- navigate back to the wallet
- make sure the Platform Authenticator prompt apprears. (on PC, it may take a few seconds) + on platform that requires user gesture to invoke the Platform Authenticator (iOS, iPadOS), 'Wallet Unlock' page is shown instead + click "Unlock" button to bring up the Platform Authentictor
- follow the instruction on the authenticator prompt
- upon successfully authenticate yourself, make sure everything works as usual
On device with Platform Authenticator
- delete the authenticationConfig from IndexedDB
- make sure that "Wallet Lock" page is shown
- click "Enable Lock" to bring up the Platform Authenticator
- follow the instruction on the authenticator prompt
- upon successfully authenticate yourself, make sure everything works as before
- make sure that Settings / General Settings / Lock App - Toggle Switch in "ON"
- navigate away from the wallet (minimized the browser)
- navigate back to the wallet
- make sure the Platform Authenticator prompt appears + on platform that requires user gesture to invoke the Platform Authenticator (iOS, iPadOS), 'Wallet Unlock' page is shown instead + click "Unlock" button to bring up the Platform Authentictor
- follow the instruction on the authenticator prompt
- upon successfully authenticate yourself, make sure everything works as usual
- turn off the Settings / Geneneral Settings / Lock App - Toggle switch
- navigate away from the wallet, wait 1 to 2 seconds and navigate back to the wallet
- make sure that authentication is no longer required
Connect mobile device to your PC and run the same test
Or deploy to Netlify and test on different mobile devices
Diff Detail
- Repository
- rABC Bitcoin ABC
- Branch
- app-lock
- Lint
Lint Passed - Unit
No Test Coverage - Build Status
Buildable 17205 Build 34241: Build Diff cashtab-tests Build 34240: arc lint + arc unit
Event Timeline
Failed tests logs:
====== CashTab Unit Tests: Configure without a wallet ====== Error: expect(received).toMatchSnapshot() Snapshot name: `Configure without a wallet 1` - Snapshot - 8 + Received + 96 @@ -1,7 +1,7 @@ <div - className="sc-iAyFgw hatKtw" + className="sc-eHgmQL dUpMKn" > <h2> <span aria-label="copy" className="anticon anticon-copy sc-bdVaJa loPqmo" @@ -67,11 +67,11 @@ Your seed phrase is the only way to restore your wallet. Write it down. Keep it safe. </div> </div> </div> <div - className="sc-hSdWYo iEyugW" + className="sc-cvbbAY JVsRj" /> <h2> <span aria-label="wallet" className="anticon anticon-wallet sc-htpNat fLtATP" @@ -92,11 +92,11 @@ </svg> </span> Manage Wallets </h2> <button - className="sc-jTzLTM iVNQiK" + className="sc-jzJRlG fiDUki" onClick={[Function]} > <span aria-label="plus-square" className="anticon anticon-plus-square" @@ -120,11 +120,11 @@ </svg> </span> New Wallet </button> <button - className="sc-fjdhpX eXuEIC" + className="sc-cSHVUG eNOONn" onClick={[Function]} > <span aria-label="import" className="anticon anticon-import" @@ -145,11 +145,11 @@ </svg> </span> Import Wallet </button> <div - className="sc-hSdWYo iEyugW" + className="sc-cvbbAY JVsRj" /> <h2> <span aria-label="dollar" className="anticon anticon-dollar sc-bwzfXH iTQEyo" @@ -170,11 +170,11 @@ </svg> </span> Fiat Currency </h2> <div - className="sc-gZMcBi iFeyXx" + className="sc-VigVT ktfrOp" > <div className="ant-select select-after ant-select-single ant-select-show-arrow" onBlur={[Function]} onFocus={[Function]} @@ -262,15 +262,103 @@ </span> </span> </div> </div> <div - className="sc-hSdWYo iEyugW" + className="sc-cvbbAY JVsRj" + /> + <h2> + <span + aria-label="setting" + className="anticon anticon-setting sc-ifAKCX cYbSut" + role="img" + > + <svg + aria-hidden="true" + data-icon="setting" + fill="currentColor" + focusable="false" + height="1em" + viewBox="64 64 896 896" + width="1em" + > + <path + d="M924.8 625.7l-65.5-56c3.1-19 4.7-38.4 4.7-57.8s-1.6-38.8-4.7-57.8l65.5-56a32.03 32.03 0 009.3-35.2l-.9-2.6a443.74 443.74 0 00-79.7-137.9l-1.8-2.1a32.12 32.12 0 00-35.1-9.5l-81.3 28.9c-30-24.6-63.5-44-99.7-57.6l-15.7-85a32.05 32.05 0 00-25.8-25.7l-2.7-.5c-52.1-9.4-106.9-9.4-159 0l-2.7.5a32.05 32.05 0 00-25.8 25.7l-15.8 85.4a351.86 351.86 0 00-99 57.4l-81.9-29.1a32 32 0 00-35.1 9.5l-1.8 2.1a446.02 446.02 0 00-79.7 137.9l-.9 2.6c-4.5 12.5-.8 26.5 9.3 35.2l66.3 56.6c-3.1 18.8-4.6 38-4.6 57.1 0 19.2 1.5 38.4 4.6 57.1L99 625.5a32.03 32.03 0 00-9.3 35.2l.9 2.6c18.1 50.4 44.9 96.9 79.7 137.9l1.8 2.1a32.12 32.12 0 0035.1 9.5l81.9-29.1c29.8 24.5 63.1 43.9 99 57.4l15.8 85.4a32.05 32.05 0 0025.8 25.7l2.7.5a449.4 449.4 0 00159 0l2.7-.5a32.05 32.05 0 0025.8-25.7l15.7-85a350 350 0 0099.7-57.6l81.3 28.9a32 32 0 0035.1-9.5l1.8-2.1c34.8-41.1 61.6-87.5 79.7-137.9l.9-2.6c4.5-12.3.8-26.3-9.3-35zM788.3 465.9c2.5 15.1 3.8 30.6 3.8 46.1s-1.3 31-3.8 46.1l-6.6 40.1 74.7 63.9a370.03 370.03 0 01-42.6 73.6L721 702.8l-31.4 25.8c-23.9 19.6-50.5 35-79.3 45.8l-38.1 14.3-17.9 97a377.5 377.5 0 01-85 0l-17.9-97.2-37.8-14.5c-28.5-10.8-55-26.2-78.7-45.7l-31.4-25.9-93.4 33.2c-17-22.9-31.2-47.6-42.6-73.6l75.5-64.5-6.5-40c-2.4-14.9-3.7-30.3-3.7-45.5 0-15.3 1.2-30.6 3.7-45.5l6.5-40-75.5-64.5c11.3-26.1 25.6-50.7 42.6-73.6l93.4 33.2 31.4-25.9c23.7-19.5 50.2-34.9 78.7-45.7l37.9-14.3 17.9-97.2c28.1-3.2 56.8-3.2 85 0l17.9 97 38.1 14.3c28.7 10.8 55.4 26.2 79.3 45.8l31.4 25.8 92.8-32.9c17 22.9 31.2 47.6 42.6 73.6L781.8 426l6.5 39.9zM512 326c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm79.2 255.2A111.6 111.6 0 01512 614c-29.9 0-58-11.7-79.2-32.8A111.6 111.6 0 01400 502c0-29.9 11.7-58 32.8-79.2C454 401.6 482.1 390 512 390c29.9 0 58 11.6 79.2 32.8A111.6 111.6 0 01624 502c0 29.9-11.7 58-32.8 79.2z" + /> + </svg> + </span> + General Settings + </h2> + <div + className="sc-jWBwVP ibcxAa" + > + <div + className="title" + > + <span + aria-label="lock" + className="anticon anticon-lock" + role="img" + > + <svg + aria-hidden="true" + data-icon="lock" + fill="currentColor" + focusable="false" + height="1em" + viewBox="64 64 896 896" + width="1em" + > + <path + d="M832 464h-68V240c0-70.7-57.3-128-128-128H388c-70.7 0-128 57.3-128 128v224h-68c-17.7 0-32 14.3-32 32v384c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V496c0-17.7-14.3-32-32-32zM540 701v53c0 4.4-3.6 8-8 8h-40c-4.4 0-8-3.6-8-8v-53a48.01 48.01 0 1156 0zm152-237H332V240c0-30.9 25.1-56 56-56h248c30.9 0 56 25.1 56 56v224z" /> + </svg> + </span> + Lock App + </div> + <button + aria-checked={false} + className="ant-switch ant-switch-small" + onClick={[Function]} + onKeyDown={[Function]} + role="switch" + type="button" + > + <div + className="ant-switch-handle" + /> + <span + className="ant-switch-inner" + > + <span + aria-label="close" + className="anticon anticon-close" + role="img" + > + <svg + aria-hidden="true" + data-icon="close" + fill="currentColor" + focusable="false" + height="1em" + viewBox="64 64 896 896" + width="1em" + > + <path + d="M563.8 512l262.5-312.9c4.4-5.2.7-13.1-6.1-13.1h-79.8c-4.7 0-9.2 2.1-12.3 5.7L511.6 449.8 295.1 191.7c-3-3.6-7.5-5.7-12.3-5.7H203c-6.8 0-10.5 7.9-6.1 13.1L459.4 512 196.9 824.9A7.95 7.95 0 00203 838h79.8c4.7 0 9.2-2.1 12.3-5.7l216.5-258.1 216.5 258.1c3 3.6 7.5 5.7 12.3 5.7h79.8c6.8 0 10.5-7.9 6.1-13.1L563.8 512z" + /> + </svg> + </span> + </span> + </button> + </div> + <div + className="sc-cvbbAY JVsRj" + /> [ <a - className="sc-ckVGcZ bhwAJY" + className="sc-eNQAEJ jpqDcE" href="https://docs.cashtab.com/docs/" rel="noreferrer" target="_blank" type="link" > at Object.<anonymous> (/work/web/cashtab/src/components/Configure/__tests__/Configure.test.js:24:18) at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12 at new Promise (<anonymous>) at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41 at processTicksAndRejections (node:internal/process/task_queues:94:5) ====== CashTab Unit Tests: Configure with a wallet ====== Error: expect(received).toMatchSnapshot() Snapshot name: `Configure with a wallet 1` - Snapshot - 9 + Received + 97 @@ -1,7 +1,7 @@ <div - className="sc-iAyFgw hatKtw" + className="sc-eHgmQL dUpMKn" > <h2> <span aria-label="copy" className="anticon anticon-copy sc-bdVaJa loPqmo" @@ -67,11 +67,11 @@ Your seed phrase is the only way to restore your wallet. Write it down. Keep it safe. </div> </div> </div> <div - className="ant-collapse ant-collapse-icon-position-left sc-EHOje iPpwBT" + className="ant-collapse ant-collapse-icon-position-left sc-gzVnrw IJTYA" role={null} > <div className="ant-collapse-item" > @@ -105,11 +105,11 @@ Click to reveal seed phrase </div> </div> </div> <div - className="sc-hSdWYo iEyugW" + className="sc-cvbbAY JVsRj" /> <h2> <span aria-label="wallet" className="anticon anticon-wallet sc-htpNat fLtATP" @@ -130,11 +130,11 @@ </svg> </span> Manage Wallets </h2> <button - className="sc-jTzLTM iVNQiK" + className="sc-jzJRlG fiDUki" onClick={[Function]} > <span aria-label="plus-square" className="anticon anticon-plus-square" @@ -158,11 +158,11 @@ </svg> </span> New Wallet </button> <button - className="sc-fjdhpX eXuEIC" + className="sc-cSHVUG eNOONn" onClick={[Function]} > <span aria-label="import" className="anticon anticon-import" @@ -183,11 +183,11 @@ </svg> </span> Import Wallet </button> <div - className="sc-hSdWYo iEyugW" + className="sc-cvbbAY JVsRj" /> <h2> <span aria-label="dollar" className="anticon anticon-dollar sc-bwzfXH iTQEyo" @@ -208,11 +208,11 @@ </svg> </span> Fiat Currency </h2> <div - className="sc-gZMcBi iFeyXx" + className="sc-VigVT ktfrOp" > <div className="ant-select select-after ant-select-single ant-select-show-arrow" onBlur={[Function]} onFocus={[Function]} @@ -300,15 +300,103 @@ </span> </span> </div> </div> <div - className="sc-hSdWYo iEyugW" + className="sc-cvbbAY JVsRj" + /> + <h2> + <span + aria-label="setting" + className="anticon anticon-setting sc-ifAKCX cYbSut" + role="img" + > + <svg + aria-hidden="true" + data-icon="setting" + fill="currentColor" + focusable="false" + height="1em" + viewBox="64 64 896 896" + width="1em" + > + <path + d="M924.8 625.7l-65.5-56c3.1-19 4.7-38.4 4.7-57.8s-1.6-38.8-4.7-57.8l65.5-56a32.03 32.03 0 009.3-35.2l-.9-2.6a443.74 443.74 0 00-79.7-137.9l-1.8-2.1a32.12 32.12 0 00-35.1-9.5l-81.3 28.9c-30-24.6-63.5-44-99.7-57.6l-15.7-85a32.05 32.05 0 00-25.8-25.7l-2.7-.5c-52.1-9.4-106.9-9.4-159 0l-2.7.5a32.05 32.05 0 00-25.8 25.7l-15.8 85.4a351.86 351.86 0 00-99 57.4l-81.9-29.1a32 32 0 00-35.1 9.5l-1.8 2.1a446.02 446.02 0 00-79.7 137.9l-.9 2.6c-4.5 12.5-.8 26.5 9.3 35.2l66.3 56.6c-3.1 18.8-4.6 38-4.6 57.1 0 19.2 1.5 38.4 4.6 57.1L99 625.5a32.03 32.03 0 00-9.3 35.2l.9 2.6c18.1 50.4 44.9 96.9 79.7 137.9l1.8 2.1a32.12 32.12 0 0035.1 9.5l81.9-29.1c29.8 24.5 63.1 43.9 99 57.4l15.8 85.4a32.05 32.05 0 0025.8 25.7l2.7.5a449.4 449.4 0 00159 0l2.7-.5a32.05 32.05 0 0025.8-25.7l15.7-85a350 350 0 0099.7-57.6l81.3 28.9a32 32 0 0035.1-9.5l1.8-2.1c34.8-41.1 61.6-87.5 79.7-137.9l.9-2.6c4.5-12.3.8-26.3-9.3-35zM788.3 465.9c2.5 15.1 3.8 30.6 3.8 46.1s-1.3 31-3.8 46.1l-6.6 40.1 74.7 63.9a370.03 370.03 0 01-42.6 73.6L721 702.8l-31.4 25.8c-23.9 19.6-50.5 35-79.3 45.8l-38.1 14.3-17.9 97a377.5 377.5 0 01-85 0l-17.9-97.2-37.8-14.5c-28.5-10.8-55-26.2-78.7-45.7l-31.4-25.9-93.4 33.2c-17-22.9-31.2-47.6-42.6-73.6l75.5-64.5-6.5-40c-2.4-14.9-3.7-30.3-3.7-45.5 0-15.3 1.2-30.6 3.7-45.5l6.5-40-75.5-64.5c11.3-26.1 25.6-50.7 42.6-73.6l93.4 33.2 31.4-25.9c23.7-19.5 50.2-34.9 78.7-45.7l37.9-14.3 17.9-97.2c28.1-3.2 56.8-3.2 85 0l17.9 97 38.1 14.3c28.7 10.8 55.4 26.2 79.3 45.8l31.4 25.8 92.8-32.9c17 22.9 31.2 47.6 42.6 73.6L781.8 426l6.5 39.9zM512 326c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm79.2 255.2A111.6 111.6 0 01512 614c-29.9 0-58-11.7-79.2-32.8A111.6 111.6 0 01400 502c0-29.9 11.7-58 32.8-79.2C454 401.6 482.1 390 512 390c29.9 0 58 11.6 79.2 32.8A111.6 111.6 0 01624 502c0 29.9-11.7 58-32.8 79.2z" + /> + </svg> + </span> + General Settings + </h2> + <div + className="sc-jWBwVP ibcxAa" + > + <div + className="title" + > + <span + aria-label="lock" + className="anticon anticon-lock" + role="img" + > + <svg + aria-hidden="true" + data-icon="lock" + fill="currentColor" + focusable="false" + height="1em" + viewBox="64 64 896 896" + width="1em" + > + <path + d="M832 464h-68V240c0-70.7-57.3-128-128-128H388c-70.7 0-128 57.3-128 128v224h-68c-17.7 0-32 14.3-32 32v384c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V496c0-17.7-14.3-32-32-32zM540 701v53c0 4.4-3.6 8-8 8h-40c-4.4 0-8-3.6-8-8v-53a48.01 48.01 0 1156 0zm152-237H332V240c0-30.9 25.1-56 56-56h248c30.9 0 56 25.1 56 56v224z" + /> + </svg> + </span> + Lock App + </div> + <button + aria-checked={false} + className="ant-switch ant-switch-small" + onClick={[Function]} + onKeyDown={[Function]} + role="switch" + type="button" + > + <div + className="ant-switch-handle" + /> + <span + className="ant-switch-inner" + > + <span + aria-label="close" + className="anticon anticon-close" + role="img" + > + <svg + aria-hidden="true" + data-icon="close" + fill="currentColor" + focusable="false" + height="1em" + viewBox="64 64 896 896" + width="1em" + > + <path + d="M563.8 512l262.5-312.9c4.4-5.2.7-13.1-6.1-13.1h-79.8c-4.7 0-9.2 2.1-12.3 5.7L511.6 449.8 295.1 191.7c-3-3.6-7.5-5.7-12.3-5.7H203c-6.8 0-10.5 7.9-6.1 13.1L459.4 512 196.9 824.9A7.95 7.95 0 00203 838h79.8c4.7 0 9.2-2.1 12.3-5.7l216.5-258.1 216.5 258.1c3 3.6 7.5 5.7 12.3 5.7h79.8c6.8 0 10.5-7.9 6.1-13.1L563.8 512z" + /> + </svg> + </span> + </span> + </button> + </div> + <div + className="sc-cvbbAY JVsRj" /> [ <a - className="sc-ckVGcZ bhwAJY" + className="sc-eNQAEJ jpqDcE" href="https://docs.cashtab.com/docs/" rel="noreferrer" target="_blank" type="link" > at Object.<anonymous> (/work/web/cashtab/src/components/Configure/__tests__/Configure.test.js:35:18) at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12 at new Promise (<anonymous>) at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41 at processTicksAndRejections (node:internal/process/task_queues:94:5) ====== CashTab Unit Tests: Wallet with BCH balances and tokens and state field ====== Error: expect(received).toMatchSnapshot() Snapshot name: `Wallet with BCH balances and tokens and state field 1` - Snapshot - 1 + Received + 1 @@ -1,7 +1,7 @@ <div - className="ant-collapse ant-collapse-icon-position-left sc-gqjmRU fLjHet" + className="ant-collapse ant-collapse-icon-position-left sc-jTzLTM RrYKP" role={null} style={ Object { "marginBottom": "24px", } at Object.<anonymous> (/work/web/cashtab/src/components/Tokens/__tests__/CreateTokenForm.test.js:57:18) at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12 at new Promise (<anonymous>) at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41 at processTicksAndRejections (node:internal/process/task_queues:94:5)Error: expect(received).toMatchSnapshot() Snapshot name: `Wallet with BCH balances and tokens and state field 1` - Snapshot - 6 + Received + 6 @@ -1,23 +1,23 @@ Array [ <div - className="sc-kAzzGY kdOdTZ" + className="sc-kgoBCf kfjVlq" > 0.06 XEC </div>, <div - className="sc-chPdSV elAazB" + className="sc-kGXeez kiHoFA" > $ NaN USD </div>, <div - className="ant-collapse ant-collapse-icon-position-left sc-gqjmRU fLjHet" + className="ant-collapse ant-collapse-icon-position-left sc-jTzLTM RrYKP" role={null} style={ Object { "marginBottom": "24px", } @@ -61,14 +61,14 @@ <a href="/send-token/bd1acc4c986de57af8d6d2a64aecad8c30ee80f37ae9d066d758923732ddc9ba" onClick={[Function]} > <div - className="sc-eNQAEJ jnzudA" + className="sc-kEYyzF RTiPg" > <div - className="sc-ckVGcZ ealBRQ" + className="sc-eNQAEJ iEWhkj" > <img alt="identicon of tokenId bd1acc4c986de57af8d6d2a64aecad8c30ee80f37ae9d066d758923732ddc9ba " height="32" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAACVBMVEXI65c+X5zhzy2mkXStAAAAA3RSTlP////6yOLMAABAi0lEQVR42gGAQH+/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgICAgICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAgICAgICAgICAgICAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgICAgICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAgICAgICAgICAgICAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgICAgICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAgICAgICAgICAgICAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgICAgICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAgICAgICAgICAgICAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgICAgICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAgICAgICAgICAgICAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgICAgICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAgICAgICAgICAgICAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgICAgICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAgICAgICAgICAgICAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgICAgICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAgICAgICAgICAgICAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgICAgICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAgICAgICAgICAgICAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgICAgICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAgICAgICAgICAgICAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgICAgICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAgICAgICAgICAgICAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgICAgICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAgICAgICAgICAgICAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgICAgICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAgICAgICAgICAgICAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgICAgICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAgICAgICAgICAgICAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgICAgICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAgICAgICAgICAgICAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgICAgICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAgICAgICAgICAgICAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBSNwyASrq/tAAAAAASUVORK5CYII=" @@ -79,11 +79,11 @@ } width="32" /> </div> <div - className="sc-jKJlTe bUCZgB" + className="sc-hMqMXs jcgLFh" > 6.001 <strong> TBS at Object.<anonymous> (/work/web/cashtab/src/components/Tokens/__tests__/Tokens.test.js:96:18) at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12 at new Promise (<anonymous>) at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41 at processTicksAndRejections (node:internal/process/task_queues:94:5)Error: expect(received).toMatchSnapshot() Snapshot name: `Wallet with BCH balances and tokens and state field 1` - Snapshot - 11 + Received + 11 @@ -1,15 +1,15 @@ Array [ <div - className="sc-jlyJG gVikkG" + className="sc-csuQGl jRtcTV" > 0.06 XEC </div>, <div - className="sc-gipzik kUSpAS" + className="sc-Rmtcm dYZmDW" > $ NaN USD @@ -23,11 +23,11 @@ "width": "100%", } } > <div - className="sc-cSHVUG ckubWs" + className="sc-chPdSV iDFVZe" style={ Object { "display": "none", } } @@ -43,11 +43,11 @@ > ecash:qzagy47mvh6qxkvcn3acjnz73rkhkc6y7ccxkrr6zd </span> </div> <svg - className="sc-jzJRlG dYsuyj" + className="sc-kAzzGY lanDwf" height={210} id="borderedQRCode" shapeRendering="crispEdges" viewBox="0 0 37 37" width={210} @@ -69,47 +69,47 @@ xlinkHref="logo_primary.png" y={16.385714285714286} /> </svg> <div - className="sc-kgoBCf iYHBff notranslate" + className="sc-kpOJdX eicPsf notranslate" > <input readOnly={true} spellCheck="false" type="text" value="ecash:qzagy47mvh6qxkvcn3acjnz73rkhkc6y7ccxkrr6zd" /> <span - className="sc-kAzzGY bGeWfk" + className="sc-kgoBCf bHwLKM" > ecash: </span> <span - className="sc-chPdSV jcbRDb" + className="sc-kGXeez jNbIFN" > qzagy47m </span> vh6qxkvcn3acjnz73rkhkc6y7c <span - className="sc-chPdSV jcbRDb" + className="sc-kGXeez jNbIFN" > cxkrr6zd </span> </div> </div>, <div - className="sc-eqIVtm dcINvv" + className="sc-caSCKo cwfYcU" > <div - className="sc-fAjcbJ jmyMQN" + className="sc-gisBJw EQkzY" onClick={[Function]} > XEC </div> <div - className="sc-fAjcbJ jmyMQN nonactiveBtn" + className="sc-gisBJw EQkzY nonactiveBtn" onClick={[Function]} > eToken </div> </div>, at Object.<anonymous> (/work/web/cashtab/src/components/Wallet/__tests__/Wallet.test.js:75:18) at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12 at new Promise (<anonymous>) at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41 at processTicksAndRejections (node:internal/process/task_queues:94:5)Error: expect(received).toMatchSnapshot() Snapshot name: `Wallet with BCH balances and tokens and state field 1` - Snapshot - 6 + Received + 6 @@ -1,8 +1,8 @@ Array [ <div - className="sc-fjdhpX llHaIR" + className="sc-cSHVUG lalYdv" > 6.001 TBS </div>, @@ -24,11 +24,11 @@ "width": "auto", } } > <div - className="sc-gZMcBi iFeyXx" + className="sc-VigVT ktfrOp" > <div className="ant-row ant-form-item" style={Object {}} > @@ -93,11 +93,11 @@ </span> <span className="ant-input-group-addon" > <span - className="sc-htoDjs clindv" + className="sc-iwsKbI cVxKUE" onClick={[Function]} > <span aria-label="qrcode" className="anticon anticon-qrcode sc-bxivhb ctLIog" @@ -134,11 +134,11 @@ </div> </div> </div> </div> <div - className="sc-gZMcBi iFeyXx" + className="sc-VigVT ktfrOp" > <div className="ant-row ant-form-item" style={Object {}} > @@ -200,11 +200,11 @@ </span> <span className="ant-input-group-addon" > <span - className="sc-gqjmRU dcHtfz" + className="sc-jTzLTM PEluH" disabled={false} onClick={[Function]} > max </span> @@ -231,11 +231,11 @@ "paddingTop": "12px", } } > <button - className="sc-EHOje bfWfmf" + className="sc-gzVnrw wXhZP" onClick={[Function]} > Send TestBits </button> at Object.<anonymous> (/work/web/cashtab/src/components/Send/__tests__/SendToken.test.js:76:18) at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12 at new Promise (<anonymous>) at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41 at processTicksAndRejections (node:internal/process/task_queues:94:5)Error: expect(received).toMatchSnapshot() Snapshot name: `Wallet with BCH balances and tokens and state field 1` - Snapshot - 10 + Received + 10 @@ -1,15 +1,15 @@ Array [ <div - className="sc-kAzzGY kdOdTZ" + className="sc-kgoBCf kfjVlq" > 0.06 XEC </div>, <div - className="sc-chPdSV elAazB" + className="sc-kGXeez kiHoFA" > $ NaN USD @@ -32,11 +32,11 @@ "width": "auto", } } > <div - className="sc-jTzLTM fKDsMv" + className="sc-jzJRlG dEmeOv" > <div className="ant-row ant-form-item" style={Object {}} > @@ -101,11 +101,11 @@ </span> <span className="ant-input-group-addon" > <span - className="sc-gZMcBi kJTcOr" + className="sc-VigVT jPrdqZ" onClick={[Function]} > <span aria-label="qrcode" className="anticon anticon-qrcode sc-bxivhb ctLIog" @@ -142,11 +142,11 @@ </div> </div> </div> </div> <div - className="sc-jTzLTM fKDsMv" + className="sc-jzJRlG dEmeOv" > <div className="ant-row ant-form-item" style={Object {}} > @@ -287,11 +287,11 @@ </svg> </span> </span> </div> <span - className="sc-jzJRlG kQuQkS" + className="sc-kAzzGY jWcEkN" disabled={false} onClick={[Function]} style={ Object { "height": "60px", @@ -316,11 +316,11 @@ </div> </div> </div> </div> <div - className="sc-dxgOiQ kbCOBL" + className="sc-jKJlTe hccxef" > = $ NaN USD </div> @@ -330,11 +330,11 @@ "paddingTop": "12px", } } > <button - className="sc-htoDjs jyAknT" + className="sc-iwsKbI jScjBa" onClick={[Function]} > Send </button> </div> @@ -342,14 +342,14 @@ </div> </div>, <br />, <br />, <div - className="sc-ksYbfQ fUkkAB" + className="sc-frDJqD bxmZEQ" />, <div - className="ant-collapse ant-collapse-icon-position-left sc-gzVnrw fYpbQV" + className="ant-collapse ant-collapse-icon-position-left sc-dnqmqq jGALww" role={null} style={ Object { "marginBottom": "24px", } at Object.<anonymous> (/work/web/cashtab/src/components/Send/__tests__/Send.test.js:96:18) at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12 at new Promise (<anonymous>) at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41 at processTicksAndRejections (node:internal/process/task_queues:94:5) ====== CashTab Unit Tests: Wallet without BCH balance ====== Error: expect(received).toMatchSnapshot() Snapshot name: `Wallet without BCH balance 1` - Snapshot - 4 + Received + 4 @@ -1,22 +1,22 @@ Array [ <div - className="sc-kgoBCf fswuXg" + className="sc-kpOJdX GoEyB" > You need some XEC in your wallet to create tokens. </div>, <div - className="sc-kAzzGY kdOdTZ" + className="sc-kgoBCf kfjVlq" > 0 XEC </div>, <div - className="ant-collapse ant-collapse-icon-position-left sc-gqjmRU eryBsW" + className="ant-collapse ant-collapse-icon-position-left sc-jTzLTM fDvaHF" role={null} style={ Object { "marginBottom": "24px", } @@ -55,11 +55,11 @@ Create eToken </div> </div> </div>, <p - className="sc-kpOJdX bjUfnF" + className="sc-ckVGcZ eEJdrC" > You need at least 5.5 at Object.<anonymous> (/work/web/cashtab/src/components/Tokens/__tests__/Tokens.test.js:54:18) at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12 at new Promise (<anonymous>) at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41 at processTicksAndRejections (node:internal/process/task_queues:94:5)Error: expect(received).toMatchSnapshot() Snapshot name: `Wallet without BCH balance 1` - Snapshot - 11 + Received + 11 @@ -1,8 +1,8 @@ Array [ <div - className="sc-csuQGl EOfLl" + className="sc-bRBYWo beDMbu" > <span aria-label="party emoji" role="img" > @@ -24,11 +24,11 @@ XEC to send to others </div>, <div - className="sc-jlyJG gVikkG" + className="sc-csuQGl jRtcTV" > 0 XEC </div>, @@ -41,11 +41,11 @@ "width": "100%", } } > <div - className="sc-cSHVUG ckubWs" + className="sc-chPdSV iDFVZe" style={ Object { "display": "none", } } @@ -61,11 +61,11 @@ > ecash:qzagy47mvh6qxkvcn3acjnz73rkhkc6y7ccxkrr6zd </span> </div> <svg - className="sc-jzJRlG dYsuyj" + className="sc-kAzzGY lanDwf" height={210} id="borderedQRCode" shapeRendering="crispEdges" viewBox="0 0 37 37" width={210} @@ -87,47 +87,47 @@ xlinkHref="logo_primary.png" y={16.385714285714286} /> </svg> <div - className="sc-kgoBCf iYHBff notranslate" + className="sc-kpOJdX eicPsf notranslate" > <input readOnly={true} spellCheck="false" type="text" value="ecash:qzagy47mvh6qxkvcn3acjnz73rkhkc6y7ccxkrr6zd" /> <span - className="sc-kAzzGY bGeWfk" + className="sc-kgoBCf bHwLKM" > ecash: </span> <span - className="sc-chPdSV jcbRDb" + className="sc-kGXeez jNbIFN" > qzagy47m </span> vh6qxkvcn3acjnz73rkhkc6y7c <span - className="sc-chPdSV jcbRDb" + className="sc-kGXeez jNbIFN" > cxkrr6zd </span> </div> </div>, <div - className="sc-eqIVtm dcINvv" + className="sc-caSCKo cwfYcU" > <div - className="sc-fAjcbJ jmyMQN" + className="sc-gisBJw EQkzY" onClick={[Function]} > XEC </div> <div - className="sc-fAjcbJ jmyMQN nonactiveBtn" + className="sc-gisBJw EQkzY nonactiveBtn" onClick={[Function]} > eToken </div> </div>, at Object.<anonymous> (/work/web/cashtab/src/components/Wallet/__tests__/Wallet.test.js:36:18) at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12 at new Promise (<anonymous>) at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41 at processTicksAndRejections (node:internal/process/task_queues:94:5)Error: expect(received).toMatchSnapshot() Snapshot name: `Wallet without BCH balance 1` - Snapshot - 9 + Received + 9 @@ -1,8 +1,8 @@ Array [ <div - className="sc-kgoBCf fswuXg" + className="sc-kpOJdX GoEyB" > You currently have 0 XEC <br /> Deposit some funds to use this feature @@ -25,11 +25,11 @@ "width": "auto", } } > <div - className="sc-jTzLTM fKDsMv" + className="sc-jzJRlG dEmeOv" > <div className="ant-row ant-form-item" style={Object {}} > @@ -94,11 +94,11 @@ </span> <span className="ant-input-group-addon" > <span - className="sc-gZMcBi kJTcOr" + className="sc-VigVT jPrdqZ" onClick={[Function]} > <span aria-label="qrcode" className="anticon anticon-qrcode sc-bxivhb ctLIog" @@ -135,11 +135,11 @@ </div> </div> </div> </div> <div - className="sc-jTzLTM fKDsMv" + className="sc-jzJRlG dEmeOv" > <div className="ant-row ant-form-item" style={Object {}} > @@ -280,11 +280,11 @@ </svg> </span> </span> </div> <span - className="sc-jzJRlG kQuQkS" + className="sc-kAzzGY jWcEkN" disabled={false} onClick={[Function]} style={ Object { "height": "60px", @@ -309,11 +309,11 @@ </div> </div> </div> </div> <div - className="sc-dxgOiQ kbCOBL" + className="sc-jKJlTe hccxef" > = $ NaN USD </div> @@ -323,25 +323,25 @@ "paddingTop": "12px", } } > <button - className="sc-dnqmqq fryMgW" + className="sc-gZMcBi eUcbgv" > Send </button> </div> </form> </div> </div>, <br />, <br />, <div - className="sc-ksYbfQ fUkkAB" + className="sc-frDJqD bxmZEQ" />, <div - className="ant-collapse ant-collapse-icon-position-left sc-gzVnrw fYpbQV" + className="ant-collapse ant-collapse-icon-position-left sc-dnqmqq jGALww" role={null} style={ Object { "marginBottom": "24px", } at Object.<anonymous> (/work/web/cashtab/src/components/Send/__tests__/Send.test.js:54:18) at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12 at new Promise (<anonymous>) at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41 at processTicksAndRejections (node:internal/process/task_queues:94:5) ====== CashTab Unit Tests: Wallet with BCH balances ====== Error: expect(received).toMatchSnapshot() Snapshot name: `Wallet with BCH balances 1` - Snapshot - 4 + Received + 4 @@ -1,22 +1,22 @@ Array [ <div - className="sc-kgoBCf fswuXg" + className="sc-kpOJdX GoEyB" > You need some XEC in your wallet to create tokens. </div>, <div - className="sc-kAzzGY kdOdTZ" + className="sc-kgoBCf kfjVlq" > 0 XEC </div>, <div - className="ant-collapse ant-collapse-icon-position-left sc-gqjmRU eryBsW" + className="ant-collapse ant-collapse-icon-position-left sc-jTzLTM fDvaHF" role={null} style={ Object { "marginBottom": "24px", } @@ -55,11 +55,11 @@ Create eToken </div> </div> </div>, <p - className="sc-kpOJdX bjUfnF" + className="sc-ckVGcZ eEJdrC" > You need at least 5.5 at Object.<anonymous> (/work/web/cashtab/src/components/Tokens/__tests__/Tokens.test.js:68:18) at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12 at new Promise (<anonymous>) at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41 at processTicksAndRejections (node:internal/process/task_queues:94:5)Error: expect(received).toMatchSnapshot() Snapshot name: `Wallet with BCH balances 1` - Snapshot - 11 + Received + 11 @@ -1,8 +1,8 @@ Array [ <div - className="sc-csuQGl EOfLl" + className="sc-bRBYWo beDMbu" > <span aria-label="party emoji" role="img" > @@ -24,11 +24,11 @@ XEC to send to others </div>, <div - className="sc-jlyJG gVikkG" + className="sc-csuQGl jRtcTV" > 0 XEC </div>, @@ -41,11 +41,11 @@ "width": "100%", } } > <div - className="sc-cSHVUG ckubWs" + className="sc-chPdSV iDFVZe" style={ Object { "display": "none", } } @@ -61,11 +61,11 @@ > ecash:qzagy47mvh6qxkvcn3acjnz73rkhkc6y7ccxkrr6zd </span> </div> <svg - className="sc-jzJRlG dYsuyj" + className="sc-kAzzGY lanDwf" height={210} id="borderedQRCode" shapeRendering="crispEdges" viewBox="0 0 37 37" width={210} @@ -87,47 +87,47 @@ xlinkHref="logo_primary.png" y={16.385714285714286} /> </svg> <div - className="sc-kgoBCf iYHBff notranslate" + className="sc-kpOJdX eicPsf notranslate" > <input readOnly={true} spellCheck="false" type="text" value="ecash:qzagy47mvh6qxkvcn3acjnz73rkhkc6y7ccxkrr6zd" /> <span - className="sc-kAzzGY bGeWfk" + className="sc-kgoBCf bHwLKM" > ecash: </span> <span - className="sc-chPdSV jcbRDb" + className="sc-kGXeez jNbIFN" > qzagy47m </span> vh6qxkvcn3acjnz73rkhkc6y7c <span - className="sc-chPdSV jcbRDb" + className="sc-kGXeez jNbIFN" > cxkrr6zd </span> </div> </div>, <div - className="sc-eqIVtm dcINvv" + className="sc-caSCKo cwfYcU" > <div - className="sc-fAjcbJ jmyMQN" + className="sc-gisBJw EQkzY" onClick={[Function]} > XEC </div> <div - className="sc-fAjcbJ jmyMQN nonactiveBtn" + className="sc-gisBJw EQkzY nonactiveBtn" onClick={[Function]} > eToken </div> </div>, at Object.<anonymous> (/work/web/cashtab/src/components/Wallet/__tests__/Wallet.test.js:49:18) at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12 at new Promise (<anonymous>) at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41 at processTicksAndRejections (node:internal/process/task_queues:94:5)Error: expect(received).toMatchSnapshot() Snapshot name: `Wallet with BCH balances 1` - Snapshot - 9 + Received + 9 @@ -1,8 +1,8 @@ Array [ <div - className="sc-kgoBCf fswuXg" + className="sc-kpOJdX GoEyB" > You currently have 0 XEC <br /> Deposit some funds to use this feature @@ -25,11 +25,11 @@ "width": "auto", } } > <div - className="sc-jTzLTM fKDsMv" + className="sc-jzJRlG dEmeOv" > <div className="ant-row ant-form-item" style={Object {}} > @@ -94,11 +94,11 @@ </span> <span className="ant-input-group-addon" > <span - className="sc-gZMcBi kJTcOr" + className="sc-VigVT jPrdqZ" onClick={[Function]} > <span aria-label="qrcode" className="anticon anticon-qrcode sc-bxivhb ctLIog" @@ -135,11 +135,11 @@ </div> </div> </div> </div> <div - className="sc-jTzLTM fKDsMv" + className="sc-jzJRlG dEmeOv" > <div className="ant-row ant-form-item" style={Object {}} > @@ -280,11 +280,11 @@ </svg> </span> </span> </div> <span - className="sc-jzJRlG kQuQkS" + className="sc-kAzzGY jWcEkN" disabled={false} onClick={[Function]} style={ Object { "height": "60px", @@ -309,11 +309,11 @@ </div> </div> </div> </div> <div - className="sc-dxgOiQ kbCOBL" + className="sc-jKJlTe hccxef" > = $ NaN USD </div> @@ -323,25 +323,25 @@ "paddingTop": "12px", } } > <button - className="sc-dnqmqq fryMgW" + className="sc-gZMcBi eUcbgv" > Send </button> </div> </form> </div> </div>, <br />, <br />, <div - className="sc-ksYbfQ fUkkAB" + className="sc-frDJqD bxmZEQ" />, <div - className="ant-collapse ant-collapse-icon-position-left sc-gzVnrw fYpbQV" + className="ant-collapse ant-collapse-icon-position-left sc-dnqmqq jGALww" role={null} style={ Object { "marginBottom": "24px", } at Object.<anonymous> (/work/web/cashtab/src/components/Send/__tests__/Send.test.js:68:18) at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12 at new Promise (<anonymous>) at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41 at processTicksAndRejections (node:internal/process/task_queues:94:5) ====== CashTab Unit Tests: Wallet with BCH balances and tokens ====== Error: expect(received).toMatchSnapshot() Snapshot name: `Wallet with BCH balances and tokens 1` - Snapshot - 4 + Received + 4 @@ -1,22 +1,22 @@ Array [ <div - className="sc-kgoBCf fswuXg" + className="sc-kpOJdX GoEyB" > You need some XEC in your wallet to create tokens. </div>, <div - className="sc-kAzzGY kdOdTZ" + className="sc-kgoBCf kfjVlq" > 0 XEC </div>, <div - className="ant-collapse ant-collapse-icon-position-left sc-gqjmRU eryBsW" + className="ant-collapse ant-collapse-icon-position-left sc-jTzLTM fDvaHF" role={null} style={ Object { "marginBottom": "24px", } @@ -55,11 +55,11 @@ Create eToken </div> </div> </div>, <p - className="sc-kpOJdX bjUfnF" + className="sc-ckVGcZ eEJdrC" > You need at least 5.5 at Object.<anonymous> (/work/web/cashtab/src/components/Tokens/__tests__/Tokens.test.js:82:18) at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12 at new Promise (<anonymous>) at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41 at processTicksAndRejections (node:internal/process/task_queues:94:5)Error: expect(received).toMatchSnapshot() Snapshot name: `Wallet with BCH balances and tokens 1` - Snapshot - 11 + Received + 11 @@ -1,8 +1,8 @@ Array [ <div - className="sc-csuQGl EOfLl" + className="sc-bRBYWo beDMbu" > <span aria-label="party emoji" role="img" > @@ -24,11 +24,11 @@ XEC to send to others </div>, <div - className="sc-jlyJG gVikkG" + className="sc-csuQGl jRtcTV" > 0 XEC </div>, @@ -41,11 +41,11 @@ "width": "100%", } } > <div - className="sc-cSHVUG ckubWs" + className="sc-chPdSV iDFVZe" style={ Object { "display": "none", } } @@ -61,11 +61,11 @@ > ecash:qzagy47mvh6qxkvcn3acjnz73rkhkc6y7ccxkrr6zd </span> </div> <svg - className="sc-jzJRlG dYsuyj" + className="sc-kAzzGY lanDwf" height={210} id="borderedQRCode" shapeRendering="crispEdges" viewBox="0 0 37 37" width={210} @@ -87,47 +87,47 @@ xlinkHref="logo_primary.png" y={16.385714285714286} /> </svg> <div - className="sc-kgoBCf iYHBff notranslate" + className="sc-kpOJdX eicPsf notranslate" > <input readOnly={true} spellCheck="false" type="text" value="ecash:qzagy47mvh6qxkvcn3acjnz73rkhkc6y7ccxkrr6zd" /> <span - className="sc-kAzzGY bGeWfk" + className="sc-kgoBCf bHwLKM" > ecash: </span> <span - className="sc-chPdSV jcbRDb" + className="sc-kGXeez jNbIFN" > qzagy47m </span> vh6qxkvcn3acjnz73rkhkc6y7c <span - className="sc-chPdSV jcbRDb" + className="sc-kGXeez jNbIFN" > cxkrr6zd </span> </div> </div>, <div - className="sc-eqIVtm dcINvv" + className="sc-caSCKo cwfYcU" > <div - className="sc-fAjcbJ jmyMQN" + className="sc-gisBJw EQkzY" onClick={[Function]} > XEC </div> <div - className="sc-fAjcbJ jmyMQN nonactiveBtn" + className="sc-gisBJw EQkzY nonactiveBtn" onClick={[Function]} > eToken </div> </div>, at Object.<anonymous> (/work/web/cashtab/src/components/Wallet/__tests__/Wallet.test.js:62:18) at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12 at new Promise (<anonymous>) at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41 at processTicksAndRejections (node:internal/process/task_queues:94:5)Error: expect(received).toMatchSnapshot() Snapshot name: `Wallet with BCH balances and tokens 1` - Snapshot - 9 + Received + 9 @@ -1,8 +1,8 @@ Array [ <div - className="sc-kgoBCf fswuXg" + className="sc-kpOJdX GoEyB" > You currently have 0 XEC <br /> Deposit some funds to use this feature @@ -25,11 +25,11 @@ "width": "auto", } } > <div - className="sc-jTzLTM fKDsMv" + className="sc-jzJRlG dEmeOv" > <div className="ant-row ant-form-item" style={Object {}} > @@ -94,11 +94,11 @@ </span> <span className="ant-input-group-addon" > <span - className="sc-gZMcBi kJTcOr" + className="sc-VigVT jPrdqZ" onClick={[Function]} > <span aria-label="qrcode" className="anticon anticon-qrcode sc-bxivhb ctLIog" @@ -135,11 +135,11 @@ </div> </div> </div> </div> <div - className="sc-jTzLTM fKDsMv" + className="sc-jzJRlG dEmeOv" > <div className="ant-row ant-form-item" style={Object {}} > @@ -280,11 +280,11 @@ </svg> </span> </span> </div> <span - className="sc-jzJRlG kQuQkS" + className="sc-kAzzGY jWcEkN" disabled={false} onClick={[Function]} style={ Object { "height": "60px", @@ -309,11 +309,11 @@ </div> </div> </div> </div> <div - className="sc-dxgOiQ kbCOBL" + className="sc-jKJlTe hccxef" > = $ NaN USD </div> @@ -323,25 +323,25 @@ "paddingTop": "12px", } } > <button - className="sc-dnqmqq fryMgW" + className="sc-gZMcBi eUcbgv" > Send </button> </div> </form> </div> </div>, <br />, <br />, <div - className="sc-ksYbfQ fUkkAB" + className="sc-frDJqD bxmZEQ" />, <div - className="ant-collapse ant-collapse-icon-position-left sc-gzVnrw fYpbQV" + className="ant-collapse ant-collapse-icon-position-left sc-dnqmqq jGALww" role={null} style={ Object { "marginBottom": "24px", } at Object.<anonymous> (/work/web/cashtab/src/components/Send/__tests__/Send.test.js:82:18) at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12 at new Promise (<anonymous>) at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41 at processTicksAndRejections (node:internal/process/task_queues:94:5) ====== CashTab Unit Tests: Without wallet defined ====== Error: expect(received).toMatchSnapshot() Snapshot name: `Without wallet defined 1` - Snapshot - 4 + Received + 4 @@ -1,22 +1,22 @@ Array [ <div - className="sc-kgoBCf fswuXg" + className="sc-kpOJdX GoEyB" > You need some XEC in your wallet to create tokens. </div>, <div - className="sc-kAzzGY kdOdTZ" + className="sc-kgoBCf kfjVlq" > 0 XEC </div>, <div - className="ant-collapse ant-collapse-icon-position-left sc-gqjmRU eryBsW" + className="ant-collapse ant-collapse-icon-position-left sc-jTzLTM fDvaHF" role={null} style={ Object { "marginBottom": "24px", } @@ -55,11 +55,11 @@ Create eToken </div> </div> </div>, <p - className="sc-kpOJdX bjUfnF" + className="sc-ckVGcZ eEJdrC" > You need at least 5.5 at Object.<anonymous> (/work/web/cashtab/src/components/Tokens/__tests__/Tokens.test.js:114:18) at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12 at new Promise (<anonymous>) at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41 at processTicksAndRejections (node:internal/process/task_queues:94:5)Error: expect(received).toMatchSnapshot() Snapshot name: `Without wallet defined 1` - Snapshot - 5 + Received + 5 @@ -1,16 +1,16 @@ Array [ <h2> Welcome to Cashtab! </h2>, <p - className="sc-jTzLTM iZNmqq" + className="sc-jzJRlG leTPdT" > Cashtab is an <a - className="sc-fjdhpX cfxeWn" + className="sc-cSHVUG dlQkwn" href="https://github.com/bitcoin-abc/bitcoin-abc" rel="noreferrer" target="_blank" > open source, @@ -22,20 +22,20 @@ <br /> <br /> Want to learn more? <a - className="sc-fjdhpX cfxeWn" + className="sc-cSHVUG dlQkwn" href="https://docs.cashtabapp.com/docs/" rel="noreferrer" target="_blank" > Check out the Cashtab documentation. </a> </p>, <button - className="sc-gZMcBi JUqLQ" + className="sc-VigVT RpRhe" onClick={[Function]} > <span aria-label="plus-square" className="anticon anticon-plus-square" @@ -59,11 +59,11 @@ </svg> </span> New Wallet </button>, <button - className="sc-gqjmRU eEPviq" + className="sc-jTzLTM bLkbAy" onClick={[Function]} > <span aria-label="import" className="anticon anticon-import" at Object.<anonymous> (/work/web/cashtab/src/components/Wallet/__tests__/Wallet.test.js:91:18) at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12 at new Promise (<anonymous>) at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41 at processTicksAndRejections (node:internal/process/task_queues:94:5)Error: expect(received).toMatchSnapshot() Snapshot name: `Without wallet defined 1` - Snapshot - 9 + Received + 9 @@ -1,8 +1,8 @@ Array [ <div - className="sc-kgoBCf fswuXg" + className="sc-kpOJdX GoEyB" > You currently have 0 XEC <br /> Deposit some funds to use this feature @@ -25,11 +25,11 @@ "width": "auto", } } > <div - className="sc-jTzLTM fKDsMv" + className="sc-jzJRlG dEmeOv" > <div className="ant-row ant-form-item" style={Object {}} > @@ -94,11 +94,11 @@ </span> <span className="ant-input-group-addon" > <span - className="sc-gZMcBi kJTcOr" + className="sc-VigVT jPrdqZ" onClick={[Function]} > <span aria-label="qrcode" className="anticon anticon-qrcode sc-bxivhb ctLIog" @@ -135,11 +135,11 @@ </div> </div> </div> </div> <div - className="sc-jTzLTM fKDsMv" + className="sc-jzJRlG dEmeOv" > <div className="ant-row ant-form-item" style={Object {}} > @@ -280,11 +280,11 @@ </svg> </span> </span> </div> <span - className="sc-jzJRlG kQuQkS" + className="sc-kAzzGY jWcEkN" disabled={false} onClick={[Function]} style={ Object { "height": "60px", @@ -309,11 +309,11 @@ </div> </div> </div> </div> <div - className="sc-dxgOiQ kbCOBL" + className="sc-jKJlTe hccxef" > = $ NaN USD </div> @@ -323,25 +323,25 @@ "paddingTop": "12px", } } > <button - className="sc-dnqmqq fryMgW" + className="sc-gZMcBi eUcbgv" > Send </button> </div> </form> </div> </div>, <br />, <br />, <div - className="sc-ksYbfQ fUkkAB" + className="sc-frDJqD bxmZEQ" />, <div - className="ant-collapse ant-collapse-icon-position-left sc-gzVnrw fYpbQV" + className="ant-collapse ant-collapse-icon-position-left sc-dnqmqq jGALww" role={null} style={ Object { "marginBottom": "24px", } at Object.<anonymous> (/work/web/cashtab/src/components/Send/__tests__/Send.test.js:114:18) at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12 at new Promise (<anonymous>) at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41 at processTicksAndRejections (node:internal/process/task_queues:94:5)
Each failure log is accessible here:
CashTab Unit Tests: Configure without a wallet
CashTab Unit Tests: Configure with a wallet
CashTab Unit Tests: Wallet with BCH balances and tokens and state field
CashTab Unit Tests: Wallet without BCH balance
CashTab Unit Tests: Wallet with BCH balances
CashTab Unit Tests: Wallet with BCH balances and tokens
CashTab Unit Tests: Without wallet defined
Thank you for this high quality diff + useful feature add. User choice and maximum possible security are both important dev priorities. So, I'd like to get this in.
It's a big diff to review and it does add some complications to the codebase. I'm not able to get this to work on my mobile device (Pixel 5) -- is Platform Authenticator not in android? What are some example devices you used in testing?
Also, please note the unit test failures. You can run npm test locally to see why they are breaking, and patch accordingly. It may also be appropriate to add some new unit tests for any introduced functions.
- Tested on Samsung S20 FE, Samsung J7 Prime, Iphone SE, Ipad, Surface 5, Surface Pro 5, Desktop with Windows 10, Laptop with Windows 11
- I did notice the test failures and working the address that.
- About the New unit tests for this feature, should it be included in this diff? should it be another diff after this?
From @emack
"D10443 biometric tests on mobile, I'm getting error on 1st time load on both android and iOS mobiles. Both mobiles have biometrics enabled. Unpatched master branch loads fine on these two devices."
"Tested on:
- Samsung Galaxy S21 - Android 11 - Chrome 95.0.4638.74
- iPhone SE - iOS 14.8.1 - Safari 14.8.1"
Can verify the PublicKeyCredential error is now fixed.
However on both android and iOS devices the feature is showing up as not supported
Devices used:
- Samsung Galaxy S21 - Android 11 - Chrome 95.0.4638.74
- iPhone SE - iOS 14.8.1 - Safari 14.8.1"
I notice that you are accessing the app through a LAN IP, make sure that it support HTTPS, (or you can accessing it through localhost,). Web Authentication requires HTTPS.
Alternatively, you can build and deploy it to Netlify or Heroku. Here is a link to my Netlify deployment cashtab.netlify.app
Yup you're right, accessing it via the local LAN confused the authenticator. Deploying to netlify got it going. Great UX!
@bytesofman - tested ok across iOS and Android via netlify
OK looks good in testing.
I'm ready to approve and land this feature -- @hungsam could you please contact me on Telegram (@bytesofman) to coordinate? Would like you to be available to help monitor the deployment, thanks.
web/cashtab/src/components/Send/__tests__/__snapshots__/Send.test.js.snap | ||
---|---|---|
1 ↗ | (On Diff #31121) | Please run npm test locally to add the @generated at the end of this file, which will hide it from review This is a best practice for all Cashtab dev, thanks! |
Failed tests logs:
====== CashTab Unit Tests: Wallet without BCH balance ====== Error: expect(received).toMatchSnapshot() Snapshot name: `Wallet without BCH balance 1` - Snapshot - 5 + Received + 5 @@ -1,8 +1,8 @@ Array [ <div - className="sc-hzDkRC cnnkkE" + className="sc-fBuWsC dWuyYQ" > <span aria-label="party emoji" role="img" > @@ -24,11 +24,11 @@ XEC to send to others </div>, <div - className="sc-Rmtcm doZmKW" + className="sc-hzDkRC lmPOKb" > 0 XEC </div>, @@ -114,20 +114,20 @@ cxkrr6zd </span> </div> </div>, <div - className="sc-gisBJw bgeSVQ" + className="sc-cHGsZl hAuusT" > <div - className="sc-kjoXOD bocqe" + className="sc-TOsTZ gBqYyX" onClick={[Function]} > XEC </div> <div - className="sc-kjoXOD bocqe nonactiveBtn" + className="sc-TOsTZ gBqYyX nonactiveBtn" onClick={[Function]} > eToken </div> </div>, at Object.<anonymous> (/work/web/cashtab/src/components/Wallet/__tests__/Wallet.test.js:36:18) at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12 at new Promise (<anonymous>) at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41 at processTicksAndRejections (node:internal/process/task_queues:94:5)Error: expect(received).toMatchSnapshot() Snapshot name: `Wallet without BCH balance 1` - Snapshot - 1 + Received + 1 @@ -383,11 +383,11 @@ </div> </form> </div> </div>, <div - className="sc-kvZOFW crFufP" + className="sc-jbKcbu dudaer" > Signatures </div>, <div className="ant-collapse ant-collapse-icon-position-left sc-fjdhpX ddFLEP" at Object.<anonymous> (/work/web/cashtab/src/components/Send/__tests__/Send.test.js:54:18) at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12 at new Promise (<anonymous>) at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41 at processTicksAndRejections (node:internal/process/task_queues:94:5) ====== CashTab Unit Tests: Wallet with BCH balances ====== Error: expect(received).toMatchSnapshot() Snapshot name: `Wallet with BCH balances 1` - Snapshot - 5 + Received + 5 @@ -1,8 +1,8 @@ Array [ <div - className="sc-hzDkRC cnnkkE" + className="sc-fBuWsC dWuyYQ" > <span aria-label="party emoji" role="img" > @@ -24,11 +24,11 @@ XEC to send to others </div>, <div - className="sc-Rmtcm doZmKW" + className="sc-hzDkRC lmPOKb" > 0 XEC </div>, @@ -114,20 +114,20 @@ cxkrr6zd </span> </div> </div>, <div - className="sc-gisBJw bgeSVQ" + className="sc-cHGsZl hAuusT" > <div - className="sc-kjoXOD bocqe" + className="sc-TOsTZ gBqYyX" onClick={[Function]} > XEC </div> <div - className="sc-kjoXOD bocqe nonactiveBtn" + className="sc-TOsTZ gBqYyX nonactiveBtn" onClick={[Function]} > eToken </div> </div>, at Object.<anonymous> (/work/web/cashtab/src/components/Wallet/__tests__/Wallet.test.js:49:18) at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12 at new Promise (<anonymous>) at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41 at processTicksAndRejections (node:internal/process/task_queues:94:5)Error: expect(received).toMatchSnapshot() Snapshot name: `Wallet with BCH balances 1` - Snapshot - 1 + Received + 1 @@ -383,11 +383,11 @@ </div> </form> </div> </div>, <div - className="sc-kvZOFW crFufP" + className="sc-jbKcbu dudaer" > Signatures </div>, <div className="ant-collapse ant-collapse-icon-position-left sc-fjdhpX ddFLEP" at Object.<anonymous> (/work/web/cashtab/src/components/Send/__tests__/Send.test.js:68:18) at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12 at new Promise (<anonymous>) at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41 at processTicksAndRejections (node:internal/process/task_queues:94:5) ====== CashTab Unit Tests: Wallet with BCH balances and tokens ====== Error: expect(received).toMatchSnapshot() Snapshot name: `Wallet with BCH balances and tokens 1` - Snapshot - 5 + Received + 5 @@ -1,8 +1,8 @@ Array [ <div - className="sc-hzDkRC cnnkkE" + className="sc-fBuWsC dWuyYQ" > <span aria-label="party emoji" role="img" > @@ -24,11 +24,11 @@ XEC to send to others </div>, <div - className="sc-Rmtcm doZmKW" + className="sc-hzDkRC lmPOKb" > 0 XEC </div>, @@ -114,20 +114,20 @@ cxkrr6zd </span> </div> </div>, <div - className="sc-gisBJw bgeSVQ" + className="sc-cHGsZl hAuusT" > <div - className="sc-kjoXOD bocqe" + className="sc-TOsTZ gBqYyX" onClick={[Function]} > XEC </div> <div - className="sc-kjoXOD bocqe nonactiveBtn" + className="sc-TOsTZ gBqYyX nonactiveBtn" onClick={[Function]} > eToken </div> </div>, at Object.<anonymous> (/work/web/cashtab/src/components/Wallet/__tests__/Wallet.test.js:62:18) at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12 at new Promise (<anonymous>) at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41 at processTicksAndRejections (node:internal/process/task_queues:94:5)Error: expect(received).toMatchSnapshot() Snapshot name: `Wallet with BCH balances and tokens 1` - Snapshot - 1 + Received + 1 @@ -383,11 +383,11 @@ </div> </form> </div> </div>, <div - className="sc-kvZOFW crFufP" + className="sc-jbKcbu dudaer" > Signatures </div>, <div className="ant-collapse ant-collapse-icon-position-left sc-fjdhpX ddFLEP" at Object.<anonymous> (/work/web/cashtab/src/components/Send/__tests__/Send.test.js:82:18) at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12 at new Promise (<anonymous>) at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41 at processTicksAndRejections (node:internal/process/task_queues:94:5) ====== CashTab Unit Tests: Wallet with BCH balances and tokens and state field ====== Error: expect(received).toMatchSnapshot() Snapshot name: `Wallet with BCH balances and tokens and state field 1` - Snapshot - 5 + Received + 5 @@ -1,15 +1,15 @@ Array [ <div - className="sc-Rmtcm doZmKW" + className="sc-hzDkRC lmPOKb" > 0.06 XEC </div>, <div - className="sc-bRBYWo itMbWO" + className="sc-jhAzac fkirzc" > $ NaN USD @@ -96,20 +96,20 @@ cxkrr6zd </span> </div> </div>, <div - className="sc-gisBJw bgeSVQ" + className="sc-cHGsZl hAuusT" > <div - className="sc-kjoXOD bocqe" + className="sc-TOsTZ gBqYyX" onClick={[Function]} > XEC </div> <div - className="sc-kjoXOD bocqe nonactiveBtn" + className="sc-TOsTZ gBqYyX nonactiveBtn" onClick={[Function]} > eToken </div> </div>, at Object.<anonymous> (/work/web/cashtab/src/components/Wallet/__tests__/Wallet.test.js:75:18) at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12 at new Promise (<anonymous>) at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41 at processTicksAndRejections (node:internal/process/task_queues:94:5)Error: expect(received).toMatchSnapshot() Snapshot name: `Wallet with BCH balances and tokens and state field 1` - Snapshot - 1 + Received + 1 @@ -391,11 +391,11 @@ </div> </form> </div> </div>, <div - className="sc-kvZOFW crFufP" + className="sc-jbKcbu dudaer" > Signatures </div>, <div className="ant-collapse ant-collapse-icon-position-left sc-fjdhpX ddFLEP" at Object.<anonymous> (/work/web/cashtab/src/components/Send/__tests__/Send.test.js:96:18) at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12 at new Promise (<anonymous>) at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41 at processTicksAndRejections (node:internal/process/task_queues:94:5) ====== CashTab Unit Tests: Without wallet defined ====== Error: expect(received).toMatchSnapshot() Snapshot name: `Without wallet defined 1` - Snapshot - 1 + Received + 1 @@ -383,11 +383,11 @@ </div> </form> </div> </div>, <div - className="sc-kvZOFW crFufP" + className="sc-jbKcbu dudaer" > Signatures </div>, <div className="ant-collapse ant-collapse-icon-position-left sc-fjdhpX ddFLEP" at Object.<anonymous> (/work/web/cashtab/src/components/Send/__tests__/Send.test.js:114:18) at Object.asyncJestTest (/work/web/cashtab/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:45:12 at new Promise (<anonymous>) at mapper (/work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:28:19) at /work/web/cashtab/node_modules/jest-jasmine2/build/queueRunner.js:75:41 at processTicksAndRejections (node:internal/process/task_queues:94:5)
Each failure log is accessible here:
CashTab Unit Tests: Wallet without BCH balance
CashTab Unit Tests: Wallet with BCH balances
CashTab Unit Tests: Wallet with BCH balances and tokens
CashTab Unit Tests: Wallet with BCH balances and tokens and state field
CashTab Unit Tests: Without wallet defined