From e26cd4358304cab099b12c5fe458ad0bd9a0598e Mon Sep 17 00:00:00 2001 From: Dan Ziv Date: Tue, 30 Nov 2021 23:44:41 +0200 Subject: [PATCH 001/211] chore: init project --- .env | 2 + .env.development | 0 .env.production | 0 .env.test | 0 .eslintignore | 4 + .eslintrc.json | 54 + .github/ISSUE_TEMPLATE/bug_report.md | 33 + .github/ISSUE_TEMPLATE/feature_request.md | 19 + .github/PULL_REQUEST_TEMPLATE.md | 12 + .github/workflows/pull_request.yml | 38 + .github/workflows/push.yml | 46 + .github/workflows/tag.yml | 46 + .gitignore | 24 + .prettierignore | 2 + .prettierrc.json | 20 + CONTRIBUTING.md | 23 + README.md | 97 + generate-react-cli.json | 15 + package.json | 76 + public/favicon.svg | 8 + public/index.html | 14 + public/robots.txt | 3 + scripts/npm-publish.bash | 4 + src/App.js | 14 + src/App.module.scss | 9 + src/assets/fonts/Inter/Inter-Black.ttf | Bin 0 -> 294396 bytes src/assets/fonts/Inter/Inter-Bold.ttf | Bin 0 -> 293448 bytes src/assets/fonts/Inter/Inter-ExtraBold.ttf | Bin 0 -> 294072 bytes src/assets/fonts/Inter/Inter-ExtraLight.ttf | Bin 0 -> 288400 bytes src/assets/fonts/Inter/Inter-Light.ttf | Bin 0 -> 288088 bytes src/assets/fonts/Inter/Inter-Medium.ttf | Bin 0 -> 292140 bytes src/assets/fonts/Inter/Inter-Regular.ttf | Bin 0 -> 287928 bytes src/assets/fonts/Inter/Inter-SemiBold.ttf | Bin 0 -> 293028 bytes src/assets/fonts/Inter/Inter-Thin.ttf | Bin 0 -> 288568 bytes src/assets/fonts/Inter/OFL.txt | 93 + src/assets/img/argent.png | Bin 0 -> 5065 bytes src/assets/img/light-accent.png | Bin 0 -> 1318618 bytes src/assets/img/starknet.png | Bin 0 -> 4005 bytes src/assets/img/stars.png | Bin 0 -> 93741 bytes src/assets/svg/etherscan.svg | 3 + src/assets/svg/icons/back.svg | 3 + src/assets/svg/icons/collapse.svg | 3 + src/assets/svg/icons/copy.svg | 3 + src/assets/svg/icons/forward.svg | 3 + src/assets/svg/icons/redirect.svg | 4 + src/assets/svg/icons/search.svg | 3 + src/assets/svg/icons/swap.svg | 3 + src/assets/svg/starkware.svg | 25 + src/assets/svg/tokens/dai.svg | 14 + src/assets/svg/tokens/eth.svg | 22 + src/assets/svg/tokens/hex.svg | 1 + src/assets/svg/tokens/starknet.svg | 8 + .../svg/wallets/argent/argent-button.svg | 8 + .../svg/wallets/metamask/metamask-button.svg | 9 + .../svg/wallets/metamask/metamask-login.svg | 9 + src/components/Containers/Footer/Footer.js | 16 + .../Containers/Footer/Footer.module.scss | 18 + .../Containers/Footer/Footer.strings.js | 1 + .../Containers/Header/Header.constants.js | 1 + src/components/Containers/Header/Header.js | 30 + .../Containers/Header/Header.module.scss | 29 + .../Containers/Header/Header.strings.js | 4 + src/components/Containers/Main/Main.js | 24 + .../Containers/Main/Main.module.scss | 5 + src/components/Containers/index.js | 3 + .../Features/Account/Account.constants.js | 13 + src/components/Features/Account/Account.js | 33 + .../Features/Account/Account.module.scss | 2 + .../Features/Account/Account.strings.js | 1 + .../AccountAddress.constants.js | 1 + .../Account/AccountAddress/AccountAddress.js | 36 + .../AccountAddress/AccountAddress.module.scss | 41 + .../AccountAddress/AccountAddress.strings.js | 1 + .../Features/Account/LinkButton/LinkButton.js | 24 + .../Account/LinkButton/LinkButton.module.scss | 36 + .../Account/LogoutButton/LogoutButton.js | 31 + .../LogoutButton/LogoutButton.strings.js | 1 + .../Account/TransferLog/TransferLog.js | 33 + .../TransferLog/TransferLog.module.scss | 39 + .../TransferLogContainer.js | 53 + .../TransferLogContainer.module.scss | 54 + .../TransferLogContainer.strings.js | 4 + src/components/Features/Account/index.js | 4 + .../Features/Bridge/Bridge.hooks.js | 27 + src/components/Features/Bridge/Bridge.js | 25 + .../Features/Bridge/Bridge.module.scss | 16 + .../Features/Bridge/Bridge.selectors.js | 3 + .../Features/Bridge/Bridge.slice.js | 21 + src/components/Features/Login/Login.js | 135 + .../Features/Login/Login.module.scss | 76 + .../Features/Login/Login.strings.js | 8 + .../ModalProvider/ModalProvider.hooks.js | 53 + .../Features/ModalProvider/ModalProvider.js | 25 + .../ModalProvider/ModalProvider.selectors.js | 1 + .../ModalProvider/ModalProvider.slice.js | 26 + .../WalletConnectionModal.js | 28 + .../WalletConnectionModal.module.scss | 5 + .../WalletConnectionModal.strings.js | 4 + .../Features/ModalProvider/index.js | 1 + .../SelectToken/SearchToken/SearchToken.js | 37 + .../SearchToken/SearchToken.module.scss | 15 + .../SearchToken/SearchToken.strings.js | 1 + .../Features/SelectToken/SelectToken.js | 64 + .../SelectToken/SelectToken.module.scss | 35 + .../SelectToken/SelectToken.strings.js | 1 + .../SelectTokenList/SelectTokenList.js | 28 + .../SelectTokenList.module.scss | 4 + .../SelectTokenRow/SelectTokenRow.js | 36 + .../SelectTokenRow/SelectTokenRow.module.scss | 79 + src/components/Features/SelectToken/index.js | 3 + .../Features/Transfer/MaxButton/MaxButton.js | 17 + .../Transfer/MaxButton/MaxButton.module.scss | 13 + .../Transfer/MaxButton/MaxButton.strings.js | 1 + .../Transfer/NetworkMenu/NetworkMenu.js | 27 + .../NetworkMenu/NetworkMenu.module.scss | 19 + .../Transfer/NetworkSwap/NetworkSwap.js | 31 + .../NetworkSwap/NetworkSwap.module.scss | 27 + .../Transfer/NetworkTitle/NetworkTitle.js | 19 + .../NetworkTitle/NetworkTitle.module.scss | 12 + .../Transfer/TokenBalance/TokenBalance.js | 32 + .../TokenBalance/TokenBalance.module.scss | 16 + .../TokenBalance/TokenBalance.strings.js | 1 + .../Transfer/TokenInput/TokenInput.js | 44 + .../TokenInput/TokenInput.module.scss | 23 + .../Transfer/TokenInput/TokenInput.strings.js | 1 + .../Transfer/TokenSelector/TokenSelector.js | 34 + .../TokenSelector/TokenSelector.module.scss | 25 + .../Features/Transfer/Transfer.hooks.js | 84 + src/components/Features/Transfer/Transfer.js | 94 + .../Features/Transfer/Transfer.module.scss | 26 + .../Features/Transfer/Transfer.selectors.js | 39 + .../Features/Transfer/Transfer.slice.js | 38 + .../Features/Transfer/Transfer.strings.js | 1 + .../Transfer/TransferButton/TransferButton.js | 32 + .../TransferButton/TransferButton.strings.js | 1 + .../TransferMenuTab/TransferMenuTab.js | 22 + .../TransferMenuTab.module.scss | 26 + src/components/Features/Transfer/index.js | 9 + .../Features/Wallet/Wallet.enums.js | 6 + .../Features/Wallet/Wallet.hooks.js | 7 + .../WalletButton/WalletButton.constants.js | 2 + .../Wallet/WalletButton/WalletButton.js | 32 + .../WalletButton/WalletButton.strings.js | 3 + .../Wallet/WalletLogin/WalletLogin.js | 32 + .../WalletLogin/WalletLogin.module.scss | 66 + .../Features/Wallet/Wallets.context.js | 15 + .../Features/Wallet/Wallets.reducer.js | 55 + .../Features/Wallet/WalletsProvider.js | 179 + src/components/Features/index.js | 6 + src/components/UI/BackButton/BackButton.js | 18 + .../UI/BackButton/BackButton.module.scss | 30 + .../UI/BackButton/BackButton.strings.js | 1 + src/components/UI/Badge/Badge.js | 12 + src/components/UI/Badge/Badge.module.scss | 15 + src/components/UI/Button/Button.js | 64 + src/components/UI/Button/Button.module.scss | 27 + src/components/UI/Circle/Circle.js | 27 + src/components/UI/Circle/Circle.module.scss | 10 + .../UI/CryptoLogo/CryptoLogo.constants.js | 1 + .../UI/CryptoLogo/CryptoLogo.enums.js | 5 + src/components/UI/CryptoLogo/CryptoLogo.js | 26 + .../UI/CryptoLogo/CryptoLogo.module.scss | 9 + src/components/UI/DynamicIcon/DynamicIcon.js | 33 + src/components/UI/Icon/Icon.js | 28 + src/components/UI/Icon/Icon.module.scss | 8 + src/components/UI/Input/Input.Module.scss | 46 + src/components/UI/Input/Input.js | 21 + src/components/UI/KeyFrames/KeyFrames.js | 33 + src/components/UI/Loading/Loading.enums.js | 6 + src/components/UI/Loading/Loading.js | 47 + src/components/UI/Loading/Loading.scss | 22 + src/components/UI/Menu/Menu.js | 22 + src/components/UI/Menu/Menu.module.scss | 9 + src/components/UI/MenuTitle/MenuTitle.js | 17 + .../UI/MenuTitle/MenuTitle.module.scss | 9 + .../UI/Modal/Modal/Modal.constants.js | 21 + src/components/UI/Modal/Modal/Modal.js | 28 + .../UI/Modal/Modal/Modal.module.scss | 30 + .../UI/Modal/ModalBody/ModalBody.js | 15 + .../UI/Modal/ModalBody/ModalBody.module.scss | 17 + .../UI/Modal/ModalFooter/ModalFooter.js | 7 + .../Modal/ModalFooter/ModalFooter.module.scss | 2 + .../UI/Modal/ModalHeader/ModalHeader.js | 15 + .../Modal/ModalHeader/ModalHeader.module.scss | 9 + .../UI/Modal/ModalTitle/ModalTitle.js | 12 + .../Modal/ModalTitle/ModalTitle.module.scss | 9 + src/components/UI/index.js | 17 + src/config/supported-chains.json | 1 + src/config/tokens/ethereum.goerli.json | 12 + src/config/tokens/ethereum.json | 12 + src/config/tokens/starknet.goerli.json | 1 + src/config/tokens/starknet.json | 1 + src/config/wallets.json | 19 + src/contracts/ERC20/ERC20.js | 6 + src/contracts/ERC20/ERC20.json | 13771 +++++++ .../StarknetERC20Bridge.js | 6 + .../StarknetERC20Bridge.json | 31587 ++++++++++++++++ .../StarknetEthBridge/StarknetEthBridge.js | 6 + .../StarknetEthBridge/StarknetEthBridge.json | 26116 +++++++++++++ .../StarknetMessaging/StarknetMessaging.js | 6 + .../StarknetMessaging/StarknetMessaging.json | 7911 ++++ src/contracts/index.js | 4 + src/enums/ActionType.js | 4 + src/enums/ChainType.js | 31 + src/enums/MenuType.js | 5 + src/enums/NetworkType.js | 10 + src/enums/WalletType.js | 4 + src/enums/index.js | 5 + src/hooks/index.js | 6 + src/hooks/useAnimation.js | 16 + src/hooks/useColors.js | 3 + src/hooks/useIsLoading.js | 19 + src/hooks/useVars.js | 3 + src/hooks/useWalletHandlerProvider.js | 33 + src/hooks/useWindowSize.js | 21 + src/index.js | 32 + src/index.scss | 63 + src/services/index.js | 3 + src/services/logger.js | 20 + src/services/storage-manager.js | 26 + .../wallet-handlers/argent-handler.js | 15 + src/services/wallet-handlers/index.js | 2 + .../wallet-handlers/metamask-handler.js | 16 + src/store/store.js | 13 + src/styles/colors.module.scss | 25 + src/styles/fonts.module.scss | 5 + src/styles/variables.module.scss | 7 + src/utils/browser.js | 3 + src/utils/index.js | 3 + src/utils/string.js | 24 + src/utils/wallet.js | 10 + src/web3.js | 10 + yarn.lock | 17813 +++++++++ 233 files changed, 101626 insertions(+) create mode 100644 .env create mode 100644 .env.development create mode 100644 .env.production create mode 100644 .env.test create mode 100644 .eslintignore create mode 100644 .eslintrc.json create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/workflows/pull_request.yml create mode 100644 .github/workflows/push.yml create mode 100644 .github/workflows/tag.yml create mode 100644 .gitignore create mode 100644 .prettierignore create mode 100644 .prettierrc.json create mode 100644 CONTRIBUTING.md create mode 100644 generate-react-cli.json create mode 100644 package.json create mode 100644 public/favicon.svg create mode 100644 public/index.html create mode 100644 public/robots.txt create mode 100644 scripts/npm-publish.bash create mode 100644 src/App.js create mode 100644 src/App.module.scss create mode 100644 src/assets/fonts/Inter/Inter-Black.ttf create mode 100644 src/assets/fonts/Inter/Inter-Bold.ttf create mode 100644 src/assets/fonts/Inter/Inter-ExtraBold.ttf create mode 100644 src/assets/fonts/Inter/Inter-ExtraLight.ttf create mode 100644 src/assets/fonts/Inter/Inter-Light.ttf create mode 100644 src/assets/fonts/Inter/Inter-Medium.ttf create mode 100644 src/assets/fonts/Inter/Inter-Regular.ttf create mode 100644 src/assets/fonts/Inter/Inter-SemiBold.ttf create mode 100644 src/assets/fonts/Inter/Inter-Thin.ttf create mode 100644 src/assets/fonts/Inter/OFL.txt create mode 100644 src/assets/img/argent.png create mode 100644 src/assets/img/light-accent.png create mode 100644 src/assets/img/starknet.png create mode 100644 src/assets/img/stars.png create mode 100644 src/assets/svg/etherscan.svg create mode 100644 src/assets/svg/icons/back.svg create mode 100644 src/assets/svg/icons/collapse.svg create mode 100644 src/assets/svg/icons/copy.svg create mode 100644 src/assets/svg/icons/forward.svg create mode 100644 src/assets/svg/icons/redirect.svg create mode 100644 src/assets/svg/icons/search.svg create mode 100644 src/assets/svg/icons/swap.svg create mode 100644 src/assets/svg/starkware.svg create mode 100644 src/assets/svg/tokens/dai.svg create mode 100644 src/assets/svg/tokens/eth.svg create mode 100644 src/assets/svg/tokens/hex.svg create mode 100644 src/assets/svg/tokens/starknet.svg create mode 100644 src/assets/svg/wallets/argent/argent-button.svg create mode 100644 src/assets/svg/wallets/metamask/metamask-button.svg create mode 100644 src/assets/svg/wallets/metamask/metamask-login.svg create mode 100644 src/components/Containers/Footer/Footer.js create mode 100644 src/components/Containers/Footer/Footer.module.scss create mode 100644 src/components/Containers/Footer/Footer.strings.js create mode 100644 src/components/Containers/Header/Header.constants.js create mode 100644 src/components/Containers/Header/Header.js create mode 100644 src/components/Containers/Header/Header.module.scss create mode 100644 src/components/Containers/Header/Header.strings.js create mode 100644 src/components/Containers/Main/Main.js create mode 100644 src/components/Containers/Main/Main.module.scss create mode 100644 src/components/Containers/index.js create mode 100644 src/components/Features/Account/Account.constants.js create mode 100644 src/components/Features/Account/Account.js create mode 100644 src/components/Features/Account/Account.module.scss create mode 100644 src/components/Features/Account/Account.strings.js create mode 100644 src/components/Features/Account/AccountAddress/AccountAddress.constants.js create mode 100644 src/components/Features/Account/AccountAddress/AccountAddress.js create mode 100644 src/components/Features/Account/AccountAddress/AccountAddress.module.scss create mode 100644 src/components/Features/Account/AccountAddress/AccountAddress.strings.js create mode 100644 src/components/Features/Account/LinkButton/LinkButton.js create mode 100644 src/components/Features/Account/LinkButton/LinkButton.module.scss create mode 100644 src/components/Features/Account/LogoutButton/LogoutButton.js create mode 100644 src/components/Features/Account/LogoutButton/LogoutButton.strings.js create mode 100644 src/components/Features/Account/TransferLog/TransferLog.js create mode 100644 src/components/Features/Account/TransferLog/TransferLog.module.scss create mode 100644 src/components/Features/Account/TransferLogContainer/TransferLogContainer.js create mode 100644 src/components/Features/Account/TransferLogContainer/TransferLogContainer.module.scss create mode 100644 src/components/Features/Account/TransferLogContainer/TransferLogContainer.strings.js create mode 100644 src/components/Features/Account/index.js create mode 100644 src/components/Features/Bridge/Bridge.hooks.js create mode 100644 src/components/Features/Bridge/Bridge.js create mode 100644 src/components/Features/Bridge/Bridge.module.scss create mode 100644 src/components/Features/Bridge/Bridge.selectors.js create mode 100644 src/components/Features/Bridge/Bridge.slice.js create mode 100644 src/components/Features/Login/Login.js create mode 100644 src/components/Features/Login/Login.module.scss create mode 100644 src/components/Features/Login/Login.strings.js create mode 100644 src/components/Features/ModalProvider/ModalProvider.hooks.js create mode 100644 src/components/Features/ModalProvider/ModalProvider.js create mode 100644 src/components/Features/ModalProvider/ModalProvider.selectors.js create mode 100644 src/components/Features/ModalProvider/ModalProvider.slice.js create mode 100644 src/components/Features/ModalProvider/WalletConnectionModal/WalletConnectionModal.js create mode 100644 src/components/Features/ModalProvider/WalletConnectionModal/WalletConnectionModal.module.scss create mode 100644 src/components/Features/ModalProvider/WalletConnectionModal/WalletConnectionModal.strings.js create mode 100644 src/components/Features/ModalProvider/index.js create mode 100644 src/components/Features/SelectToken/SearchToken/SearchToken.js create mode 100644 src/components/Features/SelectToken/SearchToken/SearchToken.module.scss create mode 100644 src/components/Features/SelectToken/SearchToken/SearchToken.strings.js create mode 100644 src/components/Features/SelectToken/SelectToken.js create mode 100644 src/components/Features/SelectToken/SelectToken.module.scss create mode 100644 src/components/Features/SelectToken/SelectToken.strings.js create mode 100644 src/components/Features/SelectToken/SelectTokenList/SelectTokenList.js create mode 100644 src/components/Features/SelectToken/SelectTokenList/SelectTokenList.module.scss create mode 100644 src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js create mode 100644 src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.module.scss create mode 100644 src/components/Features/SelectToken/index.js create mode 100644 src/components/Features/Transfer/MaxButton/MaxButton.js create mode 100644 src/components/Features/Transfer/MaxButton/MaxButton.module.scss create mode 100644 src/components/Features/Transfer/MaxButton/MaxButton.strings.js create mode 100644 src/components/Features/Transfer/NetworkMenu/NetworkMenu.js create mode 100644 src/components/Features/Transfer/NetworkMenu/NetworkMenu.module.scss create mode 100644 src/components/Features/Transfer/NetworkSwap/NetworkSwap.js create mode 100644 src/components/Features/Transfer/NetworkSwap/NetworkSwap.module.scss create mode 100644 src/components/Features/Transfer/NetworkTitle/NetworkTitle.js create mode 100644 src/components/Features/Transfer/NetworkTitle/NetworkTitle.module.scss create mode 100644 src/components/Features/Transfer/TokenBalance/TokenBalance.js create mode 100644 src/components/Features/Transfer/TokenBalance/TokenBalance.module.scss create mode 100644 src/components/Features/Transfer/TokenBalance/TokenBalance.strings.js create mode 100644 src/components/Features/Transfer/TokenInput/TokenInput.js create mode 100644 src/components/Features/Transfer/TokenInput/TokenInput.module.scss create mode 100644 src/components/Features/Transfer/TokenInput/TokenInput.strings.js create mode 100644 src/components/Features/Transfer/TokenSelector/TokenSelector.js create mode 100644 src/components/Features/Transfer/TokenSelector/TokenSelector.module.scss create mode 100644 src/components/Features/Transfer/Transfer.hooks.js create mode 100644 src/components/Features/Transfer/Transfer.js create mode 100644 src/components/Features/Transfer/Transfer.module.scss create mode 100644 src/components/Features/Transfer/Transfer.selectors.js create mode 100644 src/components/Features/Transfer/Transfer.slice.js create mode 100644 src/components/Features/Transfer/Transfer.strings.js create mode 100644 src/components/Features/Transfer/TransferButton/TransferButton.js create mode 100644 src/components/Features/Transfer/TransferButton/TransferButton.strings.js create mode 100644 src/components/Features/Transfer/TransferMenuTab/TransferMenuTab.js create mode 100644 src/components/Features/Transfer/TransferMenuTab/TransferMenuTab.module.scss create mode 100644 src/components/Features/Transfer/index.js create mode 100644 src/components/Features/Wallet/Wallet.enums.js create mode 100644 src/components/Features/Wallet/Wallet.hooks.js create mode 100644 src/components/Features/Wallet/WalletButton/WalletButton.constants.js create mode 100644 src/components/Features/Wallet/WalletButton/WalletButton.js create mode 100644 src/components/Features/Wallet/WalletButton/WalletButton.strings.js create mode 100644 src/components/Features/Wallet/WalletLogin/WalletLogin.js create mode 100644 src/components/Features/Wallet/WalletLogin/WalletLogin.module.scss create mode 100644 src/components/Features/Wallet/Wallets.context.js create mode 100644 src/components/Features/Wallet/Wallets.reducer.js create mode 100644 src/components/Features/Wallet/WalletsProvider.js create mode 100644 src/components/Features/index.js create mode 100644 src/components/UI/BackButton/BackButton.js create mode 100644 src/components/UI/BackButton/BackButton.module.scss create mode 100644 src/components/UI/BackButton/BackButton.strings.js create mode 100644 src/components/UI/Badge/Badge.js create mode 100644 src/components/UI/Badge/Badge.module.scss create mode 100644 src/components/UI/Button/Button.js create mode 100644 src/components/UI/Button/Button.module.scss create mode 100644 src/components/UI/Circle/Circle.js create mode 100644 src/components/UI/Circle/Circle.module.scss create mode 100644 src/components/UI/CryptoLogo/CryptoLogo.constants.js create mode 100644 src/components/UI/CryptoLogo/CryptoLogo.enums.js create mode 100644 src/components/UI/CryptoLogo/CryptoLogo.js create mode 100644 src/components/UI/CryptoLogo/CryptoLogo.module.scss create mode 100644 src/components/UI/DynamicIcon/DynamicIcon.js create mode 100644 src/components/UI/Icon/Icon.js create mode 100644 src/components/UI/Icon/Icon.module.scss create mode 100644 src/components/UI/Input/Input.Module.scss create mode 100644 src/components/UI/Input/Input.js create mode 100644 src/components/UI/KeyFrames/KeyFrames.js create mode 100644 src/components/UI/Loading/Loading.enums.js create mode 100644 src/components/UI/Loading/Loading.js create mode 100644 src/components/UI/Loading/Loading.scss create mode 100644 src/components/UI/Menu/Menu.js create mode 100644 src/components/UI/Menu/Menu.module.scss create mode 100644 src/components/UI/MenuTitle/MenuTitle.js create mode 100644 src/components/UI/MenuTitle/MenuTitle.module.scss create mode 100644 src/components/UI/Modal/Modal/Modal.constants.js create mode 100644 src/components/UI/Modal/Modal/Modal.js create mode 100644 src/components/UI/Modal/Modal/Modal.module.scss create mode 100644 src/components/UI/Modal/ModalBody/ModalBody.js create mode 100644 src/components/UI/Modal/ModalBody/ModalBody.module.scss create mode 100644 src/components/UI/Modal/ModalFooter/ModalFooter.js create mode 100644 src/components/UI/Modal/ModalFooter/ModalFooter.module.scss create mode 100644 src/components/UI/Modal/ModalHeader/ModalHeader.js create mode 100644 src/components/UI/Modal/ModalHeader/ModalHeader.module.scss create mode 100644 src/components/UI/Modal/ModalTitle/ModalTitle.js create mode 100644 src/components/UI/Modal/ModalTitle/ModalTitle.module.scss create mode 100644 src/components/UI/index.js create mode 100644 src/config/supported-chains.json create mode 100644 src/config/tokens/ethereum.goerli.json create mode 100644 src/config/tokens/ethereum.json create mode 100644 src/config/tokens/starknet.goerli.json create mode 100644 src/config/tokens/starknet.json create mode 100644 src/config/wallets.json create mode 100644 src/contracts/ERC20/ERC20.js create mode 100644 src/contracts/ERC20/ERC20.json create mode 100644 src/contracts/StarknetERC20Bridge/StarknetERC20Bridge.js create mode 100644 src/contracts/StarknetERC20Bridge/StarknetERC20Bridge.json create mode 100644 src/contracts/StarknetEthBridge/StarknetEthBridge.js create mode 100644 src/contracts/StarknetEthBridge/StarknetEthBridge.json create mode 100644 src/contracts/StarknetMessaging/StarknetMessaging.js create mode 100644 src/contracts/StarknetMessaging/StarknetMessaging.json create mode 100644 src/contracts/index.js create mode 100644 src/enums/ActionType.js create mode 100644 src/enums/ChainType.js create mode 100644 src/enums/MenuType.js create mode 100644 src/enums/NetworkType.js create mode 100644 src/enums/WalletType.js create mode 100644 src/enums/index.js create mode 100644 src/hooks/index.js create mode 100644 src/hooks/useAnimation.js create mode 100644 src/hooks/useColors.js create mode 100644 src/hooks/useIsLoading.js create mode 100644 src/hooks/useVars.js create mode 100644 src/hooks/useWalletHandlerProvider.js create mode 100644 src/hooks/useWindowSize.js create mode 100644 src/index.js create mode 100644 src/index.scss create mode 100644 src/services/index.js create mode 100644 src/services/logger.js create mode 100644 src/services/storage-manager.js create mode 100644 src/services/wallet-handlers/argent-handler.js create mode 100644 src/services/wallet-handlers/index.js create mode 100644 src/services/wallet-handlers/metamask-handler.js create mode 100644 src/store/store.js create mode 100644 src/styles/colors.module.scss create mode 100644 src/styles/fonts.module.scss create mode 100644 src/styles/variables.module.scss create mode 100644 src/utils/browser.js create mode 100644 src/utils/index.js create mode 100644 src/utils/string.js create mode 100644 src/utils/wallet.js create mode 100644 src/web3.js create mode 100644 yarn.lock diff --git a/.env b/.env new file mode 100644 index 00000000..cf3017c8 --- /dev/null +++ b/.env @@ -0,0 +1,2 @@ +REACT_APP_NAME=$npm_package_name +REACT_APP_VERSION=$npm_package_version diff --git a/.env.development b/.env.development new file mode 100644 index 00000000..e69de29b diff --git a/.env.production b/.env.production new file mode 100644 index 00000000..e69de29b diff --git a/.env.test b/.env.test new file mode 100644 index 00000000..e69de29b diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..5ef44bff --- /dev/null +++ b/.eslintignore @@ -0,0 +1,4 @@ +build +node_modules +*.css +*.svg \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 00000000..90eace79 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,54 @@ +{ + "env": { + "browser": true, + "es2021": true + }, + "globals": { + "process": true, + "gtag": true + }, + "extends": ["eslint:recommended", "plugin:react/recommended", "prettier"], + "parserOptions": { + "ecmaFeatures": { + "jsx": true + }, + "ecmaVersion": 12, + "sourceType": "module" + }, + "plugins": ["react", "react-hooks", "prettier", "hooks"], + "rules": { + "prettier/prettier": "error", + "hooks/sort": [ + 2, + { + "groups": [ + "useReducer", + "useContext", + "useState", + "useRef", + "useDispatch", + "useCallback", + "useEffect" + ] + } + ], + "react/jsx-sort-props": [ + 2, + { + "callbacksLast": true, + "shorthandFirst": true, + "reservedFirst": true + } + ], + "prefer-destructuring": [ + "error", + { + "object": true, + "array": false + } + ], + "no-console": "warn", + "react-hooks/rules-of-hooks": "error", + "react-hooks/exhaustive-deps": "off" + } +} diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..57093a9a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,33 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: bug +assignees: dan-ziv +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: + +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** + +- OS: [e.g. iOS] +- Browser [e.g. chrome, safari] +- Version [e.g. 22] + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..b61efaf0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,19 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: enhancement +assignees: dan-ziv +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000..4ff6c1e2 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,12 @@ +### Description of the Changes + +Please add a detailed description of the change, whether it's an enhancement or a bugfix. +If the PR is related to an open issue please link to it. + +### Checklist + +- [ ] Changes have been done against master branch, and PR does not conflict +- [ ] New unit / functional tests have been added (whenever applicable) +- [ ] Test are passing in local environment +- [ ] Docs have been updated +- [ ] PR title is follow the [standard-version](https://www.conventionalcommits.org/) convention: `(optional subject): `, e.g: `fix: minor typos in code` diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml new file mode 100644 index 00000000..7fdc22e6 --- /dev/null +++ b/.github/workflows/pull_request.yml @@ -0,0 +1,38 @@ +name: Pull request workflow + +on: + pull_request + +jobs: + lint: + name: Find linting problems in your JavaScript + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - uses: actions/setup-node@v2 + with: + node-version: 14 + + - name: Install node_modules + run: yarn + + - name: Run ESLint check + run: yarn run lint + + test: + name: Running unit tests + runs-on: ubuntu-latest + needs: lint + steps: + - uses: actions/checkout@v2 + + - uses: actions/setup-node@v2 + with: + node-version: 14 + + - name: Install node_modules + run: yarn + + - name: Run tests + run: yarn run test --passWithNoTests diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml new file mode 100644 index 00000000..6b3f100c --- /dev/null +++ b/.github/workflows/push.yml @@ -0,0 +1,46 @@ +name: Push workflow + +on: + push: + branches: + - dev + - master + +jobs: + release-version: + name: Releasing a version + runs-on: ubuntu-latest + if: ${{ !contains(github.event.head_commit.message, 'chore(release)') }} + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + token: ${{ secrets.USER_TOKEN }} + + - uses: actions/setup-node@v2 + with: + node-version: 14 + + - name: Install node_modules + run: yarn + + - name: Authenticate with GitHub + run: | + git config --global user.name "${{ secrets.USER_NAME }}" + git config --global user.email "${{ secrets.USER_EMAIL }}" + + - name: Run pre-release script + if: ${{ github.ref_name == 'dev' }} + run: yarn run pre-release + + - name: Run release script + if: ${{ github.ref_name == 'master' }} + run: yarn run release + + - name: Push to remote branch + uses: ad-m/github-push-action@master + with: + github_token: ${{ secrets.USER_TOKEN }} + branch: ${{ github.ref }} + tags: true + force: true diff --git a/.github/workflows/tag.yml b/.github/workflows/tag.yml new file mode 100644 index 00000000..a488957a --- /dev/null +++ b/.github/workflows/tag.yml @@ -0,0 +1,46 @@ +name: Tag workflow + +on: + push: + tags: + - 'v*.*.*' + +jobs: + create-release: + name: Creating a release + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + token: ${{ secrets.USER_TOKEN }} + + - uses: actions/setup-node@v2 + with: + node-version: 14 + + - name: Install node_modules + run: yarn + + - name: Extract release data + id: get-release-data + run: | + echo "::set-output name=tag::${GITHUB_REF##*/}" + echo "::set-output name=file::${GITHUB_REPOSITORY#*/}-${GITHUB_REF##*/}" + + - name: Build project + run: yarn run build + + - name: Zip artifacts + run: zip -r ${{ steps.get-release-data.outputs.file }}.zip package.json README.md CHANGELOG.md lib dist + + - name: Create release + uses: softprops/action-gh-release@v1 + with: + token: ${{ secrets.USER_TOKEN }} + tag_name: ${{ steps.get-release-data.outputs.tag }} + prerelease: ${{ contains(steps.get-release-data.outputs.tag, '-') }} + generate_release_notes: true + draft: false + files: | + ${{ steps.get-release-data.outputs.file }}.zip diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..03629a48 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.idea diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..e3fbd983 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,2 @@ +build +node_modules diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 00000000..09ec78c8 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,20 @@ +{ + "arrowParens": "avoid", + "bracketSpacing": false, + "embeddedLanguageFormatting": "auto", + "htmlWhitespaceSensitivity": "css", + "insertPragma": false, + "jsxSingleQuote": false, + "printWidth": 100, + "proseWrap": "preserve", + "quoteProps": "as-needed", + "requirePragma": false, + "semi": true, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "none", + "useTabs": false, + "importOrder": ["^[./]"], + "experimentalBabelParserPluginsList": ["jsx"], + "importOrderSeparation": true +} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..a4a5a487 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,23 @@ +## Reporting issues + +When reporting an issue, please make sure you include the version used. + +This might help you diagnose the issue yourself, if not, paste the results along with your report. + +## Contribution Guidelines + +- Please do not file big Pull Requests. It makes reviewing and ensuring correctness difficult. If possible, break it down in smaller commits/pulls, each related to a specific issue or subject +- Every commit should have a meaningful subject +- If the code has tests, they must pass before submitting the pull request +- When submitting a new feature, unit tests must be submitted as well +- Whenever possible, implement features as plugins, not by modifying Core code +- Always keep performance in mind +- If you are unsure about submitting a Pull request, ask one of the repository owners for clarification + +## Submitting Pull-Requests + +1. Fork the default branch of the relevant repo +2. Create a branch with a meaningful name; i.e - some-feature-name-fix +3. Commit and make a pull request + +Thank you for helping make StarkWare even more awesome! diff --git a/README.md b/README.md index e69de29b..c6a3a202 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,97 @@ +

+ + +

+ +

Token Bridge for StarkNet

+ +

+ + + + + + + + + +

+ +StarkNet is a permissionless decentralized Rollup operating as an L2 network over Ethereum.\ +The _StarkNet bridge_ allows users to transfer ERC20 tokens from Ethereum to StarkNet and vice versa. + +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app) and +uses [Redux Toolkit](https://redux-toolkit.js.org/) for state management. + +## Prerequisites + +1. Install `NPM` and `Node.js`. See [Guide](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm). +2. Make sure you've `yarn` installed globally on your machine `npm i -g yarn`. + +## Installation + +Clone and run `yarn` to install dependencies: + +``` +git clone https://github.com/starkware-libs/starknet-bridge.git +cd starknet-bridge +yarn install +``` + +## Development + +### `yarn start` + +Runs the app in the development mode.\ +Open [http://localhost:3000](http://localhost:3000) to view it in the browser. + +The page will reload if you make edits.\ +You will also see any lint errors in the console. + +## Production + +### `yarn build` + +Builds the app for production to the `build` folder.\ +It correctly bundles React in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.\ +Your app is ready to be deployed! + +## `.env` Files + +`.env` files are increasingly popular as a way to configure an application. Their values are injected into the +application bundle during build time.\ +The appropriate files are loading according to the `NODE_ENV` value.\ +`.env` (global values for all environments)\ +`.env.development` (values for development env, i.e `NODE_ENV=development`)\ +`.env.test` (values for testing env, i.e, `NODE_ENV=test`)\ +`.env.production` (values for production env, i.e, `NODE_ENV=production`) + +> Note: each file can be overridden on a local environment using matching `.env.[ENV].local` file. + +## Wallet Support + +`WIP` + +## Tokens Support + +`WIP` + +## Project Structure + +`WIP` + +## Contributing + +Please read [CONTRIBUTING.md](./CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull +requests to us. + +## Versioning + +We use [SemVer](http://semver.org/) for versioning. For the versions available, see +the [tags on this repository](https://github.com/starkware-libs/starknet-bridge/releases). + +## License + +`WIP` diff --git a/generate-react-cli.json b/generate-react-cli.json new file mode 100644 index 00000000..c0ec499f --- /dev/null +++ b/generate-react-cli.json @@ -0,0 +1,15 @@ +{ + "usesTypeScript": false, + "usesCssModule": true, + "cssPreprocessor": "scss", + "testLibrary": "None", + "component": { + "default": { + "path": "src/components", + "withStyle": true, + "withTest": false, + "withStory": false, + "withLazy": false + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..52e13933 --- /dev/null +++ b/package.json @@ -0,0 +1,76 @@ +{ + "name": "starknet-bridge", + "version": "0.0.1", + "homepage": "./", + "scripts": { + "clean": "rm -rf ./dist", + "prebuild": "npm run clean", + "build": "react-scripts build", + "start": "ESLINT_NO_DEV_ERRORS=true react-scripts start", + "test": "react-scripts test", + "eject": "react-scripts eject", + "lint": "eslint .", + "lint:fix": "eslint --fix .", + "format": "prettier --write \"**/*.+(js|jsx|json|scss|css|md)\"", + "release": "standard-version", + "release:dry": "standard-version --dry-run", + "pre-release": "standard-version --prerelease --skip.changelog", + "pushTaggedRelease": "git push --follow-tags --no-verify origin master", + "publish": "bash ./scripts/npm-publish.bash" + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "*.+(js|jsx)": [ + "eslint --fix", + "prettier --write --ignore-unknown" + ], + "*.+(json|scss|css|md)": [ + "prettier --write" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "dependencies": { + "@argent/get-starknet": "^0.1.1", + "@metamask/onboarding": "^1.0.1", + "@reduxjs/toolkit": "^1.6.2", + "axios": "^0.24.0", + "js-logger": "^1.6.1", + "react": "^17.0.2", + "react-dom": "^17.0.2", + "react-redux": "^7.2.6", + "react-scripts": "4.0.3", + "starknet": "^1.6.0", + "use-wallet": "^0.13.1", + "web3": "^1.6.0" + }, + "devDependencies": { + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@trivago/prettier-plugin-sort-imports": "^2.0.4", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-hooks": "^0.4.1", + "eslint-plugin-prettier": "^3.4.0", + "eslint-plugin-react-hooks": "^4.2.0", + "husky": "^7.0.1", + "lint-staged": "^11.0.1", + "node-sass": "^6.0.1", + "prettier": "^2.3.2", + "prop-types": "^15.7.2", + "sass-loader": "^12.1.0", + "standard-version": "^9.3.1" + } +} diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 00000000..9bb403a1 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/public/index.html b/public/index.html new file mode 100644 index 00000000..0c81013f --- /dev/null +++ b/public/index.html @@ -0,0 +1,14 @@ + + + + StarkNet Bridge + + + + + + + +
+ + diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 00000000..e9e57dc4 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/scripts/npm-publish.bash b/scripts/npm-publish.bash new file mode 100644 index 00000000..4f0cba96 --- /dev/null +++ b/scripts/npm-publish.bash @@ -0,0 +1,4 @@ +#!/bin/bash + +yarn run build +npm publish --access public diff --git a/src/App.js b/src/App.js new file mode 100644 index 00000000..87887f92 --- /dev/null +++ b/src/App.js @@ -0,0 +1,14 @@ +import React from 'react'; + +import styles from './App.module.scss'; +import {Footer, Header, Main} from './components/Containers'; + +export const App = () => { + return ( +
+
+
+
+
+ ); +}; diff --git a/src/App.module.scss b/src/App.module.scss new file mode 100644 index 00000000..5adc9a58 --- /dev/null +++ b/src/App.module.scss @@ -0,0 +1,9 @@ +.app { + overflow: hidden; + flex-direction: column; + display: flex; + background-image: url('assets/img/stars.png'); + background-size: cover; + background-repeat: no-repeat; + background-position: center center; +} diff --git a/src/assets/fonts/Inter/Inter-Black.ttf b/src/assets/fonts/Inter/Inter-Black.ttf new file mode 100644 index 0000000000000000000000000000000000000000..565375773523cf29adce38a9fbf71a3badf2082c GIT binary patch literal 294396 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

A`y}8fD@XcF*bg(?aZEx<~j>dXSdRp1b=S<#@CX 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


b6j$2m#p6~C!rY9!9d*3s^ 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 QYnf3{HI-Ghx~bCt4-ah3x&QzG literal 0 HcmV?d00001 diff --git a/src/assets/fonts/Inter/Inter-ExtraBold.ttf b/src/assets/fonts/Inter/Inter-ExtraBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7f16a0f0f5947925f4f93bc96ebb52f387f8b2b1 GIT binary patch literal 294072 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

IpRpceDL>@u>`6fvS>>yFhe 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

Xa4+qGrJ&NNqSq9fo9 zkD8Z%#U^4KK>ou%;^x8^YohTRevh#eAH+6~`ttiXFxRw`U9Aquu2u)RDHv7oLvUne zMhYg7$=ea~528&%98~B#Cn)qlH;?2Fc-r4P8kieu`m(aiTB_ zuMfsyQ4^NY$|@^{(28^wR5&QqRvZVK3KETAn}Z=Oo#A?tsAAf+*HyY)(hD|*eaD0d z@?8GVEO@$ux=E$R=hXH$vX$Gw*^0r___}o-9 zmH@g93=G`NtAbxBSMf88mJShH2~+%;JqsA!;^xymLIL7BRwW_C%EiI6Ut&PxobT5) zPWH2Epq-l^(cj(9*;aZ%r;G@%6Ii$LRR3Aqk{SSb)r|C?`1(rRr1RVM;NK+%sRa^dQMt#|t;yI+cR{YUz?R)au~eFYF<86R0jy(w zi;DXi8m%DOWUC8olzx6TOo3t+|B))RK27ZBY@o;Qn&`SMzmX{)c0S4Z!lXJ9eW5U} z&9Zi317bQ4T0X$1?@RlrG3`S}CnSz)JyUqLlHNPCo8H=X6)dW6SCWgVuo$#`z<`6p z>eVOpYBz9l_w+8fU>G0QnNIS}NsJ#A8agU|;wUWpHO#__qtFX0L-uy4phznCSjswo zj=?$=bCKDQDQ^Nuc;eM+(YG^R(!Ag2679wh#D$Rkbk{G}>9HMz>{&h|GzE6eh7Fsw z!d5sst^WyO3LR?ewS$D-blgWQX3_)nXCpmDFK^yMn(rsJ^lA3yPDPP?XlQ6yaKqHu zJ)AK8g|G+s$XlTfW3EEb7DwE&EbB|*F#=nb(llQ{79B;71$bw&Crf9oXZ}-e)|Ni+ zI*13!o|thYk3M`y-{Our5?|cAbEK0+n%;-(={`X17~MH>DpKdr_uKcE%?lwDuo%ve zfH8FG{YSLqDuZnve06y7*wX`dlk|;W(S>^lo*uj4*sFsK>RIq3(QW>f^hJxm!a@E- zUb?o-c+U=H-A6>Qe5k@r2`XOfX2tsjh$!5aF@g*=^!Y&~Bf{zi)Djv`3!J?*p+3K5 z!H$?(B$s4G+qJCcK7$=;l|Ns9QVJcHIA?QDZYhZ|TE?`30)3xlB{bw0X{fjb4Y32n zQ&v5*t>WgwVO7HG#aiA>j2*@H@h>N`vay&j91Po7j4hY34q`1jrOB}VUr}jiZ;~PC zQok6{kM`KCMniZ*C*$^718#*f@{=M6V4jXznp02cBll3#6fqd>Y!jZiT#;J!#Wzp1HD1M9jE;K06%esiw=IeKD0$xB=iSHH{L)P&OL z`mytSVSDA9?g}5&FA-?84psmbK*hPqzMGp!url}_aM6kXgC1PFmbCwaeNWH!bj~D$ zrBNiFPC7&48G<Fqa=KiOlAf>1VCBeQ>OFG)c}jkM3qFbJ zz7)reHs#Cg9gC4_rVrkbaLDT{IF&c>w69mGey9{zI0d2TAGo**o3xeC0P~BYi2IP4 z)gG{a&3%Yr9?V52L|%&Jz(@N}fRBQrV{&qF0Ra^RY;ZQ)Vtq1x{cQb$xunk7OT>L8 zp-oeVbjc>9Mn|}egVG#s$Wdty zvW@2Z3(qYS+$Vz)RO~&5|71iKJQ>&|Ml0C40M^2h+gC#Mt5*_X&RoK+Tux1MC&N!< z*o5)J2r1%RjCp)9-@k--Jlyw?xJ{czZ{rKSRzhl=-27n|{`cX?4w6D@urzf&}Xr)xadNax6er zly+Dy_@o^dI7Lm>6PYT^@yHjCcAyJr#|3jc3g!2aUIkZ2n$uCf2I;K)O1AQIjF%c$ z-D4Zt$-m2m&2o4Eo|~hAMV9Bcm@emclz&4Z$Kj4=U|v>Ati5wl-Uj@3<5seIxRt!p z52S0)Rix{bboN}tL8H89F|FdchF@lW4+{t?L5w$2SiX8F=Q+#AFO%f*#WeZ-2C%>R zE9s~g<%`pm`YkqyM#*e!o|Ly>lr@dGM;}`mn^>2vjiO86k2FK%17!~UEyoUXV0`mvI|2}33 zH7o&L_yyy@0H>_!;2u+f^l5I^qbO~cqw*+iceVk^mfhxL(}5k_!g11SsjooJy!^nC z$ZN-`C;1+C3~YbPn!Qr`kv8HcUlVpUiSi*_O8lOy-@fHY_8BsoR3ZT}UlH|OGWs3u zN*{gJTzw?r>vrnkk{V%rcG!9J$t>vPc47(}RJ1c(m4dcnl&x*RF#;;^$uP@NYH%A6 zL+mkv#;hE6_O>9v^5Elz^1 zJ|DR1arI@m2Y8TO!y5PS#e7BOmL9=OWq(tISY4y&W7>_)8^M#SWCqRo^DQA!*N&0# zvD3adGj!;gqS-?|qx=Zz*DcFD5Zeepos9nbynQkdPmZ#Ikbd}VBEJL+{9Vj?s-L?d z>*Q!>W`nKWDa@sBM;z{Na3=5kR6FKp4c)k`9+S0WY+WkaF&qW&$xThd+Wf^^I}y@j z`|R&FR;GgE$h#c4#%I-PV~w^ z*mXKR+ew0PIz6FQn)RrgUFoC>kjf+KI!8|N{! zg;$`EBa?}MWs-H?hBgtqeO)|jOZTuX3x{r;LZ%}Q%arpouID|62BXP9(v<9Zc90&p zl)bR)6hP63d_&((_8NEH;4WOp3O@vk%Nwj5cBKT9oB^MfK|X}pF}WHX-AUIQyQ;_2 zrs@gCZgky#jtWmD3tAbNvL0oA;yJ@M<0$fmdyf*XVYhsbvUuzkZw6`@hL$_~IyRR< znVbvI=d6Q@{}nv<6vrzpLZr(Ft(6M+54JQJV~(ZCu3m$t-1!>0d6^5`Of2V(qJ|67 z87_e6$d=!Kr;+pr=`?ZbwR2|7m|y48pULulr1lDg1-nLjKl14nG_==mM1A7fty^rT zzuZdN-if(RdYrndEGGIJ=mlwap?2)f1#M5AX?J-dz4@jM0QKJzr>m7hy1NdIxO(D( z>yhm^d~RWfQF(`XsM@KLu){{EW@DHAYwtek26mX-4IX`yea-&TWrgZ7oEJcgPJ%r1 z0*D@?h~=Bly!TKJI3#ZyM0#nEHwj+zAWq!MkgdvL_jUjtL7Vc4o>^d~qwGr2@$M28HHe4j|l3HD+Wuxbj%G=4q zQ6Q+_|6Fip`0HczP&k!~J^OZ1!5oYNBNw$MRNTrOQZ%3B#TW0Zg@=ga~Jf>wyD#~UT}3tuoMEy*jnsq5w7hmi#@n} zUgzh+sFGl>adSbe(#^D5>84EZ;rmD(Tw{Ncbc&omM=I0Q7#6Xl|Jvk?uToaDAB|Er zaQWO0+`3Q+ygn@DIAUaI??y6xMD9#NX66o`$@j^aFd?J=mn`<-4gj4GlE;Fm9%{*0 ziptt5>NJZSc2ByhiUqs$sSVa%YfFzH`S($*^Iw zXAc`z0zN`3w4)ykhlF-SYdA!fBoq`tK{ZPHs&`>w?}Yq(^$GJA>1*>N%)~5OnY#wj zq>>DHWFA;LM|(SKcvZ8rRYu@~TOccH_6$e7ks^+7=5IxhwI2~i!t&Y=UcfD)l>@I3 z&D5;y$@Ih30QK7rd0`!MJIo(AcmbO-DbXU_lmeBdDx?9#M}Ip3G}px+(TD`h*&`Z8 z4`yzf333qkn2aM0d(V%hd#I0;*lW$8g<%CP<2@GkU7Lo2-a#e13vhibc zlIO+H-PDKP$3;@-NvGKPz2Qqf<}vPlsWua9tv%WImzGxI)7E4x@Q7=fAGTodnk2Mq z9IXmgOC{*gu8CkeS^K8zXP`@~xDJ}v!cVd^E9?HicCr8{%<<3x?vj3*zdUt}%t8><{{lctIXUqhy;`UE7I2XUFZ=Pl-p%7_6gYCmZr0s@#+^9gbIWSmpKUlVMEKT z8DF+f45O0_3rTgMALZzH{t5j<=trt^b;&5>bRnHs8Wsu1%YGDH_5N6r8T1{7A;wgw zexptnbmAy=JD?cxsd+{&sWj|UeGeP!gQ-wlrOskGgon6K0H5L!O5*wnRk8WxyXz-;#2NY_ z{5l%Wi6z5_F{(3cSgBzpDH%Q#n|w~zuu?)whh<^+&mKCwL`a#FJB)4nVYzeo9GXs+ zaH77mdY7R=d_h4x+tcPxAsf3qp?5(6+wJTV9Xw_#_KaBHU(!BT#aw zVsMlk%gi~JsehDnF5@rCIWcIM#CU12@WirIa8tL(meQ!(liN(}B3iCUILMcQMuv6z z+i&bdH*8)%tbKO!!PnE#m*7wBr+=xo(!ZqB;d(mk(j_e55$f7p7ibQkTZnW-936Xx zW*Pz6C)oFLNPcIcRsEKKG%m+~{mEpsd!)Ly(1Qu%+EtM9HQH4i6ZXMCOEdT>7T>VC zA_)vF)yW$oQaw~slW9IJCA`)N$BhM@@a_<9+(7XUVHcosSm+Guj-Y6ctvLop zv9lBZpr@)dPv0?X=JxdF)#y+dye8WcV@(irt+gmjNNDhajq zS?bx;l3Aw6JC=feo`YB04Q+}lP`<6&pZO=rh7eJMkwy#+<)|{dZs>3$D15Zxn1XR& z_7j+yc*39KRAf{45sRXo+D6BP0(b9Bx_Elq5%TW4^i>hv@|$);Je*j6`lfCh4?^Y> zZpHetNy$*u-lPL}@@Hv_(Km?h;*w4g*@ayb&-F287i=6Kyzhjr4#})vr@dR7U&nJ> zJ6?M>c&o!Tl+^O<)xh_14hQGg3slGYlcPc@Y7qJr8g zL^;51t2-;EEq{FRCVxqERdo7tNLc2MYjzixZA$it{K3F9P?x(f%ag1)^&`p6md%~A zq^xDf)QDQ|PLucIijv|b`j#D1hjY(@W{iRl?dkKR&%M_q`6#WmqNLXs?FMY=e}e>W z`j(ESkCxJN^vV5B^Ycj~61rs6`Zy-EKU%O(dPa_=r00Gq4dFY|0^yUS4J~_hb!)rn z-OepiF>X;jIDAy|$YyPlIyMO1T((Yuaw4{X&H*nL$rtAWjcVmt(6 zYsW$ZGHZ!!-(%Ju90tr74c8BNe(=QJ)n4}fgXZR&3N{wLyhDrw5~N6D~ne5KAa{@QJPS9-4V zmuvUL@`KvNy0-9lrsuA0+j?W3(J%p;|B&O8?rD8GxDH7nei4)RXU+TmiGhSB*>+)zt?!gH)sj`R&DMHIM=@UcNe$p_xs&F zLlEb0^VNYZ-PWHk1?_~0#m^LJ4|u}4>J72^JDY~36+wegW^mN zD*py3Vk*J|R%are5-7Von22Je{p^<$Xs^rpbwA|TPWpuN8#bO#AmlyN z4Zk8K+>m&F{iX|vAArrd%W{+vl7JL*p1MH#4p^Ge*vqSN#?k?P?7PnA!cL@C+8GwvpwY4}!I`*1@9vES;z-ofjE!ILljx(a z^cPN3le6Fi<4ftK@wxW)TR%&OZhz8Q`gHXYnNV=5MSOMPswUJd@z_8qf&Xl5xQv7w zq!k@U&(JZX?WF`<-g%3QH(V0Dq_1g16-Qin2X%qQ%lsY-eFqOlwVJpH(b9Bom|-Ki z#|;y1KPFl9?0M-W$$AtEq~u>-b9Jo_9f+%|t-63ZNYjOA!$xixxhLF?I#2xRY$=Jf zJQ@24-Tl0kxPTe0^yYbf-i?Gm$QZ*JGVV#jCB8bBM6R~vyD-}gPgz2)Gj z?;wz%#0#pk{0iO+dy^fuTNDrcLvLc9Z9JbK6+9YMw$hZcuPlt9@MwB?pY}c?;TsZpXhpMqYllB(f-A-mAa8;_B+FCcaqT z{5}MN59ck6@1ZK}NgD0aVVNyR2KR*whj}Lg)i6l%Qd?nngnV{0>5&jo( z0m1}tbtQ1j393N-1n|EJDsLluas*F;~(_EW?@7IpG&m43nYTt8o;t zP&-VRLu^B{Fvs5@+NilHZPR1o{XNah(!iTG(8uy(EXaCHJ=40Q(>nugT!7;?O7c_ ze1O~`{F58MB{PktZ!&7*N2X@noM!_w9C zC9)QP?|dZl7EFjK@5UpT6IL5fD&`u-ZvRtG!aDp}&a$=tdtUm@|DIR>GmCZhzqP@5 z#hmvud`F~w$pyBMY@8`KGCLzgjbrtE@^xyCw`+DTO(JVvk@jD$r3e3@@mskuBtCi5 zaEF+kg(UARUB@DweSL--L=eLhD|x&ykL$*)aOzBuX`)&t&F4;-axmzs_PitEPGr#t z(rN~EB|qZnW!MIfXndIWeF#x&TnRg>;lPeRZ~PYaU=mmKrzzB=Cm}Sw4?=4=(%wS= z02JTSLuAchA&y!-+x84NKo@+FmydUWHl8`#Nn^P8m()LK4^ZW7de8d8AEBou&XgSk-r^ z;-%|D8fVpZvQAy1{*sGikrSlNR3$`~CAKK+W8b>7=bzsObZ=o_uXz(E=RQ%VfAfuM zZP%x;g~`MP(+kj{I91*E{V@>hgtpuc8G41IjdxzhS-x?C48ty7SqHnP@`#

cQMf?Fv~EuMU@QXf`y}4 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

dHNwv~(;@i|a^Zdd0x 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 bq*mpmO7dsEdP8*!D+;Q)uAxPDSNgvJqt^P8 literal 0 HcmV?d00001 diff --git a/src/assets/fonts/Inter/Inter-Light.ttf b/src/assets/fonts/Inter/Inter-Light.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a5f073690d3ffe5c251c690e4488af8a4fb441e4 GIT binary patch literal 288088 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 literal 0 HcmV?d00001 diff --git a/src/assets/fonts/Inter/Inter-Medium.ttf b/src/assets/fonts/Inter/Inter-Medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..721147d8311f1bed1bab5e39c18254beedcaf0ab GIT binary patch literal 292140 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%0DAB`*{C?!~6Pr26rI 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%0A^c* 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

EgldKWv84`FE}6|o^51~BB|TA!2q;5^Gy=j2^A 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 GrT-t|qF|Z; literal 0 HcmV?d00001 diff --git a/src/assets/fonts/Inter/Inter-Regular.ttf b/src/assets/fonts/Inter/Inter-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..96fd6a12d0e20d7010b196e425ca48b0b5286df2 GIT binary patch literal 287928 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

Qe?PT{|VxcO4J23`XEyBR&d89m>IY`5{-wz+U6 z;C>tN+J<~@A+EO&*INkdmS*@npp!-DWDz=9giaQrlSNzME+MuLg+?KEY=`@RwCx~m zJ3fW~2yyEm7!A{4F>Hogg(x-wpSKa0+p^#@A#T3}4hXRm{n+`m5G9nE64F#cno7{) z5_GL(2cT;u<Za0xg}CDa2!~mK?C!7&v1=(HlU>D73AI34b{z+Pztb0Z=gxS@gnTH4 z!%z>c&?Q8v2?8Jzk|7%kVJ|!e$iB2qh~4PpZuD(8^4yI)cRvE?>s=PO2&TXSxEgK& z<a8JExeNK+O&Pr#eZ3n$@21?|eNu?BjnE8#2l9T;PzVFkxChzq$pgyC9&}<4Wn<5q zfKKe8Z0sd2dzS$DzV|jjo_q0Y?{OjSA^+~V8%SHZ0Y*Rs%z;%vo|b>l@Hq)KK!p(d zcxNBFwvYVX*CfP!=*NA8SwVhQ5KaZ*R1i+ZL3kcMfNzD^Pulkf0q*wWZvPe_-TRNi zdqCRn_XA{e|8lrah~G=t1f@V;RE`9mSKbTg!vS>gKn@f^8N4mT1NiX(-ydic;vn%q z_$d5Kh^hj35>5&6U@Gw5gYOD)2wgl>0(D>);vwYuP#%z%hZBMLJxqQ-%=3p|fcN2_ zLOepe9=#0S5uzIZs%=mu#2?OsXM}icCgA^LUxJ4D0lj>D0wCMRk?rHe?eV+d5qKH? z3b?Bo1=C>_Y=Z~jW%vlb6XJ=%Fc$FV3EVt^n<JsHOo*dqAPz@K%dretFT|5ZAdIIr z!=3ODya?pWQ{M>jG`~NMT%RT{o<_f(?iHeTD4<`p=vOWN)RNZPU2q7HK`k<<?H1x0 z;_^&5%m?K8%<VuvJ@XoLz>h*a>kGJf7B|nnC&Y7B2!tp|fwe#yp4$gU;7#}|@NOOc z*NuhguoSKZ!l-*di04PZheEtS9r41$@Dix+=-P|dK#vghaezGPpM_>X=j+Mimx$9# z#ObAY$b@_-1>*ivJ+wlX5HFh`03zXaAzmTAukhKh9(KU}@D%(J{tmrDygC%ZU>0P+ zjexsXUw}`bSBTd}z*NY98(}Zt&ujSe+CMQ<@%(j7h(^-UxEsi?#!rQKV-gV0H;Ct( z<6$M-45aTZWcpS#6aoG;`2c#+gbbQ)h2KL9bPDly7?c3AdAkvK_DAynonbHzR>Qq; z9FSKt@oC-#?+Wp!;Xpq8iG29eXF|M-Y~H0@{h9FoOkL7~F0~-fmOl&e-bAPo;{9YO z7vh6phyvo%N?KZv2=Sp6@aw}9LVQHI{|MdvOA@>Ry+V9^0Z^ZOOjw`9Lo+5kUwB1` z_QCK6AwF9G9YXxI68P*G0;IPCKR-`_wa_QT-$~!!i{S|&zQB(!!hvv(d%!j!{$Yk{ zAnsrC{#Td7t8h|?PW<S6P>8Ps0l9sB4AAqh-v{#k>+gm5rvZk-#X#EsISUp+Hsk|g z|Fawp3-QeccpT6tE+i6NBY=2y5uYy7`fZ*N-+2S^`R-pr{0q7LD--Sp>X(0gB}Df| zK+nG?PTv#W_wle4a^OZN1<K0z-(m867APP8=@#OIKOp}TSHMcR9`*q7Iq@POw;z&$ zH2<(2-V)-+^MJPNN9w#EXTuV>8g76);Q$;3<n`mX>~<zSC(*N$2|ySpx4>?oT{wxp zoO~C)6ru;2_e_BKum*Mj^6fzndhq8I<?mE1q(Ls+4y5VS5qKH!=hR<;boC;~UgY14 z9D0#=FX`_^*1aEb(ZC>>2Rngy_7S#yFoZ%nARl`dD+|aU$9JqJ5P)A=FhoHjWB_r{ zwm}&jf?9YJ+So}b;dd|#kiYX8A%)s}?hjuGDL)p{@Mj^7JD@{I)7{W5q(>HfDI_yc z()^x~*lnfdN%%%c>!q+6>V)+CgOFY@h{Ngz?S&VF^gbUrZ`k{5A<v71H-#KL8TfsO z1pFLQE2PgXV2icSt3sZC0dO<Q`2|3{hK9hMz+AwvT&Q845YK#h7kj7l<=9ofi+~j( zeoT}2eJJDw<AHcya74)A5pXShDx`lllnVJfj$Ha3VT~XTBM5uMRZs%>H{u=mUdWNG zO&v*GMux&vNQPCA2gqn-IXnWSedHg3c#Ql`NK`@w4258b0#3;a$N=IVuno%K5RmQw z<Pp#Y{{*{`7Y>F%m<aK(6xd6C;f+ANFMI%w!E4Y8<jaLULXJY_qlniio?jFPHv=*c z+yHxo48p%4;u(Z&g1&-NLS8%wE(G%M;+e1*ki*5-!yWK@cmiI5_kg^(_y-|JTi|yv z4mkE<^a5B7=)vgQ;67-8PXrU65DNvc3o3y;3Fi0U_u)AFDC8I`jDT=J&SQ|(7}7hY z2ATnP>`RwpgCQQWg$xN3GIX|(myl;+=t9_TAiiOLf^UT!=MBVfTqfiK=^sZL!Y2TE z5`F`a&hTf29FN?`PlNqHS|^ac3FzsBxj@<`6an#`K)fdq?@Nsk3HW;{d3xy|;6)(p zOaCTh1Yt*vf+cV@+z&O-2Hy*L8ELuf0to%Tzzg_6oGwF$F6$L?q8D5Y=-5P_Pcpzn zAYUid1MVXIVGitqcR>?!GWj`q1(ZOGkWsjaLPk-a2ss5^nKB)22V@(Ku0*3N(fApS z45QJN=qCVOiT<~cF~}#z4?-XYl3*ol1oQ*jqKx?*`h=WHI8!G9`82f{j>5-6P9qJ| zZWJ;We`3+m*mNMRmxsdxKv>g};q-aXCFBgsL);!AXY%{Z?V$c{7IM~QkOAo4EYcZI z-p5l`;va#}giJUe4huQw5_nw5xyWnoDo}raBxK?UNCo1Si2M@&Bjmg=$b$QUbj%+M z(J)^~>|Qd7@RN{9(lhX9_*%$hWRlEp$x~n<Yyiqj@<DhWJ^*BUg$06O8lXQ{AhRow z@f8ojOYj%?w~#4=U<}NF<**rc!=vyjd<s7ZxnKy8wgt0cC6H$e_5kTy@CN)1P6?Sh z493G;SPeJ9y>JxXhA+S&<ig=_86*KZu<#bx4^P9N;48u1S1=ML!va_bx55E<4&H-r zgk0<a7eNdxhHGFaJP0qshwv{U(>!4`Tn@|NI=B-ahF9QY_>YiF&Vvw`2`gX=+zo$# z*WoibDdf`gVH_mDm2d;x15dzP@HzAexy%nPg?W$#H^T=&+?Vlt`XJ!>a?-mTKbKRU zmQ(IBNK?j3K>Szu0Ofo|9H7IQUO=2O9~E*X>0h}Xz7TTNR_GS;%GpBNaAPX~>Kxmf zLav?zl;t(afIPCsz!gBflzj=@27edwsxX)e9YU@pPp(EDS3fOe&II85I?}T4c_G(R zw$@W8tS8*{$ZZ4Z*zlN;xg+5zcumM_aC;5Ut{nwY@Q{!jhXU!_NLU+th0G&OdDI`* z&4rJJ+*Aq<A+blv&3_RxpS0({EaVpAwB=bLx03$rk=6CcxS&zU8%W!YAut8-<Hj-} zZ<+zO!#;RN$U@Rth#YT51~+#Jxor)60^bXH3-Y*ydgGR6_zIjt79snhY#?6S#{utc zC*QWWL8p*A1o#7avLhO(4|Wi*9eIE}cYH16t;F%xD)>Rj;;R9FZ$mD(Ujz7c`@Qf4 zyaAs9?sg*UofpDnAkI5i!WP&K55r6FA$%)ji3i}e1h*x)Ex8Kb2jp7PBjg>(?T)b! z3y%u9D*}+ou2VwZiEK-!0qNgufDtee<^!_XeIx9GL+}FN@9uv>uaI})?_H$(uIaE8 za-k6RLN$<AcYOrk33;~}u7&%6ye(S~__2pP--FKVErCzr8zJw>f}7wTKu_*L=kCEx zId03hLz|HIlE3%j&%PY^hmiMefG6REkQK;kKQh@*`1db%Epzz&4k0UN!-IgkO5}n~ zMIIpj2k`d*@jpQP4j`8U55TiPo<BgmAGiQ`=b#sC0^(G~v#PN`+N)N<R^Z(#-mQ8W zz64Fk2L}W09-IS9VJ+bH!P{XU909_4@Jskn$V0e4Gy!mX=vvqYxI6SLya^uxZV&w^ z<U`a$hZhO?@b!Q$KXM&BFXW@;LjD0=c#QZyHXV5W*mLj&Ajij%&Es`K*7yRls<|1c zL!R&h%IOn)f8q@xkMR4ED6j!}dZY#j|7a1Q4@W5{M~?$>Ic5d)>evd{4E%nq)5Vip zg?tKspDJOw3HpYuMb;w2XGQ?=dlsF2b|1VW<Z}Xu`*Y;ybEM_D&xNcb9(BkByNIkq zf9gng-HSkap7(|*SOvuK`M1C><O}G>3(JAHyg-?G;WIcX<ck-=9Kin<?|~-h7P3AJ z7Q>A|+_0g@`X7XRX%wJ~FA?vTs)c;n2>ao2AU|IIw~()dKpId_yh2)E`AEoyNFbbs z)j%8?4nr#-uLe!XSJAy!F9yowt7Y&qbOFD;HV!U_1wh`u_5cvpYv?^T6ZsnHdwmMv z@9Vb#vS{>&*^m#nLk-|(V+&9Ry<vs15DoKzc)sxt;Mbe+umQ;TH_?MP$@@3|0;KIN z^5`v|H=PFu;FOSWPjZvMC;q&RKX2pDAJN@E2EtTGhE;Gs%ZrHDJL{nkNXI)J@V$`D zDNq5(<xlwer+b8am-pXAAKuLa_5B$j-G3(je~tm3|CxOF^Cv>KAioy$t>vhY?*##I ze~);)Z-YmL{D3_8pi;<I-fhhV!u~K6z7g`H9YX%a3j$y*oDj0j47}UMZ*9o$W8(es zRq!nQL&#5jVJslSPZk0)`=l720@Cy;ZN;a=?^E9Yv>YCR4}@$N5Dw^LJMXk3&vxS4 zj-1;G_p{Nk0C@J<pM?CY58(e_pBM6Pr15Xtfb@1`!%lb%>Y*9hp$qIne(nvV=X1jP zJQk9H_<a5}d<Z>4{(Txty{-}RIB7pldHIJQ+yJ=w(gMWe%cDYmH4>1;SMLegIRq9% z3A_ZfUtebk`OiT3yO7_Yqu6z1m-^(lZ}InAbmzM$NQDA;LCAmM=3mI}UkyTb6VL84 zcw5MSd%(Rye$TV->xKMJl8`6jg#2L!yes67D}lJ5JRgwDN$P}?eM0ukf$QK__&sz0 zdUeVKS#XRqgV4#|9M}QhvBZtC+K2l-(qX>@X2WhE90zV4DS(VM(yZZ!*22w@5ilPP z3sL|};3Z*@zk>u=1Fr(-JsJi>Ah6WaumNrZPSZ4e%bP+NjYGc=pEUT&A+bM*k(g=t z?~}QQ=jxve-uw1shrKXhy|?;m*2CftuWr$!9$4~3;{O98|93yNCQF_(0^-3JjzimT z_vhE&_c|^T2Vw~oJwKsQq+44>N&hpe5Y^T~P@lg{h5F6XDSFuERH8o5jkEr|cG06S zm;Yuu{s*`C>ump-`(klSJ+oAZY)cOu7ujBcBHObL4nwQR=2n+%YcR`{&yH6<@yzFL zd;L=!V_##nPLcbw|NGgWar~}O?)v{e*JrTkA>3c4l-sz}?|D!ndc4|1k9VBQJ=>F; zSZ&$l*(930O`>T~C6qv&X!7cW6Oay8&RW6`&jQl=D{hq=19@lYbk@45=d;a){=CuD zA&U84<$mUm`)2-bG<0ew_-u8(ubzn>W4iF+S*<BgG?_9vi>(48AOMm@lSd&CUzcCb zDpMEkDrI_q90;rAzfgSc-<{n9pA&A0xfnS%Ksv-jK6<Kj_1Kv(EWWsFl>Ytidi03= zv$2GuN9TasGyE;&jV0UlJL&BCInJs9&tlCH+%M2fzBK(h)<p9Aw~*#+|1Ivk>haHp zUJj)AtnUMV`@j9S3hQk8!>Dj}TYH?{p6MccP@uEhtIXNt70zce&+_?AxvLRHKZ(2h zT`%e>vmLn)z*<e7@|}DyR_}0wG<*GjBgME26oD3#sQRBN;$0u~>(?my>F?~8?C~T_ z_4)r26~@_EL!CVX+ZeAr5&KJ!rsQ*yN*mh9Z|d{EkuI#tjn(dQ%b5bnUWY~UplI5s z{4?*f0V>%uK;)V`$lKpaq$o50PdJbLZ|;B9|F(gCad1}IK+LVY`#<4q``_IEs{cLa zR%adl^_Xjg@|W*!f_YC-r#_us`rrM}&h^=!hFaV=0^e!#%PgB*f2;2U8FW~bDZJB> zN3r|296tY_;jH~{ej9s4qOlfwWSsgNJxfF`W#$G@pT9;C^3!ovn2R8f@8Ff=dTvP; z1(rflp#N4xy|04~yWS~teY)HlDn&K48Mv=fVf3MWt)vZhQQ`X3e^<{7-Os!DRPan| z;q#cw58W^PbGAeI8Ps!UnMbt#*=}rc>hP@6jdI`4?`<A-Xm@|womKjG^~^=6JFa%z zSJ1{=4c(&6R4L-P%c{y)pyH{MZOqU=AHiJ#+z1aC+IZIHv_l0{>+h*|^ylIQ{T-K^ z0)B4+`W4hy?9u%t`ekp<cI5%PQrgT_^aI^_@@t=--ncCzuLn|o*7t$G{r~>k+4!@t zRCojVKMaF@ec5^5y56?w<y)2UpHgOtpp05YnYCP0oBYW)9cKlfai(PQFq!g@+5cSs zT*GhWCVyumpNC!U_0K$>6_}!N^Z$|eE?_!U|KI;Q?!9gXQ%RD!=bm8@LQ<(zNDf7W zq=<1oGZ?3$Cd4>YDn+Flha94u4>>g<hZ1rY<#rZgl5#fB`*VM`^6mHiKhO91UH|`c zUH|LR_3FL$y4PNNt<U<beebpQJ!{249)E>JYlO#|$~dPo(sDd$8shrfY%%t~$!OH) zf`>7i!H;x}1M#A%ZHzI?1%w6ir}+OVxff!7LcT)m4p@Uh;q|!xJzem>Jn#B7Zq$fK z^=`oBh}3`vH-xXp#nk4A{x^c>+WuZL@*x%k`CUK$@8~|<{{rkeY;aBFh%EedSQdPi zkFUqypt%3fLYo}-8snKK4d3Z_&cb<VevY_;c-m%Qj2ja?bDl$6b<ADw*5|GdmBKSd z4xaBaK{}X%xa}YcYW%O$Tz>}iYvXyaMsAc8*DLB{d_-mO8squ82A(I<@N5Bm{Fulu ziZWIK{lRW7D~(mD-fjV&Eo<Oja|+L8`(#{<98$y`$B#yF4%VT%fcDA6^XUcjr3-nF zi^_3b5k{T!MxahKhEH9{n<HlV4Uk`sI1J|Cuja;h$Hf94-#6|so=H==pZe&p|0lrs zXSa=tRJ2Pf?&D(!5BCBbk488H;S97_#`Vwstz!K2Kf9OyzwsH$Gf-g%W_2pJV4y>x z*<cLf#)3?Q<DqLn6f6hlz;uuXI)bL8C=b<l0eqsZR~uu_zsMa5pB{twDYgRs5b8hp zp7>AFIBLr|@O9kp(B|X+zr-7j{yq?OD2sN*cbJVQ&CP%xSHfxo{Rx|f`vbl=eU!%@ z$9;~z7t=v1;+CMz2Z{!MaS$(PU%cJ!dYTLPJP6~n*m>}s3_Q<}zr^lA7*lb64WNes z6wmUzLzxH{#`%@t=g1S+EK1}lB{D)thkMEx*rg-NosPVA<1a*aL(8Hq#`?I1Gq?w# zpLkP5Dvh~f&!G-&gg#`dLI<L6&JrDcj2&<ul|3`AHu~KKtOmb6*4L|`kI$j|kar4g z&|g%I&DRL@#Q-`dANoP4Ey|3(4Zq(Khkj3rxt`@T&ag#sPn(YACqV4J5ih2Ab5Nf# zqB(550KSyztrs(6VWc<vke>QCrE4H2fhia}uJ<Ey7KleU3Md>0-44!yT|t=AEf2z! zCQmFKzNd9O%7FBwZi?7$$BMMPr9>LSX$X&|V^V!Zmep6pP-tC7q~e(9NSX(`y8mmM zfBg*ht>B*%Q}ii31B{pGL()+geziVE2Ifd3LgW>US3#x*OotxC^Xz(hru}Ey|EF}S zg2+@(lvQal)*G55LL4Yd;PX<dD}E@SE=HrxM`ONV^o_?VORO<f#2Q^tEZ0tK2>}mK zI0nbh`Rmw;1viA3>l~a1;6pL|suJHD|3YOP6LBDN1N8lJ6dXa^|Mod_J#!(Kz8ANU z|5~)A%@7j^e20w56EBVt6!zxe4^rO7_h=T{J0AU&`s_j6qw%9@L;2*02{J1B!*)aQ zEHEBi@Zyn2mDs&4ifiCISPG0M=w8>+&&2ukj8s-MHe>1eET&CO1JPJ5$MfH4JUgX} zp_HdQoV(k^BfJlJ55*r<;2NeQ(o=Y-XsXE9F5tX1qO$3VxUyL3q@bu|;*bx*&~&p~ zbk)6Zy)1mb9Oc|7I+`&E&k|it4dk@|$FoG5S}&G^+F%nXWwxWQGh6<DRo0H8xh^D9 z;g{*AHtN<?G&iLXu7Y?xU*P$=Il`&hV2QW?FfGz$#b_&*C_J-+s{bd>%~JvQjMlhE zE`g?rj(JvzbgzPF9?Hf&wkqOsL^_sZ=!kpysk|BDRK9c2Y|%LHbT9?LSCFQ$?XN13 zAKCtLiORvU7#WiMcMJS|JN$PF*hip0PuF-xi+z@Z`Qsds18~<7@8LJG@j_g|?`bbL z7UB}#*IdF&zsq=$bGb60-`+NdBF*Kppec?kK^q8h^*9vgU8w*ikp4<x=qBWm2}PPq z;Ih$(B@`}5ihd&KO%ci&yXWay_$*uCH7DN(aW9Fbl}JPX@?OBad{ivRn~v`Qnja3H zgVFDn=gE+T@@LCJ3DE0dXe#1T5tn*BoF_vy0p$Xk&^fnM<#S1qZY9Vj;@*~pKz@Y( zqrCr_S7?r`5SpWk=PfKo6S(JO=82c?-yB!Heovy$|4H64BJ*F!7U$px=kit+TmB+L zio8VC8!)o5%a&z{>+z^d)$8O-6{qv1B0Zk1Lm6U8o}H*aQ~0`uBC>Ga2+{y=3R9rA zh=8_eX9H>n#}xN}18u49|2IHmulyK``NwmY6X<7C0;c;kug+v4Zh?#9T~v;k9#;zA zk8~c!hw!QCc-~v?!|yS^D~fbkI36Fucn#qRL0)P2j_yzK4&zCL2O>NcpRK`j^BUwy z_peN^7oK}*{F{UKhXCnH(U=b5Sx7$t#~FaeA_I}0G!smqFrJOaAWiewGcP|sZb5hr zKF`3Iehg{AlpDenw*=Qe9LoduN?dEacMkPKp13EEr?d!fL7LIHkCwu7K_!Hn2k{+a z*Tg*><sMBSKAXl8D9>&@2ku6`l)e(;D}c6OAo8PfQ@&YHvUzL{5NR_to=>3|r{TE~ zpQ)VOY+ScF;>O3pW)kOv2#!bd*c@#~_eq)~xPmdYKzqc)miV58*2VV>#@D%9@ZCdo zs)RC5LA{2?<w%EX&!YJR8cXLNj5$?|^XVD=dLBN;1_aX2QO7Z6r?EfA`myo+1Uw&I zp9@IEH8IYo@?g9~?`!JfT0`l&mgfcOc|SIGa_eJbI;wYZ<eQCh&%yWGdeo;jjrVB0 zg7MdQOJlC$Xg7>yKq^6F8XAvz7$Z@86E}{}=o(-QLE|GzN7twE6Ry`EkT2!<72t<d zW^Qk4^V$g0*eM;5|D}-)z<7jnVsl%mF@Ga}nU1)aUm;A#)Q+SB!Fn(hd5s2itteQ6 zdeWRg79FFWP2rEbalC+ho8||+G|b!bSbeC6vePkv^TsRq9)WYocQ(Q&GQo7@lR<5Q z`M(Pe&#QTw!|rLKap;_A9Jf(4E`VnTypNBy1?F7p#$}^T&}U<9i}UDRDe@g}E5i=k zQP<_MxuymvSA)DwMJk>{Qr+lSTt{esjFm9=3_D&C@hD41Yz`T9LwE{&sx34f=bl5E zXHgvHZK#gRshprc;ydDcyFoVU(G_XNV9c?U;_-Qw9U~?n+}P&GvN(@y))DEJ+j!9& z{xsc-7hP2x`gwfJ*0oi<NTp+)Ba6Zwl?fUTs5Fdc(1y4U*{e7`Qy@QT2RcrJQdt@x zO<RzP&$ht-miSHaT*+k}3MHuAWbY`TcBl~x$LHoql%K$HI-vUx`R@WsN5=%x57jxU zip^1l0p&d!=Tt>J+2Jn`KP8|o&ZBEB|0nposmhU+a30;8vvAxWdDq49l7OYqSwVai zD5c4w>*JbZDE{v<tGX1&&udqf<GUS?XR+tGx*VqCYv=IH2UodT7N0Ev>x1Wj3@APS z&4D8BT2m<UxO5mSKs<d`8R1i)F~aenpb!^v-lgf#@kozw?0Ity;&$RV_I!abo;?N5 z7s&H6;w~2jS3ne>;aZnwar`A*`|@a{!@t-w>jWsSN%>sPftG?s_&OpLVO;mpcIXAf zRSDPv1(%Ko$8`}N3YsGw%6@qY$Od$cfdKi(@~DbBpq^Bp*frvzl$NLs==}a56Cm%) zQBV|6+#C*H+6bleX<#g_UjY<G*nr~58-LSw5#_y*ZQ`$v=kTQ~NQ3<8-=)-;h%3AC zS(KrA(Z7HD8S=amaM|G+DD#z?NE?NAh2N~X4*Z1tI0x(l<og2&gvVb8Y2n+lERN~> za1Hd|o^w4Nu5$s`EQo7$1lc%VBgA=J`#kD&8Fs&Jzu340_K4XD^^Vza4$^PId8i+? z?PZGJhvUi|e+lWY6Z<R;pA-E-TY%5641^vAhL0~(Ui3M|W#IF4=yU-4UhYWW3+Q7R zxTn!}a%r*ePkjH<bx>E7KXz^Mky4;|pq1!ejyfZczs6JrkskG<zCd=r(imD0Y3jnJ zOK>l$gwHM@E)En&+U-!f=WM_J8I<lr*Xs+V^s#dcK0Alc4pSQd*z-y$djCq}Ld2tO zWIV=Jv(VRvQW~8mx(W=k@=U+l6l;TJoR6M6SF|(5-1rYG_!+;P93wD%^h<aj;InP4 z`bVtmjboM9Dov-Ds8G2#i;1}i$8u@ds9q!3Cz6}X*T^$nO~*%{P-0KO0767!LqW8I zpe$fJfpEd%IHDX#^Tdu#K^)3~i1fuk@v^KfSF1BBSKp+I=&-J+tLeveYu!Wl)34}} zdbFOX515Zkt}S1%OTuFbbrR|&G)QQe&@`c0Lc4?s30Vot623~<kgzr3Si&y}e<T)2 zyfrZ)v1H<-iH|4NOMEu*xx{9PFC-319G*BkaY5pm#BGUt6VD``OS~4z8z~uS8R;1r z5P2msBJxILLS$v+=g6VR@kmaROwvhSQYh&btV&-jsYFtlq;g3WlO9T{msCHgQBupK zAxW7@?<akhG&gBs(z2v2Nn4Y)C+$x<l5{NTM6ycuk_#l?oLnS1oLnZkc5-TRyX0}j zbTM13aIuob$`l)3Y*ew$#fug1SbTHw6DgBY=BF%9S&{N}%DR;AQZ}a?O*vCSl<-Pa zDbcD#yAoL?Zz*|O$tES+mdq@9rsSp4mCJZ#ZYfi=?7*_G+?89d@YGMH<<2M<716xW zGSMfZ^`p(BsnJf+&e4qM@aS97_o9=d^P?-GN1{ig7Z0cdr4QVH;Nb%;{#<?Su4}ni zK9brjOFkjLQ8`-ZoAn(U%ggKPx~6V}W!+!YLt*_l^kki5vI6VZg7xde`b}W{)_++) zJK@`eZ3)K{P9$7Oj880_7)dOZST(VBVuQf?EfX^mGZW_|E=pXRxHIvm#IuQiMnoh& zQa+LvNsqi3$%u@MjEQ7L_6F7$u)d91zfe*b)-U}p)_*=JHEC$ln4}p=bCTvKEe)*y zbJF3!`WDu|=?3e!O@249eoA2dO|X7y@kOwHR?57TMJY>DvQyTieEXO6?SHX;2CV-_ z%=$O~8|$lRT(oTT$!LS<3(;1vewXO0(ah-E(Q(l!(FM_!u>SASO9%9UG6yOjcm&pu z1lC6bVD97xfWN4wkXOon@0Fo2zMXfo3X%KvZ>^8ND8%u;U;x11j~_2~Jo)$?Cq6of z`{BtA;5i|VR65Z1NI4-69Y2_G<lciL4rU%4F2v!PV952n4&#p-jt=9aBOP$g;On0p z?{&QU@eW6t92tYyQOD@+APz1((&b3!{m&ilal|{8diWg9y-M*%?2(7@|I&vy9^QO- z$B}|Z;tv0D`1eB#aP1i&>(IDEZyb93P{~7)!($KaJGA%ETEs3p)a(%MPKQSwoPV(T z!BPi;dQyHuL@({{bihV;M7KxBNBcy3MN93Uxqtfpm-eUce<zB+zu$Lm?~c98_wL!# zXGfpCU+%iS_34&Bw(M78TV!lxZ&D7{5gZMEFQ$u6Exxq)M%-?2FHLEglA7|85T%Bc zT9ooz${!^P6!<i6<<K<zW%xi<S!Wv9)I(bDly{a(fm>3XUj(C8;g|Cp`&&Y#IX-j{ zt92d@IC?!Tjwv2jC+J^XJS+b{t|DT(f+ca=<4(t+MEQz<Qu&(XTLdLm=3ATZ=lqDh z{x5$a3gs`zdObE4hrII_&L4?|(aQh)N1yPg|K*eX9Fsrp?@#iZ{9b;SKY#xC|9Yjr zQ&A}2rGGvC=TSb`Bj2gNWAh!y@o7HJ@BJNrJ>(6xrEF_k-5m28*pjxDt!VGD6K$qV zv$btcTf<uGS>J|i9-G(Zv-xcS8*kHXUpv?ivqNlI`=C&wD!z*wi54PLj23vuA$@Ew zQAj3Xt^Y@4x_k-WE+gbPIa#ijYvuQHn>=AF*;@8Kn`J-po|k{9hg5a-lxnG7QA5=m zYNA@9zER(+6Y4iD^}YHb{iuFHch`gT$9j^Uspsgmwz7TPK49PQhS<{PxH(}TGr!oH zc7fO2PO)Fu3_HQrv6H=)_H#Sh?y*05P4%mGo_)z{Z+F|-_EoR8SJSIw%j3J(!}p%S zx1keN#1o>WNENL_Yq3FmE4~xo_-V4Vd`#AmkISm^Q9Dvrlb_0|a+;hjcj&FUtI8w) zl-JZP%3{6X!m6fft=g!zDpk!;pQ)K@vI(oR+S9&vT5DxTX`_eWKK`11SuZe&daekm zd?JrLFY@BA1fEp2L|s)|)KhiDQ|bxvjB4!nRP{w0)lRfk?L|A)L9|yLMF-VMys3uc z87Nb{rACOi)krZ(y^neJ@tA}DRD7>y;hn_iVzZi!@$4jjfLbn{%9i=mI)5%Um)Ri; ztDW+8waXu<w#%^EB+IA^vaGr&?^2gA@;N7K>X59Z^T^sduk5Ywk%M$C`LeDpU(t2s zNS!K2=~i;IZY^KeZRB{}N4~H7`WZT1&d{&O&-5@kQxBK3bf)}VkC0#Jk#e2>RPNLZ z<t}+re<x4rjq+Fhz5gZtBI0qsyL#Av)n6f=7Ijn&(M&Y<d#Q&02V#K#ir-s|Fek+u z`kWf;zbMwpf@-bW?9cOu;*ZYH%QRVCTmNN$f$XpE_lL-Lbr<X!^RezBKk=8zEICDI z=p28r+^*-zvwEH1$M5HV>QA-K#`(+r&-~5)c7KPz)88syP|f_8WJIm;2g!%=xD+R^ ziXYS*Sx3jo*?N?mqesiR`gJ)^zai)AH`U7`pYlY06%r4t+r{f@n0QBxlKIto`Gn3V zpVayNzW!wOwckTDSI=W{snOzd|20`oT^0q@P2v$%M7Gu`_&tCTH(^}eQFRub@RuQ5 z)m*Vn&BMFU0<xZtml^sA`Ko?WF3@A-Lj9I}L${S5=ze~G{|hl$ec%sMjr`&MSMoQ# zUfisF(OGqsPwAUveSNcRpl^{+V}<+OdXd_u{?I+uB0t;z8jJEbP>;z(IZ?ON8~jXv zm8c<C`6Dpj&`O5X68(sNSZ3;K@@G9?74+Zp$EipBMe1?YKt1h$=x6y8O;uCPJZ7q^ z#p*SGn*X}_!XK~RRd1_z)O3Hg|EAiawyGce`RbJVRh?9Ss^9&$bOrxyf1$rvSNE6b z$8;n8G@dDI`0w~*bqjxjKga*X|48@7GtOZDdw-MuL{HJH{CD-Y`UiiKKgFN!f9}un z-}lD(tIebS8~z&gmD=c!(N+8z{!I0}dO<b!SNcnJFEzw9^}q4gy64n;YMfo;Z?kLd zCV!WE-v7aFvpZ~e+rvd|s@v~=amU>uci7Ey^W6eB*L%Th>yEku?u0w&PP$|6h}-9W zc0al0ZkhYREplJFC0?r6+H2!=@LG7!xuvd|+iTa`&33!L&uw+v-A=c|ZF4K!O81q^ zb_?BNuZ!2o>*b|;-P|d!hu6pJ?)CKgdY!%A?pJr(>*~&UX<k2f(Oq(v-4%D$8|c04 zz2Xh>26+A5HJ2L_A?dy7y%bX3t0C=WxYF(cSH?Z)cDp_DA@`7b)>Uy2yGQIGna6A9 zwG&Bppm<5l7Q19r|76<ZX|k5yrnie1<?rGPy+iDjw~B{k30Xz&lx_4bIY950ljMHA zM{d<W>b+vOJYbT{Bc`6|U<R9rdC)v$s+fn(lcug|YudT{Oh0$Ot8Dt~5@vvT(Y$P4 zF&XAn^NyZv-Zk%;j%J81X@;6{?r!(EtEqp}XZ7!9tgGc}xU%k1cbBW`%DHN;ysPdi zxW`;=R|oSdt7KRAgxlpRx+g_LS<=-tgWNr?lDk*DCWe^=|7UZX94n59qcX3FH#eC) z{(gC%f7nP-UjHF#`aj`~?ofSEUzYdE`}Gx_D@%!`vb!Jk5BLZDLq-|xA2G&wCa;Mz z`AmLOz}#$ZF$LAFX11AQ=9&fSMYGT>HcOmumYT23Dzir4Z8qo!RXy{qUSYn|Uzkm1 zi`izjo1JEt*<tpXpUltdB{fjJ<vephcUDW)GPT<LX!fcxF65kEX*T;uT^|3K+2bE~ zdHr8poPWaQ^G~|`{wY_$|JB9&r`=8X;wf*6nxp<1ce9_PD~0BT=7$!97KRpu7CYna zbU%iMg@%VRLnA^XL!&~Y<%8x+XU%TePv58iH1qu5+%4u-vtM5_i~O^$puEK_*H_I7 zd9zt5J~Q87o@%WrWTK|9Iq3iHZuQT(LjE7_HvdmoSZ*=j8*2_3-~3>l*=j;6%iL}b z`{&*5{ssS{E26KNW&S0TEoPW?Vy0Q|Uv_uM6ti0WA}Xjt;%;@DcvRgXhO0rQh%4$} zaS8ra7xu5YM01BZA}hOye845i9=f9J>5^qHSIp0K#r10am0qK>^*8!!CtQk?u7p#r zq&{!v%OA`}r(G$#(q`MQ?K-=`ZnRtM4>reMv{&ra(1)Q1Ll1?jgdPq(5_&XLHB>EB zJv28|Khz-fbf}@YMcpi_sYgY1RaHEus)_pQNzp_-Bc4@FFst{hcuqAH&#UJ|7u5|j zoZUq?)kAbwX`+YfDMqTn;$8K+n4&%upJMiPs`^MwRBwuD>SO%1&s4EiO_2rE2J9L5 zt-MKnCyS`v@(#5}7F9pW1hrQttJAWWIwOl?HlVz^A}gq?@@{oaR#dsNp}ti%(uHJW zeVcqn7nXf=W!YChAP4KZa)_=chw7)~Yr4LCQ@4|2bbI-h?jYaR9pyW^ll)NkmlN~= z`H_B6eym@Ti}c%av3^G`(PQP8`dztHzbDt|EcuO|DA(($a)X{GztxlFcY3<qsAtGc zdY0U*KbL#-VtHC`l4ta0nWML;PxL_jnO>p_s8>~nzfQjAug8WsPTZ>Uib671+@`Q{ zlTzY#OhFV;SUO!^5JlxBEQ@|wgyj{HC@<ny5WPfC)m!vZ>7uvlBhpo0(MR<YeN}(a zPYn>;)qJr-Es#z0?ebY&L^joT$meuX`Mge$&2(5c*NO549g!_`l5DAyWvVVFTj}C* znI0#X;}<<E^!xbp>JQ{s`a_wmC&;h$NAgGgrQEBR%6)p7{7EnONBSH5QU167X#YEt zY>JuUCdHI6B~2-Fr$`pXFw>DDN?_N=QsPcAN6Z!T#C)+pEEJ2xV$;cVHeIk)TsPC* z^e|~+kN8pS#T?L2;%Bj6MCB1P-n?%<Fdv!;nDhA9e4>BW`*l<w&<FJ)eOMncrCmMq zgnP;~arI44*FcwZ4bAJWk;!t;h>GGK%sbsH?i2Tm%Hjd@tZ8bVGtZl5rnz~+v=Gb0 za{SHcO7WG*7GH~1W}=y7CYvedQ!~{}Gt>1keO&*dPw12Sl>SwpHkHi-qO>R@%8GL0 z!B7v^B-A}LFf_olG^wVQX>Hnw!D5J5BEA%>Lp?*iLw!sy)7zxGr%fNzR~!%ru?pAW zP_IyWsIPg$ylKX`#^xn6(7a{dmPh3=d0hS?UkvpN^$)#hW|_}r7uii8)%*0B&`Y5- z_le80PueGJU0ct6>?Yb4wxw<FCfPQ&t!?Kf+mG!h_9^?c8)<vnUT%ap)O*@%Xgk=B zwv+8*yV`DUn0?v4;zrv$Z3Q>Vz2P$5aQB*R;3e35?fv#HTh5koZ`%2`p>5>GxYylV z?rk^Az2nBZcinrovm58eyZ7A(?n5`hedN7nciC_35qs1gvj^-!`>hx6-Q?Zu#d-Pc zaeK=CX><ME_KZDif4ArCANIVxWG}mE=90N$jrqgmnhWMPtIRnoR10(3{BEwAYi_zZ zYc85U&3SX#&2XQY9COB;ax<+ozgit?6l(1K>7DnU@fv$?+o^K69A>B68FreR<2~Wk z^Xhv~d3C)f{f+KbH`onvL%sLCncm0VEN`0kxi{IH;(h8(#rXD&chWA?+wEdI!aLv{ z^NxEbykESpy>GnL-ntms-WqR}w>HKWZ>wGIed~STed0~`KJq4cpQ&l;3$;*vsaEQ$ zm>+7O8`?g$pY3l4*ca_2JIBtohwNedi#=ga+F$Kyd%<4wgeSfHUIBlL|D(S*)IQW9 z)G^d4HcKe#rt)~u!`v&L8)A5ap-GG_1x;pbYiKdXR)=DIPMBlR6vk@+Ey385&;Z*C zVan@H%&%ZP4u6heCqiik0@zGwS;nS8?_z9iD2=p%?FlW<*c#9Z0Qp(WrJ~mf^g3Zf z(EGpx2<L-7$k=q~LyYYUt-@HUFXmAQI}G{=V`;YLQN~iasxlb)3Q;XULCF?GRq$8< zm6^&%Gy;zYw1CzOp!(Jd7!9R!h%8ViU=8#MM*7ev85swy%Sf85sK-cZx2G5hTZ{UP zq&iXC07-Uu8Z<;0^D?pWp^S0_!i^a@4vMu72{{?sgpsSE&oXi?6f;SL{2q$AFG6mE zKF`P#&}NLS1SLNMmg@ZiW2vpkF2H6%TQc?|Xe#4Te&j<y{sC>xC~D6(jG{JZ%P6uz zJ4R7{?HTn7v;(7tLOU|*4QMAuO@wx4)Cy=9MtuYA$|$ODH%3t%yEE!HXb(n9DETqa z@Jm6y3pACv7o*9)dNZ2rL2Uyx<=2PNgP`QEKz|Iyyd$9}LHjd$CUgL!=RjX%G_?`6 zF~D1BEQrlm@<+-SSo9O|GGoaOS&TOXO11#DG?cCf%yH;s#!%g-F!nL%r;PapI+d|C zq0<<<06LwC-E(Fj3@qjG8DqbIQhk8UfX-s<1nB3CtplZWz*1ReGaj`y)gM?&JD0Je zq4U6e#P5MpIe<t0yO7bZLKiWX(k^B!*>4Hsksp1@*xk^jjHT-@V=U#fobjkXuV6f~ z!%D`Z@_)r(HcE(WunJhPI>12J1Ze0t0S>x0pbB(dz!T8*;5$He*a$X(4PbKs<*|kF z)1W^vlG=AG*pB{1?YM)HRiQf>Nxr&^u_K{We;}(t$)@`druP4dk(9^JjHbNzGn)EP zlu>!02N?M$^dKXzK@TzN7U*F{k$sLZDjs^2QH7z$7)5qI4o=`rT5IS@Mx{befzybG z&xtdPnhechOc?qbqs~H!bLeXx^bbaBD3ujx1wGH$QP2yFrnb8XE+fql=oLo4486)| z@<FO6Fp1Dy2D5`gB1ni36afM=hC<?c1iizPC`SxjU*dWM{rpqHMg(RSg+#dt`re@L z4+67|Lc)g#`VNtF4S*R)At_&KlX_6f3t(1K(DzO3JLf4Vl>=a=5(};}vG0ij2m{p^ zinbyAp3s{Z%xGe<Rfg`_675Q;cF=+h-M=wg5ks|y7GmgLE^lL02PoQ`p!+)3UWuVP zLW?kTkC%5asuQ#*Bi@82Fqlcj!lsNE14SDUm|Ybz!icw^NepIOg-m9!2b++^7|g;7 zS)8H!qfB8iGb>~XhVFT?B!k&nEHKJYAEobU0yDUR`eCdueh)3fU{+VivJCZSc^8A3 zULngd)W2nU2D86HR$!>F%exsxWvj^e1EBXXYB{u0fP>!4sBGwc0cdY|Kcm(`D>GQH z7mIBMQ2RW{DD?f<9&-;tsjaFoYA5vJ0BW~K7_|%fDB}-=R%O(7Xte-ptLls*J3JOZ zcB;Xs3(&^{$YwPebrD)Cfb3VBQJ0|P#{}8nNk*N6)(xOM>M=S5eJX(RtIy~>&;|jN z_tT6<|B(#?dP5sAnrz=VU=Z{fMpK?m0$zqb%V^58X}~Mc=NMfF`h37hXfsBqLYoJS zg1*4$R?rp!qoFMs-5N^g5U&GD2Q>9l`ivM4=osieQ0lA1`+)i<(0!rQCxM><?ZD`C zXvcsV&`yk|x^xcs4BCa!!=POQW<t9$dN{Ouz$|DFMrT6P0zQZKWb_DVuYfP0)CNG4 zt*A`IIzaUSn))Esf!GQ9F?u1ie*pRFfPj<G7a9E>^re7PQ1WA-H$th6iC+P=E70FV zss6zK5=!<0csqgxB^eqw@WPTvL-iiQsE46L8K2U=#^8Ml7L8=+8DEmU0F5Uk*$Cim zOYB)c_PkI2Lbd?(>@P<#SQ$ac(TpPheVxJk87$(+(DSBzlkuq@V;H=>!9tFVAp5_~ z;EfIzZ)61JF_zKipzkt@;@)HM<_C*7GW3iS^FQ*zf`EJusI^ck6HuF>A2R+t=mf?m zJAD*z5A<V3oriuBK)#a|P#rpv(H1(1@u}S=GyVeTlmPOJPZ@nbbSmRhTTKg~`b}qa z7w8PePluA<1E0z@lhNeY<lh99k$f8X%b?`P1eJGo0F`A9qcfm$8Jz<qTL6DBbbi2g zDAfUI`kefmI13grnryz9@%uoRFn&KM`Rh{TN%f{O0qda485;*BUj#nItz>+v>sO3V z?UfByAq|yhHRErEe#6ihk;a(>?Livrt0<TM62j{PBG3&C{=y3j4Kn^9=yw4RLpL&7 zK&kHmngx-Y0<J=-On{z?<rYSfUFn#henjO1n$F!8K<z+v0D2U3M*y8m_Yt5+Lw5yG z`|M`)>(D&`^PoR6n)=Az0BW~=jD8dP6N5LBLjKH%e9-+2-ckw~Wki1H0S0d_vG5;5 z^BwXKqi%;DW(1Yz2!l7ASOky}??8_+it2bgfb#!^QPd_U0-k`LWHgoSRKSzaUl~p3 zo@V^M&@+rb8A`qj)Ys787{3SfEJO1Mc*7L~Z(D^t$B41eKN!4$#e#thjUDmEJ%;}p z^g=*6=tV|dhF)Ss0Vo{<brbXoL-Rv;PaH!PfnEz}4b5eA3eJHW5h5Nc0}K?Agg~AO z&KLu}r06q1a}vr1bcUiW37Vh4+g_#%)G;(}qjrq}zoIc!Y+ME3#GF0@zrq{m81!62 zV+lf|jx<h)jTP!a=@@7#bAZf1n92$?+7$0vV$gRKjm-#+HdO@~x~HgH89fGCh@txn z-W<iyZ$S$)^nF79N9eXt*feI>51@B28uuJkl=1sR6Bz#sXqcfn36&T?=SCPGKCF@g z8bOm8e>k)l<Kv#BiZkSEirNoo__Hd(2&#9<0BVO)jG#8UGoUN9G(*pcstlvaeq|YY zW>j}En({2i(DS1z&uFr11%{p_)!mFH8&_oL{-N$+^de}bfNjuw1JDoDeT?o2y+44` zR|XH@UYZSkkfAwOno}cau8^KZVmt=L{UY|<K{iGoAn1D%@7-ePme8t<-T<w}_?gh^ zjK2y>c>z%a8bIFx>T$*&0j<f<{1%N@W3+<SW@6*jItUX>0Qn`*R4(#GpsBp%>mc^r zL;ejkm5bU2(7lt!rG%ajr8*O2XR>=k*ylZHqX5dkG2@dBp9!F{Hv!KAI=?C7e+YdJ zJdb>`pv?g8TZZiP0%OP?Ef_;~B0Ca`L2AHjP^v%hr$JjY{_D^-jQIje{RjBtq3r_R zg|-JBz}ui>z;tLQ#-9x(KL-Ar&@KU6pyboUR?scr2WWT3C%g3kY2XwfKO;_pUIBkX zdk6duO=tYKpnVu!0os@Gshrg3fxi$+egJ&3$pA)^tzKmOCD4}`P4*nfXll1XjD8yW zGNY-zUSTx(U<P;<`M(1l%xG$pA&fr(I+XF}K&d@|{|R&$<9`Gl&S<JD`908N7xHPK zDesYB6wdt~I-1dx549!GQ=o4!dKHw~1NhXAV;KD{lxzp|4^Xlf@Fzj34#1~;#xg#& zHJuOq&!O)z{w(M?#(y75egiy;qhsK&hSL2Mm`9=H)4-=Pl3jqm21@lOz5*WyY=lzX zfKO$oJ^*wT=tRb!0i|*Se<pNt0Q!ugIuI{_PXn4mr!xLZ=rqP(3Z;4iO@2rD64ZvD zF<4nqD7psf?SBI$TLAYQl={zXK(?Va2A1kIm+`kj=P`CIbUtG@K^HLoE-3jca8&+9 zj8APuz6&hnL;ecv4(OKvWw+g-%NQ4hE@x~ibOqz~L#fWd{Q@Oh1FVK3R5th;;X_dJ z8<gEqd8wYjQ9Y>Kz$1IEW3VEWpyxKi9ffXS+yN;08E_|{-!bkWl-d=zlhE%OcMM9l z0PYBMGlNx2gxbQmpP^(6;C_N`W$>4ALXlm7BO7dI9Hk{20Y|pn$vCnZ*&1MvD4}*U z9@%OS_z`t%4c*Il9iUVW;I)9#wSh<NPGtg){D<rdTr()O0dSND*#cOy6V)GBsvp@J zSSs&f#;5C0{eh$Ukxc<sDi(@t1RT|a+6*|VAGIZLWCODGuL!Szo@U%a=o!Y5ALW2t zq(OUY!FXMulJPo0731}SA`#)GLk;6~gIdO&f_jYC1L`wgAE;wI_@@prUQcKq#_J2s z%Xpokag5g+nh)ehIZ+>7fbqIQ;~9rK(X$cZr9p27MUWo#(|0glKWI@9M*Kx+5=ch) z3bYvG4TKg4Dahw#XbHv}1TD#U1E8fCuRruoP!{=IgWd(o;oKLY<(UxKuL9$}3cZ^N zku57SUIz3YP)&#s*|j=&9AUCUP0$+QTcB+K>>7FlO7#S;G?eTJ+yhW*C*aCJ$#%d! z2&FbdJ2?0_&9BAg*dBtCU4Wx7l^eKcp)Uc{+f{**Er2CEyu#4@z8=bW&7iL_UOVV8 zMv#q%GnQ<d$q34O1ViuKXdaEA_d+zjjg4{JLaClWqW{o%HO5cSF^p*seTxwh=-Z5_ z1$_sM1>3;8jG+3x$IzHhk7L9a(D4B~pzkvR{fqvRilFxi`a_1^|LX~iECKz9q4{b3 zaR8nB2_vc9vI3}%6B$XqG&z9UWeP)cMKp&<NZd#C)POzEX-sVHU^>Dxz>nZFMo>O8 z85*zaS&X5!_?$71K&j5a)PqtR0Mh|FhcSbpa~VUnod*^o&4bWIU@^i^LYIIq5vKN9 z%DDTW%NWxSx*V*4FWnDa$(a7ouL8)1+2CvBLpE6jzCjp1r`Ixu+H+k1m3KYZfHc&$ z-!i5n^gG53fo=>a3H_ci<g=R?GY-0$ad$(vfFDrK$DvyR?zQ?iKt2Hs`4hD(aJ8Vj z7_6WtG}#?s<t?G9oq&53N^Jui-5d5Yt}1jN<H|wFr-7>m{h7hug+f!?16LgyWn2X) zwJUIsL304gh*hwKKFiQpMU#I6`VQCU7@7;$e=zO|=%0+EdYormMd$?vzo`}aA|o0? zFENtrd6{u^tt*Tf1icD!QJ#BXF99U}_Zn0MBtSLeqpk*tV%!F`49)2p5BNCu2-Gq3 z9?^tA9uN=cn4sf0#)rL3K1RY1O@78d3@s3VGR4kE9`rjPa}z_hF*h@!CiE7@N86Z! z4B5uq%7~%RLJZl-P#pl-#uR4cz0lhkc|WuWLpC#aFk~-Nl%aQehHM1HQfQcw-Jyvf z8PA+iXfaS6kX=(4pKOJ`6oc%Fc8Wo^q<qT)vKM^OP`#<H@F#-iTFl*m+HE$d6tDnF zbpSL@GGtR?A)xwH28+Q1j6<8zJt78`|Dk}dpj86kljh-oHPA;G`fjALK@95KRT)kB zRby!EP2<}b-$Ky`2)e(R8Uf!yA7^6sIBH7*{od3H*aAhLF?GN;fc`-DGqV%Gr(^7Z z()H?teV_q&8g_UIivB>**vT|v9ND>X0Q#qShS8m&O~A8APc~`FsMXNt!1Lfo(2Sw+ znQ6{A^7j`QNBy7$L-$eBGGH?_mGO^4TQQFMMQg@C25l3t2ilhLk3-urj(np%<NpHf zz+ja}LHAa|KLPE;IO=CqH{hRyc3~X#xvq?V3fhfv1)$`|!2cE6gTYE~!lW_&X=qQz z-309wAfUY&dbTp@0n~5$1W?`kGX5E8KgN-t_h<YZ=m18OkG}|B!86r7Xa<ATON4oq zad$!oGmhG52pEC%!=NJ>`5<&uz?aa`jI+?!19n5-U?i36O-55+qV@)KKQ`n~1eND) z#{Uia4&!ctjt#gK`fk8}=z9#^r|G*b#v<r=#y<;vpK%4DA29U$3G-pVa_9tx?&apA z0P0^^4E_GXObj4DoWzLFppyf>flgt>Ea;~JYoSvE3PGm@M4{6I3PWcE9E4K7!2caO zlW|mc$`|<Opr132^8AAF|A5YB+-=Y~jQ=NeF5~E0WNRR|K<5X14_y#I?YJ=D5R`06 z_+W9s56~q64oZGNYz0dLLeOQ5B3qKJiQ56$mpBZ_rocZB{fcpvCL4T>_zTcgj4J|N z&FE{;H34)TY6IYtKakxC%3~cP$j0jfC~gBI$j09W(C6PV{$=P!#@zuW8v&UD-4sA& z+04*b)R0Yqr~oA!0h-H?*#)){cO$%wp?Q6?oe_^hcQ7=6AG<H_MEc<f?_y|9&g>2# zJM3XxQRt71e+9aiaS70UjDHpS6XU|rpBbNQNPP*oL})aC%5Wgy2$cL1&~I1_`2=tg zD77D;-?JD>2V4^LC?k77k1;g<GshX(6H4|1E*W})k-eZN8CMK?it%%yzcSdxMi{zp z0=*h~hN0(clf!88i{BWX4L!@mp0lZ6f!Omm^(6oo7KZu{a4FC~87HCSm%x>Pk}m?M zpcffe5=uS?=(*Bd4xqk8?ExhGz)%|y<WppK;53x#2CyTDu;m%@`+{8<3!h7PjIk@A zwHUh+S{u~CIjCboJ;uT&3H2Gf4%&dR8=wst3m?aR)-f!~lkhBPihSU^3C$S0722Ay zuxmma#-iQ{Z9zMvN8J)8Fc$Vt$YSg&=rYE_j}z!K;F?3JtSC#U0u=p@2z>~pGU1w` z2chUA3GkZ`<qe-9Le-)07a}wl3ZF?pdxgk0R1VlMgnEb3mV~$kiuNPa%}}%%A*w+& zL+@e2h7rg=Y#CJ*>M;WOhkb_L&x9Q#=vpC$-kpT=FamZB=VjD0&^SiG#^HR7qBQv# z0lS9_FpAQ|GvYbuO^l*6R0klQhf>`Dy(bA5WJDL}tqi?$2p3{RSLkgFy?+Q7W(1|V zouPLT;UbKnG<Pucej;3y5tJr@Q9YqBG9gAn6B&9B5RNe7U1$<RbM)b4MofVgV`xr1 zT$~Y~LecjKnja6NzY$_8v?QZGf|g>$MChFi&Gm;%Gh!OF3`2A3;j)Za550?_x$tl~ zMy!RFXK3C$48J5~0qETf&F_XQGLqWo9){+5!<86GZFMh0^S<Hx82Wu>_<n}wT*H+a zNj83fQG1~9dqR@EA7W@uHe7{~Wc!C1wHNvbBgwAh$AIQO!&MncHYR@s>I{_p8%VM@ z`7}^D&>D;+8$8aaE6|#ZBzx3i)KzG0Mv`snFzOog2}Y8go@7)mv@RnXLhCV_{PZbC zHiFh?H2G`;MmB~%&1mvpIv>bqpmYw<<ja%}$Uac|3}~`3^)Vp(LaAQ?P4;fe$idL( z7)@n-o{>YK%@|GPZO+J{&=(j@WpBaA*PtyKP4!4+<eSh|jBW>Q&B!s(HjHi$ZOh2F zpp*{i4p90G&~L%QbPRMyXaM~#EZm9Fq@5Z1Jy)3S1wi+QQvU~X0<;^W2SB?s@*`*u zhUP=VX^f=4)03h3(Qq$DE`s)EXbv)*&d9}3Y6C#?kzukskV~Nb7@DIDQ<;GL5=!L& zG-ny6YXi9yO4kE4e;FRg$TiSGjLw3-%*bz`uP`*%7|viM_4ij9no|r@djm;*nc5i8 z{9>5e6-esKuQ4=F86L*a@1erO89g1E$;ge+5e&^shDS1T6Lb_q^O51vjNA-;ouRqO z@EeTW10`PpG|w0&{{Zqdlzalv9A21g4dfXp*%#1!UYKkOWDb<<2=o>x*$&Wq#PB#q zlP$+HG=~~~pP_lp@CS@403{y+itI;z0~Fbnd<FRHpyVGw(sk$>z$cqi+W=7zO6>vY zcQ@fljJOp__677?oA4Ay6oP)r$XqD384$NYshxn5P-+7p3PZ{6Kq)BI2Z-CDGa03! z)CNElfs)+;l8f*cjJN|jn~@iwa~M$+I+u}`pz|1!0G-ds%g_Z3J#>T@GV%&^5hD_z z)UH5Ygp#d+NP~XKs9w;ejG#WZj8VOz%NapwRxtEifbdF2P@1n8`dvUcn-P@eYleO! z5MIRyO0$}w-wK4OUjadBs4oHf-9UIPBPb2EH=y4UgsF{z*bd#m(0kqRw~W{Ur9K1b z9dCFeBbz|KXEe1D`81HvLdlN-y~hfZ?*iEr`U6AnwZdB&`5bf`L+`l4R1P4Yhtjoy zrZ(Ei$Y#)8480Ev?`C9k=pIH>8~w=07od9?9f9s+WDDp|j8207%*d9|{S3Wh3r885 z3O&H+V$g$(Yy~~U(EGRWVMbD$A7SWSP53Aysr`>J^xh_XoRQ=UzcBO;CwzjD<QFFy zdY2PE#YpmzUm1G06F$wzZ0H$=-t&ZW7)ieK8$<7W!e<#tcKV&6cOl_(4E^ph{0Bqt zM#6tG^c&3Zd4}GTgfB3XY<ZEPcP8OWj6V{3neoZLt}y;6=vBriU%STmqoKKs51&gE zz{i*hZIS3e0Yp$Z9^8uf8qmTZ0r3N&5l|BGPeDt8@`#@UtpM&vd?#pS@F?Q<K&yhs z;bWAxHmC>RYX@xro<;iCpwBT9ZJyYSk!bV87Z`~)Pi)CZw0UAG=zw$4zKI<{59AO3 zN=#!+X(;Xsgv0d`aW5cf9ybyFpKw(EbcW_%6Z<f(KC~}GbB&4p7)Ryp&(M3^!~u+J z2z`;E`MkuJ7}p3&_5vmgI*7qv?~B9?FdXq^pqb!JAw)&!7%&d;uuCG<?GwZ=gVOoa z5I+$*9n403k3r{v1&F@~x(F;rm~6iUz^4S+fzAhl%DkKr4?<TkA=oYveSmOehp(7W zcW5?)opnVb{F?|-y;p%XxE8eu?t6*r5N-`!58#7hFcdzQ2>%jP7TnVaf%|CU_e_Xv zyNL-=n`~x6)DBy~R^*8`OWek|r=dH+F2qxs-C!^BJOKTP2~m3T0}!IN-Oq%mJ);2r zMf0qQ<XZr%n2SX6E%=mq35t72BJ4_Ytcl0LN%$(o;hsQ9YUf|UY2@DzdWH#6{8?}g z=gxrs3C<%t3wnW(U7!~k*$sM$(UkvXhTi)nUSTxleU%AO*{(66G$A6Wb|f!;OE3%? z4{kzT;46`v8T%yk7RJKoBL%^&n184XEyTEwp|>$^BD65L9cfxXi!io5^bW>Nf))i~ zq-g_9WZYyZ3KU5~Jms0p*r%Yy7>l-x6ldH>XbNM|?vWCVMcYM6GHwL4JmU?8RseUS zzLZZzPzl%S0KFI7k1%W-smwUC$phd)#J>!Eh{5XDB2tC1cS0X#Eam+O<3>RrWgPq@ zQkB6@(;`xhal@h28HamU<T1uJfYxBV1nA?8r83rJEXo?G1!|*gcR}kgwhWZo3Ai_* z)PBIuhf<r>L%1Q7Yzna2yNJ|h-0M)fHf-bGf>JtwU4ccU5om(&JJ4qt+Zoyvv_Skg zXiLVUx}-677qlm1zk#L$^n1G(3SW;5MED4F5P*&C0q84?{T7-5(1xCZjs&p17Z0Vf z!meH%l<EL1`dNg^4eTlC+l)mYicq<M&4rF-{N2!Z8H+v=c@MmgG-sh7F!nt3LofmH zm!MgUn+Bc8(EMX$5@W7F$&Z0G&?yYfZ$>_443%LjLvxxD$_voEX=FNMslGE9nkS8X z##jNJ$tc)8LTv+RPB!v6LvyT=FTiZXqu)p7Fplz`%h0@RWFABFsge0$0n(GL7BV!S z8d(GuqkX9?OBkB#jeN<_9B^bQLvzNFWsIXTE@!NSu3%^`IkJ+m8cKe!5BI=E(4WB1 zXj3Y~Atv+;l-d=9nn3B=AoQ#dNw7r{^7as)guDn3ZJY!n5gyJ>@))l%G{ksl|D;<O z2b(1oVm$au(rt`I`y_=KIUJhE$YIb3z{M@>nUu^}v|my&#=+i6B^ZtRC6xwcP@Z?8 z<rr@~v?3!$K_6l)+BvBn<H06L=$nK?TPD#l@M=MyXS^q%%@~i)YtDFd-V2QP6coNf zcy*yI8ShDGDj0(NDeX|k-w1sTWFr1m=orRB-$+8=B0RKj64?uQA4A_^JosV~*%x?Z z6RI=t$j<Kp<l#+*!k>~*R}X%gMD~JTdcQ*FGah^?X#wM%fi7gclTi3u(lVq!4Bf(b z6QEleZz6O%<I#0~2K$lzER@bUf^ZJ>7~{eJl1?xld@vb(kFblN@FT+Fddcu5LL=|w z0*pnUNWO`&=qJfHGj;^D2xC#+<S=7VkK{6pMITD8&DhtWXbZv)hqeXn5JsCM!+y!* zFvh=Ah+^<@!b5$Ep<IL)g%)N!)U{X&;~jv)4~vyV8q~EIu1k1Fp|}R&9fXczyhG4U zj0bxZ+st^s2vNKk<IrBkQO4pOQJ!0%uu*ZO^DaPf4&lQFDOq3=;=hB=W4y1SXkWtn z28weDZ#5LQBfND`*o%n8!|o~6))c>-@v@;S7;g=fj)AudO4k71S}1)6V)1l65R0eJ zfCt}6p?rb275Xh>={i(y;87gvM|c~cupMFRL(eeYIU!02#@hk4z(e{y&?<}vpDEFb z@peMnG2Sj{7UQiKq9klecq^f|G2U0uCXDw3v@PT9hGqctQ)-KnC=Y=h3`NO581Dn< zpN#hj^gQEDhoa30?<43%#zUKxyu^5);jzCm<Chhp4C+L9d!cCKGE`3ZOPQjKhijG{ z$k^YYuQ2qtZg=G}*!4`5E6mut@rnUuB0}*0X-Gr(u-lAsjQdoGC~Ql3+n@^M#ld^f zI8X-RV^EYY`UK`ZP?qSEjG6|m%P9D5v>u}tLZ4z3`d}1oNhsJn+5j|1cpnt^L_$}E zwqSHkXiG*@+Ehk2gra?;oshmUv@@f-LA!tq_zdn7(O1E6gdc*U-J)+HOzGcdY#-=5 z0QIx|pyR+~gx`dsT?vaeijrNXB0L95^+bExL(myuCc@~m(OKYggnxxn{eeY$M`ttk z8kEkT3){ks(RpA#!ug>K0Q#7RHja{AjvyR{9%VeL>+g)e1&TI~qW%3Jq42jT{3+BP z3ST;aHVX}cYET+s*!%$6?ZEv=kM=qMA3N|c!goO*0WA=&C&Ztt8Ly)d*CGI)hnhm+ zBZQkO<ZtC;2>U6t0;q#??}1_`10d`yXqOnm&J^-OgBZg55ZW+?@UoW3+}GyNkQ<X3 zvb(_U115y<7{FmE^5BTWO5_(G1Ys>Ii0MJth$3Ql5VqnzaW)8hqKGUNgniLiRu95h zRuVI~oM%WxFze6Zya=xh!f`i*^T~+(If&0MDyeH6mO?~y#ULz2QFvl3AE`tG9n?i) zbwnNHDUG;U2j!Gj#Oo75dJplJg0PRhLgRw46Axl0fb$HAil$c(&Lhg1DM2`|C~CF_ z;W+Fwc{&K^!;9TQK{&sNvz3By0g=a66_1G?n2Q~N`PELMgXoBP(}<`DixLsh7%}aj zb?{y^9id(bH^BdUh|V}_6H8qUbE@e`*8}mr@p-9OF6qd%H)bZv<G&8bn^N=<tub%W z1}VECmQr^E<?-qD-0!^MN)2&^4mhW)Xoa-*;LHm61xZEmkZ33xiF)9n8&cne*c;Q| zSmJ;Eq)DtEy>V5n>51~*m@}93E?nt8l=W`>|2|O}|2^;@Ug;U6i=e#SMO)~NW#|;M zO)JEvqc*MZc{|jeYSsmDJw$u_|GGuW{S|766lA47v9qhi@}*YjjsK|h)Lu7Q`tKaN zA^-BR_TwwpjHRd6Z4|p&I%c-%>eRZNqARowj=LjotRs&2K7U=0O3j|o2(_w<&+4On zDQ!gjoparP$)PMh`=_n%Mk^BRS^w_3*Gtn1GxDvFAGLmK{GZC%564svvM^n@ns_=E zPKTdG{;~!8TyNBcd^!zh^u`sby}LrmOFO_a^>KdP|JFIxkPr8T?kER^BCr<q9x7dL zQ3Ki=pL9dHDYj266?<D<T)!XApnlW_@nmUgcRK0=?TcgTL);^J#6Ig0v_k~eZWqh3 zBXZ{6_V3C<e$noR_Gyo_l=t5)Mz-jG!*Tc6_1eK6*GqTT4W*;j{@e2DC^cE~@3c48 zq~X7${ku-&P1n!-cV(`H68DPr2lA-4u@YZz_1@wcv?6)izgn%+zg&wfN$uSp?MgmF zo}P|;(qh^XpS8n(kKq&Y2x_TTNEgB1kK9<h-uRSk)hK3>4oE@m(>s<E<uCw8t?*lx z>+O(^lyo(^f8iUJ{#~mevSWdN{13bMV9HS{sil!tdf5BG$&kz=^I{K#d@{c*Amimt z@@9F9EGTcqt_Ziu!t!=mMBX8b$^;q4TI>;-B$H(^SzM;b60)Q$g?$rB%QCX8yi1mo z<z)qVx2!1dk(IE*^?mYwSy?_HACwQtD)M3Zh<sF5#jXU^gIx-0%39dLrw(?Jc~aJu z_2g5szHA_$mJMYi*;qa!o5*KnQ~8{HUN)1><qNWfY$;P^E7@AMk!@u=*<N;#9c3rk z8LPi`mEB}_*#qnB_msV4Z|vmINA{KdWPdq8z8KrpVUT=Tz9KW^t8%a$B8SS?<S?v> znu*;WM#@ogw0vE@A>Wi^<XiG>`Hmbb-<9uSABgeteffd>P)?8^$&ckHSgC&^)*+uP zr~I|I!VLMDoGE9?&*c|#wwxp9%6W3WTp$<9MRKuRBEOVN<ubWku8=F`S2A0EEmvW0 zi8b;Y>@TrSu9q9+xAHr=5qnK+lAGlg`GeewT_?879dal3AlNPU$RFiixljHif0p}Y zR34BA<so@k9{Fn>+!OMoJSBgXr{x)$BY%@;<?r&G`~$l^oR=5mMR`eHmRICec}?aj zyunpUX=Shrgr|JvR7mAfc~zXsr}ATc<#=_Ix*2;!V8wA&NZp2gB5qej)E%m*N>E{y zs3Iy!C97hpxJpqaR7q7z-Kk2eGODb)OO;dQRRwjos;KT!mDIiJK6SsUtR7GgV$X~! z>S6VWdQ??a)l_x$n5v;3S2a~FRa@0jPpBucwt7A6s!^ZT?pF;}Bh^?vqnfB^Ra5mG zR?Tmwnq%es7T9$oRkc#BWBXRLQ|(m;)lqd)omCgrRdrL{RS%V>da7Qkw@O!iRA1Fk z^;ZMbi?P+u2dS5_XGaEBkRGgtVDFCC)G#$%WvUTsq#C70tJkrc$D3-5dMma+z*y`P zfOYxRc=f*eKz*ntsE^dg>JycP9X}?i$!d!FR87Uow$p>%GiIsJvC8diHAl@=^VEE` z04v@u!oCAbu<k9bx4s<vgsj9~0NLtmwMwm4Yp`p`TD4BCR~yu~>N~X&dx&gOo3SIo z57?7no7%2+sGVw;+O77eAJty9PyM8RR{K>{9Z(0=A$3?CQAgD=bzJ>|y+=;Qb}%@N zy|8lBZ|bc2U7b^ZU_XQN>VmqcE~(4vin^+<VW%vCT}l-8_b}Q9dwqm-9-UXm>3llB zE}-MFm)6bt7F|%^stf7cbYXov_SU*X7u5;aVJlHbbdpZi*epk<=n}f5E~W3(rF9uy zR^O$|>GHaQz8m{+-J>gEFO>WA{kpP#KtG6GQL5;Nv0uZZSOK^ic8PjS*U*n+E#O+Z zwyvX}&`;{Rx}JVY*T?F>PwR%*b)m6-MmN#V>ZbZR{k(3bn`2j%7T5<ORkzZubsODQ zx6|!)2i;M3(w%h|-BowPt}8vTFGEk=3;Q#q>pr?K_5tg!2Vgg<m#}{LAnarE3U=9e zRSypKH5sOd>r6cYJB5wHZdI>izp6L&82y%hTfd{n>UZ^fdYm4w-`5}L5A_875q5O> zL}y`7u}Rq1YKs0;Pu0`(bUgzrlh4$%^ym5uJsbPI%+>Sse7!&~)Qj|Dy+nVhm+EDD zxn7}HVlDY>{k2|&Rpr-UMftUQonEguVDE_U^hW)?-lR9{E&2!S)q<T6^bWmK@6x;V z9@_5!D_j5c&-J{q-t|9L-PUJx4)0{3&*?w(pZdJMfZYZz>C4z_;Hti+a}EANigp>m z9s?G;4ER_}KV<UUu-gFbS`gcD04wzuGPhwZ{@YCvtdL*SB$%*C#7+xI|6IA;ls08d zS#y^uXUdxj=5ABb++!-4d(D03ep(0oue})_F^|S}<fx84Ick{4O-)nF)HZd@6R}+z z>Y1lZebc}^Z5o<Jrm=a(H2LQ$<bSUoPJ29<_SpNO<3HC$H$8bJaau>*^fUcqyFbv% z;e-C#17fflVuqU6%rG<DWSS9Xq#0#Ko7Z`raav*Ayko}3c8M7G&o$Le)<0K1H#5v< zW+tscZoUZiXqac_n+4dVVG-@qV7|mY4a>}Ov%;*zeht~?YwX#u+N?3(V7G&HX1&>9 zzBS*Ojo9B{li7@&8-Bp<2HUWE!;aYg4ZF=A+NpteaWMN$)EqDeu@AywbHp4q$FQH! zFXn_fX-=76u`c)-tO5QTRt5jvoWrW&v@-aG|H0mSz{^pU5C5~fQ+9?V1PGypaDhM; z2w`?+(x^Ad-KAMBh=>?qAq7%^A%xzpNDDv3D_{~@SV9ZE7byWD6lq38K$<8;MAV?6 zsCe)Do%1|%lR!XFc>n(1zuC`sPtM-inKS1+=Xsv<oU?OyLipe8zuO;VPYh=#Jj*FK zMW^K0x>r(JcT4KkvtQCG&Z^F8PCsXLr@ym?v!=6_v$nI2Gr(Eb8R)F%v^eWK8#o&} zgPe_=jh(^l$FzyFsk0e-D`n3_-@*x<s@at(;W_EUc~bgFc0StD*~;14*~Zz{+0JQo zMmuAivFz1UV-KY5*|%v&p3}Z__M~>6$o^HQ-Pt93rn<A6^L1x;=Nrx*&NrPsoo_kg zoW0Cb+#Brrw4Xf3-I=6MY@Z^}Y|nN~VJE0VoasE(eFo1MKfLED<HtD1I>%*CbZ57v zZ#yTl7t~44$?OSrDtkxGbWV5vhn<(c=bYhu-|2LI;GF54<(%#O(3$1TcIG(eIOjU& zu}9Md=Be>b=OSmGbFp)YbE$KgbGdn<`jyUA&eiPRbS=9zWluA|k>|qS?A+qq$}`h% zcYfsD;oRxm<=o9a5%-v#BJOkUcNX$I_y^fD;$e1;c*J>>og*H1o?wTTMeHB(B>TTS z#SSn}^VIlfvmK$F=baav7oC@!UpX(E=f}Uo^U_~4Pm_N`pPT-cd2;%n*n8sbo~Ova z%X8%4XD^DsIe*Xgqj0*MZu4CAqFZup*Ku9fbIY#p2JTAPljyVOt?P5?S9ANhtGoT( zHQY7bwcNGcb=(2&y6!-CJ-5YO-`&97&>iG%<ZkQ^b}Q~C?xyZ$?hto#cc{CC8@g3D za$`4fhq=Su5$;HLl)I(7mAkdOjk~S8o!jb;cE`A5-8Q$zu2$Q#x7Ch3jecjIME_-; zNB>o~J$n+r`!$|f|8;kF_Z#jW?l;{%*)e7uyWZ^W?&CJxeck=s@$Lk7qC3gm-#vhR zYo@S!%{2Ew_N+OWU1|<tADctj$>uQjuQ|d!k{xP}c8_7dn&ZrlH68A^-4osK@WlU< z-Ba9C-P7Ee?&<FTxZicZ=bqty-|cjN;GXH8<(}>S(4FPZcIWU^{Bzy&-1B*s{al`D z-*hkHnf4d!)A29o8TVJXSMuEat9fSrweEH9_3jPsjqXkE&F(Gkt?q5^?e34<JKQ_n zyWG3o1@1lWz3z|Q``r88h3*6HgYHA_!|qRbTK=Q%WA5Yb6YfvlMefhsC*7aBPr1Kv zpLU;dpLKufKIcB~zTm#-zU2POeVJ$Q|HggAebs%<ece2b|93o(|Mxtn{}1jTc~<{o z_igvj?qA#`?mOn`|L?nhb^qr6-TlD*huh_LdzM%5ieAaHJ;!rB&ntVr7kDeNcU^C< zkGHbd*IUI~)mzQ$=dJGb_tx;%^wwfmyLG$)-n!mEZ#}QYTi@Hj+t3^2ZRBn24fZPD zCf=srX5J8QbN0R4!VA5s7kROlc*DHm-Ux4`H_F@6+sfP8+s510+s<qCMtfttv0j^3 z^XlIA-VWZ5-cH`m-j}>DdtdRs>a}~jc)NOEV+Xyjd%Jtz@b>V&>Fw!#%NytI<?Ze5 z<2Af}z5TrL-UM%=H_6-IJHVUlP4T9B)4T({gS>;i)H}qR?j6eBT8FW()e-DJb(D9s zcZ_$ecO1KKo#1t_f7glLcf6Cllf6^ek?J&WCcAR{4?A*vkKLNS?{#`VVE?DHytBO@ zW;;rGbG&oBbJ<PmeD4BpE_**Uy^GlA>0)+zy41UjJ*DQeuhW&@RqXk6jdv}3N?q^W zz@A?>c{j6%)UDoa-tFFxygR%**~9B@_I<i1+t<pw&%57SnC<=KJ>)&ijv$YCk9v<~ zyGgOj*COv{-jm+Xb+@l)yl1^%W;-BwFL*C{FL}T6UiN<N{l<I6d)0f*d)@o3_lEa7 z?@jOb-do-uygzz>@)mn<dw=%+;w|ys@!s{`%l5|c{^tGN`@s8$*Ts%D1RL4Ero?_d zPT4Jc<uW?}1?82>y~@4Ieab7B`<7QJuUcNM+^@WPxqo?$@|xwf%4?U`DGw;GTOL?m zuiR2zzq~<t!}1{Z!r8byxLjf1pH126X$U(e4Q02ako}Y**%PTeJllbZeW12v|0lEi z6Z<N)vZvA*_ET!hc3on(CH7TfN2Q(1Un+mO{FU-o%kAY|%Da}oR^F}r_44lQ8ns9H zo8>*(ziM20ukzmIeaemUzUBSO<I5Au6U&pz`<D+WPcBa>Pc2U?A6P!9d~i7}A5xxP zKD0ced|3JL@)6}D%SV-uE+11qwtQUq`0@$mj(oR^^2y~>*wf>*^33w-?C|kj_V75P z{C)QF$aeD3eLR-m#e<zh*jJ={QF&hZ;_@ZsOUsv)FE7u}cHSso#oiy+l&>vcSH8Y{ zgYMIH3p;V$R=%Cxxb9$IuDg16+xl_&zViL$h2;mz50)P)KV1Gv`H}LY<;Tj8m!ByA zw7iHNyq;uluBX_c>uGkHV*jl2bLHpR;p;{A`1)1(W%m90joA(CHTD4eEjxq#j(xy> zUw$jwr>p#@^5XK_<v*AIQeIMir~GdDz4H4@_w35|>GF$y$+vyScYV(<`@SFeEBU?r z-hLl{Wxub#iodGAn%~b~-S6+O;jihh<*)6p;}7uH^#}Uv`7QqX{s#Vr{vdxNe`9~J zU-38bH}yC3hxnWOL;WrM(69QDANz?v%pdNL@JITiR<H}wSijA$`E`GLe+Pd@e<y!u z|4aUt{jcPEBV~J+_+R&T_rKxq;eXTL)Blz~&fm-5+uz4;`1|_%`Q!Zw{=|G&5Pyn4 z)t}}c$PP0H`zgE0OlLot8UA7Z;bwoBqx_@U6Xsa|IRAM61i!=owtu4k9seZ%<mGp( z^1tVw;eX%n^nc)=>7V7F?f=l9<<Iu#_~-cNvXj&K{ssPA|3bg%U*ym8FZM6-FZD0; zFZbvBSNK=@SNT`_*Z9}^*ZJ48!_zYRV)?iGKl1PJ@AU8T@Aen?_xShvKlbnQ@Ant_ z5BLxI5BU%KKk*;&AN3#eANQZ|f9fytf95~w|J;Ad|Aqgw|BU~v|4aWl|9Srf|3&{L z|5yIY{;&Pt_^<e{`mgz~`@i+y@PFsO>Hpq;%m0J_NB>X$V*hRb&;DQhCH_19yZ(Fr z`~F}3zxjXnKk)zIclq6c6%>MEPzvn83EaR7%7GsQ!Ae1|pm)$GSUKn$tP-pmtQPbO zRuB3IYXoZsYXxfu>jVRWb%TMydO=IDey~BXVK6AzDA+g{98`i$f=z?Xf+4}?!O&of zAPlNO6vROi3=4(_BZ85^s9?)rt6=M3n_$~uyP!1~9gGRa25mtts0Z5zI|MrhI|Vxj zUkbh)d?om5&>rj(>>7M6*e&>auzT>0V2|LN!Jfglf^orK!QR0>K_l2V*e@6#Ob8|h zlY;$&1A@uHlwfKwEjTbZC^$GsgF}Mp!J)y7;IQEE;E3SJ;Hco};F#dp;JD!U;Dn$f z_;zq&@SWhK;N;+x;MCx>U}kW7@IS$KgYN}r1m6!jgC7KE24@9l2R{sE1+#-W!8yUX z!Fj>?!3DwG;KHC8TolX;E)FgUE)6aVE)V7hR|HoER|QuG*96xF*9F%HHv~5ZHw8Bb zw*<Eaw*|KcKML*$?hNh<?hY0N_XPI_KMw8-?hh6Q4+IYe4+RegKM5WQ9t|D~9uJ-f zei|$aeil3#{5*In_(kw^@J#S*@XO%2;Q8Q%;Kksj;8(%R!LNhg1g`|I2CoIL2fq#8 z@D4j@au_C6NyjFd#+rtj=6{bgKg^`nQ2t&G<@0JN->;5slfSpsB(3Rj_0c9D>GvZ2 zUK9<_KCjl~^J;ChIiA#<m(-k>RF4}yQjQ;O&d29tHE*t0t&P#|kJ0as(eIBj-w)$a zazF7%IbS`L^VP#q<~;RK&RY-1XkN}=56yj5>!Dny9@gdWWAyuD^!sD<K4U%47;_$~ zS?VEa%Tp;|eWZSWq<(*-es82+f23Z2q+WldUVmhMee-wjORf`+mHVvLv|Z}*_oPkR zH_>{L`lsHtenR<Plt}wmM@l^<RXI;QO46|B?<2DN55uvNR`vT;sn4(~^++n^uj%Je zEaj|9{fBYg+&6M4<*Um5^F3`(ZI4>ddGvFs&uUG}SC#q;t98Bau_C8oqUl&u&y-iM zH&)sy9INHY&r{WMRJ9(f^1W(R+g0T}%IhnV_N&SFD38chO}<B7+Ot;GdQf?(iJTy> z`R96HV^w~~YCB24tk$$$qeROkazMMw{l&Q)>2>Q>l_$M^y{hu0<)~Lxo}^x?b*-1A zD(6eIpC+NoL7QAR%&#x~i2F0;j;e7kA1V(ut;bO+PjcO`D#wS_NcurF()Oz9ebrSS z<?pBk^LJ8n9#ZpnQd3S+^F2~?T~gB?q~`ufP5qN<|46jGq}?colrxfY(QUNe<#Y1p z{G`(URmq2m%6%ewioD2GBKitBl>3QCNqxk5|5kaaN7_DeUc^@0ClYz6N7_D-$VENU z{w{J$d&&JIc{`4h`>K!9^Ntd^tBYQ!)<@}iN9lP->3K)x=QV$)dgVUCvGRFMt{+zA zKBxyhZfu^K^U<%&`KV7*4${27<hW{no><#m&L2j(Uda2o%41FYXDs&<#;O-$)%*2W z?>E-_&GoJ5mufvW*Co~ajrD$Gz27$dew%*3P3x;o>s9-A(j!;qe8`bGAE`MXsX1Q_ zg_Y?;Qqx~ZRc@;)x1t~TT;*2u1bLNP>9^!fc}PupNKJW2_4?A@<n{Vhy?)+bBE7!I zaV?DW`XbNd_4*>m<n{W}Zshg)(thNnKEg!XGuHkh{V0q_nCpj$wquyc@zq%Sb4}{G zChcCWiJl;p^CV*L5j#D<$T50N@^ma?XR6Z9VKuiO+O9RZ4(H3SW4=dTzo-69B*#;Y z<~ZbB<f5i>QA<?sihbm=BG<9>8|;*nCs92XCL-@)o9M@CZWq<wR1@j<)w-5T>|3=a z`ja&OJil+bURCQkQM;3fyx~8XcHy$3FB8?TN!~9;<oZU>qxvCCq<z9%f47N#4@LeF zGwF|Eo18an6MY@3zfjHVU+=d%O#5$s-!(0NP3k)mJ59fq`iWEzM5;F;)dNv34|0C$ z!yI3&$@xiD4~w3`{^{Svf2!7`yrf2sNL5d3zpiP2uC<wR@pt{c_@mWYkAEcPj71Nk zXXN<0wohI3VYM#pLTcojG(S${s4ne{oJe`<>enP{?~>fU>2(t67qq9=pWH8IP33Ty z-q$c`*F^1oRqabW+Q?nCuJs-c6FCg^JXQHV>PGwFFp>L6{m@AC6ZNceILwrTyw=w+ zQ!i0f^b4ufQ>5|`4vVE<%J;aA`5vhpR~;^L66Jo7<g2ye+OEU({)TJ24VUsIV%L#N z(|@Wpu~XEGIX<k)_emum<^I)hE&p&W|8P@|YHftdtBeykuil6B`!Lq}42Ma-sE*G2 zi}bfp<OsE|dQjwv>q~j7a$WLz|8iZ_x?XpL^sB1&tE%?DYMbf@u|Hu|&mXD(8RdSY ze4qQ!`jUQ5UfXSi-nZxj<XY=9*SjKLe6ICU(|W0E`>5X?ikxs>J#K{5Q#ee^nO}dT z`Chd)QrmH)mP^M|HSt4fFD;*rXKK=~Fb`56iH=KRX=jd?`mT-<xeD7<kEvd(%Kc)_ z^6TdJq50fz6u+xl)BYH#-ik*{`^LH7JX-s)T(?>umgluU4>NK=|C0Nt*G&1yOMTaC zDi68*kI?dukk6|l<UF-eT3<4LLY`G_)$gp1(Q=J4?G}wydm0Yc{#;Z0BK|MqT`5;> zjP{Q)q6cbHZ;U5Yj@2IvMbGg)^Es)OEAL;U<-TfCAL#A;x>C++oAifB`~<$Q<<WA5 zxjr2&?G{NnafkA9>veN`Ueof`rM_`wWE@%3@2h=D)K5&*&Lp{A%JrxoU#*LrB+{?& zSB(6Un$Jm%oRFIPsD*M~QgdBWBR{0(`lRN*NliIPO}mhq`X)8<Kx*oZ)W`#=xgS!! zzW5vD_4?v>GTb)uK&sale}lYUU-~0?y}tMh<n{Vum&oh&)n5p6y(s-Ntd7j<)1-{^ z^HkeI{91-jdR*==Y5$E>ABHvU|9X5?##OYh%DKixYWjJs<L@MoE2*BYieHTTY3h?y z&#QVN62F!6s(fqwrPgzP{ant&xKqlFgD-X{A0KN!k3_FWp~`hQT;wj)ejBNO7OEW% zrGMkroA$(w*YoOlxGH`+pKCuCznuOe=Z&;}A|2P&<a?CU+$X8_GaZN5blg_cxKT~w zMD$<npJViX#~L}o|1squ)%MHBpCYG-i|F%2{eYy$zDWNFb33c!z?zN=YhvHSNb~^m zAng*V{jTQyRm#i#n{qL{k$zj1@dd*XZO^)vPyZf@on+i7^_Ga9rMzMXA}LoG>2<3b z&xo|WqTF7qU9O5A;`&<eQXbB)^&_8?*Lv4+bxrgu_DAG49IovsdVqG<`W8LG`L(@r zJ)+~9NbP=@`&~7yU$LuvPy0pB_l!Q^bFDXx|3%tgqFl};en9)G9+B}0_D<VF>`@r? z^n0<-N$wx!{Ymr~?WlT5{r^bD{fwWa-UwuxeiLi|Nz^~A=JB!NdLKIeu4*|jVA=N= zU#VQm^~h^`<o;Uj59xTSs`@|D^G3s^-Xc9N((zzb^dsfeewgc}e4Hlb;CgvEOgYJ$ z^VQUUCRP0^az@_B2dV0J(Qo8czf1j*SN$%20eP)Qkz4Z8o{7dU!u&o)NPmciOFKv6 z|4}ZLE76CHb4)pCA8Eg^uHPFWpI37^%j+}uAGKbqd7Lzl!|6Dj0FShb*bT0u@~`8U zT0Sn%<2G8(P~%jg^jpFi=Kk@MrCg!v^HAj^6hAAhs(e;ezN)HssydEDk%?Z`{t@Xo zHWK|FM%qsz=_lm1-g3Fh$LDhXYE8~hYU+u8V%nQj>sR~)#(Da8@dwCjJ!qV#CVn=b z>-WXK!9O<lOKQGP{7%Xfiyp?Tn|5d1C;nVr+q16m^t!Ywe>d_)DtfT4eruxb8;y{D zlIZv&$@Qj=rxNueLmfXP66dEq<a{-eTk1jdLZba8%;itV^HDBGxql#Xg#2p1%k_(1 zFH*lXQvWj&|DWSUPOJI&DAzOUuQM<-?Mwhz<WK$Sn)=f<xgO;;^~w3Poy9+{h50y9 z#vSC%`AF3-6aR#~_FJ(F<h9?5-5{_1R`q(A*SCyQ(4%tQs@k8b)<adxQ&oRE%I&n| z8L#Sn$#u!AJn40kyk2BpigBXer;ZCl88^{>(jTJSztZ?vq~D81N_$pwJE(qHHMfJg z-yr&va;W@DKgRs3{A#>8R5=TEoK?;3oy?CB4p)7x^Cn?F52JCeQ2cYowc3wW&s9}# zR8`)px!%g-MH*+S=J6#RKUa0!9H~DQ<$jTTpYp4GkI?!Rx#V-z@8XBhKlSgq9TGjm z=UN}R9ap^?>i99zxK1q}m*wNE{CXqv`jGxn&C4V6V2pQF4y2vPtG?BEWtfl0b>6Nf z^L0#X$$4Y-*TTGitA44<{3Lc=<TKRqOjXK-+~(Icf5-glbwwXD&eeLWYrW)gC$%$) z_TNP6g>azs*F^Psq~qa4{g*`jf+W}b5?>$;t$us%cd6cqWPD4!L+!QnWAa9CP~KcF z^*(a{PUm4mohOcUo+#GwaoiIJ7X1^eUW;{{8OwYy!!NN{v5sTwDz|YyKdSy`UF4r> z8B<PDk*m7Ki|X2+>KZqyYrm>Xf2h`V-npJ%C!dGN;|MwrUDxq-UHn$QC+$|x`=N~2 z!&vQPtmE1^?>~C~iR#rv>o@6%KN~&B@KM?$$^BX#pCl3wV|bYRDW={zUixvO{zRg7 zI8pyS(Rf6X&u^(*ChBh|+Wv{mU*bngdnY;$OmyBS$^Cqd`zC7V6OI2S>h~r(Kb)xj zPc$x^s2`Bz^`PyX=)7y9?VZTHDPeqR|3udrB&u%{U0)EYJco6aqrCp}_R@6+b%{gZ z7E3&-uH)sp&X3n+oX6iyy^~6RtE-<^*SJ_+^+jFdV|CRVb&ZqNMb9uTpyyG2QrC40 zb&coLb^StJ<2rR+$55AcsMaO^L)byaQL)C&Vr{oLk1L5hGOZ)+6{-D;)Q^o+KSXM$ z>pHJq*Ku}T<HU8f?{%H$uIu==uJRP;>nrkd<?=7{Qp|6P9;oa5YF)=`b)9Fe>$t71 z^R0CqztuJFSl2jOUG+&_<7su#8@RvfcZq%>ul1|*mUW#^uj@FvuJh`3i5oDVYTA?f zRDB}ja>6`1PSWvboX@}N{6$^;)w;$d>#DEoGM*tkA^N$l^Hg;mztlC3Ti5xFy85qm zo!6-Ad`4Zz@v)9u<1s47vQ7ZMRO?mazjYn2$9a5J?wjL855&68C)V{5vHAnC&KJe% zSJ!nOqON{-UB*$wNkxy>b$+6*{%Bp}$93@!t96Y_*EK#^SO2=M@yNQysq5<h#u~qg zH9j8eJYB5g(OBny>N<~5SO2W8^9gnJ)9N~}P*;Dgu5pjL`fYWMZ`Z}1pr5t=biGks z><gc(JgMJZ*Y!trjhoiRJ~B+u`skVWQMnU)Ok6|tuf`b?krTpw`nlS{MD13R&x@*m zn5aLO==eL4_+yxepTT)l4{N(7x(+DO@qVJ?xJ2ho6RqcAxt`VWb)xa&MCVBpwX=!F z(-LiuMCaub^{113zEsDhNgj_?eU#`pHBmo1(YRZpdLq$&mgqP(k?|^iliII*K2*mu zN$ywW^{V5LMC0&@j%yN)`zPvGCF*x1I^U4!d{UxuuSE4_BJnro<&0bqb`}2(2hEIg zLS63>YQ2P7PgT)JgmX-LkQzUd_@lWG^2To?HTs3mjlLmou0uXQUXRP;mr{=$XRgn2 zM!v`!y-!}hFXbnne{S>ydE<YOn)@Kl%ctcMd&>Fp<3%ntPR_C$sRxad;|Gc#q49G5 zuJw|~mDDb4+?>CQUe&lcd2@e^*UWiHO*u%-{gaw<keYJWbR0}-%0X)GkJOZt)Lfs` z+#ji_A5wE&Qd8fgdR@^=<n{XbxHBJ*=Hp%&AFymq^gkV0+F$G#(;On7J@v10%LH(C zT%_@OQn4qY#1Z(Ow6m@cV|kPQUHzs|>@(j}xf8ogUazm?^iaynItEid%Bl4ueg}E2 zAMrcLYyF7dL0;QM{l74u2UWcgsvocN#{8V#ulj2}@+y7-(?%+H;vbM#c@uk&o1t<m z;}VvCn(}d9Du>c<DVMgFjIYQWc_r2Ml5re)l@}SmkXLyTd(Cu&_6wPRraY$oS<aH* zM}Gf#xwRY;=jM3r58_YLZhD;PZSvY5#om$E`xU)SUd|t>ev8y!*7+&gUC%FaMSW;{ z=krPVddqxXN&Fn{OXXek8F`h9-0#wMjYW<rhw2lx6Fu`GJ^fhgL*h{^$Cdla<L|k= z=JNr%9*F50Qy;`Tv>w&o<@zkj<v#CEV#g@2wy%t1$!q(H-6C(wL#pj7aZmEvzGAm) z+V4nBIY?D+={&#2nW$IOKS))NslUsFN7hgIp1EI^37YmG9pxTY#p{)BtkXW+tu((b zTO=>y#d0Kb_;5|kNeQl~(hy}!KEIfDLLJnE;xy9<RH>>_(8Y)mr8de$gKXrbR2n>` z5zKk{T!e3!I;U+KjBL{&aGOs0v`M2>+cYTLrcO{>9t@OnGnXZm73m<PO^s-zPF$Nf zha6|h!<q(DPEsR`)kK3vkvaj9I(=>G9JcA=fVO-vqQV>Hlfb%2woQbT>u7yyXHw%w zy{ZxsBfxRm3B?GIH^ND3gpO1@gD6k(YHXz55r+IYsaG`;9H+`5S1#f-aD3jbru~@H zG4;mhD#W=_*Fi~}IIB$Z=jT(UD4m1v>-D8`keBxF=_ER+Y7^&&zvtIA=c~4<^V^mO zNps_$D-UVkTHZ<3xUmLPq&XDhL0;=sj0btGS1}&swO&P8lh=9`rA%JyRpf{3<>%9S z6=lwGT2JEKaGdrJ=@;b9bx2idNc)r5dKdX1pPxsJt1c$z^Sm6YJY>+sT5@eC861%} z<s(()DuW~PrhQ1Y9O49%H}^}b<;W-PWRif-Re6b1O<u1rgFWW7_4+c{Bd^z&AP{-2 z2N?vC*Xv8LgS=i}f~(}!I7*O}yk1{|YvlF%G8n6c(vL}ve39z)We`c;T%Z0W^;y-) z39V;7H}y&^SK3p9=;ZUyMJ_eS&gZ6mFnTISGI+)~iQMUA5^K|>KU7tp>5okK+#JVs zMOjC>I4GYyh(%6O-bPNavF1Fi0nzK~;62LgPZyCyy7(&6AT=G+IC-%KgH`T0kGUUW zg{GeHjio%X2ESrmEFWu7E!JRFtczk}T}&KnP%q9GOK6ZP)<u)CE}n^XF+r?BvRH$6 zu{w*f2IXRP#$pYg#p=w(>a4~(Xo=Oih;{H8>*5+Uj?`OjB#oS4PBfMK;x{|ePP!PM zyr~CLaTf3n#p%`d)5ZAwUG<sVFL~|%Qg4{GyuIaoy0`@Es&bW25~^O*MdZxUNO?!p zhh^4xq?)6ubT6i`<g)pgY(#yy946XSrzkm0v{qGID9&nHpEUn^{&%^{5#r)Rm``)J zBP1lt@hZilWywozRK-eQq(}G4h6I#)==gmPooF%?-DFmh@-O`ZH?cIsoh;38J4-X% zlgY^Um-z#Cx9m})mS(D>lBF4LW@&~yTAJauOh)ce-TM&|UM6~IdK9VD<uK8x<fX-i zsm2(l8h@B*TK+C|J6t7gm}o?zkfJGu<)7<tc9;%h$LO$PjFw}V^lWBPMRJDanpq`v zxD3niRz*UFOPGjNCekJ&)V&?95<6Tac1*5$BpihUCifHT@IiYftCr<F+M}XaEn%z{ zt*Z5)!(>(~%Kd4NBro+4>-}q3E7E0vq}mhI6RT=?K&Oc)m&jgKG&HiP8do$t!z}5! zV`P~+v+imU^*9aVGdnEh&~QF^k#!C0lb3R9n4P?wCsECx=x{dC_D{5(6S1hQ5|;Z& z#G;aydeiU|dA+_^RPuU#v8d$r`eISZ>-EK=l9&6`<<tBsO4>Wo_D<B(O4L(IwA~Yx zgG9oDd{4`v)5p4ehhLS6M^P0GOI|z)9T%|r%v_Ju^nFsXq*WOnk~i%{YVMoV$SbK_ zFH#*5sqTqX_l(x%h1H(a)C=D;@<?jxg;dKIx0&%r97<A^B$6bSB$34EN(v&m5t59Q zL<T+aXvxW7CLSv}y+TcLb(17=y+p2;$n_GrULw~^<a&u*FOlmday=P;a2Hyu5;WmA zbXu#rII^mXBlX7>{9S8Rf+OU$R%M(+-e_)8tu+ZAlGj?3U;}w0O{98#8Q-vGPp_|w zhpM`GNc|uFuGg2KH+j9jjBCj2^>y)(`bT`O*B3vCyk1`iqg7p`z_`=+AE7Q1tLkF? zss?-2?y;D_+#kU>BTd9A%zcnI*JrFNeoy|RJhgEA_(hM;7ei<;x2i$SYQES+7v)ve zud0f+=ep*8iKXcI^B}hjvRTAqdI7OgxsON}!PImTwI-7iOj=8MBk83~PMP{4#%83P zyy@NiHp$dCsa!YGU|b~Q6=G+4oGw0!q`f$geouN8i(yTD<9=%W$oPiu>;33BJyO3f z$``k2P&v|I3<Wps6N#m#zVmj_a*Ot%{Ca&2zE?$S5_8b{(V&fL0oqH;r;9YAyxuj~ zU+t+MZD$R3MEN2C4Q5BW*eL3mjMwsN(7URWfmPAw)QizhluPSZ{YT82+@}POXwSUd za=($bf0Qq3(aF@B{<yFv?MHQ)b|p3UM{3H$Z$h+w^v6q4F5hBRYWZTbNGBDm>UT#v zd0W-Vuc}xb<XX#@2g#-WM~{%}aXxcBQoUcXqD+b#D@6=7Pera1UF4dmTqhblN>siR z{c%&GezjU3Vzg2YwKn9XUK3q3ny7pyy67>{MSw}Z*h}R+(RNH!?h^4x`3;`PS)xI% zM1xj|#+%eS6H_&Mj8yueT3_<g&k`N)BsxAybP-0Pi&_(1<d^8;z(f}XCfaWk?T3jj z-cItxYbq~^F0M*++^1HV`jGlpt4m(wDUTN=y2vQeMMjCnp%RtzMEhN$i&7JnzeMFa z(Q#g)a-v=e_pR-siyspm_a*wHn?%QxiFi>={-`|YI5^S8;fXG4OmtCWqVkle9!&DZ zH@dhdQ9TuF`^NcXxh`6WwH;z@hgjPo*2N6!B{HWVdOOz1wK!kQpx24T>tym;<Tuv- z9c%r?x=1V5dW>}vA=V&&tdj|`)=RAQ5^KH0S}(CqipBY)wA!gyf20xX;;*=8ak0o> zto0PD9L1^^>QX)?i%or#8u=hK_sefP^3RQ&@VV%dy0i~@(JOV;ud(XADA(sI7m-fx zMRFhf)=Kq|dX2jHkKbGwIUzOIB{h13)Rc?V^k-62K2oD6Nlp1kP5&e{<s>!jL2AlL zYV<d$USH&bwQ#1MNcH+sALRA=8rQ69TvHc^@prwx#x->j7N6_&HO{C%M&fh5zQk?O z!$wb#>h(4Lr#~LybG>hk`&D(cQ_bUkVi$<xNICRJEyT0sy!zu}!q{>j`ePW5m-6Y4 zQ^`wx=#Px~zLZlJa}$q{^64UO@_Ih;!^lg!=;Cei(jK~ao4j66^bvV!4_(~KWRHGd z{4Mf&JstI8=*?)DRlz15A%4K<Q8Fs1=XR|pj*`dG^Z34ww!%D~Eq)5|50NungvD?F zR4#Hmtcx_F+`i>@P$&B%_4^`SG!f<giT2M(`(vbfCDO%akuE-q^v5ny{-YSx|53hZ zTl;a8FH+Y<fl<DAQ0+vN+f}s}QSKLNe~(lzM!JYC(!~yuE>ek9uSL0EsCq5ZMRAep z;Yjsxl*jM%$2(EJh(xa+tKS$)zhMqm^nav!HImUIaXr({q+%~4)tiyD6LCbbPm$Wq zNbPE*b~VyP6Ok^Ch-8$?9GPiHQt{U!^|K?jKN>|Kj%ehNRE~?)-;Z^2Emr>|)*pq& zx_CC$#ecCb`qL-{;Z!Matcw6+9S6kfU&i_)-dO#aSpAt;C!b?ow5L%E<~-G&=%jG0 ziveO?yb|l=f2@=Lu`XJPb@DS-KQdOoAl6C9SQn$jI*A_ZqLWw`#m726iFJ`_tmBDT zC&6P~L=x*HW2}?!u`U*gbv`ZDMI^D#Z^ikKL3KVWmhm2Qw;~6zjvr$6XJYlMV_oDO zi=N?lwZ}T1h;_UW>v$p7d97IepIH5&SjT&@E{2J9@q4V}hFI(mYo(1mlA3an8u=v^ zd)OxZpS;-1Hi?Rn7rWUe@<`su1F6wpq^3Pd#csBV{E|2FT5XelK&sc(#b|B%BiJ_m z@oSqdx^B}S6}Rc)>o(Cx1f}$RqCfZzsh&?4O||KwsWx3S)h7Cb<FtG_UT712z~`bD zb)JK$me^IDx8PX=YJcQ<tT8k7M{2H1YU+>F)E}v_AEc)KNR9p{HT6eo&PQtMkJQ+8 zQd5tl=K7?j9vN4d?~|JElbY|7YJb%6Q>=@!V_hs2>-e}X`hrEB(k^wq@4B{AUHmW> zDH=V2U!<wFTV4H{y0$}I+o7)VgMrHI7K_#N{32hJ&)gTOxi3<4U!?hcnd^`@->>O> z45_JCQqil4j;9kH*CjfxOmuvm=%R!~fBcZheBtQfI?j)EF;}eP_E^UWv5uc&{ZT}$ z<EU824Y7`=Vx4b}bzBweI3m{ZRjiA-+e8l|-`bDFzL3{`q>C=w#D4O*X-87+N8+!O z*Zw4ONM7o-P1~g{_cL|zV_QCNp3j4;|JtUDHrvF$(Qk|#k!nBA#~td|ChE5*>bEEA zw<qG)vF1qniS`%T$J{5Wk#|yapQIwMRhefZFY>DMFXTlo^hdtrMJ}phugHsB=#O=4 z8mA&vxe)tBUav3qi@aW6>=$|IFI9=MlQ;EDs@E64i@aW6>==2yzW8HAXH9=6)$2=t zC$HC+{!U)6Fa4doUSIk<dA)u#y4ODGzSCz6owUz>%-F1)P1{VEJaPKOLnj|Pbo@cR zviyw6(<V$Lv)cHB4?J++eaDZVc+iaLllMPh2A{1w{;27br%jtYe#X9&r;+c|lb<}E zY`>`oPe1se$%o39rcIobeJ7xY;)#qNdf51EuMMlv-EFN*YFX@3X8ske<JhO8$Y)#g zDp;+&3f2z13hd<ZHQx8;Rj^LuRj|IxtH3U2vv_avDp(7771-<Sw^o7uJ3QWd6?*aB zztEre^$Y9szDZ#d-iH;2@xE<gTi$0BX7GM&;aJ{h7H0B3yD*#giwhU?et+S9-XAPH z$ou1k$9eyG;pe=+S$LE8cM9)V1$Kg1llKAatX5z@hpl)YQyjzlSBhWZeV^h!ydPgY zf%lV&C-Htp@eJPQ73cAOE&Hw&*bm`W-WRaHT7lgU9^n1)BG+PXgBN&zv&gmBz2I$& z?MX`196Jb5e)bI5j`#KwJ9e=Lz+Su`#C}!<p67oY?{iCYd7oF}Dm;asoxOMh|Mk2- zSmIuIjy`w6Q}mzV{dxA_Ebw&v?EHT%{gwB>mp<UVyVT7-Uu=lMJCDWYy^l?c*{j;C z^3K!mc^_bN*F5{ah4-y&?%m$T-iG%t*<a#)qCJuKqwS-4|F->Y-e=jgmwkhM1Mj!k zxA4xB;Ca8pzJvFB?0a~>&%TfMg*L63Jp-QiMfM`ze_{WE_h)R%%v0Z~ne0jLR>AQc z+M1_<|I#Y(Z0^;0Uzc5h3p^ovPu|D5<9OfOMRIsXc7u1GjBS;8GWLPIAL`DqO5S1K zVOGJL<xw`CXM8^I*Lc@h1)dqZnD@8KZ(Ajv9Qzlm<g+OZ@2mN{@y=6NdEe9DoA-VF zsl1=!pU(UD{2O?`ot^wj*%MB!0#7)-oA-r2ca%Nbl=q+bKS5S4L%`;UtyZzE{-xcl zKGXJ{aS;2b*;$XEhh+QK6s+R-^w8AmGj-zhgRFk~t?YCD!p3wH%vlOnnKZDR?3;Yv z3)myino~I0`XRfyEGc}4eI~XoEM|{|2MTYOp0w93EOB}{y^5{b6TOS0c{cTzieq_J z^mmJUc`ufo;;}rxcv$gL&QpfqoPJgzn4Xo)NoM!`zyF#uL0+?muISbK#MyI~f9=)W z>npv_&cF4U(gmM%bnkh+@9O>JoCQ-K{^+as8*>&c`|8u5<N8ePGkg9{{O{Ah`kXZN zzNz>1xv|ev*>}wU`QKK>l{c7r-#<Icz+>~*YSU)Dy4snmojL1Od1e1w?fTXJ+;3XH z%T^ztuX+6|Q|9-dxBOZAFIqnTak(k;m#_2Bn(N<{zyA3*=S*0meT_+LOqyNH;5B#l z{56hTvupPJwclI|*12T%`~eHrJ#zN^fyZWi#upFq)z`5TZy$L2z(wngT(5u6Yvi0h z>+QMTo^$$Sui43Z)7JZA_L`lvJh$E-TlQ#quI0Je$%<d=k6Y1e&aNMQtv@CEY~#Kk z{mYzPcY18OPlsx5=p6H!b<js&a~5Qu$@@qDy6h)&=4Y>29g=>m>@V2#pv~+#3pRUw zsWi~Xcn#^5m137uq%8mJeaPN(hK9E<d(^Csy|&I?;S)POw$rrm)t#m-|H|*2zdknW zpz6^(P0K%7nogNNW&X%Js`I10NA5Od{?tBG=EsBL)039u>Fh7VrVZ~u{M8XxW`E26 zn!U2)vt0HXHDJ`6^1nGP%e{7;vtY}Iw;Y%C;w|TH`S4anxp&NbWxKz%-6grHeU{cp z&;Mx2o%$~==}yz9_W4j7a>NwsedmpL-dJniw8KC9|IR1Png7+7{@GE>{C((NTQ8F{ z*ZAs^UH02$zpVDM^pjuhm+i7&`@PvQ+55*zhtbZv94mFZ%PErP@4LLb`{7gj<TCfI zUgM6=|Nm*yaZPz4%~QrbIcEy*i<f_8pY65v<i%OK>}y=t(i{?oMKEOV@>;Ohg1!6h zy<cO{e(%nnJH9WRIPvz0_U!qy=TE$LVvy<0ISXbd6VIM_EiFrZ%~`<z=JS73kLaMG zd~*B5KWF(#egB2mxswJ?8aZjqq%m`bX74L_?J()wNtb+z*RA{Cwf}>8OCNB_<VQYD z-Dby6eqr*PpYgSL%CSg7YxbIQIRD?3KG4Fsr1y{`pM93mD*u~u;v9NjR)_g}CjGp2 z<xE5QY$$CtVd{XX`%S$Xi}!G5<>yQ|^pr!-p8DL>_ouCT#9N1^S?<tzhhBZ?jfWk3 z*eQqaaKx@hTyn&Xb0!>d?-5TN@vM3M=7_hBcz4c%Bfm6r;mn0|cAdHKs3}KXdF<R{ z=Vs|qC-J)Ss3k`&IeMo#ug-b(=q7)ef9#EhhmU=7=5OS6!ho3zPZ+})$amQJr`Z|h zvzZG!Ht49F_T*_#p8W2~@1A0xy8G<8r|y2*lc$c$KFeN6P4TSLPkUjeJ@d@delzn- z(&%%44Vf9t9J0c*p2-!LzS_+HPn>xg>HL}3E_)yO9cA{nM|X+;vtZ_1GvAssfzKzL zb^2K^AWa=vTh4lE&aPSiFg>G4E6v9y(jWL=<`rh?{LB*aSs%WO@5A5cXW!)2LR(Ma z|C#J$JvFmqA_IAv9hV)G^|4p+J5Pk|@MCwderRpWIPX!$eUJ0H-TJBZjP)bym)6VH zeby`1Yt|!X?DsfhzhkT?3bTt}EsV|f%qx7ro_Tu}x)_PgVpqR8>?GG(e3HH3jxsyJ zom+grWEan8&$q3MS1_g;Q+$~{*rpX<HM^$uX4kZf+5PQO_A(p82<kreWqXhv$iBt? zW6!a>+7d=g2bn#@W@O`~(&3Dk?9vh0c&T(WJBalw9m5!D=hCU{%XM7oHv0tomeSAI z`|45l7kh%etOjJ`8GA#<GcVbL*um;mdoa6Kz0SU2Z?J#W5caS7J-dhff!7x7T(yK< z#Qw^jRaJJXD%uG<RXO%BCvaA>hqFu7D)vZrr|NHS<FNab-OBD$o7!X8e`<(5mi?!; zu-lx-iR_w_IEh_n531qz_UuA6(%vE4hsxfOeW<pvcV;K5?d&gQdr{e6&i10Rzsg=z zJKEXaQ@h%`vHKMJk7fH!*}Jpf)FgWkXR<Td-kaT}rrZ0lx6}-KKX#Wo+#c_+vy?r7 zou$sOC$V$XEc*y{jJm`=F54T*KAk<GZnD42PEfblXR*7}6ZYBc==6;JLw0m}&Ys17 zPA}WDoj2Ux_POl4w3>Y{J1wnkFJ!N!0rmszwlvs&kX@CA+l$yYX*>J5Y}X|FdG<=$ z*?y6IlG^Q;*qi7A`&aBabhG^``w0Ei{#~{^kiFP_!+pd4bGHAF{g-S{9Qz$_x;Nc^ zk6mz%wclqCoDTc1-VeMV*neX`o2LDD_OiLu{=mD*yUG3sd)3@&cX<oFg?2Z4&b;DS z-fP~Qj_1AYz3ue&{^Gss^zqnL##uGnQ^x7Xeli88KRe2loHf`}#&_0aH<^{3b+cV$ zoPq2jvzF7s{xR!18?krHhE9cjV+K1z*fnMoXA5?R8R>-V{<5=EWe1mOPQ)%O-*aNi zcG|i-oeR1<UG@-n*{j|v6>qQ_JvleaIfryNo$1|uIj-6B7svc1?e5^Oo&2>U`>U0G znmQ?;$fw!4o7PI!1N5o~tq$v9D=l7UHL~v(pR+oO&s&YsIE(LQ*X*9*zSlj&TIbUo z?abvm7sBOmEnElJ1J`#qw>sRRumyxrg$QCuU>FRCHcIp<%T_GA?-kk9$9l+W6xP!_ zc!Kn&R$4mIYIrFeVl}MQteMo}GWT1E89wLtd@KLI4cO_ucrW}I?gMsS&+DT|OXPJ@ zSe21{gT0R%))*KIZBT<cY!6?9-Qer6JA4E7fN#Q{@GTezd%@nY4`i=>VLuoT6JR1t zg8ktDm<&^3Dold|;UG8|xK}H?*XeL5%z(q-a5w^vgrng*a1xvhr@*Oj8k`PIxCrLK z#c&B+3YWp<FdwdfE8!}*8m@tBf!egL2c*cl5pIH;;TE_RZiCz5M{oz+33tKWumJ9X zd*R1$AKVWM;bHg*JOV$3Mes9t3Vs1k!)x$cWS|%HhCZ+|^o3PmRag!B!RpW-)_^r( zEm#}YfdQ~C3<Tt<&;skj2CyLvf{kEf7z`EI1U7}uU<hmuLtzUDp$ZWsFbsyn2p9>Y zU`yBvwuWtB1{?;51MOCz-3mtmZAbjFQ8*5chZCR!z6~b=?OLE+i3BwYv}=KOEzquo zS@Z|aU*z1yZDBiTh0$;Zd>=aD2XH2w1!uz?I0w#!^Wc2A0OrDl(1aU+HX@qYC_V@e z0qs?!y^6F~@lkjjo&egeNZS>E20w?Vfc7gs4bQ-{@Jo0Oo`)CUMR*B*1;2*hz$@@7 zyaulW?OuEXeuvhgPm~UXCxL4a`D~Qlfp_5p_y=@Z4Z8p~_^=WnH#Rau<g;O~0?3NJ zI`oJ2(6vRV!A)pH>d583+{b`>bGbK{dvhs+$KO55>``WqGJ7ur<@PA2m;L<@@V?b3 z?+ldH@{5;H@=QA)gRVZYyVW_rJ9Xxv*>B0TdiS&F-e)aOkLp;_QC8o=FT0zC=ivo- zk?-!nIVN+iW4ha&Gtm0ycXc`!k!I(;rn>`cF#)SGp**j<qkM69hc$48XV{Um?ACLp z)H#j+&xHShGbrs3NoT<vI1jRtH~IV`$gecFJ9RIFCfowI!foAY&z1YE@XDW1_MUI9 zyMk|aIy-WgyMdgclQMTw=1$7oNtv6Jxsx(?Qsz#|OwGWuH8U5Rdm%L87Pu8|>+bBi z>iUJBQ^!xiFW_l-2A+ki4W5H#+M)0g`Cq}y@N0M-e%sx&i`qu}aP<i=8J2CU57nag zPIuFLx4Zd;m7+;0nv|mXp;9!do2Is9^CP8Lk<>J4fhH}Goh_5UCN0pU1)8)#Q(K@( z3p8ngCN0pU1)50BvRCSK=OX(T0-w_gO<JKzD=fYLPw5?Wo$tQab^fRICAxQ|ukC8} zD_%s8oClY|<!}XH?}}H!wQwC=4>#Z`(cg<V!!2+J+=YJm208=1llyR%;|%8hjJMXc zxW`ko&8N%wWY)e#r@OPb8Z^4o;t#u<#mBnai*J$sp}ScscBiEh9LN8UhZCR!z6~eB zci<#A8BT#yfx0hI_odT;`Y(MKz6bP#()XbgegJ2}S#UOR-4g9nnhms3=^Qv0XsZ%! zRl;*DT}(Ny>TWMx4cEZ6a08z|2oJ%-@Dq3h9)-u?ad-lL3X9-p^n+Wv+wEI{`?McN zR|UvSR#$D^E$FbNvXtiaM>+!zgTo<{uM;`;)5zEb-Hl9=KUTIX-R))S#@ck*R_Lkq z<GJG#x;xFCXLtG#|NjX*0!#0x^JDKI^V1JAz5H`4vDLn8N&hP^-610!?PsLR%Snro z6P1B--qu5xt3jl2h3);tOZsOod40K(XS(7)RZsj2df`L8=+oCu)_?z<HtjV1`r&2z z_M`m&F?bxFfS<x5_*r-7Kha)Usr#b!`<gNO4Elc7{|`4hU`5i{X$@MoO;;$1QkS2p zlq;yqPgkn%b$40=mMu}{rG9LwKAk>Xz9mH;E>{;4=Rp5Ah)|@~D(3pwSu9@%chbZ< zq|O%1O>fEn+vxGz^Z#Xg{V~+<iF|%K>G@cc3%Xl+&XU>BfBh`w%-%0ohBmI9U0<wF zXk|yFpLm3A&LN(DW{o<mmV(#aStx@K0jz}m=l+W|Xos)Co-hvff_>q5xU&2D>}(~! zyHVPvyJ5FbXJS9wmy7fqLya9rO`O>EGPTlSy!3h0&Mo+q&F+S^cERtu{@=dh^sdF! z!zW)UyVoZ7+T>oF+-sA2ZGMI;ryp~#OLhJiU4oCR?N46<6US4DX(w{fO4MdFjDfMx z1~sU|_V6{>4ZaS$!#7|L_$KTL--2<l7wirDKo$ww7xshkFaajQB-kGgfXOfgrouEh z5DtQaA$uJH)8SB<0f)iia0DC)N5gmEBsdvPfm7i$I31dB5zK>&;S#tME(2nN#F0|s zNGWlolsHmK94RG^loCfui6f=Nky7GFDRHEfI8sU+DJ71S5=TmjBc;TVQsPLdbqCxD zcfsAT0PcZ%;m2?v+z$(ZC?|2GlsHmK94RG^loCfui6f=Nky7GFDRHEfI8sU+DJ71S z5=TmjBc;TVQsPJ{aio+uQc4^tC61I5M@oq!rNog^;z%iRq?9;PN*pOAj+7EdN{J(- zg%(&JHh>Lb5Nre+!(gbuCa@`N218(T7z$fJ2vvw6fnhKlM!-lI1zW;aur+K0GvF{d z9B4P<NGWlolsHmK94RG^loCfui6f=Nky7GFDRHE<K)Vu0N{J(-#F0|sNGWlolsHma zXm*E%i{L3nD8x{RE2YGhQsPP}aiz4_3Zvn0{&oiG_n{Mh0B6Eka5l_=bKqP!56*`R zU@lw;P53v*VZ^0U;!-Jbsg$@>N?a->E|n6ON{LIQ#HCW=QfU?|CN7l{mr99CrNpID z;!-Jbsg$@>N?a->E|n6ON{LIQ#HCW=QYmq%l(<w%Tq-3ll@?!tR{<F!E|n6ON{LIQ z#HG?~Oh{}hB{r23n@WjIrNpMv(h|lJ?~uL=AHYAL%Swq)rNpOF;!`Q{sg(FsN_;9M zK9v%mN{LUU#HUi?Qz`MO)QmTaSf3i)M68{<CPtMKqe_WUrNpRGVpJ(Hs+1U2N{lKc zMwJqyN{LaW#HdnYR4Fm4lo(Y?j4CBYl@g=M<hvD}G8)FfSZD*HVgHSGQwKyq{~PTl z%De@HP=)`GqutACsV^?_-GPSr&xw4ChWTjpTQtmnZUlTIGfy@XJrhGVuaMb>T=!qh z|1W_{;iK`mw0Je2Ujxg><<jDfe70<C?pE@*K^CLClax3evwbPEeJQhjDYJcP@qR!L zXS&oHY0X5AW0-Aq6z0G=a4wt&=feds7cPV*Tm<uo2rggxhL(QC(L^czhog#}l)mwy z(l;o*L>TWRmC`pTeS^|BD1C#{Hz<7;eN1h~>aYXo4eJ7T<o?>~@H*fXSYmZB^N`K& zWHHUF;Tp(enp{1zS56;}>Q|WE&HckUa4wt&=feds7cK<i)p!Nme|LxNKmfgAUFI5o z-OY936<ESC{r_uCkT2@}zjLSbu1(-SeC`zKZb7<R@OeAGz<JdFENjBtB);nM^QcRR zd;KTRr8>*CR2Cbd#FkT>jb6`knNAB#Oz2r_qg=oLN9b$xv%}0fGgYio!RlE2Qt0DX zq_7gj9KE@*oO>~jJrb~>jHnkeie6+a=`hkQVJkQlmRi=7*{#f)rp#`o%x<O3Zlzd) z+?r<gC|eJdViB^M%j{8RO;cvNQf9hRN|#&H%#x<YlHNm1Y6aHR*ds<dPM?CssAQ2< z{ZOg1^(1+zv-J_5T<VLlQ<uP{u;M!qTekciG}WRmdk48iP4NdZi<;d<qbPT=Vyn9B zU94s9f?5BpUJLkvg$LkKU{!#TDJfw`kB5@gr_`m?Q@+j$sm#_Dm5yfC@OSWgSYqTM zMM`%=DzcW%uB86a3a_@bUb2?Wt}68)SIzvPMo+6{_q!tBM@y9XKv`e;*iwBFa@S!z zkmXzL^OZZP%e=QNmAOU#ROVJJXPMu*qMnj@ZcF9t4*s9Xmde#fdc&swRE{p<+gX2I z+QR>y<Yy(yB|ht~OXV=_X>la|BeEE)ESfb~#xq{A<TsY_-IwjFADv6jWpsJpz40%5 zzf0xU_^->{%}0CIhqchB)t$03K-%KtMkSd?olD2^s|7xJRFeDkxwL#_WRmqt6Y0ry z>8FvNWlNmv%}?7FA03Iv_(@8-y!0&97g)28NYB5jFGX{G+?778FV{3O`dRw;74%^l z14)a?7)b7WnLgWNz4Bi0&o%N#`|Zcs+!a}@?7lzV=H~tPvuN=Z_2~isRQs&hib)^+ zG_A5VzRI@HYJ8T|>f5shmxyc@k<X&zJ?n5;NoS(5xlYRL;)&uLv646S4&gh2HM6j0 zAug<0ycKSPyWw8=G293D!@ES}`z&*<Y!zvCE$NTM?6}TH);jmB7WR9-$+xt0OEsmg zj3y4>N_j@Z7#Is}Km_)G_3X_|JdV@3hbADy|4}nI4_H0x)t8yc$yNma@0`iW;!6o~ zIShuw2p9?fmu7Q5cJ}5Br2hNR3IE#6O+Lox_{bPzc^_|iZ|PS0<ZY09O_@iYX_;kX zTnouR01v|FGpm#R-r--G)iLq5Oh++G@{yUH&u3OA&Bg;xk?|9<;tU5?jGI{=#)}S~ z=I1)o6aGILn-h)JK%@QV{kCCwjrPC)Hx8oF{@?qZLp~oNW5G{a6a4X!`;Uv-6Foqq zeV)Ic$mgj)^Y15AqoruHkH-H#huELaQ)e2?M7+>opX=`_3cFiHbXW;&aKHr*%HTr) zD?u;l4Sir`=nJbr_S>%2pdYLb*?dJd1HLA#1#81PFaXwtfv_I5!1}NOYzTv3BiI-Q zLj|(+KAXa3Fa$P-p|AyHy0;1u#E^NH!(cd!fRQi?wuG%<YuE<1h3z1_!e|%+W1$Ud zP>1c|Yp@%99d?Irz#i~T*b}}5<6tk?8}@+)><jzBc$feaVG`^Q2f$>Q0#jic90&)& z!H~isFdYts8E_aJ4oAR|a5Q`ePJ)x+6gU-5gVUi27r{KZ7%qWJ;WD@!=ED_mC0qqp z!!>X%TnE>~4R9me1UJJia4Xyfx5JO%4!9HUg1cb>+ynQ*kKsPJ9~Qz=tzE$nt+1k~ zLWHh@A6j8WQH2#n6;>2gSW#55UW4CS6;>2gSW#4AMNx$nMHN;QRaj9}VMS4e6-5<R z6jfMJRAGLsQdk4lgtcI8SO*5cx-bydgBDmHHh>Lb5Nre+!(gbuCa@`N218(T7z$fJ z2vvw6fnhKlM!-lI1zW;aur+K0GvF{d9B4mQ6jfMJRAEI?g%w2=RuolOQB+|?QH2#n z6;>2g3MT^XTcCYeQB+|?QKdlpvZAO`m}OP)K`X2vs<48n!V01aD~KwrAgZu>sDck# z!3VA2gH~8QRAKc{h1Ek9;;R)_4^>z_RAKc{h1Ek9Ru5HJJyc=!P=(b)m7Xyr?S*!& z;4fD27b~m+suXE6RsmI51yo@bP=!@M6~==VRsmI51yo@bP=!@M6;=UNSOrvJ6;Op$ zKowR2Rfv~W@E0qr0;;eIsKP3s3afxBtOBYOe*>?;t3bQ63aC<~?O6p>VHHrtM5O2= z_==U%eO4<gfhw#7s<0BM!pusARX`P10aaK9RACiR#V&viKCA@D5UYSHtOBaA3aG*= zpbD#iDy#ykunMT+6rl#<8&>cQE35*lxQ_w%$ts`<tAHvl<zW?2#iRVJ0;+hFpH)B= zRsmI51yo@bP{sQLyl+)l1yo@bP{msPv(5w)?PezWlV^i@q8DYg`g87-S>}{k=9F3H zlv(DKS>}{k=9F1x)&&5+A!8mcWtKV3)}Li-r#OGgY;($NbINRU%4~DWY;($NbINRU zYR(*T=8!XooH^voA!iObbI6%P&Kz>)(5z~kN4oUPA!iObbI6%P&Kz>)kTZvzIkeXJ zSISJCWOEGJEcqvv`@gf~|NVtAv4O#W75-l~OP+p#v*cN9{6BxD{B!V>(dFVLf6gAV zwd^dpnHSG$)EZKFhZ$!ycJVPQ%;p(*u4Gth!bNZuTn*R2wQwC=4>!P#a1-1Nx4^A% z8{7^*f;-?&xC`!v1#l1C3qQ6(oAcRx&*pnJ*R~&r*R7CWcQpAWNA@d@W_eXBEUy7; zLIp<RExTG`nb%+DXlxZDeltUr-BY&8DIdKpKZo{dXF+5Rf_CWnrRUN(RkoTepSQ_k zRV$h~&VLQsb3Z+0H}kB^-l<h|_U1Q`<GUGmU|(9WTrF6x7A#i_ma7HJ)q>?}!E&`= zxmtQwJj~<&tWU{SJYZW|uv{%zt`;m;3zn+|%hiJAYQb`~;3c+Vb4SA%7z=H{i0r@X zd8vc{uIK&#&(kaNIl2|i@Gl>y?pWch{^uXL`PZL(k?HJl#G${q$W7W~lTPfu{&SDq z{8uaSjDi2I3;o~Y@qS@mZtksobiMnBSBhs^X{lGD&!6~@`&Gg?G}9NSm6kr6=L^tE z*0)UDK;r|Me_X=LG9KFwq&vcHus6Sa9S`#B<4&GOvFuZ4I#=-2nP&C`Hs=jiqy7%w zgx|wk@CW!K{0SDr+wf=j3oL<m;9YnR-iN=!-{9}?0sI5Hpu4->wV(h+D1i+QxZpt< zd|*|qyAt$*-q06TfmLB3tOqTyK5PIR!XVfPHip6Q8J_OOGdNcGlpW&p57GZwrSaif z&sJ;ntj_4Q++Q>Qep$ahUsaZkWwKR|_~({qFX%qaegvL|*Sb&h=E23?r<MD6pJtWt zqT7l8v}eyAVJ?6*mt3LUtnAdkm=&F}Lbk)ia9Ev#6g2p4f5<4M$tWdzre2F>=c|o- zRvKr&py<Sp@8q1F`0<_i@tyebo%r#c`0<_i@tu^QlM-|i+sgd+PW<;y{P#}$_fGux zPW<;y{P#}$_fE^>Y)#J6<Sb3j(&Q}7{0!z78%=WrPj2CQA3c&M>u_|F>ovJv7DH=t zy(ZUda=j+kYjV9N*K2aUW_HG|#f3R=4x9_;!TE3j%!Lb~2^Yb<uEn+k0rZA-dFIWp zyB2#L@Cq#HTFksak^3ltovqLY7x*Q-#V_G4ehF`J{}#W5w|W8fVD*8Op)afgs{&8T zvHHR4&>z--HDN7S8`gmVKpk2GVLfPp^<e|p5C*|UurUmV3Ty(K!e%f8Hix0G1%yzA z2x3TJ7z~FIFcL<=mar9U4coxBupRBYf?xY19}U_oleq@%)u3e?v}}WxZP2o;Foq^v z1oPm2;-3rQ0eF*h{vO_fKfoX1Pp}x?hCjn!0J$mM2hZ`e0OF#wd4o1@(B=($fQg+p z&|(d=Si_mv)pRC7$`b<)f$3c@BNGi|qJc~_kO`jax9pQ4KJrwEZ+E?1%AOJQ2~WyF zk6NW)aLg~^c_eSEu9xktyZ5lS>FTt%h3%jfM#C5w3vEz?I&2R+z>csJ?96C)0!-xp zlVE>104Bo}m<rS2KsX2vh7=Bg>2N5_fWzQ$ID#@AN$ng(xsE1(JZ0<P|3BpavtTyN zfpg$oI1hNvntcJxg$tnx7r{KZ7%qWJ;WD@!=ED_mC0qqp!!>Xn8iihIp65WXbXEa$ z6B;Mwxkw>)C&ccAwAA&q)b%{?q3_2$X(V)x=h<&3@VySwZ<C&Ao|hEzOs<e;a)msT zE5ts9Jd-QrnOq^y<O<PdA=<3fK|5fh8rY}?HmZS*YG9)p*r*0Js)3DaV51t?s0KEw zfsJZlqZ-(#1~#gJjcQ<{8rY}?HmZS*YG9)p*r*0Js)3DaV51t?s0KEwfsJZlqZ-(# z1~#gJjcQ<{8rY}?HmZS*YG9)p*r*0Js)3DaV51t?s0KEwfsJZlqZ-(#1~#hU4uXwf zV;Bs?`+2Td=wi=#u2{%(#X_Dd7V_LDG!T8G9VzNWiaKrP5S$@c1Zuz<fSh(Br=9jz z^pvBJiw^2$S^J;aeV)nXpf#!A_D^B|&9nGE)($p!s#k*^(vAc+?W5u2B_b<H3lh<S zM6@iG2%g7r2xQOYm_dmSgTvt%jyb;jNF?H6N_!*{@h~N}C~*rC(Sk&@AQ3G{L<<tp zf<&|+5iLkWi*o_G;Ek?(o!`Nm@OyX*{s4c3Kfz*n8~zM`fhF(`ybJHa`|wxz8~hzU zfPX+2ba&nBT2O!@l)wfDT=1X_J_N85^n%{d7gm8)VIZsrEwDap02{&}*a$X;!9WZR zX=p(jT9Aeoq@e|AXh9m<*>wgPvo^>)KD$J#yR-pz$mS_@_z~^)A~eI(%;UUAi({*t z9l91dJHl>o4Dh@#>No3csdF0nnUFnw<$p-ca|lUi!5lab<f)Gx?%b|L?uF2VTi{l> zt!oj|`BzGj>4G+{Hj%SV0z3$-SmJq-%%WXy_0gy0eDZT{GFkob6LLK4OAGcTiy>w) zVKYbNaL>-F$bX4zE)%;fJxd)N!C991R7>()cVGHOlU;?LBc|Lhd$%WY^d#6H4uHup z1*XC@I1mnkgMlac*oVM$I22|8&w8`7XT4p(Onep{ZO2BnTiFwmd&<Pso7QN0X9Ek; zX>Y?fwuSAW6-L7t7z=#Mu0b8P2c9x#?+81=QQfU*dHOzH3s2OtXYqf0Hyhv0#&@&v z-R$!K-_54xZG1Ny-_6E%v+>>R%y+vOE`dwoGPoS(!xeBPTm@IdHPjy(j{0rTf0sV# zE_;^HX)qIbVxPzgDNp2E_KAteZWGyUBD>2yArWby&P`p7pe~x+Pm?<9q|Q1Wo<HjR z4&H=pRpDE}^GKaP!k=I<ybXVbzd-gYBxW)kepT$e2brAx75)Z)hY#Q%!1Gj{Zr1Tw zPyl8w+!EN}fD0a!!G{1=f?m)Y`ob!(Dhvetf42qJhYesu7z7)^#xNL<e#dMah7`6M zImqvDB3fz^q}Z=RAoI@gk+ES-Y*-T;*2IQ2v0+VYSQ8u8#D+DoVNGmU6C2jVhBdKa zO>9^b8`i{zHL+n$Y*-T;*2IQ2v0+VYSkvi(Zd$;C0u-SHHekQ8VNGmU6C2jVhBdKa zO>9^b8`i{zHL+n$Y*-T;*2IQ2v0+VYSQ8u8#D+DoVNG`sYy=wvKEP)gXIZxC56E;b z16B$7=xcg!AMK}oS+$gncxLm<yE$+UoD1i{`EUWug$tnx7r{Jh(T7Gv=JyJ=V=dx$ z=ZpB=`67OIzKFJIEY}t%QeX5Q`YW>%)*`P1UV$a7oXJ)Kbf9;ird)pM!tT@1av`l5 zat4dmv}jGsv?gl;oFAc`|JC1=eEMH6T);>rdt#H!F%e(jSz`ZYbS7H?XRZ40o+bY! z5YHCP>_JLDI0U9c_T02WX15rNW@BSYpN)gFZ&)5j-pr9VbL7p=#oddY%eoi4?^+wU z@3C&prN%p`@eYn^a#WL}(7XI*{~4=@4Jv^RPG*n5gEIIKz)H{ydP5&r8T!I1uqvzu z{a|(I4{N}huokQh>%ah57Y4$5&;skj2CyLvf{kEf7z`EI1U7}uU<hmuLtzUDp$ZYi zkiak)4kKVBjDjs;E7%&gfo);Cu0;ip5p5ZKU_@J33ErVb-i7zzefTT<4gL-vz(1f1 zx|ylApa4ZEfeoyQDZ1c68GPW03B{G57x3hSVjox;`ob!(Dy#;pLw{HU)`YcSZCD2w z#}!!vQyd8EK?|%88^DGz2sVO^f#>KIE3gS{3Y)<Y*c^t!77#)eB8VY@VK5v<z(^Pc zTf!I^3ye^THK@b(z>}zpJV&~?6YLCMf-l2Y;H%IMyTGpSHP{Wl4!grQU=R2v><Qn3 zaj+K<aVzcv4cHg<gYhr{@Q#XjN5%c&0GJF@U@A<51K}Vz7*aR{ro*8y0}g}3;RrYq zj)J3sr^^+Oh2sGKu6Poh45z@U!1J+-JRiGwI`E9_;&<VDa4{SBT>_WF)o=~m2zRo{ zV1dzZ5%4ifHaOsd2W9XffR&&Z^oBmLGW3O2U{zQR`oZeZAJ%|1VJ%o2)&b<BgnX2c zj}r1xLOx2!M+x~TAs?kdun}wwgP{VOz^1Sn41vu7`6wYDCFG-oe3X!n67o?(K1zEr zQo<US_JIcM3;O~7M~QJ&X(CL5{ow$Z3{zk#+}E|J^i<a(oAU8A!_=m1Hf6IZn@!nl z%4SnGo3h!I&8BQNWwR-pP1$V9W>Yqsve}f)rffE4vniWR*=%IjMs{sv*G6`2WEcCG z;xDH7iz)tMioclRFQ)j5DgI)LznI!JsKfTK1MCPp!Ok!NCc-4x9}a-YFa@T<G&m5D zH$2=F4>!fbP4RG3JlqryH^swE@o-bdc`5!{YM%gS!PzhiX2Tpf2hN4_;C#3M=E8;0 zgo|JvTnv}MrEnQs4)fs(xDu{{tKk~BuKOwbQPM?t>OX@g;Uzq)U-Q{-;0<i8)BTj= zcQ0a`GtOD5`&Fkm`99W2XXWl^oxbE(A-@_Pc|Uyf)v*|Zu^?lx{1dwvr9j$+HG%1X zN6%PPp5A;s$9F(B{=A^86)(-gOSACOEW9)eFU`VBv+&X^yfh0h&B9Bw@X{>2Gz%}y z!b`L8(k#3*3op&WOSACOEW9)eFU`VB!(0KIY~rO^cxe`18pA2D0ms#K!GkjR5Wq^% z3wlFeSOr#vfv_I5!1}NOYzTv3BiI-Q!@JgZv8mtX37ct|K3S&kmFatB<hhJImyzA_ zm*IPOI}Scs)9J%V99zpb`|-_w##8J0lrh*cHkok{@zCsOyrwKNI{jaWA+{G5661aV z9wa{a5IhV&fk)s`cnp4SRz!w8?LOpb_hI1~cou#M&%yKX0=x(>!LQ(DV6|l7b@**} zSYoVFVw_UC2<E}Xa4B2{m&1Ix0<Hw&9Hr~w2DlM!f}7zMxD^<Gmu`n2!5wfX+y!^T z0=Nh6g&zauBi7k&7g@o%e7v)rICsOomhsW+)coGa$G)Wd!Fc|EEa_b8m$4l_(!Kad z_d1N@oNM7axE^jGF26agH59gh5ULPC3<(T_;m`&jil2J#u!{6uB2Re!<uzbU7>O(t z-FFL1-1iDgtdKTsB`(}bT)4GxE}RGF1Ccr6!mY%GTN$^vGH!1rF5F67xJjEfY11a{ z*2-AEm3C{T-CAk4R@$wVc59{GT4}dd+O3s#Yo*;<X}4C|t(A6brQKR-w^r(})vU2C zGA?$2r^^z7XeC~p%@edzZ&`h1^98LQ5i#!-SOV|ByR2XuV=?b!G4Di_znw1FZZYpf zl)s%Qe>+kBcB1_4METo^^0yP^Zzsy%PL#i$D1SRq{&u4L?L_(8Ei{X@I`oG%U`<#H z)`oRp0IUnlRT1THx0tK4n5(jwt0KzZPL#i$D1SRq{&tJGDvRfTTbsb9uo)2PBg)@y z4TUWrgepW3LjuEKIE;XiFbcMWtzc`|2DXLmc#8Oa@Dy`m?^-X>mtSHA<$j*)vJf7C z2jL-j7=8kez@zY(Wl`r=X^Cao17IuaH;Z@dW9qrxnLs+(%+0iBqmn}3;&W!rN5hO! zvfn2+SOFrrj-DJ6)isWN5XM<W*2P);mXbF<+mp}s%>HLtl+j{+H!V}3WeT)RftD%I zGM~2G*?1!_H=3%G(L*PrhfZsIr1&$<ej&vvQY^C@pHx#=KD0`TR!PwsDOw{%Yout6 z6s?h>HBz)jiq=Tc8Yx;MMQfyJjTEhsqBT;qMvB%*(HbdQBSmYZv_Q6sE}J1)Itz#P z&Sv6F{P$Y^|2izjGVaYNbssF<c+v@^lObhh@DP~JZ!<qMb4PDa>Fp`KJ*Bs&mRowC zGu_O$sBi3MyMy#OZOoAQrRSJKdEe?J^4LzV<0$KT`w`Mb^uDLF89|O(l{j$+=g4M1 z+U*JS%_HGx{?9qF<HRP3|1xjJxm!7RE6>etIAgHGZCxo(gkDU1iD(h+v^tumiH2#S zVV2G*UdaD{3D3g|@FHhi39H`+Rz@rK?S9Lt@XP)o-L|`DSBHC|WuXb!r=yE~Wx6`P zkh5CW3Fwt3dZme8!FmF57W7IJy+Z5&h_j$qn&_1#dZme8VO|&d0`V5~N)x@p%qHNm zpjVpcl_q+niC$@<SDNS*BLA>13<P2`=#?gVrHNi?qF0*el_q+niC$@<SNPQlYyz9Y zW-tW)PkV0yCq;4o|5sIab<gZBhuk;AA)+F#h=^RSh=>S?h<HTJcmzQXmoo-8xS}y? zkl=-9$bv+TqOSL?h$~)*M9~;U9dBdQ;1Qxm+5h{go}QgOAb5R~yng?g*XQZ#r>m-~ z>w2C#`sv+3Z?HQk277=$U{BB&>;?LPy@5!8eZT-P5DWr?!4R-7`Ok=v7FtdVEvJQ+ z(?ZK>U*B$*=%cj9D)1P1hVbjavj7cHqXB9(K%_@0(xVjVQHt~^MS7GXJxZwyrAUub z>O(2@p_KYiiu5Q&dXyqPN|7F=NRLvaM=5=vNZ=H0X)$xx<=(%jy9VU%PVGR=Wrr&D zX%%fHMcqjuMN;8A&Q@RwNm7a=DGdo9GOA86f=2g=+6uCg_@!->I1Nf=XUI#4t(4ly z^<Z;#W$;gCZ7!nkQ_2HAuz<-*6@mmvf&x$oia;aK7&HM*!49AqXb$AN>@7hn&>FM> zZ9zNG9?);|R-odoK*d{uinjt4^J|LP6{Wg??qEmI1MCE7J-ijDcq>rxR-odoK*d{u zinjt4Zv`s$IV;`@RJ;|acq>rxR-odoK&ASDy+MDl4;TOjf<a&~z~+YHdz#;&b`(=P zim4sN=!M1Tg~jNF#ps2_=!M1Tg~jNF#nhZMH78BYNmFyu)SNUmCr!;!)Eq_4QPdno z%~8}GMa@yv97WAh)Eq_4QPdno%~8}GMa@yv97WAh`UB+7-@u39BfxGL*0jfJcEf0P z!)SKHu%<m$quY6_DOM*l(e=Kh)>YFxqTlD$vSOcBkIqsoHH}`onEFv{kE8E9QFbOU z6S-LpLIMuTt9@zo7^!`V+NY>}X=-1Z+Lu;I*H2!Nt=nHRVwHML9dva#mZhS*ecLtt znpXKdEpP*P0kFnI9+s1b<>X;Gd00*!mXn9&<Y75^SWX_6lZWNxVL5qNP9B!Wt&Y4X zCokf){$jrc=TWOmlNX}9rFrf&txldf%`=zt%;hTDW0HGLo;U9~-RfAWo~2j=RR@8Q zfR$4<3XBG0z#(8PI24Qn=kdnlLXNW5x(NIhECv^Xi@?R;5^yPC<pm2bP4y6tvTLFQ z><5N|{Q+~H`T#H-90*8<CLNk|XwsochbA4GbZF9{NrxsKnsn&Hz<6*tm;jCdM}nik z(cmZG7{E-1W+p>3lcAZ((9C3LW->H08Jd|4%}j=7CPOomp_$3h%w%Y0GBh(8dMcO( zrh`)f8j(gL(r83_7GMqTTi1|l2(tqG0bC0hk?8BeAHfaaMz9jx1a1bmfJ$&HxDDJ6 z?f`d!yTIMx9&j(X58MwP01twPz{6k_cm%8lk0NKPz+=@Z(}FqW?VShD-=TOHI_upa z-l_N??p5Fsuo^rH&|=L8#Q!(&G59;!1U><ug3kc<Yt28vX8iw?;}_sd@D=zM_!@iz zwt#A8?-k(dq8?ut_4Wq+!9HLB7zhS|!C+rd0`>z3fZ^akFajI|MuLOEC@>m~0f&IG z;7~9Q90taN!@&e_1UM2L1&#(k0kR{K)o1kA6#8ol{WXRDnnHg~p}(fkUsLF>DfHJA z`fCdPHHH3~LVr!6zoyV%Q|PZL^w$*nYYP1}h5njCe@(@E70@3y(F>%|AuCwHUhH}S zX6>`PeoFmj@LGco?k$nDPhOzkrhT5x=h=Lo&F9&Cp3Udke4fqc*?gYO=h=Lo&F9&C zp3Udke4fqc*?jDw_{W0dz)wLM91l(aCxUt4bWjF<3C;uyz**pI@GEc*_%%2eoCnSa zzX1!u1z-{QEm#aL1Q&sud5&A?-70b43T^{;fP28b;689acmO;IR)a@D6?hD+0gr<x zz>{DdcosYlHh>oZYd8KY9A5>mgA91rNtIInOY-t7@GrD&X80|6&8%5D+DaOoxtv+E za<r0ibmnqq%*rh*B9<9_%WS?SUoCwN<A}wU5xr$ZZ)xlHCXTl;d+;Q)4Ntk9fKhMF zGl!%*eADd;Ooy8|e&%)uro*rKT4A8d6Cp@|Bq#*U*xAq;v;is3yMP{GC(xgriykR0 zXPi*Mc%Xz8L4yYM|Duk48G5#ig^+#vO3=`lr~>{nupGI#8f-wrU>ri*+WIa^EqSYs zMP_D@nHgke2AP>bW@eC?8DwS#nVCUmW{{Z~WM&3=nL%D=ke3<cWd?bfL0)E%ml@<` z26>r5US^P&8DwP!S(!mrW{{N`WMu|fnL$=&kd+x^Wd>Q9K~`pvl^JAZ23eUwR%Vcu z8DwP!S(!mrW{{N`WMu|fnL$=&kd+x^Wd>Q9K~`pvl^JAZ23eUwR%Vcu8DwP!S(!mr zW{{N`WMu|fnL$=&kd+x^Wd>Q9K~`pvl^JAZ23eUwR%Vcu8DwP!S(!mrW{{N`WMu|f znL$=&=)W@bR~h=N4DBpKJIm0{GWj)@_L8BUWN0TD+C_#ok)cgwXb%~*|LYl%?}TQd z?Sp8>3H#^jx9rQr@JjW?c4PHN_EpYbQ#;z%tKYGi>W}dETJ<X`5j3xUH)vJ;R?xb7 zY0#$n??GG6+p%8SzWV*3L-pU44%$_}rhIzaRgBaZqX|}^PZcwExSqb@7xWk9?2eGV zYiRX+{aOWR^?dzWF<W?bfL0%%)${dh#n-PDU%yttFw&=kj@2(Qe(6}<KPaibnh{Ig z*knw=z0vnAJ%`K@mC$?098n3g5G8f>x7vEDGNiK{{co{3nRZ@9JFj9aUBy_sim`MR zW9cf!(p8M5s~AgHF_x}kEM3J|x{9%M6=Uft#?n=crK=cAS232ZVk}+7Sh|X_bQNRi zD#p@PjHRm>OII<Lu3{`*#aOzEv2+z<=_<z3Rg9&p7)w_%mabwfUBy_sim`MRV`;25 zfStiEU{}x!>;`&+-9a(f1M~rVg1%rc&=2el`h$JI05A{?0)xR2urDYf2loR*!Tvz< z{Qxi=90*3B?H>e2f`h>*FdB>jhk&u*P%sW0hX3*4a4-QJ0gePmfuq4sz%k%ha2)t4 zNQ2|S3E)I<68IUI2u=o*z+`X=m;$DPX<#}y6_kP*U?!LaW`j9kF8Db(4a@^)fwRG{ zz&YU8;9PJ%SV-D00E@tH!D4VBxCmSfE&-Q<C7^<Dz%L`ra&Qe;0sa841=oS=!5_g5 z;6|_#+yrh0w}47;E4U5Z4(<SVg1f-o;2v-<xDVV99str-9|8}9Rp1e@8axWB`0o1? z9G?VFfoH*b@F%bVyZ~MV?|}DcETK9{CqNPufI?7I{Sr1=6gF8DHdz!S6opL|g-sTP zO%|nFfR>;Yep_>F0~qb=cA!1z06KzBfYH8Afi7FF)?GPv1Kq)npa<9q^aMLskHaR5 z!X}H-jP^DC0ybHc-W?Q!JplazHdz!lSrj%|6gF9u?hhF0>j7XO7z74`A&fNl1tnlV zz{(r_ewuziO~0R}-%r!;r|I|8^!sW0{WSf4ntne`zn`YxPt)(G>G#w0`)T_9H2r>> zem_mWpQhhW)9<J0_tW(IY5M&%{eGH$KTW@%rr%G~@2Bba)Aajk`u#NhewuziO~0R} z-%r!;r|I|8^!sW0{WSf4ntne`zn`YxPt)(G>G#w0`)T_9H2r>B&*s_Y0P3@*K5ObT zwq}&3P9qc2x{Tv5!F+HAC<kYP1%NuQsq@&IQP`VN*qc$BI<L<I)O-CKun=4T7J=V_ z#o$745x5v!0xkthz-8caa0R#$Tm`NMzXMCb??DBieXuu5>1(PdGFF?&SZyL>wTb#V za6R}VxB=V<R)U+r&EOVL32p_qf!o0y;7)KCxEtI9?gjUO`@sX?LGTcG7_0)1fYsp9 z>UE6O)-hIFr`K#bT0ah+08fIaz|&wYc!spD1GF7Y+tIWg{Tz6{x{?`)N@gG`nSrQe z2BMM~h)QN4Dw%<(WCo&=8Hh?|AS#)GsALABk{O6fW*{n=fv98#qEdgrs>k2Jhu|ad zG59;!1U><ug3rL`d~uojj13@#4IqULAZ1Fxet@zul#QWm3}s^|8*Bh6L)oymNnry> z8Op;@9)|KTl!u`_4CP@c4^ssm18czJfc^s8KMLDF3fn&l+dm51KZ>`D6t;g9wtp11 ze-yTV6t;g9wtp11f0TI%`~|!WUI81ytKc>8I(P%T3El#4gLlBY;63m@_^VR90jIoa zV0CpBc7K$|eLUi3jJ6KjKMLDF%wU4A!8c$Fla(5n>PqyVwD04#APEXUAt(ZkKx5DZ z>;RhKw>ig_pcQD%d57wC?8j4nXK;&Z;gc@(s5E+18a*m)4U?i)wXlKOXhSu~au0Nt z4{f39Y8%0CtQK10w@q>H0Gi>Cd$8iq{J;L(_EN9e0b7o-`)xVe4uyXJ7@>RFgTP3& z$sP<wZAsYCU_89TIiCQI;QVyX*;!}L;=X4S-><+q;MagQYtQ5QZ@@y%F93^hU&!$y za51<9TncXqxEx%;`IX=*+*gAYJm2l;Rn(nesqPj09#nv3)gK1S!JWA80(XOZIKLM> ziN5v}ppFD<0rdpiNh+Y8uy0WXlxbKFh&QAjgw%tOdJtv+*U>-IA$1|79)#3`Q2c)c zHo@l|3HCcGX4)#5X{!vsz)iWMr!vckYU+W50riE}@jRmpMi;ci3R+?XEwO@@7_G{@ z%rS3ehL%`CORS(JR?reFXo(fHM41n*;BFP%tpcfSs?+FuY4p7``d%7+FO9yJM&C=L z@1@cA(&&3>^u09tUK)KbjlP#g-%F$KrP24&=zD4Oy)^n>8htN~zL!SdOQY|l(f88m zdujB&H2Pi|eJ_o^mqy=9qwl5B_tNNlY4p7``d%7+FO9yJM&C=L@1@cA(&&3>^u09t zUK)KbjlP#g-%F$KrP24&=zD4Oy)^n>8htN~zL!SdOQY|l(f88mdujB&H2Pi|eJ_o^ zmu4qlB|G^l*~wSQPQFTZ@>Lp(2HYH^nK@={!tKJE&+!b_EZ9ZEd`t!HHNBl*`_6wK zr^3!)Bs~+%VH_`ST`T}+bN(xE4)`@#2-pEaeXgKBS5TiTsLvJD;R@=ojKtG+Imh>z zvHmOg0Q?Pn2tEQIgTDir)&2y03O)nar($PJF*{?5*%?#J&X{6$#uT$NrkI^E#q5kJ zW@k(>J7bF38B-i6paDB20uT7Wf&hdd0g?cFSnP}`W@k(>J7bE2reFuq40HmWK?-yM zT|qa{9qb5tfStfHW}SH^+FAu|t%6QYEOS+WW!1%Q->O*FN-+jcaV5nVJjED1#kypQ zoewE?KBU<BkjlNWupBpQRfJ3%EZHy)PcaTpF~Uj7jK9qAGa^fcvaZB@n3BD*<tj8Q z+}_wy%BGyMDX~|xY9x7mCu#CztR9shtE{2SNqWrLS$QMqbgnF*U&1f(rWq;9`sug* zimvSJOMBE$pLRiCTf!a3y0>*sCmq}RUazste!F|N-LCrkICYu%Baitb?^){edhjP= zi0;WsF!fU2DXaNHeN<Pobq@i=+I}{dq&Ak5J2F$WfOpQ=jY9b`i<y0QWHHigF{5GG zz0Eo@sVuekl1Jjlm9LZ(ekzod0{sf3rZlBI77Z$mpRvR<7Rg?UP5x58qEIgPX7_R_ zsZ5i?V(wZ&%<}vxW%KTwD}Pq=9#a{`Y@S$r&shO{nYdnYrC4so;#{<jQ+IBsqIxkY zkhdhqQh!R7*?+A<?hc<jW)0)A!|9Q~-wz$*KlQ7ALhf8$&fLVm`SIN16WJTN8um^( zyI(c3t>#DV_|89Sh5Kbwy12S&Ls7As8~IvQy|%hk!bnQ$r?ff~`KzI|IqcN=fqtYS z{R2eRb8B(LIlZ;(+v3N08u_VSS^GQ=SvzNP+=|$hf2>`?)thQvqy6NcZ@;@HUDYM7 zOpz=SnsRMgH<oJ0z+W0a<#IwVl=q`&;3srThGPXM(CYrxZ`a&q%Xdtt#1;RdI=7`_ z%c_{uz_C(zQHsTdG}-E}#@AN8)Vff=&eyv9-A~qk_n_Z5WVO3DEvo6ZVq$JI+v26K z*q(fd;@wu9|MprcSJ%@ueyLX*qW+3>ydCpvx2HUQ&PVJsdmI}b<+*DAzH57`9m@}O zR?~hOiZN<;4PDtfuNv)#Ua9F8^aK9cd>}82qcGWCpgcc@>ameOt#IXC$WL9qJ8J9s zwPZ_WO)x#F#{HwX(!^ToVis5JU%K|`4|A4nLyNOd+y-q&iG*snE|F8^+_w$??9WNF zbbMBGB-gX0Qp2lpZL{>#HU9El)jg{h(}Ie(tfF^boV`*`N>fo!S-W4)4;i`hOSz`* z5Wb?uZ?zH)CI2dKc75w#RwpT;XUc^p<?cSYly5E8()j+hWv6&2hLhr8_2b!Qp2oqp z^H@LjY{2sEj6g{}YWSDmw(@;!^`7~j{!iWc_2B#6nBFSYPz>=Ms#j6ElsvRDb~WVR z`N%|9YU&mt#=0vN(UosY<5a}qwptS9v5$XyOmEG{4_Es65}={G<s`7GEnyq-8}VvF zY~9ayxgyf)--WB`h3dEa`eEygqj*oOzMt*m#3AD{-?FKpa5-NUaa|K%|E|ZaAJY#q z_NgE3wm9i+UHng8t5@6pPg7dWszu#jO&zRz<$w0P{QolL^-A>H+}x!!zfb=*fxoR^ zY3*@oqnU6P{kE)k{B(R?`<Rsz4fYVVeaacy4=Z9n#xL%TevG)kZ=88!jP$pQYs;#J z{Y#m|zqrieb2Q)58h4E=FBLV+oJ+Kgx<9A$m)GTf_w)beGRi*H*zf*yKS;<1OYR4W zc{?JhQwP$yAT=&n*&eNi=UjEd;_t`#IbAqYKW@=GeyIAznDWE=cla)x`fZa`F5Zrq zHf@I=yfhU5_JyqLi+nAQc+88glF>6VplMxS(fO9KF+bJ}YioT`Pb0G?PNtNLZ)RFL z#G%~zR^rb0Q{OG6FF#5s>yns3?ku{#ZCYQO&hH!Rm(P}O6?=5=sFl<o<JG@+!)c9k zw(iyXsmu4#aL=FbqrSVLmh19#75Q3G-~V^v{4nuUvy*}}mE@;j>utXNJ-0T}U?g^0 z9A^WeQt`FzKceSU@J};$RGJ@3&RpJB<a6u0#ZUapk0HNS)PI_MtsoBl?~YOFi@sM& z`|l99sG8c5b(Pe_s8i9?)NpEC`Kha4XUUgu-KL_F`S+vdnl#jQefN;H<B_v%##O7t zUD(A+u@Ni#t8qmPInT?jDD<Z6jBgw$|5%=X^55yMsWm)XMcp*!*XX*}ws!7XPDS-t z<WjBtb^Nj1rF?54;cu$FZkFG={!NQowT)P}>rzzDx4ge4)sXkN6;!Vhm(&8m7Ur94 z|6+f&xix3i{cGI+oi5&m_@Dn(ze@SAtF!j6`fs(*<*ebE-TMCObG8)M=Lx5}O~ZVy zlyCJ)YHL@7U!B?3)dsK8&i-Hd)$g^o|H;2c>C;m+^xIP25LbA0(wVOD_w7?5I!jIX zZMkac%lC-Sn)>N_v7+ibqVTnQ>utsP?XGQaO1B<swM%!y*V*M%+VGWc%l&rg%$H2t zcc-nl{%wUv+oPtTg{7qiZ7q#k;}fQ&;n?eIdinmo(>Q7@Z(6A><=it(>^<4#>v|zs z!*{9g$rZ=Rzf+BSONF?_2W6TTcl7%v6T7(56lBkdwN$BZHq~6Macx<QKkz+&W4~wk z|JvZP<8SM~?^aW{9^d!B67Q?Y&S-uA2x&|CkuVDUFDz@PX>JmYF|PBH=9<;RTHFTa z!T!Cj$$Ng^`B%NZZqPVSqvMvv`Ld_RFFjg?oJnt1)6Tb*|AZ))5cxmCHkI@Gz5mvG z$^7vDmF|)sBURr^pXcqAdcTr-oF9o%ztn4P6xX#HPUPAeKi^;eNHU-Q@7-I{;-~&> zYkf`}m(=S>vc;VE_-#@V)$%QywmxqZ$5zvh8g6~j__|@Opy6~%dh55c_$mH3j{m+V z{9&G>*38@w6XlN*OZ~q4N4d>^G}7v~8oqrky|6Urr^XetR^@iVmF8UWH94l;Nrj^- zUX!V_Z!+?e_41!SY^y*0&!#P3llk5$DN!ZgJC3bJATvw<8^8MVUq61jw=I2ZBvQk( z@{tUa*${EXTB4*{+>u_lrCiP%`ZX-m8uD4gtJN3Ouxna#KCb~c&yj9`?O2RYQw?4F zF6nG2o*#}^qci+)asD_lZ7rqSu6I99TBwobKUT~?biCV6>3=5ozRNRiwY`3q$o|j6 zRAVFH|NrIZz<)wU<==n%-PPFb;D@D+@Akva*#FEg`>a2DdcSY!*MzTe{Wyu<+F0Vp zx!eDJtp6*u^9LO#Y<D&{v~IlJf%n>OpFg_CA8yni&&U68Nv^+>;)jd-zc;38EC&7e z|FC`eKl5`vwZU4VQA<d41=c|>#X87)>H!^^F>0e3%fGuB$A3pN-W+3kn4g-@%<kqN zX0xd>UwBK+8n42;#+&B-!CURk@YZ;L@_y?*@4et%<^6^KQtxx`pWg4iFZo~NeeG3y zD}3X7-t~Uq2i^^S(l7LG^c(ptyqo>jerxY8zr8=myW8K_-`D$#|1*EC_p(3F|E2e# zf2M!4x5=;cZ}&U-clv+!yZSHtulWb~8UJm6r2nq}zJG}SrT;H~oHf??hg)kye}YZg z0{<x6*tYV2V*A*>{z<l<?dP9t``dl|Np_$e=$~Q-+rj=6yRY5XpK1@V2l&(M2z!t} z-Hx;4{8BsKj`wHS<LpoUnf7=)(VuN6+sXbsTWV+er`y?fwm;v_wR8P5?CG}5FSqmU znf?NMwmr{3$Nt7H@)z0*?Gk^nz1&{qFR@GQGXF|@ja}g{wb$C~{0e)Mz1?4KAG8nq zf3%O-$NiP|NxRO!-LALm{d?_m_C^0b`xpC)|FC_{zV5HKZ`e2dD*JxW$bT$o8Z`6& z7PJgn`X2|agVz4vgLXkXe^byg*vbDS*e&Sie;o`9hS?xEI5^mb!4<*pY$B)(?y!x5 zCxd5gv*3;3P1`njKX~7^4@<*R+aa72&aoZC^03@?3NH*Vw4K9>u)?OoKZJj<UBcVL z+ilmdDy*{I!dJt$Z1?b;@B_PR_)++g-6Q-Y+-&=VUxZ)U{^8f*H+DcmC$t@u@DiRK zoUn<c9g-+a6x#h0%@WP+utdv5TRS|_KGD%0oJb|Q*)fS76Fb{+iT;WH_K3v6iG%Ht ziK&UH_Nc@Ki3=>><k2TkQwJ)m2JsDtkeRCk`PRe;HI8?*55tzIua3czXj?3ap2pRA zSo93B=y|>xpcYcEyHdxO@GXiPu)>+d3g=3`YjG2Q54$*PR7yRq)<K_B&qH70pHgqA zH=*zHPw5c5m<75BtCt;gD{NZss8c$niu7P?O%~}PdM37fX6aejmz|9z#+~%(`gAyD zSXXSX&%<V7JAElu6I<&g*iCGwFT)yQp}t06L!2x03fzCt58!@KKZ1L;UXA-vzKOKE zUc=XqcG1sZeXyH;UjJ1!)*oOQu)F?;X^yR+7N&(tn3kqB?lz`9?ha;0<(ZvKPv|aY z0CXT01C1GKMq^Kq_N=<llE<rq&C%u<)t2`BOG3>z^YL?rS)g_`XPL8z?QC;_>Sz{W zRZyEtuq)`9OU)8Emzm3m;c_FEik6w>s>obp{-Aa<*P82aUvI8gN%Kdn6cw43<|g<z zW2vaf+=i{9-OTOgF5GvUd+~FhxexdK=6?7O7_8`;$FMxu*{n5diTO`h9PDDAGtc4k zc`OfhF&UG={ek%#S3fi#lAe#uN2KRt^C_Iq%xC!d2e$8%^h}%Ke1Uy??NPX@$kU#$ zjAuQoMtOnP2lt-do*0zt>-AN;dV6_;;0*SLs4m{VSh#QG4fTc+c7JbwIK#YQxDUX} zRU_|MZ;EQ^O~qPaYj3)DD&Hb1^-A$G!<&J7rZ<x~XL)6~f9d^>@6;{zmZ~Q7kISIT zy=&CY^pZC~Z}e_fJ-u7JTL@d}-OAP5yxU00?cO7}S9_~*ukoHxZM`SGr||Q%_b1%X zV;Ql~+u&_bW9eUCP{X8$g?`TWrFQrJfvv>W-e&Kg_@TE|-RNz<Q60Q3*h_3ppKDZO z-}61?)8`f_zT%F3MB_KXGNSRD`OV-r$2#KS(hIBc^up~`Z@+`zLGA8$#5$t!Q~o}x zsXxFUKx_m3f$C6ykUvO`lb%{7q^DNRrKiT{nOL3o{EPida9`?Qst)s)_&2E?{G0uo zRTFyfO4ZW8)xTZ!pdY_W_4M!d?^YB1d$32Z{d=)UpY-qZ?^B)q`>{%I{0IDpa6jxn z%+*!?BV1jLg?jBjijDfDUxk%=?LUT{`lP=GOZ7ec$FWtf{U@+ipY)%^UcL68@}GkL zwEr}*t@WSbj_a^tpY)&g`L?qEC;v~lpYxx`y}{pr`vw0+Rg8rBvnoQyyn=h9|0-c$ z^IyYH#?Qcc!+!&7k#G8M^6YQ<ZxQNk|83mw`tS0L?_o!>9TMq%{Cw$usk-`K`TtUF zL^7$CNG8iSA_Htn4z?jyB}X8olB%~Yumx%evZ}E<$Tq>MWN+IPo09!)GptGuw#~6C z+1s|TE%4LQwp7R4R<@No0jbtU^|gE2J=I>eukDK)35UDC?T>pOyAN*U95y78b5P_Q z6bYxAiG;&S8xjuparQWMfc>fcsTzo!J3;MfPqZh(Imw;`=Vx}J8ZMF#H<C~7Es{^| zBa#n#x;>p3%4`{-=G*ydUwei<L+xkFZ8`2U?U}gGw!c=b?78+leE!D%2D;E*0B4b1 zg!@8!3GPen65N;D%b{1;E8$#aufo05{$BO66?U2GhwQvYmDm+_1x7!wwb$al&R)mW zo9s<oz1iN1`*!SF?u1NzQ0-wKvJa^~_F?<5`U&#&5p{%JZC9&f?4$Nkb)>Db*vht# z*)?jYecV2-jzaoA1?Oq|458N9b!xOoVs$i<_&K$|ecnE=#@G#ZgF3{%U|)dqqJ2>v zi-i7*8fjm)FRM=W75j=h4r%?G`l)^0z77YOjg35HwhBaMLy_6)M3LF*B$3(bXUOc1 z>cF5=uoG92+^UmEZYYu){uKfF5L_MnPPIaQ--i44;11kR22Uwpq__%2ek)((w`wi& zTNR4@R-VXjWki0f9wNV$7WoZ*73-XZ;p^e+szdlj_=egkd^3DgwF%z}--7>6_>Srp zz8Ahn*!Qv1*(UsJ_<^z_>52c7@Du!e8h)yJho6O?arJX-cNT{K2sf+7;g{I$?1l#L zHR<^V+nwD+4^V}o2jI2|t4t!`TMRuCAzxz9i6q}*=q#FnYJq0ZOf^X~Pc-Lh%S1~! ztrD$pw@$Qy-!{=!CD0h!6RJa^Bk`p8UV~0_O?1P(V`4|#J@|S<kHk)Vzd<K@CfHe* z*g3H?@t{=@16l<>(I?bC=o9q(YG3pT(Im9fBz$!k+Ji=Wm<K%z{Xz3}!1K@>&gZYu zB$l9OR48)L=?$&Wm!HBd+CwXBZT|_k=n$>c2CQsrr%AMOnnWusZodOZ^odsJ*zYOr zw2H216@75;srN)z=!-s~(I;l1J%}cu^E3&KCUL21?sN$4bciCSC3JIILMNvsv_VUF zLp9Rx>i3|cE3|dGLg;h_4_%=>b{jjO85lH!fk?{1W<TiAtOjtF>h5H}LH1t)|59@) z`oR*UenFnp-@!@!l#}{9IH_OYr2Y<0>Zg$Um3$HYR%HMFPWGpe{ddB-%iOKnn|sgz z3Y-S8gVO*~XaEmz^+EF>S67)wp;c%D+GztF%rj^M+Gzs?Xald~7Hy!wyn+2-?Q{YU zo!}$V`7s)R=QM!!=AX!Z582-r>AsgY7`I4w&&hJn$?|4SmTP2rnJREHJK<z@(#h<k zli3}e%<kx9b_ZlO639ttD`OqBf#;CQ+DYXRPAc!?{Tb`U+R5g9oNVrfY(^t-Qn?LM zc?<4puUZZCHFk`(lg*8?vf1~2I2L=xMabzS?gFHBkzeQ+;TD-)<Tu8mvG$w#O^IO# z<hRa~-`a2Kw}K;5+;{T38}hp&p*s1UkYSyX<=V+|<7Bz#Wcfi(mJjd;`y-K9qxc$) z=OlU)C(%8BzCT|L@Xzr1zMx-Mx{q|yz0gVbq<;%mly^eL-$o3#BjXGFJNVYjj!x2d zK*m1^{~;uL7bN;4@K+<DJtv{N<VolbNa$zbulJu*q5nKznDP7<k;+}1RNeup{4!x* zK{k8-tH@^0$>wJM>&Rvg+59Hy6nR|WzvI6{D3QuZCzYE!scdAVi2M+FtergG$;snA zoIKvw$>Tmw9`9)z*+$5c9gxI3IZ3>Slf-?TB;M0W;zOMz?&l=&u1*s7a*}vgCy9GG zNxZ9*#J%hwJ4hAVA$AC~#FjvZ*<na@#+{@@q;g|B2C3ZI9>%wCJSUqQ+av8!a7026 zauRxXC!u$75_*u6(7QVcJ=jU;-JOK)jf9@7dOF$M*vaNyoNVsvWb@umHurV1d2c71 zn>yLt*q(3C=UyVA8#@Wz)Jf>ZPC_?z61uUy%wC2ck<*QxoNkJoz8bg4>CR40?`D_V z<@gb4y;q*J-pfhr&Q4nIW<^?ewzt{aklZ4(`34Cx`(P)tcSdGEqIx)KJ=#g@9!^^C zjI@3X8N3FWJq(%sgxVQt{WLzGwa=oXh_oK%q;-EMtq*Y0`ambG``ef7OXwmZr%Rli zKE%Fh-&A93$>tV83pFli6|_=^ISD;JPb#-_Qn_7lQE(Ao8Ce=ssK&vvV7Y1<+!@@B z`<~!l+>um%8mrhE+5Cnok`Xo%S0waMC!33E$>!zZHOh^xv$EMkHot*e<gxGMagme9 zZNhi4nysBY)=m=Za8tMmKO%#DCxeTe3~t0I{0n@FByN)@iQ70C+y?2JRGyQ#o|Cvq zCvgj$#5GRhc5xCnnI~nvtdvEz5>_N@2PavLldMT6S#@G`Vl?uVQ9IICq-@W`{fP(M z7a=t>Oa*E)V=FUk_^9!!@zmpIPgl)U3;0d3D7)YIlo~hskWncltm3oeo#1QaGh-Gc zbii0X!MMGEQG1bUq#9!*x2eMBI;%{rh`$Zv{&q;|4yq#|JG&U5+Yy7L;QPkWe5-M! zjz50tY_<ACp--K7{H&j;7f(EKTB+K2;@sjr)Z5TL>I>+ex(M1=r=WZ3zR-Sp1axnG z479&4h3=!zK5_0I#rksS9(v_TQzxISSDiHd)M<Ln#F@vRsMk(C^~9<A14lPapEGTy z-hArJlcwvhOF1$AO#GXIS){}?oi(d?57P?T$E2Wpnq6kiIboLRJ8MqqEHhxX_%E6F zvze!w;pCxl`KTy|op@7WSNAPWt#))*4BUWRo<LS3aC1N59RbhJaWD@L??`yI4(}*< zK^@-F@WML0pTJAh;T;1HtNgj2+~Zhyd<h`;6W(#~3Uiz&EkA`<REL*_*C>z2DSDyM z?$Acmz(QyfYF=|{O>1ghdum)~)y4Udr_j_^q1~WHjZy4r<!q#*JsdsM<-|B)JJ(^j zv~!Ke73KD5=W~>!2RV8$U&X2Nng&lK7A4lVozQlA+iTmdY5Q)6P96GmT+(3_m;}xN z*McX&haH!6Yz78^lfXTlRHt#B=6AZN)BBzKb$++!ngNLcCk$9H;D$lNhHW{ZxXwRw zK)wI)bBEto>%ZZ^P6tjs@a6;8kC=PVJtK=o_8vL*;0XucGwPHvT}MwHy=Zjh=%+@% zJ*MlJqsL4ivv$nKhe%1tV<*tPk5M<;n`!Hpsms+B>PmH$x?25CEmglqGk#zFRehlT zran|3sgKp)dDHb1^{M(yeXjnYHmiTCFVvUnEA=n+wfaVFQPrqXS{v=5P+1+=Tl6B+ z(R4DMP0DmJT}?OUuy<tcnprWkGqYm5nqFo%)0=thVzY<oWA-$C&0eOT+1vCt`<MY} z$FG{#%<E{GZ<sgDTjp)^j(OL-XWsV?^~QOJdE>pqy$RkC-jUu>-qGGqykoqRm;wJe zW9t&TU(nGWZYS6yL~7fk?N976_E`IKdzzIw;~65A?QiX3<mpBB5+v#6B0-U#%Y)`Y z3&w@5kU4FFwu}nf2OWanGTOT}xJ^cTNSM2VyG6nT_XYO{4+IZ}9m0-br?7LF3cG|y zghz%)g-3@!3FUj{J%H3BnfKI;RbHUh{)KTzM@AMy)UJA=UZ{HM&89iCZ!JwrW&_vp zosUsY$3Dbtz#{lquLN!RNN+gbaXi{P!8<{ngtk0Y{mh%=%~2E4Y6hs2o%V8y9cf3Y zDd;VSsp;~JN}h3^nrj!>U#ZjWuNnEDfnLG43GFhwO#Lb_L7_S)SP(2wiy7H2R~H7? z1vjXx!e(J}_4}}8*h(!6+k|b@HDUX(y;>2D4#%iJgk!@))pg-v;bH2J;e>Dk^SILA zNL|uiGc{UOz^PPssR#HH(i4ovHmHrv-@Z@X*{r^%W)$gWx{Xfh9=ezAqx+K+!}KUU zP9LdHVV-uOUaBkgD*c>(Q-5kEndwZKm6-+RTvKFPQIC33PX?J`W{jC&j&s*%XRj|Z zS27N|nX%0SX0>_3tn-S@i)N#F-+b;V<{OK!6yE_|=Ry0vGUzscg+6RQfUdHCgFa$E zgs!$9K_9grL#yoH(fumXbT)Ce#(n~Q+<wZ)W}|(=e#TiupR}Lj?^gSiWz=JDK@Zx@ zwYB!2&}ZxyjCIB`hw&w65q;Kvg?qjI7xYi|Yv^<K8|d?P3*j$AQ>y0d1v)WfUku1u z^xoF?&y-hlbfDdWL2#PcHuj~!qpo%idIy75XxrMqu$a>_NCmqGL-5huwzDrYz11q{ z5)=o_4x%f!x32^NHM?uDM^HkT4t8S@QqQ{ueS-b)(b9IbuQDajHs~Jg84SfoC;M8E zq!sKK^bPjsyt92hD4<RB2=-!LB!SMIvYDWeHnLODFF1hocayuK)mz&|(u^yxT_vqt z3nh(kk~v=mw!5T>YlV^)t~IhdN*dramV0w-BKPD<Q`<xCMXpG^CL3pScR%A|F)pNW zzAW=?Zv;ibuE7949y7?k88ixd1p|q1uzf3N%yEc)J7_{Y_=0jBDp!o-i`M^cz`U%T zV}C&m7u)xOX2CAOKDaNn?=XYZGuRvV67d!69Q4O0KA>EKN?5H%GwL76sD2DH{AVzt zU&L(vgUqo%L(Tlae8RYRFK-|t;<1c`r!)3l%4qjSW~0}Te*yW$${9J+h`eYb^N^H# zbIP$L`QDlu(3Uc8Pbqe!oH|nyUC8Nf<mis%R3FAbG7CA7XCKV7j^KG_+jC@m!L!I5 zpGe6fw6uOm$BAk_GT>%bU|v(3bz|Kl+p3$<rKflf#_&+q8uIwG_#B@RC2ox#scGpo z{Oj}hFXi!X$>Xoe<KL6Vzdn!ua2}tpB<AkBI*%{&MR7Xs%j2i>_>boCN96IZ&Eps6 z@$bmvx2fUVO8WIy!Q|lQd<o~n#AnQCeUbP=wN5rpHdk$ut&?q4r)0+@`be^Sa!1uY z*)!Qw^+*;c_fR_}_e>5}J10w$V^rVdp~*wl{>kyl@oHG|h$M5r$%)C6)#&6Y$*Jm) z<T=Un)wtvZ$t%?n$*YsMs-GqAN#3JQPd<@+LX{=gCSO&*bZK&uoRTau%guG+dV0Y- z&AqtqG7o{f!k6(?M9sUFIig$49nAdPM=gAqe)3VCM07*fe>YWXuqxM6^?ZFft6!hv ztIBNgioH9$hrIXwc79)0StlY}uCy!d$HAarZa6HQ&PeLEuqx3wQIc$z?3EmzEKM#i zIHq7?K}EsK1)mpAD4bMyQQ_LccZ-S}nMOs8`ZXHS==??-8n<fvQWMjpMUyd2(oJq_ z@^+KWXmI_R0UUv*cBD%4eZf*@0L%F%;6il~y2(<$4OCaMyv&z0-X)wDoEl7K%pu1q z=z(&a!Fa?AX2Ngnj#C($$oUL(MLEt!fAoUs!8FD&UNDDapbWlg@j)r$8xx#Lj+*3) zv=I}qq6nQSBcxy|b;1PG8EcrJj2dr(Ip~^(JGX?g1_hmlq&LB7Xs9OnwCGs@D>KkD z$Zf;D4R<S2LvT+f&&9uoug1j5xQtj?D<sza3GESg5qD`rYPu_CO$jjuItyLa1iw(D zpfi!X;y-XPv{NZGk6wHaM0~Mc8_eTNk0zMJNI>GA0G&e~OWdt__ai^oC-NP~ndJL? zbvE;?eCZr*aJjmkp5YF4pIXJ29HTs)?T%CUqGOb&bKP+^p}k-lDV*YtQz%DC?__AH zIth9z-;R`2odW#@nzW>S8gw4zEjfDvbUGz3>HHaV4&S1boSgxk!FMPnrzS#ABbAbm z)1hZldwo(XzC%i=6*ZwNBc$G{uVVF!`!9x`sxF4kQon`Hq((`8TnL?mZYHtT&b#a2 zoz8b8CB$;*Om!`Ey7~jOOukY@xTf4?7xJ$k>)=DFw`0_Jayw1>;yheKE==eCPvL(u zv(b_Z>!7DHKP@po4V}q6wLJM_(CKK1690PW9KIYWPrd;<Lp=kX#=N#X`C8~~bgS%> zGZvFr@@fg+isXJ8Nfyjv6vdNjskdc(J5tKL)|2wxNb$=YelSnBaemv0->?iiM|W@` zvUO8;g*RDum+QKlT&J$LV7wpIw?5RQA!?Z3)%n^DI!pI~&eOf1lXNk(Oz#ezqkBWA z=shHMy$kNy#L|z@!^y=7j1nhOvU910=cq-L;gx8W*Q%B3Hgyl*+pHo#*E6e+Ua5~H zhiT*bD0iHqk9Nly`X}x<TaV#L8`p<&q>bytIZ{9Mcz2wl$8ns^IkS8mr|U!9ahe`R znkMTJ&{OniXsJFBda6DMI!hk_ovEeeP1XBCr)z0bWqK@hj;7V}Y|_?d=;6?5dL;BT zT>_mgbyZ6(pIocNjunoU_E4segHF*>?`LRfKiS?w&%r%e&xOvRuZVkuYz@@EbXU)W zmh!zxN#%U#BwY@j$`>ak<^|9>`d6+@rQ|x$qvX|K%{mn_ZH{K;IGDvz+SFuy0d$sL z2>pfr4Roen1f8T8L(8<Zr+V#9UjcWPz8v}szCbB;;7aHueKoX<?^8-Te&^EBM)hH5 z$WVH-akQQj=m)0rtysRozO|lT-%9FeRhrptj<fXb?l?tPy5lsB?5B*U>w7s$*-Fcu ztZ#yzqVI&3>Kmb_>RX_*w6ye@`X1;!eFt=^z8*SV-w!R*cR}ZCY4ua|1JD`z2Iw?> zGxRjQ5;|A^5jtDn4L!3~nLY?-GCN5mo`;}Q^uy2@dKEM-Q)%^Oy2^2Cw@YdLll9}! znffW{batSKU+FXEXleaZA}PYxG3Dwy;WyYGrB9ixUxd!oe|COfftKmNK<DU}p;Pom z=nVZ5beet@I=fCU@i%yr^+(WI`eW!!{dZ^?U(b{{Ho1}%`Az$$B*)T*kJ+BGq&M84 zHxtKX{RMHX*Iz-O)Bl3LYKq{O>VHB{)nCJTQGbJbmafMAywT9L#z0@tTj0+$9`23C z$34{qxYrqrd%BVSvCJglyktV$b4&qriYbK7FpZ$oOk?P2M*7F6O;g-+O*7~jjLdUo zWu#x6Y}!I|(%MLyF5{b^66=11t|hIF^cj=QNa!phJ;5)G^e8ip^dfbnwHfbxiJYEi zj)YD!6QE`0aOfOEZ<3YPTbDNVB(^z`u#*k-Bq%i#p{JV3&{<|G^cRNygnXO}U2A?0 zeZiarf2KJVI?tR2XQMd<_f#Xj&~!5sT4qj$&N0%1O);~eGt6{+PBcHmJ<UwReX^N^ z`!qux4`!QEsFTpf^*(hav{}gY$>v<>spdD(S?1T!ndW?Add-}NdycsPI;~zv=~qrS z(yz?oORExw9))zeK8A0uO32?63nR}+w=&Yc%lPJ+q)vK;GtsQ-NUyl|nj5%2nf+3d zcQ-*#Wi3_ibR%>oE2@$&D~SEi<{I47%^#st%<a$_W+ikQ`>|^3j`RYvjI{h(lG;28 zXENV?m8*|KCz+?9WvseNy6b2&#<gT4ZFm-QLsCl8swWv~w`FDnbdI4t=RL8s)yanT z$#rS54fYU*wudj;9`Vw;i1$nABqQyu%+U6Tmo~}s(bAHh`4o2~vA3rA)T@h5dt9T| zdLdyadxg+bJZWjAUIFw}Pg?sduRZZU?{$E#^*Tad@DlK6dYy1@^qSzF>PahI=h5<m z>7KO4GOq=kmpo~!b39spFvXL$I>T!Nf1;PfJ<V&4`(#gA`)OWF+)sG)7r|_=748kp zT$$u6BAdM(;ntGPUP?G#cW9Z{1v<s+3Z3C~gHp%oDT}=RxF>u2KpT+F-huAw!O&9g zAm}V_1ay)&5<1lz4K4FVLFX{bC#BbbR^>?>oa~*<^*?#iu4j3Za6juwOZ<g*Jancf z?RSzVExpW>_SjHbXzzrj?Gx&B=sb_MPpC5Jbnh3?GVe6#9B-aWi^%71)vtSJ6MC|D z9`qFNLTIV?Yv`%oZ=kchUqNSjmq6!vi=k6JT6gl#-XiET-fy8Vd-MsE@O-XL_b!8$ zc^5(FduKtXc$Y(Gc;`T;c}wv57w>%Br+Mc>=X#gIdBQsb_iXQCXf2uST>)pZC;dd3 zcO`U+cNKJoCw)d-mdo7L3dgC_0=?_tPWGf_&txZ|r0<W=GVglm98da`Dc%iGa@o}j z={cr*(jUxWOqoA28NgU~I6EQl;M!#GPUuWedX?$keb6%RZs;8EUg#9>e&`JEF6cDx z9_U=}0caf=?a^lt(=*Un-a6<^?^$S>w-!3bTTi}t*;GmUo$P%Eoi26WoGCtV4d(hF zHwHfp9sFEI-t4epcT5p`ZM*25nXBDT4`n}0nLdwwFW0bV_EGk{Ji}g>518j_Q*WkA zW*}s)E1K!@+55Q{b6wF)S9#4`m-k6{FL%$*LXdCl2T-0~$b7d*NyT{qqhHUthA^_z z=o#Wa%<|YT!TCtXlUXUvPPp8x27SL~Tr9I!&p>_YCmX)5*|Wj=EiHlTa^IGW?#7{w zUZU<`l(va{=*jaRLk=v|%k@2at<Eq@?X#z+J1HsL{iXVUL!3Z<l76k(pSAm4_5bk2 zN5Srw)cxz{2*nq<-F1oKHhj&l`-dyxle>?v{YRJApeFQe{Pe5+*Rx&N#O`hK|BPug zs0lehC3=6I|JMUtxUhGo=C3;uO4f|y=k-<Cdri$>OSv!x?Y%Pov%;i7E(AFp^u8qi zb0+?6@3QER9MPc0_X@5}jQ)(v#joFcto#`{YEa{I9#;m*pV5W*^LqE}-II}~1~tAI z8TM|~yA@-3@nd@Xj7>DC@zF<_-9D#Rl<Ru8x4GIidz6*+{CfNs&NMqqq%O$}o2vo4 z-Qn_8{1w%?LXTwH=|L`z#&xdEr$ubxpK@25*10O*u+6x?v>nChu=YJm_!{l1=+A15 z_-IkbM<*4q_LBXpRnAYV+J1U{#lHG^HGk%YB&IfXd~Hw(JwE@h<~o1v>iAp9S8jXN z{xkZQ7(3MQxqyB6rtY7ytN5k9v25MZx!pWyud%9txyix7kYL}SB-k$)8tl)0kpo<u z(vvVxh;Kso>P2{oBjq?UcilC|5&fchuoFweviB2>fxF0xSrj6gaqX>IG`L>az#1aq zWle;&bmsI6S$$|^DMJ@yLEh8qUD@qN-O{c{Q=~`IAv;kO&vZbY`qc=3I#>XeR3-4+ zQ|-Wt)vbi+%{ovq>pXo}$?3~#O}}73FfiCB*qfCK%`U%X=93237-ZeRtrFzL+Fdna z<*74kOI=ty>c;BOj;sLf#M(+PRz!LRJL9*>cE@%CJE-GT3Aa|u%0&IO+Bv!P*^61B zWxb--D(yDbW66a=RzLcZ)3OKKb8DnN>mMUnzmhf5gj*vmbbF_FV0Bb>J}<M&RA;ve znsTe4yVS^!#L+S<&Wzy-RyChcFRKsL7Tr{LWsm6a?5gD=U7>H&Rr*E!zW$1p%1*3k z59R%iiRLtOzPXzD_*JawzHK(M^|qbY%NxRa&k5da?;P)P?*{JyZ=IL%K4sHkE59fE z0Y~}A`KA5>{}TV&pq!^czYM;h7Hkgpg#I(j`O<Ov=5fAqoW1fm|8ksud7Q5uXYV|Y z==ht%{&^g9d^r2$ab!%eIUG>Kp&AQkU>-+1&Y(Pw)ZEP>Iz^o3kp2|TkUWm>IQ!;t ztmBmAanJ_{wO<}5bey4i9O^!P_Rr&p*1tI%mdBBC#^&&VJdTV)HiyIWI7N<gU>>KD z<BZ7TG<F=(<FjQEHgO!$=3`D%#}SP`<}hmEUZe6jj5*+p&f~}kW^*_ukJG|&4$0%t z6X9oU9;cP#9Gb^z?KtD|IBgu~uslv%#~Gi;Y3DeH=W*IQ&V)Qp2gf-gkJHg{j?CjQ zRwIQ+<#9SY&e3_Cl;iv)kJH6*j>+TD_Yu#rd7N&Jb6g&$yW{*ckF%rWr1LmE9Ow8v z&Q6YVLLR55<D8hs+1YVU%H!<fI6uqd?CLlZ^Eka6=j1%j?v8Ux9;euGrsQ#UbDT+e zoZgNzIghi4<4n!tpofq@(;R2uHr8wyb)!YS#LDj5=vmP|48yAcjdcs%PS@UvF;b7! z6VPx^(3A9Z+4-)^^*Ly}7qKF^6n*~&c4yqBA7FLx3B68lkba5#(-*0dfc{5~2<UUz zu}MFpjtl5p)VTruiCP%Yho}naH&j(fU!lX0kh)0v1l=m6AJAPw+P>a7q`m7QA#GgG z4r$l=^pLi!%R<_(J};!r>dQjfslFzpZR$ru+M`}0ZBRcG((d&0A#F{65K<QQH=*Rx z!=dEfL!spA%8+_)n}n3OJtw4&*`6Wo#TJINBU=zsS8a=s8e-21sY`Z5C?$ABNG-Ap zLh67$FQnY<`Rs`?wrNPcwXH(xp&iP;8DoQx7Gax()E|3pNR73<LMid3AuY}}4rz(D zQAqu_EkoL}O@_1=+dQPD+c1=xaAQc%fT}=Svpevf<<?i@e#DX$S;IRg$QM--B2(0e z5ILd_3-^W|C-Op_D>6bY6uCgj4un>PgUI<%`g}@u2((qWFSJWo0^M2qa7uP4bhh-> zl<Y8Qne@q&>~QF1;epU=!V%C%!-Jq}!jaHt!h@mDOaDp9(!MBJsre6w(jp!TrKPM4 z>ANUdS}`R{zd^~;2U4>1jg&0?4<&m7^sJEnfs&P0c|}OiK*`dsDOuVwB}<P-$<h~5 zvh*#KEPXO1OD{*s(kD=|^g@)ZwBn^9y(lG1?@Gzir%|%>&y*~EASFxhP032@zEOI6 zN|yeUl8wgOvf{n9(e`ZKI*G^Hxsi5*dRG3<ke;@e9g4oQz@C-e?{U8U4Z6+J;KpEO z@KEq@uo<Z&<1o<~^$tCttr#gS(x;)pyy&g9Wz6_|z<9o^`kXy_{nQpyVn(9R$d0R- z?6*2cC(L4VrEX?cn45J6_7kk;9g!DJhLQf~W{d8Dp3_VhdmX$UdI0+e2Jrso820I% zz}~gFdYD)4ovTNAi@nSBc&~!FlbQOyU@3WW7WbWrE_H({(|53Dat^)Bb9y6h(QHDm z@|mSy>{4~5OVx_HsZuvfs?<G_Dz&<9s+fCBFypwvYvZNVMz5z=tlswe2Nme$qxhed zb&brqMr2*+j5$|)btL&4g&2{$Is)x7=E>FHqkBq7Im#6|MtphFUC}02v68uge))a% zDSP7rw90n6yY9`dxS{Nco1oL|iJQ%CjC1LKuh!Sn_uhw=xlX^t?zj)xH>gYja}S-^ zQ`wt+lS9mKb!2cS`M8+ak7WI2DkHCQbw2YKOIgFeO+CQ=p7m(3Z>x{h7mTN5UMHn@ zL6aS#N3aL)7(G#!(&wM87t!A@*DLAkS5XG*xnl<1b`!hnqug4Ybsb@2*T|gf@SJNz z&NV*kI)WUDLL9-~%-9u&J%VvS%!|Vw!RR33Njb!>IP6GrHs-})rEFqe9QN>B*u!)8 zJv<lo@Z5b5&xJiacV8*tD83Q7uu|4BFTO7$j2th%@AzEU@wu?$b75uN6U8z<7nb)x z;oarxPIQ!Km2<hH93_k#<!*9}{7b3#VEp{u%KapE{m8uD*~t1!sB1`i-gS)1dQ{Fe zGUpnRbx|fcSA3QH&+^E*oGZRcE;*i*W^`3t(N%H9SL2wagyXAm%u>Q}SV|%rUmUZP zS9Dce(N%FpF-ytCSL2w47hjEImeP#FO3YW1(-LoV9GN{ve2G!`5?^$T_!5_#OH9#G z_{MRK9f=xbvin+hVej)0GXe`A$1rLvHS^qF!OPjhwURm1Rpu#n1HWe8H=mlX*~{9L zQDk?ox7VL{<VUdwI_;gpXmY-Hu6L1lwRbK12k-N$7*)RHz3F}EZDz}5f!~66&wBcO zc*ktGKh{6mKgpl&pT;P2A#aXV_&4x|*h9Rp{Ty#uzw2-EzvAV$#_TZciY)2Je(I6b zvg7O|JCk>q&SBs5m39StY42gb>{{Nv&Dam@=XMJ_N1L$|v<LGJ1DJ6c6C4?w5KIl` z2Iax|!6nF_>)Av7K(HoQAG{pA9ef;o5t^_lY{ky$UBbTMkZ?peE<7fj$QwHI!n4Cg z;pO4-aAkN`xGH=q+z`IT8#kYZU-Q;X(?q*O_e5{rco~`)m6(u7Cr(MsPRvi7o46=( zb>iAYW#Ya>RbpM@rNo=;&fA<+$%15yWG8mv^+^t5huYZW(aDpN)03wq7bF)Zmn18a zHze;!KE%Gd=aL(f?<O}Tzv6|z#szH(x)$^*=vPouFtT8L!EptX3T76}D_Br)e!)cr zR~9TUxS`;-g8K?q7d%z)9DCi~Ecl?{(}J%GO<_S{v%+?TT?=<9>{B?PaA@Jk!f}O1 z7oJdfO5x1Hd4&rK&u2&6<%LTNR|L1^+F0y5BF7t<a~+;@jmWviXI=EDIaeI^2<lrD zA3bW$6^Erq&GMw)M*c?HIIPs+m=}kY))DjKu=J=|9zAN#6^Erq&GF)}^r%^$w2LS{ zdeodN4m%<jR@z<cFAhtOn&r`>=3H@Ddej^*4oi>fcp`hEu;PlsiYp2$t|+XyqOjtM z!{W}yg5=7%;;?Z(i&Trl#`#QX<if`JEW9}E$lQJ7e3q;6edBx<*%;p!$(2n(oX>JK zzHgk*q$GFWIG=?VhmG@DcyU;E31?%D^I7C?d|xD2?rNM@NUj_&3d_@G?<=k-thl1E z;)=qGD+(*FIBcBH<Ww$fT%Uy(hmG@DcyU<bacLoMb7A9r7G4}S&S&ApVdH$pS1xRv z&%%qt#`!F~IBcBH#G4Bn=d<wQuyH;MFAf{$v-GfWUd8z=yf|!}&%%qsicS+fuehSH z;)?QFTv1qYMfohQIBcBHq7TJk<9rrg95&8p;l*L&d=?EV4jbpQ@Zzv>J_|1nOB!4m ziOv;=jq_P}ao9MYg%^j7^I5dCIBcBH!i&Sk`7FFRY@E-;mJ1u_v+&}uaXt$#3d>!y zX%<&>UvWkGEUqZ5xT1U(R~$CZXHuLC8|Sm|;;?Z(3oi~E=QGck3mfON@Zzv>J_|1n z8|O2*k_#K>v+&}uaXt$#4omu78Ig~<uyH;MFAf{$v+&}uaX!Pzg^lxBcyZV`pM@8N zC1m!#;)?QFTv0xYD+(*FD4)d@hmG@@yXL~i`7FFRY@E-+i^InGOgeL6<9rrg95&8p z;l*L&eCEk=VdH!jUK}>gXW_+R<9sGBa$)0q7G4}S&S&ApVR?2}M&w>DY@E-+i^InG zEWGgndnd`WQQ6}W+2hFU@$l?%MD`f@mz<SwlCRM*@-KNBok#v9KjmC<Gdf28B`2fv z$iL)bbRPMa9F%j(zvvkGm%NM4Bma_baxS?R9V7peW6^o!UveutkNitc$+_fHbd3B< z9!2Mo|0sV%JHHhjUHqb>J9@axlyG03Omdc-SYUtaR_%Ot7Ib2#d5K%wHR>4iAuqkY z#@vdm^%_RteK}v3J0E1$x_K9+cFy`3$y%+<#3**+G9Zu=u9=&W`I%_%f|XT1Ke$4C zG<f~D+)Y-BD#eGRdGW9pSmt;}sfp}h7|tB;(RwPoCz`VRjXmr-P{q24cmI5J`*WD7 z_#L^0EBK>3o)ugtvs}UT(BHcqu5Ysj)<S(AEYDtF#y!vCIeM^PVgNfpYeu2b4(=t) zKU}MBX2yf}C3AO)U5m54i@9^eyO@!!xGr|7iCr--_IEMY7YDqd<I)-(FAg5arYSl` z*NMmZBZRvyG01fZe;-eEXK+81u{62VRJFl+fW*1j9mUT*JfFOE<V#NQq~ansa7B4e z9K<Meah5}TaD+;@1oh<{)-x|=7Vb)Um(<mr19&gt26nT*#v(3nnKSz`Q=iY+`(|d> zUu1sgYtxvwX8SVod((W1(Xcj*@y_;^cq@1xXAKq^hx!xzNq(7sk-q|)9_##ft>WFV zU6}hjhWA_-VV7wY@6=rxYzqCbUD$`wRhn_tMU1GP2sehGCJM0H(?2nevD4YEF3Os- z;k}PZq*$rlpxVynie?{vv>qL;&PP{9xGN`RuTaZ#VMe+uvKyxbXqR_o6mG-%@*sQ| zuJ+`-I9vNA*4l0CJiEmCpKWDtlE$`{v?<@*XK&EW><zf1R%Xrh_HsNZdwGr*m`m*0 z)KdN&W1pd!Z>RI-fcxW$`M#ORyTTJ#-L2t_x5HR*xGTr8W~l8Ge8GyxiacI#-n{D+ zyiG~QAp_G+Y?d&_U9ZY=T+jIa=Xv`~eE)4VL4OX7!&(11TFwCdCdZiP`w!`L*g1PB z$FcrO_Mx{>o&1%KXC#M`8Qj=3150pS&JO=enKS%cpT$b^5WUHJ)O$>S;yveg<c{yz zB2!|E>>fNb_D;+~vHW2!2!;nom_=ey!&C&9220GcU{&y_xh8lbc*<PI)4XJE2wn;P zYHknr3`d#Oy!W-xYz$vbSo5#ME{VO^A4yH&eG$!Shy0|3NAV7dW{o8}_t;xDi1)-b z>l+crr_Yl=eI_eI5zo?3MStEG3_f(+@35lJd(9VSSM+yxEBgCL`X~_{&?0Si_YVED zmNj<fIV6>?&t^~D(b=@X3DQBDep7y~_61|*&vV2a%RUqL=Q(0t5bP5Fc^3H@tU&$4 zU=e}$Kp#|-dH3!$^@PcIgVp=&h}%~W_xAG+&<A=4dgaWFFYs3DbHuWdew<mGcUkwi zfVcXtX69pOlS%YTOz?b{8f%vNCkc3eL4HyKD|ot_aZ7vb4afLHWDl6VI?LM~p6Bo4 z?}ALwR=%kyK8sy^+Rh|~sQvGe<)q1-v}P|DzWQW&qv#*eBJ@zljoPJVuZ1r=E^I&E z_YvQHv%Wj=mMpDA{#tqjrS{5R@s(lE<X4W@FXH)|NZlsyBHrs0pL=JyFJngudqeC} zUGMn)v;5V{iX}pSwRaNl21y7hXP(KwUIqU3(cc@1{E=$|vey>!PIhmvw-TAESYeAo z%;g?)>1EqUt$;7Rl*Du#_c+c!PPUP=D@?8o&R$_>mp@GY*d=(E*yY-g?6scQOzIi^ znZ0|;?Nd@%IWzQ#-?p6&wENLcrL|s+{&6gQ+Z;Q`EJdPRWq$A4?@HHxZ*uMTVb^|F zA!i;mt6eKz?^^K&*NXq_T5-m;;=fBP_L9<yy`HWWA4=+_XO=x^!{zBg37h~M0|&69 z<~Tcx`XKfO+t}aP->J5?!Y)(of@6bY*;hqx#Lk`)7cR)XfsB=3V%2&T76LAhj`-M3 z?j&mraL<Oz(cOz|W)6CxrtkNr!xtH#6c)p9Q)4~W=44I8afiA%j*}YekxK1c_}(AB zhn|C`!<C*~aW1Y5bMf?p%Uhpr?-_3Ryt$6A7VKQqW;0h>L~gDOm$;~-UumCf8*AKL zJCHNY>W$c!i;mgna_c%`@j<h`Bk@a1^w>pu2k)<GG$HMdN=a+f=ti2J+pwQbTv2N@ zy#FM+Lpl7&rIfTukN2advnH&O(<bYRTBcZ6(db?twRF65D<y4H_Vf<tinK84fyEuQ zP7m#`tCH5*fori_+9%@FyOEIWE~6h+;$q#g2QCRK>xR7ljJ&>#x631qcn<F6a>ct5 z2_Naov#~d^EH8xY{JQM>?fu%8B@WVr9c$99-2N|mB-ba2jSNeQMvz`Kc$IYfzlz-c zuV!xlSMypsziOT^t#<oSQ(N$D_o=ybc6Rbi_T1%{ME;JtY)Ry|z&a(tUW#mavEEG? z`PsOnmdKc<O}1Y6mc0vBYKU*yLt%G!F5!vp7V%`<;@h5Rp1s`lI92Q#Y|u(UH)n_C z7j_=u8s0V7Jhst-kNnsgvWZaR7aLXFFGcBhv)xnycbUgq*flXUCY3v2J-Y+z?~-C` zTVv~Fbd3)^44Y*SVjJXPH0MWH+jtZkAXp_8`)2&HNs4Wcwb=B)A}Myx)?>ZnIjnYU zz^d7c_Rm-~`wKSBUa=ePt70XbRT1F{=hduxTi4&f2HIQpZLE|=$9L_!_C5PfOlwk! zEE{Ftw|`~L<!|;w`;q<F{@re}pV&|BXZ%06|FE0wKkXOxOa5Qkf7!3?H+GAy4%pz! zep3%CA($e^?neU49tGI$5T0-nS@*WC7hy%CanJ<28qskFY+p3P7Dkqm%2EGS7BA}B zyO90APE&QgUOe(Xgmkl*uCd>Os~PC&>YY;T-Jn+0+qWzJ^$<@69dZ4X+I2J5UjSS* z8`jkSfsdM&CAv>St_8eb>uEa!x7PXXxPtfi8?eNLC8Y0TM``0$?I?}inkA(?J0o3b zP0peSInhLkB_l-%H^=VhGiJTo+1V=E&DkpI?JRrtbGC~1ah4qS7yBjH2Ndg#!?9n| zR2|5gVjFBNW48qR${lS-><p%8v!lq1I49Xv-O&B>tSr^oSYnLHoy1BC`>Bar?4fkT zPJVN-Uxf9d_Td<@ScJWz33+!o1x@yQTDQV}%hs$@P0RH%QrpDplTu>!shP{Ml*_U1 zF2{Csww!jOepw`AYuj4wPLI?~6=Q2@G}1oE=84lowdfd9H<eg+P(55JC}&BwGrNuF zs~)TwU!YEOwpOQMRc5eS=IpDka8^feclJi_VEuQbT8Bl^Gt{fjI`~`8a_BqG{`WV| z`sWtbfH$gYvF1r-eZzlKYq8g<J&Rc{%%WoVTHA0*xI_oxRpC|a_o@h&=>+Svcj*Gw zY9G;s;o5MmZj@+|XsH{E?Lyr&(K*psH^X*ecimj<73x-rL5ULGI&o0qAl(6bg=2I_ z<|4-F&WU-6({(DjD!EE`%_}o$U(NXHK}U9Bkt|BR4W%5-NJRRG_-Mhm5IVEdOMDdY zHHB8}{fcXr*miU6kGj&4x^Y;oD}f8sl)BTtR$WP{Mq4jy=^b3DDp#t!Tf}>rHW#l^ zgl4bzR_v7#+PF5OT$_=;Cu#$c6*|$ursjACy)E^9YpvWdzeeW8F1gp-cEgg{QE<gZ zQ#;xa`g2~I&>A>*eL#-y()B%iC>c4>`_ijOeQqgsBZ)sMRe4h-`k9}fJZUyF3ToEW K>9chcrT;%KY-A|_ literal 0 HcmV?d00001 diff --git a/src/assets/fonts/Inter/Inter-SemiBold.ttf b/src/assets/fonts/Inter/Inter-SemiBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ddb279290ba32b02722d7bee592d7df22a16e86f GIT binary patch literal 293028 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%0D38jB&{w}Bz~6@Z)fNgB$^HtzXy?o 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 UK5^r`24)mgeNAnHZmsnH17|=S#Q*>R literal 0 HcmV?d00001 diff --git a/src/assets/fonts/Inter/Inter-Thin.ttf b/src/assets/fonts/Inter/Inter-Thin.ttf new file mode 100644 index 0000000000000000000000000000000000000000..76be6252b91e87ab5ead604b99d6945c13869f08 GIT binary patch literal 288568 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%0A2If4Bfd4GGEOY<C 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 literal 0 HcmV?d00001 diff --git a/src/assets/fonts/Inter/OFL.txt b/src/assets/fonts/Inter/OFL.txt new file mode 100644 index 00000000..9a134621 --- /dev/null +++ b/src/assets/fonts/Inter/OFL.txt @@ -0,0 +1,93 @@ +Copyright (c) 2016-2019 The Inter Project Authors (me@rsms.me) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/src/assets/img/argent.png b/src/assets/img/argent.png new file mode 100644 index 0000000000000000000000000000000000000000..3bc6fb0c3995e8e5f250ca14218fb1f053628216 GIT binary patch literal 5065 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 RJP!NAw6i&6UA~V<`ya7-8#Dj_ literal 0 HcmV?d00001 diff --git a/src/assets/img/light-accent.png b/src/assets/img/light-accent.png new file mode 100644 index 0000000000000000000000000000000000000000..19e2f1b430eeb701b0cac7cc5a3ae7c1c9d3a0fc GIT binary patch literal 1318618 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 Z3UOOdz|{J;&jsKzHMBCQ)O+yq{{ZHru}%O0 literal 0 HcmV?d00001 diff --git a/src/assets/img/starknet.png b/src/assets/img/starknet.png new file mode 100644 index 0000000000000000000000000000000000000000..ed9d5c853f4d0ff8a4d6f80f811d593446b531a1 GIT binary patch literal 4005 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 LNkvXXu0mjfbajW% literal 0 HcmV?d00001 diff --git a/src/assets/img/stars.png b/src/assets/img/stars.png new file mode 100644 index 0000000000000000000000000000000000000000..dc27400031fa6ef7dd4d39ffd1b4b24e70a1c028 GIT binary patch literal 93741 zcmeEvc|6qHANQBYRZ5WvrH!&=DP=3F8wx37O=98~k?i|AUAIJ*WGy3I3?W;{ZbnKa z#<f?rv1i}+?K$5W3iG}HKd<NYoY(93%jL{jKFj;FopZ+Lx~k%iZJgU62-<Pw@+A}m z?O}o-#*ja@g5L<uNUMW?7_Bbfum%664F8V?cP=au{F25NrFaoaC35$H|DZFuaP<NN zWdv?tyiE_$+<$-N(gh7Cn!)C)PxQ23kj8qkk1z9!Yi;AB+jc5w$MgRs(y}@2eR-qn z-zRtJCU%$!a#*<%eD==m80T`Tf5OkS<41!8$F9dW{7l5MBjhDc$MA~?eSRIr5{^27 z!};YVobpc&x)l~GvO8$EwI^QlLs6BxjLAwMSjhh^?REB^O-re$D=8|7YACPn|1y$X z75Jzx$KU`=V`%X)`ryXC1g4_dCj6XcK;iOqM$hqOtL_n=Wh1x`;ik>Tu8=5en(V$w z5AN+}#mvge+K;W+pM!glPW<&?Q_oYV(8;fkQCtcA4)9+HH|e&}Z0ur8BDJ=tmgg;{ zPVg%Y{ErX*E6J65Agk;fQ>_xgs7x-n$LP6|^YFjF8-`yn+N0T}_VG*^R9l{_z17PY z{^R*Sw$lFY1plPca@&4M%eUF3P0zPRy4lTBXBYS_#$^{1-Nud)?-Y!N>N4y18N*A~ zF{4_Ox`szly|AX8>bbVZs{5E;z}?OdF;Y!fJ;BV$Q?{>YR^I3cJjH8-#hdjsxM0<i zlqCMEgH*0#POy!|r+wX6t!t?};BIDDMd78dYiOm^Gs*f`b)`xR__x>ZQLlNN?_;H8 zLe|OQ(2`gC;7)a6=!5XTzZ+ps;r##pRhG)>#G*nPp5V=z|A7B!rc5>6HYK)}+*ih@ zEEwPp*}NR&j_}WvCVIQO@#fH7aba#IA^)EtYcoEhn(^=bt+_QmjB^gQcTT_`ea%b7 zUq-I*!riQ>Bx?$Z5IP9pTg`g0T1FR@jz}}i3_HM#$Nbn$#n)HbjcJPld~d${HBnd= zM_KK!|0liQIovXY{d)-vB(|gTY~gf=!SbP{>93`5msfkKgqWDfw6)SwA~_qCov*%~ ze)+QSSmB4+<mrjVg^maCXTDOgio~RP_<_iBl65RtMy4-aajhh?x-6&uLPvEl{0Vd) zmE>aI!`d8@WTES$@7wGvg-YtT!hOiJRGj<L@8!J!?}dP(5@RRtlN{m(D=`_?8le_M z)6;tiSI(vfm3ijQFW!ytSm?eD&z7D}wWn4a7RIy9=8my0nOdCHKJ;N_89dI5_6yO5 z5eLq3(!-zHF27kKNZ&Rrkrx#st-J5jXp@@9+j&yE2YISpo2SC)F4TH14EP&oPCdEv zgsxaQF{u<=zJj0r7<-JoDLvNBJTx2l*tT4mX45tG`kxJ8C7QDttm>}MO=%URW)N6o zjm^263z`_=RrF9v{dMIkxw~#0ryF%m-vErHgGAFdFBJYDgx*P|;n^Xdv|lP#-YQx) z<bb<WoY*YAufnu=&NipT%nO($xzsKSxGz)aE}8?3--cHAE&1BkqCImCp*7jBAF$M` z#bzDI!Ouo#`}4x`EVOO&&=@0F)@=&<<=I;H<gqDt9c9ru{4%7`IrqOQ4z;2j7%EGT zRr@O#rD&`%w|l^0#45sp$Dgb?4-aqF=Fy#ZOp=#|o@hzL<muz=PV7A|JhpiJBTw3j z_ZZJ5T9{RPBhd#pYzHFn!!-Xgl+?(PKrH;YMOj0Ux8sU)ly@@ofnhRiC|{tGB0qii zlRrZh>|)LAI$3bmgMkWTv-4%M&OhA6VW$BK^QD?bDl{r(y8Ve@l=T-bsf7B72f>%o z<%*@rMT^;&;Uy7lsDvm26YNAv*4Fl5(~RX(w_@4G?cXuBrb*{dQ0bq_zsV~ej>&*t zSIRrv@e4eG%a-tJt_w=R|Ey~f5!JWP1~3*l3{A<AtxEQh&BPSF023gAdqM0_-iL|F zxo~foe&>g%XZ;o_k+#CYiZWc(gr~T!Oa<z!4zc#L_9~Yb<_DJGF0aC<B$rQUsmD=~ z|I^1mJ*Ajydsp3n?4wl6qK_?g;${yiQ>0+sJF1c5N%Qq``$Jv_bYN}x(^B2XeqJFj z>n7E*)Sr4x6vVPv50lz*)uy+AUKm|!COjLLX70o$mAVaoI|vW-l}a4YN@V3pve{)4 zqU>yMb06-8WZN`sILn@&#*;<F?Am6jLi?sB$VEvlJ5J3%vAwhvCb!NR>P3gZiw-eb zshjBhb}ib|nXJ)uFR27B%U`=#cFO!fw8vgB5(dXdManxvi&dUNYWs^UQ!h!It*A4> zB!Dhbt*gJr(!){X@XJC+(LnFM>R2_n8@1z7aS3S6NMz#9iG|p|;4XEKs20WaM%F3U zAV%7yaZay1Irur;4KqRoSQVFJ{dn*LdOrQua1SK6EN<!J%6yV<e=-kGTB|rde+`Tw z%PTPD)-{3(ta>>jx-G$Nik7+zzZ832pa1{k|EIwJa}>ZTkdbD?zI0fYmK~1u{tU1+ zQ)El_lx@8mADg5RE9tw`iC@64EVT_WKm;rm3Iey{pB-BZD%&NlNf?GS90_eOO-)Ra z^b3hDa%pv2?E2CR%!8;m6&M2uyWGo2zZ|D<c6n)Kq2LqfWrEa8vM42LddkyzB3jv} zJ_3{ETdK_<xU%pixQclTgjN-YP5#EV_wyB@(H|2ME4;YbgM3}H`YAo-v!&Ca_yY&H z7o!12RnTm9MZf@i%c6}QNGZzjsfh1_A|y5&MzGHdDuR1wO^(gzFU`cRh;s~{*#eQC zQ6Us?Nq5b!ST9VA8$IyU(yaGyAMI0sAia|abN1+4-b>iunY%x;=JG&ME3vNgZwQi8 z+>EmT3G*C>(BcI;Bp(f39=B0r5NZeqZN^Zr30o1xzOpx`Yv$4EO-v9*naUFakg3<S z_|roKW%}{Wez}P+!Asx0x6wew$2J=QxaYkvvlGHsGToi4wn9|yIiQHe)H{bCYB8+g z-Lv1lN-R!+RXspj)j<E(>h6!UcnNOVmOsF<4kAp}TprsWZv6!%m`?*)F(ODpgmPr$ zjJ9ongWg+|VRl>FFdanjLm<Cs_;{#Jpj42p9gvSQq=ByC^7q-sC?&E(&?ze82lm~Z zXWN@;L97mN4pK^{OvHpVkz-kB^AqP<Ul5Fm{z+wzft-c5HmJ&ED@pWR^&wI?vX3gL z17u9qbC>G>fc??r`VLs+Q;1A6-LJ_dmQbVAw-xM~%GH7(Q3;ouGD9_w>m#&zrD08m zAmj5$f@D2}wv*|J25b^#MOt$ps>RQ_@$vxJ(-x$^KlJb{2)4~KYQ@z^J2yg51fpPH ztp8l3v#V3DffhoSBk&;Cj>mJ+R4~Ep_F*^w5K9<Az)*(~bVRsiB33ZRFet7DrjO`@ zKOwXj0yC`oUf^_dXZ3aYTmEYxO<37@r8DjZv^k4@yAKEn@^)14VU;L5+f%74^qQi# zDn1AT9iCL4kzPV5B#i8YD&&wBeHD*y`6Bfr<5g0pqukshuq0Z<ZZMgwq!dABARdWZ z%E7ThZsuu9i4tVELBB^L<(^2MmJxY@6dk)yZKH$VC8EG=qDZsJXKLKbII3WpwHtz1 zkp#bDRiD3h%--DU)dKQRDo+u%f68&H`>wO$gEp?6(H1}p=@9rKYU`}AbTaI!V3_b< ze?WS|2<tI6vz=Hr18R0hJ*IZV@(JJtD^;`s)KR5dFynx-K<`h$vA+>GCVCU-vvLwy zpIMQVr=mG;;)X=;-A`|oaP=dWjzA`95eOOaT+OW6_f8{OpJ|X}{}Pa(DD~{UUsIKm zSMlyLf{s1Uowup;k-m(}&Y3ZvD}4+R>X0bJT8XOXiwW0)Q)j|R<0KB;AIgfobgUn+ zLqcLC4eXyDY5(?(I~8(bjbBtIffOS<61Yx=_8Zq-J(2=UIN}JJWZQpNu_dlXdTttm zB#$BRD?Z7rOTVs8GCcdgI`nh~%H8kQs6X?f@$y^)1@UZ=42RiEo?Cfr_F+o*EJtqK z_ws=VACWe88c;|!j6xwIRdfZ+V&czL3Jp8$pa?7$$t<c@drS{`mpDEuP2d97MFD}g zD)MICQzRLwPr49<I0kDYkQ|!;hta5hrxU6TM<Ixaq_IB9oO$ev=ZV!jAj~PGt&c0& zpPGFjfNQ0YN1bJJh6oshm@{(uZC|B+lrZCJT&4#jRl%C5Qjfsgv(`J^$}hRbiK_-4 z26B(urXQvWVQ7*}=uajx$V$>9u$Hf<|Et=u*&C(pwf=y)h+X3CHGJBOt_faZqrs>n znX$uXfQ*JIyxA(3b}6B)ZSM{`sFf=73Yg~eS=;cOWGFTkNbATU1XtjHA^pZy0-8!i z5ah&+uv+0kVpLT=@YN)vG;}Gp&VwqV1ms~qqvU_H<a<^JNZ~IsAq^CllU++p)ZI>u zUsLE-Br)5b2Nar-C>+|*+Is3Ad59E+03W$ejT0}85cyL=KnlCi3jsHK8vrvDeN?Sv zKi!*Y_m0-z4q>8^)HN?f)-!Xr-e-TV6n(ICI)tSY@9(MJAsipn0G!Zc2)bh>Oi^hD z_Fzz)I01SoBCJ_5JSoVv<Wd(mFq*Twk)|0WtMu{1j;ttL9T$^BBn>pW7qR19b?D6? zCBX>4&g^E2Cu4~qC8UZMIF_8q^ehzc^N>e^nG(Pfg?<~*Xh*TrGe}Dhp3bzCV~RJF zbjt_!tPLSDA*rAQ(-_o)bYW$r&Lu#QmDwth)YX*UynF*v3V$Q8&E)!N8<B`4vb-XR z>kS~TqMATlOVBy{km@L4A_3S&cXJP+^HHWdysuf(LD#8EML>s@I_>+mW>&){h&pov zM0%utRi7(DR`r>>mI734CLb19V>8Q<?*PxTk!-zdc0iIpI-cxNBBZ2%*uAN&Tu8?4 zPA)MI{W-bN1l$VhLJF8GIyCKri`5OlqE|@X_N+6o&Uyg~EcfUzoJdTH8g8C@6KR{} z^>xkLMo1I_jjBC<+JZhjNxaqt?1(D;2mFL<{lFO5CN=z}9I9kTu?E!HOSm7IIKl=3 zDMdvl@BN|cNWS}G9MI<eo=aqZ(hMmi!~aXsW>KDinT}FsxuU($`4j|A9A(#v#()2# zr<|hA*+?FW0f)Su*Bl4}0o$oE#DMK`|5A*Pr~%3}YVax`0FodwYxp;B??J(~=hYbm zm6?6OEgxc`s>wgKN*yHZ!GEWOhx8MDPL?mverLC%!@NK+WTZB6<?Ou`*~U!=XwKh4 z+IJKj{V3V}HRn*MNcNU6IHV}kF}0Z6hhF$G#otz@%6<Y78|hM;`iedjrv*Yf9Tx=a z{h_C4sU91<U+C|(&@jCYfdG%)cpJPPK7%7egsLb6T>_e%emyC~Wp%k!WkHa=wRIeJ zYp4Xa+3*VPG`DQgZirBWV8dVMjY-b@^|21tWFe}m3fL1T?A)m*+j)J|h&e^}?sb$9 zc6Qofs{1voP!<r?dtfA9YUssq-UG2=$wg&B92Y2~A+045aH2rm@U)KkYHWzXAvoIC z)nPx<>kceh$_W1Gt5o2+=<M{*Ismqe0PU~;p@fEB-A{qZxdvz~fV3eEfTlVExaYuf zA$OP<`xO1o2Iw*F*_s|J|4Hp;zcMB}kwVcLx~{HOe;=el`yfbRol2%gjE%AY*(xIr zqW}la$Ez8`YR6i4l3k>*zo@Oid4IRj%E)YVB0z5mT1aOb($-MjyO{JG$ONJ;XM)<W z&l-Wk0D;oL{+%|DLcqUu#1~oLa{Q~;v$yVqQr!I?QO}xq?W}3GaXxy=@EqEQCX~Di zH$C@L`>En~j#CkfH1GHBbzyL0xJY{aU|7s0opxFcj~VLIm---_{@ySlV~8MjS6-AS z-9a-z$KmMBxJz0snL>^=!9>1yyc5?n$0le}J=nwL|2UX-sezt218kK-oqsbU@o%6` z5a9y?VoM&e*|R(ERE%n3W`4dtJtSI<plU?S*S6dSAB`6!->qhgh8-4YgCNm%#EwaI z+e@CKD(7ErA;cj}7hw|>I*_Rr!-hTK-8NBQKP3QMNCeFk?Iy|{cufCNt*F&YnFdl3 zLQoa{aE7Tyugt`KhF~=%2&;+z*8R1y$2Q<Q$y}gXS6`oX2OWkHX|j*wc{)tQEHaTU zA?RF$F|K$Q*3@1Jm`y$e-<=SWZ`18Pgf%)N*@Q9`7D>ydg(4(3ivxgubu-C|C`^#C z5FoTQ(u%K}bkCccg*gx|NA+lHHztGm5KIVRkMxSuzuRWBHD1h&j0k}uu^QrF6R(Q* zjB?eem@@oF4;6Si(+_S0OM&Wqx49P!v=HB8YJDMuJa-k>**3dBDG8jh5EVn3>}sM2 z-J-C676*_s1Pc>!`0LkuDS$#G$16Cgd__Q@KadC%XVIlf=;i2ny9***LK=sqZN6b9 zQmWq2$}Lr)JS`<PRhtI#qdLn1K$(ARl+=8W#^7jZ&(ea-`)80S4bs9dX`1bpEDjM@ z|M6er{Cgu$mWx-H#-Oad=q*J{8jwaJ3=)H%&{Vx@bhYA#Fc}DrnkYT$l*rbzURa|; z|Iwj6EWA-y>XSL))NAIE=ha255aAn=L|WM&aio3uC$V}bgf>S=NT}qa4E}K12}G8n zWElufmS~BvXQ%G5-iRGe2NJ~{9b_$lSW*{lfeh+s_CLg=p`UIIr-eAEE59IkP0F-! zKckdITkKovde`2*Xd8qcL_lzr*AsyZh7Y)X^hZi?5L6a`AZ&k^d(98fDE_mrBN!5W zgg|J%e^>Py6MH=-yReXt^AE^Kf!e5`X}fJRIIR8#fj$HoQJoS2u{lfV{6)g<B=vrv zLRv^ORfG!4nfG#M(kSwW_Kc6~3Ietvcx$4!w<eD160Gl*frAuA2=)#Amz`E>RgZ=U z9k;i1Wg10j5h8O8qs{WzD>f@VlxZs-f8;VFWJFb|1?&Dx1Gm?<QwR6F2C!cUiO!FS z<x}5}S8tP4^`0Ta;1)>I9zo$)4VT-OaTwO?n)WgfMjgSY6Fszb_hAdHpMowEL_*4a zsbIRhv$cp~TvjY7(}3YT2vQA2U@P5gt~^$&zaHfQys}C{Aa+@EPVv-|aX`&Z$qW7= z1~+frN~47&Pa`baXt=#3ukmoGG2x1IVefET+l@cK(h$htmzPu*b06zVR&FdOf)NpG zSXJ(X_R-eWDcO*wG<WFz@)4t6H*hX@4@5{rfF=&3#OLf=RMm(X0J{)7sIOt*o_g;Y z(ocOr&<_Z@>z9}xBtv6#u=g$lWYvL0DNO*jeh;K^#QuI4Hi+PZfDjyihU2YMf^93d z`gv)*0A@5CNPrsB&Rz>lT_i}F!lHXj2|<f0^zz0_9YXHX`vsS}+BiE`x-&w@5L`-h z1=Hc81EP=mx!d$8yxWa5T~|3?*Yz9#9gaU^T_@O?7l3`oJ_ct-v5bMOxj)Q^+!cYu zD!H>iaroj)c3?EuHG<BKW$k;)VoYLZ$_$PSTNK+)fc(rSc-17P*)G>Mk8_Ipi<S54 z56Vi;L|fviKE7-F|2iITr6pv*zDa~lLEEjNkh<BPk$D|q|LDr%shpcM>!t%gVqXCK z>}ThZn{_$o_YuPw969GTvpgcvwjCnrbOBXNs^@iInsGOeFe`Yn@uLKO;B(wt!sDGr z+n&&$OziiXuc-;mPF@)|SPo31hpf5)#YM9Z6j^82OR@__&%9`_%{}Eg;2^hg91Lp) zFgjB%%=!VwLh?RZgsjWeJaL8YBMFucfTt|rJdS8KQQN-v;COE_A1=vVa<j;gB2ECG z1i;`(iR!VWy9$gE!o0egi8qzC8;TF`k96H`X=yGrJtqUX(es0PgHrcGo0+Wegy*xv z5^^*4K|A$l=SU7ezHyKb5&d4ARh$-ZQCdGS3x|5uUCFDU$BNnScQuWWbz02*KHy+E zNDqywz-x)G8+O!|;XPeEcSk?6e3YlB^#{oRZ)l^T{)ZpH&P?3%ngEs*Xj#p7`C#`D zu~E0k-+$@?1R1;rW$t+O*o<9M;coZcXMg;$S(|6K!M3whZ?6lpgT8WQjUNl_)+8yl zNH0p*q)*Og>mO)nsjQ4#f*_AHAa5#B<58jCTeN#pWxw`TEV<1}m>QMt1V_Nvw^1fx zgW@v=Mb~qTp6)#oY7AAyr5dIA{ygU*K5-$()kp-wc*3R!y=`e+Zm~eQvcEahWDa}# zL(ANX-2(ai>$>5h?*Y@8@9AlBs4@iBC@XQ)Bm=*t+}!K_Ck(U%xg=VU23POyF+3Zq z!6WPEw;5$HZAQ+{DQuNG{pY?tzee7o8hMK@W1&krE^|MoRmzJT+m@<9o!&$TCRll_ zMCv=vUPIoOrK6_J&++yJJnPm2ek7PE1QD>Yw-V}re@}ybogYwi**U?3^XANO(cE!} z<d+Dq$)-3-h9RiaIZh*+*?Tj%oBRMURKGA=f_ojy#;ZGJqOA-a6X}icf6YEVr=yeq z_MNu&+|n@~%_WPOGJS}!?<qXwc%SFubbZK#`B`t4KGMTzW{U)Wf57PVjj->eFWqtn zJ3jZiL`}zW77l`w@;cd%j{r*{?D@VlY?csLCebO#A?q(Qkz+BlW&I!^xlgfB)v4<J zmjo&yKBZfq^y3PHz3m-sC*rfmfg}h3vFF4EIEZ%$CMM}fbAz(dh8AD9wndw#(m`MK zmcG}s5W2od86W9?_}cJxU-=Jx&Uoenau(D1EnKcNkorMzG*$f{H<LRKGog9O)^t4{ zvWt;f8Dg7`CP%QuUM2zWbh~LhC=Ll?`od!5E;|=YWNTR(8MVwiLwxWFQ9{VKwJrY9 zRWtj2@TO-0+lKXlaBNlhIr;H>6UDbk+V(%onMfbDuxK4*fK(#j4Q?xaCenSR{6e_P zH(Bn@(5w>oH9W0STcmD?BkrTx(e&N14|91jnfwVZhmy!VWal3llzlVoP#`f4q6ETj z-aDYUaJ5@TFtZ@7;+FpraW_uK9?O<@GMh-pdV8bH6M8>O$u$Rla~W5wXJ@8EV>M|& z$ROj?w}|4-wv9eV$F`}6f_?*|SIj=;A_kd>#2YWvXi3}a?U!uW#wytjz6Yk^$4!ci z#ox8L&nWV2h5YsbT)^<BM|WKGjSW3=;y^$F%|=og8Si1Nkoo~!<I8woIzHTa(p=o} zp$kku031#q?v9!_HE$`H>4}9fVpesx_5pY1+nN#ulprgSRrwkc%I{A(?#)0DOB(o= zoV>Uk9GK)mMhQ}g2H55$8H4&Lug})poSOP)saSyZ1$19f!`}*Z`6p-M{Lx*KVjvPo z9k48(E%y*wDbe+OIzC+#UHp9qBzYSKYMo!yH$olWUpP8ZGDIz6l84A%$C`$V?o^U~ zePn8UO*F6=STuB8MWSUIZe2%(^aOuBwLN3^W;^%^cIx}x7fC24SP^wR9kS^N-y|3D z{E9ao3+xR`eKXW;Z0`9Z`ui{$__<kOHe6}AD|Bi9r=+^l>GsW7M*934@rQ@b-gS2n z^P!{dgmL4xP|<Apa?Lo;n<;>fj>QfA_s!oh(?S8)0i^Mv=7{Bk!-BTjopg&Qm&S+W z=D*_Gc5LLaBrUvY6b|I$*nl>mmFjpcd&y?*J2NCn3!BU!S?4<z|Li{2i5pkywQAlp zfRk$MWi<AQ7J0W3F_+??2mz`3?P?$20}~Dq(q!hgeNIzR20Jv0g-slvMk+H8OBeUC zL!a9J)ZT2GURDG6uwPjwUVOn1(o??e?H@I0(LcJmGj~tDf08yRqBr*=+k0X6&1<qr z^BoVMvx5HjAq?Z>PyghUvOFCh)>Y-A9990kRkr{jF^#UHHsVHonc#r&O5COX)3F&# z!v%8lq7X^>H2_*4TMBj`#UWugz7~#ZdhgC07_^J=H4cGDIsc&yZASp4vG&%ExG!8& z?=r@|`ft?!2lz}$Gh<%Li2)A$Vm#2<Okh>=%ST{4=Sap654fa8`1==f?}<CP=$)5y z2Go((H^TGNzH|<9{W-}fkxM>Wkd+<TUbZdtMK(-t8GR0mu8@D(#X4*0{!+Zm`#-@F z*EP(kyTDwA+Ge>jJ4kB+<R|?My{n0{IDua_Nox#pan^B^kg%NIf;lA!?=AKhT>Jh9 zT*tS5e9{)}I>#It1yFJqBb_80@OU&Yja0`zXC@;*;W=Cq5WV1lFZjWqI94esU;4OU zVx?~y6y?@8v;dsBSm*Gd-Qs>Sqgp*Es3^&m1bj=wI$rm4Q8wdJ_1?@5M>czP@fCn| z$r`2^Gw6iS7r1@A5QhZWtrIDJ%cCq}(Dd?3-V8+&B6Jh5ku(tLtH4Sr{&`!J>sX)> z6H|0q)ZERSg-s;C#3fJLsh4F)ad$+m`=vL4B07l-WRj8+IUGiZk-Sa5e-VTo^CiT# zLZNQ^oSTr|T-h&KZyEM4g3ujs5Tx>WX%9Qf&s+S|Aa_9YMn*!cxA!m(P8}%Z2Cfgl z3S3XSy#IONDm6}h)%+k~;C4r@c)2`!>XFpc@X{o>b|jinhLhR?5qf7Q+tS{tXO5*A z`TfU!zrkKQsOCxIRO4!xAR?CR0Ucu=81Cu08U?ga9jwJjr2FTG2qf14lL4oMrer;= z`0J~Md3y$`Qo|sUdHH|2283@Q-XZ7+w%vH%;(lk?%<rGPXyz5Z`{qm=?IuPYh(5>x zWIi=kk^zYosQB_akJx?)SSL7@DcZ9pX&is%iF=$`XlMgjoDD6(kfH<wA<{ugry$ae zP`m4j{oQM5Sf&JA3BT;yU&6;Dj9)6BGw0d43BE9_c4Hkgz52_g#>cjrTJK?eBUhkH z3%&f>UiFOo&Z>K$EkAkS+>5zaWK6{7i(Rb(7>g>-JXx?%-dxXNRGMIIvfOZAW>XBo z9Sg@-%S%xYL5vRa!jM(-dY2gc5~w)GO$L!D17B;$;Y^0|&3?-#^d^rOvO1}hm4wRC z2SO31U;OS|u+2z|qvzyp$SMX_p|WotzT5fBZU$sINe*v{LKF=*xdxExHPxy22m2r5 z1n;>9jjJw+zZ-6Golt|U2Fr@%wm??Kzuo=_=sy@xb!W|X)>Zr3I6;JnufIH?5wf-X z1SfgWOjl7tqm7p~-A#O1d7NeTiNRvW#g@xY4nKfY-m)Z0R3ti*!#~UsvJmjWLF8#$ zVO_7+>;RipUZEOYPw_guh(4PaxjY{*zcHdDjHDM9Hk4CbpgV^fLum;ksKyN7;87w$ zU?Pj*gMb)y4K3~DW8ni2Q4&o!v0DYjT`bJXOgY9pvO^$T*&t*lE$bX){_s5Df=T!? z#NVDLjddEQH5L6MvuY?+OJHXzNgyo#1k0@J4qHp%#-_fMCg8cPZ-jkfzoox?-wo|; z5MFtm{DX*a6bGXQ_Nm%YQCxnMaZK=GiB2W~`yvT-!`|S8-W=VPiIwr=>jwql(7ymO z??rsQc%&Pok51*K?twg_^Sg%5zA1=|lvto4u)~=YNrgN1*)H=UoZ&nBYlu>n3@iWJ z!(5SAD7P?bDz`KhRkU%?2z0oJL1dc#>n1TWgGN76AhX50zQtnZ(J(|HAB?g300OO| zubD%yXV{gF=$5c6mHt#bU{O_+4NAQ08-@{%_ghv~-`5@ojc(A1MO#=06uYXqv~Tj) z4~erz?fIT6QuWUzchOURt-%+DiEa5U%<D%4Sdj%d?hDcfQ9Vc429#(>f7J6@R>d{D z&b08jb3kzF%#CfOY6gG0Q6SB3tD1-}-GLM!M4H5=UXQ$jC~6_HN?MB>cQevqI<?92 zQ+Lg1ptVSXhn}zxmdjDU@_w_aE}Nq3{l*32F>Krg;(i`o?bCy$3GQR(H>{8p_XgO* zqCg%!Uuj*nH-hw-+LOKv4VoS+UlcX*Wck7J!}~U<Av@!lr5{lVTE6Cu;p#Qq4Ncd! z=E+cJP6EDdR2|VrzubowNOB8|2C|=yvq(}DN1pbRa^gVIa~7G(YcHFxdb%qvZH$#? zmEaglO0hsSku^~Vh-7DKoR>68glsA*Js=f+SZUf&>y+kpWB8S)%4dbdnqRojW{Diw z82-84NKPKm9O+~TFTc<qr`H3DBA0<bk+-iYdfMb&K?_&@7J>#`oPF%+N9Qr#c3M9* zNr#0IYgO8;Joidsra=LmHeBC4z8+_BT5~fSfL_;Kfy3pNIo;%(j11X7FpO}57i$V9 z+LRJ45}yBz`&@}O3(0Sd<j<J+-_ru>;90VEeP9Xi+T{GLaR*8&1+4D_tT9CF+kD+~ zOYHv24ECnI*dDJ$p!{cQM!hDOnO*wQMnEQLeY4{8JN&>}SeK$NRu1*{gYxAv1<c6> zEyFunXwWgRJes^e&XVis{BHl$@<mf_*}CqERfTDNqED5J64itQu!R}Ny`b8qm;v;9 zw%3NpJagpTOE-<Fk6RvGfsaS1WGh<g-N$L<)T-E_{#Q^udQGX0;Z*6*bNjl67gL%* zVrYHi`vJSgFEWm@`~kV$;6<hF^B<z*Rz%~0=wK2jzpjjq2y1Fi7(AvMzXOQ)6<`Dv zQ!qXN%6cgNh2brJXjE^LN5ydj$TgvEZZ&<$<fMR{z9f9p1!+|m9=Y6*{=4BU6X5XU z-wI=d^?o%e1ja;l+?pdxQ)N0UK3qYC2WWG^fR@1dAyBS`jV^TTko>RU5~Gfy2U!*8 zS;J1lQ>3}mCY-TRf5W=6uA!OWdPZ?>0sddt^h_O`;XZ!I>Mhysh8e76HV#}aqQD=> z_h1ih@+ZJJW#wz;!pSb3ga1X45}az)cp+6z4u^zt8dj6L*r(hek#dx|>KxPTHX?rV zipaWEK)^)Rg8co$?UfQdh#LJn&VrNfsyjUuZ{)vq$gTxtJLnjEuropc7VLr7IiO@# zWN;tH<p^>Z>zgE7tPZKUbjkCkQUy3y8v)$6-kzD2l)DE(Q3Iq3|7jUXbwG9Dq;Yu| zk?S$CcSCwwzUM4!nX{}P1ycQzX7nHyx&}Uh0d8cA;;9uya`+zrpF9_>hs|`T$$)BI zwQ5i#4IU)7!X8^Vzi>rRJ57*{NcE+sg@XBd7e|@#4f&a54K{)W8OwObJ^ROif()ns zLzJSRWM+-%e2~dI6B*Z{tm5{{GaDA=_n_M|``w;WkPpOM5q}I@x{<8}F*qJ4Vr|^- zOn*66>2N7qCqbNDrAV)%{emyE!F+5x1MoH0H&K0Q!A28<#s96Cf$b$d+xa6+Kes3& zBh?h*&I4W=F~Y8s*xLS$b3cqO<(c*gVk#%b2z{s++2gxg#>Hp!b2ld+2|6!8UD+4p zVuJ-kjnigGHSOO4FdM@9@chh5;Gw)KLrRWbAuHA*%gZP9Q8f=!$FOpEd1+ShKZP5O zTxV(>JFJ&JjhCN*8Xfl*%W#nCRn99uSupb@uOYolSt?-;JqWT6{5+FH$MJU{U|!!; z0^mB9Mh0MMEqa&Z88|W|{Q+mE<bo}lzsqp9REzmC$hMxt*Kx#aMb+quo&oS--<9IT zxdh^<q8l4r7|fSCKyUsa+bm}9t+ZBg6l0Ut@nFP{$g?U2NfQ^X1b`V8e=}ctq3E>d zz_HeYTh=d$5O+^O5U7UA!`rHvG*%zrL5kzRWQq^+J@Sfe97lp}Q|^lIRl48!BKYZ} z>T7ea9E*c<YUkT_Y?SYaZKk^_Yru7##D8CZ{kl5ROSOD!lMyRBMMXfPg)a%V+bdDh z_DZ%TLHuewbwN3@SMY<&)dovTo6^|o395-oYG49P8~mUENpM#4?C9`Mr^&K<t(Pe> zYKk)Q7F(;#_b>{@?&_><j>Jy|lkeQG-x-9x4O?@?|1CERsgW$~3Nsg4>Q%)#x8nk| zMjzIUjt+#Gyz7;Q<#}_?6iBgp_Yy@+pik)G6#wD&pJ4-nnXb{;d$`Za@DAj@@E$l2 zH#>@x<McQP@OynTsS`aQzw@3bK=A7$jq{9zAh;MLsnAyzRa80_I7Ya)V!S-I+-ztR zp=)ybfDVw~*tCze&93bYL!0(tq8qC=-4BuwoVwdqhdI<&xiV4R?qp)O+=n-~pI}?< zlV2Th>fnx8ISx=1xG6VQws-w%pxI;g`-?tjfD6907qn?4Z9rmA@^trn`C#j@UR^k2 zi|sM;1#nFfS_j>>O=TG1%`eVJFPXx@D~3_4KWkyxRn9{O3eW+#j(tH^%AWxNYG+5s zhUai)qS^f+J%+TQubKNl-y9R42hfw;x<Tk519P2sF}^skEi^B06g^1?HphNG1|PSy z?TZ?5p9y3isB=5VcbQx=vv(ETupQ`S$#xNL^K%|2GdV!!4MJZW0$F2#H=ltbeS7Xc z;Mr8(O)?QXv@EuFHpg%y#t=>|fa{50y*Ty`?4iMYIsF(o1Ry~mxfPZbBeOj_gw%LG zM0~{!!oaw`8GM8%#q9|M*FoNgNDqOucOe(_=@J}P`PBz~lKmiI9<qsfZuFijGoH?) zU!I&=X*{0G3Nk>3lLcQp6)R<Eto&eAEBju{vB1%`-S(QsFwOeuFlldGd&^oo!y_Fp z0mQj7I-rB5;5>X|fxr<7>MYUYvkF^meZ2e1_FL+0{PdAS;KYK;U)YI1GtQIZ$kfeS zT1wz4ix3cN-nM=s2y;Z-cWd!VYhYWz1(2h}Sfgr6emaK8E$S)@f&4I>$ZXKJ7`{Ie zW~*(;R9QTkwb5q<3Sv9a(*jNd4CN_$;ka@8VWyD8{VqNzeLK~cP&uS_+{*S8q^bhu zEo&WSPE8Gw))iB=87>-S_na}<C>bO=z2&lO)ocTiOQ((R3DaQuPCs5o^ZicIlJ>ya zp>JG+A6wwOr5Nhb6gYdazG0ub%DHE{O6J1{!FqX^b^R~gPy)3>h_Jid-b1Hx%6n)! znP*X&#YqGN-(XRE?-SY<rlaFOS8{C03jtQQ6$tl+rdkc32bsvzQNd+>0PN`1s<|MH zyV+RX)Li(T86yVV8Hn|tOLpoX4E-M5j&-u#zTxB8eAk&)H#^DJeNhIW(mibzA(MCm z90nS_!(>=@Ew><V&S*b9<&cfaV_?TRnw{vjL=&-Xn>Zyl-s<YvD#Kj_AH4v_TvB>2 zxF?Dm$^s))dvG2X2Xcq(?<CGNFwlthz?EMy*||W^@lR3->h7XZ%HN~h2ZnMsk{ey& z-|@gUaI11+h*tR>VF;6%80W<imQtFz+|vUG98U#+l5+4SR1?o6a54$0ZAyb<82>G@ zH5#!hJSA-al3exv&0iAr|A5f*p?0D|Q{Mj4_bn}!b&l?e(1G=fwF@`-HKk>|9EFYf z9{$pWbz>=11q*7Yv8SIcfrL%8J)DzW0;Qq5;K<Oet<@sDQ^NX%>A)R;gA8y=2;=j1 z!7Eu1CmZEmWy-OXhtGEhw;0#A`19cK+29kN5s?tAG@LO2nf=6CizMZo7LTbdLFdsw zU{U(tKBBqe54orovvI3UY>&S*L-a2ywRW@<0`;MOh2gH_Lzi*;AcB)%-@)*jl!2c` z__@yIpEW(kpuz_id_%^UEKl=<&&gd0x;A;i*2iwN!*kwXMS1<QK({>jv}5A*z{A(T zH6}RiyM#|lViwk$^;#|~n?DG}V__Yqn_u<U{a7_@ik3PI7Q3Q0jw5*lc9^Q<4rFn9 zy$!K>4o(c%F~xY!n&2rLB)x%4t3K*4d-SnSSa)n~aLogkXx2BA%kU1XIrhT|hN@me zvCtY8W;$?K=eK-IZQEJ~_J@@MW+UQqw8u!3=L?Vsq2n%o(25{Ym|Xav;svw9F!dsE zN~M~=@8F~EYT$JlDALjp^I>ti3_Kcz4=60gD`ayv-lWxaq{`Jhw(&-u$IN2qh2$S; z>@mJt5L9KdYYBxK>G-(4iHmE%3nE3spr-OVT)(-cb;)k{(q9i^@tf?#tVzD3#h`!L z&!2DfqN9KxsD#Tx3ER>@ZpF`b8tS~;>eXD}I8vz?t2~0|ffmDH2EJ+G(YwVzH8y-E z_)&HALUPllIxR-z4#);-O4u9&WlIRN5+CPvJ5kQO&eYX*!dMQPy$IuF#`H|I$G11c z{r5ygsf22_#)IvAKRBSZ@&>NN4K;$2&sZuWJ;wUXV-NmB$FYuwL*xSqqc~t7(T1TT zp2>5$6)RVKoBfPV&U6e90fVc*o{8X@ux7I7Jp1$2et#Vm80%E>Pzfy>;T8o;{ji%| z1)q~gzdyHJ(vJ@S-h$C}WQihuUX}DXlx_#e1cpA_X~W-=AJ9rhgV9jfSG~kFd>Rz| zJAg`0=~Lx5`?YCsRfm<}qd~P!x<3+c1l%b)4vybkm`qNZC%sSh{I~6!4i6oq$OmKQ z$Xc<7`yajX;lZ1h`28Dq#$B)(>(I?RWS_K6Hw|ga!Q~NInBZf;)9`<cle}1}&_{l2 z=l3ATVqiOZ*DnArKKI&YL@1f!;5<l~{1t}05Q|%imcV+M-1@5$)NVM)RRXVs>OfoT zIQ<A$n@!0NNo)AX!cQ3O@av`Aic?AY@$G#}=J^21J3T-e7)D<<2Tv<|97xC>0r?rM z`@r<df#1u5fAV{{wl_1p{^S0;4I#9IUd~JSkh%h=vG>ztD3D}>_s6y-P+v-0SV~hi z4udwg8)^Q=<qyXWM7d_XxZk8MjOC=)A$Gff2_9{~FtfabZ{B~)Wn~E>?ICZ{Cp^-% zsi3<#RFXDR<Q#acVM8<O(;g#4`;)_!md{bEHvOgMZ<2j-*#a5CEL1m|VbIoA+MhBj zfNaq*K5(+}7o4Z%w(h}X-rlIqXd&{Vg5c!IY2rsEH~K`TmD|AY-V_&z25pw}MWxh< z()?68^BjXEP|rr6B*Q|`Zy1go<F?^1$h0h4+T<pPvcYL5aL5(Ke`4%B=2TLgm!48i zYHUuPb0!a@vZn-O+W05F%oH!V1Qc>q{nO>L@DV@zMP`Ge1+pr6i~jeb%4%y=E5T98 z__l)z)`SA!U@(*IFyRvUzzvFwz`ffL5Lg8VycOH5u&gGKW^e^ZGwaX3770}VIf7cF zUqr$O&{<e)g;<4Pg7*fm%pUW^+PcJhXCk{RlBeJ!MbT9s4Fzzauvy@{c7;Jq=%%;H z68UrzrNUOnFEzFE)2ZPe)O|4Q`essI<Z3A^%?$#{G`+dou1`7By1~Ixs52$b>*Qk( zr91a*Cq4mGQCERcWm{2*M_%?#{TnV}RZ=T8$2KLeNfj<5MRGhT5<~V{scq-LvGSx< z!{--xVN&@@(GzwNb4$4Tj!A^gdSVvYtS{RzqiaRyZ9VN5RM)Q!f(VvmJon7?H09{a z4*9AFS&hT`_uXZ7^p)$%vH`#(6S(B0lF(k^5Vs_fW2AfloGRbY7Q=?4xLmzEO=98m zPB5M;nkvHe+u0Dir^<Z|_LFBMJe!#zB783Z!+$!`bF97dr03Jap2MXLEPd!<{mG5- z0m$<Lj8scEvn#Zn<7$+y_bA$>nMI3<J+;w)#hem>nK%#(s@zlD&SMk$>c~)xF{xXV z2#ydOyv@-Hn<$<J`=#5fpuYGHwx+t>ro$ieW}DIIqVR%^!U<LVLj`_5476?!)==Fw z(sEic{EWmFXxS5nta{m{)|?e_d5h)L!2PmkzaiLnDBxfC#4@vYUhoUterQp`i{m5B z$h)RA*=91XyFGvxW#)gf@MglI%i>Pn{>_V094wkyE_9T1S@X{;z2;HiiU5R__xc(B z%!OS<|J$<tQ8;EGDT7Ct2z3j;&s|P=WKY$sOd60MqguyND_W4KgyRnlCBg2K>`?8S z4Sp=amRxo@Qa%;>{aCbkQ|yG-Qco;MbDX=rZV>PzNn_2`0|HOTI^Oq+DJB~AorRH( z^cseiO)bF?F1&fvS!yp#UDT-F2B*I^7;(aGc;Zb>_0}fGl*5E~|A%z*?4~q0mq4&a z_)J+jT#E;H7XoSmz%e@bkj-bD-GH<UxvWG<LT;Ld<0fo{)nN}qUJz0(Jvi_6{CB1v zlDq)><Qp5|+W_#DU?nwUDo4RqBmhJf-kxjbmLv`X^`^$!J>Gq9Vopye9(EcCLBQoB zJID9QC&T;@p3gxW-dYz2jlO}^*V)d=LHp<~j5WeN0+qrwOSu;D$X0C(cpxK$gT)a7 zu}-As*b)>41~EY!+&&tJ72!&Lgf4up2ON(EXK`q-=Xm!sDKFiQRc)e>nHAv@K!gii zW0{HdC|Gq?Yw!O8ZnCe6cqItS4~xHuo87+w3PSO~BZ=6CQ!PjoZgE(sX9kZ9M(jo4 z&U0`Vp&^MYFIdUchv7Y)zy?CA>;q8st6^3Gix&F)I}2IQF1sd0W*t`$A9Uc}s=WVy z|2zF?OU2-A$F0RX99k<mY(LA4O0mEHcl`a#Nlbb;_uC!jOuV&!?&|qRCYJ9hi`I$A zIE`CVLj10@GC@K?gBH`#RSd`XR^Mv5wj^_f8BZ}CR>SO`3nDT@?3FEd6^~)&&IG(| zvGANKVHgQz=JAl-3F)Ayw*$3hPV}Xnv2Z^%oK-gGAuv7!^^{7MPegZ5PhZ0Wl|ySH zs9a&0h{u@7&5ttHBHhiqng8Z`s;=2}_U;RgX&2W!5WyGWs-e^NXt(jIrp~(g8$mA$ zXjHDLYSua1EjK*?`PpPuV8b>w5{rZEQhiy9Wm(kplOBt#SXRRS{9-Glc6csNFwavq zgdjSkB;k$+H?JAEX(-O$fOjK&EJ2{(P5c0RX=y1#EQrz(K7^)~U7pQUtrc+a{oE8Z zt_!7wscZK3<krV|q~&ODg+_G|2*)}ZxH9YPIvUq(fxkPfAR|rVc8~iG(R6kq+Vfw} z+0hAbH{B9Jk3@N8qL<B#Caz@fPst7Ub(2AV?Ba`x<70l8<2fG+sG&#o{vWWnOm2%~ zCQ<R4gK=1yjt4^7*rda~7ivGGH#P}wfpXzG{-%c6w*a0k{i?bkZ!7Vmno(zOXYS)I z2h1&3Ci_agqXWT*&LDh<Yy8WxmBL$!V^;v}F!Z63cF$fc7U)~1F@Yy8;AGjRX7TM< zwA=L8_{Xj^+vD$c{48bmoFAbu2aR;6p@;B^$J0UXhqWA9&9C!SW0MR>RG8^fjZ5%f zsEzix=`p(8rnsk?F~ZUC0rKNVwjGB#XWJP(@nPzP?4k+2d;!ZtZPPB`GT|-o#K5Lj z;qUL?e^8?DD0=6u=19-k($<kJPy{0a9i(c8hP4yF;I~Koc~2hX;2>k9s}RIVAntL; zxAc6GELRLHmIT*yj1h>`qsGQSWBb2C{YfwzKhkVjc{ltICkUW-0!iTZm_vi0T?GN; zEB>)?#0%K$y=x@g6;ckKi$c&FwCd@rOj~-+t4VZ(LRRGJ_a-XzXaJ$^;ftbce)Yt4 zv;*8vLH8i7TE}esAc?Qu8eD|&-+ZhS3>je*85yd>CD9*g+3<)4YNk4=4=M*z4S<Y6 zF-*CPoyQrxT52K40^zv^0yeqoMJI+!R9|Es48(y%p`2{ZnInKgVZ@QVs2Q13Fp|oq zR0F)Gdx1QTku!3O-qCR(Z95`@_<UD>E>AbY;w~n?i4MTmn(@uwM_2LGbthzjq;#}D zr>4t4CvJ;)&>R;WKEn-J#Uc=DuY6P>t??_iIY|h^g>bbh{a{(AA&2Oe*y?$3iLqG{ zVSDt}PP6De{N)%^PDLq>!IxVht4^euF1t5yGpJNM75xMkG~qJX<}L00+@RGGh)u%q zOS#qv1997qfLz<-np)CgKF4DC@7jP$o5QvL==UVv*9*h1bM2!jc+C#sK3qE5rKsqn zO%g5Naf!aJ>R6EgFc25ggs(q4?-IQrg*yobLU>Fe9rJ?k5e;kI*}z!vS~AjASlWKT ziOXtRRnA+~d}(j@QUed?Azk%T)BNj!ib9Jj0}WKMABoV}c{ldcs}Q~izneV@RUAU< zQV+}Q#h?BI`&M}&>WD;X9kt$A%sq}Yc5tAe2kE*nZPPc7@E~<IEBd@E$Gi<>K}AP2 z9C4(a0s}Uw?Zwu-6bd0+UQQ>$6w<z4=l=~XTMTL0jRQlWU?Q4uE9)w~W)LD%zYGmD zlK1J0vw!6JNe6&aDEAOprHr=CWby1o70(&p2bX-QU&98kK+?7hd$0jv%@GT*5&d>< z2Y3z-0jz|4=HE!|blToI6~hA_=tH<BuETQkro9}HpH_755)l@%#%-Gg8VY;g`KhI6 ziFu{{7=O3p7X8>S^7w@&137@T!)#RYPpCQGZ@g>tNb?aWo$7)V7(47Tz&-_4O@bgm z+QLFb2=fr(MU8axez!fN+oX6i&O<r}k*H*RR`?N3n$>ugJAmr<2<WJD(%YL^0YKmE z%b4RY!6O9;;3)_u1itZVM4$dd(>8Iq<2YChl5+h0?p?n}mj=CC@8FdJ0M`E?IAlVw zW$-;5NK5R#Tv~#j5&w^|-Xux>A(^u`1r*7)BfOA;zA^<Y8kkG)#4nB3kwhZE8=%o| zval$Sh`)#sDd`wqWi3VHPFHopyF&1S(m%l1feI;6D!(c%b=FN3TqQn)Bt->EqE?#q zLv}EoktVW<jI38ne@1+n_3<zb`T^1qc`$AEyths^=I%zPyK?@=NHm=qlU|`G^&Kl| z(A5azyumm&zT{C<)lBCkrcJenGj9bf6-Qtx+rI!o<cYL4f-yegfMM-OgFTLC+?~g! zR_8By6cR!R&oFG&K%oJA2xY^@r;!uk=?Ngv$#F!*5|r}Q19VXO9t3dF`rKp8%aPkv zyzEj0)DY>73!Ot0eMU?9$8wXc!G@<Y);#lc-TurTNgXAMKGz`0yck8F|H5TXc$fh6 zr~!4O%}ua-tka^_d1a(cIc4@ry7&vd$pZY+R433)1!|A&4K`$4EnNdP(@?qw(*CYf z6gqv6O|YuIzB+_XL{N`6Nzy#@%7+q;?nQnl1#RzBal$7!VaN+C1L?N9FWLUYJb03N z+&96iWY`pfl#%r3VZBMEb^5>hm$>Pn^bn-=egg)YdGC+!!45!mke+_gxlLvVUGH9v z0P$6RC?Tj|a;mQv`cR5|GGHsxb2d8GKr@cpB>na9S)|?g&uaEh|M9F1TO(Oqz0m)V zoyxEm=!2V?233oTG3`~FI19`M@-sYu3-QtlB^N)FwVC8XLwJUO_#_<Gh(qY_{HUE^ z9Hdu)3V|oQpMHBg1?l<_6lW9#tfl<6L;21UYt{#`n+dGVd1v$;{UO8<cGP4f^_*M) zHVG{oWe`~^!UIm`>o6kFdGQ9tJl9kv^3?z%6^h^q5tzlVJ_a3PEIx44pdTVg;OLg3 zR{ecank9N)u1Y&QgL^-S;}|4QsEKOp1_6gvhaYJ%p=oV5M;L7Hi0iI^M^!=*>;=JK z-=gu1IDl3+4&cCG4Ok&G4rxV7Q#Wk6D;|!yR5L^9Zp0p|`V0=z#ogKprQ09~v=a`X zYkB9cq=MU5h36@%A&8(Fm_{Xj9(oD0b8Mv$q=n!wL230Az-xXC0B<#%;zg2xPGFsz zACqlQIf6+bUA;75ae3nG2Ts5Wq|e8~rsvsR(i=AUvB}ZV5@4c25qvHJ7p%;p>LQ0> zsW(O7MqxFq%*Oo`X(gXj-=sOC3KV4?G(M`xN$~>SAeaoORh5mQM5Rui6Hs{^iOPbj z%A5$B%f<1MgJ8`Fu?FF0pTkV@VUt4z{9pM)X`o#QtJb?%`$04!DaPW`J{k;?L+W%7 z$m;Wc4tn*VNIM&A;ME^QSW<2r&}9|H{fgiW1%j&$3Eu&pWOn2;%i<fXMs(0JT&LL7 zFv{?1fm<JZdR3P(BM5S6WeQ8GN*y`uA<Q85Se4W-l5*iPBaV;2n$B%1(Sf-!$}Wq! zO>VQbE7pPuP9nMQeusx7SKm#G1KkBdMr$jpT3zKq2wFyXVG7c&p@^)WG6+k)+A>0; zNI_X{KCnKGHNI}(kZT%(yGaOjUut!c%MGi(yOaz;P6#iCK&j@Vku9}=RNAKisU+pR z|6{1^Iv}%FyksK{r6EC8w)y?~B@omK50S+d(}-ZnNxJzhO9H-Uw+Z9E$a|7~eB^%f zz@HSpL)Ph8q<0|nZc@zis1`8K2hPoRNP-O9-v|bVRjupnAFWENiQssf1j35Yhd}^T za?|wXClLA-B0X8oO7@pxm^?Jp_FQ9T=JBJ2NIMYZHUg_8I(n6Cp$RvUW->e@At+WT zA?aGPR};L4iV%)MthMAAao5Oco49teO9@#by+Y~(QjdEIQMcl5gGKXFyNVE>nURqm zh(|`Z{E86?HxV!m9RnDW^!WzIhzQw8=OR5Y%9m<t$gv1AKZkuG0utnlTEmJRX~$A% zXDuvDyaL|1N0MswAP^%KYr>S)Ljr2`jJz8@UGBY<#E;b#1dLIUhpn{lNv#&ia&kBV z3130b|HMR)_|dVZNUJuIYSdAr)tBuZ*`<WE|D_HQBc6Q<ET~-ISuVYXDjzA^W@b}8 zLP`3NwjpRWzW@jk1<gVO_d~g|2t0{T0!dYnYtmAImD-2_%0+tQJU)%6m|<w6WcUCg zWFtV5sC}okm>-)hIYfjS5%;$LfGh`0q>pPvN<|W)=dWQR?WPc^5h0c$sH_pmifpF| zrxC24C@XA<<PUs&c5f}|LwbRv9#H~24Zox$z~3&#inQtqIO*A?@$nh3M9z~xpLBw> z8-zec<0KFwDhniN{MQ@c>L5haK~+vjf)mt?s}%!uyh5znvEEwOHeu%@>i`)OS_>m> zj2~|>FiCK-46F{+`r#H4)LRw3^tN7LxZZxEMerEDVs1{Gzi0wL<nN}X%ytLV5R~IA z61>1iUL7X?3BA=u_IuuA`sMBc`*X`bCnqO29O@ASCQRCw*Oo%nwKvm6Sv##KB+^{d zT2e>WSG3bnFleHLuAwbg<4lNkm0N^5e}!08CDTs(k!XBQ*u-ma4E0wdDDeZ7P&Opz zhtcm>c@mK?<7hEdXd1~bQnTUIgy0<tWC-O?7)g>n0f=wawqg>?rPBOAiL`QT5%SHl zExy10EFC7an(XIq=lOB(@D6ZfciY-bZ)>A*Aq}lr^*K%0Vlkoh=ct9k<9!|m4zby1 zj#mE(p=DPEOH{Mdx;d)s-LE}>3WW`vECrsM&UN+$4{IiHMT3477*wtjosZy}otuV4 z-kn=f*|?}@FU~%u&;Goy?pgl$p25Mss?KLG<vgbW2K{ane$Y=%HNxLL6~VG9b@A~n z7Hv<I&9XNU3J21hhvoM@Squ9i^;LJ7py5Ym#}Q$EoS|T^+OgkL0JjPS5;7U+vH^K; zpE7<m?T<;!we4+C)vJEOZn|;(Zz+lCy`PB-Q2^yt)*drg7dwETJ(&9Xc#SGCZ~cKP zLitbN^zhZZr<(<_FOTdZ>=vl63Cf3Vx3|HlACCp4R|a)IWIAqHw=^Ao`4%R_3qm!; zw9u2)XSy-`pPQ_&c3LlhjLz>Sh@(JQj~)zR?)1OE@_|pFw@|GSe4_+fDbIHK*3j?I z0Iys*D$tPF9rA&e2J?K?GNRwB%7`5@F)`V=lGC<4oiffpWWim7eQP~q$~xy`Bc3|Q zSZ>q`*xRmIRM_$)#z~r-+a@rr;-#pVRIh)CZ%V||5SwF2Y!FMJ*y**e&k(&(zZ8+) zTeb1+HLVIb=`CeXQPW?2#X85HFdM$tP3hRE)MT;v*!*zrm+fBr{tm*WRk`3BT$E|F zIbgrO%&v1nllueq#uF_d7HicYj1O5XRIX@d53f&kq@yUAaYI#*W<2XM`OzADwaD7{ zGBk$Sw!R+dw@|qPSRkvgQJhd+XCF%isS5!8EL+o0Os%Slnv&_z;GntLg^TMrhL#1j z9wSw8ILihZuYtflu0W%HF+3t4>cxDy!pI0pDw_c@=DAfB)l(*`s1JVuM`xhtV&_J= zP$G)?acSk$UVxzHHK<SRo|`anG*Xa`lG$(^>rF^yW&d%DZ{!3AB(Yj;#oRN^_I*yj zrRr1u`q#P$O5^~*+P0+FI)oBC{+_^GoYNkq#3gp5*C?g?Z2$Tb9O<aC#Gjvb>`QBF z{suv7d-xtDljC66V_~SWjz%QDqJrr~Nt-0Y2I8l)6uh)pd;L<|2DF^i<N`4xcB7Zr zkW)PCSC=aVn@oFI-+g4jByC+qKP&#&>es;&Pw+Plsyx{x{^!2b&~|IE^keacC9)KI zSQha}X^Q=M>{=58xW?xNPWOOD;949D^ek-Yvvbf*87m5@(X9x=PMF@xSr{ptP+f6r zQ{ABRy5L(^zAxSVv=s5snj4s2uvvn?8AZbiFB0b#+n!bp2Yhmt!8QB5HaZafCqR$8 zIRgv!?l$-&)p7@!`Q2PNr-S6FDgP%F4LJ0(>*EgxVg{Rf2uKc%6s_=r%vf{o+`?DN zK`)ECyW;)LdA0cx2YP|sI<Z$HIlIAgdeA&QJ6m)84XAW+a+$uTw!c=Rt4WNWJ%eDW za1XzaoJS-*TBX?NNtWE=;#Sk_vYEY7EVBYqy|oUmOV@VaW9a?VBiB#!dv$0=6+zD9 zU@;Y36m-Y1h1yyuVq5kHPB<v#u?oJb7kK%SXHM;d0{@14womTYR1-j|J>X^5N}$d` zNc7sO`e=QYKRWt7(`3ZLJZmIP>FB6Eh$QaaGmWSj0`mO3Z65&d<`?h`<??8Usspb7 zXkG5prj)WVQmcj|offz!y-|)e4r*~xfODfJt2?QB8MWixyLaWkhXY?vMI<KRf8?Iy zY`Z4qhzhdA*L(jBkd=PbsY;KtAr1l0#k0;#vx%SWW(k)&7qhuLoAtd2l=O~u1EJf= zwf~9wue>;&dnmJ&xk_n;6fN2NtH&*%3aM36@!ITWJbUh3i~h|g1^nHrR(GTl-nImI zd?=GY`>#6rJ2QU`i+R49p3|WP!aPBgF)aX=3UE3i0&81uk;WW-PKL|;{(WbggTFol z{~&s5Rok`?PEM}4*IDGOBwr?(cVVwJ4Ry4s=bu~eJ%A9Je{GuURnc+_cak-mw;QL{ zn|X%T$arq<DnN!?%)?;Y)?M2RrGQ6ve4|kS^RF3XG)+|0xg}?-SR%3E-8z_VJ=ohU zWiafXV-72$-o^Fk3a=lE$i+^GRB6u?&(w%i87v6kCcVLLF*(;M%DcU{A*I9AD%PSU z|Ma?>5l;Tt3Drf>y|dA>(w-x*J^2+o>YV4lADW_N3sO?~76B-wgmu!KHX|W7-U@sb zFu@wzU!n3R7PJJH+O(1-8I2G3>P1D5wBaX+QEltYW}yNx&$jr-Y|zz);wD(%JTxdf z(b3^=Ie<;uDitWb`y<hbyNMr{jW!fM{NQRZ!@z)ZM2!}B%4)5R8p~K_R8G$sdI*4D z$q7(Ql=6|@<^ai-1A(0uN-rf{_OA(vC{CQ>P?JCIv|XzA2?J)OYNGopGi@3%-1D?H zIM0dUsikxZD{~BfxRo8Y8y$lkiLo>N`FZ;b)si*O`o9i1GVFGz1N2^N+LM`1wnC!C zO+ALiBL~56NvA1bm_7-t>|x)i$6AVKN4;%`nzdae^DYPCv(|%*-k-#|+6m3x6A~io zN_a-_aVLL@OPoGgyuH21uN^o|w#&8!sRpwCc6Yk5<qocHyR3Unl}v$awbrbz0%yZ% zL5K8^IA`*sCld(Gs5C$MuR2%SR28I${60-70!7TAE%v92zx^Sl_=@J*hk;|KOPq_H zs6S>c#lVmA0>8&-uR1=Y0w<Eh%n{wFd<%<DEK+jsl3FYRh@L0Ze*i1~tHmGfUA)$t z?4OHOQ|j}CSzWj)oI1|@xY~*O5n+!i=Q^L`4*k+C{`B^{!RuwA_wG#vT|W403@G!d z?eK?gqX+Eogk>X9Cr4n0;Mbg5W;gb4g0@74-3d`+lEd+nHsdwT|A)OV4~MdQ10D$# zrIkWRi$o~0hk8R1-jp>lZI;STM#M-fp(0C0WG%8qA=^ljorJPZ$-Zyd`R-?;H}g#W z{`{`*yE=c=Jf8EMbD#U%`?=3K8Ml|dsyE$e6&s?#_6vEHl&R@AexD$JNi>A~PNZ1e zvuV1GyDWajEIK}@eveYwSlorwpzz@t_J|QfwO@G5T)u1~q)eOLYG3ulPy**85LQIP z`Je?!<Hv-)R<m!Rf2o(wRmr4LH?-{+M4F!{b7*%OZT@=2*+*lqI155k3z$>}ckEfW zQ{xd;?GG1%X9OeFz}Q+SkR3yqo0_;F9Upy^Z)OMlc_C<r=Re%}J+!(=#QXcHyL_NL z778)*y`;t4Q9zhfdvi5HxZ|8ZWF;p4$)>j@jc)@Mssc6W1qTqwiL%Y}N9_|IMy6=C z5n==G1FxoU6#1_%*4b&jPcmZG5Bz6Bof22tv$Z@#8=;Q*f`?1(nj{R(^1s=Z<s>6s z-_KZSd~2|M-^f`-BS}C3W?=4fMo81UvTl4{`)%K|YU~cV7)^}n6B;R+y^QVaZ0pq< zoo@+fgeD8Ke!WI}-DA_%2b+~`CY#*%5UdoRJS~>v31N_s;2hkZaL7W)dEScA$qnj2 zu8jlUpZBjxx_gIT?P^at-MH`d#a}Ge9`EKubMeR=FPsdGdzF!qlkL5deN~GT{CU1$ z)lXEX#T^^zx1IP5f0~zR#Nn$mqvExiFK>IYmHtBW-wPBjl_68VaKUVaTZul?t@NbO zX6(PUy=<w!h)T!M7)7&F@7nIx@4E?qCRWZXj!@n)pHBhmRSOURxy<bGDwXmqrC$#9 za9ifpe1}5Y=gb(E%H&+qx2UO}U#lm11~fasA1p@}>XyPj%p)Ux29VgbQ1DsDG{axL zOLAzr90zGS7~-)70K{`9H7{}ZjS2Pt!UNw6&R;55KpOqH(5NZ^u*=bdeic10*WO{V zg@$4Okjo{JjX2;{49C8C>bqiRKUO<d8T9BEld<Pc3|s0x_g=|U20$o3&isLI<P)-I zCxf~>N=-QbYcf$z@XXX@D^>W*_l0n3R#Az9rmXbHSm*JQI^)J)th652nAexO_rB`4 zhJ_~##%sY7$zosC-;^&B{J2fvzoxMTF&7%z>c59Hzw2|VpIOz|zZPC{JUmUVBH!;k zlhh^TQ6l5HkBOdFJTTn!zfXy)PE^Of60FmIsoVYd)5^4-s2THAGediyKxC$g2a3s6 z@his%3;LS@P1;E}b3@}r=0?5Y^+GwRp_zxfJrta}sh}9{D8`ZWWnh*_!Vt1RiWn(2 z;lgDXu8VZETV+*$A+}ecF|Q@C_RSYl)mzSQ5{jOZer-t-6=_F$&V5h*7Qa$gAbZZc z#3wmA(^yy{y^v$Zp8SIR5AmkJR#z8By6lw0BsrV<wsNzk^KA&e2ErEl{x+L!ly_Q& zZ{v6#^BzPI&6f^cO*_vU#bWJ)s~KfZgyY7gh3cE9pY-<4Hl*XY0f1uPA0uSf(2O1% z6Q7&#9b=+Tm@O_nywC&&Gje*<^69A3Ac>yCq+Ldh=h{T!9c~Z84N%x01bXCuHF~Ve z->9$o@Ui}XVNhbS=FHqoY`d9Y9f3Z$Z%V?VxwOA-)+Wf*s0{Ff&ze7?o~XF;mep04 zoVqHVjO1Sse(`Bc{F4DG&Nn#YT>rau`j@M+llx9LH@^&Y7!U{8o##b6HczoXcJ{^l z5~Yw5Jx!0>+R0?V$p7Fs?B42niaU{!6gP73;;b4gvs1n5lwiA=Ju{~NtE)XS2?h&+ zg7CdIgDu|8>I`m~S9%&OJKpj9*O1n6%~KqSjC2Mmk}D^L4a&l<<}|tyqXQ+8Qy?zS z=a=I>r@CSvH8vMiw?r?Z0nTHZ3H6g>tCu%K^kroAL|tu8HJh_AdR+?w5vw$>!^8xJ zFBxch2xZA`BsAC>|H9PSp)pObMyFOYHbfl@l1u5I9Yf$&n~zo`ZpiyWYV<dZQ!@CE z>`0$9HCf{`R$Okin{p9GG|a2{q)dF=dk$54H+7$K7iX6_(+3k5*!~;l!1<h&mwOSe z`}F!W`OieZbF-7`nxm)QGPg6!={j+&DsTH`lAsPzXaNw-K!<wdI=h8}wd1;WDhLth zC+!htT~r(eMB2YRsm>79m6ZT<2*3LW7yeQQM-$T(7AJ0IKv$n=GAt;P&juY|Mt0RN zF1TYL8MIiLWh`viMxJ>rRjV)AYl8@-9$zf?;;NVd9?fcD&M;Shvv;{RwpPS$+%mc* z1VTr2h#NN;b74L6ATd@f;hLtC$#8b5J&!9?okA}eNbJ<yXWkvAnwn2L*A!NoQVN3u zV2K9v!ul5|R%vP4eIX9R>6?P9#^XzGm1Hu)TLbjM35ldx{WQ)hsMf6PtAy=+qHfT| z`|^M&e=6PYD#nq5aLbm#1qd%pL`+4>OAy5}5QYx8E5*jVHX$hl730!hAI7pW5N<C8 zO5<S3g{Bu3QU}t#ASW)pLFfR~dzoHVk^wbHB=oAnbje=MPd8|V>N4GD$o-d=1R+&J z(fvCe(DZEC!hzeAVYiw2K9Q{dMCVo2Fa6Knfw^~ex!pK^*2n;{5S7}0A*>%2aVLz_ z>gyCz`t=ZfNy4E!dv3&5pXzZD2AIf;?nCQd;P5M!r2XQ>NR1zdr2GN`{L~V^(;J8= zEG6Wqk;MgTSDUoIJ`*vL9MMVGSOtU^WW+48$u*SFtIQ<Rrh>Lp<e{N2sv?=b4rt~P zyNFOR2l{#uJn#DwL6)?_&}O@gcZe$ZX+r!0<74x+K_V;R56e(<i{~vaaX9JG(Of!& zNL=*R1FWh~M~DtLe7s<x{nD^b`Hrv7WTRujDEsAQ&Aq@=!inW3q+8#~+7+X64dIzZ zrQ4BfCJ?bOrtf087rg<NnT!vY8-_pPL(sc5bdDPdhJ{o#KfhXojG9=ECPkU@3|zJ@ z@{-CO;E&tS1}Qx6-yuSFhN*ObyIIn6#<hI;EZJO~Md!ca+k^5aAFpEv=t+1q!O0vq zDyyH|sBWL^Bm^)_qn9z|<%|YxeUR}9&FdZby-+#|qy}^Bc--KbV>x=(IM20(#Z9bh z+H29Dj!f)0`X*rftiDADBEOZ;G#M(_UoW5~Q5zhH2s|0|)gGa|fuC<+qWL+3UnV1} z5#vn-#M(<YL}Cxo!D|U?^wjPzLI_LAt3jX~z9&-2OP?GwFRg`lBwi|C7ndA4>Ekl+ zAtFl*8KBOAU#vxVhQf}R!)5++(*c19mHaJ#G4K}ye=+bE1Aj5_7XyDW@D~GrG4K}y z|Nmpa>kz%tlbCmA!Mo=qi%aUM3>a&%oSxG)=1P4{wXxi+pvW9Al}evfcykZL#(0dM z7f2j_opl)rhEtZF?YYFfu?!^x$90si;2C*KtEJiUO3|A`^3-F*YoaJv@KQNnd2A>n z{Ib&ZvyP*Z@PNE#wdr#f+DsGUTU5R$8mwWG(Vwenv%O&xdlPZID9a}vfY2`eNiyXN zc)sL{CDFvh96Q;<n|Z#WNrZ_?o$oiXq|=jTGL79-UScf({HR#mYijNm`DFlkeIQ!; zWHy8|DGPo-_eLB}@XS>t9!6P^*sF|8&YjUyC#r=hU&8YzNkFcKCaam}nXA!e*}p`# ze^$P%COnWxC>YNA-Anls)jKDb(|gq$&qvFDev16S2d`z4;b`e7KfmbDKOPc~Uvs_H zVmHz*L*?ZsK7j3C#2F2fYxy47LZu28LJ-V(^&QPfFpRQbjrZb`VlHqnpU$zm^zM0S z$fC8GpS3^j$|bT!#oRPI^-9va^u`jou_vVwrO4U?e(r3$mtB3@HQ~Eu8!vBRRm)YR z`SxbX*LUjo#w@CK$e#$fq4V7J(v}Tp4$z1vuP&B&u=9d_x)j6sp4GT#*O&)T^U(s6 zK{IujB=j<2kHNM9<JYGH)2U(Az!OWl`?BVy1j(T{?E99s^CzdGUlo?f{)G9z9})n4 zplMuIg3Tu8Cq#8CwwpN8n4W(iHHIbSFQqlcaxLdr;u>->R>JIRuN3E3S0vO;S%?Rg z((-=PWB-c(XXgMw;CEiT`$AAj4=rUym|x>HOa%Fhy)Vivk}?mI$}e4XF>XWFXekSB zZ7%Wt%bM)!iM1A0V<pr4loj9^_b~%28uv08mytxwJwHPqOQjA8Zn<ok+&2!1z^Eca z<s2HQ1X+8Q`r-$uFb@X4usjs_xmLHJ{$+eKmL1h3#Bp}HRlckd>~e~`dN=j7c1BT2 zDu)UZT%#yBmR#cUmo-{;Fa-|1{|FSrYQ)Fazek#DP2CjkHobFv+}D(q^MP_|0*nC= z99UDQEAy5%=cDX9)3j$ZPp`5rrvib*s$Alxi*a#X`X6sfr{YNQub$Zjex}x@()Nuw z9=(hINDMgT@ImLXb*e^9)G8(%6drh+Qd8FT{DS{W^*vr&)_$svS6G}<^aBs?wrs?` z`94UrcsY#Q3}mxQWQqbo$RqZ|HCM(8y{W9SU0$)pC33$k!YtIrAIW6&Bkl6)M*>`w z1-lo%zZZBlSk|jOYPS8C#nzuS1MXr;*3-9Jbg7NUXDySySGUAtYP=NSizOXA*Cyz- zZnC?}#f%!UA6ZT>Sge_;PmPq0stH@_nqSP2XgFnLPHkL;@bO`zRY^qurE`-%!Ts+C zmSrief3!zl);6*KG8ulpCa!_cj~acqGjEyb``(O17%2*t9=?C((SDNJz>~LZOgnn( z?cAz66gLr(8yQeuO3S)a#NKYw*eNoh{}Q#ae_qX`AK$Hg1zAm@D8yyZbGMS&*me87 zAVG?k$Ya2UT;h$Qk}XTq9NtvLH&G?EWS)&_mm1eK$!y<6ZTRm2LIIH}sf;-X>r@vi z01``<(F-<LyM|B^Xu?~d|Kbw6;87Q+l=yNnDpiOA=LdEmluqcM%PgfTY^e<F@1Oo+ z;4cRLV&E?Z{$k)S2L58;F9!Z%;4cRLV&E?Z{$k)S2L58;|2Yhh3@`U3?28{(BaQb< zKC;^TZl^%Y*X4Hww{d8vnVx;$cf;}6QU{?MHP^q|huZ(E95nVq{6->ckVls3!Ayy$ zL#%8AX@jeK#A@RAJvI(GYr4hsxY7&750XkD%+u38``SxF3RqiWk<`7v<u3;QV&E?Z z{$k)S2L58;F9!Z%;4cRLV&MM*2Bt%)rBYPzNVcEWjlJa(9Oe5x%niM{3m`Rt!!gv0 z^yV@QT>>>G`#S=V(<UfOD4lg#%Xonf)+}7+73b#p9rlZB$)B7a-{9SN+Y7xT2`YvT zT9@U$pifAPaKWh>qjw}hl?wWnt@<MFtEhipX<arWp~qyYAK$B>ME!f)+M*F}%f@4Q z*W#$0eFr<Zs^Wq_y!4#kQA+{+*;WF>`IX*Q#fc479;?t>dXO;`HhHzw-~QdpnwD|J zN*eTj9r#jIqs&34hTF?xbf8HKz1tCK``Np}NySPkn}v|itE+KWTL?BndgvW;@EZTF zP|~}Y?QM6rzXShos_bCPFKoQcLcQ-})@5!wkolnVIF@xcmBVxq)G?iPs0oXtPC}17 zbsir}LGL34*f5^=Z8&{jvK5O6luO=ap>jGVjQxoD+adHeG5DCc{FG<wN$=l$wuVen zNlr6)?dBVD<&oYf%A+$J(Z>7rsN6XPShMj*AY+L()-ecY-93L0$KnR$*D<x&j<(pk zU00!UUN4|!9YLYQVm<YbiRnd>%tdVPI@$edUvuoHa-1s+5cYv3i+K5U&|xy)w6z7F zE;F@DdV!0LiD^=PNH5fuZYbxcHDr(#%Q`rc?=d0}IXyBv<86daeXx`<-o&IYG|a8X zO^0zRuBo})FXS>&T%E71=dGaUX}g+1<^|!qjr(VhU8-}_pZj^yO~9QAAT3f`E?s?~ z@kk*LCS*Wk^9q9VOtoT3)nw9E*SWW6);Ma)U7i!mNRbYlzDy+oFsoKJk@ceH>!sc( zUs=zaKyKVk6L3Y977KsB0RQ^&u`WwenD*7d_Ht)Abk-dHAIWy9_2UKvZ}sEK8I@Sz zCDu>l-y3ru=IqbeAbHb@9zIWw_Mf%cJJD;fc&d;mR;{vhb1u)~=lK&cZmvGQ9|YK7 zgCFVIm9fTV{h)T%RGwC6LL}k4qiL&ph|6q-5*i8m8ztL|tyVAB7qWRZ6VCODm0^(B z==;Gy^g5QCNH<cZ?(#C}L2QuKW38{bGwO0zC^x(UO&GTl9M8u+-1KmhqIAhuZcYj5 zeq1Q>b@D`0F#8~n`61eGyBepyCd>7p^S>(i00pbkI2rB}ol~?ouOdYF8d<FZwiCQ( z-#k<L(xGH-H(La2*4*UuaP$8E&JkEZMridam?*9lmu$8TO!Yi;&~H1SY${X+XQmP9 z_GDkRw`}d472;_%y6W1NGMCCbGZ%2w+0n?*dExt?{}Zjh{TN360f7M?oQ6?!Nl!|P zYZiudFm3wVM0xlHteJT0>_Zm^XZ{_7M}B_y^M|MX#^p}2C7x*#_lXv<a#L}Wx2##J zUPSRl9wA&?kFjl%mV+z8l;h16-CBQ-j>8B#BzB1iRxxLrC6u)6MP}6xwzr42yi4t0 zB`D`GI~?PFKvY+4DxB-oOiKZmML9aJ$mBY~CgHiK#4@^gdZl9pv^fGIs(iiq%SV>r z)iQ>9CiF!2v*@U#%LO}Y&fOv%_&J83Kib=b*Xl4VsV!o1Yl+EFmwOgXXno$(C~=#i ztR)}@6I#VGC6sfi{`B@Z3o|p1&#25XqU3u?=Hib}GMI}RRwNP6KP^v`EoLtIoUI)) zXl2fFeo04Sx7?Ja{%#gG6A#}hW-i%y+FOf`=KBE(;SOO~QMcc>lOZ}%w*GZeidLCp zLXVJ!vJcnmXDcvLvHq+VEBAJ4aH3PoEO%I!$?<g?-KKjSc_8p)Ymdcj#SP%F&HI2X zR!iQj6l>iNz>lF|$4F?xB<QDd68t@fEC!0SK+wx8otl`O&`bGfJ6Wyx6H7mTMECZR zGUKwl4&=(?z4T60)?u;LU&oLG78aL80R(`QbO&P{%{{mM^nAw*Ty8F|f;_2J`H(VI z4M%~C<QaBr#aN~2Yv%7n)x#h6(RlRm<vN0Y@Q_8~SPUbujnq^3hRIJ&JduMS643$+ z`Q){BO-PXpV_A`NpyMs$Ipu>#F`I2>jJdqdCUq#)M>e=jk9VJ*=v;J|>5smncSMTv zU3_2@pCQ+>H+*le#io5Ko0mT?chD<yy!<f;={^dXkTt`i&FKB*us3+!tt}b4WfKM* zhiJQ_DupHPOdhpw;a)G{eO8%9-uSLX^Je{t?qTMze-yP{M*6v2GOzXs!6Dofh4c;d zH;`hye>w+8zRzCoBBu!{V7hKPOz>cv_;8sfF1ji~tcZ%RA_l7P^*(%gT)iy4kHfS0 z<4Ku;jPJ!qi;fltmYz9+3?Sl>kTZv-t%{r!>j9Lw!iz~Uk&o~qbX$@-ECpXo%5eHR zXp|Xqs`vqGr8&>!RW}8B7#?CRZSk2Jlhf1Njn2B%@gfX|K0h7kxi{8o&qvh=)4;~6 z+e@8K3Sl~~cX{e~d&R`~k7B9lcas1R%(^~TR<*c_f92-JNxnXxQ=%5AJ5gd>a|kSr z4)@G7Ha;oS`ybMtJEBFsXw7MvfvU-Ng3acY&!-MttTeFOmgq&>M>xN2pkC^c-;y*P z^QP%hlVg!Co`OLIykq??wt|L!6vzi1-dzZKKBmR>;;oF8T}_oKCFaVeob69pF)2+l zar&`m)&$phv$vM3qdCjO^XCZcBrNsYtVN5R1B3Va3_T7}_$LArT8+rK`03FJhDtlh zUT<gHQE!9@;v-L?pg@QqPhuHEeEvk8r`utY02=~8T~Kq$Evq#V4REKS)l6hIdUJ++ z>}L8&BgytF&F;g4rVd=7b~P~-7qT)X`uFw)9`PTd!e?cN`BaOfyiJ<TtIoQ@sYrMh z_U3Hq+Z=gmJBy67kV!{@hk1Q&t#QAM!SE*_D!rbestM0DxPgos7eni%MRnfE!#xB0 z*x}TN(9)r=7xYE>P4}Z(#m9fXlPq$_56pFwXQidmd7ujPMft|M%Q;bX<^6l!eU>b) zm0AM;`{_MD(UKNwaKd3Xsv;f$=zX})qe@)bDNYM%`pH=H-1!`34@UOVlSisw#>G)H zK28noRBJX*0Zl8<xc{?Di=O^DzA-LYC#TbHcTjy)9J4F2kW;G_&_h(&jVlgTU(PyE z726e?_#&lPaE}h;G!C&jR`P(r+%57$Vp~-{6!}zFx9ITNA3arUm$tgHqZ0D0p)zh- z&VoTmHQLY&#lIM&bzR-5B&YIKAsL#;)a)3I9VJD^xW7cfjCpOu>z81cM1(tL<UKB# zH*M0=WV+_h(kjp;g0|&CRn)fjjdAON0T!yj!e1>h?iJ%sMTQ37*8p3s_%6LHUwJy~ zZa7N0Vuyp(zHu)F<(A(f+RvC*54H(}ZjYbq$+ObT=N^yuodVX_kKVWws&e_PgHfdh zf{LV}9EbHz2@a1esAFPAN3Fv`@9{+;a^rLe^Jy3g4}=u$Y4{DAnZJIEsyu_VJph9C z^nh|zr#3rU)YukQ?VTE&d>rY!<45g^X2aWGX6`xP{&8&Pueg@K72(^ZLppNJCD{bd z2F2gZKo}}>ZES9A>qc|)rZp>3z~jvW-*rnLxs<pDW{@rZ%GMgUt<PdMqHTa5)2-ez z{&;g!{RIG9)t^<{ZL4m?uZKs@0~2~N%F0Qa?9i^fJlvL`q`AS3WTMe$0TYipZ~{}Y zJz?FPWAJ-y3;5=upFr+0dPQ@IqeWiFUEdGRy2)o7_VSPQC@>(kKZ1#W;33P!+(Cg4 zUDVaI;OG637un%_nb0Rq(?+sPUP7(2dAGc8u%K`qdXn?uXSp|aqx-5lK<DCbcD3H< zXuPQWJ3&^xg;=;oFxc;6dnIxQ#!As2yp`L{XFT@3J}2{+Ln!AFBkzCI+p_dn*tIxt z=_=%7)gN0d<sGUyIRocJQx>3Zut?_IRUU6PsM<ts-+Ln+Z}Nj0w2|8Jh#_G@hadbd z(GtWJ1hSS0^qm^jrGjl>+u#?Mv)i8p4}IDu6~&4XEjkm)rk%7*Ek5SVi5lc=lf?xQ zYK_H`F1pSfn`gUBCr<G?{sVG;V}H(EvGWFp^#b{16X}%%I`iN5sIqB7N!b_My(~K5 z(3#xhowCpeBQ@9BH`!@?U{G&yPsmdW98xFmHZpXu!MyN8qzu|k!6Poc$?d`347c}t znEYZ1ofPvvE_b=_ym)-i(W-$QtsYgrb8Z)Kj9SZ<tvXy`&CU4Ghr>3x(k<=L(xU71 znQm#cx&L-MTYu^}&BKtgMTeGt^%ow#mmjwu=c60D@S!zEEn39x+m==3v_0&kx!v!2 z<{5(p4%Q(OIykekS@qpJM=YuAX8KX(uw4_Aph8SI+IGP(LTmxMiiti$wXAZbpaNf# z^Q<`9&c)L~ctMz<POXo@e^)y=`;>*a1fpI643Syu^kc*#XDuaS(42!k0L-GF+$+R2 zV&i3QnXd6Hx+<?8#Q>N@<iekL-S(*ujPZ(_;h=EJ@}r^f*)jw1>T9mrQHMl0ykaOT z!MQTX+1#}qZLzxR^q&=eGueu+!h#13?u%)Dbu#y%^2JDM_<>`SNRKXA$ms|L>oCV_ z-7ymWWJYCdWkB}&K2BT3+`6enVoKn6Cw#X?opkPK$F?N2$ARrbzIV&TrWQ)R&K*4* zDVuWu4K8x`CjMf@Wox-Ktw`k{H0p#45Y*|o7$*cB&sd`$dm?PpDkV)S4e>!k{FjHT zpD&L$+%<a6dRqf}y9;uKC!SyHp;m;sTExo_=q)#RNr<&s-k6kjY}{G7bofgT%UIvl zt5m444cLjeLC<B-h(CZo)uI+TlbE6e`~#DvZNgH?*rvj3hL#va4q&)69=BX`9~)b@ zi3iG8or5TvfX4vjfN1TA-fzyr{?=YpA}l3vMLM4UK{#?>+HdL93!zh2gig0UlnPKc zPTl0~O}80^ZSrlhmUJ;6%$M54b-iAL0!P>oW<yXHW`lkEBW!kXqlpBECaM{XFmh^{ z;OA0pktB$51aq2GVJ`xhacSoqYG%cBmOZ07FgQsHuac5AgWccWLC^TaR|oFarG_C| zz>xpW=G&!k;~qyA3T8|Ixx%v)`)fBoM1AC<N<R7`NM}R&tU2AS9F5qd2o3e<Td8P9 zB|So@`axAy12fBUYMlI|!Zk7{N3se;tu3W0IY?|sJJ*5|j8qdVcKC#QqQOp6M8*~B zTyIXtxI6A4m8sX?3P3Z~G=J{)Q+v+f5qC&rV-J-*SeB~DY<!CIPoBzsK`o3P?+L`L zz~38;m9+g}goZ?a9ny~|G%l$muCwad$98e#l&i%Be-R@5mad3ERcRIVr#2vZ7!d2X z*o5qOn+y4^en)v*GxEMXrJ{=XVL`z1fI()KmAH=VvyVQ7_g8OQ+#5Vuwj#qitf_Y_ zefz^2WppF~6CVKMqU-4Iu?s)6P9QqDe$}n;U8r_2@dz)|jkgYqv*&6AsWGRbg&}DL zGF^DFTUgSI?ub%!8)*k&Y$2u~Nv*xi6B{(1m0N5^*U|>pf+X@XxPe*gU|A&<@xu?2 zb|BDtJzQm4`CC$j)7|jpi8HNk&Jh|6v0r*>S_YHkso-Zj;79f!%{otP<cU+_=-rF) zH(}hoT|dzC+%GwZnJRh&1CeU4Cob$@Nehdr%8NsfEA1RI`km!<&GfO)RwW%q)gXNU z{5f6g?PcgjNJw@2qg<@EC^}M`2K!hsA>0TrN48Sq<+MXcg)rddhc!_jnNc0#Rlr>t zxSu`#)jo?5&i?$>i7wDUXkQ4gf?)c-n!1e~NuMeoKLC;GbbX$WE#p<YsgtS-Q2oFf z^Xy0aXy&#&ys}ra4y|_ZKPq*l_G%HCsp}nb4Oc|(e7G};=h{^X`Z*CzAfz`49z#zG z8IRFAAJlwFMcSnyF?z0;6#FI4%2d@39axOxm>+6~)>(Pi=!7B_f?tAkgn#8TMbmHj zs2Hu@G5Xv<hGXMhu?gJ-y*(05&wPd&zgV82BI)VCkivPhT39r!#D$#bD*Sd>2X(3{ zCQTT??mzZWYpECW1FGCCh(ye#N9@19J{Gooe6{gO>V|+m+^B-LC!3H1Ykotnh#A#? zuPbxYz#3~WYLW`6Ab0i$Hxrdi%EfH5gHg1G89$0t3kTgy<b5xB1+51M0)Yjc)lB=B zI$isnZYGHUp-o?(w;_qqU?@plX+k-aa4sZ>?(yZCrs7Lv^8`wNy`*6tvL7uS{-K=l z<yNnrP@fN8usg=@gX%fss(+ihku3|?E)l)I=}y(-J^sBljutKhg~-UTj#If;z{*Zr z_B)0i--e**p2b@uB3%(x6fH*@dJ5z!_-~NLFUQj_pj#F$CnPpI4d(Y>0ntI?iPT^Q z(|+OYfB!pegL%&hj4W%!7ynx@^WTewU*m@X6k~+N2z8$L;)<wI>gZ7dJWJRhhGd!m zS@&>nUufdz{{zPW>ar7&8*ExMBB>gZ-XIsAXCmT5S(L`V^U~S+dS)sfCW#jKjNf7= zKPV2*|F5PQ6)h$U>M3!^Xbq3KzNcCpI-G)M29ftX<%gk7qrK(fq>~L5Qlwc*>-w+; z3~kbi;I<cN(+<N0eu0jz;nh*Q;P8<p@&Eo-JC6Z^v}!z3#rqU@*%39R>Ko2kr%-9I zADr>$&tp=;%=A4{w5YKM=QUTN^1K4F++6lboT}G@W5|`qZnyI`Xl6`Ptm^!t^>Z42 z{>XF#96ito7N?CrR+dB!7GydI^Ej$~y1$+@!9vBlL((AlqY;MYpw7@DfW_+Lb<#98 zp{md1sDe8Vw;mIfKhF*wkORB5#O*{^=g7e2pP>HyF%3s2V<T;|g|hGt8dM1uX{ZP> zUykqI_@2O5$wXB@JA+Z7vq{{r^buZCG?0TzNRjA`3@aS5Buk!9pNXvq%%7T^6Ah%2 zIEB5HML|EHBhwf;1dZ3hC!}o)!gBu{%EFHUdjviI0(yp@`yAShqC$KQ<f#Z`31yF; z5<+m3{5$QO11iI>Nx-g;UI4EVNyXk8hwF^6&qhHRNWNsJVdQ>jax?E3l~a&_1O?I& zE1MX0IP&pPucd-ifC72wr>ChmxQ|6ykDrQ4g`gGo4$>DW9-VE*L0R_w-6v7)V4llB zJ=3@xT=IrQym@o{)bFa4@?4?uc<LjDCO{nrm<J6u@N>X;NxThaq&Pa-MN|e2?x#^- zID@D2vl&4vZ{%`i;)e-DHFGFj^1K0-5_PYKA8x(VkrHZZN@IWak;bFvQXZI+188yg zTo^{yc_OlLna&c;T0hjdun$3ssYK=^*Ltp1CGM4|AEN5?=)l#cM2&RBl6<cbNY&8( zQKc~Xdn%2}wrVOSG8VbQT4g~sujSibQ=Yncf&PB}Pb@+RND)ENc3-L}k_1qOcJ>D2 zw}1RCb`$_RE9wnpJK8xK@#lS&_Xl$}p(9D;+rU+x3}5Y}6G)coL)+Pj8o(7dYQas5 z(i6V7UHdl?41TzUPX|Zl;|;=8`8aVe(vWtJS?Urkd8(AE1txuB#ex~B`EM9p97e@u z)`Ih$6D!QK2#w4-yFn{bmP8)tC|?WsI5vVRnIe+u%>tP!1DU3BQMQ30egHCM(L&~6 z!-<%bO~0w|LEG@^srHZNOP`1SF1DirQD&XPWHL>R(Rjw|vo-f9sx=)*)FK{?QRer1 zr>sIP@I}->;8B}5k2EiTr|)Z=nxvvkR1mI^$Z?uA+KNxRnn7(wQ;><MYFo{8-6ojo z$Uvm96k!wVzi~8TcmO}mhfn}xRNz2-ot<X9W3=Pyl1gaJkB<b!F5t_dz_HT#x7x<f z3#L-|RgP1I_lYjdY)-QH9!@SsQ<P93u0=pn1aA;Cd!Tw$3<VB$6EGIzlOH^cnd|5= zqpEK3k>EH9Tqj$P1FNWOV-<vPmLZ`Xe2Dg~r#n!62|&yW+h+zL$a2ZoG}D=DOR<Uk zY-q<x1yoyr<AmZR`T+y#7y|iTlJlWyIVr2ocM>I+Faj%~qxh@y#v^`AC6bdWL-+wh z2-hOsAf8#9nl2_+NJSXyguelXEB-eDT9(JqPAb_ObV{KbpvB*Sw6&7BNwbU%L?!BU z`UdE<O#|rkB<Nyd0e>YD%SPc4!w6gvppt4(*2gd)3Fate4Qwt<s7*97p$LMi>^`(n zm&!W8I1Ll6hE10cYLz{;Yt;5i8d{eU-v9-*DI@%ooU)174sj4?7j-AJmB0eoD8kx^ zbU{c`w)ykP$$S@wDRmTt7=Z{iOv#<*>EWD9!86C}R*~LB+%^=0OsenW<#SVWXeTJ~ zUu#T>D_GU3RhOOD5pSqOTe%=U2<6x@7{<tTnA#p07F>6J(A;C|hGnF$k;%<d`p%76 zgK|+qhO-ICVfz$?5iZk6)0$huSOR3J|HwBizDBM84n3NgzJduHU;6#K+vv;BJvn#i z-c+xqvIdy{U<rwBx-Dexd@KSks962D2Tguz(}T>-v*pofd?4{@k}_gx<c#N7%<(C7 z(pkpUJz$<43Y%=fO%I^`Fnl^#RQh+olTi)fGS3$<1Ctyx{3Igv*u&_#%bAzCInZ1+ z4D6Y90x|H!!`7_0K2h_^YAqkvOsm4E(ieFOj6eXI8OY-X`zobsu=4MNXAb_1fG=U# zLwt?8p<Jw2KAQ4KlVESMBFhS4UQ;}-i89I&rkjJ^`m?8ILeMr(8Y~18jU~O8wsB;M zMIte+MBh3wHJ;Y+?^C$RZ-wFhXhi8t0iwcJ-U`1kIc>>bXA(xZN>rBgW_YDJo7Zhz zJxCo_Dj+SK?hPL%jeoXE*wuUUF!w-+21mJuEN-Yb+zK^v3@a>X<D$t<!xb~-nZuE* z@F5x>>cu{YhP-N-nJFkh1Lh<KfN?csjE%<C=fqF#Q3>L4B^F$$mngL3n64kJ%cTyP zItbP2YG6+!6bu$R7@ByGdtY&WLkH%xOGkn%6qC{5$wGMZc^ZJnr&)Kj{XP+xEp3}w zA;Uz<=Kg*;S+u1>%34Z$nl4yrNsFTB56Cnx)=S*+_5K5Wg@6v?KLb&IpTbH-usL8^ z1o4e>aO(y~Mw7dAkjtbf$}9*$fh0h)?G>DKSDMh;WhEJFO|Lwv8YxWmeuu`{GWs`r zf7lYWQ6CYJp~G#)&U=68n5<dB)Reb3nq-iCH-QDBj}*HS`SuD%z;zghJ=rRk>8!Qc zyMUQWYL6BKkl?t~h3QxHHCciUjFfmB=~OYNDKgU*REb`s#lq=wZ<Z{EZu|Buv#qMb zrqWH#F34rm6eTeNuzX-K31H^p%~~Sd1G1gczef*_e?cc_64$O_x-KaO9wnkSAlwho z;Y0ip637LLPQr0hbc4YZgTvld0Y--JF0-iN!&u<_fny*oYBU}@k2UtsQ2{L!KvN_9 zM*tYsaI=<e8nPF1yrb10%UnSlX^HYnX}_=`oCcxI!(dl!e}o}@_(m|yyn~yZ)U}i0 zl#@Y+R|9OWxmxCzZFL0$q4#M^_F-<~=+665(UPhmPE#gmz=Wfr7xy1)wil0gDZx-I zdw&Q4r#i2(F)l8&SzQ8ILurQ~D*H%Qu3?wOak*A&eoVm0_CccUquG%z&HbCbxgMic z2(r?Xh6Q%{1<(0De`YoE+6L=65NK*PpF1L)#5JDL;`6otEDE$C&qg*6(Ggv&W<o}$ z$G5G<roS{JoLE!kFH}1#N)>TPBz@pM__F)J1AtJm$68fP;*}plYUa5V3o~j!q!++H z3<!ljZE;R9-4CE)%2Kv-J&%-`>C0%IlSI)C31Yi%q=5=-ybOXg47aVu+nbWbKwW=J zrw^~U0eY>{X-BU7`2Be;qrk4}o6L-n{oo*z7&pXa07{^s<rXiRu|t4Bzcxei^JK!@ zmFV6G)%)@o!4vK+x<w4?*;lC~xQs8m<~kqAnisf;MEkQWX!=L^-a}-$ymL4&Zb)qO zxFD?G#D8*-5e|-$%etbeP8~M61Mrz8=W@bPFR>4LoeFn$V6X-ee-;KLi>0)>7eH~^ zKtvqEWA~LeV}uKU<A#1G3y_e2U)drWz$<+Gsc#FYih{%k(9H^juz!K=$bT#+u;`*@ z^7JO^!6zn&O1Eq97K=mphq#view3Z<s_d!0F&DHh@B<;u*e<g+z-9z2XC7C~^RQQ* zK8Gis&d5HNbr|Y6k0P5yU+81mJiob%J=$r^g&EKWc6(Lif&<#*q{?n8Fg@vZoXa`n zr28}@8&@x1if1M(wp<?zE>DzbN6h2*4T#rD2%pym7+JL=7WId#ek%wVk3bi~^Ar#e ziBMUZ1W--7mz#^Uf%HbIa4`a07i|{JKfd_kpTz(+emT8$E4^D|8?0}t71_gDItI^Q z>*sV&y?$_ZwxtDyGprzdu^r@~)z(KpAPe9k({rVv!3h@*s*u?LWGV<j|0kd@0T(6P zSuJ=TXM=L{U_jZU`f|DQf*&2WSxW8C+-%nXr`Y22HF;FKJ2;%ED*}B+_~0$sKb^O^ zFp2B`htWlRxQ6MQ&w|bMvXXy0#ItoS{4WCVR~EkKZT*t~Zi7I>#Pa123beZMHp~8c zi|#!3{0|D>W8O<%Y)(*p#syY0#xg!4)hxpFclH3DaqGtS<*$*bT&l~dv9o?+aFi~7 z420S<9x(OeXG~?Bap)x{C%8Orwrr8ng~6-e|AWdUMgs~GfB>RSn2LZMbsS_Z=^6;z zZ&jBwbLPg;iQwa~8pq!wvv#9+*d5)v^>Dnf;K}-TM<Sd)I&-Oq$T*DbMbQk7H<!49 zV*W{N|FJ)HjXMkHrLU0iUaAIZ3*m^>jUi_8{XyeSLoeIK7GW7g8QJXq9itK5*D>ku zofiPgW+TdXMj<6h{(mT3;tDt$c*!Dti@^q>BrSffploL3om~^-<GKCO?k^5IY<#;t zU*V|LmIL>fx4!FD7+d)%%j9%lSaTs}vw}&-X3IwQE%(v~`2%%J=&TqvmN(R2*mg5m z@Z!g>SRIpxYq=!Pos1}zvU~i@+Be;+#pS`_n3%G5+UaqQpj-JdZzP{91uc%atlY9u zqCiZ{{IWaGYdhtv!w!6K<-D$1xYUQljkRvhE*Yqm7d##BMhWAZn%VY;Tr=mMv1+~+ zSi1}(s(Gs5nDiN(rDfk2tY!O7)cmsC!;(1Ctj@;HbX4+ock1^kda1#khvgc+n!CQs zx_l5sdsKJ@o{bWD2ykck;uV6mwzfvXMP$;|>7S(i-M`%8nw>;@FK~-Jag&JWQWgc< zZr>|F4;Z1S_?Dd-gGXi*dSr2yW85gnAgPJOgg~}`dW2a!%uDTCA*5NHaS!_>=k;l3 z`bY)`Qy&K%<!405<Z)7nx=(DLn;m2A)*@rUQp`HyOWNT)2Cjz9D3gVFcO8?=S$1}D zX@xb7QjrD`nXpxskp9{${BS;Rej4Y<R6Sb#lyK(~MJ!w1X*rH}a>ai;))mQ<04<B0 zWn(_tGBVIv6-gc4M%S?<zCgt#T>B@_?GG+)d|$a7jxINJf1#Xj(C=AhX>1&e%0R(` z?KW`T>{3I|U60Hr<@})gLmC*2uz#0+&xV#O75x@ymvmsoGWy5(SZ#~AS3(~fpME$G zS_q%7QERpS+4wihoU1OvX*TE$!N!M#2k08plB%6YI($ZL1?{&g@d8gd@fGdb;20uj z>i-qyZE+!*u48giLy(uWzBWuPmJC|OVLQR^Wszsbzud}kMw{2s^1=fQ0g6jJ5YpZc zkYTc8{s%3n-NuqqDQST?7VwU?`|{vmyLw$KRpK_dh9zkq-Rhb%H`6av6KAWt4G#SG ze-QRuBWaA}mf^N|EbxSb?YZkHNWoIWnyvc&&EHYNw7lm^`X)dcr}N}3eh1$x&))Nc z@frO*zU8TodscaojiXy`a5$=~@l~EH=+(BmdUIZV@wlwj{96amPv$N%u9;=iq*0L) zyhR0IL3F(YnH`k<$!v$;bgb6ugg}0iacg>3E~)Gosvnu;fm~w9>~yoCX?0x43c4j2 z;o_(-#E)vsa<inyMpXUVbgSsUi&+Te%zhq}z8}60D2*5D=egO;6;MMmUh(96EU9_A z)CHGZ)MC$r2m`!>Pu0_4y_|`GJVQB@wHKPCmxOhm9CmTp&XcpwbkKkugIT%fb8*eF zId9h5Sut6MX>~Nmd8Yh(EX&iyYFO`Bv?p|-a4)>7bN0*$+1Ua)l#5Uy!MKiTIw)s? z*`g-hSsIR{ca7kX>zw^&*bic1uC@v_Y_{`TuDNEF)))5*#TXvaBVc&o;z`}$VfC_{ z?-sN5xw&(?C|OgnQ9%IzaHhp&GoKK=6bLIc7#ro{$^o1$F7n|iXUa}pozhC!;IJQn zNs6<5owM<w_uSyGcVqwfM)cqso9C$xj_FUkkkl_WZqJrFPxh0&i(7;zw$t%$t_fV6 z39JeN;E#$PC{oG$!WEB_ZxzdIHZwg}N`f6P72D!$C*FC+q1S&IEzI3qwVSi6`Q3G3 z!b~3c`pZsys{&O(QOFhJgsjD3TefS=iBllH78mT7QZr%Umk8lh9J13}x%e#%{!8h3 zVau~EM!XsZAnHs2Y2(HF_fS?#tZ3W2QG&Bp4ylt!sJcK|0mEn}=;o@Tl5Y)LYTc@L zuQ8*np<`>aiRt;tB)FNm0;_N=1!dmrm_UW47<|;l4W=l^6n{g^KbI)OqC|rU{Sq^& zPucp9{!xF0OL98^a-DDbKoO!krwUG^s*nM<3x12{RS>oaNF}|Z<WYy+MoTD`IwyKs z@7OtHHnA;MQYbqB`vmZtSiS2z43|wH(g_t2BOVMY#$t1FPARH^RKo9g)N>=JVI2xN zWGD@H4IKdV(zdQYgA)A}7#nsbfp-pMN_eNhhGN3Rfi|&?X_@*D?^l7{5qiKncomnE zr9B#;H$nASQkG-C=NW=M0`<0PUF0s}#f9w*Q0Q@1!Mm5YMg!*LX}?KrcK-f39lb)% z_GE)iPi45HUAt#a+;M(qu(cCO@8Z6O&$Z9Zj`}Qa7M|Fi+?E`JOY8d--NF9Fy0%Jf zmK`VcaZ^^rzYCbcl0F(IgiNV^LuN?lkWW@$m0RQ(3V9~JH<r<_YRa)W@oh2{v;iX` z4L4D<S1NYK>8y4c&y%}aGchQn_-q5R?OkWRX2V=#f8T5le7m@amc3a@8(lQSHHRDY z%<<eA27D&mKD6`d$Y4SJ+`h$?VR{wyo&wCgA=Aevd_3m5xRtE<K77rRg;8@yACrDL zH|#PYWY2)^M$4V9x;`_@>9k8qpnE2uP*^Btr`%Leg9W{tH1GsP5v_YePdnEWm+EXM zsb{4t0eUvjuWF~Z)g0Uf--r?d_&ZtxX)mS=<OB_8#Pe)!wd_*TQ{(dkd1s`c7QV5- zr8nE5Q?5B<j4K2s&xj&?Y;9fjsaJYiuI#Tv>?fRN%uXA%yq7OM9HpgCYEpoP!8ob5 zTyu4)f#FO~Mi+FaAI>`Q?IGaixL>zzK$lF%Wug6uFGNwY)z7-Q8oo@jN<N<IZm=eu zoh;-Dz63>uGPl=Wr-6e|Bu|9wr}2G=9KFa@+g*v6(nOD#uuG}+%t8j!R_V#fnkX$o zv{}nE&4Q?&_7JULt%nIeOi8DZT}6epFY2>K{spUrqTqC|xyli%V^g&}YQI_+rEi5G z4AJnt>4|SLPrEmMr)IGdR_7AiZD%HhGBht_=|)@uJ!BF^P~20-;1iBGXcUELx`xT= zzyeg?t+F_K5d*~|!F_MLsQ$@}v{b5N;e(5yXsU3eq62ojTN{oj7{K(fD8ZDrH^%I` z$;{cXA8pr&@W7=qh&$1xRmrcB1(K~KnxNRCFK1qDn$X-Vh~h5N2DoEsySVwKmkjDf z=2K|~-j{8cVDO){6#{M8;^R&=)PMer-XBBS0I<;_BVv7g_jRRvG1*Wfmb|x<I%>yh zo8iytj$GotxFmx~d>1jjKgNamTld|DXh$ZGq^CQ9!ESRNRX1!CP{0bZt{+wCi;8Rj z+E+8&a6Y5a88`UVyEr&FZr9>2;K?WeT%8WHCIi{Ilr90!F8=flu{0QB;j=J;)9#E$ z6=w8hJa`9i!p_DUWWChOWbr><7EC5-(nPE1E^E$@c1%+<y&%je3fZNC?SlS|yIwX4 zkWuZF`Ue`|S<OTsV+^6ppENM{{LeIS4Zacq8t9rGd}tLRe*C`n5=`hFYqore{=R;1 zdT-7w`;8QUfrNzXo4n=`t$nCZu}Fmmllb16ZG$9pm(<Of*~{p~07f{GhNc0ryk+<@ z7K8y_LF1295V{4fm^o@O{C(&KZ@78NSL<Cv%0O^W!UVr}zjkiuHMp`9+-8a*`VdQ6 zQvWIK^Rtr*LahyJAnt8spcc;4e&AF=A~gyP{j!vn{VO7*5L0P)t2uP>U{{nCajLN| za)v4mj6c9)^G3k%4sp@5^HUss*x+6bqHV)Z(T3(xO!HCU#9T@mkWiIG6e+LLd1?|0 z(+u%Rp#?;f#ekZ!TDZPKphnXMv=GF}UUQwk(bU%4I;<Y6w!ms6g%iix2sbZYWF5PF z`Be-BwjdagzMOt2E^3fiJ=4P9a@ZmYagK@hg{JFUGBa}I*krDZG@V9$H2|4O69*Oq z0gpY|!3ik(lTfofvy|4se385@J)xi*%>Vt0h3!qM%E0m~d~$k0uq}w&#0vM<pAxz! ztx_F3pB(0<gpJs_j_KPW{j4h&U*dKPMiZpL6Hb)>BXtrWt3<6~v^%HAt3W}BOajBt z+)X(KoKqc5U8wo_m@)#EJ30z%|B30Um}JqIgl}5U=`q6fe<Fbdh@2arVPn>pd>S7~ zkS5EtlA8!mXZVD_phlbcz%3i!2hLM-!r@U!S1=Zeu9T?tK519C4ow09r>?nX?xmEr z5~nnMC8NL8)#YbVCFcOh`YXAP5KgV!euHv_9|01}y<{<PnYyqoVa=5{Dtq^?RIPE> z6@_o+NF;_hT=*vf5cXe68)&+S0Gi|6Ur1^9j5c*J*;6A<ByPT!^-55xf4N+oRNO8@ z6+}ys)MIw?8Wx+6efa0TJmvJ`^Lbz$ApOc{&4ocdeKkq@x3n}S5q~lSFyv)`%ZR#d zv8q&2NoOZZvwR7zqh5U;XgwneDZ`9UD5qY)eOD2o%F?X&Yg1X7)&@$jFrtuP$7sBG z@`rasAG<qjuDKzPfw_+pWz}Fjw{3iX@YmTV3KW})mW{T6grB6QG)!RCi0un_jo(Q} zKAX*(HN@vn!%8Gq*47C2_4Zt%vgr=4>--==scek}YCDCi9V)0xSz_uMrijXU{#PL* z8BUh@gRaGlbHe&$Np-5lXkEeRl@#zfEj40x*7ttT^I&z+@1qKs93-$isUiwsB3d(A zv-KjGWy)jSt%qLrP`3n03a~_JpSEcF$JPD_84i+52WU^_%odwJ)U#lDX26UANw&Vl zNm%kVq##hvB=N{Prt9q=5rccywAyqY$rUnx<}uQGSZq~+Aei=;cf#GRS!6?9AfC+p znwm^pGHH$|%MoK)1dH3(Fa0oS<~1#G`p+alVgdv#&p=|aIE~Bo^SCYn3-wRbi3B0v z@O6P%lRa?mqo<a>8p3EsTJcq<V}?Vi8@6~|$mupd2jPKe^9@<PHcB$9v5MdRWYb`8 zLNEN5qrE4yYFN{Q{2($R;i!4E1wRIc(-c(|KxA6WbY1%?CAURKFW5D_RAxv9(knMv zjdsOVe|?!ou<naMbefP5!fbutp7xBT7E?|t1}_PTG$I|7qlTAbKVC^jMD2i+HCyYh zBHy8Sw35LL!|8oSIt!$ERX;&VT8f648vAEXvr&V@i?^bjX|G+J&U18@B8DJ04;il6 zS(AZ|O2=C$cMZb`xr}WUi$$&KgQ}<R9saG|LwzuGuo>B=he8eryx3LLrJq#m7%tL4 z&FIFkfKC&*y<kAZ7S(EiIf$iMZ<l0PJK92B++rTVrg@eH==j>baNNT7e^j;=|6X%V zB*kZ6jjf&Jv9HqTqbCZ)o?&CiZ0<FvYo-bq8=#FXjDiM;0zbvt9kh@p8Uo$WKLUPR z6?2iVT@5iE;kdXz=vvG;Y@4mHL?X&|u^k&g4B)FCfLnYl%GVxjdLzTKbP-*xkePPj zNLy4qo*)U?TPhTam$YrM>4j};CAf&`3cB>V$Q|XI5u_wSiQ|yZX4nZ#=sZ)^GO8b8 zfIuzdO@?}EDm*t_sedy)#%61KLy$nfQ*o-CGG8ysuQi4V87GJNkzw4=K*Ib^K8qBf z4PX1Tz0diHliB-~`DPL*Nsbr@Iq=Sju@=o;FTJ}*O<-jqDrRS_%`eLyZCYgxuM6s@ zA6GT0^DWP#^u-8}VM9tEowtznG_(C6E+L<MV$Vv2hhSCT0{hrwYx}g&j^fEN!mA*S zNeDVEE)wei7b=U?_-WTg4wKGK$@a*?Avsl}PDi!Ps%<VRe9PaV0D&#9q__GY+xu|( zBOid+5;w*Kyrby{y)N*IU}NzjbC_0rPF2|yC4C7<rr_I!F)Ud5Z7Lhimzk!$x@=`Z zwhLJd${cK7*gBIs&ntJ%EFJ?G*B>F1Hu}OMtzSa+<QFVH{JZy(Lh61w9__<95x$4c zQ_h82AeP&52L$yI)684zH3vjCgxMe8Sc15kU^870!LaRYcRK$<-@DyLF47jY4^Bc8 z5E=OBCYccwVrpq|k+8s4B`0`QbYp|$3Je=RnHD4;mmg5><f6nM{y0dI%(WI-qp`)$ zHrFC624z~{g5=M5%Q@SNV@y&AHpVY5z4LI8i#&lM#ptMIcx^1(uBl6Qom>!7q?Hh< za*Utk$r55&Mij}ySv8^%b^;KVP(qrKR#JCK8Ob)`CU|yceILPg&ipWurVI0NR#^la zSSMIqB=*5L`M0wzGj1tQB9fO^h=<D3#dZB!@^`DYp~7IqXF%iz>87HVPK4Rx5F;dg zQ|;TGB#+5HAa2m~a&hCxOhRU=$d_EV42E>~DH=jrXV!KYgmx>zzXdX{f(y^Sq>O#w zk0UwecgcuSVxzY_1B-yF{c#w4&c{1G$q+hOTnH;5<2*`chRaXZouEjQnOT@+o7S8S zsWP?kZwouo$UO*I+<b0h{T$$|(+>>o82f+~PLIZr_^r!|ea`PwQ!^e42wvO=jN>gJ zSfu^UjY@N5%r_u_`Xe%n&$+x?4IC7T4~Tq_uxwPe5b?#GmW;F}FGvp53cf4MK&==O zBw!R;4{0(J^Jc!!VDJfrlJ>mC)`ZN+!n5`$>RJcXRT2TQnY-KAmI;OJbf5V#aoXPq z^**h}R#%!FzN2RvR)2^kY%T_Jt4Qgam3rtgP6~)@p6xy7*D`XHYpPkzxi*NBk%)Ip z7>IZEPHpbrKNFV5Nwk@OWoaf1TfZ(OzxeYeuQxu+wsKnAr}?U=u3TWrjPD0j%zxmZ z2Bsv@Go-oU?)3Q%`f(ayqynz&sgNaj#Ue@d@PTfhPQ{WE&I>MkGko~ai}8=ur7=dI zclN2zYM9XvxCtm+6vCMJ8s8^!skZ5rsBIgFjVkXA?#%s`zKXY4I8qd4dS+{{z;8+& zOg5a!fGh)izi+qg_+Wq2%oHXR&d;rqz}oN43J^QnUR-%jHn4=73P(0S-HZ{52g@Nk zje}@kbWH`rDAX=9Bi`_E{P<4GeQmWv=W3!w98@7Blvl`fTp7(ab8w1VfCEI-c7km> z_0jOHIVREavBHvQSE4C4VVwuKIMbhPcO=-c<urQ8<<rJe5ERBFZ9T>Y+tMyBzE$WP zH-p-t_^K}jIgVrfwD=qMZ65bsje0_CI_DRrtLU>y&FG%SE=s-%eNsmw%&d4!ZT1Y9 zx~Uset7b6RE#C+UNBu$+hk0BL_g(Gnt_sZLQt}yX@%=za(HJ(6N|Kge-k6BvEk-AN zAX-(DMHnvMQ9NpLSzw^sk9WB2TUI)XKUYG&e8~;Ru_ktf6$eDecWC;O*NU<6t%T^) znZ>!O>3bc#r6|d+f*Xjn;i*OvE79;7h$9TkTfKp+TBtF>1@ErugW-`voDhM<%zpm% z7&nmHcz_al5PVYt{IiesWr^>yW>IuYc)E2ZEnXps%ZV$*k)pPIILIuU$asY_q*!;W z-C@fUxiyqq&wXB*UE23;zZ9&BEGl?<kce%{^Q%ofwVeaSj!R%pG$u`6OdIXJl^dcu z=FGL<(PGh8@W2+i88d7IVJw%dcsf!2m|<>=js#z1XY<$rgfAU^I@OH$9-U`fPRM4? zE1cTmMR`1ds2}Y6u$P@0OwX#Fn@YlRdyaiJZvPIQj|%u|w-Myr<rHXZd8_W^i(M_P zDo-`tnTP`ZrV5SlEiq?j8<C+m3^t^C&0`Q+?`ObxKCm(H0y-2@H`>mUH+zm#y$u~S zA{t&`AaWog#XL(3ykVW{^fSPl1m6#p=ROCkfvv;ZrE2uL?4*pPXkhNSn?AK@W!DT@ zy8$Y(u`OBAA*s%6pr=Lug*1_Y1DJ|)<p&)N-+c!bwZx8nE_u;8oFx}HQ#hP}5{Ui2 zOR#ELqcsV$=k<z`IrClDX}6#0pH;GVVaE*YlWcD-{1903u<-f2OOTXt%jYvX285IC z#RMGZYi%s#*?72ReG42EI<QhhS;^=8q~snP3v(um%Zg?3Z$Goac(nO>%b%fEB@GU* zz)QYbkTRiLKyk~>HfFehCgOl0ydN5sn6V^%Ip@rea=k3~x?=*2TQb=zxOMT%@vQeW z*wp;y_Rp>#k=|WZFv|eyb#cM_AY3JVfQ_vcQeEUQB)SM+MW5DGt1GgProDD8t_+8) z?g4Jn?*<3%aG0y;KgZTjk$Di$>Z|dnFG$g9Xce#b3@VpS;uyk%>@Ef#RTaw$)@0CN zg!)Bg)t3?|nN<x=3=kgE(k^hMSvfG_^J?Qd4DT1HiQdS^3m!>;Bf^F5>knQKNZ~M* zAX`(oBS81ro!iFLrhE!UHc>7hS*}2~M+$=h!FWkO;xsH9IB@V9!>a7!BC!DgKA2{C z+IF?1=Mt8GK|;DQ_pMrjQ7bbb5KwCc^VRM9vyR<Q4rOEHi{AEjDe;bSXK}^Q5vOb> zUT-_J!-7~Fr(yAdmgV0)@%h3u5-Z1AT0gr`qJ+SM)I;*B*a{91mlWDb5e({SFuWG8 zE!grsq>u95siP!f@+WYhQXZaeuX*$o4JMj9Qq+?!`{;mr1<T@rVo1JVjxe?&<_K{K zXylW3m*cBO_9nIZ-&sl7?f@-_Gsf1YtTDy=2eF>{|0+n5aW1i)jC1bC&0ms3C^1f2 zk8}_XDO<!PPs`H%Xe8F<;hcd478l|(WQ%8+w_i4n15n=f`5RkbR;9yz{5p(G0_&Z* ziMy20NWj@p#5d_=qz`jry&&y~9Kay*sQ})sCphFZ)STPUevKV6wK3fr=}VH%=zAC} zvGn_{)``kkfNUu4#Cu4L&zcRk-s?x_2_>AyNJxA04*&CAt;*(lAms><W5E;CV2K~Q z>Lm{(@<{x{cXg8<=QRHKEgu_{5+)r*aM_*A6;jU_@DBq+J10GckoARGqW#t(I?ARc z5QFOtTc%6<P7Pn0;RttY;Q;*%jO9BG<*KVy9nxx&PM23L#wWz7k;4T{TFSc%Xlx=N z#tVnyON|*0Q0gcQVF?h}lel=VF^Gc@3FBm|45y%>oZ)kRj6M6M^h6UkW!n<R`7kUE zCoN{W43Sm404vC0>vORkgXQ}KoiYc97t;=Nw)ZsFrchD?j;@X-k)%<SF<73<9-!N< zv4;s0K*JXqUigBYvXe{=1&lx%Vw-|BE&|cefjnjxv~a;-9)sF^bQ;njjC9n{(iBW! zu%I6uyz3dL<+3KskFpzB3x@Y>Payoi^$z{sAjp|?86fo?K-I%I-N15JY$Rh;q(kBi zN@_rE9=QG{cdM%h4TwyWWJFT7f=>Wo*;;<^P=IIPgRLtWsO1QNvbp9epM3YLGm&W% zt0{U75Yr4>G)#OMSrr)|WdutP86H#<F#sqKsueru4HlELJHGiAQ9^~mjI%&@Er>WW zk_T~wWaTX`cnfe9MAg7JX_MMapLwwAqUDv{D4z&JOhu5%SM9KRV3+4vYAAx>eZ^r& zO?g{~i+n753Y`iAi(g0^on#z^F(IpZzd_Mv5a#d5eh7{(2BIU2Ax55@m~-VrlMsah zNFoWS#-}&22cM==&sz&4`Y~K-tV`T^$fNdnk=zQ2t#<3@dYj~C3Q#sU<oxb;hfJ$8 z`piqp?p;K&9%lRrK&FVO$@iw~E$Kml=VZ2#=FYY|U)d@-oaZ(7xNFCDcfBIE3$4rL z=_(EyurDKdoMt>IxNg~d=?Xr)8oS{VuAx=dH8=h>F~AivzQ4GP6a-0Bm#!DS-WOUe z|N6m}r1%3j+3s^_+V2kxd`=rDU^*T>r#aeg)2UcnbxN~50iS&pHHRe7el$@I>k~0q z@1s#~F_sD-X6k~Dy8GbiB&6%7QQ9Aai3b}?$FZP*!T5gIih$@NC(ft4tU;qw8#&6W zWaNe9%7E}fqdjN@;V;4z<BW`rrMw7Tc*%69k0?_NTxB)@_wgnsudba#x<n4q^o{<l zvkK_m^ns*^a?e^05IHVIecgtx5D(k+N%lAM@^)Fr&>HO&@0^~UQCFvQ0ieT2&|!A? z`*fy&Cj<@j5)wun0`3EwRoC&-h<udsMER!}OapR;r#;iHTbdD1ml$zFPvhex^xi~_ zIWRA2>H;j`ovl-6rc`YJ$xQ?jW5*0mx)Ne*cs7-DoGi~?bHy}^Y~-lEf3U-|KJbvH z-xMpAN&N?^$%O{A9V6~OD&}E@#!dsMIwJF@x<@DOAKz?An|`Fdz>ve2N=uALOITrv z7!LwnbJ~5X7)nKEe(R$hYD>&R1H{hwpt>W*fjuyN`^!LLk*XAP+RgUzl3`=WoTe=1 z$ei&;?C__l-9ru2B?zX~KQ+bYH>deoWPg@`<Qa;B-vmT9zT7SM*k-;Md~CpPFeD6y z1V(62)+IICc<c+^yJ)(=D*m7Lo;04S_3Kkz`8T?ip;UA!LsYtEnd&AP%PhpX>MD|1 znc`HpzYvn?+$1g;GZjKQA*5u=n2a~GGIu(e-?h&<-OJv)_xF20y<hJBWLW!o*0Y{9 zuV=3ZcEj9~$*qy^3bQ@okQe$9hpwdF^`*Yo`)k_9itg)r^LMKP&$1~l_Wp{7g(D8f zHxZucAG}yeis{~lCAJl`2<TqRWLa-zyZY&XbJ+SM5n+=Io4cwjly)WU=EUSH2vtx~ zDCW=-C|4_HlksWy!6aGX7(UXmQH3eeUxVU=c<`mHiVQ<ZY95GcAdP*Mvcx#F1cEb2 zhr@<LhZ-Dv^;zd?`r^HDM2G=|?1_rvIyV7TIpH_+0a)^oS3ys(kEtNj;@jVD$9_Uu zd=LC5vjzt@V-;=JtY)Xsnz63M&l1>y`oRtAUhRMH4KckhEEW5IGSZ22`}w;vYnn}_ zB#vQsLQECdLt1PHk0GeMW?k5ciHVX^*nz4-fIeDH*RFoF!4+v@4eXWOc|@cy3{C1- zh+<iYd<emX8x-F0pLXQg3Fw65>bojPNrN!!9^BYmdA6YngEFZc_&)!JwAB6k$ACCI z_p4{V23*HPEpXTj(L$W7ug5=qbxPSzOCm%YtBHt^7+GPLVtwSOofdn;u^m{fjkf~U zrraCZ9==N1D7O!EUU?b@Cjuwz1CbMqkBf<o6ZU)(VI3$Au~lttxkO@xg8O4x9Gk%c zT`b5~OS+ST*bVBmLX#_<7WuIIzzHUbcq}op+PY3HwAvDrAcYJLaJ(2llTV|wFQ22~ z*bL4zE<#n=QfVH%CBW5FG7uxbBw*jgoZmQ&k3jyz@_pFhB(g9DC;H7S;t~i8>Fsnm zf(Y{;SW1f`?efyJri2E6zjw#@+sOY6mL&m<m@W8o%cg<gSsa@|M6MXIvXzlf<MUhn z<g^ZZ@EcqLAs7A-H_{1Y({&6JSHY=XKNzT=2<mR5$;hNm(b|7-VE#nfgKWih`c_<X z-WSdv9fr%PqKHg9Yn<41J|S=r`^hMQi1Z@tKkHej7;tYm*5Lb690Ao{qBfmV3)Y+L zNy2MZxfZyd9G~bH8f$Pj=^zf$9H5`XR7?N*H9XOgGY8p*iHWQ3SXLE*ULwRAr=ZYS zj>P%T*o`0<{tnB!chSBjK9*xYFBKEq!J%ZN{k^jk-8kR0Yto9_i>u}6VC%%x%4LkL zL$$=QJYg6BGp&5~XyUVkQ|k4m&$d$dwmItv5R#K=n}-bbw+!L1v?0=>{hEZ<&HD6Y z%l9{BvD1k_Zj*SJVRf#D--&Wru$01VK0yR&(;fn%oEB!@+kpMQ@nKl}y3f7U)s9)Z zH8oOr48#HAo~7J(Zk7wQs$uEw)W=>@TQEbB=wQT#H~kXEYw(3x1Uh{XOD<hX>;df) zF^bQw91y!?5y9w03;v{^cUEivOMJhTKG+)F%6KB2KGVaAZq`DU!uT3EFaGz2iNe6I z7F8Ie3B()V;)uSH2)>r^O4tuRB0@hRkisXrAN?5dz@6JN5dB|5aV0X#9b}f>-1+BK zbmSEk6=l#lTR4-=0S$?=j?$@<Y|noT%gJ>sVJ9?lvc-3@u5+DEwm^sD@M*w0u%n`H zi4OXzYgZJqybjUE*QzF9Du}JaZa<2a<s28pnQ1dJ(-X?+7_i4;M&ETJ>*#QZV5rm_ zx#S$7hdp~th*be*HdJmXQxh{P&)M`F*6%TaJ~%`c#Ld3@@{|}C%vMXoWE}|v<USap zO79NA5--g&I1bA`$bDw<J;}SEQz$##AGP7&G0a}Xx+1ugA@uRzOHTh@z(XJD2%=NP z^ziu<xr`<22$N5(dRom#J6aWRd{)k37J^96U!{kqzSJ(xHQoDA-Q9dwXo1!}bpldE z=tp@S$BJTgYw%vI;>c3Jq5ln+M}&dQ`)^|yXS+R!aW=;?Bpqt+-F_Vh5!}eI4!M;@ zWbk!VR8P0zcO)9Q4%7HBQ=;vxHXEE$Z2JX+5Qz?^gYayA2!3c7fefU>G|w%U@Y(ha zh*(-OVu1K!SX%0PEzNMFpE@T%{9#%UYe_DCXefv9^^Fa{N#L^@fyVP*Tu8!+jq6q* z6v%+kFk?5K^-)HyQBBJS>(i}{Z+(KmJQ+KJ_2Cds?H1%vnfQty8p=UgId+3hNpa*f zu9v+N&Pmm+1V?FWr-qs0aKK*dc1F`d=yA^v6W&LITy*h?18GIVJ{`>|p|6J<_@c35 zrd$Dw$|-AZegNvOo7O83&FkZM5{C;Ja3CaHvg>-ToY02b^Ux1zBe)FbLl6Sdz>hqN z%^D0MZGbruR&9SU)qP{YbHeKcc5Si9&ATQ7k_GD*VytnTm)LmZ|5l!boUdo2zY`Y* zA*lSpa3s?TzbDf>!D!SSK{&O!{cQGDYz(683rv_(S5xD%L$>MB%P*s!aGKUA`%+hu zn%%!T)U~_M&O>I&zKq+(=^&5S!s}8rjR=InEIz{d1n?stB{olYV$>{&3MU%sbP*<k z8Lbfe(~c?66O=0uyjmrKEvtLO%2r}W$puHK&N5WZar1@#ImgArSUl2@PW7CJ!0ZID z8>9t%k3<(hdSd$!wU_3HFU*n%!cGifuHeqc&GQho5H@Q^bZkg%T+dyzTlkJ^Gq_#K zT;NU0*@<)D*q|&VOqU}f4sep3+}`h|d5D29pUcq@=WRQ~@$3(=n*M*VKQ8*XAz_vk zGLa=RkqXDoP*56PUJmHW3J~=II7+b^!=o&#l5qXVW;kA}>}v~t<RJNt>U@pLkC?q8 zWFYF`7w~-LbX^3qr2SGwX$P=ULEHda?xK0HI)3oxcQyjy=7XlDp^yWMAGzOAI>E(? zV=vN#VdI04oEzUjv+tL?c(y+4C9?cv>p1EoiskzpMGtJ=!C^b7mYqn%1Gf3CZf)lL zv;tPY6mx^BA53oS{n;e7x&<5YiHRVi<Wf!t$0gjCZ{2|v!Q#905g4MJQw?rpdl42J zk|a1vb-yB_Y+{9*;Xyjj?{91UBZxmq&V&z1+u;Vxpuz_qBa>P4sAxP82*B~}=Af&m zas?6_yh;h;hy)k9_jNyxZ{qeR7s2H{#FtjI8ViXOF8hkTQ4d(--})?IzRiVn^N~$( z$7`g;0#!&?|4|$w_h$T9sa=c#V}I9ea;85M)?rwkePO2GwkI14*i8ctPxG71o)6%Y zUQ{sDRHAyH#<dZ}V?!*23q5&7^K-99qsCh3h?2{$cg^*8`(P~rVG)Tj?xv&`%`4e= zOb6WLyL86SDSDwI(t>9J>kSab5pCXFr?k*B(9~u>KYc3b!$1h<oW*UujuZ1mv$I7? zLaQ+7lX$~dl5%rtB|h!%z0G`X`_Gw(zSx~ActXnOJBv603V&DUY(vrek6M!l1~@lX zrPPGFjrT?R;N1F4$aug-NTaAG`FK8|b`~kN%ExFsJxC9;<hS}MNiK1M?egOIfRFT6 zFPz&P3HguNp*S!$KV&gNz29G$!VAYgsUNN$;JZ4V)-~osZ8o(x^qG=gw8rL92xdrQ zZl$3U3%yF8`tM!xpv;*xl+{etI)yyBU&JYU;;ulnG{s6+GoV7aFB_r*tdYf#>fb;7 zOM!nWK&Jp{>^R1{7OTt5el6_?to9g~o;Bia5gaP=z673W8gz3-la0hNPAyuLUQE6D zp<~RuIi}1gb1ri6OBCeG_HkfG){R~q?(C$Uxmv3=GZ7GAG2aHC>yvUJ3PcZ_byiE; zXYNczV#+ia<g5tLh-i?A!B0JGm-TdP=ig1RyZ21rg-J(1g`?p_-#(nT8vE^n?r;}; zO4|&k2n|tur?+S>JJ8;9qJAs!{k_pXPuk21La_-{rO}|qcLMs)`H<t@xwSrpNk32` zec@!nAhg~>Ly~?QqIMQczVGM0003|~0tR5uE8Z(v;Zg4>lQZU@`WbV+2WyH3G`?1m zNn21cYiRLloK*p8Na0Z<*24DL_Li`_UQk~)Mm!Dlv+mND3E#pLp(h{i`tyy*FWSLK zoH!$Kerod0=8_K6{a+y3*zL<VBvcQXKfjy_t<qhvM|26rE0N7M-|L^A|0huDqfe_R zKlt+SEf^Xx5=*64d!XqsttWB?L3se2HZ+9j@rA+b>4Q|eo$IS8@2Y8|RA3uz@N&?A z#<v5c&07Pv6?oZC!71a|2E6s1y&GUrcB|LQ11L2pfrk&WF$V0`f>yg}mNbORV7eMG zmze2DGv_iFezqD3N49NH3~#KjQst%x&!{~3-WcTU>|mvKEtN+c;t_oI@{1#Yb|?<o z{q${duK&n21};W4j?9RuPRFx788)BLu2LKA>+l*ghjaIXJ8+Paed^W|-a(FseVL?G z7qF~ZK``dQfpZ_G_VY}=ss0SSQU_NIpw~}uzN0il6p?<k-8sVZ(QMJeWUV=*<m4a| zg$5;RKVP`s(&@)CeQM!41=gsCx5fwO@7`cp6>yxsL<rc?qlmGd<Mqjp^0yS>+^y2- z=3N5=iQ^5_jqvcg2s#hfZNtNS{Ne#lo-vK61`3l<cp|#(&|(vX!d`w%)Y$)-<3#6& zUv5B^(icaCq)|P_${tH-$OBV}Ls)^q{1;?%oVFA`+Fig^INeF{29kQ<ASUiI@lr%1 zfMp>xb1|6)Rlry(&H}BHUk?SJd953YP%0ffdCYwL(_NIJP@q&qnoxaBYX$Ep0tr<f zEF@JVld@feFJS?`e28uOXSVLe$Ih$|0}}_XRm9N3&zfqRa-7_?F=Um2e#@z|;<w9B zI&5WM@61Y(6s&t~$9aX-l{J@qTI+DJ*u&?fRjlj#ZJ(u<+pZKo;`uA9nJ;I~NZI3k zK3#`4ZTatm6PHsfBhG5f%yS;`8k@RO>&fEt4K4ERkL*hRtbFPEl=?Ag5WE6BYOe5^ ziCnO%EZE6*)W2SC@l+3-I}pqJ2la2G5d?Pi4VJHJuzd+0KhX|Hx3ud_e{w&>9a!x~ zROf%1&}9!~a)vtl-y<-8=nndCuwmhZ@@d7>t>9$#-@##mod$c9{8&>Po2&pE_^@~d zdXUjruP@J{orlX-8F0T<Xlq6G#2M-fXt?f;$F^Un{qU#h29QdUERL`{u(k+$v$L56 zeTF!Sd<ch;@?4%|cWBAx^<34^G3hB>O;{mz0tY2K>-1AJOKts!O@@H95gx>!bNyWD zI{dX-zh`n(^G13XL8-C|!3_0~Ot&^~R|=B76PL3;CZkHL8`gyfm7+0|L>5oTkV1AB zav`W;2;(99eJJyyeeFTAdfab!b}7IL*I_G&ZkfO!2V$B{6YMSqm3khmP(RJ)ycZhH z|D;{Nu%HDI;x3&1o?CV9P+P|{lZz@3c#~eG8;hl<Dn5Pox+1!Rau{BT#ql7#-pFju zf6UzxmCSp<a`$*)*i)X2u&+;Dy{DzFxQjvMb2J)<87#uQi`=JkI`_I>$d-uPt|1yJ zvrlK|lM|V%KU^gcXgIrWY|?YQd%Bi8_-?h^lTRVVV+MVpR5RX$7SA#0PVxti0g9+; zt+^zf;31xV^ni*T%b3BiN51Zdk5dnGOGg(MS`eNe#_lL7;pEJGe^XMRVEj|te)yy; zJ+SAhY<O25;5PK;`mewTaMl;SD{$CSb*1l#wkRD7`|x8f*ZnjM*7F&ue$1pnOLLMR z4tAW&vC}h(<4M<dbaD?3K2+#=9S-y$)qm79q#NTEU2~QcQ}1_$elw4bchB#2Rj}>% z%9*Jy*O{3lZiVwi{={9Vw?OvQi@Kh9nb?Ov%{|5ab_35n{qkK-u8oQmZlvXk7mgJq zj@}!wy}W&7*fB*<8i?oor$Liyr1W%tcA+$|WG7skf}VxE4mPOL#>GC)TXeHb7x0^r zx>tu>kyq4n`K=(z&>92tj$77p%s938JDSAF*~XY}D1+4_-R05KjK|*MzdE3FLEc8H z=a1vvcTy(RD&s?`EwdFX2qYYEF=QcnsnQMVpLKf;vvL@CUHO~N#=1DWNfDm+o*Hg= z8LD$y%2_*_WWTLq)%KJbn-Le6JM`5cE!;64kCn}iH9Hh9+8?_@0S&g{t8$9};ojlo zd0!c|*;#4mxYCWYrGLnPrc2bfPYfSSc$H2v-K!I9m?~57x6p|SVYLJ?_4#y@l9IKQ zX^j65KW|9L@C63VEb4?q#3U9dQK4z3Sv{TUGd;Cq+OarH(*DE4rmj)sTUO5F8_|#? zVWAiW`v8`oMWn0UoIpozfDv(g4bAc)!N8aws!m==fF4n}ATTr=q$|-gh;bB{C~P4A znHxA23eGruY=ed<)_1u?TkYEDyF&b=g*00OUFbw_W6N=RE)(uWk$g%I^-S2vS(~ZJ zIwtmQnTuNYHpAB}IOA#}tl(TYs<Jam*h!>2;$=wjW=FG(NwssA?SVDdL17q;3pr&n zu4@NRg_Q)iX+n@)F{?Vrb>@y-&(hG(mWu*FLpU#me#ybUlB>2Yav;6>W`B=d0+nR{ zdXKiMaOcIjoEdd!H)Sk^gWPoopmz1h)0SjiBYB5{@MP6JAM(xmLTg5m)6@}Al|xT6 z-fia9ITn7*_E^We^%2KXEghV<*h}BnPZ}ym6uc;W;EaByyJWA0yggg3QK7->6HeOE z#J@n8goCx4J*JNXV%=jnHo^JV9c*(`<?pkPg+oWtk0tHEp~J6y9XYNuQ2VNlvzm5U z;OhQM9U88kYx`fwY$m7n$39J=cUn?}gdZ9&u{?xgrBh9I3_6c@KiIpPftL{FT@h40 zkqa=;Z)N@Xa-w)jDcwF-eW*z|ot2h&R3Vk0_kNOnkk8C;HAI6BNIn?#6u)5N79c03 z*J~)|+H;)fC$ryZ`T;|?jl#(h)GN?9kSm7f`S!eRxZKl{vV^^>LyUsnQ~px(c;vH% zK+wclQ5O5R75UGlX<IAg=bC+R3H#9T^2Ec;qflW<#4~YneLiz7H8Ghjywa(S9Bgx9 zdxmwEqLv8XuwYQLp?iBKf#!{Y)!j;J2J7wYK8(B!9hP7a&I(Ej=y$pgd_&G)GW4FF zV8lDvp~=Cs>5;(*Zll3iS{LWt>bdIk+}N`@SvL>X6QS(qp|7fV>)}>JSRo-m!HGD( zvesOBQdn@BrW>7SSpux)GkwL#LNW-Mga<FCVmoR6IjXehon}Z3Y-q&}u%fy=(P`94 z9R{W4k$XMS5AV>YmbO~%O|_OA4K~>yTD&lJ5qy>IJ~SMmJO0*nPvMGP{hIsxjzAAY zqBo8|)Bb`=Z7L*-@3DD=c$YZ3&tYA#Noo9Ms!;#&SvE&V%i_Cx$1^)`@ztInW%kYp zjf{1HwSaE#*sX{d{#7wZ_TY)jEQIbw9HWw-0Adz<RKcHhf27mF=NG=?hmOVud2MAg zYZ9^q0y)EpHuUPd_h)=4src%h1&-NwoZ`!MtsUDR%sIqgEhw}0pgV8<cp0Icr!6cf z0j#M<UBTg~+JjXyq(dH!+&ty0nmY5jk#*x({_ddqhtlz3J%8Ppc2ZP3!1iBYAu}8| ziA;+6^;sZmqCWMzK@9QCNK`g#2hUBj%5uR>S|<xkiQ}LUS0YnxcHF^sv`Gj&ETmNt zCYz#pyr5EWLfI@m4f-|^oZ(O{nvldJa^Rpn-G9!p)=8MFV{tl@=FJ9fE{>cLuc>Pb zI@YQ;+9S?9ULbmS`%qMA{<)FBhlgQfX;}Y&ARt8X5LcHS-S;jsb?bvj)>1%x6c2He zTqkzg9wS=bc6^7EoONj-_%djeDq}wh6Ca8X9CQ@Li|f~D0OzWgeJZ_DAP1V46WSo5 zX;91__E3Jx%|f9nJD44M9>b?6Xb^%P!cAexst5TC!U85B8A1FNN8B{kc20{~oeisZ zgpAusob@N3?FkKtCx@IGT}dF~CHE3{Q{=ZM?zm2VtY1!iCIUW%5FR!zSFTX^C+;&+ z1x9;;BWL6|)%3q~{5;t88W~)Re71{T6w#l~wQm})dGBda9qKC)gXwTw4T7HGhV8xw z_fW-<%WR-q6?UXbgo}V{1w=ut7cRl-Z{w`q3K8oqhLZkpyt8;Ej*2DUcu00@A7lL( ziSXDBymY`SBzmh14Ord3If;p~F%E^qoe&BMJfKUpC|>Gsn>!-azvoD2tOg<;!NVrx z^Ki9LU%uzyfq~G^^ne6^q^H|nw&lm`2g3Pb`Ym~ALW}*f{X*A0aDp5)fO{C;eKB%b z9vYDRC(M|9v|aA2k!0mA*p0P#OEUx~uU%K6DlZ7WQ53VlBXk;A|KyKOoV>!YAKplw z7;hw6Y_H2^-gI|Re8_!+XlzKHSs~A-2fuc`e>uI64|GhG2p-UFbIP`a9oO0JXIkDi z=UERMmw*%LJ6NQK$Ftq9Zt|^NNyz#U2kB9@LyHxKo2i3WocGitaR!KM1Wo{0te{30 z=?PC(XV*JlX!byL<Zeea`VPUB28!-onhI58!E0eo2fR6Tz*{~U$8)92eSe>&Jh(ri zJMq@oEY#FCc1T30XanGcmk(07P_#fRl^ZU#SIW$c@@0m~31JwOOk(}hYvS1z_s;h_ z7I{zS)gXd{#{A#k|E0jc6!^bVAmS+fL;$fLansYob<WNC{GH)gHdb*Lqx43CoImw| z&wYNSg|>6mQD1GSd7ee<mVrXEoXQo*U#hCg2j)BT&RjhMsf3^B=8DjF6_AP;{vK&t zD&#!J4n5SJM}PRXzzoT)dTq}YMmgE}bh-Q2bJwD*fHK3cD6UGA{Mb2brE6mcuG`Y* z8-Qk5*Ib-y$4%NxLW6pf$h^1sQYbhdoxt?b#KqF2z3=hmbxKFZ<^1<V7cVDjN=`U9 zgS=aHB>oY#B%7*Qg;HDVm=0)S8YHz(4-a~edwolwFP$^1k)dLVmD)<ybGsGmry=o3 zC*MC%qLK{#N`7o*rw|kzHvAa%H4Oc>V}K_K%OSa>du<aT5Zg}_qQ_y@sL64;RviJR z>L~^2aq5{HBK%Z)B0fJMN0$oexg{U3AUF|)8O~>M7?OQRxYy>WA*}v!?pz=^R?8ky zW?(?Rqg!Fsu9LkDtk|;0Se;?2#aQ~X2S(0IjP6)38aNn1&!8^_EUss`Yb4>ViY6m3 ze>Y<k8J2<&hnOtDt`9|qHNvjBn58ktSR(@Yt$}-T2Y*V~)R7%MVz+b{_!+s+82OWc zZO)@Fq5>Bs(I$}inmN_)r<1<wXd2UN3`+<3+p=z9))>yb&<$(;+J+_%(|sVvBD*1M zEiu)zbQJhGg6Vi`9)}`~XX7i=gL@Kmm_?YSpjqrp9y)>)VGgRmc1#XcHeUOEDG;<u zFJ)T%(E9V53jIdIHW==QQ=Z5>TTUu^cJ6m|Ia3KmAD_AE1I??J4`uAe+_@D4N@iXD z+ggQ`pj*JQCu^LE)Jmt*wW3?e{0gXCBk?aLAMK1r60|iV<Pi1*$xigXF}+OEA(IQu z6!N3lci`eIeX5`l4f1<?NqOc%TXS+qp5@Dzhgf}DcP@p3)xS`uZ-7@0Z2G84_GpKy z=(v4u>dfGz0Pkgb3S-#|qU;Qz`>ISQKw+OR1u7g+6LC|9404n#Z@Ra$V;Cc|z4XOz zF<dvV5TuYNttke>%~sY&rTdjrEq^SKvteeom%c*uW>VrZk_wi3-_)a<War=RFWZzl z9RDWDs~zGfl=}Hrit5gU9A<daVCT_!xBL88yAm3y4hdx~=~Hj=7`2L}^AOmW>2!_s z&$HEUlBk9$rcodT#w#J*_Z!Z-;vxAX^xj_jkbD_xjFccA^uztdw29=_Tj$<vUNdKI zps42V@_4~x5h`p;9}+7=fJh0BNQEt>Q&Z%vMu=(2q7kF|g1;VzF$T97pNATw`IYx> zKc~L2s!7@MtVM?B-SH-)3rX>zpXt%ovbj7NUUTt_ZOe);ri|jth*Fu_`z|DTxbz_+ zM{(f~##@n6SJ-fM&SnaG0f(lhpGS^v`RhI{#nDfr=uReN=q!i~(%&gvG&3MrZS_$v zq_|bcRiP?n&U>D^0Kx0BM~{(&FE;yTE;m|bxNosYU$``O8Knm_Rp^32)&nJY@lo-t zbHgn`1hZx15eSKJsu%u5DsY`q>k%xW*rZFKJ6CDmV2A?hO?hR8uvVp;rQcsov$@za zw|hAVDTQI(iFU4x#Cr)P89Z`Ethf}El)^X><vjXf%KLzdw_#EakLGDVk4B;Nypfhg zfo4=hp~tAr7Qa9k8?wR7jO#&E#&ziw-%4`EGJPsVvhqRI=Ovz~@9gMq*5$bVN<?*} zb9^@=uet1{Z+m*aFJNHg%~Z41(J9C1dXI7Qg0dl@^1{FvLko1r(c*cAMIc%;s{)er zl&dEy<+^m5?oNiFW`*rn9HXi8OU2vSzT6DVwmjpy?3EHGX;Z=v+|TnJc-WEJD=3?! zEqc{)w^-lX*Cq#eF^H8igLogwAl8Lx%aK#@>Tq)!)p!@62Fa2POC+(fTuvd~xm1TR z67T-9l0iQtrphMU4P&})la&}uG0qmo#EU^^@+zoVK|L+kTv7eN7l;#=J!B2$TUVDQ z-YZt=#_=?Tu+=t5S14Vf_VX=!>7UG39<#&|IsA-+mfSm&%+ue)s39zUfpmjur!G4{ zdB;e%r>IOJ|Jk<rm{I%1d7-6{APzUe=%y(@7fBK9X%P?p5_s7kb;!Edl94wc9ZL0` zma+PzcnP(vY$m}kH=;6D%O>Nz%MdS3<$p3(%K+BFM|#K~1c?7+td;?M%d2ZDLvmG9 zcJ;yEQv6HYjF!Pbw&>e1y)!ezr!`G8f>7vwOH7FU#LPn{CQ}?GQKCl_{^q7UFtR@; z9GSv0ubvTHPp_pdn@|J3T}A#NkjyQ$@r*iTqtS-inmN)Bh;{%T)HL4TXE`^rY?LM5 ziZPH!AkBsy(&x(_<DVJKBW7)Ma3a5pt@%I~%1zJGXZj2;kPtsikZVKL9&JYXZ`nxS ze6+-FI)#q=4T~-NKlt&?BB<VYvZTEK8f$wqv_?0UV`9TH)D)#t=}4=ys1d}`cz=)N zBz`N;Q8k4d{nZn4RW72^iRx0#&t*k)f<Ht+T9}c|SccW#?(QCBM!$U5@l2br!%IMl z7cUOj>3;an3z>~Y25)b#k@;x0r=n8rF_)2Z@YSE9(w>oiu-e2Gt^CVLhq&mBwX2?P zI;$AFJtyXzf&To*wQ!t`AixYdR_l*BZ&BSF<>g{a-`jsCahqpit2|Zycwa(i*;S|X z%WXx-0+u|QOs8snT7P3%iFPyk-%LqZ|4DRSR%U_r*QYNxU+r4*KKwWy!Q`6a`sv>y zopL<KX3saYjKSg8Wsd+e!Tz$YXt97MMVqx>J{L)vxuj!aZ;E`HggP=#2R2rFABD8j z(x<qWss8>0vl;PcT;Ay1^`L3kVkr##9Lfyu_)};Ft+~Qc&kpTHiH#<-HbGvxb@sXO z6G?Siy=Mm1t`OxykeI=+4&~u|lZL%yr2+EFl1H8yM{TO!|2$nIj5;+t>F{{L?a@<| zXpvNfk+(>1n-0XB^RYjnbg{Ohbg0_vkuA#MUNZLo_m3pO#T9||pD4Gk#ZDo(sHs3d J&?Cfa{{vpF#VP;* literal 0 HcmV?d00001 diff --git a/src/assets/svg/etherscan.svg b/src/assets/svg/etherscan.svg new file mode 100644 index 00000000..6b2bb388 --- /dev/null +++ b/src/assets/svg/etherscan.svg @@ -0,0 +1,3 @@ +<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M9.90521 0.39972C8.32034 0.600171 6.59137 1.20582 5.3732 1.98736C2.97582 3.52536 1.3016 5.94481 0.665926 8.79001C0.442048 9.79205 0.445265 11.9452 0.672287 13.0083C0.961569 14.363 1.64321 15.9853 2.11877 16.4513C2.45651 16.782 2.74086 16.8534 3.49391 16.7964C4.23437 16.7404 4.53695 16.635 4.70829 16.3731C4.81816 16.205 4.83009 15.8927 4.83009 13.187V10.1872L4.99307 9.94488C5.24704 9.56739 5.40086 9.52357 6.47414 9.52357C7.51869 9.52357 7.68331 9.56639 7.93263 9.90262C8.07759 10.0982 8.0836 10.2004 8.1182 13.0632L8.15394 16.0217L8.60076 15.8842C9.34351 15.6558 9.29205 15.9606 9.33336 11.542L9.3691 7.71922L9.60256 7.51032L9.83601 7.30142H10.9269C12.1202 7.30142 12.2383 7.33493 12.4432 7.7319C12.5335 7.90678 12.55 8.45499 12.55 11.2725C12.55 13.382 12.5755 14.6062 12.6194 14.6062C12.805 14.6062 13.4718 14.2444 13.6095 14.069L13.7652 13.8707L13.7654 9.78038C13.7657 5.80409 13.7697 5.68349 13.91 5.45303C14.1291 5.09288 14.4135 5.00973 15.4259 5.00973C16.4322 5.00973 16.7004 5.1004 16.9227 5.51548C17.0436 5.7415 17.0533 5.99852 17.0533 9.006V12.2526L17.2856 12.0905C18.2799 11.3965 20.1529 9.60263 20.6538 8.86442C21.1268 8.16739 21.0918 7.7589 20.4404 6.3735C19.9308 5.28968 19.2669 4.35309 18.3804 3.46771C16.8733 1.96243 15.1532 1.02814 13.0339 0.563648C12.3855 0.421563 10.5097 0.323235 9.90521 0.39972ZM20.952 10.8883C19.7532 12.4967 18.087 14.0312 16.1954 15.2688C13.7634 16.8599 11.0211 18.026 7.90371 18.7945C6.97954 19.0223 5.08945 19.4043 4.88602 19.4043C4.72612 19.4043 5.46644 19.8789 6.2478 20.2773C7.10806 20.716 7.98306 21.0249 8.97592 21.2405C9.44869 21.3432 9.8928 21.3725 10.9774 21.373C12.5359 21.3738 13.0337 21.2983 14.3361 20.8642C17.8484 19.6934 20.5024 16.694 21.2694 13.0284C21.4115 12.3489 21.5645 10.2375 21.4716 10.2375C21.4526 10.2375 21.2188 10.5304 20.952 10.8883Z" fill="black"/> +</svg> diff --git a/src/assets/svg/icons/back.svg b/src/assets/svg/icons/back.svg new file mode 100644 index 00000000..03ec01aa --- /dev/null +++ b/src/assets/svg/icons/back.svg @@ -0,0 +1,3 @@ +<svg width="5" height="9" viewBox="0 0 5 9" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M-9.83506e-07 4.5L0.348385 4.11989L4.06452 2.04456e-07L5 0.760218L1.6258 4.5L5 8.23978L4.06452 9L0.348385 4.88011L-9.83506e-07 4.5Z" fill="#9FA2D8"/> +</svg> diff --git a/src/assets/svg/icons/collapse.svg b/src/assets/svg/icons/collapse.svg new file mode 100644 index 00000000..af4d439b --- /dev/null +++ b/src/assets/svg/icons/collapse.svg @@ -0,0 +1,3 @@ +<svg width="8" height="4" viewBox="0 0 8 4" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M3.6 4L3.90409 3.72129L7.2 0.748385L6.59183 0L3.6 2.69936L0.608174 0L0 0.748385L3.29591 3.72129L3.6 4Z" fill="#8A8CBD"/> +</svg> diff --git a/src/assets/svg/icons/copy.svg b/src/assets/svg/icons/copy.svg new file mode 100644 index 00000000..9621220b --- /dev/null +++ b/src/assets/svg/icons/copy.svg @@ -0,0 +1,3 @@ +<svg width="15" height="15" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M3.125 9.375H2.5C2.16848 9.375 1.85054 9.2433 1.61612 9.00888C1.3817 8.77446 1.25 8.45652 1.25 8.125V2.5C1.25 2.16848 1.3817 1.85054 1.61612 1.61612C1.85054 1.3817 2.16848 1.25 2.5 1.25H8.125C8.45652 1.25 8.77446 1.3817 9.00888 1.61612C9.2433 1.85054 9.375 2.16848 9.375 2.5V3.125M6.875 5.625H12.5C13.1904 5.625 13.75 6.18464 13.75 6.875V12.5C13.75 13.1904 13.1904 13.75 12.5 13.75H6.875C6.18464 13.75 5.625 13.1904 5.625 12.5V6.875C5.625 6.18464 6.18464 5.625 6.875 5.625Z" stroke="#1595FF" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"/> +</svg> diff --git a/src/assets/svg/icons/forward.svg b/src/assets/svg/icons/forward.svg new file mode 100644 index 00000000..1098e99a --- /dev/null +++ b/src/assets/svg/icons/forward.svg @@ -0,0 +1,3 @@ +<svg width="6" height="9" viewBox="0 0 6 9" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M0.542893 1.95718L3.33579 4.75008L0.542893 7.54297L1.95711 8.95718L5.45711 5.45718C5.84763 5.06666 5.84763 4.43349 5.45711 4.04297L1.95711 0.542969L0.542893 1.95718Z" fill="white"/> +</svg> diff --git a/src/assets/svg/icons/redirect.svg b/src/assets/svg/icons/redirect.svg new file mode 100644 index 00000000..a475c7e2 --- /dev/null +++ b/src/assets/svg/icons/redirect.svg @@ -0,0 +1,4 @@ +<svg width="7" height="8" viewBox="0 0 7 8" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M1.42589 7.5H5.57392C5.95208 7.5 6.31476 7.34977 6.58217 7.08236C6.84958 6.81494 6.9998 6.45225 6.9998 6.07407V4.64815H6.22205V6.07407C6.22205 6.24597 6.15376 6.41083 6.03221 6.53238C5.91067 6.65394 5.74581 6.72222 5.57392 6.72222H1.42589C1.25399 6.72222 1.08914 6.65394 0.967589 6.53238C0.846041 6.41083 0.777756 6.24597 0.777756 6.07407V1.92593C0.777756 1.75403 0.846041 1.58917 0.967589 1.46762C1.08914 1.34606 1.25399 1.27778 1.42589 1.27778H2.85177V0.5H1.42589C1.04772 0.5 0.685037 0.650231 0.417632 0.917644C0.150227 1.18506 0 1.54775 0 1.92593V6.07407C0 6.45225 0.150227 6.81494 0.417632 7.08236C0.685037 7.34977 1.04772 7.5 1.42589 7.5Z" fill="#1595FF"/> +<path d="M2.69141 4.25926L3.24102 4.80889L6.22242 1.82741V3.35185H7.00017V0.888889C7.00017 0.785749 6.9592 0.686834 6.88627 0.613903C6.81335 0.540972 6.71443 0.5 6.6113 0.5H4.1484V1.27778H5.6728L2.69141 4.25926Z" fill="#1595FF"/> +</svg> diff --git a/src/assets/svg/icons/search.svg b/src/assets/svg/icons/search.svg new file mode 100644 index 00000000..b300ba45 --- /dev/null +++ b/src/assets/svg/icons/search.svg @@ -0,0 +1,3 @@ +<svg width="13" height="13" viewBox="0 0 13 13" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M13 12.3021L9.08632 8.38842C9.82526 7.49895 10.2632 6.36316 10.2632 5.13158C10.2632 2.29895 7.96421 0 5.13158 0C2.29895 0 0 2.29895 0 5.13158C0 7.96421 2.29895 10.2632 5.13158 10.2632C6.36316 10.2632 7.51263 9.82526 8.38842 9.08632L12.3021 13L13 12.3021ZM5.13158 9.27789C2.84632 9.27789 0.985263 7.41684 0.985263 5.13158C0.985263 2.84632 2.84632 0.985263 5.13158 0.985263C7.41684 0.985263 9.27789 2.84632 9.27789 5.13158C9.27789 7.41684 7.41684 9.27789 5.13158 9.27789Z" fill="#9FA2D8"/> +</svg> diff --git a/src/assets/svg/icons/swap.svg b/src/assets/svg/icons/swap.svg new file mode 100644 index 00000000..6c758943 --- /dev/null +++ b/src/assets/svg/icons/swap.svg @@ -0,0 +1,3 @@ +<svg width="18" height="19" viewBox="0 0 18 19" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M6.04931 0.13977L0.169764 4.9868C0.00393485 5.12352 -0.0455534 5.32826 0.0441621 5.50698C0.133878 5.68523 0.344854 5.80144 0.578982 5.80144L3.33672 5.80144L3.33672 9.5C3.33672 9.76343 3.59603 9.97723 3.91553 9.97723C4.23504 9.97723 4.49434 9.76343 4.49434 9.5L4.49434 5.3242C4.49434 5.06077 4.23503 4.84697 3.91553 4.84697L1.97652 4.84697L6.45824 1.15222L10.9397 4.84697L9.00038 4.84697C8.68087 4.84697 8.42157 5.06077 8.42157 5.3242L8.42157 13.2019C8.14374 13.1986 7.78835 13.1986 7.33167 13.1986L5.66325 13.1986C5.42912 13.1986 5.21814 13.3148 5.12843 13.493C5.03842 13.672 5.08791 13.8765 5.25403 14.0132L11.1327 18.8602C11.3587 19.0466 11.7251 19.0466 11.9511 18.8602L17.8304 14.0134C17.9413 13.922 18 13.8001 18 13.676C18 13.6145 17.9855 13.5524 17.956 13.4933C17.8663 13.315 17.6553 13.1988 17.4212 13.1988L14.6626 13.1988L14.6626 9.5C14.6626 9.23657 14.4033 9.02277 14.0838 9.02277C13.7643 9.02277 13.505 9.23657 13.505 9.5L13.505 13.6763C13.505 13.9397 13.7643 14.1535 14.0838 14.1535C14.0861 14.1535 14.0884 14.1535 14.0907 14.1535C14.1558 14.1533 15.1413 14.153 16.0237 14.153L11.5419 17.8478L7.06078 14.153C7.92582 14.153 8.8904 14.1533 8.98851 14.1535C9.02961 14.1542 9.07099 14.1511 9.11238 14.1444C9.38384 14.1003 9.57919 13.9042 9.57919 13.6763L9.57918 5.80144L12.3369 5.80144C12.5711 5.80144 12.782 5.68523 12.8717 5.50698C12.9612 5.32826 12.912 5.12376 12.7461 4.9868L6.86775 0.13977C6.64173 -0.0465911 6.27534 -0.0465911 6.04931 0.13977Z" fill="#EAF2FF"/> +</svg> diff --git a/src/assets/svg/starkware.svg b/src/assets/svg/starkware.svg new file mode 100644 index 00000000..9438e26e --- /dev/null +++ b/src/assets/svg/starkware.svg @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg width="104" height="15" viewBox="0 0 104 15" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <path fill-rule="evenodd" clip-rule="evenodd" d="M20.743 10.5764C20.743 12.3241 19.7952 13.3274 17.9307 13.3274H13.4714V11.2561H17.4024C17.9773 11.2561 18.257 11.0457 18.257 10.5117C18.257 10.0748 17.9463 9.79972 17.2626 9.29807L14.932 7.42092C13.7511 6.48235 13.2539 5.6085 13.2539 4.57284C13.2539 2.80904 14.2483 2 16.206 2H20.5566V4.07126H16.6411C16.0351 4.07126 15.7399 4.28163 15.7399 4.83183C15.7399 5.25257 16.0507 5.52767 16.7499 6.01306L19.0649 7.69602C20.2458 8.5375 20.743 9.55699 20.743 10.5764Z" fill="#28286E"/> + <path fill-rule="evenodd" clip-rule="evenodd" d="M29.8611 4.07132H27.0433V13.3274H24.5385V4.07132H21.7207V2H29.8611V4.07132Z" fill="#28286E"/> + <path fill-rule="evenodd" clip-rule="evenodd" d="M36.5802 9.24953L35.0858 4.76703L33.5761 9.24953H36.5802ZM37.2207 11.1428H32.9204L32.1885 13.3274H29.5352L33.7896 2H36.3514L40.606 13.3274H37.9527L37.2207 11.1428Z" fill="#28286E"/> + <path fill-rule="evenodd" clip-rule="evenodd" d="M44.8289 7.34001C46.196 7.34001 46.5999 6.83836 46.5999 5.64095C46.5999 4.44345 46.196 3.9418 44.8289 3.9418H43.7414V7.34001H44.8289ZM49.3962 13.3274H46.8951L46.4135 11.159C46.1028 9.65408 45.8232 9.24953 44.7357 9.23327H43.7414V13.3274H41.2559V2H45.7144C48.0291 2 49.0855 3.06796 49.0855 5.39814C49.0855 6.9679 48.4952 7.92258 47.299 8.31095C48.1535 8.73169 48.5728 9.57317 48.9146 11.159L49.3962 13.3274Z" fill="#28286E"/> + <path fill-rule="evenodd" clip-rule="evenodd" d="M53.4466 7.48573L57.3054 2H60.1957L56.1402 7.48573L60.4681 13.3274H57.5778L53.4466 7.48573ZM51.0254 13.3274H53.4466V2H51.0254V13.3274Z" fill="#28286E"/> + <path fill-rule="evenodd" clip-rule="evenodd" d="M76.4221 2L73.1727 13.3274H71.6543L69.0882 4.26545L66.5221 13.3274H64.9885L61.7695 2H63.2576L65.7933 11.5635L68.4809 2H69.6956L72.3832 11.5635L74.9341 2H76.4221Z" fill="#28286E"/> + <path fill-rule="evenodd" clip-rule="evenodd" d="M82.8605 9.29807L80.8262 3.61816L78.7765 9.29807H82.8605ZM83.2457 10.3823H78.3912L77.3279 13.3274H75.7715L80.071 2H81.5659L85.8655 13.3274H84.309L83.2457 10.3823Z" fill="#28286E"/> + <path fill-rule="evenodd" clip-rule="evenodd" d="M90.5396 7.55038C92.2487 7.55038 92.8858 6.85462 92.8858 5.33348C92.8858 3.84471 92.2487 3.13276 90.5396 3.13276H88.5974V7.55038H90.5396ZM94.6571 13.3274H93.2121L92.8236 11.3855C92.4352 9.3628 91.9535 8.68315 90.4929 8.65078H88.5974V13.3274H87.168V2H91.0213C93.3054 2 94.3153 3.05178 94.3153 5.20402C94.3153 6.82218 93.6782 7.8093 92.3419 8.13295C93.3985 8.55369 93.8802 9.50844 94.2531 11.3855L94.6571 13.3274Z" fill="#28286E"/> + <mask id="mask0" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="96" y="2" width="8" height="12"> + <path d="M98.3576 3.19742V6.64417H103.143V7.76075H98.3576V10.1881C98.3576 11.5312 98.9132 12.1299 100.179 12.1299H103.775V13.3274H99.9628C97.7093 13.3274 96.9375 12.5506 96.9375 10.3176V2H103.775V3.19742H98.3576Z" fill="white"/> + </mask> + <g mask="url(#mask0)"> + <path d="M98.3576 3.19742V6.64417H103.143V7.76075H98.3576V10.1881C98.3576 11.5312 98.9132 12.1299 100.179 12.1299H103.775V13.3274H99.9628C97.7093 13.3274 96.9375 12.5506 96.9375 10.3176V2H103.775V3.19742H98.3576Z" fill="#28286E"/> + </g> + <rect width="15" height="15" fill="url(#pattern0)"/> + <defs> + <pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1"> + <use xlink:href="#image0" transform="scale(0.00357143)"/> + </pattern> + <image id="image0" width="280" height="280" xlink:href="data:image/png;base64,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"/> + </defs> +</svg> + diff --git a/src/assets/svg/tokens/dai.svg b/src/assets/svg/tokens/dai.svg new file mode 100644 index 00000000..cc501bc4 --- /dev/null +++ b/src/assets/svg/tokens/dai.svg @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Creator: CorelDRAW 2019 (64-Bit) --> +<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="100%" height="100%" version="1.1" + shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" + fill-rule="evenodd" clip-rule="evenodd" + viewBox="0 0 444.44 444.44" +> + <g id="Layer_x0020_1"> + <metadata id="CorelCorpID_0Corel-Layer"/> + <path fill="#F5AC37" fill-rule="nonzero" d="M222.22 0c122.74,0 222.22,99.5 222.22,222.22 0,122.74 -99.48,222.22 -222.22,222.22 -122.72,0 -222.22,-99.49 -222.22,-222.22 0,-122.72 99.5,-222.22 222.22,-222.22z"/> + <path fill="#FEFEFD" fill-rule="nonzero" d="M230.41 237.91l84.44 0c1.8,0 2.65,0 2.78,-2.36 0.69,-8.59 0.69,-17.23 0,-25.83 0,-1.67 -0.83,-2.36 -2.64,-2.36l-168.05 0c-2.08,0 -2.64,0.69 -2.64,2.64l0 24.72c0,3.19 0,3.19 3.33,3.19l82.78 0zm77.79 -59.44c0.24,-0.63 0.24,-1.32 0,-1.94 -1.41,-3.07 -3.08,-6 -5.02,-8.75 -2.92,-4.7 -6.36,-9.03 -10.28,-12.92 -1.85,-2.35 -3.99,-4.46 -6.39,-6.25 -12.02,-10.23 -26.31,-17.47 -41.67,-21.11 -7.75,-1.74 -15.67,-2.57 -23.61,-2.5l-74.58 0c-2.08,0 -2.36,0.83 -2.36,2.64l0 49.3c0,2.08 0,2.64 2.64,2.64l160.27 0c0,0 1.39,-0.28 1.67,-1.11l-0.68 0zm0 88.33c-2.36,-0.26 -4.74,-0.26 -7.1,0l-154.02 0c-2.08,0 -2.78,0 -2.78,2.78l0 48.2c0,2.22 0,2.78 2.78,2.78l71.11 0c3.4,0.26 6.8,0.02 10.13,-0.69 10.32,-0.74 20.47,-2.98 30.15,-6.67 3.52,-1.22 6.92,-2.81 10.13,-4.72l0.97 0c16.67,-8.67 30.21,-22.29 38.75,-39.01 0,0 0.97,-2.1 -0.12,-2.65zm-191.81 78.75l0 -0.83 0 -32.36 0 -10.97 0 -32.64c0,-1.81 0,-2.08 -2.22,-2.08l-30.14 0c-1.67,0 -2.36,0 -2.36,-2.22l0 -26.39 32.22 0c1.8,0 2.5,0 2.5,-2.36l0 -26.11c0,-1.67 0,-2.08 -2.22,-2.08l-30.14 0c-1.67,0 -2.36,0 -2.36,-2.22l0 -24.44c0,-1.53 0,-1.94 2.22,-1.94l29.86 0c2.08,0 2.64,0 2.64,-2.64l0 -74.86c0,-2.22 0,-2.78 2.78,-2.78l104.16 0c7.56,0.3 15.07,1.13 22.5,2.5 15.31,2.83 30.02,8.3 43.47,16.11 8.92,5.25 17.13,11.59 24.44,18.89 5.5,5.71 10.46,11.89 14.86,18.47 4.37,6.67 8,13.8 10.85,21.25 0.35,1.94 2.21,3.25 4.15,2.92l24.86 0c3.19,0 3.19,0 3.33,3.06l0 22.78c0,2.22 -0.83,2.78 -3.06,2.78l-19.17 0c-1.94,0 -2.5,0 -2.36,2.5 0.76,8.46 0.76,16.95 0,25.41 0,2.36 0,2.64 2.65,2.64l21.93 0c0.97,1.25 0,2.5 0,3.76 0.14,1.61 0.14,3.24 0,4.85l0 16.81c0,2.36 -0.69,3.06 -2.78,3.06l-26.25 0c-1.83,-0.35 -3.61,0.82 -4.03,2.64 -6.25,16.25 -16.25,30.82 -29.17,42.5 -4.72,4.25 -9.68,8.25 -14.86,11.94 -5.56,3.2 -10.97,6.53 -16.67,9.17 -10.49,4.72 -21.49,8.2 -32.78,10.41 -10.72,1.92 -21.59,2.79 -32.5,2.64l-96.39 0 0 -0.14z"/> + </g> +</svg> diff --git a/src/assets/svg/tokens/eth.svg b/src/assets/svg/tokens/eth.svg new file mode 100644 index 00000000..1231284c --- /dev/null +++ b/src/assets/svg/tokens/eth.svg @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Creator: CorelDRAW 2019 (64-Bit) --> +<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="100%" height="100%" version="1.1" + shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" + fill-rule="evenodd" clip-rule="evenodd" + viewBox="0 0 784.37 1277.39" +> + <g id="Layer_x0020_1"> + <metadata id="CorelCorpID_0Corel-Layer"/> + <g id="_1421394342400"> + <g> + <polygon fill="#343434" fill-rule="nonzero" points="392.07,0 383.5,29.11 383.5,873.74 392.07,882.29 784.13,650.54 "/> + <polygon fill="#8C8C8C" fill-rule="nonzero" points="392.07,0 -0,650.54 392.07,882.29 392.07,472.33 "/> + <polygon fill="#3C3C3B" fill-rule="nonzero" points="392.07,956.52 387.24,962.41 387.24,1263.28 392.07,1277.38 784.37,724.89 "/> + <polygon fill="#8C8C8C" fill-rule="nonzero" points="392.07,1277.38 392.07,956.52 -0,724.89 "/> + <polygon fill="#141414" fill-rule="nonzero" points="392.07,882.29 784.13,650.54 392.07,472.33 "/> + <polygon fill="#393939" fill-rule="nonzero" points="0,650.54 392.07,882.29 392.07,472.33 "/> + </g> + </g> + </g> +</svg> diff --git a/src/assets/svg/tokens/hex.svg b/src/assets/svg/tokens/hex.svg new file mode 100644 index 00000000..0e24299a --- /dev/null +++ b/src/assets/svg/tokens/hex.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 338.51 297.23"><defs><linearGradient id="linear-gradient" x1="84.63" y1="295.19" x2="253.89" y2="2.04" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffdc00"/><stop offset="0.33" stop-color="#e58e2f"/><stop offset="0.67" stop-color="#db2d72"/><stop offset="1" stop-color="#f0f"/></linearGradient></defs><title>Asset 1</title><g id="Layer_2" data-name="Layer 2"><g id="logo"><path d="M79.56,290.47l-22.92-39.7a5.28,5.28,0,0,1,0-4.65l25.45-44.07a5.24,5.24,0,0,1,4.06-2.35h50.89a5.26,5.26,0,0,1,4.07,2.35l25.45,44.07a5.32,5.32,0,0,1,0,4.7l-25.45,44.07a5.33,5.33,0,0,1-4,2.34H91.36A15.43,15.43,0,0,1,79.56,290.47Zm165.27-90.69L194.13,112a7.21,7.21,0,0,0-5.56-3.21H87.17A7.21,7.21,0,0,0,81.61,112l-50.7,87.82a7.18,7.18,0,0,0,0,6.42L45.77,232l26-45a8.22,8.22,0,0,1,6.43-3.72H145a8.22,8.22,0,0,1,6.43,3.72l33.41,57.86a8.24,8.24,0,0,1,0,7.43l-26,45h29.7a7.19,7.19,0,0,0,5.56-3.22l50.7-87.81A7.18,7.18,0,0,0,244.83,199.78Zm92-58.09L259.06,6.93a15.37,15.37,0,0,0-12-6.93H91.45a15.37,15.37,0,0,0-12,6.93L1.65,141.69a15.36,15.36,0,0,0,0,13.85l17.83,30.88,51.7-89.56a10.14,10.14,0,0,1,7.94-4.58H196.53a10.14,10.14,0,0,1,7.94,4.58l58.71,101.69a10.13,10.13,0,0,1,0,9.16l-51.69,89.52h35.57a15.37,15.37,0,0,0,12-6.93l77.8-134.76A15.36,15.36,0,0,0,336.86,141.69Z" style="fill:url(#linear-gradient)"/></g></g></svg> diff --git a/src/assets/svg/tokens/starknet.svg b/src/assets/svg/tokens/starknet.svg new file mode 100644 index 00000000..996c95bc --- /dev/null +++ b/src/assets/svg/tokens/starknet.svg @@ -0,0 +1,8 @@ +<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M19.9222 9.96097C19.9222 15.4623 15.4626 19.9219 9.96126 19.9219C4.45991 19.9219 0 15.4623 0 9.96097C0 4.45962 4.45991 0 9.96126 0C15.4626 0 19.9222 4.45962 19.9222 9.96097Z" fill="#29296E"/> +<path d="M14.5964 7.29758L14.3431 6.51503C14.2916 6.35588 14.166 6.23202 14.0063 6.18319L13.2199 5.94136C13.111 5.90812 13.1102 5.75455 13.2181 5.71954L14.001 5.46625C14.1598 5.41476 14.2837 5.28915 14.3328 5.1294L14.5743 4.34303C14.6076 4.23448 14.7611 4.2333 14.7962 4.34156L15.0495 5.12411C15.1009 5.28297 15.2266 5.40682 15.3863 5.45595L16.1727 5.69748C16.2815 5.73102 16.2827 5.88429 16.1744 5.9193L15.3916 6.1726C15.2327 6.22408 15.1089 6.34999 15.0598 6.50974L14.8182 7.29581C14.785 7.40466 14.6314 7.40584 14.5964 7.29758Z" fill="#FAFAFA"/> +<path d="M0.905762 9.80314C1.14258 9.3392 1.61093 8.98971 2.09752 8.76877C2.58911 8.55019 3.12954 8.41604 3.66026 8.3725C4.7317 8.27571 5.77548 8.45487 6.7263 8.76465C7.21613 8.91057 7.65447 9.11327 8.10723 9.31802C8.32728 9.42393 8.5341 9.54396 8.74709 9.65987L9.33547 10.0008C9.98151 10.3968 10.6078 10.7475 11.1962 11.0199C11.7861 11.29 12.3191 11.4727 12.8216 11.5659C13.3241 11.6604 13.8348 11.6592 14.4629 11.515C15.086 11.3741 15.7871 11.0702 16.5199 10.6804C17.2571 10.2903 18.0132 9.81197 18.8757 9.3445C18.7893 10.3215 18.5127 11.2376 18.0808 12.1222C17.6384 12.9963 17.0229 13.8488 16.1257 14.5393C15.2454 15.2354 14.0366 15.7205 12.806 15.7934C11.5748 15.8767 10.4037 15.6054 9.40725 15.1974C8.40701 14.7835 7.54268 14.2395 6.77661 13.6391C6.56509 13.4732 6.45153 13.379 6.29532 13.2469L5.85903 12.8648C5.56514 12.6347 5.28036 12.3596 4.98941 12.1317C4.40897 11.6465 3.83471 11.1605 3.20515 10.7393C2.88772 10.5251 2.56028 10.3265 2.18902 10.1506C2.00456 10.0656 1.80863 9.98642 1.59828 9.92405C1.38294 9.85374 1.16406 9.81197 0.905762 9.80314Z" fill="#FF4F0A"/> +<path d="M0.905762 9.8032C1.02667 8.79795 1.49532 7.85508 2.24638 7.05253C2.99363 6.25763 4.16097 5.64483 5.45629 5.56363C6.09556 5.52098 6.74454 5.59217 7.34116 5.7575C7.93513 5.92225 8.49174 6.16231 8.99333 6.44503C9.24398 6.58712 9.47845 6.74245 9.71203 6.89925L10.3345 7.37055L11.3062 8.1372C11.937 8.63939 12.5389 9.10391 13.0952 9.48754C13.6568 9.87175 14.1352 10.1524 14.5921 10.3169C15.0448 10.4963 15.6167 10.5422 16.3728 10.3522C16.7482 10.2657 17.1397 10.1077 17.5575 9.93647C17.9729 9.76113 18.4042 9.55196 18.8757 9.34456C18.819 9.84998 18.7163 10.3533 18.5212 10.8237C18.3339 11.3006 18.087 11.7672 17.7419 12.2023C17.5654 12.4141 17.3763 12.6271 17.1556 12.8236C16.935 13.0155 16.6905 13.1976 16.4204 13.3573C15.8818 13.6694 15.2428 13.8974 14.5873 13.9786C13.9319 14.061 13.2738 14.0198 12.6745 13.8927C12.072 13.7692 11.5231 13.57 11.0191 13.3399C10.0148 12.8728 9.17455 12.2856 8.43172 11.6639C8.05869 11.3536 7.7089 11.0294 7.37764 10.7002L6.98637 10.3074C6.8684 10.1936 6.74925 10.0792 6.63128 9.97442C6.15587 9.55402 5.71459 9.23277 5.22858 9.03242C4.74611 8.82267 4.12861 8.73647 3.37107 8.87827C2.61647 9.0186 1.78862 9.34485 0.905762 9.8032Z" fill="#FAFAFA"/> +<path d="M4.8866 14.9869C4.8866 15.2843 4.64536 15.5256 4.34794 15.5256C4.05051 15.5256 3.80957 15.2843 3.80957 14.9869C3.80957 14.6895 4.05051 14.4482 4.34794 14.4482C4.64536 14.4482 4.8866 14.6895 4.8866 14.9869Z" fill="#FAFAFA"/> +<path d="M4.8866 14.9869C4.8866 15.2843 4.64536 15.5256 4.34794 15.5256C4.05051 15.5256 3.80957 15.2843 3.80957 14.9869C3.80957 14.6895 4.05051 14.4482 4.34794 14.4482C4.64536 14.4482 4.8866 14.6895 4.8866 14.9869Z" fill="#FAFAFA"/> +</svg> diff --git a/src/assets/svg/wallets/argent/argent-button.svg b/src/assets/svg/wallets/argent/argent-button.svg new file mode 100644 index 00000000..8916d826 --- /dev/null +++ b/src/assets/svg/wallets/argent/argent-button.svg @@ -0,0 +1,8 @@ +<svg width="112" height="112" viewBox="0 0 112 112" fill="none" xmlns="http://www.w3.org/2000/svg"> + <path + d="M66.6794 19H45.3205C44.6067 19 44.0349 19.6092 44.0193 20.3665C43.5878 41.6523 33.0936 61.855 15.0309 76.1647C14.4574 76.6188 14.3268 77.4723 14.746 78.087L27.2428 96.4236C27.6679 97.0477 28.4963 97.1885 29.0794 96.7301C40.3735 87.8411 49.4579 77.1179 55.9999 65.2324C62.542 77.1179 71.6269 87.8411 82.921 96.7301C83.5036 97.1885 84.3319 97.0477 84.7576 96.4236L97.2544 78.087C97.6731 77.4723 97.5424 76.6188 96.9695 76.1647C78.9063 61.855 68.4121 41.6523 67.981 20.3665C67.9655 19.6092 67.3931 19 66.6794 19Z" + fill="white" /> + <path + d="M96.6027 32.2766L94.327 25.2459C93.8641 23.8185 92.7367 22.7067 91.3015 22.2671L84.2367 20.0951C83.2618 19.7951 83.2515 18.4169 84.2237 18.104L91.2524 15.8286C92.6798 15.3657 93.7944 14.2358 94.234 12.8032L96.4035 5.73892C96.7035 4.7615 98.0819 4.75114 98.3973 5.72343L100.673 12.7541C101.136 14.1814 102.263 15.2933 103.698 15.7355L110.763 17.9049C111.738 18.2049 111.749 19.5831 110.776 19.8986L103.748 22.174C102.32 22.6343 101.206 23.7643 100.766 25.1994L98.5964 32.2611C98.2965 33.2385 96.9182 33.2488 96.6027 32.2766Z" + fill="white" /> +</svg> \ No newline at end of file diff --git a/src/assets/svg/wallets/metamask/metamask-button.svg b/src/assets/svg/wallets/metamask/metamask-button.svg new file mode 100644 index 00000000..87029079 --- /dev/null +++ b/src/assets/svg/wallets/metamask/metamask-button.svg @@ -0,0 +1,9 @@ +<svg width="135" height="135" viewBox="0 0 135 135" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<rect width="135" height="135" fill="url(#pattern0)"/> +<defs> +<pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1"> +<use xlink:href="#image0_16_80" transform="scale(0.000520833)"/> +</pattern> +<image id="image0_16_80" width="1920" height="1920" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAB4AAAAeACAYAAAAvokrGAAAgAElEQVR4AezdCZRcd30n+jZm3zHqW111y0JDYJKYc5LJeN7h8ehqy7YwGGwMfshDzEPsMtgIbV23WsLgDhgwgUBMIIMI8F488CbxQCYZM2GCA85iICEi2LyRg/Ei1dKysdnDZrD5v1OSWm61utXV3bXdez8+x6e7a7n3fz/1r3v/+n/r/6uREf8RIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBE4o8F9eVTr1hA9wJwECBAgQIECAAAECBAgQIECAAAECBAj0RODPXl6I9pxfenRPNm6jBAgQIECAQL4EPnlR4U1XPmfsvqQShbedXbj/v7608FetWvyb+VJwtAQIECBAgAABAgQIECBAgAABAgQIEOivQH1q7ZNuvGTsre97fuH7tYko7D4jCh++YOxLN6wfeWh/W2JvBAgQIECAQGYE/t/fLv/G5eujX7bD37n/f+zCsXDnjvjrrSTedvdkIcrMATsQAgQIECBAgAABAgQIECBAgAABAgQIDFAgbBw5uVktP7+RxH/6168u/fzy9cfOzbbnaf/owuKfDbCJdk2AAAECBAikWWDPCwvXzg1+5/7+rnMK4WuXlUIriX/eSuK/aCblC/dNn/bwNB+vthMgQIAAAQIECBAgQIAAAQIECBAgQGAQAvXa2mc0quX3NJL44J2Tcfjjl4wdsyhn7tzs288u/HQQbbRPAgQIECBAIAMCV5wV3TF3YDH/911nROGzm4rtEHj2/2/P1EofaCSn/ocMHL5DIECAAAECBAgQIECAAAECBAgQIECAQM8EWrviJzeT0hsbSemfGkkc2v/fvCUO735uYdHwd3aOdmpi9Ld61jAbJkCAAAECBLIpMLV+bF1SOb788+wAY+7PPRcUwh07Dq0Gng2C2z//v5laafLA7qcUsynkqAgQIECAAAECBAgQIECAAAECBAgQILA8gTA98tB6rXR+vRZ/qpHEP5sNfts/P/fKYnjzAiWf587FPvh74Z3L27NHEyBAgAABArkXSCpR9cHBxPHfMzH/vndsiMI/X3pcCNwOgu9vJfH/aNXii/ZPr3tk7mEBECBAgAABAgQIECBAgAABAgQIECCQO4HmZPk3GrX4fY0kvntu6Nv+/Y6dcfjYhYuXfJ4/F3vk79tzh+iACRAgQIAAgdUJVCujX1lkYLFo+ZGpiSh8+uKx0KweLQk9d0Vw+/fvt5L4mpnJ0oYwMnLS6lro2QQIECBAgAABAgQIECBAgAABAgQIEBhegfrU2ifVq/HmRhLfOD/0nf37pnbJ53OWLvm80Fzt1Pia04f36LWMAAECBAgQGCqB5ZR/Xmjg8Z8uKITbdywaAs+Gwt9oJuXpu6bG1g3VwWsMAQIECBAgQIAAAQIECBAgQIAAAQIEVigQNo6cXJ8sbWjW4msbSXzfbNC70M+/fEUx7Dpj6eqLC83BHrptonDVCpvpaQQIECBAgEDeBJZb/nmhAcjbzi6Ef3zDgiWhZwPg2Z8PtJL4xmY13nz3ZOExebN2vAQIECBAgAABAgQIECBAgAABAgQIpF+gXlv7jGZSuqqexN9aKOyde9vtO+Pw0RevbNXvvLnYOwxH0iwAACAASURBVEdUWkx/53EEBAgQIECgHwIrKf88b+BxqEx0ByWhZ0PgQz+btfIPlIjuxytsHwQIECBAgAABAgQIECBAgAABAgQIrFagub18ypESz1+dG/Ce6PevXloK73hOV8Lfw1/V9+w1/2G1x+H5BAgQIECAQMYFdkyccmpSiX65UKC70ts+cF4hfHNbR6uB5wbC9Zn2J+am1j414+QOjwABAgQIECBAgAABAgQIECBAgACBlAjsmz7t4fVa6fwjJZ5/fqKwd/59n31FMUytpuRz5fhy0dVK9O6U0GkmAQIECBAgMCiB2kQ0udKg90TPmz4rCl/aXJwb8Hb6+9ES0fdMjz52UC72S4AAAQIECBAgQIAAAQIECBAgQIBAfgVmSzw3kvie+cHuUn/fvrMUPvKiscMrdhcIcU80r9rBffuVgc5vv3TkBAgQIECgI4GkEv1jB4OKFQ1WapUofPKiYmhUl70aeDYs/mEriT/eqJ06EXy3RUevpwcRIECAAAECBAgQIECAAAECBAgQILAygQO7n1KsV8tbm0n8z0uFvIvdv/fSUrhyw/Erd7s5Bzt1xtj/trIj9CwCBAgQIEAg8wK9KP+80EDm6heMhW8svyT0bAg8+7PRLhHdnCo/LfMvjAMkQIAAAQIECBAgQIAAAQIECBAgQKAvArdtedoj6tV4YzOJP9NI4vsXC3aXur2exOG6TcUwNdHF7/tdfPXw7/YFx04IECBAgACB9AkkE9HOhQLbXtx2xZlRuHFlJaFnA+CjP5vVeG+zGm++N1nzuPSpazEBAgQIECBAgAABAgQIECBAgAABAoMWqE8VT28mpasbSXzvUuHuUvffuiMOf3h+z0o+L1CdcbShDPSge5D9EyBAgACBIRWoVaJ/6EXYu9g2j5aEnoyPhrmtZFW//7RVi6+dqZXODxtHTh5SZs0iQIAAAQIECBAgQIAAAQIECBAgQGAIBBrJqaV2iedGEt+0VKjb6f1ffn0x/M7ZfVn1e0wQPDleeOYQkGoCAQIECBAgMEwC/Sr/vFAY/N5zC+GWN634e4EXDo9rcetQiehq+enD5KwtBAgQIECAAAECBAgQIECAAAECBAgMTuBQieda6fxmLb62kcS/6DTYXepx7ZLPf/6ysTC1eJnmYwLbheZJV3XbePTewanaMwECBAgQIDCUAj0r/zwedTSwuXx9IdzwmuLCYe7qVgWHwyWiy1tbu+InDyW+RhEgQIAAAQIECBAgQIAAAQIECBAg0FOBOSWev71UmLvc+7+xPQ4fPK//q36PDYyVge5pB7JxAgQIECCQRoF+l38+dnDyYEh8zUvGQr26qjLQJwqRHywRPT3y0DS+TtpMgAABAgQIECBAgAABAgQIECBAgEBnAs3t5fhIieeblxvqdvr4L11SCtNnDTr8PTK/+uzC/96ZjEcRIECAAAECmRcYZPnnhYLg9z6vEPZ1uyT08auIZ2aS0tWtWvybmX+BHSABAgQIECBAgAABAgQIECBAgACBnAjsn173yHo13thM4uu6WeJ5fiB8oBqHT108FmoTDy5uWWius8+3/V5OXmaHSYAAAQIECCwlUBuPdvR5ILJkWejL10fhC6/uTUno1rwweLZE9MGdpTVLWbmfAAECBAgQIECAAAECBAgQIECAAIHhE5hT4vk788Pabv+9b1spvP8FQ7Lq99jvHG6OjIycNHyvjhYRIECAAAECfRdIJqIvD1sAPNuej184Fg7s7FlJ6Pnlon/WSuLrWtV4497Npz+s7y+EHRIgQIAAAQIECBAgQIAAAQIECBAg0LFAK4nL9aRcayTxN7sd8i62vb99XSm89cyhWvV7zGKbyTOiZ3UM6IEECBAgQIBANgWS9aeUk0r0y9nAdRh/XnVOFG7eUpof1vb674PtEtEzU6XfyuYr76gIECBAgAABAgQIECBAgAABAgQIpE9gXonn+xcLaju6vRqHjh6XxKFd8vlPXloMtWNX3B4Tvg7D3GqtEr0vfa+qFhMgQIAAAQJdFahWCtuHYWCyVBt2nxGFz2zqT0no40pE18r7mkm5dvdkIeoqvo0RIECAAAECBAgQIECAAAECBAgQINCRwOESz/GeehL/sNPQtluP27c1Du8/dyhLPi8UQDenR0Ye0hGqBxEgQIAAAQLZFEgq0ZeWCl+H6f52Sej9Ky0JXV11Ken7lIjO5vvAUREgQIAAAQIECBAgQIAAAQIECAyfwMyO0qlHSjzf1q0wd7nbueG1xfCWM4cx/B1dKPw9dFu1Ej17+F5NLSJAgAABAgT6IpCG8s8Lhc/vOqcQbrqs7yWh55ec/m4rifccrJXG+/Ji2QkBAgQIECBAgAABAgQIECBAgACBHAg0t5cfVa/GGxu1+PpGEv9yuYHtMY9fRonnY56XxGH/ZBw+cVFx0ZB1oXnLYbmtNj76+znoKg6RAAECBAgQWEggLeWfFxo47RpgSejFSkR/a3dUWMjZbQQIECBAgAABAgQIECBAgAABAgQILC4QpkceUq+VxptJvKeRxP86P4zt9983bymF9zyvg1W/49GwBsQHlYFevL+5hwABAgQIZFpgmMs/VyudDZ72XDAW7tjRpdXAqy8RfX+rFl/fqsab2p9UzHTncXAECBAgQIAAAQIECBAgQIAAAQIEVilwsFZae6TE8x39DnkX29/1ryqGN6/vbG5yoYUr/b1t8TLQtWePqly4yv7p6QQIECBAIHUCaS3/vNAA6soNUdj7hi6FwMmqvyd4tlT095SITt3bQoMJECBAgAABAgQIECBAgAABAgR6LHDbllMeX6/GmwZd4nl+AHxniks+LzRnmkwUru7xS2nzBAgQIECAwLAJJJXCtgUHBh2uvB22505NROEvXjYWmt0LcGeD3G78vKWZlKcP7iw+Zdj6gfYQIECAAAECBAgQIECAAAECBAgQ6LXAsJV4nh/+3rwlDu9+bgcln9M1d3rXxo0jJ/f6tbV9AgQIECBAYIgEkkr0xWELcU/Unk5LQn/4hYVw+46ureLtRvg7dxsPzJaIPjhdevQQdQdNIUCAAAECBAgQIECAAAECBAgQINB1gdau+N/Wk/J0IynfOT90HZa/P/fKYtidmpLPC5WmXrwMdPWM0UrXX1QbJECAAAECBIZTYPuznhwnleiBEwWuab7v7WdH4SuvH7qS0HOD4Pbv328l8TUzk6UNYWTkpOHsKVpFgAABAgQIECBAgAABAgQIECBAYHkCd9Se+oSulXhO4tCroPj2nXH46IvHQprnQZdqe61S+MDyXj2PJkCAAAECBFIrUJ0obF1qcJD2+9sloT998VhoVod2NfDcQPgb7RLRd02NrUttp9JwAgQIECBAgAABAgQIECBAgACB3AocKvE8WdrQTOJrGkn8o9WGtvUeBr/ttn31slJ4x3MyV/J5oTBbGejcvisdOAECBAjkTiCpRDemPeDttP1/cF4hfHP70K8Gng2DH2gl8Y3Narz57snCY3LXMR0wAQIECBAgQIAAAQIECBAgQIBAqgT27yr92uESz/H+1Ya+/Xr+ZzcVw66JhUopZ/O2amXNGanqVBpLgAABAgQILF9gd2VNMcvlnxcKhqfPisIXL0lNCHwoDG7Wyj9QInr5/dszCBAgQIAAAQIECBAgQIAAAQIEeiuwf9u6J6ahxPP8QPn2naXwkRdlu+TzQnOj1fHog73tEbZOgAABAgQIDFxg0fLP49n8hNvsoKdWicKfvrR46DtDWkkqykLPrgpu/6zPJKWr6lNrnzrwDqQBBAgQIECAAAECBAgQIECAAAECuROYV+L5x/PD1WH/e++lpXBlPko+H18Gejy6e+PGkZNz12kdMAECBAgQyJNAnso/z4a/c39efV4h3LotXauB5wTWR0tE3zM9+tg89VvHSoAAAQIECBAgQIAAAQIECBAg0H+BA0nx14+UeK4Pe8i7UPva3yV83aZimDoj24tf5s5/LvT71PjY+v73HnskQIAAAQIE+iKQx/LPCw14rmiXhH5dce4K2zT+/pNWLb52ZrK0IYyMnNSXDmQnBAgQIECAAAECBAgQIECAAAECmRc4UuJ5cyOJb1woVE3LbbfuiMOHXpi/ks8LzYcmE9GHMt9xHSABAgQIEMirQDI++qYFBwAZL/+80DG3S0J/8qJiaFRTuxp4bmjdaJeIbk6Vn5bXvu24CRAgQIAAAQIECBAgQIAAAQIEVi4QNo6cXJ8sbWgm8TWNJP5JWkLexdr5D68vhredXTi+HHIltyuB75leP/LQlfcQzyRAgAABAgSGViCpRH+/UBia2ds6CLZ/79xC2Lc1dd8JPDf8Peb3ZjXe26zGm+9N1jxuaDuihhEgQIAAAQIECBAgQIAAAQIECAyFQH3n2GnNpHRVI4nvXixMTdPtR0s+Twh/j5vzPWPszKHodBpBgAABAgQIdE+gun50LKlEDxx34c/vp96OfgLw8vWFcMNrUl8S+pgguJXEPz1UIrpWOr/9Cc7u9SRbIkCAAAECBAgQIECAAAECBAgQSLNAfWrtk+rVOPUlnucH09/YHocPnq/k82Lzv9VK9Idp7rfaToAAAQIECCwgUK2Mblns4u/2KBwtCT2ZndXAreTIsdTi1qES0dXy0xfoGm4iQIAAAQIECBAgQIAAAQIECBDIuMDREs+1+NpGEt83PzxN+99fvqQUppV8PrrgZZH5XmWgM/4+d3gECBAgkEOBZDz6u0Uu/EsNDHJ1/3vbJaHflInvBZ6/IvjQ34dLRJe3tnbFT87h28AhEyBAgAABAgQIECBAgAABAgRyJVCvrX1Gu8RzPYm/lfaQd6H2H6jG4VMXj4XaRG6/23eZc7eFs3P1BnCwBAgQIEAgywJHyj/fLwDubCD4lvVR+PyrsxsCH1kZ/GCJ6OmRh2a5/zs2AgQIECBAgAABAgQIECBAgECeBJrby6ccKfH81YVC06zctm9bKfz+833X73LmfKvj0Yfz9F5wrAQIECBAINMCyj93FvzOHyx9/MKxcGBnBktCz5aGfvDnzExSurpVi38z028EB0eAAAECBAgQIECAAAECBAgQyKjAvunTHl6vlc5vHi7x/POshLyLHcffvbYU3nrmyub85s8B5uzve6fXWwyS0dOAwyJAgACBvAko/7zyweC7z4nCzVsyvxr4aLno2RLRB3eW1uTtfeJ4CRAgQIAAAQIECBAgQIAAAQJpE5gt8dxI4nsWC0uzdLuSzyuf55wNuifHCxvS1s+1lwABAgQIEJgnoPzz6gdFu8+Iwl+9ong0JD1SQjnrf/+slcTXtarxxr2bT3/YvG7lTwIECBAgQIAAAQIECBAgQIAAgQEJHNj9lGK9Wt5aT+KvZSncXepY9m2Nw/vPVfJ5Nshd8c+JaM+Auq7dEiBAgAABAt0SSCqjb1zxYKCy+vA0S/tul4Ten4+S0PPD7YPtEtEzU6Xf6la/tB0CBAgQIECAAAECBAgQIECAAIHOBW7b8rRH5KnE8/ww+G9eWwpvOVP426W5VmWgO3/reSQBAgQIEBhOgaQS/W2XBgbBdqLwrnMK4aY35qck9PzVzs1aeV8zKdfunixEw9njtYoAAQIECBAgQIAAAQIECBAgkB2B+lTx9GZSurqRxPfOD0Xz8Pf+ahw+cVHRvORKFuqML764pzoRnZOdd4kjIUCAAAECORNQ/nnxQc5qwuxdZ0ThM5tyVxJ6/qrg+5SIztkJxeESIECAAAECBAgQIECAAAECfRFoJKeW2iWeG0l8Ux5C3sWO8etbSuE9z7PqdzXzmIs/d/SP+tKZ7YQAAQIECBDovkBtYvSyxS/yvQlHs7C/aoefqNtzwVi4Y2d+VwPPWR383VYS7zk4VTy9+73YFgkQIECAAAECBAgQIECAAAEC2Rc4VOK5Gm9sJvF1jST+xWKhaF5uv+E1xXD5euFv7+ZaC9+dPu20h2f/neUICRAgQIBABgWSSuFvejdIECC3ba/cEIW9bxACz4bBsyWiv7U7KmTwLeWQCBAgQIAAAQIECBAgQIAAAQJdFZhT4vnbeQl3T3Sc+yeVfO7XfG6tEj23q53ZxggQIECAAIHeC+x+ZlRIKtH9/Row5Hk/uyYOl4RuJvH8Msnp/bu66mO5v1WLr29V4437pn2asPfveHsgQIAAAQIECBAgQIAAAQIE0iLQ3F6Oj5R4/vqJwtC83dcu+fzu53ay6nfUdwJ3WMHwhHO246MfTct7RjsJECBAgACBIwLKP3dvhXKnJaE/fEEh3L5j1cFpekPjxQPw7x0qEV0rjXuDEiBAgAABAgQIECBAgAABAgTyKLB/et0j60o8h8VC7c+9shjefEb35vNOGHx2IzzNxDaUgc7jucgxEyBAgEDKBZR/HsyA8e1nR+ErSkKfKMS+pZmUpw/WSmtT/hbTfAIECBAgQIAAAQIECBAgQIDAkgJzSjx/Z7HwM8+3374zDh978ZgVvQMKlKvjo89bshN7AAECBAgQIDAcAso/Dyb8nf1k4dREFD598Vhorr6M8omC1LTf98CREtGbDk6XHj0c7xytIECAAAECBAgQIECAAAECBAisXqCVxOV6Uq41kvibeQ53lzr2f76sFN75nE5KPg92rm92zi+LP2sThY+tvsfbAgECBAgQINAXgWQ8ujSLA5K0HdMHzyuEb24vpT2o7Uf7v99K4mtmJksbwsjISX15k9gJAQIECBAgQIAAAQIECBAgQKCLAvNKPN+/VPh5wvur8aKlkk/4vCQ9z2uXfN6t5PMwrHz+3vRppz28i28FmyJAgAABAgR6JVCtjN6QtrA0q+2dPisKX7pECNxa/PuB5wfM32iXiL5ramxdr94ftkuAAAECBAgQIECAAAECBAgQ6JbA4RLP8Z56Ev8wK+FsL4+jXfL5j15k1e8wzYVWJ0af3633g+0QIECAAAECPRJQ/nn4SsJMVQ6XhG4PnpcRhOb9sQ+0kvjGZjXefPdk4TE9ervYLAECBAgQIECAAAECBAgQIEBg2QIzO0qnHinxfHsvw9KsbXvvpcXwDiWfh2HV7zFtqFWi/3vZbwJPIECAAAECBPorUKtEbximT5Bpy4OB9NXnFcKt26wGXm4I3qyVf6BEdH/PI/ZGgAABAgQIECBAgAABAgQIHCvQ3F5+VL0ab2zU4usbSfzLVYWzOSjxPNennsThupcXw5SSz8cEr0M0b6oM9LFvd38RIECAAIHhE0jGR78wRIOHYR3UDKxdV5wVhS9uLuZ9de9qjr8+k5Suqk+tferwvfu0iAABAgQIECBAgAABAgQIEMiSQJgeeUi9VhpvJvGeRhL/69xQ0++dfd/wN3fE4UMvHBvYXJx50gcXp5zIolZZ84IsvXcdCwECBAgQyJTArsrYaFKJfnGii7n7Ohv09NKpVonCJy8qhkbVauDlrgae8/ijJaLvmR59bKbeyA6GAAECBAgQIECAAAECBAgQGKjAwVpp7ZESz3cIejsLehdy+sqlpfD2DYOfi+vlPF+Gtv3/DPRNZ+cECBAgQIDA4gLKP6drQPl75xbCvq2+F3hOqLvSlcE/adXia2cmSxvCyMhJi79D3EOAAAECBAgQIECAAAECBAgQWFjgti2nPL5ejTd1pcRzsvLQdKEgNW23HSr5vKkYpiYKVv5WUjNf+b0t5z7tEQu/O9xKgAABAgQIDFRA+edhGlCNdjTAfeuZUfj711kJ3IUQeDY8brRLRDeqp/7KQN+Mdk6AAAECBAgQIECAAAECBAgMvcC8Es8/SlvQOoztvXV7HD50vpLPaVwZXB0vnDf0b1oNJECAAAECeRNQ/nmYwt/lteVoSehJq4G7GASHZjXe26zGm+9N1jwub+cDx0uAAAECBAgQIECAAAECBAgsLjCTlH61npSnG0n5zmEMUdPapi+9vhSmz7bqN43hb7vN1Ynojxd/17iHAAECBAgQGIhAUolen9bBhXYfDozfe+5Y2Pcmq4G7GQIf2dZPD5WIrpXODxtHTh7IG9ROCRAgQIAAAQIECBAgQIAAgYEK3FF76hOUeO5NaeoDSRw+dfFYmEpPueOOKvflbc6yVol+ML1+3SMH+ka1cwIECBAgQOBYgWol+nzeBiVZPN63rI/CF14tBO5BCHy4RHQtbrVLRDer5acf+w7yFwECBAgQIECAAAECBAgQIJA1gUMlnidLG5pJfE0jiVdd4rn93bZpXZ3bq3bfsq0Ufv8FSj5nZp5yovDCrJ0HHA8BAgQIEEitwM71pTVJJfpFZgYaPi0YPn7hWDiwU0nongXBSXykRHR5a2tX/OTUvvk1nAABAgQIECBAgAABAgQIEDhOYP+u0q8dLvEc7+9V8Gm7cfjiJaVwxVnL+yo085fD7VWtRP/5uDeUGwgQIECAAIHBCNQmoksMnoZ78LSS1+eq5xbC199oNXAvQ+DjSkRPjzx0MO9ieyVAgAABAgQIECBAgAABAgRWI7B/27on1qvx5kYS39hI4l8KaHu3WvlA9XDJ59pE9ubjVjKHl7Hn/FAZ6NWciTyXAAECBAh0USCpRH+dsYGG7+E4sgr6zeuj8PlXFQ+XL06sCO5DGDwzk5SubtXi3+ziW9SmCBAgQIAAAQIECBAgQIAAgR4IzCvx/GOhb+9C31nbfVvj8L7nF8zdZbiCYa1SuKAHb1ebJECAAAECBJYjoPxzPj5p2C4JvX9SANyHAPho2N6sxnub1fLWgztLa5bznvRYAgQIECBAgAABAgQIECBAoLcCB5LirzeT0lWNpHTXbDDpZ+/D3799bSm89cx8zMXlfLHNJ3r7DrZ1AgQIECBAYEkB5Z/zM+h81zmFcJOS0EcD2j6GwT9rJfF1rWq8ce/m0x+25JvSAwgQIECAAAECBAgQIECAAIGuC8wr8RwEvr0PfGeN91fj8ImLiqGW4VWvOQ9856/o/uH2Z5Uf1fU3sQ0SIECAAAECnQso/5yfALg9EN11RhQ+s0lJ6D6Gv/MD54PtEtEzU6Xf6vxd6pEECBAgQIAAAQIECBAgQIDASgTCxpGT65OlDc0kvqaRxD+ZDST97F/4e6jk87lKPucwIH7RSt6znkOAAAECBAh0QUD553yFv3MHmh+5YCzcsbM0P5z0dx+/J7lZK+9rJuXa3ZOFqAtvZ5sgQIAAAQIECBAgQIAAAQIEjgjUd46ddrjEc3y3sLd/Ye986y+8thjesl74O3dOLi+/V8ejTzohESBAgAABAgMSqI5Hm/My6HCcx4fd7zynEL52mRB4gKuBZwP3+5SIHtBJ0G4JECBAgAABAgQIECBAIDMC9am1T6pX482NJL5xfhDp7/6GwPsnD5d8Nh93/Hxc1kyqi5f1/ldloDNzenUgBAgQIJA2gVoluj5rgw7Hs7yB5a6JwyWhm31c+ToEgets8DqMP7/TSuI9B6eKp6ftfKK9BAgQIECAAAECBAgQIECg3wJHSzzX4msbSXyfoLe/Qe9C3l/fUgq/+1yrfs1RRiGZiC7s9znB/ggQIECAQO4FlH9eXlCa1kHbCT6FF+Ye054LCuGOHVYDD1M4PVsi+lu7o0LuT1gACBAgQIAAAQIECBAgQIDAHIF6be0z2iWe60n8rYVCSLcNJgj+3CuL4c1n5GPObe68mt8Xe81H/8uct61fCRAgQIAAgX4I1CqF1xmcLDY4yeftb98QhX96gxC46yFwNV7tSuP7W7X4+lY13rhv+rSH9+P8YB8ECBAgQIAAAQIECBAgQGDYBJrby6ccKfH8VQHvYALexdzv2BmHj104dsxiA/OO+ZxfnPe6/2jynMJjhu1coj0ECBAgQCDTAsl49Ll5F2SDtMW/syI3NlMTUfj0xWOhufrQcrWhp+cvXJb7u4dKRNdK45k+QTk4AgQIECBAgAABAgQIECAwMjLS/iB0vVY6v3m4xPPPFwsg3T64QPimLXG4Ssnn3MwdLnc+uVqJ/k8nMwIECBAgQKBPArvOjp+cVKJfLPeC7fHp/+RepyWhP3heIXxz26pXrgpxFw5xu+VySzMp1/ZX14316dRhNwQIECBAgAABAgQIECBAoC8CsyWeG0l8j3B3cOHuUvbtks+716d/vsycZy9fw9E/6ctJw04IECBAgACBkRHln3s5qMnOtt92diH8o5LQ3Qpre7mdB46UiN50cLr0aOc4AgQIECBAgAABAgQIECCQRoEDu59SrFfLW+tJ/LWlgkf3DzYUvn1nHP7oxQWrXlUT7KQP/FgZ6DSekbWZAAECBFIpoPxzdkLaXn9CcapyuCR0+x9WXf9uXNvshen3Wkl8zcxkaUMYGTkplScojSZAgAABAgQIECBAgACB3AjctuVpj1DiebBh7nLD9K9eWgrveI7wt9dzctna/uhLcnNSc6AECBAgQGBQAso/C39XMoD8wAvaJaFLvQgsbbNXQXg1/pdmUp6+a2ps3aDON/ZLgAABAgQIECBAgAABAgQWEqhPFU9vJqWrG0l873IDSI8fTGBcT+Jw3cuLYeoMc2srmVvL9XPGC3+60HnAbQQIECBAgEAXBaqVwmtzPeBQmqWT0iwLPuaKs6Lwxc1FgW2vAtvebfeBVhLf2KzGm++eLDymi6cTmyJAgAABAgQIECBAgAABAh0LNJJTS+0Sz40kvkmIO5gQd6Xut+8shT0vGltwvsg8o0C8gz6gDHTHZ0oPJECAAAECKxSoVaK/6uCibEAnKF6wD9QqUfjkRcXQqFoNnNKS2N9XInqFJ09PI0CAAAECBAgQIECAAIFlCxwq8VyNNzaT+LpGEv9ipQGk5w0uMP6nS0vhyg1CTvOpq+sDtYnRi5Z9AvEEAgQIECBAoDOBqfEnPCmpRPcZsKxuwMIvCu87txBu2ep7gVMaAs+u4q7PJKWr6lNrn9rZGcSjCBAgQIAAAQIECBAgQIBAZwJzSjx/W3g7uPB2NfZHSz5P+L5fc4FdmUv9r52dPTyKAAECBAgQWLZAMlF4jQFLVwYsX8rPJwAAIABJREFUC66OzY7taEfHd8WZUbjxdUpCpzwEbofBR0tE3zM9+thln1g8gQABAgQIECBAgAABAgQIjIyMNLeX43pSrjWS+NbVBI+eO/jA+NbtcfjQC5V8zs5c31DMh/54er15JxcLAgQIECDQE4GkEv1PA5ehGPB0FLCm4bU6WhJ60mrgDATB7TD4J61afO3MZGlDGBk5qScnIhslQIAAAQIECBAgQIAAgcwI7J9e98i6Es8hS6H1ly8phd8526rfNMzLpa2N1YnCf8zMyc+BECBAgACBYRFQ/lnw28tB4XvPHQu3vMn3AmckBJ4tEd1ol4huVE/9lWE5j2kHAQIECBAgQIAAAQIECAyHwOESz/GeRq38gyyFn3k+lgNJHD518ViYqphD6+UcWp63XatEnxqOM5hWECBAgACBDAlUx0dfnecBhmNfxeB9vLPnvmV9FL7wGiFwxkLgQ2FwsxrvbVbjzfcmax6XodOiQyFAgAABAgQIECBAgACBZQi0krh8pMTzbXkOSrN47Ldui8MfnGfVr/nDzuYAV+H00y3PPOXxyzjteCgBAgQIECCwlEBSiT670MW56lN9mSnHvNDrO4jbPn7hWDigJPTsKtqs/fzpoRLRtdL5YePIyUudd9xPgAABAgQIECBAgAABAukWmFfi+f5VhZ/VwX+37aran2Sz/V+6pBSmzxL+DmIOLY/7rFUKL033WVHrCRAgQIDAEAko/9zzT68Jked9kOA9zyuE/6UkdNbC32OPpxa32iWim9Xy04fodKcpBAgQIECAAAECBAgQINAFgdkSz/Uk/qHQNJvB74Hq4ZLPtQnzZnkMYgd2zOPRp7twirIJAgQIECBAoC2g/LOB7CAGdZevj8LnX108NjRMYn9n0OBwiejy1tau+MnOugQIECBAgAABAgQIECCQToGZHaVTj5R4vl3om83Qd/Z13betFN7/fKt+BzFfZp+RMtDpvERoNQECBAgMo4DyzwLgQQ4u2yWh9ysJnZfg+8ES0dMjDx3G86E2ESBAgAABAgQIECBAgMCDAs3t5UfVq/HGRi2+vpHEv5wNCFf0U4nnsCK3PpeW/tvXlcJbzzRXNsi5srzvuzZRuPjBs5DfCBAgQIAAgRUJbFv/xCcmlei+vA8sHP9gB/ZXnROFm99YyksI6jgPr3KemUlKVzcny7+xopOXJxEgQIAAAQIECBAgQIBATwTC9MhD6rXSeDOJ9zSS+F/TEFpq4+pXJB+olsKfvLQYavO+xsuc2WDnzHLq/996cnKzUQIECBAgkCeBZHz0VTkdSPhe3iEb0O8+Iwqf2aQkdCuDJaCXOqbZEtEHd5bW5On861gJECBAgAABAgQIECAwTAIHa6W1R0o83yFQXX2gmibD/7U1Du9T8tlc4fDMFf5syzNPefwwnR+1hQABAgQIpE4gmYj+UgDsk3zD1Ac+8qKxcOdOq4GXCk0zev/PWkl8Xasab9y7+fSHpe6EqsEECBAgQIAAAQIECBBImcBtW055fL0ab+pKiec+lypOU8A6zG294bXF8Jb1vu93mObGtCUKyUT0spSdTjWXAAECBAgMj4Dyz4LfYR1QvvOcQvjaZULgjIa8nZbAPtguEd2qxv9ueM6aWkKAAAECBAgQIECAAIH0C8wr8fyjYQ4nta13K5H3T8bhExcVrXodnlWvXos5r0W1Ev15+s+2joAAAQIECAxIoFoZfeWwBoDaJZzeNaEkdM4D4KNBcbNW3tdMyrW7do2NDuh0abcECBAgQIAAAQIECBBIvcBMUvrVelKebiTlOwWrvQtW02B785ZS+N3nWfVr/nGo5x9/VtvwpCek/sTrAAgQIECAwCAEkkrhfxjoDPVAJ9Of/KvO+VTfifrhngvGwh07rAYWBsftQPg+JaIHcbWwTwIECBAgQIAAAQIE0ipwR+2pT1DiOd9h7/xA+nOvLIY3r+9wPmy8w8d1OMdzovkf97E+rg+MRy9P67lXuwkQIECAwMAElH82qDpuUDXEg/UrN0Thny4VAguBD4XAsyuDv9NK4j0z1eK/H9iJ1I4JECBAgAABAgQIECAwhAKHSjxPljY0k/iaRhKvusRz3Xf7hvkhahr/vnMyDn/8krFMLzZI01yXti49N1udGP3vQ3iK1SQCBAgQIDDcAso/Lz3IMBAbLqOpiSh8+uKx0KweEwLOhoF+Jvl1mS0R/a3dUWG4z7xaR4AAAQIECBAgQIAAgd4J7N9V+rV2iedmEh9IY0Cpzb1bqXzTlji8+xwln831DddcXwevx31T4094Uu/OmrZMgAABAgQyKKD8c+oGPJn/hGanJaH/0wWFcPuO/IadmV4FvPpw//5WLb6+VY037ps+7eEZPHU7JAIECBAgQIAAAQIECBwjsH/buifWq/HmRhLf2EjiXwpRexeiptW2XfJ5d6cln4e4OlwHYWHm587yaFAdjzYdc9LzBwECBAgQILC4gPLPwt+0DxjfdnYhfOX1SkJnOgxe/Yrm77ZLRB+slcYXPxu6hwABAgQIECBAgAABAukTmFfi+cdpDSa1u7dh9e074/DRF1v1m/Y5MO0fvS59Z2ktJkCAAAECAxJIJkZfYfAgBE57H1AS2iroZQTgtzSTcm1/dd3YgE67dkuAAAECBAgQIECAAIFVCxxIir/eTEpXNZLSXcLT3oanaff96mWl8I7nCH/TPvel/Yfmb3+uDPSqLx82QIAAAQJ5EUgqhc8YQAiAs9IHPnBeIXxzm9XAywhD8/x9yQ8cKRG96eB06dF5Oec7TgIECBAgQIAAAQIE0iswr8RzSHswqf29D64/+4pi2DVh3isr816OIwrtxUzpPYtrOQECBAgQ6JPAkfLPPzN4MBDOUh+YPisKX9pczHOw6diXXzL6e7MlosPIyEl9OgXbDQECBAgQIECAAAECBJYUCBtHTq5PljY0a/G1jSS+T2ja+9A0C8a37yyFj7xozPfg+h7jDPaBwmeWPHF6AAECBAgQyLtAdTzalKXgz7EIsmf7QK0ShU9eVAyNqtXAVgMvszx2Nf6XZlKevmtqbF3erxGOnwABAgQIECBAgACBwQnUa2ufcbjEc3x3FgJJx9C/4HrvpaVw5QZzRLNzRH5mri/8fPuzyqcM7uxszwQIECBAIAUCSWX0OoOgzA2CMvjJvpW/Rle/YCx8Q0loK4KXvyK4bfZAK4lvbFbjzXdPFh6TglO6JhIgQIAAAQIECBAgkHKB+tTaJ9Wr8eZGEt8oMO1fYJoV63oSh+teXgxTE77v13znyufSUmE3PvqqlJ/uNZ8AAQIECPROQPnnjA+ElLg5GoRfcWYUblQSWgi8shB41u37rSS+ZmaytEGJ6N5dl2yZAAECBAgQIECAQB4FlHgW9HYjgL51Rxz+8Hwln1MRXpqzOzpnt+LXayL6yzxeLxwzAQIECBDoSED5ZwHwigdZKRyoHi0JPbnMcsCrCw1nw0M/s+VYn0lKV9Wn1j61o5OtBxEgQIAAAQIECBAgQGABgdkSz/Uk/lY3AkDbyG+Q/OXXF8PvnG3Vb57muRxrpAz0AtcVNxEgQIAAgUMCyj8LgDM3WBxf+jV977mFcMubfC+w7wXuygcBjpaIvmd69LEuLQQIECBAgAABAgQIEFhKoLm9fMqREs9fFdjmN7Dt1mvfLvn85xePhakUflA/c3NSXoPVr+pdpmF1fPTVS51z3U+AAAECBHInsOWZpzw+qUQ/NdhaOjBklD2jy9cXwg2vKVqVm61VuYN+PX/SqsXXKhGdu8upAyZAgAABAgQIECCwpMBtW572iHqtdH6zFl/bSOKfdyv8s518B8jf2B6HD55n1a95u+zN281/TauLB8OfXfIE7AEECBAgQCBvAsl49PL5F1N/Z3/A5DU+9jW+5iVjoV7tykrQQYeP9j9cYXajXSK6UT31V/J2bXG8BAgQIECAAAECBAg8KDBb4rmRxPcIa/Md1nb79f/yJaUwreRz31ecmlc7dl5tCDx+vuvs+MkPnnX9RoAAAQIECIxUJ0b/+xBcpA3UFv8EG5s+2bz3eYWwT0loAXKPAuRmNd7brMab703WPM6lhwABAgQIECBAgACB7Asc2P2UYr1a3lpP4q91O/SzPSHygWocPnXxWKhNDF0QZx6rT/NY5nPn9f2Jwmuyf2VxhAQIECBAoEOB5NlrHqf887zBgkFargfql6+Pwudf7XuBfS9wT1eD//RQieha6fywceTkDk/XHkaAAAECBAgQIECAQAoElHgWzPYjnN+3rRTe/wIlnwWg5jTn9YH/mYLLhCYSIECAAIH+CNQq0f8170KZ6/CPhYHjbB/4+IVj4cDOnoaAVtr2aKVtysLrZrtEdLNafnp/zvr2QoAAAQIECBAgQIBALwTqU8XTm0np6kYS39uPANA+8hs0/91rS+GtZ5q/mZ2/8VNfmNMHfrGrMjbai3O8bRIgQIAAgdQJJJXoL+ZcJIW/Vv/qA3P6wFXnROHmLVYDpyxQTW2wfrhEdHlra5fvrEndxVSDCRAgQIAAAQIEcinQSE4ttUs8N5L4JoFsfgPZfr32Sj4LOs3hLt0HapXC63J5QXLQBAgQIEBgroDyz0sPGgysGO0+Iwqf2VRMbagovE3lKu4HS0RPjzx07nnb7wQIECBAgAABAgQIDFZg//S6R9ar8cZmEl/XSOJf9Cv8s598B8z7tsbh/ecq+Wyezjzdkn1gPPrcYK8S9k6AAAECBIZAQPlng6YlB01zVsPm/bHtktD7lYQWhPe/bPXMTFK6ujlZ/o0huGxoAgECBAgQIECAAIHcCswp8fxtYWy+w9h+v/43vLYY3nKm8Dfv81KOv+N53F9M/h+FKLcXKwdOgAABAgTaAso/dzxwUBZZEHyoD7zrnEK46TIloa0qHsyq4tkS0Qd3lta4ihEgQIAAAQIECBAg0HuB5vZyXE/KtUYS39rv0M/+hMz7J+PwiYuK5qTMSekDy+wD1fFoc++vEPZAgAABAgSGVED5Z+GvTw6urA/sUhLaKuD+rwKeb/6zVhJf16rGG/duPv1hQ3qZ0SwCBAgQIECAAAECqRRQ4lnwOgzh+81bSuE9z+tg1e/4yuY2zAlxy3IfqFWi61N5AdJoAgQIECDQDYFkInpZli/0js1AdqV9oNrhpwr3XDAW7thhNbDVwINZDTzH/WC7RHSrGv+7blwbbIMAAQIECBAgQIBAXgUOl3iO99ST+IfDEABqQ36D6OtfVQxvXm9eZ6XzOp6n7ySV6H5loPN6NXfcBAgQIDBSrUR/bkBkQKQPrK4PXLkhCnvfIASeE0bOX6nq7z6uFm7WyvuaSbl2166xUZc5AgQIECBAgAABAgSWFmglcflIiefbBK75DVyH5bW/U8lnpY47XJRgPm/p+bzaRHTJ0lcBjyBAgAABAhkTOFL++ScGC0sPFhgxWqoPTE0Uwl+8bCw0+xj0CVwHvup22IPt+5SIztiF2+EQIECAAAECBAh0TaC5vfyoejXe2KjF1zeS+JerCv+qQtNV+SX8Zv1u3hKHdz+3g5LPlVEhqZBUH+isD/x11y4cNkSAAAECBNIiUJsoXLxUqOV+wac+cLgPdFoS+sMvLITbdwgmhdND1we+00riPTPV4r9PyzVKOwkQIECAAAECBAj0QkCJZ2HrbNg6bD8/98piePMZ5qHMQ+kDXe4D9+9+ZlToxfXENgkQIECAwNAKJJXov3X5guqTZ5198oxTxp3efnYUvqIk9LCvjs1t+2ZLRH9rt38ADe0FWsMIECBAgAABAgS6KjCzo3TqkRLPtw9b6Kc9Aunbd8bhoy8eM1eU8bkic7CDC7ZrlegNXb2o2BgBAgQIEBhmAeWfBzfoMODLh/3URBQ+ffFYaFaHbiVoboPPzK1KXn3fur9Vi69vVeON+6ZPe/gwX7O0jQABAgQIECBAgMByBZR4FqymIVz/6mWl8M7ndFLyOR9zKebMvM496QPjo19Y7jXE4wkQIECAQGoFlH82oOrJgMqnNY/7xO4fnFcI39xeErr6buRh7wPfbZeIPlgrjaf2wqbhBAgQIECAAAECuRcI0yMPqddK480k3tNI4n9NQwCojfkNqtsln3cr+XzcPIr5KnOWPegDD+yurCnm/iIJgAABAgTyIaD8s8FUDwZTBu2LBODTZ0Xhi5cIgTO3Aje7ofYtzaRc219dN5aPK6KjJECAAAECBAgQSLvAwVpp7ZESz3cIVPMbqKbltW+XfP7Ii5R8Ni9lbrKvfWA8ujTt1zrtJ0CAAAECSwpMrx99bFKJftLXi+wiwZg2GOzlpQ/UJqLwpy8thvY/SAWhDPrSB1ZfIvqBIyWiNx2cLj16yYuLBxAgQIAAAQIECBDoo8BtW055fL0ab2rU4usbSfzLtIR/2pnvgHrvpaVwpZLPFhCYJ+17H6hWRm/o4yXKrggQIECAwGAEquOF385L6OY4BczD1geuPq8Qbt1mNXBfAlBhezc/bPC92RLRYWTkpMFcveyVAAECBAgQIEAg7wLzSjz/SJia7zA1Ta9/PYnDdS8vhikln/se/A3bvJD2DGyu8oHk2WtKeb+OOn4CBAgQyLhAbSL6M4ONgQ02DHR9yjFc0S4J/bpiN8M52xL29q8PVON/aSbl6bumxtZl/HLp8AgQIECAAAECBIZEYCYp/Wo9KU83knh/mkI/bRVQt/vArTvi8KEXKvlsLtJc5KD7QG1i9LIhuaxpBgECBAgQ6L6A8s8GW4MebNn/4T5Yq0ThkxcVQ6NqNbDVwKktiX20RPTdk4XHdP+KZYsECBAgQIAAAQJ5Frij9tQnKPEsQE17iP4Pry+Gt51dsBjAYgB9YCj6QOFv8nxddewECBAgkHGBWqXwUgGcEFgf6FMfGF96P793biHs25raALB/q06t8B126++3kviamcnSBiWiMz6QcHgECBAgQIAAgR4KHCrxPFna0EziaxpJ/OPVhn/tsrur3YbnM1xJHzha8nlC+GsOaum5IUZ9M1IGuofXcJsmQIAAgQELJOPRpw0q+jao8Om+ofh03/C/3pevL4QbXqMktJXAmfkgQH0mKV1192Th3wz4kmf3BAgQIECAAAECKRHYv6v0a+0Sz80kPrCSsM1zhLTD1Ae+sT0OHzxfyWfzj8M/H5Xp12iRRRnVyuiWlFwaNZMAAQIECHQuMHlO4TFJJfpRpi/uAkehc0r7wNGS0JOZCQGHfcWq9vV+VfUDrSS+sVmNN98zPfrYzq9WHkmAAAECBAgQIJAHgf3b1j2xXo03N5L4xmEK77RFmLyaPvCl15fCtJLP5qZSOjeViznj8ejv8nCNdYwECBAgkDMB5Z998i4XA7mUD7Lf2y4J/SbfC2w1cOY+CPCTVi2+VononA08HC4BAgQIECBAYJ5A2Dhycr2LJZ5XE9R5rqC3m33gQBKHT/32WKhNmHsy96QPDHkfeGD7s54cz7s8+ZMAAQIECKRbQPlnA7AhH4D5hOiR8Pot66PwhVcLgYXAmQuBZ1ddN9olohvVU38l3VdVrSdAgAABAgQIEOhU4EBS/PVmewyYlO7qZuhmW0LcYegDt2wrhd9/vu/6Nedk3jE1fWB89E2dXr88jgABAgQIDL3A9OmlRyv/bCCWmoFYylfxdsv54xeOhQM7MxsCzoaBfva+FPPQGjer8d52ieh7kzWPG/oLqQYSIECAAAECBAgsS6A+tfZJSjwLaIchoO1lG754SSlccZb5pm7Ng9iOvtSnPvD3y7qgeTABAgQIEBhmgepE4T/26QJqFafwUh/oYh949zlRuHmL1cBWA///7N17mF11nef70mln5ui5Ymrtqr1ij2emp53T85w5ozznnMeh9k5BMICgCNNwHLTRUQwKRshlr12VpJIiqYAXWgUvLYqe031Qu/vg84yNz1y80T0tcFqxNZyJIxjMpXKFQAIhOD06/M6zCYkkpJJdVfuy1vq9/uCB1GXv9Xv/3uH3Xb/P+n136R8E+MXzLaKb1be02gLmeT11bQgggAACCCCAAAIzEzje4rmZ/unOLP2bbgZvXlu43E8HtjfScPdVWj7baxTYFtSB55rnVH9z5tXMdxBAAAEEECgQgWYtubugC7IwsYNhIgeKWZivXpSEf/eu4dye4hTOlj6c7bV7060W0dONhf+wQMusS0UAAQQQQAABBKImsKP5m//4aIvndF8/QznvLRTuhQNbbkjDx7V8tl9nv67QDjTqlRuiXrgNHgEEEECgHAS0fy5m6CesNW8nO9BqCb1tlbBR4ByPA0dbRC+8YXr5wrPKsSIbBQIIIIAAAgggUB4Cx1s8N9IHexG6eQ/hbh4c+PNrqmHiXJ/3e/J+hT/bwyqgA98rz4psJAgggAAC0RJo1gevLOAiXOinyPBW+HbLgVuWVMKPP6gltBA4nhD4hbn+dYvoyYHfiHZBN3AEEEAAAQQQQKDPBE5q8fyf8xDIuQbBcC8c2NZIw11XDturcuqVA+VxQBvoPtcU3h4BBBBAoAMEslry/3QrjPK6gk4O9N6B8UVJ+MbVWkILgaMLgY+1ot69O6veNr1q4T/pwBLpJRBAAAEEEEAAAQTaIHCsxfOOLN3fi7DNewh18+TAQ8uq4WMXOvVr/6f3+z+Yd5d5o1ZZ3sYS6EcQQAABBBDIJwHtn7tbKCjE8O2GA402n6a849Kh8OhKp4EFwdEGweFYi+g9K6sL8rkKuyoEEEAAAQQQQKC4BFofw7GjkS6dztK/zlMY51qEw7104N73Doe1o8Lfbux9eE17ajlw4P7irtKuHAEEEEAgegLaPyumclBMaY/TZqA7l7maOj8JD35ACCwEjjcEfmHu/9OuLL1nVyO94sGlZ78i+sUfAAQQQAABBBBAYI4Efrbst/7Ojmb1LdPN9E93ZqkWz5mwtZdha57ea9sqLZ/nskfhd+xDFsyB51b+s+G/N8cl068hgAACCCDQXwLaPyu8ClZ4CYvnEBaP14+2hJ7Oog8Bj7UI9u+4XdjTahG9q5H+0/6uwN4dAQQQQAABBBAoDoFjLZ53ZuljeQrhXIsAuh8OtFo+f+SCdk79DtrDmMMehn0qe5V5cqA5kqwozmrtShFAAAEEEHiBgPbPCqo8FVSuZe4+ttsS+nOXVsLWFUJgp4E5cMyB6ebCLdPZwube8aFBxQECCCCAAAIIIIDAiQS2r/57wzsaC2/YkaU/6kfI5j2Fu3l04JvvHg5rFs39/t3eB3YcKJgD9eSBE1dHf0IAAQQQQKAABBojg1coOgpWdHhy0tOz83Rg4+IkfF9LaCeA4z4BfKr5/xstogtQuLhEBBBAAAEEEOg6gZNaPP8yjwGcaxIM98OBrSvT8MXLhuxJzHNPwj6kfcgCOvDc2OjQa7u+AHsDBBBAAAEEOkmgWa/8aQEXXcW2YpsD83RgrJ6Er101FKYbToIeOwnq31x4kQNP7MrSO3Y3ht/QyTXXayGAAAIIIIAAAnkmsGNs+OzprHrbzix9vB/hmvcU6ubZgR9/sBo+3FbLZ+GefUYOFNuBU7dtb9aTVXlew10bAggggAACJxDQ/llBVuyCzPx1Yv4+fUklPLK8eqrTkL7mhCwHsjQcaxG9f3VSOWER9QcEEEAAAQQQQKAEBHZmr6m2WjzvzNLNeQ7fXJtwuJ8OtFo+rx61B9GJPQivwaMCO/BXJVj2DQEBBBBAIBYCWW3wdwu86DoBOs8ToOZe0X3MgcnzknD/tULgF53+FHyWMfye/2n3X+1qpt/a1Uiv2DL5O387llrBOBFAAAEEEECgfAS2Tb727+5opFdMZ+k9O7NUi+dMuNrPcDXP791q+fyFt1XsP9l/4gAHnndgbKTy98tXFRgRAggggEApCWQjlT85FgD5tzCQA3E7MFY72hK6dfMtCMWAA2d04MlWi+g9zepIKQsEg0IAAQQQQACBUhJ4UYvnA3kO3VybQDoPDjx43XDY9Cbhr72iuPeKzP9L5r9RygLBoBBAAAEEykXghfbPhy3kL1nIPdXnqb6oHbj94kp4+EangQWgZwxAPSjwwsMSx1pEb2u8dqhclYLRIIAAAggggEAZCEwvX5juyBY2d2bpI3kI1VyDcDfvDuzI0nDP1cNhbJH9InuGHODAiQ40aoPfL0NtYAwIIIAAAiUnoP3ziQu4ggYPDvzagfXnJeG+pcMCPqeh43Kgcy2ir94zWX1lycsIw0MAAQQQQACBHBM4qcXzr/IeuLk+oXBeHHhkRRo++1anfu2P/Hp/BAssTnag8c+Sf5DjEsClIYAAAgggMDCg/bMC5uQCxp858WIHmrUkfPnK4bCz4TSw08BOA8/BgYPHWkSHgYGXqTsQQAABBBBAAIFeEDja4jm9Y0eWPp2XQM11CHeL4sD3r6uGjefbF3jxvoD/5gMHXupAs5ZkvVjTvQcCCCCAAAJzIqD980sXbwUNJhw4tQO/f1ElbLlBADiHADCu07NOS8883430P05nCyf3jg29dk6Ltl9CAAEEEEAAAQROQ2BXli58ocXzz4oStLlOoXCeHHi+5fPvDYexupO/9kVOvS+CCy4nOFCv/OA0y7JvIYAAAggg0F8CjVryz09YuHzma9Sf+cqFmAvZwbbcX3duEv7yfU4CC4E9CDBPB/7Lrmb6rV2N9Op9qyqv6m8l4N0RQAABBBBAoMgEppcv/K92NNIrdjbTb+3M0ufmFaY1hJHz4pfhV2R+Dy9Pw2feMtTWfbG9k5j3Toyd/yc6MDY6+FtFriNcOwIIIIBAiQlktcE/tnCfuHDjgQcHTu/A8ZbQq4SA8wwBZz4p6hRtTGwO7crSP9q9qnq+FtElLrgMDQEEEEAAgQ4SCJMDL9/RrI5MZ1o8FzlwdO35Cczvf381TC526tdeyOn3QvDB51QONOuDYx1c4r0UAggggAACnSEwOfrav5vVkqdPtXj5mqKGAxw4kwO3XjQUtnzIaWAhsAcBOujAw60W0ftWVf7qqo+2AAAgAElEQVTHzqz0XgUBBBBAAAEEykRg94rqa15o8bxVeJif8NBcFHcutmdpuPtfDIUx3fCcfOYAB+buwA/LVGsYCwIIIIBASQhk9eTyMwU8vi8E5AAHTufAxGgSvvteIXAHA8CYTr4a68wnvf/Lriz93nQjXfrY5OB/XZKywzAQQAABBBBAYA4EtHgubrgoGM733P3kxmr45MVaPp/uft/37AdxoD0HtIGeQ4HjVxBAAAEEuksgqw1+1ULe3kKOE04cOL0DX7p8KGxf6SSoIJgDnXZgurnwKS2iu1sPeXUEEEAAAQTyRuDFLZ53ZulhQWK+g0TzU7z5ue/aapg8T8tn+xyn3+fAB5/2HRgcz1st4XoQQAABBCIm0Gr/3KwlT7W/kFn0seIAB07vwIcvqISHPug0cKcDQK8nVH6RAzt3Z9UP72y85h9EXMIYOgIIIIAAAqUlsKdZ/c0XWjw/KlQsXqhozvI/Z9sbabj7qqHQrJ/+3ta9Pz4c4MAsHfjr0hYnBoYAAgggUDwC2j8rZGZZyPgskLl/FkhU7NaOJuE77xnW2nfm1r7YYNMRB6Yb6YOtFtGPZwv+m+JVIa4YAQQQQAABBI4R+Nmys/7bHY306p3N9Fs7s/Q5IWL+Q0RzVMw52nJDGj7xZqd+7QXZD+RAdxxo1Af/4bG13b8RQAABBBDoKwHtn7uz2CuicOXAUQdaLaG3rXJy80UnNzsS+nk9Tp3CgV/saqZ/urtZfUu4YuBv9bW48OYIIIAAAggg0BaBk1o8PyNQLGagaN6KM29/cU01rDvXfoX9Cg5woHsONGqV1W0VAX4IAQQQQACBbhLQ/rl7i71CClsO/NqBW5ZUwo+1hBb8OvHbSwemWy2ipxsLPXnczULKayOAAAIIIDBHAruz6ut2ZAsnd2bpNuFhccJDc1XcudrWSMNdVw6Hpo5eUXUmsy/z630ZLHrIop78aI7lgV9DAAEEEECgcwRWjSSXKQB6WAC40XCjEbED44uS8I2rtYQ+xanNXoaC3ivCEPpoi+iFN0wvX3hW5yoIr4QAAggggAACsyXwaPPv/3daPBc3QBT+FnfuWi2fP36Rls/2/+z/caB3DoyPvvofzbZO8PMIIIAAAgh0lEBWS75i8e/d4o811hxIwucvHQqPrqwKIiMMIoXffW9b/esW0ZMDv9HRgsKLIYAAAggggMApCTzf4nlV9fzpLP2jnVl6ZL4h4o6suCHcfMfu9839XBz47jXDYWJU+Gsvwn4UB3rrQKNeWXvKwsAXEUAAAQQQ6AUB7Z97u/ArtPDmwK8duHlJJfzoeiGwQLTvgWjMDyLs3p1Vb5tetfCf9KLm8B4IIIAAAgjERmDbePUftVo8T2fp9rmEVn5H2MmB+TmwbdXRls/uw399H44FFhzoqQObY6t9jBcBBBBAIEcEslryNgt/Txd+7Y8jbn/s79pL/66N14+2hJ52EjbmENLYc+D/sRbRe1ZWF+SoTHEpCCCAAAIIFI7Athtf+9/vaKRLd2bp94R38wvv8MNvPg5sXlYNH73AqV/7EC/dh8AEk546UB/+nwpXzLhgBBBAAIFyEGiMJF/u6aIn/BMAcyAqBxptzvcdl1bCoyucBnYa2GngHDjwn3Zl6T27GukVQYvochR7RoEAAggg0HUC4YqBv7Wjgy2e5xN6+V2hKQfS8M13D4c1i4Rc9vs4wIFcODDR9ULEGyCAAAIIIHAygWUX/dbfadaSp05VDLQb2pzqd30tF8VFVCEj58rh3Mbzk/CDDwiBcxAAOpGbgxO5OfFgT6tF9K5G+k9PriH8GQEEEEAAAQQGBnasHPqd6az64Z1Zda/QTfDKgf478OjKNHzx8iH7IW0+iG0vpRx7KeYx9/P4kJoJAQQQQACBnhPQ/jn3BYKbFjct0TkwVk/C164aCtMNJ0FzEgAKg4XBzzsw3Vy4ZTpb2Nw7PjTY84LFGyKAAAIIIJAjAjvGfvN/0OK5/0GfsNUcnOzAj5el4cNaPke3hyD8tLdZBAdW1oZ+J0eljEtBAAEEEIiBgPbPiqQiFEmusVyetttd4NOXVMIjNwqBhcAcyKEDf3OsRfSDS89+RQz1kjEigAACCCBwvMVzM/3TnVn6NycHT/4sjORAfx1otXxePVque2d7IeaTA+VxoFFL1qmmEEAAAQQQ6BmB07V/VmCUp8Awl+ayyA5sWFwJf6UltBO4TuDm2YEndmXpHbsbw2/oWQHjjRBAAAEEEOghgR3N3/zHR1s8p/sEfP0N+PDH/1QObF2Zhi9cVnHqVfc0DnAg3w6MJP9fD8sXb4UAAgggEDuBZq1yaZGDIdcu2ORAHA6M1bSEzuEJ0DwHkq6tT4H5sRbR+1ZVkthrLONHAAEEECg2geMtnhvpg6cKnHxNEMmBfDjww+uqYdObhL/2RuLYGzHPxZ9nbaCLXR+6egQQQKBQBLJacpfiofjFgzk0h7E4cPvFrZbQVeFen8I9IXRErajn//nbv9rVTL+1q5FesWXyd/52oYojF4sAAgggEC2B1pq1o1l9y/TRFs//WcCXj4DPPJiHUzmwI0vDPVcPh7FF9gNi2Q8wTq6XwoF6MhltoWXgCCCAAAK9I9Bq/5zVkkOlWDy1OMl3ixPzY3466MDkeUm4f+mwEFgIzIHiOPBkq0X0nmZ1pHdVjndCAAEEEECgfQLHWjzvyNL9pwqafE0AyYF8ObB1ZTXc8bYh99kdvM+2Nyhc5UBvHGiMVP5j+xWKn0QAAQQQQGCOBLJ65a0W994s7jjjzIHOOtCsJeHLVw6HnQ2ngZ3KjehUbnEC3xnD+WMtorc1Xjs0x/LFryGAAAIIINARAtPLF561o5Eunc7Svxbu5SvcMx/m43QO/OC6apg6v7P3l+7X8eQAB3rpQPOcoX/ckWLGiyCAAAIIIDATgUYt+b97ubh5L8UUBzjQaQc+efFQ+KmW0DOGbcJh4XDXHOhci+ir90xWXzlTreLrCCCAAAIIdJLAz5b91t/R4lm4eLpw0ffy68fxls91n/fb6ftqr2evhgM9dkAb6E6Wd14LAQQQQOBkAto/93hh15ZHayYOzMGBwbZ+Z/25Sfje+7SE7lrQV4JTp9jkPgg/qEX0yZWaPyOAAAIIdJLAsRbPO7P0MQFffgM+c2NuZnLg4eVp+MxbtXwW0tnL40BpHPhpJ+scr4UAAggggMAJBLR/Lk3B0FZApkA032V34HhL6FW5D7qc1hUol9uBeZwM3jOWhgMT1b1PTab/+siGhTc9u2lh0z8YcIADHODAXB1orSWHJtN/fWBdun//mjRMZ8K1mcI1X+dGnh144NpquGmxU79lv6c3PvtWsTnQrFf+5xM26/0BAQQQQACBThHQ/llhFVthZbxxOH/rRUPhJx/yucBOvHoQoGgO7F+dhiOb0vCsfzDgAAc4wIEuOfD0hjRMN2cR9DVm8bPC5ZDnANG1FdPl7Vka7r5qKIzppuXBfw5woJwObOjUPr/XQQABBBBA4DgB7Z/jCMIEnua5dA6MtDenE6NJ+O57hcBFCwBdb8ShdTMNz2wU/gq/OcABDnCg+w4cmChmECbANG+xOfDwjWn41CVO/Zbunr6cIZ5w1rzO1QFtoI+nFf4DAQQQQKBjBJojlbcoItsLknDCiQPFdeBLlw+F7VpCl7vdsHbSpZjf3c3ub/gLVTDmAAc4wIGWA4cmBYmxBYnGWzzn77+2GibPE/7aiyjuXoS5M3ftOrCqlvyTjm34eyEEEEAAAQRaBLJa8kftLkR+TtHCAQ4U2YGPXVgJ/0FL6FKEhE4Il/uE8JEpwYRwigMc4AAHuu/AgXXFC8MEmOYsFge2N462fG7W3YMX+R7ctfOXA+070BwZ3CitQAABBBBAoGMEJn/nd/52Vqs8aTFufzHGCisOFNuBta2W0O8ZFoI6LcuBHDtwcH33N/0FKxhzgAMc4MDucWFiLGGicRbL9S03VsMn3uzUr72HYu89mD/zNwcHHu7Ypr8XQgABBBBAoDFSuWQOi9FcP8vA7/kcDA5wIDcOtFpCb9MSWgia4xA05lPO+1YLJQRTHOAABzjQXQee3lCsQEyAab5iceAv3lcN684VHNmr4wAH4nSgOZL8LxILBBBAAAEEOkKgUU/+UEERZ0Fh3s07B5Lw4SVJ2PzBqhBUCMqBHDpweGN3N/4FK/hygAMciNuBxycEirEEisZZDNe3N6rhj98+HJoems7NQ9P2DOwbcaAPDtQHpzqy6e9FEEAAAQTiJrD07IFXaP/ch4XczYybGQ7kyoHVi5Lwjau1hI75tKmx5/PzhJ+YiDuYEEyZfw5wgAPddWBXsxihmPDSPMXgwJYb0vBxLZ9zdZ8s+LNfyIG+ObA17sTC6BFAAAEEOkKgWVtwscW8b4u5wl4IyoGcOfB8S+iV+QzCBJTmJUYH9oyl4dmp7m7+C1fw5QAHOBCnA4cmhYoxhIrGWAzP771mOEyM+rxf+3P25zjAgWMOjNUHX9+RzX8vggACCCAQL4GslvxfxxYW/1ZkcIADHEjCzUsq4UfXawkdY9hozPkM2Z/aEGcwIZAy7xzgAAe668C+NcUIxgSY5qnMDmxblYa7rhz2YHTOHoy2L2BviAN5cKByc7yJhZEjgAACCMybgPbPeVjMXYOikgN5dGBcS2ifh5vDz8ONNaB+fG13AwABC74c4AAH4nPgyFQaprV/DmUOFo0t/8H55mXV8NELnfrN4/2wa7JPw4FcOPDovDf/vQACCCCAQLwEtH/OxWLuSVdPunKgDw402nzPOy4dCo+ucBo41uDRuPNxInh3Mw2tjXoBDQYc4AAHONApB55cn/9wTIBpjsrswDffPRzWjLa5JzPS5s+1eY8n2MKTAxwoigON2oI3xJtcGDkCCCCAwLwIaP+s4ClKweM6udpPB6bOT8IPrhMCC0PzEYbGOg+tz2ns1Ka/18GSAxzgAAf2rBYuljlcNLb8+v3zVWn4w98d8hC0sJoDHOBAGw40Riq3zGvz3y8jgAACCMRJ4Gj75+SJfoYq3luoxwEOFMWBsXoSvnbVUJhuCAFjDSCNu7/u718jrBBYcYADHOBAZxw4vDENO7V/1v45y29IWtYA+0fL0vCRJVo+F+Ue2HXar+FALhz4+cDAwMviTC+MGgEEEEBgzgQa9cE3W8hzsZB74q2NJ964ytVuO9BuS+g/uLQStq7obxAmiMQ/Vge0ge5M8CFAwpEDHIjdgQMTgr+yBozGlV+3Wy2fV7fb8tkegX0iDnCAA8cdGBtZcPacAwC/iAACCCAQJ4FmLfk/ux2oeH2hHQc4UEYHNiyuhO+/X0voWENI4+5fAN/6vMbYQwvj5wAHOMCB+Tuwayy/IZkA09yUzYGtK9Nw52VO/ZbxvtiY7PdwoEcO1CsfjjO9MGoEEEAAgTkR0P65Rwu0p9WOP62mKORc2RzQErp/IaAANl72+8bnv+kvOMGQAxzgQNwOHLpJwFi2gNF48uv0D6+vhk1vEv6W7V7YeOzvcKDnDmgDPacExC8hgAACkRJonjN4kcW654u1MFQgzoESOnD7JZXwyI1OAwtl4w1lez33hzfEHVwIrsw/BzjAgfk58Nja/IZlgkxzUyYH/s27hsN43b6LvTcOcIADnXBgbNHQ/xppjGHYCCCAAAKzJZDVKl/qxOLjNRQxHOAAB5IweV4S7rtWCNzrIND7xRk6PzExv41/wQl+HOAAB+J1oPVZ8tOZkLFMIaOx5M/nrSur4fNvG/Lwcwkffnbvb/+HA3114KOz3f/38wgggAACERLQ/rmvi7WbIDdBHCipA81aEv7k7cOhtQklmMSAA91zYM9YGp6dije8EFyZew5wgANzd6D1WfICQww40D0HHryuGqa0fHbPX9J7fuGn/dT+OjC4c2Bg4GURRhmGjAACCCAwGwLaPytY+luw4I9/uR247eKh8FMtoYXgHgToqgNP3TT3zX/BCXYc4AAH4nVg7+ruBV9CRWxjdmBHloZ7rh4OY4vKfa/nXt78coAD/XVg6H+bTQbgZxFAAAEEIiSg/bNipb/FCv74l9+B9ecm4XtLh7sagDlh2r0Tptjmn+3ja+MNLwRX5p4DHODA3Bx4ZqOAMuaA0ti75//DK9Lw2bdo+ew+v/z3+ebYHPfbgUYt+ViEUYYhI4AAAgi0S0D7Z8VKv4sV78/BWBxotYT+8pXDYeeq/IdpAk9zVDQHdmdpaH2OoxAEAw5wgAMcaNeBA+u6F4AJF7GN1YEH3j8cNiyuaHms5TEHOMCBnjigDXS7GYifQwABBKIk0BgZvDCW8MU4BY0c4EDXHRg5M+NbL6qEn3yo6jSwlsgc6LADByeFHu2GHn6OKxzgAAfS0PoM+VhDOuM29512oNXy+V+9YyiM9STwOPM9V9fv+4xTuMcBDuTEgVUjlf89ylDDoBFAAAEEzkygWa98UWHs5oEDHOBAbx1YO1oJ975XS+iinTJ1vfk+Gb1/jUBHoMMBDnCAA+058PRNAsBOB4BeL16nfro8DZ++xKlf99S9vafGG28OvODASHLrmRMAP4EAAgggEB2BF9o/H7BgKpo4wAEO9MeBP/rdobCjke9QTehpfgrjQDMNz2gDrQ32pvbCHyEZThyI24HH1sYb1glqzX0nHXjg2mqY1PLZScicnIS0r9GffQ3c+81dG+joQh0DRgABBNoh0KwlF1ik+71Ie38OciB2B269sBK2aAmtHXKH2yEXJrTt8LifXB93oCHQMv8c4AAHzuzAkU1pmG4KATsZAnqt+Hza3kjD3f9iKDTr7mdjv581fn8HONB/B1YtSt7YThbgZxBAAAEEIiKQjQzeaZHu/yJtDswBBziwdjQJ33mPzwWONbQ07s6dst47fuaNf+EIRhzgAAfidqD1mfECSww4MHcHttxYDZ+4WMtn9/Hu4znAgbw40KwlH48o0jBUBBBAAIEzEZgcHfiNrJY8npeFynUomjjAAQ4k4UuXD4XtKzsXhgkWsYzRgcMb4g42BFvmnwMc4MDpHdi3Zu7Bl9AQu9gd+PfXVMO6c927unflAAc4kDMHpgcGBl52pjzA9xFAAAEEIiGg/bNCJWeFis/M8Zk5HHjBgQ8vScLmZU4DxxhcGnNnAvsDE6ff+BeM4MMBDnAgXgdanxWv/bMQN/YQdy7j1/LZHpI9JA5wIN8ONOvJP4sk1jBMBBBAAIEzEdD+Od+LtqLK/HAgbgdWL0rCv33XsM/F7fDnwwpYOxOw5p3jnrE0PDsVb7gh2DL3HOAAB2Z24Il1ws+5hH9+J25vttyQhk9cpOWze/S479HNv/nPvwODnzhTHuD7CCCAAAIREHih/fNj+V+4FBfmiAMciNuBVkvobVpCC8IF4bN24KmbZt78F4xgwwEOcCBeB3aPxx3kCXLN/2wduPea4TBxrvDXfXnc9+Xm3/wXxIE9kwMDL48g2jBEBBBAAIHTEWjUkyUFWbi0hNUWmAMciN6BW5ZUwo+v1xI676dOXV++Thc/vjbecEOwZe45wAEOnNqB1mfEzzb88vOYxerAtlVpuOvK4ejvxeydCf44wIH8OTA44/+bm+cMjpwuE/A9BBBAAIEICGS1wS/kb/FSUJgTDnCAAzM5ML4oCd+4WktoIWu+QtY8z8fuZhqObDp1ACAYwYUDHOBAnA48PiHMjDXMNO7Zuf/Qsmr42IVtnPodcf820/2br3ODAxzoiwP1ym0RRBuGiAACCCAwEwHtnxUgfSlAnGKd8ek88+HvZMuBRpt/R+64dCg8utJp4DwHj64tPyH1wfVxBhyCLfPOAQ5w4NQO7GrOLgQTGuIVowPf+pfDYc2oezT36RzgAAcK6oA20DOFIr6OAAIIxEAgW5S8acYFzNObQro2Q6gZHfL7HOJA1x2YOj8JD35ACCxozU/Qmte52L/61AGAYAQXDnCAA/E58NSkMDPGMNOY2/f+51o+d/0+zj6KQJEDHOicAzO3gW4sGqzFkHEYIwIIIIDAKQhkteTznVtsLNxYcoADHOiHA2P1Svj6O4bCdCYEzGv46Lry4eYzG+MLOQRb5pwDHODASx3Yv6b9IExoiFVsDmxeloaPXNBGy+fazIFDP+6JvKd7cQ5wgAMvdaBZq9x+ikjAlxBAAAEEyk5A++eXLooKBUw4wIE8OtBuS+jPvbUStq7IR9Am8DQPeXTgyXUvDQEEI5hwgAMcKKkDU6ce15GpNExr/xxiCzWNt70g/5vvHg5rFrknzOM9oWviJQc4MEcH9l5xxcDfKnvOYXwIIIAAAicROG37Z21btfvhAAc4UEgHNi5Owve1hA55DB9dU/9D8b3jpw4DhD+4cIADHIjHgSfXtxeECQxxismBrSvTcOdlQ4W8/5ljIGKs7vc5wIFoHGjWB+snxQL+iAACCCBQdgLaP3tyzI0SBzhQTgfG6kn42lVDYbrR/8BN6GkO8ubA4Q3xhBwCLXPNAQ5w4KUO7F0t2Iwp2DTWM/v+4PXVcPOb2mn5XM57J/fE5pUDHCi/A5VPlT3nMD4EEEAAgRcRaLV+yGrJ/vIvcIoYc8wBDsTrwKcuqYRHlledhvXZyBx4kQMHJl4aBghIMOEABzgQhwOHN6Zhp/bP2j9nZw5FYwmOWy2fV2v5HM0pQHsD8e4NmPvo514b6BflIv4TAQQQKD2BVSOV8y3+0S/+bnK0u+FABA5MnpeE+64VAuftFKrr6d/J6N3NOEIOYZZ55gAHOPBSB1oPAcUS7BmnuT6dA62Wz59/m5bP9sXsi3GAA7E4MDYyNFr6wMMAEUAAAQSOEsjqyR2xLHDGqZjjAAdid2CsdrQldGsTSPCIAQfS8NRNLw0FBCWYcIADHCi5A1Np2D0mFDxdKOh7cfjx4HXDYUrLZw9DR/AwdOz7AMZvL+wEB+rJZ+QiCCCAAAIREND+WQFwQgGg6Hfjx4FoHLjtkkp4+EangQWgQvDH1pQ85NhkfII8DnCAAyc70Hr4R8CJQcwO7MjScM/Vw2FMy+do7v/s/dj/4wAHjjswkuxrZQIRRB+GiAACCMRNIKtVFh//n7/gR+HPAQ5wICoH1rdaQr9v2Elgp6GjdqDVBvrIlHDk5HDEnznBAQ6U2YHH1go/Yw4/Yx/7wyvS8Jm3avlsL0wYxgEORO3AoqFz405FjB4BBBCIgEBjJPlc1IudsCuqsIvrinsOvNSBZi0JX75yOOxsOA3sNHC8p4EPrhf0lDnoMTZ+c4ADL3ag9dDPdFMAHHsIGuv4/9/3D4cNiyv2AewFcYADHIjcgUYt+WwE0YchIoAAAvES0P75pUGIcAgTDnAgVgd+/6JK2HJDvAGg8Dfuud+/Wjjy4nDEf/OBAxwoswMHJ4W/sYafMY/7eMvnuvA31vs947bXwQEOnOTAY5OjA78RbzJi5AgggEDJCYzVK+ed9D9+T39F/vQXHxSDHCirA4Nt/f993blJ+MtrnAQWBkcYBjfT8MxGgU+ZAx9j4zcHOHDMgX2rBcAxB6Exjv2ny6vh9ksEv+51y3qva1zc5sBcHWgsGqyVPP4wPAQQQCBeAo2RZOlcFwi/p7jgAAc4UE4HWi2hv3rlUNi5KsIQ0GcBR/1ZwE9MCEeOhSP+zQUOcKCsDrQe9tmp/XOIMQSNdcz3XVsN688r532L+1HzygEOcGB+DjTqlf8j3mTEyBFAAIGSE2jUFrzBQjm/hRI//DjAgUI6MHLmebv1okr4yYecBnYaOJ4HAfaOCXzKGvgYF7c5wIFjDhxY5/RvrEFobOPe3kjDn759KDTrZ677C3k/o3tbWx2ezC3/OcCB0znQygZKHn8YHgIIIBAvgaVnD7wiqyXPnm4h8D2FAgc4wIF4HZgYTcJ33yMEFgLHEwI/vUFIciwk8W8ucIADZXRg97gAOLYgNMbx/uTGavjkm7V8dh8b732suTf3HGjLgV+0soF4kxEjRwABBCIgkNWTByyKbS2Knq70hC0HOBCtA1+6fChsXxlPCCjwjXeuD6wV+JQx8DEmXnOAAy0HWg/5xBgGGnNc867ls/0de3wc4AAH2nTg/giiD0NEAAEE4ibQrFVub3NRiDb4wEfhxAEOcCAJH1mShM3LnAYWDpc7HN7dTMORKUGJsIwDHOBAGR14bG1cQaDgN675brV8vvtfaPnsvs29Owc4wIE2HahXbos7FTF6BBBAIAIC2UjyexbGNhdGpx89BMABDkTuwOpFSfh37xoOQtByh6Cxz+9TNwl+yhj8GBOvORC3A0c2pWG6GVcgKACOZ7633JCGj2v57F418ntVe5v2NjkwOweateSdEUQfhogAAgjETSA7Z8HrLJCzWyDxwosDHIjdgVZL6G2rhKCxB6VlHf9ja+IOSYRk5p8DHCijA4cm4wkDBb9xzfWfX1MNE+f6vN/Y78+M3x4FBzgwawfOWfC6uFMRo0cAAQTiIPCyrJYcnPUi4clCT5dygAMciNqBW5ZUwo8/qCV0WUPQmMe1O9MGuozhjzEJNTkQtwP71sQVCgqByz/f2xppuOuK4dB0Txb1PZm9PKEfBzgwRwcOTQ4MvDyO6MMoEUAAgcgJZLXk23NcLBTabrY4wAEOROzA+KIkfONqLaFjDkvLOvaD6+MOSgRl5p8DHCiTA63Pdtf+ufyBaEyh90PLquGjFzr1ax9L8MUBDnBgzg58O/I4xPARQACBeAg0Riq3WDDnvGAKvyIOv/y98feGA0cd+PylQ+HRlU4DlzUMjXFc+1YLf8oU/hgLnzkQtwNPrhN+xhSOln2s371mOEyMCn/dh7kX5wAHODAfByo3x5N8GCkCCCAQOYGsnlxu0ZzPoul3+cMBDnBg6vwkPHidEDjGsLSUY26m4fDGuAMTgZn55wAHyuLAnnEBcNlD0RjGt21VGu66ctgD6B5A5wAHOMCBeTuwaiS5LPI4xPARQACBeAisqJ/1GuGN8IYDHOAAB+brwHj9aEvo6SwNpQwFjSuqeXYTDGEAACAASURBVH1infCnLOGPcXCZA/E68PQG4W8M4WjZx/h8y+cL2jn1OzjvUGC+9wN+3z0lBzjAgQI4MHrWwniSDyNFAAEEEBjIaskeC3QBFmhPubmh5QAH+uhAo833/tyllbB1hRBYCF5sB/aOpeHZqXhDE4GZuecAB8rgwOMTAuCyh6NlH9833z0c1iyyV2G/igMc4AAHOubAXlEIAggggEBkBBr1wT+zkHZsIRVQtRkScY5zHCivAxvPT8L3P6AltBC42CFw6+RYGQIQYzCPHOBArA7sGhMAlz0gLev4tq5MwxcvG7K3YG+BAxzgAAc67cDXI4s9DBcBBBBAIKslE4KY8gYx5tbccoAD/XBgrJ6Er101FKYbxQ4Bhbjxzt/ja4VGsYZGxs19DhTfgUOTwt+yhqNlH9ePP1gNH26r5bN7nH7c43hP3nGAA0V2oFGvrJWEIIAAAghERqBZSy4o8uLl2hVfHOAAB/LrwKcvqYRHljsNLEguXpC8u5mGI9pAOwW9qfhBmDDTHMbowP41AuCyB6VlHF+r5fPq0fzW9e65zA0HOMCBYjvQygAiiz0MFwEEEEBg+RsXnpXVkucs4sVexM2f+eMAB/LqwOR5Sbj/WiGwELh4IfBTk4KjGIMjY+Y9B4rtwDNTaZjOBMBlDEjLOqZWy+cvvK3S6TafXk/rWA5wgAMceLEDz40vTl8tCUEAAQQQiJBAVku25jU4cF1CLQ5wgAPFd2CsdrQldGvjThCKQVEceGxNsUMQIZb54wAHYnTgyfXC37IGpWUc14PXDYdNbxL+ut8r/v2eOTSHHMi9A1sjjDwMGQEEEECgRSCrDX7VQp37hfrFT235b0/xcYADhXTg9osr4eEbnQYuSgAa+3XuzrSBjjE8MmahKQeK7cDecQFwGYPSso1pR5aGe64eDmOL7EPYi+IABzjAgZ448BUpCAIIIIBApASaI8kKi21PFttCBjbc4AYHONBJB9afl4T7lg47Cew0dCEcOLi+2EGIIMv8cYADMTlweGMadjYFwGULS8s2nkdWpOGzb3Xqt5P3F17L/SoHOMCB0zvQqFWWRxp7GDYCCCCAQGPRYM1CefqFEh98OMABDnTOgWYtCV++cjjsbDgNHPsp27yPf99q4VFM4ZGx8p0DxXbgwITwt2xhadnG84PrqmHq/M7V1O5PsOQABzjAgXYcaJ4zOCIBQQABBBCIlMDk2dVXZrXkl+0sGH5GYcEBDnCAA51y4OMXVcJPbvCZuHkPQWO/vtaJMqEQBhzgAAfy78DuMQFw2QLTsozneMvnupO/nbqP8DruSTnAAQ607cCvVi2pvCrS2MOwEUAAAQRaBLJa8pCFs+2FUytnn7/KAQ5w4IwODLbFaN25SfjL9zkJHHvImufxP7Eu/6GHYMoccYADsTvw1Abhb1nC0rKN4+HlafjMW4baqovtydiT4QAHOMCBLjiwWfqBAAIIIBA5gWxk8M4uLDBucs4YkChseMcBDnDgeEvoVU4D5zkIjfXa9oyl4dkp4VLs4ZLx+zvAgXw7sH+tALhswWkZxnP/+6vhpsVO/brfc7/HAQ5woI8OjAzeGXnsYfgIIIAAAs16cq3FuI+LsaDYwwIc4AAHwq0XDYUtH3IaONagNc/jfnpDvoMPwZT54QAHYnbgyKY0TDcFwGUITMsyhu1ZGu6+aiiMqe/d43GAAxzgQJ8daO35Sz4QQAABBCIn0KgteIMAWADMAQ5wgAP9dmBiNAnffa8QOM9haIzX9vha4VLM4ZKx858D+Xbg4KTwtyzBaRnG8fCNafjUJU799vuewvu7r+UABzhw1IGx+uDrI489DB8BBBBAYOnZA6/IasmzFkcFEgc4wAEO5MGBL10+FLav1BI6xrA1j2Pe3UzDEW2ggxAs3yGY+TE/sTqwd7UAuAzBaRnGcN+11TB5nvA3D/cSrsE9LQc4wIHnHfhFa89f8oEAAggggMBAVk8esDgqkDjAAQ5wIC8OfPiCSnjog04D5zEQjfGaDk0Kl2INl4yb+xzIrwPPTAl/yxCcFn0M2xtHWz436+4j8nIf4Tq4yAEOcOB5B+4XeSCAAAIIIPA8gWatcrvFUYHEAQ5wgAN5cmDtaBK+857hEGPgaMz5OgG+f01+AxDhlLnhAAdideCJdQLgooenRb/+LTek4RNvduo3T/cPrsX9LAc4wIEXHKhXbhN7IIAAAggg8DyBbCT5PQukIokDHOAAB/LoQKsl9LZV+QoEBbTxzYc20EK2WEM24+Z+Xh3YPS4ALnqAWuTr/4trqmHdue4d8njv4Jp4yQEOcCAJzVryTrEHAggggAACzxPIzlnwOoujAokDHOAAB/LqwC1LKuHHWkI7DZ31L3h+cp0QKK8hkOviJgfic+DpDcLfIoenRb72bY003HXFcGtjPeS1bnZd5oYDHOAAB1p7/WIPBBBAAAEEjhF4WVZLDioQFAgc4AAHOJBXB8YXJeEbV2sJ7fRxf0LgfePxBSxCNXPOAQ7k1YHHJwTARQ5Ri3rtrZbPH79Iy+e83iu4LvexHOAAB447cGhyYODlxzb9/RsBBBBAAIGBrJZ820J5fKH0NK8nmjnAAQ7k1IHPXzoUfr6y6jRsH0/DxhpCH94oDMprGOS6uMmBuBzY1RQAFzVELep133vNcJgYFf7aM7JnxAEOcKAQDnxb1IEAAggggMAJBBojlVss4oVYxIVSOQ2l/P3x94cDvXPg5iWV8KPrhcCxBrH9GvcTE3EFLAI1880BDuTRgUM3CX+LGqIW8bq3rTra8lmd37s6H2usOcABDszXgcrNJ2z6+wMCCCCAAAJZPbncAjvfBdbvc4gDHOBArxwYr2sJ3a8gNNb33TMmDMpjGOSaeMmBuBzYt0YAXMQgtYjX/NCyavjoBU799qq29z7uIznAAQ50xoFVI8llkg4EEEAAAQROILCiftZrLLSdWWhxxJEDHODA/B1otHna/45LK+HRFU4DxxrK9nrcT22IK2gRrJlvDnAgTw4cmUrDtPbPoYhhatGu+ZvvHg5rFs2/nnVPgCEHOMABDvTcgdGzFp6w6e8PCCCAAAIItAhktWRPzxelNjf4XZeCiQMc4AAHZnJg4/lJ+MEHhMC9DkNjfL/H1wqD8hQGuRY+ciAuB55c7/Rv0YLUol3vz1el4Q9/d8jHLtmn4QAHOMCBojqwV8qBAAIIIIDAKQk06oN/NtPmuq8LXjjAAQ5wIM8OjNWT8LWrhsJ0Iw0xBpPG3Jt5391Mw5FNcQUuAjbzzQEO5MWBPasFwEULVIt0vT9eloaPLNHyOc/1vmtzP8oBDnDgjA58/ZSb/r6IAAIIIIBAVksmLKRnXEiL+gSY6/b0Igc4UGgH2m0J/elLKuGRG3sTBgpd4+R8aFIYlJcwyHVwkQPxOHB4Yxp2av+s/XPWnYcAWi2fV4/aC7AfxAEOcIADxXagUa+slXAggAACCCBwSgLNWnKBhb7YC735M38c4AAHkrBhcSX8lZbQTkJn3Qmo96+JJ3ARrplrDnAgLw4cWNed4K9IJ1Rda+cd2LoyDV+4zKlf9w/uITnAAQ6Uw4HW3v4pN/19EQEEEEAAgeVvXHhWVkues+iXY9E3j+aRAxyI2YGxmpbQTih3JwBucX1mo1AoL6GQ6+AiB+JwYNdY58M/gWrcTH94XTVsepPwN+b7BWN3v8wBDpTMgefGF6evlnAggAACCCAwI4Gslmwt2eJX6Jan5kIxygEOcGB+Dtx+casldNVp2C6dho01ZH5yfRyBi2DNPHOAA3lw4NBNcQeVgurOzv+OLA33XD0cxhbNr8ZUo+PHAQ5wgAM5c2DrjBv+voEAAggggECLQFYb/GrOFi8Brs8t5QAHOMCBeTkweV4S7l86LAQWAnfMgb3jQqE8hEKugYcciMOBx9Z0NgAUqMbLc+vKarjjbUPzqivtlwh8OMABDnAgpw58RbqBAAIIIIDAaQk0R5IVOV3E3KQJgDjAAQ5wYM4ONGtJ+PKVw2Fnw2ngWE/tdnrch7WBDsK3OMI382ye++nAkak0TGfxBpbC6s7N/Q+uq4ap84UW9ns4wAEOcKCcDjRqleWn3fT3TQQQQAABBBqLBmsKgXIWAubVvHKAAxxIwicvHgo/1RK6YydhOx2qFun1npgQCvUzFPLe/ONAHA60Wu4LQTGYjwPHWz7Xfd6vewH3gxzgAAfK60DznMERyQYCCCCAAAKnJTB5dvWVWS35pYKgvAWBuTW3HOBAeR0YbOuE8Ppzk/C992kJXaSwNY/XumcsDc9OxRHACNrMMwc40C8H9o0LP+cTfsb+uw8vT8Nn3qrlc3lrf/d15pYDHODACw78atWSyqtOu+nvmwgggAACCLQIZLXkIQWEAoIDHOAAB8rswPGW0KtSp2F9NvCcHXjqJqFQv0Ih78s9DpTfgWc2pmFnUwAce4g71/E/cG013LTYqd8y1/PG5n6VAxzgwHEHNks1EEAAAQQQaItANjJ4pwX0+ALa1mkyvPDiAAc4UEwHbr2oEn7yIZ8LnMcTtkW4psfXlj+AEbKZYw5woF8OHFgn/J1r+Bnz7+1opOFfvWMojNWKWZu6pzBvHOAABzgwewcGv9DWpr8fQgABBBBAoFlPrp39QmNxxowDHOAAB3LmwEh71zMxmoR736sldBEC17xd4+5mGo5sEg71KxzyvtzjQLkdaLXajznINPbZz/9Pl6fh05c49euepL17AJxw4gAHyuJAYyRZKtFAAAEEEECgLQKN2oI3lGUBNA7FHAc4wAEOtOvAly4fCtu1hJ5zO+S8hbO9up6Dk+UOYARs5pcDHOiHA09vmH34JzCNm9n911bD5HnC33brXj/nHokDHOBAeRwYqw++vq1Nfz+EAAIIIIDA0rMHXpHVkmcVAuUpBMylueQABzjQngO3XlgJ/0FLaCHwLD4Xef8a4VA/wiHvyTsOlNuBx9bGHWYKs9uf/+2NNNx91VBo1tur9dTEOHGAAxzgQMkc+EVrL1+igQACCCCAQNsEsnryQMkWQ5/l6zOQOMABDnCgLQfWjibhu+/RErpXJ2jL8D7PbCx3ECNoM78c4EAvHWi11p9uth8ACkvjZbXlxmr4xJud+rV3I8ziAAc4ELUD97e94e8HEUAAAQQQaBFo1iq3Kx6iLh7aCkk4whEOcKDMDrRaQm/TEtpp4DZOAz+5TjjUy3DIe/GNA+V2oNVaX6iLwZkc+Iv3VcO6c9XiZa7FjY3fHOAAB9pwoF65TZqBAAIIIIDArAhkI8nvWWTbWGSdphMUc4ADHCi1Ax9ekoTNH6wKQdsIQctwkneuY9g7Vu4wRthmfjnAgV46sG+18PNM4WfM39/eqIY/fvtwaKrBS12D24+yH8UBDnCgPQeateSds9r098MIIIAAAghk5yx4nYW2vYUWJ5w4wAEOlNuB1YuS8I2rtYSeazgay+8d3iAg6mVA5L34xoFyOvDMlPbPMYe7Zxr7lhvS8HEtnwW/wn8OcIADHDjuwPjIgt+WZCCAAAIIIDBbAi/LaslBoUa5Qw3za345wAEOtO/A8y2hV6ZOAzsNfEoHDkyUM4wRsplXDnCglw48sd7p3zOFoLF+/95rhsPEqM/7Vbu3X7tjhRUHOBCBA4cmBwZePttNfz+PAAIIIIDAQFZLvh3BQnn8iSljVRhygAMc4MCZHLh5SSX86HotoWM51Tubce5uCol6GRJ5L75xoJwO7BkXAMca8M407m2r0nDXFcPu25124wAHOMABDpzkQLOWfEuEgQACCCCAwJwINEYqt5xpI9z3hSUc4AAHOBCbA+NaQp/yBOxswtKy/uxTN5UzkBG0mVcOcKAXDhzeKPydKQSN9eubl1XDRy906je2Wtt43V9ygAMcaNeBys1z2vT3SwgggAACCGT15HILbrsLrp/jCgc4wIGyONA46anamcZ1x6VD4dEVTgOXNcydy7geXyMk6kVI5D14xoFyOvD4hAA41qD3VOP+5ruHw5rRNuvrkTZ/rs0ab6baz9dx5gAHOMCBPDmwaiS5TIKBAAIIIIDAnAisqJ/1mjwtaq5FkcUBDnCAA3lzYOr8JPzgOiHwXMLSMv7O7iwNR6bKGcwI3MwrBzjQbQd2NQXApwpCY/vaz1stn6/U8jlvNa/rcR/GAQ5wIIcOjJ61cE6b/n4JAQQQQACBFoGsluyxwOdwgffkss/94AAHOJAbB8bqSfjaVUNhupFqjZxhcHC9kKjbIZHX5xgHyufAU5PC39iC3lONd/OyNHxkiZbP9mDswXCAAxzgQBsO7JVeIIAAAgggMC8Cjfrgn7Wx4ORmE961KpA4wAEOcKDTDrTbEvoPLq2ErSsEoGU82TubMe0fL18wI2wzpxzgQLcd2L9GAHyqQDSmr7VaPq9ut+WzByHtwXCAAxzgAAe+Pq9Nf7+MAAIIIIBAVksmOr2R7vWEMxzgAAc4UFYHNi5OwvffryX0bALTMv7sMxuFRd0Oi7w+xzhQHgdarfOntX8OMYW9Lx7r1pVpuPMyp37LWhsbl/s+DnCAA91xoFGvrJVcIIAAAgggMC8CzVpygYW6Ows1rrhygAMcKKcDWkI7Bf3EuvIEM0I2c8kBDnTbgSfXO/374kA0pv/+4fXVsOlNwl/3BOW8JzCv5pUDHOimA416smRem/5+GQEEEEAAgeVvXHhWVkue6+aC5bUVRBzgAAc4UEYHbr+kEh650WngMp7wPdOY9o4JjLodGHl9jnGgPA7sXS0Ajin0PTbWf/Ou4TBeVwOXsQY2Jl5zgAMc6LoDz40vTl8tuUAAAQQQQGDeBLJastXC3fWF22d3+OwODnCAAyV0YPK8JNx3rRD4TIFpGb9/eEN5whlBm7nkAAe65cDhjWnYqf1zVO2ft66shs+/bUjdW8K6176RfSMOcIADPXPgZ/Pe8PcCCCCAAAIItAhktcGvWsB7toC7EXYjzAEOcKBkDjRrSfiTtw8/v7lbxqDTmE7d8vrAhMCoW4GR1+UWB8rjwIF1Tv8eOxEbw78fvK4aprR8VuuXrNa3X2a/jAMc6IMDX5FaIIAAAggg0BECzZFkRR8WMjdFboo4wAEOcKBUDtx28VD4qZbQIZbAeHczDUemyhPSCNzMJQc40HEHptKwe0wAHEPwuyNLwz1XD4exRUICeysc4AAHOMCB+TrQqFWWd2TT34sggAACCCDQWDRYm+/C5PcVNxzgAAc4wIEkrD83Cd9bOhxNCBpL2DvTOJ+6SWDU8cBoE6aYcqAsDrT+HxlD+Bn7GB9ekYbPvkXLZ3WweyEOcIADHOiUA81zBkckFggggAACCHSEwOTZ1VdmteSXnVqkvI6ChwMc4AAHYnag1RL6y1cOh50Nnw08U3Balq8/tkZQVZagyji4zIHOO/DYWgFw2cPhB94/HDYsrpSqo0vMNayxu4fjAAc4kAsHfrVqSeVVHdn09yIIIIAAAgi0CGS15CGLfC4WeTfPWuJygAMcKIIDI2deM269qBK23HDqz48tSwAa+zh2Z9pAC806H5phimkZHGi1yJ9uCoDLGgAfb/lcF/7aRzlzTYwRRhzgAAdm5cBmaQUCCCCAAAIdJZCNDN5pMZ7VYiygKUJA4xp5ygEO9NmBtaOVcO97tYQuc1B8cL2wqgxhlTHwmAOddeDgpPC3rOHvT5en4dNaPqux+1xj27+yf8UBDpTXgcEvdHTT34shgAACCCDQrCfXlnfhVBSZWw5wgAMc6K8Df/S7Q2FHw2ngMgbB+1d3NjQRQuHJAQ6UwYF9awTAZQyAH7i2Gia1fBb+Cn85wAEOcKBrDjRGkqWSCgQQQAABBDpKoFFb8AbhQH/DAfzx5wAHOFBuB269sBK2fMjnApcuBG6m4ZmNAqsyBFbGwGMOdMaB1v8Td2r/HMoUAG9vpOHuq4ZCs17uWk0tbn45wAEOcKDfDozVB1/f0U1/L4YAAggggMDSswdekdWSZ/u9yHl/hRYHOMABDpTZgbWjSfjOe4TAZQuBn5joTGgifMKRAxwogwMH1jn9W6bw9yc3VsMnLvZZv2WuT43N/RcHOMCB3Djwi9YevaQCAQQQQACBjhPI6skDFvzcLPhdayVijs0xBzjAgf478KXLh8L2lVpClyUI3juWhmenBFdlCK6MgcccmL8Du8cFwGUJgP/9NdWw7tz+101qV3PAAQ5wgAOROHB/xzf8vSACCCCAAAItAs1a5fZIFlPhqs/q4AAHOMCBvjvwkSVJ2LzMaeCyhMBPb5h/aCJ4wpADHCi6A63/F5Yl/Ix5HFo+C1rsDXGAAxzgQB8cqFduk1IggAACCCDQFQLZSPJ7Fvc+LO5CmL6HMLznPQc40C8HVi9Kwr9913AoSwga8zgeXyu4Knpw5fo5zIH5O/DYWgFw0YPjLTek4RMXafncr9rQ+7ov4QAHOBCvA81a8s6ubPp7UQQQQAABBLJzFrxOkRFvkWHuzT0HOMCB/jnQagm9TUvoQgfhu5tpOLJp/uGJAApDDnCgqA4cmUrDdFMAXOQA+N5rhsPEucJfNXH/amLssecAB2J2YHxkwW9LKBBAAAEEEOgWgZdlteRgzAutsSs0OcABDnCgXw7csqQSfny9ltBFPkX81E2Cq6IGV66buxyYvwOHJoW/RQ1/t61Kw11XDOvMpDsXBzjAAQ5woH8OHJocGHh5tzb9vS4CCCCAAAIDWS35dr82vr2v0IUDHOAAB2J3YHxREr5xtZbQRQ2BH1sz/wBFCIUhBzhQVAf2rREAFzEAfmhZNXzswjZO/Y6oU2OvU43f3wEOcIAD3XOgWUu+JZpAAAEEEECgqwQaI5VbLObdW8yxxZYDHOBA3A402nya+I5Lh8KjK50GLloQvDtLQ6sF6inDm5m+rm30qXnhggsHCuWA9s/FDL+/9S+Hw5rRuGsztbn55wAHOMCBfDhQubmrm/5eHAEEEEAAgayeXJ6PRU/xYR44wAEOcCBuB6bOT8KDHxACFy0EPrh+hgBYmFWoMOuUIb45NIccmNGBJ9cXMwAt4ondTlzzz7V81uK0zYcS3Y/EfT9i/s0/B3rnwKqR5DLJBAIIIIAAAl0lsKJ+1mss7r1b3LHGmgMc4AAHTufAWL0Svv6OoTCdpaFoQWis17tvtQBYeMoBDsTnwJ5xAXAngtlevMbmZWn4yAVttHyuDQpJhaQc4AAHOMCBXjkwetbCrm76e3EEEEAAAQRaBLJasud0m9G+J6zgAAc4wAEOdMaBdltCf+6tlbB1hRC4KKHy4Y3xhT8CP3POgXgdeHqj8LcXwW0n3uOb7x4OaxZ1poZRC+LIAQ5wgAMc6JgDe6USCCCAAAII9IRAoz74Zxbwji3gnpTr1ZNy3odrHOBAyR3YuDgJ39cSuhAnoZ9YF28QJAQ09xyIz4EDEwLgToSz3XyNrSvT8MXLhtSKJa8V7ePYx+EABzhQWAe+3pNNf2+CAAIIIIBAVksmFAyFLRjc1Lup5wAHOFBiB8bqSfjaVUNhuuE0cJ5PA+8dS8OzU/GFQII/c86BOB3YNSYA7mZ4O9/X/uvrq+HmN7XT8tk9sH0QDnCAAxzgQD8caNQrayUSCCCAAAII9IRAs5Zc0I/FznsqsjjAAQ5wgAPtOfCpSyrhkeXVQpyGzXNQ281re3pDnEGQANC8cyAuBw5NCn/nG9B28/dbLZ9Xa/ns4cgSPxzp3qG9eweccOJAvh1o1JMlPdn09yYIIIAAAggsf+PCs7Ja8pziIN/FgfkxPxzgAAfidmDyvCTcf60QuJsh7nxe+/G1cYVAQj/zzYE4Hdi/RgDczQB3rq/davn8hbc59atWjrtWNv/mnwMcKIgDz40vTl8tkUAAAQQQQKBnBLJasrUgi6SneT3NywEOcIAD0TowVjvaErq1QTyfsNLvdp7f7mYajmgDHYSCcYaC5j2OeT+yKQ3TmQB4riFtt37vweuGw5SWz9HWhvZxBF4c4AAHCufAz3q24e+NEEAAAQQQaBHIaoNfVTAUrmBwkysE4wAHOBCpA7ddUgkP3+g0cN6C7FZrVEEYBhzgQFkdeHK98LdbIe5cXndHloZ7rh4OY1o+q4cjrYftYdnD4gAHCurAV6QRCCCAAAII9JRAcyRZUdBF082emz0OcIADHIjSgfXnJeG+9w07CZyj09D7Vwu+yhp8GRe3OZCGvasFwHMJarvxOw+vSMNn3joUZf1j30LgwwEOcIADRXagUass7+mmvzdDAAEEEECgsWiwVuTF07Ur/jjAAQ5wIEYHmrUkfPnK4bCz4TRwHk4DawMtJBQScqDwDszQyv7wRuFvN4LcubzmA+8fDhsW+7zfGOs+Y3a/wwEOcKD4DjTPGRyRRCCAAAIIINBTApNnV1+Z1ZJfKiSKX0iYQ3PIAQ5wID4Hfv+iSthyQ+c/1zYPoWrRruHgegFY4QOwTebQHHLgZAcOTAiA5xLWdvJ3jrd8rgt/1brx1brm3JxzgAMlceBXq5ZUXtXTTX9vhgACCCCAQItAVkseKsliqhWWdrAc4AAHOBCdA2tHK+HP36sldL8D433aQPscZAEyB0rowO4xAXAnw9zZvtZPl6fh02/R8tl+hQCIAxzgAAcK7sBmKQQCCCCAAAJ9IZCNDN5Z8EU0us1+86Xw5QAHOMCBFztwvCX0KqeB+xkEt1qlnnx6zp8x4QAHiurAUzcJf2cb2Hby5+9/fzVMavnsXt/DnRzgAAc4UAIHBr/Ql01/b4oAAggggECznlz74k1k/y1U4AAHOMABDhTTgVtbLaE/5HOB+xUCP7FO0FXUoMt1c5cDL3Vg/1oBcCcD3XZfa3uWhruvGgpjNvxLsOFfzHrSfYB54wAHONBZBxojyVIJBAIIIIAAAn0h0KgteIOFvbMLO554coADHOBAvxyYGE3Cd98jBO5HCLxn7KUBilAJEw5woIgOHNmUhummALjd0LZTP/eTG6vhk2/2Wb/9qqG8r/qdE/dv4QAAIABJREFUAxzgAAe64cBYffD1fdn096YIIIAAAggsPXvgFVktebYbC5zXVDhxgAMc4AAH+uPAly4fCttXagnd6yD4qQ3CriKGXa6Ztxw40YGDk8LfToW67b7OfddWw/rz+lMzqNVw5wAHOMABDnTNgV+09t4lEAgggAACCPSNQFZPHrDQd22h17pK+zIOcIADHOiLAx9ZkoSHPug0cC9D4MfXnhiiCJXw4AAHiujA3tUC4HaD2/n+3PbG0ZbPzbr7UXsSHOAABzjAgRI6cH/fNvy9MQIIIIAAAi0CzVrl9hIusH3ZbMdRscoBDnCAA3lyYM1oEr7zL4dDL0PQmN9rdzMNR6YEXkUMvFwzbzlw1IFnpoS/8w112/39LTek4eNaPrtv96AkBzjAAQ6U14F65TbpAwIIIIAAAn0lkI0kv5enzWrXIjzhAAc4wAEOdNaBVkvobau0hO5FOH1oUpAmSOMAB4rrwBPrBMDtBrjz+bk/v6YaJs71eb/qvc7We3jiyQEOcCBfDjRryTv7uunvzRFAAAEEEMjOWfA6BUK+CgTzYT44wAEOcKDTDtyypBJ+rCV0109D719T3OBHaGfuOMCB3eMC4PkEu2f63W2NNNx15XBoOu1V3tNe5tbccoADHODACw6Mjyz4bckDAggggAAC/SbwsqyWHOz0RrPXE15wgAMc4AAH8uXA+KIkfONqLaG7fRJYG2ghmiCVA0V04OkNwt8zBbjz+f5Dy6rhoxc69as2zFdtaD7MBwc4wIGuOXBocmDg5f3e9Pf+CCCAAAIIDGS15NsW/K4t+J588/QjBzjAAQ7kyoHPXzoUHl1Z7fpp2G4HrXl9/SfXCb+KGH65Zt7G7sDjawXA8wl4T/e7371mOEyMCn/tOdhz4AAHOMCBWBxo1pJviRwQQAABBBDIBYHGSOWWWBZg41RscoADHOAAB5IwdX4SHrxOCNyNEHnvuCAt9iDN+P0dKKIDu8YEwKcLcefyvW2r0nDXFcO5eghMDaQO5gAHOMABDvTCgcrNudj0dxEIIIAAAghk9eRyi38vFn/vwTMOcIADHMiPA+P1oy2hp7PUaeAOMzi8QQBWxADMNfM2VgcO3ST8nUvAe7rfeb7l8wXtnPodFBDrFMMBDnCAAxwomQOrRpLLJA4IIIAAAgjkgsCK+lmvsSGfnw15c2EuOMABDnCgEw402ryJ/tyllbB1hRC4k6eBn5gQpMUapBk394vowP41AuDThbmz/d433z0c1ixSy3SilvEaPOIABzjAgUI6MHrWwlxs+rsIBBBAAAEEWgSyWrKnkAtqm5vbxqZg5AAHOMABDszswMbzk/CDD2gJ3akQeM9YGp6dEoQVMQhzzbyNzYEjU2mYbgqAZxvynurnH12Zhi9eNuQUl3t0DnCAAxzgQNwO7JU2IIAAAgggkCsCWS35uo3xmTfGscGGAxzgAAfK7sBYPQlfu2ooTDecBu5EEPyUNtAhtiDNeIXHRXTgyfXC31OFubP92o8/WA0fbqvls3qq7PWU8XGcAxzgQPQOfD1Xm/4uBgEEEEAAgUa9slaBEn2B4gnFuJ9QNP/mnwMld6DdltCfvqQSHrlRCDzfEPjxtcKwIoZhrpm3sTmwZ1wAPNuw9+Sfb7V8Xj3qXtJ+Agc4wAEOcIADSWjtsUsaEEAAAQQQyBWBZi25wCKtUOMABzjAAQ5woOXAhsWV8P33D4f5hqAx//7uLA1HNgnTYgvTjJfzRXLg8MY07NT+OZwc6Lb7560r0/CFyyoeoCv5A3RqY7UxBzjAAQ7MxoFGPVmSq01/F4MAAggggMDyNy48K6slz81mQfOzCiAOcIADHOBAeR0Yqx1tCd3aCI85yJ3P2A9OCsOKFIa5Vr7G5sCBCad/2w17T/65B68bDpveJPxVB5a3DjS35pYDHODAnBx4bnxx+mpJAwIIIIAAArkjkNWSrRb3OS3unvr21DcHOMABDpTWgdsvroSHb6wKgecQhO9fI1CLLVAzXs4XxoGpNOweEwCfHOye6c87sjTcc/VwGFvkvtHeAQc4wAEOcIADL3HgZ7nb8HdBCCCAAAIItAhktcGvWrhfsnCXdkPfXJtrDnCAAxxo14H15yXhvqVaQs/6NHAzDc9MCcQKE4hp2R3MVTx/Xw9tEP6eKew9+fuPrEjDZ9/q1G+7tYOfU2dygAMc4ECEDnxFyoAAAggggEAuCTRHkhURLswCXqf2OMABDnCAA2040Kwl4ctXDoedDaeBZxMEP7k+nkBJeGiuOVAcBx5bKwA+OeA93Z9/cF01TJ1vI99+AQc4wAEOcIADMzvQqFWW53LT30UhgAACCCDQPGdwxCI+8yKODTYc4AAHOMCBJHz8okr4yQ0+F7jdEHjveHECIeGdueJAHA4cmUrDdFMAfLrA99j3jrd8rjv5qwZSB3OAAxzgAAdO70Brb13CgAACCCCAQC4JTJ5dfWVWS35pMT/9Yo4PPhzgAAc4UF4HBts6Db3u3CT85fucBG43BD68IY5QSXhonjlQDAdanQmOBZz+PTOLh5en4TNvGWprXSxvXaDmM7cc4AAHOMCBNh341aollVflctPfRSGAAAIIINAikNWSzW0uam6E22iXiaUikQMc4AAHyurA8ZbQq5wGPlMQfGCiGKGQ8M48cSAOB/atnjn0FAgfZXP/+6vhpsVO/Za1hjEu9TkHOMABDnTBgc3SBQQQQAABBHJNIBsZvLMLC6CwWFjMAQ5wgAMcKKkDt140FLZ8yGng04XAe8bS8OxUHMGSANE8cyDfDjyzMQ07tX+e8QT09iwNd181FMZKuma71xd4cIADHOAAB7rlwOAXcr3p7+IQQAABBBBo1pNrFQLdKgS8Lrc4wAEOcKCcDkyMJuG77xUCny4Efmoy36GQ0M78cCAOB1odCZzyPTWDh29Mw6cucepXrVbOWs28mlcOcIAD3XWgMZIslSwggAACCCCQawKN2oI3KAi6WxDgiy8HOMABDpTVgS9dPhS2awkdThUEP74mjnBJiGieOZBvB1odCQTAL2Vw37XVMHme8Les9Ylxqb05wAEOcKDbDozVB1+f601/F4cAAggggMDSswdekdWSZ7u9KHp9hRcHOMABDnCgnA587MJK+A9aQr8kBN7dTMORTfkOhgR35ocD5Xbg6ZteGnzGHgZvbxxt+dysl3NNVmuZVw5wgAMc4EBPHPhFa09dsoAAAggggEDuCWT15AHFQU+KA5+H6bO1OMABDnCglA6sHU3Cd94z/JIQ9FQnY2P62sH15Q6XhIfmlwP5duCxtQLgFwfeW26shk+82alf9/7u/TnAAQ5wgAPzduD+3G/4u0AEEEAAAQRaBLJ65TYL/7wX/lJu6POCFxzgAAc4MBsHWi2ht2kJfTwI37863+GQ8M78cKC8DrQ6EEw3BcDHAuC/uKYa1p1rTZ/Nmu5n+cIBDnCAAxyYwYF65TapAgIIIIAAAoUg0Kwl77Sgz7CgO6km2OYABzjAAQ7MyoFbllTC5g9Wj4egMZ34PdVYn9lY3oBJeGhuOZBfBw5OCn9b4e+2RhruunI4NK3ls1rL7Q/YH+AABzjAAQ7M7EBrL70Qm/4uEgEEEEAAgeycBa+zqM+8qGODDQc4wAEOcGB2DowvSsI3rtYSuhUIP7kuvwGR8M7ccKC8DuxbLQDeckMaPq7ls+BX+M8BDnCAAxzosAPjIwt+W6KAAAIIIIBAUQi8LKslB21uz25zGy+8OMABDnCAA6d34PNvGwo/Xxn3aeC94+UNmISH5pYD+XTgmSntn++9ZjhMjPq8X3XK6esUfPDhAAc4wIE5OHBocmDg5UXZ9HedCCCAAAIIDGS15NtzWPA8QdbhJ8jMgcKTAxzgAAfK5sDNSyrhR9fHHQIf3pDPkEh4Z144UE4Hnlgf7+nf1ufQt1o+l20tNR71IQc4wAEOcCAfDjRrybdECQgggAACCBSKQGOkcotCIh+FhHkwDxzgAAc4UDYHxutxt4Q+MFHOkEl4aF45kE8H9ozHGQA/tKwaPnqBU79lqyGMR13MAQ5wgAP5cqByc6E2/V0sAggggAACWT25PF+LqeLGfHCAAxzgAAeK4kCjzY4Yd1xaCY+uiO808O5mPkMi4Z154UD5HDi8Mc7w95vvHg5rFqkbilI3uE6ucoADHOBAUR1YNZJcJklAAAEEEECgUASy0bMWFnXhdd2KRg5wgAMc4EBxHNh4fhJ+8IH4QuCnbipf0CQ8NKccyJ8Dj6+NKwD++ao0/OE/H9Lyuc0HsdRLxamXzJW54gAHOJBTB0bPWlioTX8XiwACCCCAQItAVkv2KC5yWly4obepwwEOcIADJXJgrJ6Er101FKYbadiVxfHPY2vyFxQJ78wJB0rmwFQadjXjCYB/vCwNH1mi5bN7ePfwHOAABzjAgZ45sFeKgAACCCCAQCEJZLXk6wqGnhUMgowSBRn+3vh7wwEOcOBEB9ptCf0Hb62ErSviCIB3Z2k4MlWysGmT8QhQOZAnB1qdBnZmcfzTavm8evTEtcdajAcHOMABDnCAA1124OuF3PR30QgggAACCDTqlbVdXiSFnkJPDnCAAxzgAAdOcGDD4kr4q0haQh9cLyzLU1jmWvhYNgf2ryl/+Lt1ZRruvMypX/ftAg4OcIADHOBA7x1o7Z1LEBBAAAEEECgkgWYtuUDx0PviAXPMOcABDnAgdgdiaQm9f1zgVrbAzXg4nRcHnplKw3TJT//+8Lpq2PQm4W/sNYPxq5s5wAEOcKBfDjTqyZJCbvq7aAQQQAABBJa/ceFZWS15rl+LqPdVwHGAAxzgAAfiduD2SyrhkRur5f1c4GYantkoMMtLYOY6uFgmB1odBsra/nlHloZ7rh4OY4viXiPVSOafAxzgAAc40FcHnhtfnL5agoAAAggggEBhCWS1ZKtioq/FxAltMc2FueAABzjAgdgcmDwvCfcvHS5tCPzEhNCtTKGbsfA5Lw7sHS9nALx1ZTV8/m1D7pF8fAQHOMABDnCAA/124GeF3fB34QgggAACCLQIZLXBr8a20Wy8whUOcIADHOBAvhxo1pLw5SuHw85G+U4D7x0TmOUlMHMdXCyLA4c3pmFns3wB8A+uq4ap8/O1PqkXzAcHOMABDnAgWge+Ij1AAAEEEECg0ASaI8kKhUy0hUy/n6Tz/p7m5AAHOMCBExz45MVD4aclbAn99AbBW1mCN+Pgch4cOLCuXOHv8ZbPdZ/3697cvTkHOMABDnAgHw40apXlhd70d/EIIIAAAgg0zxkcUVjko7AwD+aBAxzgAAfK7cDgCWHvTGNdf24Svve+crWEPqANdMhDaOYahLelcGAqDbvHyhMAP7w8DZ95q5bPM62Jvq425AAHOMABDvTHgdaeueQAAQQQQACBQhOYPLv6yqyW/FIx0Z9iAnfcOcABDnCAAy914HhL6FVpKT4beHczDUc2Cd9KEb6ZR2F+nx14akN5wt8Hrq2GmxY79asOeGkdgAkmHOAABzjQZwd+tWpJ5VWF3vR38QgggAACCLQIZLVkc58X1bZOBLlGxR8HOMABDnAgLgduvagSfvKhcnwu8FM3CYAFwBzgwPwdeGxt8QPgHY00/Kt3DIUxH4PgPpgDHOAABzjAgXw6sFlqgAACCCCAQCkIZCODd9pQj2tD3Xybbw5wgAMc6LsDI+3NwcRoEu59b/FbQj+2Zv7Bj/AMQw7E7cCRqTRMN4sdAP90eRo+fYlTv31fg/O52S4EMS8c4AAHOJATBwa/UIpNf4NAAAEEEECgWU+udQPa3iY0TjhxgAMc4AAH+uPAly4fCtsL3BJ6d5aGVngjwMOAAxyYqwMHJ4sd/t53bTVMnif8VUf0p47AHXcOcIADHGjXgcZIslRigAACCCCAQCkINGoL3tDuAujnFEsc4AAHOMABDvTLgVsvrIQtBW4JfXC94GuuwZff4w4H0rBvTTED4O2NNNx91VBo1q2f/Vo/vS/3OMABDnCAA+07MFYffH0pNv0NAgEEEEAAgaVnD7wiqyXPKgTaLwSwwooDHOAABzjQHwfWjibhu+8pZkvofauFeEI8DnBgbg48szENOwvY/nnLjdXwiYud+lUz9KdmwB13DnCAAxyYgwO/aO2VSwwQQAABBBAoDYGsnjwwhwUxJ5/LoJgxdxzgAAc4wIHYHHi+JfTKNOzKCvRPMw2HN84Q/mgPrT32phnc8HVubErDE+uKd/r3L95XDevOtT7Htj4bL+c5wAEOcKDgDtxfmg1/A0EAAQQQQKBFIKtXbiv44iyMrikwOcwBDnCAA3E58OElSdj8wWqhQuAnJoR8ToBygAOzd2D3WHEC4FbL5z9++3Bouj9xj8oBDnCAAxzgQNEcqFdukxYggAACCCBQKgLNWvJOm+ZxbZqbb/PNAQ5wgANlcGD1oiR84+ritITeO5aGZ532daLTqV4OzMKBpzcUJ/zdckMaPv5mLZ/LsL4agzqRAxzgAAdidKC1R16qTX+DQQABBBBAIDtnwetiXNSNWTHLAQ5wgAMcKIcDrZbQ2wrSEvrpm2Z/+s+JScw4EK8Dj00UIwC+95rhMHGu8FddUY66wjyaRw5wgANxOjA+suC3JQUIIIAAAgiUjcDLslpyUHETZ3Fj3s07BzjAAQ6UwYFbllTCj67Pf0vox9fGG2QJMc09B2bnwJGpNEw38x0Ab1uVhruuHNbismgtLl0vZznAAQ5wgAMnO3BocmDg5WXb9DceBBBAAAEEBrJa8u0ybP4agxCDAxzgAAc4EK8D4wVoCb27mYZWqCMIw4ADHDiTA4cm8x3+bl5WDR+90KlfdUe8dYe5N/cc4AAHyuNAs5Z8S0SAAAIIIIBAKQk0Riq3KFrKU7SYS3PJAQ5wgANldKDR5lPqd1w6FB5dkd/TwK1Q50zBj+9jxAEO7FuT3wD4m+8eDmtG21xrR9r8uTb/H1/G9c2YOMIBDnCAAxzotwOVm0u56W9QCCCAAAIIZPXkcoVGvwsN789BDnCAAxzgQKccmDo/CT+4Lp8h8GNrBFvCTQ5w4PQO5LX988+1fD65XaQ/C+45wAEOcIADJXBg1UhymYQAAQQQQACBUhLIRs9a2KkNV69j854DHOAABzjAgTw4MFZPwteuGgrTjTTsyvLzz+5MG2jh3+nDP3zweXJ9/k7/bl6Who8s0fI5D+uba1BncYADHOAABzrswOhZC0u56W9QCCCAAAIItAhktWSP4qHDxUMJnoDjBCc4wAEOcCCvDrTbEvoPLq2ErSvyEwC3wuiD6wVcQk4OcGBmB/aM5ysAbrV8Xt1uy2f3QE6CcYADHOAABzhQLAf2SgcQQAABBBAoNYGslnw9rxu8rkv4wAEOcIADHODAfBzYuDgJ339/flpC71s9c/AjFMOGA3E78PTG/IS/W1em4c7LnPqdz/rjd9UvHOAABzjAgdw78PVSb/obHAIIIIAAAo16Za2CJPcFiScIi/UEofkyXxzgAAdy5EDeWkIf3hh3yCXkNP8cOLUDBybyEQD/8Ppq2PQm4a97ZPfIHOAABzjAgXI70NoTlwwggAACCCBQagLNWnKBgqbcBY35Nb8c4AAHOMCBJHzqkkp4ZHn/TwM/se7U4Y9QDBcOxO3ArrH+B8D/5l3DYbxuzbRmcoADHOAABzhQfgca9WRJqTf9DQ4BBBBAAIHlb1x4VlZLnlPYlL+wMcfmmAMc4AAHYndg8rwk3Hdtf0PgPWNpeHYq7qBL0Gn+OXCiA4du6m/4u3VlNXz+0iHdK3LUvSL29dr41awc4AAHONBlB54bX5y+WjKAAAIIIIBA6QlktWRrlxdVmwk2EzjAAQ5wgAMcyIUDzVoS/uTtw2FnloZdffrn6Q0nhj/CMDw4ELcD+9f0LwB+8LpqmNLyORfrk3tyYQcHOMABDnCgZw78rPQb/gaIAAIIIIBAi0BWG/yqAqNnBYbNBQEIBzjAAQ5wIAcO3HbxUHj4xv6cBn58bdxhl7DT/HPg1w4c2ZSG6az3AfCOLA33XD0cxha5D3IvzAEOcIADHOBAdA58RSqAAAIIIIBAFASaI8kKhU50hY7wIQfhg793/t5xgAMc6K8D689NwveWDvf8JPDuZhqOaAMdhIC/DgGxiJfFk+t7H/4+vCINn32Lls/W4P6uwfjjzwEOcIAD/XKgUassj2LT3yARQAABBBBonjM40q8F1/sq9jjAAQ5wgAMc6KcDrZbQX75yOOxs9PY08KHJeAMvYae558CvHdi7urcB8APvHw4bFlc8DOphUA5wgAMc4AAHonWgtRcuEUAAAQQQQCAKApNnV1+Z1ZJf9nPz1Xvb/OcABzjAAQ5woGsOjJyZ7a0XVcKWG3r3ucD7V/86ABKGYcGBkjsww4n/wxt7F/4eb/lcF/52ba0RJEQbJHDqzHUWRhhxgAM5cuBXq5ZUXhXFpr9BIoAAAggg0CKQ1ZLNOVqI3TjaPOAABzjAAQ5woOcOrB2thHvf27uW0NpAlzz022R8gu3TO3BgXW8C4J8uT8OntXzu+Zri/lrYwQEOcIADHMilA5ulAQgggAACCERFIBsZvFNRksuixEaFAIQDHOAABzjQYwf+6HeHwo5G908DP7nu9OGQ8AwfDpTbgd1j3Q+AH7i2Gia1fLaO9ngdtbdgb4EDHOAAB/LrwOAXotr0N1gEEEAAAQSa9eTa/C7MiiZzwwEOcIADHOBAbx249cJK2PKh7n4u8L7xcodbwkvzy4GZHXjqpu6Gv9sbabj7qqHQrPf2/53WKrw5wAEOcIADHMizA42RZKkkAAEEEEAAgagINGoL3pDnxdm1KR45wAEOcIADHOi1A2tHk/Cd93Q3BG59BqiQDAMOxOfAY2u7FwD/5MZq+MTFPuu312uG91OncIADHOAAB/LvwFh98PVRbfobLAIIIIAAAkvPHnhFVkueVajkv1AxR+aIAxzgAAc40FsHvnT5UNi+sjstoZ/QBloA7rOCo3PgyKY0TDe7EwD/+2uqYd25vf1/pDUJbw5wgAMc4AAHCuLAL1p74JIABBBAAAEEoiOQ1ZMHCrJY+wwnn+HEAQ5wgAMc4EBPHfjIkiRsXtb508B7xuI7+ei0qzmP3YGDk50Pf7V8tvHuXp4DHOAABzjAgTM6cH90G/4GjAACCCCAQItAVq/cplA4Y6HQ081m82E+OMABDnCAA/lxYPWiJPy7dw2HXVlnTwM/tUEgGHsgaPxx/R3Yu6azAfCWG9LwiYu0fLZe5me9NBfmggMc4AAH8uhAc2Twk1IABBBAAAEEoiTQrCXvzOPi7JoUjRzgAAc4wAEO5MmBVkvobR1sCf342rjCL2Gn+Y7ZgWemOhv+/vk11TBxrvA3T2uEa1GzcIADHOAAB3LqQD15R5Sb/gaNAAIIIIBAds6C1ylQclqgaPPp5DUHOMABDnAgVw7csqQSfnx9Z1pC726mofWZoDGHYsZu/mNxoPW53zuz+f+zrZGGu64cztX/F91LupfkAAc4wAEOcCDPDoyPLPhtCQACCCCAAAKxEnhZVksO5nmhdm0KSQ5wgAMc4AAH8uLA+KIkfOPqzrSEPjQpAIwlADTOuF3fPT7/8PehZdXwsQvbOPU7Yr3Iy3rhOrjIAQ5wgAMc6LsDhyYHBl4e66a/cSOAAAIIIDCQ1ZJvK0j6XpB4kt8pNw5wgAMc4EAOHGi0eQ13XDoUHl05v9PA+9fEHYoJRc1/DA4c3jD/8Pfe9w6HtaNthL9t/v/LvZ97Pw5wgAMc4AAHYnCgWUu+ZesfAQQQQACBqAk0Riq3xLDoG6PilgMc4AAHOMCBTjowdX4SHvzA/ELgZzYKAWMIAY0xXs8fn5h7APzzVVo+d/L/2V5LDcABDnCAAxyIzYHKzVFv+hs8AggggAACWT25XAEUWwFkvJznAAc4wAEOdMKBsXolfP0dQ2E6S8OuOfzz5Lp4gzGhqLmPwYFdY3MLgDcvS8NHLmjn1O+g7hFOPnOAAxzgAAc4wIFTOLBqJLnMzj8CCCCAAAJRE8hGz1rYiQ1Qr2EjnQMc4AAHOMCBsjnQbkvoz721EraumH0IvHdcCBhDCGiMcXre+pzvndns//nmu4fDmkXWk7KtJ8bDaQ5wgAMc4EBvHVj+xlenUW/6GzwCCCCAAAItAlkt2aMI6W0RgjfeHOAABzjAgXI5sHFxEr4/h5bQh7WBDgLSOAPSss9763O+ZxMAb12Zhi9eNvT/s3fvcZbU9Z3/Gy+5mY0rTledi8m6v/WX7LLZS8JuXJmuMz0MDBeJGBCXQBYkICBmBGbm1Om599zAqBslMTFGTaL5kSybNQnGNd6yeFk1ovESNCKCwAzDMAwzMAyo8cL396gmHWaG6e7T0+dSl+cfPHroPn266vV9nW996vOub5UVPEdZweN4Wa7jpfE0nhzgAAc4MAAHduv6I4AAAggggMCTAfDNAzjwamZoZnCAAxzgAAc4UGoHJlpReO8FtbCz3f1q4Ic2CP/KHgTav+o5/vi2ZtjZ6T4A/sJrG+G6U7u55bOGsfNWDnCAAxzgAAc4MJcD7ST6C01/BBBAAAEEEBgZGWm34vVzHTj9XHHFAQ5wgAMc4AAHunPgt86Kwx3XNrp6LvD9E83wrW3VC8iEosa8zA7s39R9+Jvd8nmtWz6X+uIgx87ujp044cQBDnCAAz1zYCxep+mPAAIIIIAAAiMjI50kOq1nB1grmzQvOMABDnCAAxzgQJg8OQqfvqK7EPjAZmFgmcNA+1Y9v+9fO3cAnN3y+R0vt+rXeahmPwc4wAEOcIADvXag3YqWa/ojgAACCCCAwMjIyLUvecHxaRI90euDrfdTwHGAAxzgAAc4UGUHJpInbwmdPQf0vln+27uuegGZUNSYl9WB7LneO+a4/fPnr6qH7W757GIpF0txgAMc4AAHONAPB55Ys6z5fE1/BBBAAAEEEPhHAmkS3VnlBq19F1BwgAP2M3ySAAAgAElEQVQc4AAHONAvB244Kw5fv2bm1cC7Os3w+HaBYFkDQftVLbez53pnF30c7b9702b4y4vqYcItn/vR7PWeQgQOcIADHOAABzIHvqHhjwACCCCAAAKHEEiT0T/pV9PT+2qoc4ADHOAABzhQdQc2nRyFT726PuNK4IcnqxWSCUWNdykd2NYMuyaOHv5+fWUz/PYv1jSmNaY5wAEOcIADHOBAfx3440Na3v6JAAIIIIAAAp2xaGXVG7P2XzjBAQ5wgAMc4EA/HegkUbjxlfWwo/301cB73AY6lDIQtLK7UuP6yJajh7+3XtUIW08xv/ZzfvXe/OIABzjAAQ5wIHOgncTX6vQjgAACCCCAwCEEOotHxxRKCiUOcIADHOAABzjQfwf++xlx+OrVT38u8GNbrQoVAnOgyA48uP7wAPifbvnciq306e9KH3zx5QAHOMABDnBgyoF2Ei0+pOXtnwgggAACCCAweWLjx9Ik+p6mb/+bvhhjzAEOcIADHODA+vE4fOzSw28JvX+j8K/I4Z9tr7a/j29rhp2dpwLgr1/rls+OdY51HOAABzjAAQ4M2IHvr14eP0enHwEEEEAAAQSOIJAm0ZcHfFB2dZ6r8zjAAQ5wgAMcqKwD/3RL6NVPrgbePVHtAE2AavyL7MD+TU+Fv5++shEml1n169xS058DHOAABzjAgQE78KUj2t3+FwEEEEAAAQQyAunY6DsHfFCubMMXZwUwBzjAAQ5wgAPTDrwpuyX06558LvDBLULAIoeAtr26/j6wthnuSZvhf11QCxMu7HGexwEOcIADHOAAB4bgwOg7dPkRQAABBBBA4CgEOq3oiulGpK+a0hzgAAc4wAEOcGBwDmwYj8L/+dVGeGhDdQM04amxL6oD2fO7//7aRnjLmVb9Om4M7riBNdYc4AAHOMCBwx1oj0WXH6Xl7VsIIIAAAggg0E4W/bzC4fDCAQ88OMABDnCAAxwYpAN//F9roaghmO0W4FbVgW+mjbDpZHPlIOdKf4tvHOAABzjAAQ4c6cBEa/TndPgRQAABBBBA4CgELj9x5NlpEn3ryIOn/1dQcYADHOAABzjAgcE5cPuquhB4uzC1qmFqEff7jWdY+esYMbhjBNZYc4ADHOAAB47qwLez3vZRWt6+hQACCCCAAAIZgbQVfUYRcdQiYgjPrbAdXOQABzjAAQ5U0YE/eqVVwEUMAW1zNUP7O9oN5wmeccgBDnCAAxzgAAeG78CndfcRQAABBBBAYBYCaSu+oYqNVvssYOAABzjAAQ5wIC8OrBuPwsObG1YBWwXMgQI48KcX1jR8h9/wNQbGgAMc4AAHOFBxBzpjo2+ZpeXtRwgggAACCCDQSaJfyUvz03ZoxHOAAxzgAAc4UFUHPnWV20BbUVvNFbVFGveDW5th0rN/Ndwr3nCv6nHafqtROcABDuTMgVZ0oc4+AggggAACCMxCIF286GcUMDkrYDQUNJU4wAEOcIADlXPgbWfHVn8WYPVnkcJK29r7QP3zr6tXbm5yruhckQMc4AAHOMCBPDqwZmzRT8/S8vYjBBBAAAEEEBgZGTkuTaJH8nggt00KTA5wgAMc4AAHquJApxWF3RvcBlpo2fvQEtPeMX3XubEA2AVKHOAABzjAAQ5wYPgOPJL1tHX2EUAAAQQQQGAOAmkSfbQqzVX7KUjgAAc4wAEOcCCvDnz40ppVwFYBcyCnDjy0qRnWLBEA53X+tF2O7RzgAAc4wIFKOfDROdrdfowAAggggAACGYH2WHy9IqlSRZIrFYd/paIxMAYc4AAHOPA0B950RiT8y2n4ZxVt71bRFpXlLZfXnvaZdQ7lHIoDHOAABzjAAQ4M3oGsl62rjwACCCCAAAJdEEhb0TmKlcEXK5hjzgEOcIADHODAkQ7clboNdFEDQttd7pD4zWdZ/XvkfOX/HcM4wAEOcIADHBiKA63onC5a3l6CAAIIIIAAAitbx//kUA7WVv5YRcABDnCAAxzgQNUdGDu8afTpq+pWAVsFzIEcOrBu/PDPqvMnPDjAAQ5wgAMc4MBwHMh62Tr6CCCAAAIIINAlgTSJ7le0DKdowR13DnCAAxzgAAemHchuM2slablXkhrf4o3vwa1NF+tU/WId++8zwAEOcIADHMiLA7u7bHd7GQIIIIAAAghkBNIkunm68eirJjQHOMABDnCAAxwYjgN/9atWAAtIixeQln3MHtokAHZMGM4xAXfcOcABDnCAA4c70E6iv9DNRwABBBBAAIF5EGi34vUKisMLCjzw4AAHOMABDnBg0A78xX+zArjsYaL9K17Afd+6Rl5WvNgOq684wAEOcIADHKi2A2Pxunm0vL0UAQQQQAABBDpJdNqgG5z+nqY6BzjAAQ5wgAMcONyB//HLAmABafEC0rKP2Tc7AmBz9eFzNR54cIADHOAAB4bjQLsVLdfJRwABBBBAAIF5ELj2JS84Pk2iJxQvwylecMedAxzgAAc4wIHMgY9d3vAM4O0C0LIHqkXbv70bm2HyZHOU4xQHOMABDnCAAxwYsgNPrFnWfP48Wt5eigACCCCAAAIZgTSJ7hzyQbzatzBxCxvjzwEOcIADHKisAxOtKHzgonrYs1b4WbRw0PaW39kDm5vhq1c3w68v1/R1vsgBDnCAAxzgAAeG6MA3dPERQAABBBBA4BgIpMnonwzxAF7Zhi/mCmcOcIADHOBAyR0Ym33/NiyNw99c0Qj3pc3wwJryh2kCU2NcNAce3tSc+nx+c1Uz/M7Las5bXKzEAQ5wgAMc4AAHhuPAHx9Dy9uvIIAAAggggEBnLFqpAT17gxYffDjAAQ5wgAMc6KUD20+Nw20rngx/swB494RwsGjhoO0tv7P7Nz4ZAGef0R1pM9x4Xl3TdzhNX9xx5wAHOMABDlTYgXYSX6uDjwACCCCAAALHQKCzeHSslw1N76VBzgEOcIADHOAAB2Z24C1nxuEb1z4VLGXh0q5O+cM0gakxLpoD+w4JgLPPafbfBy+uh+zW7eY4DDjAAQ5wgAMc4MBgHGgn0eJjaHn7FQQQQAABBBCYPLHxY2kSfU/RMpiiBWecOcABDnCAA9V14A/PrYUdqw8Pf6cC4FQ4WLRw0PaW39mHNjz9s5p9Xj99eT2sH4+FwBVeieQ4Xt3juLE39hzgAAcG7sD3Vy+Pn6ODjwACCCCAAALHSCBNoi8rYAZewGgaaRpxgAMc4AAHKuJAJ4nCey+oTa0gnF5JeOTXx7eVP1ATmhrjIjmwd/3RA+Dss/vlFY2w7RTnD84hOcABDnCAAxzgQJ8d+NIxtrv9GgIIIIAAAghkBNKx0Xf2+WCtwV2RBjePFP4c4AAHOMCBwx1YtyQKH7+sPmv4mwVKj20VDhYpHLSt5ff1wXUzB8DZZ/YbK5vhhjOtBDbnHz7n44EHBzjAAQ5woJcOjL5D9x4BBBBAAAEEFkCg04quUJz0sjjxXnziAAc4wAEOcCAKk8vi8IWr5g5/szDpoAA4CFXLH6oWaYz3zBEAZ5/be9vN8K5fqrnY1cWuHOAABzjAAQ5woA8OtMeiyxfQ8varCCCAAAIIINBOFv28Jq1GPQc4wAEOcIADHOidA284LQ5fu3r2FYRZgDT936ObhX9FCgdta/l9fWDtU5/P6c/p0b7uTJvh5gtrIbvVuzkUAw5wgAMc4AAHONA7ByZaoz+nc48AAggggAACCyBw+Ykjz06T6FsKlN4VKFhiyQEOcIADHKiuA7/zi7XwzVXdhUfTgdIBAbAVwNvLH6oWKTjfvWZ+n+FbLq2HtUuqO+855hl7DnCAAxzgAAd67MC3s571AlrefhUBBBBAAAEEMgJpK/pMjw/SroC3CoADHOAABzjAgco5cOMr62Fne37BURYCPzIp/CtSOGhby+/r/RPz/xx//jWNMHmy5q/zSg5wgAMc4AAHONADBz6ta48AAggggAACPSCQtuIbenBgrlyTFzMFLQc4wAEOcIADmQMTrSj81UXdPe93etXvoV8f3lT+QE1oaoyL5MCuzvwD4Owz/dWrm+HXl5sXHRs5wAEOcIADHODAQhzojI2+pQctb2+BAAIIIIAAAp0k+pWFHJT9rqKOAxzgAAc4wIHSOjA2+9huWBqHv7my8U/P8z002O323/s3CgeLFA7a1pL7uu3Ywt/pz3t2C/jfeVnNxbHugsEBDnCAAxzgAAeO1YFWdKGOPQIIIIAAAgj0gEC6eNHPlLZpe6yFht9TpHKAAxzgAAc4MIcD20+Nw20rFhb+ZqHRvg0lD9Q839YzjgvkwOMLDICzz/SOtBluPK9uDp1jDnUOOvsFRvjgwwEOcIADVXVgzdiin+5By9tbIIAAAggggMDIyMhxaRI9XNWiwn4rqDnAAQ5wgAMcmK8DbzkzDt+4dmErBadXDO5dLwC2qpYDeXHgsa29+Vxnn+8PXlyfukX8fOcXr3dM4gAHOMABDnCgwg48Mjky8gwdewQQQAABBBDoEYE0iT5a4cLC1fmuzucABzjAAQ5woGsH3n1uLexY3buQaO864V9ewj/bwcWDPQyAsxD4U1c0wvrxuOv5xTmZhj8HOMABDnCAA1V2oJNEH+lRu9vbIIAAAggggEBGoD0WX1/l4sK+K645wAEOcIADHJjLgU4ShfdeUFvQ836nV/0e+nWPANgtkgt0i+Syh+SPbundxR3Tn/Mvr2iEbaeYY+eaY/2cIxzgAAc4wIHqONCe8QLk+DrdegQQQAABBBDoIYG0FZ2jyKpOkWWsjTUHOMABDnBgfg6sWxKFj1+28Of9TgdCh359YK1Vl2UPFe1fcRw/MNn7ADj7vH9jZTPccKaVwI498zv24IUXBzjAAQ5UzYHVY9Ev9bDl7a0QQAABBBBAIB0//gVVKyjsryKaAxzgAAc4wIFuHNi8LA5fuKre85W/0yHw7onihGOCTGNVdgce6VMAnH3e7203w7vOqbkd9IwrfhyTujkmeQ1POMABDnCgzA5c+5LnN3XqEUAAAQQQQKDHBNIkur/MBYR9UyBzgAMc4AAHODBfB95wehy+dnV/VgROB8D3C4DdAtotoHPjwMOb+vt535k2w80X1kJ2S/n5zkdejxkHOMABDnCAAyV3YHeP293eDgEEEEAAAQQyAmkS3VzyIkKTRaOJAxzgAAc4wIGuHXj72bVw9+r+hkFZCLyrY1Vp2VeV2r/iOL5/Y/8/89nn/pZL62HtEk1s558c4AAHOMABDnBg2oF2Ev2FLj0CCCCAAAII9IFAuxWvnz7g+qr44gAHOMABDnCgyg7c+Mp62NkeTBB0XxYAbytOQCbMNFalcGCGz9y+DQP63KfN8PnXNMLkyY41VT7W2Hf+c4ADHOAABw5xYCxe14eWt7dEAAEEEEAAgU4SnaboOKTosEKq6xVSvOENBzjAAQ6UxYGJVhT+6qL+Pe93+rbPR359fIYwqhRBm9sb5+b2xnyaO7x/aP3gAuBsHvjq1c3w+tNidbdzLw5wgAMc4AAHKu9AuxUt16FHAAEEEEAAgT4QuPYlLzg+TaInytLAtR/CCA5wgAMc4AAH5uPAxqVR+JsrG+HIcHYQ///Y1rmDKeEdRhzovwN7BxwAZ/PLN1c1w9teJgSez3zttY7vHOAABzjAgdI58MSaZc3n96Hl7S0RQAABBBBAICOQJtGdCqjSFVCVv4KQ05zmAAc4wIG5HNh+ahxuWzGc8DcLgA5u6X+wJTzEmANzO/DgusGuAJ6+wGRH2gzZrefnmqv83PGMAxzgAAc4wIGSOvAN3XkEEEAAAQQQ6COBNBn9k5IWEZopbqXDAQ5wgAMc4MBRHXjLS+PwjWuHE/pMhz8HNs8dTAnvMOJA/x3Ys2a4c8EHL66H7Fb0zskw4AAHOMABDnCgYg78cR9b3t4aAQQQQAABBDpj0cqKFReaK8IADnCAAxzgQIUdePe5tbBj9XADnywEFgD3P9gTnmLcjQO7hxwAZ/PBp65ohPXjbgntvFTwwQEOcIADHKiOA+0kvlZnHgEEEEAAAQT6SKCzeHRMcVWd4spYG2sOcIADHKiqA50kCu+9oDaU5/1Or/o99OvDm4Rz3YRzXsOTfjuwe2L4F4Rkc8OXVzTCtlMco6p6jLLf3OcABzjAgao50E6ixX1seXtrBBBAAAEEEJg8sfFjaRJ9r2pFhv1VWHOAAxzgAAeq48C6JVH4+GXDe97vocHv9L/3C4BDv4M97y887saBXZ18BMDZ3PCNlc1ww5lWAjs+V+f4bKyNNQc4wIHKOvD91cvj5+jMI4AAAggggECfCaRJ9GUFV2ULLrdBrfBtUH3ufe45wIEqOLB5WRy+cFU9Nyt/pwPgfRuFc92Ec17Dk347sCvNTwCczQ/3tpvhXefU1OhqdA5wgAMc4AAHyuzAl/rc7vb2CCCAAAIIIJARSMdG31mFBrB9FHRwgAMc4AAHquXAG06Pw9euydfK3+kA+KENgr1+B3ven2NzOfD49nyFv9Pzw860GW6+sBayW9c7bmHAAQ5wgAMc4ED5HBh9h648AggggAACCAyAQKcVXVG+QkJxaEw5wAEOcIADVXbg7WfXwj2r8hnuZCHP3vXCubnCOT/nSL8deHxbfueIbJ645dJ6WLvEsazKxzL7zn8OcIADHCijA+2x6PIBtLz9CQQQQAABBBBoJ4t+vozFhH1SJHOAAxzgAAeq6cCNr6yHne18BzsPrhPu9Tvc8/4cm8uBg1vzPU9kIfDnX9MIkydXcy53DDfuHOAABzjAgXI6MNEa/TkdeQQQQAABBBAYAIHLTxx5dppE31JUlbOoMq7GlQMc4AAHquLARCsKf3Vx/p73O31b10O/7lkrnJsrnPNzjvTbgYNb8h8AZ/PG7dc0whtPj90O2i2xOcABDnCAAxwogwPfznrRA2h5+xMIIIAAAgggkBFIW9FnqtIctp+CEA5wgAMc4ED5HNi4NAqfvbIY4W8W6DywRrjX73DP+3NsLgcObC5GAJzNGXetaobf/sVaGZq+9kF4wQEOcIADHKiyA63oM7rxCCCAAAIIIDBAAp0k/k3N8PI1w42pMeUABzjAgSo4cP3yOHzldY1w6ArbvP9794Rwbq5wzs850m8HDkwWJwDO5rQd7Wb4/84TAlfhuGYf1W8c4AAHOFBWB7Ie9ABb3v4UAggggAAC1SbQSeKz0yTaV9bCwn4pmjnAAQ5wgAPldeA3z4rDXSuLFf5mQc6ujnCv3+Ge9+fYXA48vKlYAfD0hS0fvLgeslveO7ZhwAEOcIADHOBAAR3Y21k8eka1u/H2HgEEEEAAgT4TWHHGi344bcU3pEn0RAGLBQ2PKt8uxr7znwMc4AAHkii8+9xa2NEuXvg7FQCnwrm5wjk/50i/Hdi/sZgBcDaHfOrV9bBhXNPbeSwHOMABDnCAA4V04Adpa3TbeeeNPLPP7W9vjwACCCCAQPUITIyPvqidRJ9XJBWySNL0F/xwgAMc4EClHei0ovC+XynO836nV+0d+fXxbQK+fgd83p9jszmwb0NxA+BsPvnyikbYdorzGee0HOAABzjAAQ4U04F2MnrL2mRRvXqdeXuMAAIIIIBAnwh0kvj8ThIdUBwVszgybsaNAxzgAAeq7MC6JVH4xGXFXPV7ZAD8mAA4zBbO+Znwtt8OPFTwADibU+5c2Qw3nBlX+qKgKh8T7buakAMc4AAHSuDAg50kOq1PbXBviwACCCCAQDUITI6/8Ef+8ZbPGgRWjnGAAxzgAAc4UDgHNi+LwxeuKkf4mwU3B7cK+Pod8Hl/js3mwN71xV4BPH1Ryb3tZnjXObXCzeklaFhjrpbiAAc4wAEO9MaBJ9JW/Hq3hK5GRmEvEUAAAQR6TGDN+PP/dZpEX3aS7cpADnCAAxzgAAeK6MAbTo/D164pT/ibBTePbhHOzRbO+Rk/+u3Ag+vKEQBn88nOtBluvrAWOr1pwmpm48gBDnCAAxzgwMAdcEvoHgcC3g4BBBBAoPwE2mPRRWkSPdZVs3dMU7wrTorAgReBxsVnkwMc4EB1HXj72bVwz6ryBDXTq/YObBbw9Tvg8/4cm82BPWvLN6/ccmk9rF1S3eOFWsHYc4ADHOAABwrvwJ50SXRq+Tv29hABBBBAAIEFEJgcH/3xdhL9kcKn8IWPsFXgzgEOcIADlXXgxlfWw852+UKaLAR+ZFI4N1s452f86LcDD5QwAM7mls+/phEmT3YO5DyYAxzgAAc4wIHCOvD9tBVNTo6MPGMBrXG/igACCCCAQDkJdBbX/m2aRF9R6BS20Klso5+znOUABzjAgcyBiSVR+PAl9TC9WraMXx/eJODrd8Dn/Tk2mwO715Tz4pJsvrz9mkZ44+mxcwoXkHGAAxzgAAc4kE8HurgLZTuJ/ro9PlorZ/feXiGAAAIIIHAMBP7xls+Pa6BroHOAAxzgAAc4UEQHNi6Nwt9cWa7n/R4twN6/UTg3WzjnZ/zotwP3T5Q3AM7mnLtXNcPbXiYELuJx0Dar3zjAAQ5wgANPOtBpRfd1Fo+OHUOL3K8ggAACCCBQHgIrXnz8T6TJ6P9QICgSOcABDnCAAxwoqgPbT43DbSvKH/5m4cw+AXDod8Dn/YXIszmwq1PuADibZ3akzXDT+fV8rvyxIsu4cIADHOAABzjQnQPfc0vo8mQY9gQBBBBAYJ4E0sWL/lOaRHcWtdlruwUVHOAABzjAAQ685aVx+MbK8gcy06uB964Xzs0WzvkZP/rqwLbqzDXZnPPBi+thomU1sFpDrcEBDnCAAxwosgOjf7lmWfP582ybezkCCCCAAAKFJXBcuxVfnSbRPyhgilzA2Hb+coADHOBAtR1497lx2NGuxsrffwqA1wn4+hrwbccX35kdeLxiAXA273zqikZYPy4EVm9Uu94w/safAxzgQF4dGO1yNfTojk4rOqmwnXwbjgACCCCAQDcEVo03FqVJ/H6FS14LF9vFTQ5wgAMc4MBcDnSSKLz3glqYDkWr9HWPANgtoIXUQ3Pgsa3VWgE8Pbf+3a81wrZTHJvmOjb5OUc4wAEOcIADuXbge+nYaGdkZOS4bnroXoMAAggggEChCLSTRUs6reg+xUiui5Eur1yzDzzmAAc4wIFqOrBuSRQ+flm1Vv1OhzDZ1wfWzLw60cpNbDjQXwcOVjQAzuaeO1c2w1teWnOu0t0zB3HCiQMc4AAHOJBfB26eGHvu8wrV1LexCCCAAAIIzEJg+pbP39Usr2az3Lgbdw5wgAMcKIMDm5fF4QtXVTf8zUKY3RP9DbgEiPhyYGYHHt1SzRXA0xeh3Ntuht8/RwhchuOpfVAXcoADHOBAxR24N10c/5dZeul+hAACCCCAQP4JrD4pjtIk+mDFD+quusvvVXfGxthwgAMc4EBXDrzh9Dh87Zpqh79ZCHO/AHhot/8VjM4cjFaFzYHN1Q6AszloZ9oMN19YC52WxrlzbA5wgAMc4AAHCu3Ad90SOv/Zhi1EAAEEEJiBwEQrPjlNovsVI4UuRrpqihtjY8wBDnCAA2V24O1n18I9qwQvWfiyqyOEq0rYaD/z5/ojk+ah6dXAt1xaD2uXOPaW+dhr3/jNAQ5wgAMVceDPrxn/5/98hva6byOAAAIIIJAvApPjI89KW9FkmkQ/qMiBWkhq9RgHOMABDnCgpA7c+Mp62NkWukyHLvdlAfC2/AVjwkpjUgUHHt5kLvqnuShths+/phEmT9Ycd87NAQ5wgAMc4EDhHbgnTWq/kK8Ov61BAAEEEEDgCAIrW8f/ZJpEn1R4FL7wEGSUNMjw2fTZ5AAHONCdAxNLovDhS+rh0LDBv58Mnx4XALsN9HaB8zAC5/0bBcBHzsO3X9MIbzw9du7i3IUDHOAABzjAgaI78J12K776iFa7/0UAAQQQQCAfBNJW/LI0ifZpLHfXWMYJJw5wgAMc4EA+Hdi4NAqfvcLzfo8MWqb//7Gtwr9hhH/+Ju/2CYCPelHO3aua4W1nC4HVFPmsKYyLceEABzjAgXk5MBa9t3PK856bj26/rUAAAQQQqDyBy08ceXbail+fJtET8zqguTKt6Fem2X4Oc4ADHOBA6RzYfmocblsh/J0Oe4/29eAWQZwwlgPDcOCh9VYAH21Oyr63I22Gm86vl+6Y5PxaaMABDnCAAxyopANf74xF/6HyoQMACCCAAALDJdA+KfpX7ST6/JzFyFglD9YaEIIRDnCAAxzgQIEc+K2z4nDXSuHvTAHL9PcPCIDdAtotoIfiwF4B8FFXAE/PTdnXD1xUDxOtbs49Rx2fC3R8nrPfYF/4zAEOcIAD5XPgW+2x0V8dbuffX0cAAQQQqCyBzuLGT6VJ9KCTsW4aDF7DEw5wgAMc4ECeHXj3K2phR1v4e2iQMtO/D2y2+nMYqz/9Td7tWWcF8Ezz0qHf//Tl9bB+3C2h83zMtW1qQg5wgAMc4EB3DngucGWjFzuOAAIIDJdAOha9ycG6u4M1TjhxgAMc4AAH8unARBKF9/23+pyryg4NF6r+74c3CeKEsRwYhgN71giAu51//+7XGmH7Kfk87qgHjAsHOMABDnCAA907EO8/77yRZw43BfDXEUAAAQQqRyBNRv+k+4OVAztWHOAABzjAAQ4M2oHZb/G5bjwKn3i1Vb/dBirTr9svAB7K7X+HETj6m/kKuncLgOd1sc4d1zbDm8+0EljtMejaw9/jHAc4wAEO9NaBFS8+/icqFzzYYQQQQACB4RJIx6KrHNB7e0DHE08OcIADHODAYBzYuiwKX3yt8Hc61J3P130b8hWKCSmNR1Uc2D1hBfB85qrstfeuboZ3/lLNcxHL91xEY2pMOcABDnCgKg58abgJgL+OAAIIIFBJApPjI89Kk+jPNaoH06jGGWcOcIADHOBAbxx40xlxuOMa4e98g5Tp1z+0XuBYlcDRfubL9V0dAfD0PDSfrzvTZnjvBfXQ0SivSqPcfnKdAxzgAAfK4cBY9ED7pB/RfRsAACAASURBVNH/WMngwU4jgAACCOSCwHHZw+jTJPqupnRvmtI44sgBDnCAAxzonwO/d3Yt3LNKiDKf8OTI1+4VALsF9PZ8BaNVCaoFwAubu2+5tB7WLunf8cWxG1sOcIADHOAAB3rlQDsZvXXVSfV/kYvuv41AAAEEEKg2gXayaEmaRPf36iDnfRRMHOAABzjAAQ702oEbX1kPO9sLCxCODEOr+P8PrhP+VSVwtJ/5cf3xbeauXsy3n7+qESZPdnzt9fHV+3GKAxzgAAc4MLcD7e5WZj+RtuIbLj9x5NnVThvsPQIIIIBArgisPimOOkn0kbkP+KPluA1Hdwdt+4oTBzjAAQ5wYMgOTCyJwocvqYdehAfeoxn2rM1PKCagNBZVcUAA3LsA/PZrGuGNp8eOzUM+Ns/dN5i7ke49MOIABzjAgTI50EmiA2ky+opcNfxtDAIIIIAAAtMEzjtv5JlpK5pMk+gHZToA2xcFJQc4wAEOcKCYDmxcGoXPXuF5v70Mrh9YI3SsSuhoP/Pj+sGtvQtAezkfFPW97l7VDG87WwistilmbWPcjBsHOMCBUjrwhfZJ0b+a7rH7igACCCCAQG4JdJJFL02TaJ+CpJQFiavlXS3PAQ5wgAOFcGD7qXG4bYXwt9cBze6J/IRiAkpjURUHDm4RAPd6LtuRNsNN59cLcTxzXu28mgMc4AAHOFBqB94zeWLjx3Lb6LdhCCCAAAIIHElgZev4n0xb0WcUKKUuUDRMhEAc4AAHOJBLB37rrDjctVL42+vAJHu/XR2hY1VCR/uZH9cPbBYA92M+y97zgxfXw0TLamDn7c7bOcABDnCAAwN34FtpK770yJ66/0cAAQQQQKAQBCbHR56VtuLXKyAGXkDkshnPAx5wgAMc4MAgHHj3ubWwoy387VdYsivNTygmoDQWVXHgwKQAuF9zWva+n76iETaMC4EHcYz2N9SCHOAABzjAgSkHbu+04n9XiAa/jUQAAQQQQGA2AqvHol9Kk+gRB3hFHgc4wAEOcIAD/XKgk0ThvRfUQj9DAu/9ZAj1+DbBY1WCR/uZD9cf3iQA7vf8+5XXNcJ1pwqB+3WM9r7qPw5wgAMc4MCTDrTHohsnx0d/fLZeup8hgAACCCBQKAJrxhb9dJpEX3awV/BxgAMc4AAHONBrB9aNR+ETl1n12++AZPr9HxMAB8FoPoLRqozD/o0C4On5p59f71zZDG95ac3dlDzeggMc4AAHOMCBfjjwnXYrvrpQDX0biwACCCCAQLcEJsdf+CNpMvqOXjd9vZ8ggQMc4AAHOFBdBzYvi8MXrhL+9jMUOfK9D24V/lUleLSf+XB93wYB8JHzUL/+/952M/z+OUJgdVV16ypjb+w5wAEO9MWBe1ePxS/utofudQgggAACCBSWQHssuihNoscVFH0pKPpxhZr3dOUjBzjAAQ7k0oE3nh6Hr10j/O1XEDLT+z66JR+hmHDSOFTFgYcEwAO9vf/OtBluvrAWOi3na87ZOcABDnCAAxxYmAPt1uj7Jsae+7zCNvJtOAIIIIAAAvMl0D5p9D+mSfQNRcTCigj88OMABzjAgao68Htn18I9q6yKmymk7ef3D2wWPFYleLSf+XB973pzXT/ntJne+2OX1sPacXVGVesM+819DnCAAxxYoAPfS1vR5OTIyDPm2zf3egQQQAABBApPIF286J+lY/FNCzyY5nJFkn1SJHKAAxzgAAf658CNr6yHnW2ByEyhRb+//8hkPkIx4aRxqIoDD64z3/V7Xpvp/T9/VSNMnhw753QnFA5wgAMc4AAH5uPAnjSJlxW+eW8HEEAAAQQQWCiB9lh0eZpE/6BR3r9GObbYcoADHOBAGRyYWBKFj1xSH+itQGcKBar8/Yc3CR6rEjzaz3y4vmetAHiYc+7t1zRC9siBMhxH7YN6kAMc4AAHONBfB9rJ6C3t8dHaQvvlfh8BBBBAAIHSEEgXL/pPaRLdrQjpbxGCL74c4AAHOFBUBzYujcJnr/C832GGINN/e//GfIRiwknjUBUHHlgjAJ6ef4b19e5VzfC2s4XARa0hbLf6lwMc4AAHBuDAE2krfv155408szQNezuCAAIIIIBArwisGm8sSpPorwZwQHb1ttu2cIADHOAABwrkwPZT43DbCuHvsIKPI//uPgFwqErwaD/zEbLvnhAAHzkPDeP/d6TNcNP5dfVDgeoHvQWBDwc4wAEODMiBhzqLR8/oVY/c+yCAAAIIIFBWAselY6OdNIm+P6ADtBN4J/Ac4AAHOMCBHDvw1rPicNcq4e8wwo6Z/ube9fkIxYSTxqEqDtwvAM7Vrf8/dHE9TLSsBna+LlThAAc4wAEORCFtxZ+bGK+9sKyNevuFAAIIIIBAzwlMjNXG0yTarZBQTHKAAxzgAAeq68C7z62FHW3h70xB7LC+v3ed4LEqwaP9zIfruzpWAA9rvpvp7376ikbYMC4EVqNVt0Yz9saeAxwoswPtbi+QbkVvnzzhhB/qeWPcGyKAAAIIIFB2AqtPiqM0iT5a5oLCvimYOcABDnCAA093YCKJws0X1nK14mumEKCK39+zNh+hmHDSOFTFgSrOM0XY56+8rhGuWy4EVsc8vY7BBBMOcIADpXfg0U5r9JVl783bPwQQQAABBPpKYHJ85FlpK5pMk+gHiqfSF09uwdrtFYZexxUOcKDEDqwbj8InLrPqN8/hxwNrBI9VCR7t5/Bdf3yb1b95ng/vXNkMN7y0pi4pcV2iD6EPwQEOcIADhznQir44MT76or42xL05AggggAACVSLQGYt/MU3i/YcdcJ1kajRwgAMc4AAHSuXAlmVx+MJrhb95DjuybdstAA6C0eEHo1UZg8e2CoDzPife226G3z9HCOxcXUDCAQ5wgAMVcOA9kyc2fqxKPXn7igACCCCAwEAIdBY3fqqTRH9TgWKiVM184+UEgAMc4AAHunHgjafH4fZrhL95Dzqy7bt/QvhXlfDRfg7f9YNbBMBFmBd3ps2pRxd0Wo753RzzvYYnHOAABzhQMAe+3U7iywbSAPdHEEAAAQQQqCqBFWe86IfTVnxDwYoEga4VehzgAAc4wIFZHPi9s2vhnlVCjiKEHNk27uoMPxQTTBqDqjjwqAC4UM+D/9il9bB2XFPf+ToHOMABDnAg/w6MdnuO/vXVSfTvq9qLt98IIIAAAggMnEDaii5Mk+hg/osJBZ8x4gAHOMABDszmwI2vrIedbeFvUcLfqe3MAuBtAsiqBJD2c7iuH9hsfizU/Jg2w+evaoTJk+Num8peN8sFYrPVD36mvuQABzjAgX470GlFf9Y55XnPHXjj2x9EAAEEEECg6gTSxYt+Jk2iv+v3wd77Kyg5wAEOcIADvXdgYkkUPnJJvVAru4oWQvRzex8XAHsO8PbhBqNVCaYfmRQA93Mu69d7Z480eNPpQmD1U+/rJ0wx5QAHODAQB76Xjo12qt57t/8IIIAAAggMlcC1L3nBj6Zjo+9U/Ayk+HF1uqvTOcABDnCgJw5sXBqFz14p/O1X8DCI931sq/CvKgGk/Ryu6w9vEgAPYk7rx9+4e1UzvO1sIbBzdefqHOAABzhQLAdGd6SL4/8y1Ia3P44AAggggAACTxFoj0UXpUn0rWIVFApA48UBDnCAA9Vz4LpT43DbioaVv2mxQ52DW4Ybigkl8a+KA/s3Fnuu6EewWqT33JE2w03n13ty8ZSaqXo1kzE35hzgAAcG7UD8/mtf8oLjn+o4+xcCCCCAAAII5ILARGv059IkulNxNOjiyN/jHAc4wAEOdOfAW8+Kw12rhL9FCi9m2tYDAmC3gHYL6IE4sE8AXIoLhj50cT1MtKwGVi91Vy/hhBMHOMCBgTvw/bQVTU6OjDwjF01uG4EAAggggAACTyew4sXH/0SaRH+qUBp4oeSqdreF5QAHOMCBWR1497m1sKMt/J0pUC3a9w9stgK1KitQ7edwXX9ogxXARZsfZ9reT1/RCBvGhcDO1Z2rc4ADHOBAzhzYs3osPuXpXWbfQQABBBBAAIE8Ejiu3YqvTpPouzkrKGZtjNtWBTAHOMABDpTRgYkkCjdfWCvFCq6ZmvpV/H72XFLBIAYc6L8De9cJgMs0x37ldY1w3XIhcBnrHfukjucABzhQSAc+vjZZVM9jc9s2IYAAAggggMAsBNKk9gtpEt2jACtkASYst5KQAxzgQAkcWDcehU+82qrfMoUX0/uyXwAsAHcL6IE4sEcAXLoLiO5c2Qw3vLSmzilBnaPXoNfAAQ5woLAOPJG24hsuP3Hk2bO0lv0IAQQQQAABBPJMYPVJcdRJoo8oyApbkGmMaIxwgAMcKKgDW0+Jwpd+Tfg7HZiW7eu+Df1f+Wh1KcYcaIY9a60ALtv8me3Pve1meNc5QmDn6c7TOcABDnBgCA481G6NnpnnfrZtQwABBBBAAIEuCZx33sgzO0m0OU2iH8xdVIwKGgoaNMw9topqjDjAAQ4MyoH/fkYc7rhW+FvG0GJ6nx5aL5wUTnJgEA7sXiMAnp53yvZ1Z9oMf3ZhPXScfzkH5wAHOMABDgzEgU4S/U1nceOnumwpexkCCCCAAAIIFIVAuxUtT5PowUE1v/0dQQsHOMABDlTRgXe8vBbuWS2wKFtQceT+7BUAD+T2v4MIGP2NfAfZuyfMp0fOP2X7/1surYe1S9RMVayZ7DPvOcABDgzOgU4S/+bkCSf8UFH62LYTAQQQQAABBOZBIF28qNFORm9VXA2uuMIaaw5wgAPVcSBbwfSnv1wL2YqmsjXn7c/Tx/TBdfkOzYSaxqcsDuzqPP3zZ04qH5PPX9UIkyfHA1n9pDarTm1mrI01BzhQGQfG5hzr76St0Yvn0Ub2UgQQQAABBBAoCoH2ktEkTaLdlSl83DpG84QDHOAABwbowJpWFD56SV3wW6HwO3suaVkCNvthLPPsgAC4fGHvTAH+165uhjecJgR2zj5niKHGHWCNy0c+cqBcDrTHot9dccaLfrgo/WzbiQACCCCAAAJzEGi34qvTJPquoq1cRZvxNJ4c4AAH8uHApqVRuPVKz/udqaFf1u8/sEZomOfQ0LaVw8/Ht1Un/CzrXDnf/frmqmb4nZfVBHwCPg5wgAMc4EC/HGjFn1t1Uv1fzNFO9mMEEEAAAQQQyDOByfEX/kgnif5AQJCPgMA4GAcOcIAD5XPgulPj8JUVwt/5NvjL8PrsuaRCRgw40F8HBMDVDMB3pM1w0/l1jf9+Nf69L7c4wAEOcCCJHmqPjZ6e5762bUMAAQQQQACBGQhMjI++KE2iLwsbyhc2GFNjygEOcCAfDrz1rDjctUr4W4Yw91j2IbstrfAPAw7014GDW6sZgB7LnFTG3/nQq+phouWW0Oq+fNR9xsE4cIADJXTgibQVv35yZOQZM7SXfRsBBBBAAAEE8kag3Ro9M03i/SUsTFyh5ypNDnCAAxzIhQPvPrcWdrSFv2UMHLrdJwFwf4M/wSq+mQMHtwiAu52Tyvq6T1/RCBvGhcDO7QVPHOAABzjQNwfGRv/P6pPiKG/9bduDAAIIIIAAAocTOC4dG+2kSfSDvhUFgodcBA/GV+HPAQ5wYDgOTCRRuPnCWihro91+zS9seny7kE5Qy4F+OnBAAOx4kzbDV17XCNctFwKr/YZT++GOOwc4UA0HRneki+P/cnib2f8hgAACCCCAQC4IrHjx8T+RJtGfV6MoUXwaZw5wgAMcGLwD68aj8IlXW/UrJH4qJH5sm/Cvn+Gf9+bXI5NPfd7MPdVmcefKZrjhpTUX47ogmwMc4AAHONA/B77TbsVX56LRbSMQQAABBBBA4EkCq5Po36dJdKcwYPBhAOaYc4ADHKiGA1uWxeELrxX+CmAOD2Cy55MKKTHgQP8ceHjT4Z85c1C1edzbbobfP0cIrPasRu1pnI0zBzgwLAfaSfRHq5fHz9F3RwABBBBAAIEhE2iPxb+cJtFjwyoK/F0FKQc4wAEOlN2B3zgjDndcK/wVvDw9eHl0S/+CL6Eithxohv0CYLeATp8+977/onrotNRfZa+/7B/HOcABDgzTgdG/T1v1fzPktrc/jwACCCCAQDUJTI6PPCttxa9XDA2zGPK3+ccBDnCg7A783str4Z5VT28+C0MxyRw4MCmkFFJyoJ8O7NtgrnG8OboDH7usHtaOq8PKXofZP45zgAMcGJ4DnSQ6kCajr6hm591eI4AAAgggMCQCa5LaaDuJ/loRNLwiCHvsOcABDpTfgRtfWQ8720dvPGvI45I5kD2ftJ/hl/fGt+oOPLTeXON4M7MDX3xtI2SPaFCTlb8mM8bGmAMc4MDQHHgibcU3XH7iyLOH1Ab3ZxFAAAEEEKgOgXYSLU6TaJfCZ2iFjwZDgr3PHwc4UG4H1rSi8JFX1d128yi33RREHB5EZM8nrXpAZ/850E8H9gqAHYvmOBbdfk0jvOl0IbDatNy1qfE1vhzgQA4c+Hh7fLRWnQ68PUUAAQQQQGDABNpj0eVpEv1DDg76QlAhKAc4wAEOlNKBjUuj8Nkrhb+C3sOD3pl47N8o/Otn+Oe9+fXguu4+izN9Rn2/GvzuXtUMv/syIbA+gYCIAxzgAAf66UCnFd2XLUwacDvcn0MAAQQQQKDcBCbHX/gjnVb8rrkP4qOlbMbPvd8KPIw4wAEOcGDhDlx3ahy+sqJhtdUcq60EKk8FKvsEwFZAbxfS9jOo3yMAdkzq8pi0I22Gm86vOx92gSIHOMABDnCgvw58Lx0b7YyMjBxX7m68vUMAAQQQQGAABFa2jv/JdjJ6q8b+whv7GGLIAQ5wgAMzOfDWs+Jw1yrhr3D3qXC3GxbZ7Wn7GX55b3yr7sADa+b3mezmc+s15Wb6oVfVw0TLauCZ6h3fVwtzgAMc4ECPHPjzzinPe+4AWuP+BAIIIIAAAuUk0B4bPT1Non09OjC7Aq6/V8Dhiy8HOMCBgjrw7lfUwo628FcoMv9QZO86AWXVA0r739/PwO6J+X8uzWWYffqKRtgwLgTWRxDycIADHOBAnx24ffV4/LPl7MrbKwQQQAABBPpH4LjsdhppEn2/zwdqYUVBwwpeKOI5wAEOLNyBiSQKN19Yc3vNLm+vKVR5eqiyZ21/wy/hIr5Vd+B+AbBj1DEeo77yuka4brkQWL248HoRQww5wAEOzOrAwU4Sn9+/Frl3RgABBBBAoEQE0sWL/lk6Fr1XcTFrcSG4FlxzgAMc4MCCHFg3HoVPvNqqX6Hu00Pd+TB5QADsFtieAdxXB3Z1FvYZnc/n2WvLx/rOlc1ww0trC6oXnJc7L+cABzjAAQ504UArevvkCSf8UIla9HYFAQQQQACB3hJYM/78f50mo3+vsOiisBB8aGRwgAMc4MAxOrBlWRy+8Frhr7Bj4WHH7jVWqFZ9har97+9nwDy18Hmq6gx3rG6GPzhHCKzHoMfAAQ5wgAP9dqCdjN666qT6v+htt9y7IYAAAgggUAIC7Vb8X9MkeqzfB2Pvr+DjAAc4wIEqO/AbZ8ThjmuFv1UPBHq1/9ntaQWAGHCgPw48vk342au5yvs0w/svqodOq4sacKyL1xzjBWhVrr/sO684wAEOVMaBvemS6NQStOrtAgIIIIAAAgsncN55I89MW/Hr0yR6QjFUmWLIqj1NEw5wgANDcOD3Xl4L96wSKAgCeudAdnta4R8GHOiPA49t7d1n1byHZebAxy6rh7Xjzjn1HTjAAQ5wgAPH6kC7u/P476etaHJyZOQZC++cewcEEEAAAQQKSmDVeGNRJ4k+cqwHXb+nYOMABzjAAQ5058CNr6yHnW0NcCFIjx0QAAvAPQO4bw4c3NLjz2vq/RwDmuGLr22E7FEQ6qfu6ieccOIABzjAgWN3YPQvJ8ae+7yCtu1tNgIIIIAAAsdOYGJs0YlpEt1z7AdRBQh2HOAABzjAgbkcWNOKwkdeVQ+a3oKPfjmQ3abWClAMONB7Bx7dbN7q17xV9fe9/ZpGeNPpQuC5aig/V2dzgAMc4EAPHPhGZyz6D8feQfebCCCAAAIIFIxAeyy6KE2ib/XgIOrK5e5uPYITThzgAAcq6MDGpVH47JXC36o3+vu9/9ltaoV/GHCg9w4cEAC7eKmPq7bvXtUMv3u2EFhPQrjDAQ5wgAMDcODb7SS+rGDte5uLAAIIIIDA/AisOONFP5wmo+8YwIFV0FHBoINXinYOcIADTzlw3alx+MqKhuZ5H5vn/Q5Wi/L+2W1qhX8YcKD3DjwyaQVwUebBom7njrQZbjq/7tzZuTMHOMABDnBgMA6859qXvOBH59dN92oEEEAAAQQKQCBdvKjRTqLPa84/1ZzHAgsOcIADHOiHA799Vhy+uUr4W9SGfNG2+4AAWADuOcB9ceDhTQLgos2HRd3eD15cDxMtNVk/ajLvySsOcIADHDjMgVb8uaxHXoBWvk1EAAEEEECgawLHCX8VPIcVPIO5ss4VjDhzgAOVc+CPzquFHW2hQVGb8EXc7gOTvV/5aDUpphxohv0bzeVFnBOLus2fvqIRNozPcUvoMee0zmk5wAEOcIADC3Ug65GPjIwc13VX3QsRQAABBBDIM4HV4/HPLvTg6PcVWBzgAAc4wIGZHZhIovC//1vNLZ/d8nngDmSrFIV1GHCg9w7s2yAALmqYWtTtvm1FI2w/dY4Q2MWFlbu4UP09c/2NDTYc4MCxOpD1yvPcy7dtCCCAAAIIdE1AAKwgOtaCyO9xhwMc4MDcDqwfj8L/vbw+8OCvqA1u293bUClbpSj8w4ADvXfgIQGw49oQLmr6xspmuOFMIbD6c+76EyOMOMABDhy7AwLgrmMFL0QAAQQQKACB49Ik+luFwbEXBthhxwEOcIADR3Ng2ylR+PKved6vULe3oe58eGarFIV/GHCg9w7sXTe8z/V85gCvLd843dtuht8/p2alq9XOHOAABzjAgf448LduAV2ANMMmIoAAAgh0T6CzuPFTaRLdfrTmte8JNTjAAQ5wgAPzd+A3zozDHdeUr/EsTCjWmD60vvfBlzARUw40w561xZoLzN3lG68/v7AeOv1pfAsUcOUABzjAgao6cHvWI+++o+6VCCCAAAIIFITAtS95wfFpEn1ak3/+TX7MMOMABzjAgUMd+L2X18I9q8rXbBYgFG9M9wqArYDeLrDuR2AtAC7efFjGY9jHLquHteNqsENrMP/mAwc4wAEOHJMDrfhza5LaaEHa+DYTAQQQQACB+RNYvTx+TppEf3VMB0pXx1X16jj7zX0OcIAD/+hAthLnpvPrYWdbY7yMjfYi7tOD64R//Qj/vCevdq8xzxdxTizjNn/xtY2wZZnnAuthCHw4wAEOcOBYHWgn0V+vePHxPzH/TrrfQAABBBBAoGAEJk844YfSZPRPjvWg6fcUXBzgAAc4UEUH1rSi8JFX1UMZm8v2qbhBT7ZKUViJAQd678DuieLOC+b08o3d7dc0wpvOEAJXsf60z867OMABDizMgU4r+rPJ8Rf+SMHa9zYXAQQQQACBBRE4Lh2L3qSIWFgRgR9+HOAAB6rhwMalUbj1SuGvUCF/ocIDa3offAkTMeVAM+zq5O/zbg6u9pjcvaoZfvdsIbDauxq1t3E2zhzgQC8caI9Fb50cGXnGgjrofhkBBBBAAIGiEkjHRju9OKB6D4UZBzjAAQ6U1YHrTo3DV17XsPI3rXbjPa/BS7ZKUViHAQd674AA2Jyfx3l/Z9oM772g5tEcHs/CAQ5wgAMcmMuBVvz6ovbrbTcCCCCAAAI9I9BORl+VJtH3ytq4t19CKQ5wgAMcOFYH3npWHO5aJfzNYxPcNj0ZzmQhlfAPAw701oHHtws/zbH5duBDr6qHiZbVwMda3/k95wYc4AAHSu3A99MkurJnjXNvhAACCCCAQNEJdJL47DSJvq0AKnUB5OrAua4O9HOOcIADhzjwnlfUwo628FcIkO8QQADc2+BPkIpn5sDj2/L9uTcvG5/Mgc9c0QgblgqB9TD0MDjAAQ5w4BAH/qHTGn1l0fv0th8BBBBAAIGeE5gYq42nSfTIIQdNQcAhQQAuCkoOcIAD1XBgIonCzRfW3PLZLZ8L40C2WlFwiQEHeufAwa0CRiFzMRz46usa4frlQmA1ejVqdONsnDnAgTkcONhuRct73jD3hggggAACCJSFwOrx+GfTJNo1xwFVMCwY5gAHOMCBgjowOut2rxuPwicvs+pX478Yjf/pcXpsa++CLyEilhxohke3FGsOmJ4LfK3muN25shluOEsIrIchGOIABzhQYQfGogfayaKfL0t/3n4ggAACCCDQNwKrW/G/TJPojrkLp9mb6HP/foULE8HRrAEMd3w2OMCBYTiwZVkcvvha4a8AoXgBQrZaUWiHAQd658ABAXBh7oDgmPXkMWvH6mb4g3NqzrGcZ3OAAxzgQBUduHvN2KKf7luj3BsjgAACCCBQNgLt8dFa2oq+OIwGvL8p+OEABzjAgUE78BtnxOGOa4W/GunFC3+zMXt0c++CLyEilhxohkcmizkXmMON2/svqodOq4s6cqyL1whRqhii2Gfec4ADRXPgK9e+5PnNsvXl7Q8CCCCAAAJ9JzA5PvrjnST6yKCb8P6ek3EOcIADHBikA+94eS3cs1rTWHBQXAcOTAothZYc6KUDD28q7nxgLjd2H7usHtaOqyUHWUv6W3zjAAc4MBQHPt455XnP7XuD3B9AAAEEEECgrARWnPGiH06T6E8VMkMpZIp21Z3tdaUoBzhQKAc6SRRuOr8edrY1iwUGxXYgW63Yy/DLe+FZdQf2C4DdAjot9nEhe6TF1mXOYfUxOMABDnCgtA7cfO1LXvCjZe3H2y8EEEAAAQQGRuC880aembaityuaSls0FSqw4SEPOcCBXjiwphWFj15S1+AueINbcP1kQJGtVqx6YGf/OdBLB/ZtLHb4Z240fpkDX7+mEd50c5fvHAAAIABJREFURuxczwWaHOAABzhQKgfarejdk+MjzxpYY9wfQgABBBBAoAIEjktb0WQvmu7eQ3jDAQ5wgAPDdGDj0ijceqXwV0BQnoAgC6t6GX55Lzyr7sBD68szP5jrqz2Wd69uht89Wwg8zLrT33bewwEOcKCHDrTiG0ZGRo6rQB/eLiKAAAIIIDB4Amky+mtpEv1A8dLD4sWViKW6EtFnw2eDA/l24PWnxeGrV1e7GSwMKN/479sgsKx6YGn/e/sZ2CsAdoeMEt0hY2faDO+9oOacy3k3BzjAAQ4U2YEnOq1o9eA74f4iAggggAACFSPQacUXpEn0XSFHvkMO42N8OMABDhzuwFvPisNdqxqa2iVqaguznwyzs7BKAIgBB3rnwIPrynehiPnSmH7oVY0w0bIaWH18eH2MBx4c4EABHPhee2z0VyvWfre7CCCAAAIIDI9AmsTL0iR6tABFQpGvbrPtrs7kAAc40CMH3vOKWtjRFv4KAMoZAOxd17vgS4iIJQeaYY8A2MVSJb1Y6tYrG2HTUmGHPgYHOMABDhTGgcc7i0fPGF4H3F9GAAEEEECgogQmltT+c5pEDyqaClM0CZJ6FCRxnvMcKI4DE0kUbr6wppFd0ka2QPvJQHvPWqGl0JIDvXTggbXlvFjEnGlcMwe++rpGuH65lcDq+eLU88bKWHGgqg7E+9tJtLiibXe7jQACCCCAwPAJpK36v0mT6F7FWFWLMfvNfQ5wYJgOjM56Ycu68Sh88jKrfjX8y9/wz8KqXoZf3gvPqjuwe6L884ZjQ7XH+M6VzXDDWUJgdfww63h/m38cqKwDY12N/f2dVvzvht/5tgUIIIAAAghUnEC6eFEjTaK/q2zhYlXprAEML7oqbDH0OeJAjx3YsiwOX3yt8FeDvxoN/t1rBJZVDyztf28/A/cLgN05owJ3ztixuhn+8JyaGrTHNajzX+e/HOAABxbqwOjfdxY3fqri7Xa7jwACCCCAQH4ITIw993lpEn1KkbPQIsfvc4gDHODAQh34jTPjcMc11Qj+BLzGOXMgC6sEgBhwoHcO7OqYWxxfquPA+y+qh06ri/qzuxVbAmWBMgc4wAEOHLMD7WT01jVJbTQ/HW9bggACCCCAAAJTBFYvj5+TtqIPLLRx7/e7OPlWTB5zMckvfnGg3A684+W1cM/q6jRtNeiNdebArrR3wZcQEUsONMN9AmArgCuwAvjQGuLjl9XD2vFy14jOAYwvBzjAgdw78NF08aJ/ps2OAAIIIIAAAjklMDk+8qxOK36Xoir3RZUAVYjOAQ6UyoFOEoWbzq+HnW2B4KENXf+uiA8doaXQkgO9cuDxbRWZNyoWcDoezu119uiMrcucx+plcIADHODA4B1oj0U3Xn7iyLNz2u62WQgggAACCCBwCIHj2kn0RgXT4AsmzDHnAAeq6MCaVhQ+ekndaiXN/Eo7kIVWvQrAvA+WVXbgsa1zB2XCRIzK6sDXr2mEN50Rl+oiwSrWxvbZOSEHOJAXB9pdXXgf/9bkyMgzDukr+ycCCCCAAAII5J1AuxVfnSbRE3kpOmyHApgDHOBA+RzYuDQKt14p/C1rI9p+dR+yHNwqtKxyaGnfe+d/9lky92BQZQfuXt0Mv3u2ENh5Q/nOG4ypMeVA7hx4Im1Fk3nvb9s+BBBAAAEEEJiBQHssuihNou8psnJXZLmqu6urEI2bzy4H8uzA60+Lw1ev1qSucpPavj/l/8EtvQvAhIlYVtmBRzc/9bkyx2BRVQd2ps3w3gtqzhmdM3KAAxzgQL8c+H57LLp8hnaybyOAAAIIIIBAUQikrfhlaRJ9K88hgm0TcnGAAxwolgO/fVYcvrmqYZWW2z5z4B8dOLBZaFnl0NK+987/A5NCz6qGnvb76e5/6FWNMNGyGth5QrHOE4yX8eJA7h34TpqMvqIofW3biQACCCCAAAJzEOi0RltpEj2iCMt9EdavK/u8r6tGOcCBnjnwnlfUwo628Fej+umN6iozyUIrISAGHFi4A48IgF1Y4+Kqwxy49cpG2LTUeaxeBgc4wAEO9MSBg6vH4lPmaCP7MQIIIIAAAggUjcDq8fhnO63oPgVTTwqmngUpxsN4cIADRXFgIonCzRfWDmtKVjnws+8C4EMdeHjTwoMv4SGGHGiG7LN06GfLv/HgQDN89XWNcP1yK4GLUjPbTud3HOBATh3YPdEa/bmi9bNtLwIIIIAAAgh0SWBivPbCNInuyGkhIlS1QpEDHODA0BwYnZX9uvEofPLVVv1qQgsiZnJg/0bhpfCSA71wIPsszfQ5831squzAnSub4YazhMB6GYI1DnCAA8fkwDfbrdH/t8v2sZchgAACCCCAQFEJrH1xFKdJ9LcKpmMqmGYNSDDFlAMcKKMDW5bF4YuvFf5Wuels3+cOXfYJgN0Ce7sAuBcB8L4Nc3/ezEkYVdWBHaub4Q/PqTknHdoFk851yniuY594XXoHxqLb0sWLGkXtY9tuBBBAAAEEEJgngcnx0R/vJNGHSl/kODHUHOAABziwIAd+48w43HGNRnNVG832u3v3H9og/OtF+Oc9eLR3ffefO3MUVlV14P0X1UOn1UVoM9bFa9TKC6qV9VQ4xgEO5NmBdjJ6S+eU5z13nm1jL0cAAQQQQACBohOYPOGEH0rH4pvyXKjYNoU0BzjAgeE58I6X18I9qzWXq9pctt/zcz8LrYSXGHBg4Q7sXTe/z565Cq+qOvDxy+ph7fjw6kQ1OvYc4AAH8u1AO4n+4tqXvOBHi96/tv0IIIAAAgggcIwEzjtv5JlpEr1N0Zbvos34GB8OcGCQDnSSKNx0fj3sbGsqV7WpbL/n7/6D6xYefAkPMeRAM+xZO//PnzkLs6o68KXXNsLWZerkQdbJ/hbfOMCBIjjQSaI/mBwfedYxtov9GgIIIIAAAgiUiUA6NtopQgFjGxXaHOAAB/rrwJpWFP76knqoaiPVfgsRjtWBLLQS3mHAgYU7sGeNeehY5yG/V013vn5NI7zpjNhtjN3KmgMc4AAHnnSgFb++TD1r+4IAAggggAACPSDQaY2+Nk2iHwhX+huu4IsvBziQVwc2Lo3CZ1/TEP6m1WwgCw4WNu671yw8+BIeYsiBZsg+S+YjDDgwPwfuXt0Mbz9bCJzXGtt2Of/jAAcG5MATaSta1YMWsbdAAAEEEEAAgTISWD0W/VKaRN8eUGHi6kRXJ3KAAxzIiQO/vjwOf3/1/JqNmrN4ceApB3ZPCC+FlxzohQPZZ8ncggEH5u/AzrQZ3ntBTW2dk9paT0XgxwEODNiBf+gk8fll7FXbJwQQQAABBBDoIYF2K1qeJtHBARcqTlSdqHKAAxwYkgO//Yu1cNeq+TcaNWcx48BTDuzqCP96Ef55Dx5lnyVzCwYcOHYHPvSqephoWQ2snyF84wAHKuTAwayX28PWsLdCAAEEEEAAgTITSJPaL6RJtLdCxZLgaUjBE8eclHFguA7ceF4t7HDLY2EDBxbsgABYcCm87o0Du8xHC56PhKfHHp6Whd3fXNEIG5YKgZ1nDPc8A3/8OTAQB/ZmPdwy96jtGwIIIIAAAgj0gUBnce3fpkn0LQXbQAo2AbQAmgMcGKgDE60ofOCiuiazoIEDPXTg8W29CcAEiThW1YHHtwvuyhJA2o/hu3zbika47lQhsH6GfgYHOFBiB76V9W770BL2lggggAACCCBQZgKdxY2fSseiT5S4SBpo0IKjEw4OcCBPDmwYj8KnLhf+ak4PvzldtjF4bKvgsqrBpf3ujfvZRRRlmxfsjzEdpgN3rmyGG17qucB5qsNti/NCDnCgpw6MRZ/Ierhl7lHbNwQQQAABBBDoIYH22Oh5aRLv72lBYmWfwJkDHOBALhzYdkoU/u7XGhrsPVz1OczGrr+dr2Dh4JbehGDCRByr6sDBrfn6TJtjjUcZHNixuhn+8FwhsP6G0I0DHCivA/H+rJfbw9awt0IAAQQQQACBshFYvTx+Tjo2+s7yFkSKXWPLAQ5U24E3nxmHO67VzC1DM9c+5NPjRzcLLqsaXNrv3rj/6JZ8frbNucalDA7cfGEtdFpd1MJjXbzGhZ25uLDTuR1XOcCBwxwYG31n1tstW7/a/iCAAAIIIIDAAgmsHo9/Nh2LbjuscHBS56SOAxzgQGkceMfLa+Ge1Rq4ZWjg2of8enxAABwEob0JQqvKMfsMmeMw4ED/HPj4ZfWwdlxgou/BAQ5woMQO3N5OFv38AtvEfh0BBBBAAAEESkLguHYrvjpNou+UuPgpTYBjjJykcIAD83Wgk0ThpvPrYadbHgsVONB3Bx6ZFP5VNbi0371xP/sMCf8w4EB/HfjSaxth6zI19Xxraq/nDAc4MHwHRrvtb34vbUWTkyMjzyhJ79puIIAAAggggMB8Caw+KY7SJP7fwy9gFJHGgAMc4EA/HFjTisJfX1LXTBd8cmBADjy8qTchmDARx6o6kH2GhH8YcKD/Dnz9mkZ40xlxt0GC17krEgc4wIFiOvDRdPGixnz7xV6PAAIIIIAAAgUn0G5Fy9Mkur8fgYP3FGRxgAMcGL4Dm5ZG4bOvaWikDyj406zuf7O6CIz3bRRcVjW4tN+9cX//RnNJEeY621gOT+9e3QxvP1sI7Lxl+OctxsAYcKCvDjzYGYt/seBtbJuPAAIIIIAAAt0QmBx/4Y90kvg30yR6QoHV1wLL1ZHFvDrSuBm33DuwfjwK1y2PwkRr5jns15fH4e+vLkdzUpPZOBbJgX0behOCCRNxrKoD2UUURfrM21bjVXQHdrab4ab/Wpu1/p1cFoWtpwqK9U9mPvfABhsO5N6BJ7JecNYT7qZ37DUIIIAAAgggUEACncW1f5sm0ZcVZrkvzGY9ATd+xo8D1XMgu0Xf+y6uh6+trofHtj0ZjDywoRF+5yirNn77ZbVw1yoN2aI3ZG1/MR3eu15wWdXg0n73xv2HNhTzs2/ONm5Fd+BDr2qEidbhIe/GpVH44tWNMD2/3b++GT5+RT2845xaWDdevXrcOZgx5wAHSuDAl7PecAFb2jYZAQQQQAABBGYj0B6LLkqT6LESFCvCUSs0OcCB0juQNdWy5tonrqiHrNk23Xg78uv+yUbYsPSpZt17XlELO9qasEVvwtr+4jq8d93Mn9cjP7/+HysOPN2B7CIKcyAGHBiOA7de2QibTn4q4PnElfUZa9ADW5rhy9fUw/+8sDZ1Zxp9hqe4YYEFBziQcwe+3W7FV4+MjBw3Wx/ZzxBAAAEEEECgAATWLGs+v51Ef5Hz4qP0YQ7+TgA4wIG5HMhu6/ynF9bC311TD1lTrdtg4J3nxlO3g/7ARXVNc8/75cCQHdgjAO567up2jvO67o8HZWD14LrhBF8CR9w58KQDX1nRCNf94+2e92x4avXvXPPLPWsa4cOX1kJ2J5rZHlMyVz3s586ZOMABDgzGgaxXnPWMC9DatokIIIAAAgggcDQC6ZLa0k4rum/O4mlsMMXFnNthVaMgnAMcqJADWXMsu4XzRy6rh3vWHHuD/+2/FIdPvroh+Bty8KdxLDzIHHhg7bF/ludqrvs5tlVwYM9ac4njCQeG7cCdK5vhN18ahx1ruw+AD52fsjvU3LqiEW48vxay5wfrA2DAAQ5wIKcOjEUPtMdGTz9aT9n3EEAAAQQQQCCnBCbHR56VtqLJNIl+oMjKaZFVoZCLgxzkwFMObF4WhT8+vxY+t6Ie9m8+tqbaoQ22HWsa4bYVwt9hN0r9fc36aQd2TwgpD52j/JsP83Ugu4hi+vPkKxYcGJ4D2SNFPnPVwmvVx7c1wx3tRvjfr6qFN780Dp3WU3WxcwQsOMABDuTCgSfSVnzD5Akn/FBO29w2CwEEEEAAAQSmCUyMj76onYzeqojKRRHlamdBNwcq7kDW5HrzWXH4wCW18I20EbIm2Hyb4TO9PnuvezzvV1Bg5XOuHLhfANyzOW6muc/3e3ccySPL3WuGF3gJG7HnwBEOdJrhgQ29nXOy20r/39fUwx+8ohbWjztn17fhAAc4kBcHsl5y1lOe7i/7igACCCCAAAI5I9Aeiy5Kk+hgXooH26GQ5QAHqujAuvEoZM/l/eSV9fDAPJ6dNt9G/L4NRzTpBIG5CgI1kavp5660t43y+c4LXo9/0R3ILqIwf2LAgfw4kN3ZopcXMB46Rz22rRluX90I77u4PnXBZBXPG+yz82UOcCBnDnyr3Yqvzlm72+YggAACCCBQbQIrXnz8T7ST6I9yVjRY+VjxlY98dCJTJQeuPy0ON11QC1+6uhEe3dr/AOLg1mbIgiYNUgw4kD8HDm1u+3f/50OMy8V4Vyd/n2nzrDGpugMPrR/MPLNrXWPqAsrsQsq1S5xLVelcyr7ynQO5c+BPJ8ae+7xqd9vtPQIIIIAAAjkgkCa1X0iT6E7FUu6KJQG4AJwDJXYga0r93i/F4ZbLa+G+dQt/Ptq8AoxtzeAZiZrRVW9G53n/+7VSal7zxPbBNOttE869duA+AbCLu1zglj8HOs3w6ObBznePbGmGv31dPfyPX66FrafGzqtKfF6ll6WXxYHcOnBve8lokoPWt01AAAEEEECgegTOO2/kmenYaCdNou8qlnJbLDlRdaLKgRI5sHlZFG48vxY+t6Ie9g+4CXZog33/RuFnnsM/28bPbIX+oZ9Z/8aDA905kF08YQ7FgAP5dKCft4LuZo68Z00zfPjSWnj7y+Mw0XL+rwfEAQ5wYEAOfC9txa+//MSRZ1ev826PEUAAAQQQGBKBla3jfzJNoo8P6GAvwCpRgMUZJwkc6N6BTiuaeh5Z9lyy7PlkeVjVN3XrZ6ujBARWR+XagYNbugu7uml4ew2WVXLgsa35DL4EksaFA0868NCGfMzJ+yabUxdkZhdmbjzZ6mDnd92f32GFFQeO0YFW9JmJsfj/GVIb3J9FAAEEEECgOgTaSbQ4TeL9ipZjLFqEuQJ9DnBgFgc2nRyFd59Xm3r+2IMbB3xr5y5u2frAGk1YTVgO5N2BA0O8Q0CVwkL7mo8gppfjkF3klPfPt+0zRlV34NGcXeT02LZmuCtthA9cUp+6cDO7gFOvBAMOcIAD/XAg3p/1pKvTgbenCCCAAAIIDJjA1G2fk+huhUw/ChnvySsOVNWB60+Lw5/9Si3ctrIRDm7NX+g73Vzfv0nTtepNV/tfjM/AI5PlC+am5yFfjW0/HciCJfMcBhzItwPDvhX0XHPQ3o3N8Jmr6lMXdG5Y6vyuqud39pv7HOibA3dnvekBt8P9OQQQQAABBKpBYHUr/peKmL4VMa4UnmVVJO94VyYH1o1HU88Pu+XyWti9Pr+B76ENruy2mLvc+lkw4NbPhXDg4U1CwkPnL//mQ7cOHJjMd/AlmDQ+HHjSgbzcCnquueXRrc2pCzyzx7m84XS3ii7T+Zx90Z/gwPAcyHrT1ejC20sEEEAAAQQGTCBdvOifpUn0HYXO8Aod7LHnQDEduG55FG66oDb1vLBHcnbrurmaV9nP97j1cyGCP41h4UDmQLZav5vPtdfgxIHDHchWz5tHMeBAMRx4tICPO9i1rhGyC0Df/vI4rFlSzHMa56LGjQMcGLID38l60wNuh/tzCCCAAAIIVIdAeyy+fsgHeytlrZTlAAdy78BEKwpvfVkcPnxpbeq5YEVusrv1czEaoRrWxmnagX0bDw+1ijz/2HZjOUgHstXz058jX7HgQL4dyPutoOeau7ILQr90dWPqAtGtp1odrMckVOQAB7pxIOtJV6cDb08RQAABBBAYAoEnnwMcv7+bA7PXKOA4wIEqOTC5NJp63lf23K/9m4txa+e5mlNTt35221+BAAcK5UBRbo051/zj58LfQTuwf2O+Ay+BpPHhwOEO7NtQjnny8W3NqQtGswtHswtIOy3nkFU6h7SvfOdAtw6M/qXn/w4hCPAnEUAAAQSqR2ByfPTH0yT6kiKl2yLF67jCgbI68MYz4pA91+v21Y2QNW8G3azu69/b1gx71h7eaNN4xIMD+Xdg7/qSzUXb7U9f53p8/+nYna2eN8dhwIFiOVDEW0HPNac/tKk59diYG8+vhQ1LrQ4u63mk/dIj4cC8HPhC1ouuXgfeHiOAAAIIIDAkAuniRY00iXYqWOZVsOT+trXG03hyYHYH1o9H4Z3nxuGTV9bDAxvKscp3piaUW2EWqwGqYW28ph14cJ3AdKZ5zfe5MZsD2cUT058jX7HgQDEcmLoVdIkvZHlsW3PqQtPsgtM3nyUMdq46+7kqPviU1IFdK1vH/+SQ2t/+LAIIIIAAAtUl0E4W/XyaRI+VtMAQ1nrOLAc4MOXA9afFU8/nyp7TdXBrNZrnU7d+7hSj8adBa5w4cLgDe9ZUY56aLcjzMw4ciwMC4MPnEnMrHkVxoCy3gu5m3tq1vjl1IWp2QeraJcIuvSgOcKD0DjzaPmn0P1a3827PEUAAAQQQGDKBTrLopWkSfV/RVfqiSxgqDK2MA1kz5e0vj0P2HK5711awie7Wz1aAeeZvoR3YLQD+p1v6dtNM95oKHudmWC3osQcCz6IEnrbzCFc7zfDolurNZQe2NMNtKxvhz36lFrafqh+hJ8UBDpTOge+nrfhlQ257+/MIIIAAAgggkCZRW6FVukKrMmEfd7mbObB5WRSy52x9bkU97N9cvQbSoQGIWz8f0VQUhhY6DK1ikzy7Heahn2n/xoMD3TmQrZ6v4pxhn417GRwo+62gu5nH71nTnLqANbuQdc0St4t2nu88nwNFd2D013TcEUAAAQQQQCAnBNpJ9DuKq6IXV7afw9VxYKIVTT1H6wOX1MNdaSM8vq275nA3zZciv8atnzWBy9AErvo+7OqYz4o8D9v24fmbrZ6v+vxh/zlQZAeqdCvouY4V+yabUxe23nRBLWw5RRjsPL865/nGujRj/d9z0u62GQgggAACCCCQEbj8xJFnp2PRhxVbpSm2rAB2y+fSObDp5Ci8+7za1HOzHtzYsELuKLfAdPtLjd8iN35t+1P+ztUY9vPhhYzY55d9toLQPIIBB4rtQBVvBT3XceWxbc2pC16zC1/ffFYcOi09C30rDnAgzw7E7z/vvJFn6rYjgAACCCCAQM4IrHjx8T+RjkW3KaTyXEjZNn5Wy4HrT4unnouVPR/r4Fah72wNIrd+LnbDU8Pa+B3qgLsa5DdknG0e9rPhjlu2ev7Qz5F/48GB4jngVtBzz6N7NzbDZ66qT10Yu3Fptc4N9QKMNwdy78Dfrl4ePydn7W6bgwACCCCAAALTBCbGay9Mk2iPoir3RVXpVndyjnOZA+vGo5A99+qWy2th9waBb7dhQrYyQOO7eE1OjWljNpMD2e3cu/38ex1WHHjSgV2e+S4A50ApHNi30bze7bz+6NZmyC6Ufd/F9fCG090qWk9BT4EDw3Og04ruS8ePf8F0f9lXBBBAAAEEEMgpgYkltf+cJtHjCqfhFU7YY18lB65fHoXs+VZfuroRsiZGtw0Pr3uK1Z51grSZgjTf50YRHTi45anPt7kOCw7M7UC2ar6In3XbbNw4cHQH3Ap67nnvaMeGXesaU4/Leee5cVizxDl1lc6p7Svfh+zAo6uT6N/ntM1tsxBAAAEEEEDgSALtsdHz0iR6YsgFhFWunmPLgRI6MNGKwltfFocPX1qbep7V0ZoXvtd908etn4/eONRQxaXIDjy6ufs5wHyJFQeaQQBszi/ynG/bn+6vW0Ev/Nj2yJbm1AW22YW22061OlhvS0DKgb458P32WHzWkX1l/48AAggggAACOSeQjkWbFEh9K5AEmyUMNn1eZv68TC6Lpp5TlT2vav9mt3buVbM+a3i79fPTm4YaqZgU3YEDAmB3g9i+8OZ/r441RXifg1vNe0Wf92w/h490YN8G82Av59971jSnLsDNLsTttGY+b3NOiw0HODAvB8aiq3Le3rZ5CCCAAAIIIDADgePSJHrPvA78Qj3BLgc48I8OvPGMeOp5VLevbkytzOllA8N7PdkQe9Ctn93y0/MOS+nAI5Oa3uZ5DszHgex2sUeGR/4fEw4U3wG3gu7PseChyWb43Ip6uPH8Wti41OpgPS+BJweOzYF2Ev36DP1k30YAAQQQQACBIhCYPOGEH0rHRv+PYujYiiHccKuSA+vHo5A9b+qTV9bDng1W+c6ncX0sr80CIo1NDDhQTgeyW7sfy7zgd3CrqgPZqnnzIQYcKJ8DbgXd/+PaY9uaIbtg930X18ObzxIGV+n83b7qVy3EgU4S/a/JkZFnFKG3bRsRQAABBBBAYBYCa5Y1n58m0R0LKQz8rsKSA+V04PrT4vBnv1ILt61shOz2i1VtPA96v936uXwNTk1rY3qoA/s2mk8HPa/6e8V2zkVR5tBD51D/LpcPjomDnZ93rW9OXdD77vNqIbvA13k8BhzgwNMcaMWfW708fs4srWQ/QgABBBBAAIEiEUgXL/qZNIn3P+2g73a/Tog4UCkH1i6JwttfHk89P2rHWqt8hxUYuPVzuRqbGtXG80gHPPdwsM3uYc3l/m7vxjlbNX/k58j/Y8KB8jjgVtC9my/nc+w5sKU5daFvdsHv9uVCMP0wDnBgyoG71744iovU07atCCCAAAIIINAFgU5rtJUm0T8oeBS9HKiWA5uXRVPPh8qeE/Xw5uE0H+bTqCj7a93msjzNTI1pYzmTA3vXm2vLPpfbv946vn+j+WSm+cT3uVEGB3avaYbsDjjmzuEy2LWuEW65vDZ1QfCaJW4XrS9Srb6I8Y5CJ4kOdFrxv+uihewlCCCAAAIIIFBEAunY6CWKHkUuB8rtwEQrmnr+0wcuqYe70oZmy/bhNloObXS59bMmbhmauPZhbo+zVf6Hfvb9Gw8OzO5Atmre3IIBB8rtgFtBzz4PDvo4sW+yGbILhG+6oBa2nCIM1iMpd4/E+E6N73fTJdGpRexl22YEEEAAAQQQmAc3wuBRAAAgAElEQVSB9lh8veJHccuBcjmw6eQoZM95+sxV9bB/0q2dB91A6fbvufVzuRubGtfGd9qBPQJgAXiOLj7q9hg1zNc9JAAWgKeOIdPHkDJ/dSvofIXA0/N+dpFqduFwdgHxm8+KQ6dVrnNlvQ/jyYEpB66cR+vYSxFAAAEEEECgwASOS5PojxVAimAOFNuBN54Rh/ddXJ96rtNjbqmW+7DBrZ81dsvc0LVvh/v9wJp8NninG72+Gp+8OZDdNt08ggEHyu/A1K2gXSCT+/OWvZuaUxcWZxcYb1xa7HNmPQ/jx4Hs1s+j2wvcw7bpCCCAAAIIIDBfAte+5AU/mraizyiEFMMcKI4D68ajqec1Zc9t2r3BKt+8Na9n257sqvr7J8rf1NO4NcYceNKB3RMCxtnmRD/jx5EOuEOG44fjR3UcyG75fuQc4P/zyyS70Pj21Y2pC4/feHpxzp31OYwVB550oNOK/+fkyMgz5ts39noEEEAAAQQQKDiB9vhoLU2iexRFCmMO5NeB60+Lp57L9KWrG+HRrfltDGjazD42VjZVp6mpgW2sMweyCz7MixhwoHsH9qw1dzh+cKBKDhzc0v38YC7NF6td6xrhk1fWwzvPjcPaJfk9j9bjMDYciEI7Gb118sTGjxW8fW3zEUAAAQQQQOBYCaxKaiekSfSIwkhxzIF8ODDRisJbXxaHD19am3oOk4ZHvhoexzIeByY1NKvU0LSvfM8c2JUWf+46lvnO7xj3Y3Ugu226+RMDDlTHAbeCLsfx4sCWZsguVL7pglrYdmoc9BTy0VMwDlUah9HZPnffXPviKD7WfrHfQwABBBBAAIGSEOgk0WlpEn1PkVilItG+5sn3yWVRuPH8Wvjcinp4eLNbOx9r8ziPv+fWz9VpZGpaG+sjHcjjnGSbytFwL+M4ZmHQkZ8h/48JB8rtwL6N5uSyzef3rGlOXcicXdDcaek55KnnYFuq5WMniQ6sHo9/tiRta7uBAAIIIIAAAgsl0EniVysIq1UQGu/hjXd2Mvzms+Kp5yhlz1PKQsKynfzbnyfH1K2fy9241Jg2vrM5YG53bHMs7N6B7Lbps32e/AwfDpTTAbeC7n6eLNox5aHJ5tQFztmFzhuXWh2s/zK8/ksF2X83TeJlC+0T+30EEEAAAQQQKBmBtBXfUMHCaLbbpfhZokjv1Wdi/Xg09Zyk7HlJezZY5Vu0BsaxbO+Bzc1wX6eczTpNWOPKgbkdOOi57S5u2l7exv6xHBdn+53stunmFQw4UD0H3Aq6GseJx7Y1px5v9IFL6lMXQlsdrM/Sqz6L9zmKS63Ri0vWrrY7CCCAAAIIINALApMjI89Ik+hmBdRRCqj/n703j4/jOO/0KV+5nMRxxLl6AFAxZR1WbEcSRVEiQFISSSvyIVuRZd3iTVGkeGJwEhwC02Bk5Rdtsk42cpJNnF07kXftJNrE62gTex2v45uHSImHeFMgCIIgSAIzkHyofp9qsAmAwAx6Zrp7uqueP/gZEJij+6nv1PvW962DQijF8BI0sG1hVHz1kZjYvSEhKAToYW7Y5jZbP+tnYGJa0+aXa4BVTXr1+3b/z2Np7c6EKfrQy/tQ/q+PJtgKurR+M8zx5mSrIeTE6C/cHxNyojQeFAzQgGsaaHfDH+Y9IAABCEAAAhBQlEB67tR3p2ojO0m+XEu+GMyUUDgNq/5a5kbE8/dGrXOPjjezyjfMpkS5187Wz/qYlhjUtHU+DchdAMrtS3g9DHXQgJw0le97xO9hgwb00ACTpvSNd+fbDWvCtJw43bkAHyasXgjXHQDtzo6+MGXKlCsUtau5LQhAAAIQgAAE3CKQuv3KRKo2coIELgAJnEbF07DqTQ5SX3goZp1v1I/ZT7HDNIQ0MVjJpIdZiSlNOxfSwLm0vmauDkVL7tE9fQ920JcU6kv4G/rQQQPWVtAZ9/oV+ujwsuxqSYhvLo9ZE6ub5nB2cFh9Eq7bdz/x2+m5037RLV+Y94EABCAAAQhAQHEC9bVX3piqjQyStPmetLFiOOBF78a6iHVukTy/6FAqIeSqFQwGGNgakHrobsSo1MGo5B7R+WQa6N9C32j3jTyihUIakMdkTPZ94u8wQgPqa6BvM31lob5Sx7+dazfEzrUJa8J1+10Ug/Hn8OfyaODQptuiEcVtam4PAhCAAAQgAAG3CTTUXnlPqjbyszwJBoXKgBcqaTf3Bgdb7ohY5xN9d1VcnE2ztbOO5oPTe2brZ/XNSQxo2tipBs5SAGaClEkxw0n8vCB3zkjxDwZoAA0Ygq2giRv54oacaCsnYL+0JCY+9/GoaKhzb7yPdwLLEGugL3X7lde47QfzfhCAAAQgAAEIaEIgVRupD3EiRJGaInXJGnj27qh48fG4dR7RIKt8MfEdmPhs/Yxxi3GLBkZroK8NEzeficvv0cZoDcjzskd/d/gZHmhAXw2wFTTxYXR8KPRz7xZDyAnaX7g/JjbPY3Uwvp2WReyfNNZF79DEnuY2IQABCEAAAhDwikB9beRPSSa1TCZLLp6GUS8tcyPWOUPyvKFTm1nlW2iwzd/GGzNZk62fMWv1NWtp+4nb/kzr+L6C/hMmaGC8BuR52fQjMEADaMDWABOoxveTxI7CTOSE7X2bEtYE7j+4G+8mjH4M11y0bt9KzY486pUPzPtCAAIQgAAEIKARgeU3TXlnanbkJRKyohMyrQqoYdTHtoVR6zwhea7QhY7Cg0oG3fAppAFZ6LFNKx5hgQbQgNSA3BK+UL/B3+CDBoY1IM/Lpt+EARpAA7YGuhrYCpr4UF6O0NWSEN9eGRd/cV9UNM/BxwmjV8M1T6Lb2ZEtGtnS3CoEIAABCEAAAl4TWDPzvb+Wmh3ZTRI2SRLGlsuBLno31kWs84LkuUFHm8obVDIoh5+tgQty68oGTDvbtOMRLaCBYQ2cbqGftPtJHtFCIQ3I1X70GzBAA2hgtAbYCpq4UShuFPM3eUzP7g0J8dVHYiIzn62i8fRU8PSm/u2UKVOu8NoH5v0hAAEIQAACENCMQOPc2LRUbaSHhFGFhFGfe9h6Z0R88TMx8cM1cdG/la2dixks89zJjRe2fsasHG1W8jN6GK2BHiYasQLawfnxxFpDUACm7xzdd/IzerA10Ld58lycPhRGxWpATgSXE8Kfvzcq5ARx/C0YhEoDsyP/vubu6b+gmR3N7UIAAhCAAAQg4BeBxjmxGanaSDZUCRKrcrUa1DTURcRzH41a5//Ic4CyGQbFxQ6Keb5zzbD1MyalbVLyiBYu14BcvUR/CgM0MLkG5Hbpl39/+D9M0AAa6EoZYoBjesglPJxM1Zc2rInicsJ42x2sDsbnC3wx/GBTbWyqX/4vnwMBCEAAAhCAgKYE6mdPvT9VG3mL5DDwyaE2hd/WuRHrfB95zs/pNlb5YjZPbja7wYitnzEmMafRQCENdDf60xe50Z/xHrRVJTVAAZi+tFBfyt/01gdbQROf/IpPgxlDHEolxNcWxa0J5XJiOZ4XDAKkgTP1dVOv1tSG5rYhAAEIQAACEPCbQGp2ZEuAEiEScw1XOW9bGLXO8ZHn+Qx0UPT1a2DM5wybMHJluSzuYErCAA2ggXwa6GrAtCVmoAEnGuhpoR/J14/we7SBBoa3iXfSl/AcYo6bGjjZagg5wfwL98fE5nkUQvH/KqqBNxtnx+b67fvyeRCAAAQgAAEI6E3gilRt5G9IAiuaBGpV+G6ZG7HO6fnm8pjobmVw6+bglvcqXk/yTDIMORigATQwmQZyHEPA1pUebl2pSvzuaaYvmawv4e9oRGcNsBV08WMVVeJDUO7jQoch5MTzFx+Pi89+hK2i8QF99QHfaqiNPKK3/czdQwACEIAABCBQEQLp669/V2r21G+Q/Pma/GlV9O1cEBEvPBSzzuU5187ANygDYN2vY6DdEHJln85GHPdO+6MBZxrgHHpit+4x08n9yy1e6VNggAbQQCENsBU08dRJPPHrOV0tCSEnpj9/b1Q0zcEPwhP0UAOzoy0VMXz5UAhAAAIQgAAEICAJNN1p/GaqNnKAhM/DhE+j7Z0b6yLWeTvy3B15/o5fAzg+B0PBqQaypiEwqjEoCxmU/A19jNbAYAf9q9P+lefpqxWOVKDfHN1v8jN6yKcBuQMPsQIGQdOAnKi+c23CmrjeMZ/VwXiD7nmDDbWRv8J5hgAEIAABCEAAAhUnkLr9ymtStdGzJHruJXo6sUzfEbHO1fnuqrg4u5Wib9AGtFzPWJOFrZ8xJfOZkvwebUykAbljAP0oDNBAYQ2wqwb950T9J79DF5drQPYVxNXC/SnxprJ85M4vciL7S0ti4nMfj4qGOjwinbwtl+/1W2vunv4LFTd8uQAIQAACEIAABCAgCTTUTa1L1UbecDnh0Wq7Y53YPXt31Do/Z9+mhGB7zMoOUjEJnPNn62eMyMuNSP6PJibTwAUKwBTAOQN4Ug3I8z0n+y7xdxihATQgNcBW0M7HLozzKs/qzBZDyInuX7g/JjbPY3WwTp7XpPc6O//kgPrZ0b2Ns3/9N3CbIQABCEAAAhCAQKAI1NdOfWLSJEej7YxhMZLQtsyNiL+4Lyq+vTIuTm1mlS+D8coPxktpA7Z+xnjEfEYDxWrg/NZw9nel9JG8hrYuRQNyImCx3yueDzM0oLcG+trob0vpb3lNZXUzmDGEnAD/4uNx69gr/KIRvwgWY1j0Ns6dOj1QZi8XAwEIQAACEIAABGwC9bOj20jexiRv2q5i3rYwap2DI8/DucAZiJOufmFAXtkB+WT82fpZb6MRo5n2L1UD59LB7tsm6/v4O+3ntQbkOdmlfr94HezQgJ4aYCtoYpPXscmP9+9qSVgT5OVE+eY5eEj4iJYGhjbNicyy/VUeIQABCEAAAhCAQBAJXJGqjXyJ5E2/BL6xLmKdcyPPuznWzKDUj0Ejn+GPzqytn9meEoMeDaCBEjTQv8Wffop4AOewamCAAjB9awl9K4VfPQu/o9udraCJe2GNexNd9/l2Q+zekBBffSQmzPn6eUn4h1abv9VQF30oiCYv1wQBCEAAAhCAAATGEFg/K/lLqbrId0ni1E/ct94ZEV/8TEz8cE1cnGWbS1b5KnrO4akmTLbRhhs/owc04FwDbFOJQT2R0cvvRnQhz8mmT4EBGkADpWiAGDvSlxJX1GJxtMkQcmL98/dGRdMczg7WwlucPbVhjLHKfyAAAQhAAAIQgECQCdTPnRpL1UaOapGoaXSucUNdxDqv5muL4uJQKiHkuW0MNmGgsgbY+hlDshRDktegG1sDsg9RuY/k3mjfcjUgz8m2vy88wgINoIFiNGBtBc1RQ+QZik5CtuNrX9qwJtz/3UMxISfg47Gpx6ChLvqXQfZ3uTYIQAACEIAABCAwIYGNtbHrU7WRcySo4U5Qt9wREV+4P2adT3O6LcEAU/EBpj3Q5NEQclvKLrYlxJhHA2igDA30tlIgJJ6ggUIakOdkF1Pw4bnwQgNoYLQGTsmjh5iUzBhdkzH6YMawJuLLCfnPfTQq5AR9/LZwM6ivnfrN9PXXv2tCU5VfQgACEIAABCAAgaATaKiNLEzVRn5KUhqupHTbwqh1/ow8h2agg6JvIeOSvylqbGcMwdbPGIyjDUZ+Rg+laOB0i6J9pCZGKzHee/3Kc7JL+W7xGrihATRga+Bsm/d9FfEAxkHUQG+bIb67Km5N2N88L1yeEx5hRDTURl5ZN/c97wm6r8v1QQACEIAABCAAgYIEGmqjy0jugp2Mt8yNWOfLfHN5THSzWokZ1Bj7Qp4pZptKPMICDaCBUjXQI1cm0afCAA3k1cBZCsDkG2XsslBq38zr1IrrbAVNrkGuZYgLHYaQE/hffDwuPvsRzg0OgQd5uv62yPsKmqn8EQIQgAAEIAABCISFQKou+kchSMC02j5n24KIeOGhmHWezLl2Bo0MGtGArQFr6+cGtYwxjE7aEw1URgNyJwG7b+ERFmhgvAbkOdn0TzBAA2igXA2wFfT4/pWYozeTrpaEkBP8n783KprmBHtBgoZeYS51e/TWsPi5XCcEIAABCEAAAhCYlEB6ypS3pWoj/6hhYheYonJjXUR87uNR8dKSmHVuDANCvQeEtH/+9mfrZ0zIck1IXo+GbA10UwCmAM7q34IaONNKf2H3FzyiBTRQngbYCjr/+Iaxn95s5IT/nWsT1gKAjvmsDvbal6yvLVhw/3mqLvKpSU1UngABCEAAAhCAAATCRiA9d+q7U3WRHV4nW7z/SLKZviNinQcjz4U5u5WzfBn46j3wddL+0jjCfIMBGkADbmngZCP9rpO+l+foq5NeCsDkHWwBjQZc0gBbQesbS8gjimv7o02GtTBALhBoqBvxj/DSfGBRF9kYNi+X64UABCAAAQhAAAKOCaRuvzKRqo2cILH0LrF89u6ode7Lvk0Jkc0UNxBg4AQvnTXA1s8U/dwq+vE+aMnWgDSjde5XuXfafzINnG6hv7D7Cx7RAhooXwNsBU3cmSzu8PexGjmzxbCOBfviZ2KibR6rg731Kqf+uWPzlCdCAAIQgAAEIACBsBKor73yxlRtZNDbxMq7AmvQrrt1bkT8xX1R8e2VcXFqM6t8GdCNHdDBwzmPnqbyTSeMOxiiATRwuQaYjOW8HyZm6ceqp5k+4/I+g/+jCTRQngbYClq/WEL+4E6bD2YMIRcSvPh4XDz3UYrBLnt/X0/PnfKOsPq4XDcEIAABCEAAAhAoikBD7ZX3pGojP3M5oQrMebte39e2hVHr/BZ5jotctciABwZooDwNsPVzeUYbRiX80EB+DVAALq9/Jr6pze8Uk6/Y/tel7X+JQ/njkG5srK2g29XuO4mNtK8fGuhqNayFBnLBQfMcfRZZeODn7Wm46zd+vSjTlCdDAAIQgAAEIACBsBNI1UbqPUislCwCy2T7+Xuj1jktx5tZ5evHYIfP0GdQPdhhiC7MRwxoNIAGPNIAE7X0iSfkDsW3dXcjRSvdinPcL5r3QwNyckmO45CYKG4WH5eI5RMzO99uiN0bEuKrj8SEOZ9icBFe5smG2xPVYfdvuX4IQAACEIAABCBQEoH62sifFpE4KVnczXf/W++MCHkOyw/XxMXZrRMn4QxO4IIGytRAxhBsP4kR6YcRyWfoq7MBViFhQGNA59XASQrATL7xaPINcVffuGu3PVtBlzlOInbljV2MwQ3R1ZIQ31wesxYqNM1hu+g8vl5u0+zozJLMUl4EAQhAAAIQgAAEVCCw/KYp70zNjryUJ1nSquDbWBexzln52qK4OJRKCLaMZMDKwNJ7DfRvwRyzTTIe0QIa8EYDcsUE/TkM0MDEGmAHDm/6HfpzuKIBQ7AV9MT9LvEILm5roC9tWAsXXngoJtrvohh80d/8eao2cq8Kvi33AAEIQAACEIAABMoisGbme38tNTuyW8ci8JY7IuIL98esc1VOt7G1s9sDEd6PwW0hDVhbPzdgEGIQogE04K0GzqXpiwv1xfxNY31kDPE6cZgVwKwARgMeaoCtoDWOMaxgrsgERLmQQS5okAsbnvtoVDTU6bpddHRdWUYpL4YABCAAAQhAAAIqEWicG5uWqo306FAEfvbuqHjx8bh1fspAB0VfjF8G5RXRgNz6ucXbog9FNfiiATQgNSB3GqhIP4fxCfeAa0CaxPSTMEADaMBrDZwlDhMPAx4PVc4Te7cY4rur4tbCh7Z52hSDP6+SX8u9QAACEIAABCAAAVcINM6JzUjVRrKqFYFb5kasc1Hk+Sjdmyn4qjy44d7CU+Rg62fMRq/NRt4fjdkawHgOT2wgjvvbVnInDvt7wiMs0AAa8EoDcqv5AY5joAhMEbjiGhjMGGLfpoS1IOLZjyhaDK6LfC09d8o7XDFJeRMIQAACEIAABCCgGoH62VPvT9VG3gp7EXjbgoiQ55/sXJsQFzr8NdMwL+GNBgprgK2fMRi9Mhh5X7Q1kQb62gr3SfTZ8NFVA7IgM9F3ht/BBQ2gAbc1cKrZELkM8UbXeMN9B1P7XS0J6zi0v7gvKprmKFAQnh3Z3XDXb/y6aj4t9wMBCEAAAhCAAARcJZCaHdkStgJwY11EfO7jUfHSkph13gkDjGAOMGgX2kVqgK2fMRXdNhV5PzRVSANnWul7ib9oYCINXNhK31Go7+Bv6AMNuKuBs0zIqvgK0IliAb8jR5AaONduWAso5EKKzPyoCJsnmKqNdG2oe2+Vq+YobwYBCEAAAhCAAAQUJXBFqjbyN0FP+NJ3RqxzTOR5Jv1b2dqZgRsDtzBogK2f3TXSMCbhiQYm10AvBWAMZ7adnFAD5ykAswI6NXkfSpyBkVsasLaCZneuCfvjMIzjuEa9/IajTYa1wEIutGioC/zq4IH626Z+WFF/ltuCAAQgAAEIQAAC7hNIX3/9u1Kzp34jSEVgmXQ+99GodV6JPLckyxZSDB4xdEOlAXnmUFcDJppbJhrvg5bQgDMNnG7Ry7DDoKW9nWqgP+3sO0RfAyc0gAbc0gBbQROjnMYonhccrZxJG+KHa+Lii5+JibZ5gVsd/LOG2ugn3HdFeUcIQAACEIAABCCgOIGmO43fTNVGDlSyCNw6NyLkeSTfXhkXPZtZ5csgKDiDINqi+LZg62fMQ7fMQ94HLRWjgR557iAThmCABsZpgF056EuL6Ut5LnpxSwNntxCXyUvQQFg1ICd1H0olxNcWxa0FGpX0C+Vn19dOXaO4NcvtQQACEIAABCAAAe8IpG6/8ppUbfSsn0ndtoVR8dVHYmL3hoQYYIuocWZdWAcKXLfeg1xMZkxDt0xD3gctFauB7ia9+1/iL+2fTwN9bfQnxfYnPB/NoIHyNcBW0MSlfHGJ34dPGydbDWvBxhfujwm5gMNP7zBVO/U579xQ3hkCEIAABCAAAQhoQqChbmpdqjbyhleJXPOciHj+3qh1vsjxZlb5MugJ36CHNivcZoMdbP2MWVi+WQhDGJaqge7Gwn0UfTh8dNUABWD61VL7VV6HdsrVAFtBE3t1jb0q3/f5dsNayCEXdJgLvC4GR//5/vunvF0TW5bbhAAEIAABCEAAAt4SqK+d+oSbBeCtd0as80PkOSL9Wxn8qDwI4N7Qtzx/s1yTiNfDEA2ggVI1IM8eJxbBAA2M10BvK/1Kqf0Kr0M7aKB8DZxtG98v0VfDBA2oo4GuloT45vKYteCjaY6rZwf/OD136ru9dUF5dwhAAAIQgAAEIKAZgfrZ0W2lFoEb6yLW+SDynBB5Xkg2o05SywCFtkQD+TVwLl2+OYTBBkM0gAbK1UCOvIMiOGcAj9NALxO0mKCWIr6UG194fekaYivo/GMoxpewUU0DfWlDyAUgLzwUE+13lVUM7krNfW9SMzuW24UABCAAAQhAAAK+ELgiVRv5ktMi8JY7IkKeA/LdVXFxNs3Wzqol8NwPg9LJNCAnesiVdxhjMEADaKDSGshS/BtX/JusD+fv6sf5HgrA5CgUgNFAhTVwqkn9vpZ4ShujgbEakD6BXBjy0pKY+NzHo6KhzvF20RcaZkc+5Iv7yYdAAAIQgAAEIAABHQmsn5X8pVRt5Pv5isDP3h0VLz4et879GGS1DWYrhrvWGmDrZ4p+lS768flo0NaAPIsc8w0GaGCsBnqa6SPsPoJHtIAGKqeBs1vG9k301fBAA3ppoHeLYS0ckQtI2ublLQb/tH721I/o6MNyzxCAAAQgAAEIQMBXAvVzp8ZStZGjo4vAX3kkLk5tZpUvAxW9Biq0d/72ZuvnyploGJiwRwPjNTBAAZgCOJPSxmmgu2n8d4X+AyZoAA34rQG5YxBxOv+4ijEnbHTSwIUOQ7y8PiH++v6YGO05pmojK301PvkwCEAAAhCAAAQgoDOBhrrobzfURs7LhOzvHoqNM5R0SlC5VwZkaGCsBtj6GePQb+OQz0Nzk2ngQvvYfop+Gx5owBDdjfQdk/Ud/B2NoAF/NHCqmbhEXEIDaGBEA71thmi0t4aeHfkDnf1X7h0CEIAABCAAAQhUhEBDbWRhqjby02NNrPwlUR9J1GEBC7Z+9scow5CEMxpwroHzafpm4jMauFwDctUd/QgM0AAaCIoGzrbRT1/eT/N/NKGzBuT5wKnaqf/r/vunvL0ipicfCgEIQAACEIAABHQn8Fe/F2vXOSHl3hmQoYGxGpBFlqCYSFwHbYEG0ICtAbktPf01DNDAWA1QAKaPtPtIHtFCEDTAVtBj+2hiFjx018B3VsVOpW9K/LLuviv3DwEIQAACEIAABCpGYMg0WnRPSrl/BmZoYFgDcuvnk2wnSQE8hYkaBBOVaxirw/4txCpiFRoYrYGsOfY7Qp8BDzSABoKgAbaCJlaNjlX8rLceBjPGSSGmXFExw5MPhgAEIAABCEAAAroTyJnGj0jK9U7KaX/a39ZAbyvGWRCMM64BHaKB8RroY1tJVkCbxGs7XsvHwY7x3xP6DpigATQQBA0waYt4NTpe8bPmesgkb9Hdd+X+IQABCEAAAhCAQEUIDG2LTcuZxlsk5Jon5BiqmOqmIc5vxTALgmHGNaBDNDCxBvo2E6vJ19DAaA0MUABmxw527EADAdVAV8oQso8a3WfxMzzQgKYayCSfqYjhyYdCAAIQgAAEIAAB3QnkMsYGknBNk3CKvhgSozTA1s8TF5woxMEFDQRHA3KHAnIWGKCBEQ1caA/O95O+krZAA2jgcg30NBkilxnps+i/YYEGdNVA8rDu3iv3DwEIQAACEIAABCpCIGca3yYJ1zUJ577R/ogG2PoZ0+5y047/o4mgaeB0y0ifRf8NCzTAzh1B66O4HuImGhivAbaCJl4Tr9GA1MDg7xsfqojpyYdCAAIQgAAEIAABXQkMmpFozjR+RkJOQo4G9NaAtfVzw3jDBhMLJmgADQRJAz3NevfVxGra/3INnEvTRwWpj+Ja0CMaGK+Brga2gr687+b/xHMdNcM5sbAAACAASURBVJA1jXZdvVfuGwIQgAAEIAABCFSEQDZjrNQx8eSeGXChgRENsPXzeKMK8w4maCCYGjglt5IctXU9P8NDdw3IlXX0VzBAA2gg6BqwJnCxFTQ5DDmc1hrImslXKmJ88qEQgAAEIAABCEBAVwJZ03hJd+OM+8c81l0DbP2MaRh005DrQ6O2BropAGttHOoerye6/7MUgCmAp4gRdozgMdhaYCtoxt0TxTF+p5cu3uyIX6er/8p9QwACEIAABCAAAV8J9KenvSdnGm+ScOuVcNPetPdoDZxvN8TrbP2MeYx5jAZCooGTjfTho/twfkYPfW3BLvhQkKN90AAasDXAVtDELPIWNDDUabT6anzyYRCAAAQgAAEIQEBXAkOdxuMk4CTgaEBfDcitn7sbMaVsU4pHtIAGgq8BaR4Tt2CABkY0cKY1+N9b+lbaCA2gAVsDbAU90n8Ty2ChqQZ26OrBct8QgAAEIAABCEDAVwI5M/kPmiacmMecvYMGTEOw9TNmnG3G8YgWwqQBOXmF/AUGaGBYA8Ry+u8w9d9cK3qVGmAraGI4MVxvDbzRUfU+X81PPgwCEIAABCAAAQjoRkCkE7+cM40sibfeiTftr2/7s/UzBhwmLBoIqwYoAOsbu8hbxrf96Rb6srD2ZVw32tVVA2wFPb4vJ77BRC8NJOp182C5XwhAAAIQgAAEIOArgVzGuF+vBJMBBe2NBmwNZE22ftbVcOO+MZtV0MBAB/253Z/ziBZ6KABzhntIznBXIf5wD+7lUT1Nhsixowc7mrAzma4a+J6vBigfBgEIQAACEIAABHQjkDONv8U0xDREA3pq4Mxm98wbjDBYogE04LcGBtr17LuJ2bT7RBo41Uwf5HcfxOehOTTgjgbYCpq4NlFc43da6OKtod9PVOvmw3K/EIAABCAAAQhAwBcC4o+n/0LWTJ4nsdYisdZ1Rin3nWc29YV2dwwbjC84ogE0UCkNyC3syWFggAaGNdDdSF9Uqb6Iz0V7aKA8DbAVNLGcWK6xBjLJp30xQPkQCEAAAhCAAAQgoBuBbKfxURJtjRPtPIVBNKG+Jtj6uTyTCpMPfmggGBo4l1a/vyYm08ZONXCSAjBbQLMFNBoIsQbYCpp45zTe8TzVtJL4lm5eLPcLAQhAAAIQgAAEfCGQNZN/SfKsWvLM/aDpyTXA1s/BKF5RRKQd0EB5GmDLyMn7e2KiPoy6Qlz4oS8sry+EH/xU0QBxXZ+YRX5CW4/SwM+zZk3cFxOUD4EABCAAAQhAAAK6EBBfnvL2nGmcHpV0sY0iK2LRgAYasLZ+bsAoU8Uo4z7Qss4aONuGeUYehwYsDWQM8TqxndWfTAJAAyHXAFtBE9PIa/TUQDZjrNTFi+U+IQABCEAAAhCAgC8EhjqMO0iu9UyuaXd92z2bMUR3EwUznQtm3Dv6V0kDfZv17c+J5bT9aA3I+K7Sd5t7oT3RgL4aYCto4tvo+MbPeugh22n8H1+MUD4EAhCAAAQgAAEI6EIgZyY/RzKtRzJNO9POtgbY+llfMw0jlbZXUQNnWunf7f6dR721MNhBH6diH8c9oWtdNcBW0HrHNHIaLdv/pxfSiSt18WO5TwhAAAIQgAAEIOApASGmXJEzjRMk1lom1mzzrME2zxN9t9n6GRNRVxOR+1ZX+70UgInpmsb0y+P8QLu633P6cNoWDeinAbkVtJzYcnlfx/9hggbU1cBQZ2KRp0Yobw4BCEAAAhCAAAR0IZDrNGaROKubONO2tO3lGmDrZ/2MM8xS2lwHDZxuob+/vL/n/3pq4sJW+jwd+jzuEZ3rpIGeZkPkMnr26cRy2l1HDQyZxj/p4slynxCAAAQgAAEIQMBTAjkz+VkdE0rumYGUrhroa8Mw08kw417Ruy4asMxhVoCyQgoNiPNp+j1d+j3uE63rpAG2gmb8ruv4XdP7frM/Pe09npqhvDkEIAABCEAAAhDQgUDONA5qmlBikmKSaqcBuS2k3EZNJ7OIe6W90YAeGuhuwhgln0MDUgP9FIDJc1J69PvEd73ama2giXHkOXppYCiTfFgHT5Z7hAAEIAABCEAAAp4RGDSND5NE65VE0956t7cskGCWwQANoAEVNdDdqHf/Tnyn/W0NyFVyKn7HuSfaFQ2gAbaCJtbZsY5HHbSQ+KpnZihvDAEIQAACEIAABHQgkM0kt5I465A4c4/o3BBs/YxphnGKBlTWgFwZRF8PAzRAvFe5n+PeiONowBBsBU2sJ9Zro4GceDb6Kzp4s9wjBCAAAQhAAAIQ8ITAkGnsJnnWJnnGGNd4y2tr62e2A2RFFBpAA4prIJchppPXoYG+zRTJKJKhATSgrgbYCpo4R66jkQY6jd/zxAzlTSEAAQhAAAIQgIDqBN7oSF5N4qxR4qxx8ROdG4Ktn9U1wTA4aVs0MKKBLLGOyV5oQPS2jnwn6B9ggQbQgIoaYCtofAzG+Npo4G9V92a5PwhAAAIQgAAEIOAJgaHOZCNJszZJM4awxoYwWz9j/Klo/HFP6HoiDQx2ENfJ7dBAbwv9w0T9A79DF2hALQ2wFTTxjpxHCw0MiPS0X/TEFOVNIQABCEAAAhCAgMoEcqbxAxJmLRJmir8aF38HOgzRpfiWr5h5apl5tCftWY4GZJ9HbgMD3TUgV8aV8z3itfBDA2ggDBpgK2jive7xXpf7z2YSH1PZm+XeIAABCEAAAhCAgOsEcs8YyZxpvKVLwsh9MjjUVQOnmjCwwmBgcY3oFA24o4ELW4l3usY77ntE+xSA3elP6JfhiAaCrwG2gh7p+4mDsFBVA9mM8deum6K8IQQgAAEIQAACEFCZQM5MrlU1OeS+GPiggWENsPVz8E0rjEXaCA24q4HzaWIgMRANdDP5ixXQ7P6CBjTSAFtBE/fIfZTXQL9IX/8ulT1a7g0CEIAABCAAAQi4SiBnGv+XJFn5JJltMNn6GfNLI/OLQqK7hUR4hpNnPwVgYr/Gsd/O7U82hvP7S79Lu6EBNFCKBtgKGl/Djn88qquFQbNqoaumKG8GAQhAAAIQgAAEVCVwIZ24MmcaPyU5Vjc5pm1p21Oc/0fxm+I3GtBQA6wCIv6RAxlCFkNKKaLwGrihATQQVg2wFTTxn/ivtgaGMonPq+rRcl8QgAAEIAABCEDAVQLZzuQykmO1k2PaV+/2PduGeRVW84rrRrtooDwNyK3viYEw0F0DFIDL60foh+GHBsKpASaBEf91j/+K33+vSE95h6vmKG8GAQhAAAIQgAAEVCQwlEn8b8UTQ8xftj/UVgMDHaz8wbQLp2lHu9FubmigbzPmJzme3hrImvQlbvQlvAc6QgPh0wBbQesd/8h/1G//oY7kXBU9Wu4JAhCAAAQgAAEIuEbg7O//1q/nTONNkmP1k2PaWM82Zuvn8JlVGIy0GRpwTwO9rXr2/cR82t3WwGDGve8TfRMs0QAaCJsGelqIB3Y84BEtKKeBzuR/ds0c5Y0gAAEIQAACEICAigSGzOQjyiWBrHbVdrUrWh47qD27BZMqbCYV14tm0YC7GjiN8UtOoHleKHcCoV+BARpAAzprgK2gx44RGTPDQxkNZBLdIj3lbSp6tdwTBCAAAQhAAAIQcIVAzjS+okzyp7nBRzsykButgUG59XMKs0tns4t7R/9owBA9zcSG0bGBn/XTw4V2+kL6QjSABvTWAFtB6xf7yHc0avNOY5Yr5ihvAgEIQAACEIAABFQjINKJX86ZxiDJsUbJMUVybVZCyaIHZhcM0AAa0F0Dcht88hwY6KyB81vpB3XvB7l/vgNogAlhOsdB7l35PPAPVPNquR8IQAACEIAABCDgCoFcZ/JTJMPKJ8MY3xoWveU2Zxg9MEADaAANGKK7iThPrqe3Bs6l6QvpC9EAGkADUgNsBa13PCQfUrb9jwgx5QpXTFLeBAIQgAAEIAABCKhEINeZ+O8kwcomwRR+NSz8yu+ztfVzAyYPRh8aQANoQGrgZCNxnlxPbw0wKYy+kHiIBtDAsAbYClrveEg+pG77Z7fFb1LJq+VeIAABCEAAAhCAQNkExPM3vTNnGmdJgtVNgmlbDds2Y4ieFkwuTC40gAbQgK0BafYSD2GgswbOsisIu6KkiAl2TOARLcixks4xgXun/VXUQNY0Oss2SXkDCEAAAhCAAAQgoBKBrJm8W8XEj3tiQKOzBljlg6mFsYkG0MB4DWQzxEadY6Pu997XNv47QT8BEzSABnTWAFtBkxfpnhsoeP8HVPJruRcIQAACEIAABCBQNoGhTOLzCiZ9zObVdNtjtMzWzzqbWNw7Ji4aKKwBCsAYvTrnCWdaC38/6D/ggwbQgG4aYCto8gKd8wJV733ArLqhbKOUN4AABCAAAQhAAAIqEBBfnvL2XKfRo2rix30xoNNRA2z9jHmnm3nH/aJ5pxoY6CAu6hgXuedh3fdSAGYLaLaARgNoYJwG2Aqa3Ig8QS0NDJmJLSr4tdwDBCAAAQhAAAIQKJvAUEdyLsmuWsku7al3e7L1M4Uwp4UwnodWdNTAQLveMYIcQe/2P91Cv6djv8c9o3s0MLkG+tN6xwfyA9pfJQ0MdRovl22W8gYQgAAEIAABCEBABQK5zsQfqZTocS8MXHTWwGCHIeQ2Zpg8MEADaAANTKyB81uJkzrHSd3vnR1CJu4X6C/hggbQAFtBkx/pniOodv9vdiauVcGz5R4gAAEIQAACEIBAyQSEmHJFzjSOqZbocT8M3nTVwGtrYmLn0qh4eVlUvLw8KnYvj4o9K2PilSdj4tUnY2LfUzGx/6mYOLA6Jl5bExevPR0XB9fGxaH1CXF4fUIcWZ8QxzYmxPFNCXFiU4JCMlvkoQE0oJwGzrHCR+gaI7lvQ5xqpshDoQ8NoAG1NCDHLHLsIscwciwjxzSH1iWsMc7Bp+PWmEeOffavHh4LyTGRHBvJMZIcK8kxkxw7yTHUgTUxYqSJl0C+oIYGhkyjqWSzlBdCAAIQgAAEIAABFQhkt1XNILlVI7mlHWnH7sa4+PGiiCf/ti+RpkhE7FoaGS4sr4iKPSti4pWVw4XlV1fFxd6n4paxcuBSYXnYfJEmzFH5b6NdXDbEiXq1jCeMRNoTDYRHA3KbfGImDHTVQHdjeL6r9Ku0FRpQRwMy9z9eb1hF2mMbEuLohvhwoXbtcKFWTkqVYwhZpJVjir2r4uLVVcNjjT0romL3iuFCrRyL7FwSEXJssn2xN+MeOabSNUZw3+RHimngRyr4ttwDBCAAAQhAAAIQKJlALpPYpliCx2CNGbtaakBu/SxnrntVAPbqfbcvjoodVnH5slXLo4rL+1aNWrUsZ/GvHVm1fGR9nFXLrFBVboUqhre3hvfZNsw9cj99NXCSAjAxg7wBDRTQwESraeVkTrljkLWaVhZqL66mlYVaezWtnBQqV9PaK2rlalqZ48tCrVfjCK/eV64IlmMrYiUM0EDoNfDW0LbYtJINU14IAQhAAAIQgAAEwk4gZxr7SWpDn9QyOKXoLQbak+LYxmrLaPHKDAnV+y4eXhlgrVq2t8O+bNXy3lXDKwzkSoMxq5bXXtwO21qdcHHVcj2rlilKeluUhK9/fPs2E/fJ/fTVgDzjkv4GBmgg3BqQq2lloVZueXx0ozFu2+Ph1bTDR75cWk0rtz1eGRPWatqL2x5bq2mXDhdpvVpNG6rxw6KINZY6tqFKDFAAxmPAY1BDAxljQ9h9W64fAhCAAAQgAAEIlERgwKy6AQNQXwOQtlev7U83VwtpWMjZ9mEzW8J0vTsWD289J1c27JLF5WWjzlq+uCX26LOWreLyxVXLh9fJFcvjVy2fKLASA5M23CYt7Re89jtDAVgNQw9jtqR2fJ0CMAVwcg7fNHCiftTZtBuGJxhOtJp2n9zy2F5Nu3K4UKvKatpQ5fhLouLohipxurmqpP6V8bV642vaVIk2/U5JhikvggAEIAABCEAAAmEnMGQmtpDQKpHQMkDFBLY0IFcBv56qoQjs0TnInhtY9qrlJZHhwvLFbfRGzlqOipFVy3L7vbiQKzwOPi235WPVMoXW4BVag9omva3EfvI/PTWQzdBPBLVf4roqp81Lq2k3GSOradclxKF1F8+mXSPPph1eTWsValfFhrc9lqtpVw5PAty1LCZ2LosKa9tjmc95dDat57loWHNoF65bTqA9uqHaGksNdCQZXzO+RgPqaOCt3DNGMuz+LdcPAQhAAAIQgAAEiiaQyxg7MQD1NABpd3Xbvbe5WrxeX2PNXt+xmJXAGGURazW4XLW8Y0nEMiatVct2cVmuMnly2MiUq5blP3mu26UtsZ+OizGrljckxLFNCWvbQVYtV86splBQHvueFnVjAPGdti2kAXmmJf0HDMKqgctX0x5ZPzz57ZB9Nu2auNi/Oi72rb64mnZ0oXaFGmfTktcO57Vuc5DnFB9ZX2WNoXpbWP1bKI7wN/KMUGogk1hdtGHKCyAAAQhAAAIQgECYCQx1RK8KZeKmzixEZpTSlp5oQJ5XJQvAl4rAbAfNdtgurIooZLTJVS5y1YS1JfbSiLC3LJRnzNnF5b2rpCk7Ulw+KFcur42LQ/bK5fUJcWzD8DaJ8kw7issUKLwsUPQ0Y96RA+qpgYF2+hYv+xbee1hfckXt8Yvn08rYLrc8lv9kzJfxf/h82uG8wD6fVuYLE51PK/MLWZzb7nEuUyjP4W/eFF2DwnX74pHib1eqhrN/GaN7MkYn76pw3tVpfDPM/i3XDgEIQAACEIAABIomkDMT9SShFU5CGVwxuPJIA3Lm+qUi8PoqIVd/BsVk4TpoC6cakIVlafpK83fX0oh42V61LAvLF1cuy8KyNI+t4vIae0vskcKyNJyl+Xxs48Xicj3FDwoUhuhuIv6TA+qpgQtb6QPpA0eKtHLClVWo3ZAQI6tph7c9loVauRuI3BVExlgZb1+VRdonY0JO8LIne8n4bG17zIRDcu0QFull8ffo+uHdk+TYqbeV1b/kB3rmBxq0+88G0tFI0cYpL4AABCAAAQhAAAJhJZAzje9OmORlSHgn5OJRoY7PQm9eaGCwIym6Lq4CtlYCyyLwEgqPTguPPE99rXhSXE5RWAlLYaW7kdjjRezhPYOvq/Np+qmw9FP2dbKaVv2chLyzMm08euWvHC/J1b9yDEUsC34so41oo1I0kO1MLgurf8t1QwACEIAABCAAgaII5DJJI2cab5WSNPEakm00EA4NjF4FTBG4MsYShp6e3L3YEtsuBPDoTvGqqyEc/TjxlnZyWwP9FIA9OQNZFmndXk0rYwl5BAzQgDcakN+vw+tGdkySY6UzrdUUf5n0jgYU1sCQmfh6UcYpT4YABCAAAQhAAAJhJZDLJFa7bSjxfpiUaCBYGhjsMKyZ7NLQsP8dZTtozNQQbs+H+Tlsfnqxavn1VMKTYkjgC9WyAMyOJ5icCpuc+XKy/i3uTKII/Hc8z44MrKb1pphGnIZrmDQg86kj65KXxkdynDS8+jdYY7l8/Ti/p53QQMka+Mn5dPK9YfVxuW4IQAACEIAABCDgmECu0/g3ksaSk0YMUw0N07B+X+RMdrv4az8eWV9lnasaJqOGa8VYRAPeakCaofKsZXmOozzP0T7bUZ7zKM97lOc+yvMfrbOWV8escyHl+ZAH146ctyzPj5TnLcvzJOVKuKAXiLLEMvIZDTXQ1xb8AjCrab3t74mn8NVZAxOt/JVjpD5W/5ITaJgThNXjKOe6h0zjMcfGKU+EAAQgAAEIQAACYSRwodP4zZxp/LScpInXUjxGA+HQQDYz9izgS0XgdVVix+Ioq2FZDYsG0ICnGgjyqmW5SwKxDAa6aaBvs3sFYFbTUkjUuZDIvYdP//mKv131NUKOmXSLB9wvOZCmGvjHMPq4XDMEIAABCEAAAhBwTGCoM7FE00SPQR2zWrXUwJnNY8+3ulQEtraDpgiMgRc+A482o82sFcuLI8MrlpdFxcvLotaq5T0r5Yrl6MUVyzGx76m4OHBxxfJr9orldXFxeF1CDLQntIwJ5IB6G76nmhLi8PqEOLQuLuQqfvm92L9Gru6Pi71PxcXeVcMr/l9ZGRO7V8TEy8vlv6jYuSwqdi6JWDuIbGfijKcTZ4hxxDg04IEGFkfEobVjt322x0R9m6vIB/AJ0IA+GnhDpN/7a44NVJ4IAQhAAAIQgAAEwkZgyDT+CfNPb/OP9ter/bMZeRbw+K2gpelxhJXAmLgY+WhAUw2caaUATD6gVz4g2/vgmhh9nqZ9HkVFD4qKaCkc/YlV/J14Qqw8+1eOlYiHMEADOmkg8Zmw+bhcLwQgAAEIQAACEHBEQDxz5a/mTGOI5Fan5JZ7Re+GkDPb7Vnulz8eXlcl5Go6jEEYoAE0oJMGKACTH+iYH+xfzc4fOvVz3CtxXXsNFCj+yjFRXxurf3WMhdyz9jng/3BkoPIkCEAAAhCAAAQgEDYCuUziQZJd7ZNdZjjrs73RpbYeXgVcQxGYlRoU+tEAGriogTOt5APkhPpp4AArgOkDiYNoQBsNRPNu+yyLv8Orfzn7l1xAv1yANjey4tnor4TNz+V6IQABCEAAAhCAwKQEcp3Gl0n2SPDRgJ4aKLQKWJogrARmlYj2q0S0MUTRutT6mc15TF+2grw0eYh8Qb18QZ75S19PH4gG0IDqGpBnlR98euIzf+3dkM6y+pd4r+HEcHK7i7ldJvnJSQ1UngABCEAAAhCAAATCRECkp/1izjQukPCpZ+bRprSpEw1kzfxnAdtGyKG1bAetuiHG/WH6ooFhDeQtAGMGYggrrIGDaw0KwEz2QQNoQGkNWMXftYWLvycbaoQcGzkZQ/EcOKEBBTXQmfjvYfJzuVYIQAACEIAABCAwKYFsZ+JeElcFE1cGrgzci9DA2QJnAV8qAq9LciYwxqDSxiAFUIrgO5dGxZlWzv0jL9QvLzy8Pkn/ToxHA2hAWQ04Wfkrxzz9W8gByAH0ywFo8zFtfkEukpnUSOUJEIAABCAAAQhAICwEsqbxBRK+MQkfhcMiCodoRw3tyLOA5Yx3u9ib7/HwWorAFAkpEqIBdTWwZ2Vc9FIAJg/SLA+Sq92Ob6xWtvBDn61un03b0rZONTDZts9y7HOyoVrIMRHjWxigAb01kO1M/m5Y/FyuEwIQgAAEIAABCBQkIJ6/6Z050+gjwdU7waX9aX+pgbNthbdEs4vCh9exSsip2cTzMCbRQLg0sO8pQ5xursb81awAqnseNNhhWBPAdiyJUgRmBSgaQAPKaeC1NcN9nD2WyffI6l/GxLrnA9z/8Hcgayb/sqCRyh8hAAEIQAACEIBAWAi8sS2xgCSPgQ4aQANSA3IFkJz5ns8UGf37Q2spAlPYC1dhj/aivZxoQPZtPU0UgMkL9MoLBtqHJ4DtXh5TrvDj5HvPc4gPaEBdDRxwWPztbiD2E/v1iv20d8H2PiPSU94RFl+X64QABCAAAQhAAAJ5CQyZxp+R+BVM/FgFxCogrTQgZ76PLvQW+vnQ07IIzGohTEN1TUPaVr+2PbahWnQ3YgKTG+qVG57fOlwA3rsqQQGY1Z9oAA0oowGnxV853unfktRqzEec1yvO097Ft/cbHYm78hqp/AECEIAABCAAAQiEgYBIT3lbzjROkgwWnwzCDGaqakCee9Xt4CxguzAsV8ttxyhTxiij4KlfwZM2H2nzHYuj1gQYuROCqn0890X+MpEGzqWHC8CvPW0Qz8hp0AAaUEID+1c72/ZZjmnk2GeivpHfETPRgL4aGDKN/xIGX5drhAAEIAABCEAAAnkJDHXGa0lo9U1oaXvaPp8GilkFLE0TuRKYIvBIEYmCGizQQDg1ILe/lX1aV4oCcL74wO/VzB3kyjep/SPrq5Qo/NAHh7MPpt1oN7c0cOAp58Vf2ffJSTDENzXjG+1Ku5ahgVPiy1PentdQ5Q8QgAAEIAABCEAg6ARypvGHZSRDDJLYGhkNqKoBaxWws7OApWki/x1kJTCmOStm0EDINSC3v7X6tFSNyGUwzMgR9dFAX9twAVjqnwldFOHcKsLxPmipEhrYX2Tx1zr2gZjPuF7VcT33VZa25aKZoPu6XB8EIAABCEAAAhDISyBnJg9j7ulj7tHWtHUxGui/uB2kXeB18niQlcAUAENeAKyEUclnBscgf23NSBFMbodfTJ/Jc+EVZg30tY5M+tq1NEosI5ahATQQSg0UW/yV45vzrP4l36FIigbya+A/5TVU+QMEIAABCEAAAhAIMoHstvhNYTaquHaMVjTgvQbkjHgnhd/Rz+H8wOAUsygs0hZooDgNHF0/0ucNdHjfxxLHYBwUDfS2jGj/lZXxUBZ+6O+K6+/gBS/VNLBv0pW/I/2cPXY51cSOH0GJQ1wHOVFANXBCiClXBNnb5dogAAEIQAACEIDAhASyGcMMaILF7MP8sw9hAxtfNSDPw7INkmIeX1tjYB6zcgQNoIFQaUBue3ti0/CW9rK/u9COEUeeqI8GTjePFEbkCjrVCkPcD8VONKC2BvbZRzhcPJrG6bjl/FbO/iXW6xPraesS27ozOXNCU5VfQgACEIAABCAAgSATyJnGXhLAEhNAipC+FiHRaQV1Ks8CLmEVsDRdXns6iYFMARANoIHQaGDX0tiYCS+YwhWMPeRZvudZPU0jBeBDa6tC872lqKd2UY/2pX2daGBvicXfU03Vvve1jGvJLdBAGDWQ/GyQvV2uDQIQgAAEIAABCIwj8GZn7HoSzzAmnlwzuvVfA/JcLKez6C9/njxP04lxw3Mw+NAAGqi0Bl5ZER/T153bwqogYq7/MbdSzEdP9jq2oZrYzeQdNIAGQqGBvU8mxsTuy8cihf7PRC99YlylYiufq4rGkofHmar8AgIQgAAEIAABCASZwFCn0Uoyqkoyyn2gZe81IGfIFzJQCv2NIjCFvUoX9vh8NOhEA3Lb29F9WX9bFSuDWImrwZ6CugAAIABJREFUjQZONoxsfy6/B9uXRENR/HHy3eY5xAA0oKYGyin+9jSz+pcxtPdjaBirw3jQND4cZI+Xa4MABCAAAQhAAAJjCORM48cko+oko7Qlbem1BuQM+dGFkWJ/PrCalcCYj2qaj7SrOu16aN3Yfq5vMwVgr2ML7x+c/KUrNbYA/PKyOAVgVoCiATQQWA28+uTYXTuKHZtcaGeXD2JwcGIwbRH8tshmjI4xpir/gQAEIAABCEAAAkElMLQtNi1nGm+RZAY/yaSNaKMgaWD0+YDFmizy+QfWGIE1kSjiqVPEoy1py1I1cGxj1ZiJLmcoAGuz+jVIsbYS15I1x65+lzFbnqlZ6neJ19EPowE04KUGXi1j22fZv51m9S/xnR1O0EDxGtgXVI+X64IABCAAAQhAAAJjCORMY2MlzCU+k2ImGgi3BuRM+VIKv6Nfc2A1RWAvDTHeG8MVDZSmgR2LI+P6t94Wtockboc7bjttv8GO8QVgjm8orS+hD4YbGvBWA+UWf19P1YgBVv9S/Cu++AczmIk3O+LXjTFX+Q8EIAABCEAAAhAIIoGcafw/p4YQz9PD+KOdaWenGih3FbAsBu+nCMyqKrZURAMB08Du5bFxBWBWCBEbncbGsD9PFkNGT9aSPx9ZX0U/FbB+isKit4VF+Aafb9nFX7n6t4XjHcIes7h+8rNKaWDINDYH0ePlmiAAAQhAAAIQgMAlAoNmJJozjZ9XKmHic0nW0UC4NeDGKmCKwME32DBBaSPdNLB3gu0k5YQXYla4Yxbt56z9zm8dXwA+samGAjAFYDSABgKjgVdWxMWJ+rFnlV8+cWXS/8vVvx2c/UtsdBYb4QSncRrIGDsvmav8AAEIQAACEIAABIJIINtpPDkuiWErFwxeNIAGitBAT3P1uJVCkxouExg2+5/ifEHdimzcL4XloGrgtafHb4HbTQGY2FhEbAxzfn0uPb4ALOP6zqXRwBR/gtp3cF3ENTTgvQb2rHSh+FtfI3pZ/Utc1ySuhzknCfq1v7EtOT2IXi/XBAEIQAACEIAABCwC2U7j/wQ9oeL6mGmJBoKtgQG5UihV5gz8iwXh/asoAmMcem8cwhjGk2ngyIaqcRNbuhtqMEoxSrXQQH/bxAXgPSviFIBZAYoG0EBFNeBW8bfLWv0b7DEWY2DaBw2EQAOdiRT2MgQgAAEIQAACEAgkgf70tPfkTOMnJJUhSCoxXLUwXMP8XexpHl8sKWUVsHzNPorAFTXWJiuM8XeKp6prYPuiiJDb3V7eh0mzOMz9NNdOvudUA315CsD7njKITxT/0AAaqJgGXlkZF6/Xu7PzEKt/iYlOYyLPQyuTaOD7gTR8uSgIQAACEIAABCAwZBpPTJLIYHRSeEUDaMCRBgbax2+XennxpJj/YzJTZFS9yMj9BVfju5ZGxxV/7f6LvAkTUAcN9LVOXGA5tDZZscIPfWZw+0zahrbxQwO7V8ji7/jJWaX8rqu+Rgxy9q+jMZ4OMY97JLcrUwNvDf1+ohqHGQIQgAAEIAABCASOQM40/rHMRIdBA8VBNIAGLmngdMvEhnEpxox8zb5VrDTyw1DjMzBu0cBYDQyvMJrYZM5mMMnIHdXXQG+eeH5sQzUFYFZ/ogE04LsG9iyPT7gzR6ljjDOtVZfGL8Q09WMabUwbe6+B5NrAGb5cEAQgAAEIQAACehMQ6anvzplGzvtEiGQTxmhAFw0MtE98ZmCp5sxwEZgzgSnOjS3OwQMeXmtg/+r8OxqwYoiYrkNMP92cf0LXjsVR34s/Xn/neX/iChoIrgb2rIi5WvyVxzlkM0kKwExiRgNowEUNJP9db4eZu4cABCAAAQhAIHAEcqbxaR0MLO4RoxYN+KuBfKuG8heB85vM9mv2ciYwZjurbdCAjxo4tC7/ZBY50YW44m9cgbf/vHua8sfml5fF6I987I8oTAa3MEnbeN82u5e7W/yVY4u+zaz+Ja76H1dhrjzzn2efqUoEzvjlgiAAAQhAAAIQ0JdArtP4O5JQ5ZNQTGpmtfqugYEOQ8iZ9Xbx1q3HvU+yEhij0XujEcYwlho4tjF/8ev8VgrA5I/q54/dDfnj+KvEYwrgFMDRgA8a8KL4K8/+ZfWv+jGMPIU2roQGsp3Gk/o6zNw5BCAAAQhAAAKBIiD+ePovZM3k+UokRXwmyTgaUF8Dxa8Czm80jy4gsxKY4hwFWjTgtQZ2LIkWnMByLk0BmDiufhw/WaAAfGCNQfHLh+KX130d7088DbIGXl4eE8c35Z+MNXp8UMzPrP5VP36Ro9DGFdTAvwbK+OViIAABCEAAAhDQl0A2k/hYBZMi31ckcq8MAtCAvxqQZ2R6sQpYGjysPMKwDLJhybWFX597lsfzFICHjej+LRSAian+xtRK8C4Uww+vq6IATAEYDaABzzQgt5n3ovg7fPav+v13JWIGn4mu0IClgZ8NdMam6us0c+cQgAAEIAABCASGQDZj/FcSNJJ0NIAGvNRAb2tVniKKs9W+hWbzv/pk3DPTiQJe+At4tCFtWI4G9q1KFOy7zrZxdqCXsYP3rnxukjWNgt+BE5uqicEU/9AAGvBEA7L4e6LAMQyFxgeT/a2P+M1EfI6HQgMea2DITCwOjPHLhUAAAhCAAAQgoCcB8eUpb8+ZRi8GW+UNNtqANlBZA4PyLOD68ou9+cycV1ZSBC6nyMVrKZKigYk1cPDpZMHiV18rBWCVYxf3ZggZv/PFXvv3O5dEPSn+0C9N3C/BBS46aGCXtfLXm7HD8OpfdvAgxuE/oAFvNTCUMf5ZT6eZu4YABCAAAQhAIDAEhkzjTpI+b5M++MIXDQxr4IyHq4BP1NcIisAYojoYotyjvzo/ur7wmYO9LRSAiXFq5zkD7YUnQcgi8J4VMQrArABFA2jANQ1Yxd+N3hR/ZZ/F7h1qxy3yEto3QBr4yblt1b8RGAOYC4EABCAAAQhAQD8COdP4kwAlR2xB4/EWNLQ1g6FKaiCbMURXqnAxxV5NVMojRWB/C2MUIuGtvAYWR8Trmwob0KebKQBXMq7w2d7nNee3Tl4AllulK98fUNyjjdGALxrYtVSe+Vs49pYyTrBfc7KhRsgxCfEDBmgADfihgaFM8mH9nGbuGAIQgAAEIACBQBAQ6Slvy5lGlx9JD59Bco0G0IDUQN9m784ClsYORWCKkhQh0IBbGpArkGzDON9jDwVgTHTFJ++dS09eAD64NulLYcit7zbvQ5xAA8HUgFX89ejMXzuO93P2L3Fb8biN7xI03yXx1UAYwFwEBCAAAQhAAAL6EchlEreRHAYtOeR60KTaGhheBezdrH6KwME09DBaaZcwauDVJxOTFoBPNVZjpGKkKq2B/rbJC8BHN1RRAGZ1KBpAA2VpYKe18te7nYLkGOFkQ7XIErOUjll4CWp7CSFt35xIT323fo4zdwwBCEAAAhCAQMUJ5DLJZ0OaQDFoYeCKBkKsAa9XAQ/P8K/mTGCMyLKMyDAWLLlmdwvtB1YbkxaAuxsoAJNLqm229jkoAMvdN7Yvdvf7R38GTzSgjwZ2Lo2K4x6v/JXjg/4tHNtAzFY7ZtO+AW3fjHF/xQ1gLgACEIAABCAAAf0I5EzjIAliQBPEEBf30BSamkwDfqwCtorAm2rEnhUxioAUgtEAGihJA4fXTb5lfVeqhglJ5CxKa6Cv1dmKPLllOgU7fQp2tDVt7ZYG/Cr+MmGLMepkY1T+jkY800Cn8Xf6Oc7cMQQgAAEIQAACFSWQ3Zb4Hc+SG4xApY1AdMPAyA0N+LMKuEa8ThEYQ57iJxooUQPHNznbrj6XIS64ERd4j2DqqLfFWQFYbpnuVkGI96G4iAb00IAs/h7b4KyPGd7hx1lcnui5/VuSjNHxadAAGqiUBgbEHyZ/qaImMB8OAQhAAAIQgIBeBLKm0Y7RFkyjjXahXXTQwPAqYH8MH4rAepiImMW0s5sa2LEkOun2z7bBnM1gKusQt3S9x9PNzmL1gTUGBeASJ5u42XfxXsTCsGjAKv76sO2zjNXdDezWoWsM477xVoKigWxn4uN6uc7cLQQgAAEIQAACFSUw1JnYE5REiOsgKUcDemrgbNvk26vaBRY3Hvcsj2NOY06jATTgSAN7VsQdF4AHOygAE8fVjeM9Tc4KwHLL9LAUnrhOiqRooLIakJOs/Fr5K8cQ59LEaeK0unGatg1H22ZN4wsVNYH5cAhAAAIQgAAE9CHwRkfyapLEcCSJtBPtpLIGsqYhTjaUvpVbsUXhE5tqxG7OBMagpwCKBhxoYN9ThuMC8EA7xrLKsUr3e5Mr55zE2+Mba+hbHPQtFB4rW3iEf+X5y+Lv0Q3+TQLtbqwWHNXAmFr3WM79B+I70C/S179LH+eZO4UABCAAAQhAoGIEhkyjiQQwEAlgpc4f4XM5+yYwGjjblnRkLDsxn508xyoCL49hUmNSowE0UFADB5923jed30oBmLxS3byymIlasrBDga3yBTbagDYIqgZ2WsVfZ7sKOMnrnTznPKt/AzPuI1dQN1egbZ217eC25EcqZgTzwRCAAAQgAAEI6EMgZyZ+SILmLEGDE5zQgLcaGF4F7K8RRBEYYzSoxijXFRxtFrM6ia0lvY0TxOHK8u1KOVsBLAsxu1dw1AL9eHD6cdoiWG1hbfu83t+c/5Rc/cvEXxigATQQEA0MmYk/18d55k4hAAEIQAACEKgIgdwzRjJnGm8xEKqsmQZ/+KOBEQ30b3G+0s7JTH8nz6EIHCxTEJOW9giSBrYvjogT9c6LXv1bqjDWAmKsEVtHYqsbLOQkLScx1X7OvlUJVgCzuwIaQAPjNDC87bO/xV/ZL7FDh7sxwY24wnvQJpproFekp7yjImYwHwoBCEAAAhCAgB4EchljneYJFyYtJi0aCJgGshlDOD1j0DaZ3XiUReCXl7FaKUiFN66FQnAQNLBrWbSootfZNgrA5JZqGrqDHcUVgOXW6UH4DnMNxBI0EBwNbF8SFUfW+3fmrz1GONXE6l9is5qxmXYNd7sOmcY8Pdxn7hICEIAABCAAgYoQyJmJb5EwhjthpP1oPxU1IFfQ2YaNn4/HN1WLl5dxJjBGaXCMUtqi8m3x6pPxovqjvs0UgFWMS9yTIQbai9uh4+j6KgrArP5EA2jgkga2L44K2S/4mdvbn8XqX8bMxHE0EEwNJD9XETOYD4UABCAAAQhAQH0CA+loJGcaPwtmEkRySrugAa01IFcBN/q/NZw0iU5QBL5k1FF8rHzxkTaofBscWF3cqsfeVgrAWsevgO2q4WZbyAKKXUxx9lgtfry48t9h+lHaAA1UXgPDxd/K5PY9zaz+dTMW8F74FGjARQ1kEt0iPeVt6jvQ3CEEIAABCEAAAr4TyJrGchI3FxM3hQ0/dIJOKqGBc+nKrBCwi8By21cMw8obhrQBbVBpDRxeV1xf1NuC0VyJmMFnep+rnEsXWwCuEbuWsqtGpfswPp84WmkN7FhcmW2f7YkqF9qTHPmDV4EG0EBwNZBJ3Oa7IcwHQgACEIAABCCgPoEhM/F1zDLvzTIYwxgNlK6BSq0CHikCY1xX2jTk8zGuK60BuSuAbSI7eWSlUel9PvEy2Oz624ovAL+yMs5kKrYARgMaa2D74og4sr74vsNJvHXynNOs/g1u0YuCJG2DBoY10Gn8f+o70NwhBCAAAQhAAAK+EuhPT3tPzjTexGgLttFG+9A+umuglNVGTswgp89hO2iKj5UuPvL5ldXgziXRooq/sm851cgKYN1jl6r331dCAXj/aoPin8bFP2JYZWNYpfnL4m+xu2g4zdGdPk+eXa5qn8x94RWgAWU0cFyIKVf4agrzYRCAAAQgAAEIqE1gqNN4lGRRmWSRQS0zR9XVQMYQp5pqii7AODWFnDzv+KYawXbQehuYlTZQ+fzK6W/PiljR/U93AwVgckw1c8y+1uJWw8sYe3htkgIwBWA0oKEGglD8Pd1cpe4YifEvbYsGlNJANlN1s9ouNHcHAQhAAAIQgICvBHJm4quYc2qac7Qr7aqaBs6XcOagk8JuMc85vrFa7FrKmcAUIitXiIR9ZdjvX5UougDclaIArFoc4n6Gcyt5vnUxsVM+9/imaop/Ghb/iFmViVlB4R6E4u/rqRrB6l/GxcRvNBAaDWQS23w1hfkwCEAAAhCAAATUJSDSiV/OmcZgaBIhZjYqNbMR3TEIK0UDckvVYk1nt58vi8A7l1EEDoq5yHXobS771f6H1hZ/bmFXfQ1xm9xNSQ3IszRLia07lhA7/eqz+BxiY8U1sDgiDq0rPnaW0rcUek1vC6t/Sxlz8RrG6migYho4oK4LzZ1BAAIQgAAEIOArgVwmeR9JXcWSOiUNQfSEnrzWwPmtlTeSpMnESmCM1Yobq6wk83U14bENpRW8shRAyXcU1EBPU2nfh90rYr5+b+mnidVooEIakMXftVUlTRQpVMwt9m9dcvVvB+Mzr8dnvD8aQwPuamCwPfnbvprDfBgEIAABCEAAAmoSyJmJL5KouZuowROeaMB7DZRqPBdrGk32/GNsB42RTxFWCw3ILSwn6w/y/X0Q45kCsIIF4O6GmpK+E3tXJbToMyg6VqjoSEwOxvcrIMVfGZd7W1n9y9jU+7EpjGHstgayZjKtpgvNXUEAAhCAAAQg4BsB8fxN78yZRr/biQrvR/KLBtCA1xq4EJBVwNJYsraD5kzgYBiOGL+0g0caeHlZrKRil+wjBtqJCV7HBN7ff42dLLEA/Noag37Ko36KojNF52BoICoOPh2M3XrkMQxMwvI/PhCTYY4GytfAkGns9s0c5oMgAAEIQAACEFCTQLYz+bskZuUnZjCEIRqojAaCsgqYIjCGazAMV9rBy3Z49clEyQVgOWGFOFGZOAF377jLbVVl/Cv235H1VRSAKQCjAUU1sH1RJDDFX9k3nWH1L/mHgjtwkNt4l9sEje2bnYlr1XSjuSsIQAACEIAABHwhMGQm/jxoCQ7Xo08yS1vT1uVq4EK7IV4v0YAu1rB28vxjG6vETlYCY+oqaup6WVwNw3vLVYtO+oGJnnM+TQG43P6e1wcrZ8hmSv8+yO+ILBKF4XvPNdJOaMC5BoJW/JWTVLIZ4i/xM1jxk/agPYrRwFCn0eyLOcyHQAACEIAABCCgHgHx5Slvz3UaPcUkHzyXZBUNoIGgaaCnubrkosxEhZpyf3dsQ7XYuSSKsY25jwYU04BctVhq/9C/hfMHgxY7uJ7y8hm5pWqp3wf5ul1MliJGKBYjdC8UB634K/uZvs3EXmJdebEOfvALgAZ+rJ4bzR1BAAIQgAAEIOALgSHTmBeAZIYtidiSCA2ggbI0MNCeDNQqYGk4HdtYzUpgjF3MfcU0cHxT6ZNNzrZhQpNzqmWiWrG3hO2f7aLxKyvj9JGK9ZG6F0B1v//X1gTjzF+7j+lKVQu5UwGxBwZoAA2EXQNvbKv+LV9MYj4EAhCAAAQgAAG1COTMxB+HPRHi+knm0QAakBo4HbBVwFYReEO12MFKYAx+DH4lNCC3drdN5VIe865CwpzGnA/pJLDzW8sr9uxfbSjRN+he9OP+nW+PrDKrco5IKCWmOnlN3rgb0j6XMS9jXjSgtQY2quVGczcQgAAEIAABCHhOQIgpV+RM4zhJpNZJJKYrBoAyGhgocytKJ0ZSKc85tqGKIjAFUIocCmhgz4p4WQXgM63VyvS35I7kjlID59LlFYAPra2ib1Sgb1S5qMm9OStuH1hd3nbwpeTXk71m+Oxf+mriNRpAA8po4D88N4n5AAhAAAIQgAAE1CKQ60zOJBlUJhnEVKaQiwasVcCln885mZFUzt8pAjszEDFa4RRkDewr0+DubaEATN6pVt7Z31ZeAVgelRDk7zzXRkxCA5Nr4MCa4BV/Zc7O6l+14g35A+2JBoy3cplElVquNHcDAQhAAAIQgICnBHKZ5DMkUSTSaAANqKSBoK4ClkbUUbkSeHEUs5vVTmggpBqQqxXLmQjS00wBWKV4w70Yoq/MArD8Pm0nLhITQhoTKA5HhNzGvZy46NVrh8/+TTI5lgnSaAANqKWBTGK1pyYxbw4BCEAAAhCAgFoEcqaxH/OK4h8aQAOqaaC3pbwijVdmlHxfqwjMmcCY3ZjdodSAXK1YTv9wqokCsGrxRvf7ObO5/Hi7e3kslP0Bxb/JV4bCSG1G+1cnyoqJ5cTTyV57tq1KraIPRTzaEw2gAamBTuObarnS3A0EIAABCEAAAp4RGDSTH9TdtOL+KXyiATU1MNiRFF31NYE1pWQReCdFYAx/isCh0oBcpTiZ4TzZ37sbKQATd9WKu3Jb88l0P9nf9z6ZCFVfQFFT7aIm7eusffc/FcyVv7K/OdlQI7IZtfpaYiftiQbQwEUN/Hzws9NinhnFvDEEIAABCEAAAuoQyJrJNEkkSSQaQAOqasANU3oy07qcvx9dXyV2LHFmsmFGwgkNVF4DLy+Ll13okqa0qn0u96VnPnG6ufwC8GtrkhSA800IeqLyfR/xhza4XANBLv7K3Lx/C6t/icl6xmTaXY92z5rGcnWcae4EAhCAAAQgAAHPCORMYxcJoh4JIu1MO+uogcEOQ3SlgrsKWBpUFIExVS83VSvyfwoMjopPe1eVv9Wl3JlAx/6Ye1Y3D+lpKr8AfGRdlaPvYEX6x3yFWX5Pm2mqgX2Trvwtv08oZ4LlyYZqkWWrXHINNIAGFNZANpP8F8+MYt4YAhCAAAQgAAE1CLyxLTkdM05dM462pW3RwLAGzrRW1oRyYmBZReDFFEIx9tFA0DUgVyk6+U5P9hyMaWK0SjG6u6H8iVYnNtVQTNS0mBj0fp/rG5ub7HNhItRkMbLcv7P6lxirUozlXtBzHg385Hw6+V413GnuAgIQgAAEIAABTwjkOhOpPIkEMwUVnilImzOA0E0D1irgAJ8FbJtcRzZUie2cCUwBgAJAoDVwdL07E0pkv6RbX8z9qtvmcltzO5aV87hzaTTQ338KgWMLgfDQj4cbu2CU00c4eW13QzXxFS8DDaABLTQw1Gk87olZzJtCAAIQgAAEIKAGgZxpfA8zTl0zjralbdHAiAbOtFa5Yk47MZ7Kec6R9RSBMZT1M5TD0ubbF0WEXKVYznfcfu1AR1ILY4o4NBKHVGbh1lELe1bGKQAzCQgNBFQDe58s/wgEOwZ6+Xguzdm/Kscb7k2PvIJ2dtzOL6rhTnMXEIAABCAAAQi4TiCXSRo503iLxMpxYoVRyyxSNBBiDWQz8ixgd1bueWlayfeWReAdi1kFFZaioMrX+aNFEfEXv3e12Hj3hzDkF0XErqUxV4q/8nt+oZ0CMDmoGjmojK9uxUV5rqjKfarTe/unh6vEmoU3iv/9SBIeAS2GOm1LVZ4XluKv3I6e2KJGbKEdaUc04EgDb4j0e3/NdcOYN4QABCAAAQhAIPwEcmZyDQmVo4SKQWSIi35oHI2P1kDf5nCsAraKwOsoAqtimobxPr7/RFQ898lrxdzZc8T7bl5o/fufn5mmfSHilZVx1wpd59MUgEf3z/wc3ngttzN3qwB86GkKnjJmLFtws9XvXj1jgfj0vFni7x64Svv+N4yxVJVrfvVJ92KfW31Fvvc5R2zFu8C7QAO6aSCTeDD8DjV3AAEIQAACEICA6wRypvENzLbwmm20HW2HBorXwPAqYHe2b81nPLn5+8PrqsT2xWwHrIqBGob7+H+Px0XmYzeIW2bNu1T4tQvAj945U/sCxP6n3Nv+sn8LBWDiWPFxLIjMBtqTrhWAj22o1r6feemRpLhmxoJxffA9c24Xn79vupA7M5QWT6aW+LpSP4/XldZOweL2aki2fZb5d3dTtchl1OhXg9jXc01oCw0EVgP/03XDmDeEAAQgAAEIQCDcBC6kE1fmTOOnJHCBTeCYtanbrE3u1zfNh2kVsDSzKAIHywhVwcyd6B6+/nBSbLz7w+KDM+8aV3SwC8BX37xAyG1JJ3q9Lr87tNa9QtfZNgrA5KFq5KHnt7r3vZBxT/eJT3LrZ7vfnehx9m1zrYk6330ipnV/rEvcqeR9vrrSvUlPbk6QzPde7KyhRkwhN6Ad0UDRGsiKZ6O/Em6XmquHAAQgAAEIQMBVAlkzuZSkquikyrcCFW1D26AB7zSQNcNzFrBtcFEEpgjslQH8lQdrxOL5M4TcZnSiQsPlv1ux4GatCw7HN7p3jricjEJf711fD1v/2MotV+145cbjy8v1LWx+67G4+MDM+Y764xtvvVM03vNBIV/jVYzgffXNP8K08lf2O6caq4mpTChGA2hAXw10Jj/lqmnMm0EAAhCAAAQgEG4CQxnjnzHG/DPGYA1rNBAsDYRtFbA0tg6tZTtojGj3jOgvPXCVda7k9Ivn+15e6M33/2tvWSD+9RFDy2LDjiURV4tcZ1opABMbgxUbS22P/jZ3C8DyvFFd+/tNd3/YUfF3dB8tC8Zyco7uOzToqhkv7lued3+iPjxHpsg8We5EUGofxuvUiEW0I+2otwYSXwy3S83VQwACEIAABCDgGgHxzJW/mjONIb2TI5Jj2h8N6KyB4bOA3VvJ58aKJyfvcWhdUvutMb0wOnV5z+8/ERXPffJaMXf2nKILDKOLDevv/rCWxZndy2OuFoB7WygA6xyHVLr3PpcLwAdW6znJRJ7BXmgb/tH98EQ/y50cPj1vlnjhgWla9tG6xHKv73NPCIu/p+TZv6x8hAEaQAN6a+CCSE/7RdeMY94IAhCAAAQgAIHwEhgykw8xQKL4hwbQgO4aONtW5Woxx0kB143nHF5LEdhr81O195dFhczHbhC3zJpXVuHXLjhcf8t8Lbcc3bvK3bMQe5opAOseh1S5/zOb3Y2nR9YntSxgtn70t13po2Vffc+c28Xn75sufrSo1J0jpmrZBqrF/2LvRxZ/X68P3wRJVv8yrlUlnnIfaLkcDWRN457wOtVFmhocAAAgAElEQVRcOQQgAAEIQAACrhHImcb/KCep4LUkpWgADaigAXkW8MmGcG1vZxeQD6/T0xwv1sjU/flyq2Z5PmQ5K8rsou/lj833fFC74sBrawxXJ430sGKJlSqKrFTpbXG3YHRiU7V2/cv3noiKm269w7UCsN1nz75trjUBSL6/7jGR+y88GWD3cln8DV9e3NPM6l8VxmXcA/4CGihfA9mM8V9dM455IwhAAAIQgAAEwklA/GHyl3KmMUhyVX5yBUMYooHwa6B/i7urlvw0zg6tpQiMmTuxmfuVB2vE4vkzxPtnLHC9mGAXFT408y7xH4/HtCooHF3vbn/R3VBDAVSRAqju+cDpZncLwDKW7lyqYsEy/6pauUuD3b968XjjrXdaE4K+9Zi+5yuTM0ycM0guu1eEs/j7eqpGXGjn7F/dYxD3H/4xOW3oWhueFenr3xVOt5qrhgAEIAABCEDAFQK5TPKTJFeuJVcYtxi3aCDkGpBnAZ9scN+49qsQfOhpWQRW0STPb1Ji4OZn86UHrrLOf5x+80JPCwl2cSLz8Q9oUwDeviji+soouQMBORk5mQoakKvZ3Y57e1boM8HkB09Exa23ubNFv90/53v8wMz5Ys3CG8XXH2YSGfnEcD6xZ3lcnNgUvpW/ss+Rk09U6EO5B3IBNIAG3NLAG2ZivivmMW8CAQhAAAIQgEA4CeQyxt+4lVjwPiSpaAANqKCB/i1J141rt43wQu8nVwLL4hRGpp4MZOHgTz51jVhQW+tL0Xd0UUGeKfx9TbYV3bUs6no/0ZWiAKxCDOEeDCFXsxeKU6X8bd9TCW3i2rP3Xud7/331jAXWhKEXHpimDWfypPF5kpxoEdbir+xXBlj9SwE85JORySHwU9zWwJBp/Fk43WquGgIQgAAEIACBsgmI5296Z840zrqdYPB+JK1oAA2EWgMZaV67v3qpFMO71NfIlcAUgccbmyqbvd95PG6d6yiLsKOLsn7//If3XqtF8eCVld5sjynPIg91/8n1036m3EnD/QLwQWuHC/X79R8uiora2+dUtB+/Z87t4vP3TRc/YjKZFvHMzo12Lw938VeePU78JIdAA2gADYzTwCnx5SlvL9tA5g0gAAEIQAACEAgfgUGzaiHJ0bjkiIEj5i0aQAMi7KuAZeH4ICuBtTBu/+1RwzrH8YMz76powcAuNNfdPkf8UINVwPtXG66vcJTf22yGswvJTcOfm8rV7KVOYMr3uqMbqrXo0//zp94fiL5c9unzZteJZz5xnfieBn26XQTV9THsxV959i+rf8MfO4j/tCEa8EYDQ5mquvA51lwxBCAAAQhAAAJlExgyjedJsLxJsOAKVzQQcg0osArYKgKzEljZgsFXHqwRi+fPEO+fsSAwxQK7CPxn912tLHe7OHBonTdbxQ90UAAmfoY7fmYz3kyOOFFfI7YvVn8F8F0V2L7f7rvzPd54653WRKNvPabPNtx2X6/D48vLY+L4pnDvfNPbUsUEXibwogE0gAbyaaAz8UdlG8i8AQQgAAEIQAAC4SIg0lPelsskujHZwm2y0X60HxrwTgPnQn4WsL2K6rWnDeWLcToYtPY9fumBq6xzGqffvDBwhV+7eLCwtlZ5zR3b6I1ZfoHzCzHv8pl3Ifn9YIc3BWAZ015eFlO6b/nz+64ObL8u+/cPzJwv1iy8UfzLI+QVdkwO+6MKxV+548BAh3fjAcZasEUDaEABDbwuxJQrwuVac7UQgAAEIAABCJRFQG4BokASg0kYEjMQrTFoCqUG5CrgRm+KPHZx1q/H19Zg1obZpP3BE1HxJ5+6RsjCql1kDfrj39z/W8oWanYsibq+va3dF5xPswI4lPGCfOxSTi63YbX17Pbjq0+qvQJVnr0b9L5dXt/VMxZYE5FeeGCasv18mHMGp9cuJ1Sc8Ggyk9vf/ULv19vK6l/iJmNtNIAGJtVAZ3JmWSYyL4YABCAAAQhAIFwEcp3Gc5MmCJhZl8wsWJFQowE9NXA+XeWZkV3IzPLibxSBw7d16Hcej4vMx24Qt8yaF4qiwOjCxSfn3aZsYWDP8niefqH8CSPn0hjZxNtwx9vzW70rAB9Yre5kpv/26feFrp+Xfb4sWn/+vuniR4vCF2OdFkpVfN6uZXLbZ/fP6vYify30nl31NULuOkDcgAEaQANoYDINJD8bLteaq4UABCAAAQhAoCwCOTN5mARpsgSJv6MRNIAGDHFKkVXA0kB7bU1S2aKcSgbtvz1qWOctfmjmnaEsCNiF4C9/Rs3VYftWJfIUgMs30/u3UAAm7oQ79ziX9q4AfHhtlbIx7FPzZoW6v79jdp145hPXie89EVW2jVTJM6zi78by41WhwqxffzvD6l+K3yxaQANowKkGjrANdFk2Oi+GAAQgAAEIhIdANlN1M+ZauM012o/2QwP+aUBuyeqXkeXH51AEDu4qpa9+pkasWHCzuPaWBaEuBNgF4IfvnKlkIeDg0971CX2bKQAT3/yLb16w7m/z7vshVyyqUoQbfR9febBGBPlcd7tPd/J40613WBOYvvWY2tt1j26/MP28a2lUiZW/Ml+WZ/9mMxyb4EU/znuGOw7TfrRfPg1ktyV+JzzONVcKAQhAAAIQgEDJBLKm0ZkvIeD3JItoAA1oq4FM/rbvaSp/a1c/irtOP+PAalYCB8mw/dIDV1nnKapSALCLBPKcyBcfVG/F3tEN3vUHrGbK3w9rG5tCtrKlz8MCsIxxOxart8JUTpax+01VHj9wy11izcIbxb88ou623UHKI5xcy66lMXFcgTN/7Vy3j9W/Tlf98byQxVHyHXJBrzSQNY1MyUYyL4QABCAAAQhAIDwEcqax16uEgvclWUUDaEBFDXh5pqFtZPn9eGANpqwTw9Sr5/zgiaj4k09dIxbW1ipn/I8uYCxbcLNyK/Zer/euANzbwgpgFWOITvd0ZnOVp7tm7F4RV6pPefGhaiEny4zuN1X6+f0zFoiH77xFvKDokQBe5Qhuv+9OWfzd5F3s8juHHV79y5hLp9jCvaJ3NOCKBvaHx7nmSiEAAQhAAAIQKInAQHv1B0icXEmcmEnLTFo0oJkGVFsFLM26A6spArttsk72ft95PC4yH7tBzJx1h7KG/+jihTT/VVoB9vLSmKfFrdPN1cQWzWKLanl5b4u3RSZ5Bvdk/WyY/r54/gwtYoGMC/fMuV18/r7p4keLgnsUQ5i04/Rad8ptnxVa+SvzV45LwM9QLXZyP2jaLw282Rm7viQzmRdBAAIQgAAEIBAOAkOmsdmvxILPIYlFA2hAJQ1c2OrduYZ+r5wY/Xn7KQL7Ukz4t0cN61zED828Uxuz3y4Er/3I7/jC2KkZXs7zXl2Z8LQALCeaqNRvci/65QFyEsPoGOP2zwfXqHOEgZwcIyfJ2H2lLo93zK4Tz3ziOvG9x9Xbzruc+OLFa1Us/rL6V7+4Qi5Bm6MB9zQgPeFwuNdcJQQgAAEIQAACJRHIZYztJE/uJU+whCUa0EsDKq4CluY8RWDvViP9/YM1YsWCm8W1Gpr8djHj+lvmi//7qBqr9uTW6W4XtEa/X3cjBWDiarjjqtdx8uh6dc4Vf3LBjdoVf+24IB9vuvUOa2LUtx5TIz54UcAt5z1l8feYh2fWj45dfv4szxknToQ7TtB+tB8aqKAGMsbOksxkXgQBCEAAAhCAQPAJDG2LTcuZxlskWxVMttjWkAE7Ggi1BgbkKuBUjacFID9NtNGftf8pDNhyjNbLX/ulB64Sn543S0y/eaHWBr9t9jfe80ElVgEfXuft+aYnGygAk6eGO0/tbvA4Rm6qET9e7N2kncv7cq/+/41HE+K6GfOJDzcvFB+45S6xZuGN4qVHOJbCLb3tXBIVxxTb9lnmrF2papFlLBXqsRQxPtwxnvZTo/3e6EhcE3wHmyuEAAQgAAEIQKBoArlMYhMJmxoJG+1IO6KBymmgx+PtLUcXZf3+eb9iZyu6ZaQ6fZ8fPhG1zjdcWFeLqX9Z4ftDM+8S33ksFvoi8PFN3ha3pLlN/165/h325bM/6XUBuL5G7FoW/q2DN9z9YeLEZXFCbof98J23iBc+My30scJp3uDF83bI4q+CK39lTny2rYoYSQEcDaABNFC2BpINRRvKvAACEIAABCAAgeATyJnGdzC2yje2YAhDNKC3BgY6vN0C1u+i7+Wft48icNHGsyxsZj52g5g56w4M/csMfXsFsHxs/9gHimbrhTle6ntKU/3y74vr/0/VYGqVbWrpHaMqnaPI8zld/17Uj33PV1bGQ92XfPuxuPjtmXcRLwrEi3vm3G5NqPrRovCv9i415pTyOrny9+gGb3eq8Pr7ne/95eSSbIb+vdJ9PJ+PBtGAEhr4QfAdbK4QAhCAAAQgAIGiCAx+dlosZxo/J1lTIlnDHMYcRgMV1sBphVcBS+NtH9tBOyouyC085dbGcnXr6EInP0+87fUts+aJ7z8R3pV7e5bHPS9sye8fBje5WljzdandfMUbN38f9nPrm+75IDGjQPF3dAy9c3adeO6T14ofhDh2lFLILeU1w8Xfal++g25+n52+V/8WVv+GNTZw3eQ1aCBwGnhrKBOvKcpU5skQgAAEIAABCASbQDaTWEXSFbikiyJehYt4fCf4TpSqgYF2dc8Cto24fas4iy+fAfu/Hq62ziu8dsYCTHyHJr5t6D9773WOiuv52Ffy93JihP398PJR7jJQat/E62BXSQ0M+rRDxuG1ydD2I//xeEz8zq13EjuKjB033XqHNeHq3x8L9+pvr2KYte3zenWLvycbOPu3kn07n01ugQYU1EDGWBdsF5urgwAEIAABCECgKAI50/hXkjYFkzYKqJjkaKBiGuhVfBWwLHCxHfTYrSe/9MBV4tPzZonpRRrXdvGTx4Wi9vY5Qp6V7JUJ7uX7Hlyb9KUAfGEr+Qo5azg1YE2Oumy7Zi8mSxzfWB3KPkT2T1s/dgPF3zJi6AduucuagPXSI0xSs+OdLP4eVfTMX7v/YPVvOGMCsZx2QwOB1sC3izKVeTIEIAABCEAAAsElcKHT+M2cafyU5CvQyVfFiljoAl2ggdI0oMZZwJOvFnlV8zOBZbHy8/dNFwvrajHtyzDtRxe//+RT7w9l8cavcxXPp9nmkrhUWlyqNLfzW/2ZJCGLQrLoZRfAwvL4vcejYsat84glLsSSa2YsEIvnzxB//2BN6HTgpl63L46KI+vVPPPXLv52N1QzTmbCLxpAA2jAfQ38PPtMVSK4TjZXBgEIQAACEICAYwJDnYlFlTaE+PxwGnm0G+2GBgproLdFbdPNNt/2PpnQzmD9zmMxkfnYDeLW2zDrRxdv3fhZnun4o0VjV1e7aYh78V7bF0fECR9WNsrv3DkKwJh87pt8vjA9l/avALx7eSx0cen3P3E9xV8Xir+Xx6F75txuTdQKW1wpN1bJ4u9RxYu/Vkzk7F9f+m/GfIXHfPCBj4oakEcFOjaWeSIEIAABCEAAAsElkDONF1VMVrgnknA0gAYqrYHBjqTo8qkoZBdjK/W4V5OVwN94NGGdM/ihmXdh1Htg1NvG/V/d/75QFW92LYv6sv2z/H73t7ECuNJ9O59fWn7R3+ZfAThsE5N+uCgqZt82l7jiYVyRk4ue++S14gchPWagmILwcPF38l1cKpUzuvW53Y01FD9DOiGIOFpaHIUb3HzVQKfxb8F1srkyCEAAAhCAAAQcERDpqe/OmcaQr0kEgxQGqmgADWikAV1WAUsz71WFVwL/08NV1rmC185YgEHvoUFvF4DvnXNbqArArz4Z960A3LeZAjB5azgN0D4fC8CvrQnXGbD/6ZPXEFt8iC0yxtw86w5rIte/PxYPVZxxWgDeocG2z3YBmSMRwhkLiOG0GxoIjQZ+NtAZm+rIXOZJEIAABCAAAQgEk0Auk3iA5Cs0yRdFQ42Khnwv1fleDnYYoitV41txyDbFKvWoWhH4Sw9cJT49b5aY7pMxbRdAeVwo/vaBq0Jjzr+22vDtO36GAjD5UEjzIaldv2KT3PrWacGs0s+TWxPPm11HAdjnOHvDLXdZE7teeiQZGq1MplV5HMGR9f6ttPfr+zzR53Q3VYtcRp3xAmM/2hINoIEgamCoM7EkmG42VwUBCEAAAhCAgCMCOdN4IYhJBtdE8osG0IBKGjjTqv42fKPNuVdWhntVzQ+fiFrnBX6kbjaGvM+G/OjC94N3zAyNKe+n4d7bWk0BNKQFUJXiWin3IrU7Ola48/PE73liU43YHpKzxP/svquJNRWMNdfMWCAWz58h/uHB6tDEnIkKwbL4e3idf5Ms3Pn+lj5B8nw6SSwkFqIBNIAGPNbAkGl8zZG5zJMgAAEIQAACEAgeAfHH038hZxoXSjFweA3FOTSABtCAcw1kM/qcBSwNwRP1NSKMReDvPBYTz3ziOs5hrKARP7oALFdd/8NDeQz5JyKBMupPbJq4COWFQS63laf/dd7/wio4rPw+EmHX0lig+omJinbyd7/LZKPAFMDvmXO7NQFMrsrO115B/L1uxd9TjUyEIrYFJ7bRFrSF4hr4yblt1b8RPEebK4IABCAAAQhAYFIC2c7ExxVPVDBIPZ4NiH4Y7KAB5xrwc+tLL4pOxb5nmIrA33g0YZ0H+KGZdwXGhB5dCNX55yXzbw68Cb9zadSDVY35V0VRAHbe7xKjgsWqt8W/iRIyZr2yIvi7Ufz1p99H3AnIpKPRsfbO2XXiuU9eK+SOIEEs+I6+Jqv4u1aflb/yu31+K6t/iW/Bim+0B+2hsgaGzOQjkxrMPAECEIAABCAAgeARyJrGX6mcpHBvJOFoAA0ESQPZjDwL2F/zu9iirdvPD3oR+J8errLO/7tuxnwM+AAa8NKMf/+MBeLrDwf7fMY9K+IUgJlwxqRDBxrwuwC8/ykj8MW7T8y9nfgT0PgjY9CsWfPE5o/+tvj3xwI6mWBxRBxap8eZv3aO2iPP/nXQ3/AcxoFoAA2gAbc0kPz74DnaXBEEIAABCEAAAgUJiPSUd+RMo5eEyK2EiPdBS2gADUyugb7Neq3QkGZdEIvAX3rgKvHpebOE3GJ49Ioffg4mjzULbwx0EWf/UwkKwJjxFCQcaMDvAvChtVWB7jteeGAaMSgkcfiGW+6yJoy99EiAJiTJ4q9mK39lXnmB1b/EGwfxhnHp5ONSGMGoCA0MiWeu/NWCJjN/hAAEIAABCEAgWATe6EjcVUSwZ5DBIAMNoAE04IIGhlcB59/a1V7doN5jdcXPBJbbOH7+vuniI5y1GLqCw/W3zBfffDQR2ELOoaf9XX0li2jkcJh2YdRAb7O/u2Ac25DnDPGAnO/6wB23hq4/1n2i1DUzFojF82fkP5/eN21FtSz+9jQT/8LY93PN5CxoQAkNfDpYrjZXAwEIQAACEIBAQQJDpvGnJGFKJGGYwC4U5fgu8F3wUwM6rgIeLmhXiz0rYr4X8b7zWEw884nrRO1tczDaQ7LSaqICQ+qeD/mundFnLBb6WRaZ/n/23j0+zuus93VaKNDN3nDYrWXNGklO4tzTpLn4Fid2YsdOQxMCIWlomjS1k9ix4yR2bM3orpE0oxToYQOFszcUDpzChkM/9NDDhp1zeghsLgU2TXNzrnbuukuWZF1mlFLadT5LzsQjae7zXtbl+4c/kkfSzPv+1net9bzPbz1rBbloAwOYOSvIOcvLzxpvC34XjGf26HmG6/99d6M8b/0u5iWD56VPb9uyuLCs2Pzgx8+e2b1avh7wwqMg57iCnxVT1b+M/16OybwXPMEADFTAwJ8UTTLzQxRAARRAARRAAX0UkIlVH8qkxHAFEz0mIyYjDMAADHjEQDrl3lnAHyTzjjYFZgL/9b0R2fLpy+TlG28kwW5wgj1rBl++cYf81n36ncH4zJ7VgZq/qi9hAJOsMzWGH28P3gA+tjf4hUflmH733biBucmCuUnNUTuu3Sr/089dKNVOI+W0fS2/46z529wkx6n+5VnMo2cxU+dQrpv4L2QG5uSvRH9Mn8w2V4ICKIACKIACKFBQgUx/ZEvIgQMPLzy8wAAMOM3AlINnAQdlAv/l3Q2L5/RdtH4nyXVLkutZE7jnlkt9T65Xmph/Ye8aDGDmM6fns0qeKcKoAH7lgH7bxz/5uSjVv5bNT2qe2rz5Btl5yyfk33/en8VKLpu/Koac640y1jLfwgAMwECIDKSTkdsKJpr5AQqgAAqgAAqggD4KZFLiS5Uka/hdVhrCAAzAgLcMqLOAh+MungX8/j2rSuC93iZI/+ius+XndmyQ513NlppZw9S2r1dt2i7/OYAKq0pM4Ff2RzCAQ0xEMTd5Ozf5red4e7DbpSvT6MQjQruFI/t2Xc0CJQsN4Oyce+mGGxcXov1/90Y9Zc/JbZ+bT8eN7Hxh1ljv91zC+8MDDITEQFJ8VZ/MNleCAiiAAiiAAihQUIFMSryRN2BKhhREkDhkFSMMwICDDEx1RQM3jj6own0/oRbm/weONsljNZ4JrLZb/O2fXydv3notyXSLk+nZpLr6+ks/e5GnCfVKzN58v6vMpaD7EYlw4tW8cbwB86jawjXo/vLW4Qatxoyn7hXyQs7+dWLOvmD9Lrln53r5jbsba2bwxCMOx4wxqn9NHfO5buIVGLCOgWmZuPgjBZPN/AAFUAAFUAAFUCB8BdKp+isJwqwLwjAPDUh60u/od8sZUGcBD8eDT4YHnXwv9nmLJnAV5zP+431rZPJnLpGbr7nBiSRyrgHq+vfXXnO9/PZu/89ZzGf25nvtrUPBn2k6wTmIxD2Gxj1hGMBqnsnXd8N67bFPXcG85ciCpex8ve7qm+Rnbtgs/+Az51bFYhgLjYrFbkH/bKK9gTHf0DF/+bMP/+d5GAbMZ2D+ieinws9scwUogAIogAIogAIFFUgnRR9Bl/lBF21IG8KAHQxMdwdvHgWduMv3eSPxJjnTE5VqK2z1deBoRL64r7Sp99f3RmTzT39SXr7xRhLojiXQs4l09fU3br+gqiS6H4aPMpfyMe7na1QA2zH+uziPh2EAq7743AOl5xc/xofl7/m3n6+XF2/gfPrc8dy172+67jr5m7dfUHIh07N7VsvXDtbJiXaxePbtfF9UTnU1yKFY8HOOn/NZqfdW9zvXx5jv4nzBPcM9DOjJwEIq8pWCCWd+gAIogAIogAIoEL4C6VT0JQIpPQMp2oV2gQH3GFAGqDJDSyXAbPr5UKxx0fjNx/tMT0QOx+sXk54q+ZlNnv/l3Q2L5+ldtJ7EuWvJ8nz3u+ParfLp3Wf4yHIS9FdlKoXRNzGA3Zsr8o2XJr4WlgH84j5vz5yvdqyJffpyFi85vHgpdz7bvPkGmbz1Uql2NMny9MLe1fLNQ2vkRHu9nC9gek53ubVwkOpf5jsT5zquGW4tZ+CkTKz6ofCz21wBCqAACqAACqDACgXe6xfnWx6IsD0U20PBAAwYx4BrVcDlJvNU8vOteIP8yucvkVu3Xk/SnKT5Egb+9zvWfZA0zybPg/764kP1oRjA421sh0k8a2ZydawtHPPqtYcjoY8X37qvXl6+cceScSzXEOT7m5zT5vz1u+Tnf/oa+d8fOl9OdpfXp9XCwaFmNxYOqvssZIQzB5THCzqhEwzAgB8MLPSJ7SsSzryAAiiAAiiAAigQvgIL/aLNj8mf9ySohAEYgIEaGFisAnbnLODJzurMqxfi58gv33e5/MynrpUqaUqy3L1keW6b37rtmtANnVcPCgxgFh0Zt+gozPk6LAP4jceioY8XXbd8gnmLhUzy6i075KHbN8r/68DFcixRXTykdlIJY/eJoD/zZEd1+oQ5xvHZNTwPEU8QT8CASQz8ZvgZbq4ABVAABVAABVBghQKZlHiahxIeSmAABmBAPwamE1EnknkqeehFQm8k0Si/ceBiGb9jg9x4LRVVucaoS9//0V1nh2rqvPFYONWM4+0kxZnH9JvHymmTsbZwjKt3Hm8Idaz45y/Uyas3b8cAdtQA3nXD9bL/7qvkU4cukHPJaM0JfhcqgNXZv2kPtCpnXOJ3zJxPaDfaDQZCZCAZGZGJVR9akXTmBRRAARRAARRAgfAUWEjWN2VS4gcESSEGSaxorDnhAb/wazMDIy3hJMaDrugodwvocttaJVOfPrpOfuneK+StO7fKdevdrox1yQC+a/umUE2dd46E02cxgJkLyx0fdfu9sAxgNc89k3OuvD/bxX+84Hj0xG2XYP46ZP5eunGnvOfmLfIrey6Tb3as9fz5ZzBm/xbQ1e4Wo9uYx/UwX8MADFjLQH9kS3gZbj4ZBVAABVAABVBghQKZlDhsbeCBsep5YgFWeFCBgeAZOOVIFbDXBvByVge6muSf7LtE7r9tk7xs040k3S1Ouq+7+ib5jc82FjRd/DF5Vi9+3jN76kKr2ucM4ODH5+XjDP+vrg3CNIBfeHBNKGPFv3yhTm7efANzkcVzkVp4tXXrDYu7kjx58EJ5qrf2Kt9CY0w6Fc7RA0EuFjxd/VvdGFNIN15HTxiAARjwnIFfWZF45gUUQAEUQAEUQIHwFMikon9HwON5wIPxivkOAzDgHQPqLODWcCoKg0zsBVm9ONXbIP+fRy6UbZ9ZL6/dyvabNlYH775xfSimzgsP1odnALc3ejfuMIajZYAMhGkAv7y/PpSx4ld+9kLMXwvN3ws23CTvvvla+V92Xy5faj0nsHFEbYscZMwWxmdR/UvOgrwVDMCARgwkC17Lu1KuOiu8LDefjAIogAIogAIo8IEC86nVdZmU+DeCqIKBS2AP7bQBbQADMFCMgRkHqoDH2sI7v/R429rFLRnV1owqeWujIeraPZ23fpd88p5o4MbOywcioSXhxzGAidsCNG2LzVmV/ixMA/jEQRH4OPHtL9TJ67dsY66xxAC+6podi7uLqF1GxhLhxDJzfXZXAHP2L89Jlc4r/D7MwGbuD/kAACAASURBVEB4DKSfaFj/QeKZb1AABVAABVAABcJTIN0v9hEUhRcUoT3awwAMVMLAqOVVwGOtelQvjiQa5TcOXLy4ZePGa3eQoDc4Qf/wTVcGbuyceDS8KqzxNj36UCXjGr/LPKgYCNMAfutQ8AtFfvP285lbDJ5b1IKqXTdcL/vvvkp+6/Hz5HzSv62dyx0jbTeAJ7vC17jctuD3mNdgAAZgIPLF8DLdfDIKoAAKoAAKoMAHCqST0f+XwITgFAZgAAbMYGCmJzxjKYit/nQxgHP7w1wyKp8+uk5+6d4r5K07t8p166kONqmS+ML1u+RT9wZb3ff24YbwKoAxgKkANrUCOMQFTgNHgz8vfNd112EAG2YAX7pxp9xzyzXyqw9eKt/uXKvdWDNrcYw4FGuU6ozj3PiM79EDBmAABrRm4MQHiWe+QQEUQAEUQAEUCEeB6cTan8ykxHcJmrQOmnjQ5WEfBmBgCQPKJA3CjA3jM0Zbm5bcq47z0+vtZy8mf/fftkl+YtNOEvgGJPCP3vzJwKqAn9m9Wg4cbQqtj1IBTEyn47hZzjWpIwDCmHeyn/nc/XWBjRO/e+c65g4D5g612Gnbtu2Lu4E8efBCeapX7wpUmxcJTlH9q318XM44z+8Qo8CAWwzMp6KXhZPt5lNRAAVQAAVQAAUWFVhIic8TgLkVgNHetDcMmM/AbK+9VcAjLfobwLl9aKq3QT516ALZfdfV8tqt20noa5rQv3TDjfLvP18fiLnz/AN1oZpYGMDmj/G5Y4xL34e9uOnFvcGMEd/ZvVresm0L84Wm88X563fJO2+6Vn75vsvliy3nGGW6zSTCXUSRXUzh9dfheJNMJxnbXZoPuFd4hwE7GEgnoz2k31EABVAABVAABUJUIJOK/hmBlR2BFe1IO8KAWwyEnSj3OrmXfb+RuFkG8PJ+d7xtrfzKnsvkPTdvkRdsYKtonbaK7rrlE4EYwC89VI8BzK4NRplGy8exsP4f9rz26sORQMaI//OuszF/NTN/12/ZIQ/fvlF+48DFcrzH3HPUp7vtXCA43dXAmMq8CgMwAAMGMrDQH3kxxJQ3H40CKIACKIACbisgE5GPZlIiHVaSh891y6yivWlvGPCWAVvPeVNVHrawMpJoXEwmx+/YIDds2UHCP+SE/5Wbdsh/+sIa3w2e1w5GMIANTFDZMu6YfB9hG8CvPxr1fXxQ1b933LCJ+SDk+eC89bvkrTu3yv67r5Lfevw8a6pLp7vsM4CH45z9a/K4zrV7+/yHnuhpIgPf7Y9c6Hb2nbtHARRAARRAgZAUyPSLO0wMHrhmgl4YgAEYOM3AWJt9ZwEPxewxgHM5nUtG5dNH18kv3XvFYtJ53Xqqg8OoDn7iZy723eB581C4CXi2gGaOzB17TPo+bAP47ccbfR8fvv7ZJrkuZPMzjLFXh8+8dNNOueeWa+RXH7xUvtNpZ6wx1WXfFtDT3VT/mjSOc63EIDAAA8sZWOgXbSGlvflYFEABFEABFHBbgUx/9I+WT8z8n2ANBmAABsxhYK4nKgdjTaFWG2a3bvbq61CznUnZ5f3q9fazF5PQ+2/bJD+xaSfVYAEZIpuvuUF++wt1vpo87x4Jd2EGBrA5Y/jyccH1/4dtAA80N8ln9qz2dXz43I4NjPcBjffKdN62bbvsvutq+dShC+RMX9SaHUYKjRWTnXYZwCNxc7fjLtRGvM4cDQMw4CAD33E7+87dowAKoAAKoEAICshfX/cj6VR0xsHAw/oHf9qUBwoYcIuBsTa7kn3K0HaN4anehsXktEpSX7t1O+aAz+bAr/3cBb4ZPM/evzr0BRkYwG7NATaNl2EbwGoh0wsP+rdN/F/e3SDPu3oXY7yPY/zFG3bJe27eIr983+XypdZznIsnbDOAT1H96xzDNs1p3AvxGAycYeC9voZzQ0h985EogAIogAIo4K4C6ZT4NMHImWAELdACBmDAVAbmekXohpNX1b/Z90kn3ebxeNta+ZU9ly0msS/YwFbRXm8duv3arfLp3f5U+R3btyb0/qgWhZg6nnHdbo99OhjALz8U8W2ByAM7r8b89cH83bBlhzx8+0b5jQMXy4ketytGT3aEuwNFNo7z4utIi3sLApkD3Z4DaX/a32oGkpGj7mbguXMUQAEUQAEUCEGBdDL6O1YHFymCR9oXBmDAHQbGLasCdt0Azu27I92Ni0ltldy+4pobMQ88Mg9+547zfDF5XjkQwQAmBsOAr5KB0dbwzavjB4UvY8M37xHygvVU/3qxoOf89bvkrTu3yi/de4V8+ug6ScxwJt6daLdnV5iZBIuZcuNBvj/DOVqgBQwYycA/hZD65iNRAAVQAAVQwE0F5NdWfTiTEuMETUYGTSQVq0wqwju828zAXG80dNPJi2qP7HvM98FrPl7nktHFZLdKeqvk97r1VAdXaybcsm2LLybPiUfCr8inApjxI9/4YcJroy3hG8BvHmrwZWw4eNOVLOCpYQHPlZtvlPtv2yS/+uCl8t1OKkML9WdbFgSOtDbKjOO7wRRqY15njocBGDCUgR9kkpEGN7Pw3DUKoAAKoAAKBKzAQp/YbmjAgPmJ+QkDMAADBRiYaA8/cZ41cGv9OocBXBbnJ9rPXkyGq6T4JzbtxFyo0Fz4r585p4DR8/ECr5feNvrtw+FXX421ub0FKjGuuYlRHSqA3z3SWHX//06BreX/+t6IvHgDY3SlC3a2bdsuu++6Wj516AI5S1xQVlygxv9aYzAd/n4mES3rfhnvzR3vaTvaDgZcZCD6SMDpbz4OBVAABVAABdxUINMf/TLBlovBFvcM9zBgMwPzfVE51NxkReIPA7jyvjrV27CYJFfJ8i3XbccMLsMMvnP7Jk+Nnmd2r9ai/2EAV95/bJ4bTLo3HQxgZX49e3+dp2PDkZsvZ0wuY0y+ZONOec/NW+RX9lwm32hfiwFYYMFfsT6twznatRrIahwoeI9UBRfWpgpeCurMe6EzDMCAPwz8Dzez8Nw1CqAACqAACgSogJSrzsqkxLsE+yQHYQAGYMA+BmypAp7tpfKj1v55rOVc+eX7Ll9MpqvzEiutvHLl97/+C2s9M3qef7AOA9ifZBFJOEd01WELaGVevbi33rNx4R/uq5eXbeT89kJzytatN8j4HRsWz7o/2cOZr7XO/aOt5i8EnOkhBqyVA/7evmc82pQ2tYSB76dTTfUBpsD5KBRAARRAARRwT4FMUmyyJHAgGehIMhBeediBgfIZWKwCjpH8g5mlzIx0Ny4m1w/fvlFecQ1GRK4Rcd+NGzwzel56qB4DmNiE+LQGBnSpAH71QMSzcaH9059gAU5O9a9akKTOsFdn2T99dB39pYb+ki/WGdHgHO1aKoBVBXO+++K1pXEdeqAHDMCAqQyk+8U+9zLx3DEKoAAKoAAKBKhAJhX9JVMDBa6bIBcGYAAGSjMw0RH+GaS1JP/U33L2W+l2rrYvzCWji0l3lXxXSfhcM9TF78+7epf8y7sbPDF7XjsoMIA9NjOq5Zy/828M8VNbXSqAX3806smY8I/3rZFXbtrh/Dh75TU3SnVW/Z/su0SOdmPw+dmHhuNmnwE8S/UvBjhxBAzAgNUMpFPimwGmwPkoFEABFEABFHBPgUxKvObnQyfvbWbCjXaj3WDAHgbm+4TxZwHPJNgGMqg+eaL9bPnVBy9dTM5/YtNOJ42K/Tdd5YnZ88Zjeiy+4Axge8bzoMYBXT5Hl+1r3z7szaKQ3lsvcXJMVYuJdt1wvey/+6rFs+nVwiNdGLP9OoYM3gWGuYu5y/b+yf3BOAwsMvCvM4noT7mXjeeOUQAFUAAFUCAABea/KC4n4CDohAEYgAH7GThpeBXwKQzgUJLlU70Ni8n67ruulluu2+6McXHhhl3yr+4RNZvA7xzRo/KKJLr9Y7yt8/hoiyZHGBxtkt/Zs7qmMeFfvlAnN252Zxy9dOPOxTPnv7LnMvlWx9pQ5jBb+0Ul92WsARxrkrM9jN2VtDW/Cy8wAAOmMrCQEl8IIAXOR6AACqAACqCAewqkU9GEqQEC101wCwMwAAPlM5BOCjkU08OMqmY76OluKoB14P1Yy7nyy/ddvpjUV+c22rxF9JGbP1mT2fPs/XVabP+s+hsGcPljpQ79jGs4014jrfrMW88/UFfTmPDLt11k9Zip5oNt27bL+B0b5JMHL5Sneqny1aEvDxpaATzeVmRr8OSZMUIHjbkG2gMGYAAGamQgKf6bexl57hgFUAAFUAAFAlBgoV+8QKBSY6DCeSSs6IcBGDCEgclOPbajrcoA7sIA1m2+HululN84cLE8fPtG+cnN9m0VfemGG+Xffb6+asPn2L56DGBDxkbd+hbXcyY218kAfumh6seDb++uk9dds806A1gtBLrzpmsXFwY9fXQd8aBmY146GdVmHqo09ptjAQH9SbP+xNx8Zm5GC7TwgYH3ZOKn/kMAaXA+AgVQAAVQAAXcUeC9J6LrfJi0eVDhQQUGYAAGNGXgdBWwJttpNld2HVOdGMA6z9nqPEeV/P/SvVfIW3dutcbk6LzlsqoN4FcPRLRJvFMBTKJO5/Gj2LWNtOhTAXz84eq3hf/128+3Zly8esuOxTPi/2TfJXKc4xm0jnnn+4Q281AlBvBEsepfTWPsYuMYP2MOhgEYgIEyGEhGPutORp47RQEUQAEUQIEAFMikonGCkDKCEB4ytU5swDAMw0BlDJhaBayum7aurK3D1OtE+9nyqw9eKvfcco28aKO5W0VfuWmH/KcvrKnKBH79UX0qrzCAzek7YfZbHT9bJwP4zUPRqsaC7+xeLW+87jqjDeBdN1wv++++Sn7r8fPkfJKtnXXsK/muac5EAzjWJOf6YCxfe/IaczkMwIDlDPxpAKlwPgIFUAAFUAAF3FEgkxL/0/LgAbMA8xoGYAAGljFgahXwZAcGsKlz9mRvg3zq0AWy+66r5TXXbTfOBOn/mUuqMn3eOaxP5SIGMAlDU8cPnQzgd480VjUW/PbPrzNu3Lt0087FBTxqIc/bnWuJpZbFUqb0J7WNciWVtzr87gTxHv3N0P5myrjAdRITasxAWv5y3b9zJyvPnaIACqAACqCAjwpkklGRSYkfaDzx8+DDgw8MwAAM+MSAiVXAJ0kIWtMfjrWcu3he5D03b5Hq/Mhzr75J638bN2+X//KFuoqNn8FmDGDiTJKMtTIwEq/suAC/Daxn96yueCz46a3Xaj3GZcfgbdu2y/gdG+STBy+UM1RgWjHnzhpmAA/FmuQ87FnBXq1jP39P/AADjjKQjP68j6lw3hoFUAAFUAAF3FEgk4w+SkDlaEDlk6EET/AEA+YwcLoKWB9zqpyEPRUh5vBVyVgw3N0kv3HgYnn49o3yk5t3amuS/OrPXViR6fPCg2u0qroaa20koUz8YyQDIy16GcDH9la2JfxX7zxH23FNLcC586ZrFxfkvNhyjpF8VDLfuPi7Mz1mVQAT69kZ67nY97hnWIaBKhnoj/6RO5l57hQFUAAFUAAFfFQg0y/+hoCkyoCEBCIJIhiAAQsYmOpq0MqgKmUCT7RjYNk+b88lo4vnS6pzJm/duVUr02TrtdfLb1dQBfzy/ohW/WusjS3Ube8/tt6fbhXArxyor2gxyM9df41WY9n6LTsWF9yohTfjPcyrtvab7H3NJMyJ9YaaVfUvz+fZtuMrLMAADDjKwKxMrP1RH9PhvDUKoAAKoAAK2K/AbCLysUxKfM/RYALjygLjCnZ5GIKB2hlIp4Qc1mxrzWIm8HgbiWrXuD/RfrZU50/uueUaedHG8LeK/u071pVt/Bw/qFfVFQZw7WOma/1Pl/sdieu1W8WJR6NljwNf/4W1cl3IW9yft37X4oIatbDmW4+fJ9UOILq0Ldfhf1tMJ/Sai4rFeRz14T8P9Dk0hgEYMIGBdL+4xf7MPHeIAiiAAiiAAj4qkO6PPmjCpM81EpzCAAzAgL8MTHWZkxgcwwB2Omk/2dsgnzp0gey+62p5zXXbQ6mou2nrdWUbP28e0qvqii2g/R1Lmav803ekRS8D+O3DjWWPA5/dvjGUserSTTsXF86oBTTvdDY5PXe43jenu82I89TZv+lkFFZZqA0DMAADMCDTKfF7PqbEeWsUQAEUQAEUsF+BhZT4764/DHP//iXq0BZtYcAcBk5XAeuVXC9UHYKBZQ5XQYwBx1rOXTy3Up1fqSrczg2oyu4PP3NOWebPu0f0OreU/kP/CaJf+vEZulUADxxtks/sXl1yHPjzzzYEOjZt27Z9cYGMWigz04eR5geLJr6nKcd9THZyTIGJfHHNxBYwAAM+MTAtExd/xP7sPHeIAiiAAiiAAj4oMPXFc34ikxLf9WmSZrUeq/VgAAZgwDAGTKkOGW1hC2jm7vxJluHuJqnOszx8+0b5yc07fTWDf/76zSWNn2fvr9Pq/F+1qAIDOD879Cn9ddGtAlj1p+cfWFNyHNh943pfx6KLN+yS99y8ZXEhzEut5xB7GRZ7BTX2KGO10MI6XV4/Xf2r/1gUVJvxObAAAzAAA0K+90Rklw8pcd4SBVAABVAABexXYCEZ/RzBBAElDMAADMBAlgF1HuCIAWcBj7RiAGfbjK+F++9cMrp4zqU67/LWnVt9MWD+9BfWFjV/Xtxbr13CHQO4MDP0J7210a0CWJlmLz1UX3QMePJzUV+qfzds2bG40EUteJnoYU6k75buu5Md+u/yQvVv6XaEdTSCARhwjYGFlPgt+zP03CEKoAAKoAAK+KBAJiX+1LXAgfslWIYBGICB4gxMd+tfIaKqwGjH4u2IPiv1OdF+tlTnYO655Rp50UZvtoq+d8fGoubPqw9HMICpxmO88ogBHRcovXpQFB0D9t90lSeLT85fv2txIcuX7r1CPn10nVQLthjn0aASBiba9Y7vOPsXnivhmd+FFxhwioEJmVj1Qz6kxXlLFEABFEABFLBXAZmIfDSTEvMETU4FTSSKPEpA0m/oN1YzoKqAW/SuEhmOYwBbzWAAY/Vkb4NU52N233W1vOa67VUbNOddvUv+xecaChpArz8WxQAOoD3pD27MyzoawG88Fi3Y/5+6V8iL1le/Ff2Vm2+U+2/btLhwZaCriTiesaQmBnQ3gKc4+7em9mUedGMepJ1pZ1cZWOiPbrM3Q8+doQAKoAAKoIAPCmT6o7e7Gjhw3wTNMAADMFCcgVMJ3atEMIBhuDjDlepzrOXcxfMz77zp2oq3a9278+qCBtDbj+vXl9gC2lt2KmWN369ef7X4R5ezSrPX8c6RxoL9/9Cnrqh4ccm2bdsXF6aoBSqzfdVrBWdot5yB8Xb9+k+2Hw3Hm2Qagx8DGAZgAAZgoCADkV/3ITXOW6IACqAACqCAvQpkUuIPlj8U8n8SBTAAAzAAA1kGdK4CHophAGfbia/e99nh7iapztU8fPtG+cnNpav3LtywS/7VPSu3gX1mz2o50NyknWGFAew9M/TDYDTV0QBWBtYze+pWmMB/+/l6ecmGG0sawJds3CnvuXmL/Mqey+SbHWtJ/BZM/AbDmM19eaxNXwN4qisK+7APAzAAAzBQjIFBKVedZW+WnjtDARRAARRAAQ8VkL911Q9nUmLK5gdc7o0kCQzAAAzUxsCphH5b12YrRdQ5cbRvbe2LfuXpN5eMym89fp7sv/uqxfM3z736pryGjqr0+87u1Uv+vfDgGu3MX9WHMIDLa3v6iH466WoAH9u7ZknfV2NBy6cvyztWqDFk69YbZPyODYsLTU72NDCfkfAOhAE19mfjKJ2+Llb/cqZ1IAwwr+k3r9EmtAkMVMBAUmzyMDXOW6EACqAACqCAvQrMPxH9FEFGBUEGSQkeSGEABlxkICnkaKt+1YvZpCXzGPNYGAwcb1u7eB7nnluukRdt3PWBwXPxhp1SVfzlmsAv76/XMtmOAUzfCaPvePGZuhrArxyILOn7/3jfGvnJTTs+GB/OX79rcQHJl+65Qj59dB0xlYsxlQb3PNqiZ0w33U31rxfjI+/B3A4DMGA9A8noL9ubqefOUAAFUAAFUMBDBRaSkd+2PjDQ4CEbjQnAYQAGTGdgRuMqYM6Ko3+F3b8mexvkkwcvXKzk23ztdtn26cuWmEDHHxEYwMRjmH0eMqCrAXzikaVbwCduvVRedc0Ouf+2TfJP9l0ixxJU+YY9XvP5Qo5oeIa26tPEc8Rz9E8YgAEYKJOBt9gG2kNzgLdCARRAARSwUwGZWPWhTDIyUubkStLKw6QVmhPUwgAMmMjAaIueWwamk1SMmMiTzdf8Uss58q0j9fKV/afPA33zUAMGMHEUsbSHDKitYrO7QOj09a1DDYuLP47tq5NvHq6Xf3f4fKm2j7d5vOPezItpdVxAMd3N4gj6knl9iTajzWAgPAbSqfor7czWc1cogAIogAIo4JECC/3RbQQr4QUraI/2MAADpjEw06PnWcDzfSTXTWPJpeud6xNSnaM90d4o1ZnVOplVbAHNPGRqX9TNAB56/0ztya6onO2JYPh6aPabyqjO163bXDTS0kifoc/AAAzAAAxUxEA6KVIepcd5GxRAARRAARSwU4FMSvyqzg+mXBtJSRiAARjQjwFlGOlkYKlrmevFAKav6NdX8rWJ2t5Sbaeuy/abGMBmcJOPJddf08EAVqbvyY4GqRZHsXUtfcmkPqnY1SmWO8XW6BWZHiaxxrUyNsIADPjIwGt2Zuu5KxRAARRAARTwQAF1VkImJd7xcSLmIYbVezAAAzBgIQOzGlYBz/VgADOfB5RcSXrzOfN9Qotq4NFWqq7oO94wHbSOOhjA9B8z2QmaVe0+L6nXmfQjLU08L1j4vKAd92hMP4MBKxmY6228xIMUOW+BAiiAAiiAAvYpkH6iYT1BOUkLGIABGICBahjQrQp4lgpgKx/oq2HTpL9RW0KHXYGFgcUcYFKfyb3WoVj4/WeigzNLc9uE780YT9JJvY7zmKH6lxgOYw4GYAAGqmRgoT/SZV/GnjtCARRAARRAAQ8UyCQjT/CQbsZDOu1EO8EADOjGwGyvkIManWWqtt/UTSOuh35bioHp7vCT8KOcu8jYUWXCrRTffv9cBwN4ugsD2O925v29n0vVDhRhLz7Kfv6I2oXCo501YMV7VtAUTWEABgxg4HkPUuS8BQqgAAqgAArYp0AmJV41YCInKWdoUg62eFCAAfsZGGsLv/oqm0BUZ6rCnP3M2dbGauvyLMNhfcUApt+Y2q90MIA5f57+Y2L/mdPIAGYBH33IxD7ENcMtDOjFwHt9kQvsy9pzRyiAAiiAAihQgwJzqYZLCVj0ClhoD9oDBmDANAYWzStNqoBPYQBjgBu4YCqdDP8cYLaAZu4xbe7JXu9QyPOP+vy0geNOVj++utv31cKFsBYd5X4u84+7DDL+0PYwAANeMrDQH22pIUXOn6IACqAACqCAfQqoMxK8nGx5L4I3GIABGHCTgXFNqoDVVrow6CaDprf7SEu4lfQk4Ok3pvahsA3g0ZYm5h0McCMZmNVg9wllBFP9y/xj6vzDdcMuDITEQMEjAyLfti9zzx2hAAqgAAqgQA0KZFLiWQKWkAIWEiVGJkroL/QXGMjPgC7bCGIA528fuNVfl4n2hlArsdgCWn9G6Mf52yhsA3iig/N/YTM/m7rrMpMId95R5u+YOvuX52I0gAEYgAEY8IiBhb66s2tIk/OnKIACKIACKGCPAmpS5GHLzId12o12gwEY0JGB8bbwE4lTXVQA68gG11R6zFLs5m6JGfT3VACXbiM41lOjsA3g6a4CBnDB6hQ9dYRv99pFHZsR9Fyz/PNUFTLsuccebU6bwwAM+MjAYXsy99wJCqAACqAACtSgQCYVafZxwuVBzqPVa7QRgTEMwIApDOhQBTzZWSARz5jMvKw5A2FvxYkBzFxjylyz/DrDNoBne2BneZvwfzOYULumLDdkg/z/WBvVv/QVM/oK7UQ7wYBRDPxDDaly/hQFUAAFUAAF7FEgkxL/SBBjVBBD8l7z5D39if4EA0KGvY0tBjD90NR+mE6JUBPxbAFN3zG17wzFwjs/W5nPqu+aqh3X7XbbTXeHuHNLrEmyeMJt/hh/aH8YgAGfGPh++hcbIvZk77kTFEABFEABFKhCgflfWrsmkxLf92myJQlCIggGYAAGHGVgvi8qh5qbQjOyTlIBTN8zuO+NxMMzsjCAScKZ+lwQpgE80kIFo6nccN1CTnWFZwCPF6v+Zft0YjmDYznGFuIpGAifgXQycqCKVDl/ggIogAIogAL2KJBORR4mKAk/KKENaAMYgAEbGZhoD8/EOtlBMt5Gply5pzDP0WYLaOYjU/tZmIuO1K4XpurGddPn1a4pQW75nPtZc72c/UsfpA/CAAzAgE8M9Iun7MngcycogAIogAIoUIUCmX7xFIGGT4EGq1VJhMEADDjOwHyfkGGdyajMZ+Y35jdTGQizGgsDmH5jar8Ja75RZtZ0Fwawqdxw3UKqXVNyTdmgvidWY76h/8EADMCAzwz821yibnUV6XL+BAVQAAVQAAXMV2C2X/zHTEp8z+fJlgS84wYQfBHQw4DbDKhK3KASibmfM1FsS0HGZeZmzRmY6YmG0m9UH2ILaLfHbJPn7DArgGd7qGI0mR3Xr32iIwQDONYk5/roN66zx/0Tc8AADPjNQDoVfcD8DD53gAIogAIogAJVKLCQiuzxe6Ll/QnmYAAGYMBtBhargEM4C7jomXKam3/0Gbf7jGr/dFLIwVg4Z2iPtjaxQIAxwkgGQjOAY02LfZaxm7HbVAbUFua5i+iC+J7qX/qLqf2F64ZdGDCLgYVk5MkqUub8CQqgAAqgAAqYr0AmKf4bgYtZgQvtRXvBAAyYyMDJECpLxqgANtLAMZFvv655OB5O9TwGMPOMX0z7/b5hbQE9EmfRhN9ty/v7Oy6pRXNBmL7Zz1B9dZ7qX+I0FlvBMzC/zAAAIABJREFUAAzAQDAM/OupJxr/F/Oz+NwBCqAACqAAClSggEx8/MczKbHAw7S/D9Poi74wAAMwcLqacSgWbHJxrJUzgGHP7PEn6IR8NjE/2oKZRd8xs++EVQFMJaOZvNDPz7SbWjSXnQOC+Kq2nEb/M/qjBVrAAAzAgL8MLPSLeytImfOrKIACKIACKGC+AplU5BcIMPwNMNAXfWEABmDgDAOTncFuLziKAUxyNZgV5b7pHHSfySb9MYDPjFuM4WZpEVYF8FQXZhZ9xay+sry91KK57Bzg91e1UEMdD7L8Gvg/msAADMAADPjHQPQb5mfyuQMUQAEUQAEUqECBTL/4mn8TK0EL2sIADMAADCxlQJ1pGmRyfqSFCmAYXMqgaXrMJKKBJeRzE/4jLJ7AmDB08UQux0F+P9MThRlDmTFtXvDretW4H1SfUceC+HUfvK/ZcQ/tR/vBAAz4yMCC/MWP/fsK0ub8KgqgAAqgAAqYq4BMrP3RTErM+jix8lBHEgQGYAAGYGAFA0FWNI7EMYCZ581OoqgKqaAS8rmfgwFsNjcu9/vBWFPwfSbWJNUCJ5d1597Nb3+1aC53HvDre7UQMJ1kwQR9xvw+QxvShjBgIAPJyF3mZvK5chRAARRAARSoQIF0MnIbwYqBwQpmEsk1GIABwxlIp1QVcDBJxuE455gy15s/1yuO/UrEF3pfqufN58bVvl+IaT9fZ7ER/cWG/jYcDyY2UwsBbdCLe6DfwwAMwICBDPSLr1WQOudXUQAFUAAFUMBcBdJJ8fsEKwYGK4YbPzAHczAAA4qBoKqAVZUJzMGc6QyMtQWTlM81yKgApt+Y2m9yOQ7q+/E2DC1TeeG6z4x1QRzRcbr698xnoj9awAAMwAAMBMxAWiYiHzU3m8+VowAKoAAKoEAZCsjfuuqHMykxGfAkSxIe8xYGYAAGYGCRgdNnAftvag01YwAz15ufVAlqwUSuWYYBbD43rvb9XI6D+n6KikbiOwviOxUz+d1nqP5lbnF1buK+YR8G9GEg3R/52TJS5/wKCqAACqAACpirwHupyE6CD32CD9qCtoABGHCRgamuBt8TjSqRmeFcRhLzhifmTyWigfSV3MQ/W0AzLxk5LyXDOTN7pofzTI3kxfC5wWvNc+cAP77n7F/mFa+Z5f1gCgZgoEoG/sDcjD5XjgIogAIogAJlKLCQEv+5ykmSJDKJAhiAARiAAU8YUGcBB3G2qao2Zs5DA5MZmOsL3tTCAKbPmNpn/DCuir5nrEkyz9BfTO0v2etWDBfl3IPqYLXwL/t5fKXPwAAMwAAMhMXAQkqckomLP1JG+pxfQQEUQAEUQAHzFJCJVR/KpMRwWBMtn0uQBwMwAAMwkGVgutv/KmAS8/CW5c3Yr0khgzibMTf5jwFMvzGyvwRgYuX2E/X9SJyjBoxkhcV8S8zYeZ8XGqkFf2rhH6ygAQzAAAzAgA4MpFPRm83L6HPFKIACKIACKFCGAgvJyLU6TLZcA0EfDMAADMCAMmeH4/6eBaySmrCGBqYzMNbqbz9ZYWq1NNJvMCuMZGA5y37/f7yNvmL6+Mr1CznX6+9RA1NdbJMOZ8SiMAADMKAPA+lk9HfKSKHzKyiAAiiAAihgngKZfvG/EnToE3TQFrQFDMCA6wxMd/ubdJzvI+noOmM23P/JDv+r5XONMiqAmZtM7DeqwjCX4yC+n2RbWyMXCpjIt5/XPNfjXyy2WP3LcRz0ExZVwQAMwIBeDJyUiVU/ZF5WnytGARRAARRAgRIKZFLiDT8fHnlvEoYwAAMwAAMVMZAUcsTHKmBV1VLR9ej1YMq10x6LDPi9UGK5Uca2tozjJo6bQZxjuryvzPQwx5jICte8dIyb9bECWM1f6L1Ub/RADxiAARgIn4GFlNhRIoXOj1EABVAABVDALAXSqforCTLCDzJoA9oABmAABpYy4Ke5papa0Hup3uhhnh5zPp/PuNzUwgA2jxH6tVg8Y3Q5y37/P51kjoE988cLtZDBj76ijvng7F/z+aCP04YwAAM2MrCQEv+bWVl9rhYFUAAFUAAFSiiQTomkjZM290QwCgMwAAOGM+BjFbCqaoEPw/mgClhmkkIONTf5kqDPl/QfaWmi38CdcQwEXQGszC3mF+YXGxg4lfDHAKb6l/5hQ//gHuAYBqxlYFR+bdWHS6TS+TEKoAAKoAAKmKNAOiVeJnCxNnAhAUWiFgZgwGgGTvl0FjDbczLv2RL7jLY0YgAzzhs9zvvdF4M+A3isrYH2oE9awYAfO7Fwljzxl99jPu8PYzAAA7UysJCMXGtOVp8rRQEUQAEUQIEiCrzXL86vdWLk7wmuYAAGYAAGfGNAVQH7YHDNJKgA9q3NSPwHmvif6GgIzgCOUwFMvzFvvgu6AniyEwOYfmJeP8nXZtNd3s8vamFfvs/iNTuYoR1pRxiAASsY6Bf/qUgqnR+hAAqgAAqggDkKLKREuxWTM8lmHqRhAAZgwFoGZhI+JCATJOiZ/+1I0Ex3+bNFZ94toDGArR1nbR4Pgq4AZoGRHWOrzX2i3Hub6vQ2/uIcefpGuezxe7ACAzAQMgMDUq46y5zsPleKAiiAAiiAAgUUyKTEd0KeVEmkYVrBAAzAAAyUZMDrbW6nuzGAmf/tSKzM9QRoALdwtin9xrx+k04G10fUwon5PvM0gmvaLB8Dqpo932Kgal9jcQSc5eOM1+ACBmBARwbSTzSsL5BK52UUQAEUQAEUMEOBhSfWrM2kxA90nGi5JgJAGIABGICBXAZU0rDahGO+v1PbGua+P9/Dm6kMqOrGoeYmT/tHvj6jXhuJYwCbyonL1x3kFtBDMfqIy6zZdu8nPTxiYKS1UWaSxBq2McL9wDQMwIC9DES+aEZ2n6tEARRAARRAgQIKZJLicXsnaoIw2hYGYAAGbGNgrLXRM5NrCgMYA9yiyns/zsnOZwJjADOvmDivBGkAj7VhAJvICNecf2ybaPeuAnimh7N/4Sw/Z+iCLjAAA3oyEH2zQDqdl1EABVAABVDADAUyKfH3ek6yBD+0CwzAAAzAwEoGVPIwnylVzWtqW0M0XqkxmpipiZdJ+mL9SRnNMGImIy63W5AGMHML/cOmvubV3DKqqn8tWnTFvdDPYQAGYMANBua/KC43I8PPVaIACqAACqDAMgXmU6vrMinxbwQtbgQttDPtDAMwYAsDXlUBk6SnT9jSJ9R9THV5tzgCA5i+YVPfUPcSpAE8kyiwuIitbzEADTRAx9u82XmF6l/mFdvmFe4HpmHADQbSKdG7LJ3Of1EABVAABVDADAXSSfEQAYsbAQvtTDvDAAzYxMCsR1XA6lw7m3ThXtzu5171i2Lmr/oZW0C7zZmp40yQBvB8H9vcmsoJ171yfFNbmpeaF0r9XC3cQ9uV2qIJmsAADMCA/gykU9GXzMjyc5UogAIogAIosEyBdEp8k2BD/2CDNqKNYAAGYGAlA15UAU9gAJOQNbAaq9B4kE6JmpP0pZL4GMArx6JC7cHremkVlAE8FGtiXLVoXKUfC6m2bi5nbij2O7O9LIqAJb3mBNqD9oABGKiEge/21V+0LKXOf1EABVAABVBAbwWmE2t/MpMS361kwuN3CZBgAAZgAAZ0YWBOVQHHmmpKSqpz7XS5H66DvuUFA6o6t1gS3oufcQYwrHrBatDvkU4Gs0U6lY70j6DZ9vvz1Jhfy9yhKoj9vkben34HAzAAAzDgJwMLKdGud5afq0MBFEABFECBZQos9Iv7/JwceW+CLxiAARiAAb8ZqHVbwvE2DGC/24j3D3YcUEzXkqgv52/ZAjrYNqUPeaN3UAbwJDtLYPZZVgFd08KiWJNUC/YYx7wZx9ARHWEABmAgJAaS4pllaXX+iwIogAIogAJ6K5BJRb9B4BBS4GBZUgCO4AgGYCAsBub6atvydgwDmKSsZXPyVBcGcFjjEZ+r91w4X+N8Uc7iCPU7pxKYXfQFvftCpe0zHK9+t5Vxqn+JsyyLsyrtP/y+XeMh7el2e77X13Cu3pl+rg4FUAAFUAAF3ldAJj7+45mUyBC8uB280P60PwzAgA0MqORiuYn55b+HAUwfsKEP5N7DjNoavbn6ZH05fzsS54zTXM353oxxJCgDWC1Mggk0sIkBda51OXNDvt+hP9AXbOoL3As8w4DrDESaMRZQAAVQAAVQwAgFMklxJ4GL64EL908fgAEYsIOBub7qzwIebeVcOvqBHf0g247ppKj5bOx8Sfzc1zCA7WImy47tX4MwgJVRlknCh+0suXZ/1RrAE+3EWK6xwv0y/sMADFjOwD8bkfTnIlEABVAABVAgkxJ/bPmkzMp7tlqCARiAAYcYmKiyCni0hUpG4gH7EjXD8eqr4nON3kLfYwDbx4wL40AQBvAYi4qIvSyLvRYXFVWzq4Q6+7eP7dBdGFu5R2ICGIABhxj4wcIXI424CiiAAiiAAiigtQLy19f9SDoVnXFogiYRYVkiAnZ5wIABGFjOQLVnAWNkwdJylmz4fy3bohcyfXNfp9/Qb0zsJ0EYwCc7Gnju4LnDKgaqNYCp/mWeMHGe4JrhFgZgoCQDyeijWif9uTgUQAEUQAEUSPeLW0pOaDy4W/XgTnsTxMIADLjAwER7Q8Vn1GFk0Tds7BuTnZX3hVyDt9T39Bv6jYn9Zl4dF1BNJWMFf3MqgQFsIhtcc+ExrZqFE0PNTVL1N3QtrCvaoA0MwAAMmMpA5G9xFlAABVAABVBAawXSqejvEmiYGmhw3bALAzAAA4UYUMlGlXSsJME/HGcL6EJ68rq5fW0m4a/RpbaYhg9z+XC17YIwgOd6Mb1c5cvW+1bbOFcSV6nfVQvybNWD+2LugwEYgAHnGfh+OtVUr3Xin4tDARRAARRwVwH5tVUfzqTEOAGL8wELD+VUucMADFjJwERHZZWPQzEMYGIC+2KCaiq2KknwYwDbx4wL44DfBrBagOSCjtyjW/1fLWqoZH44Xf3rlkb0CdobBmAABtxiIN0v9rnrLHDnKIACKIACWiuwkBI7CEzcCkxob9obBmDAJQaU8aVM3XKTlRjA9A9b+4eqbi+3H1T6exjA9BsT+43fBvBYK5XxJnLBNRcfz2Z7KjOAOQe7uJ7whj4wAAMwYD4D6ZT4ptbJfy4OBVAABVDAXQUyqehvEGyYH2zQhrQhDMAADBRm4GRHY0XGF1oW1hJtzNVmrK2yflCJCYwBbC4XLvfpuT5R0dxQSZ9Qv4vxRb+wsX9VcqSAqv5NJ9kG3UYOuCfGNxiAARhYwsD3ZhORj7nrLnDnKIACKIACWiog5aqzMikxwKS9ZNJmqza2wYUBGIAByxhQycdKzgJOW3b/zPPM84qByc7KtkOvxOzCAIYxE8cZvw3g6W6MLxO54JqLj2enKjhTXs076FlcT/RBHxiAARiwg4GF/shuLZP/XBQKoAAKoIC7CmT6xWYCDTsCDdqRdoQBGICB4gycrMD8SieLvxdao4+JDFSStK/E/FW/iwFMnzCxT/htAKv3N1EXrpl2K8bAdHd5i4nUkRrEU7BUjCV+Bh8wAAM2MbCQEn/hrsPAnaMACqAACmipQCYV/SWbJlvuheARBmAABmCgEAMqCTkUK28LXHVucKH34XW0MZUBP80uDGD6hYn9Yq63srNMK1kYoXadMFETrpm+XIqBcg1gqn9hqRRL/BxGYAAGLGPgvakvnvMTWhoAXBQKoAAKoICbCmRS4nXLJlsSLWxbCgMwAAMwUJCBcrfApWqLZISV8dHiIogmX848xQCmz5jYZ+b6/DOAR1sbC85FJmrFNdPHswxMdZWuAD5d/csW6FnN+Er/gQEYgAE3GFhIRe9202HgrlEABVAABbRTYD4lPkkA4kYAQjvTzjAAAzBwmoHTVcClDTBVFYZm9BsbGRhrLa8KvpJKR7aApq+Y2lf8rACeaOfsU1O54LqLj2nlLKZTJjE6FtcRfdAHBmAABqxk4OvaGQBcEAqgAAqggJsKpJPRHoINK4MNHrapfoQBGICBIgyUk7ic7cEAJkawM0Y42VG6cqtS8/e0Acx2t/QZ8/qMnxXAaptcmDCPCdqsdJuVmkeG400yXSQOQ+PSGqMRGsEADMCAsQyk5S/X/Ts3nQbuGgVQAAVQQCsFFlLiGAGFsQEFCSWSCjAAAzBQJQMqKVnqLOAZDGD4qpIv3WOr6W5/trxVCX/d753rI+5dzoCfFcDsJAFvy3mz5f8TJRYSTXWxiM6WtuY+GMdgAAZgoAoG+sUdWhkAXAwKoAAKoIB7CrzXFz2PSbyKSdzSZDAswAIMwIBrDJQ6v24mQfLSNSZcuV91vnU1Fb6l/gYDmHnExD7kV384ff4pTJjIBNdcmtuJ9sJHCajz4NVxG+iIBjAAAzAAAw4z8MfuOQ3cMQqgAAqggFYKLPRHWxyeiHkgxciGARiAAccZUMlJZVgVMrVOYQDTR2ztI0khh5oLs1+oT5R6HQOYJJ+JzxZzvf4siBhtpSLeRB645vLGsfG2wgbwNNW/xE+2xk/cF2zDAAyUz8CcTKz9Ua2MAC4GBVAABVDALQUyKfEvPOCW94CLTugEAzAAA3YyoLYoLGRqqW1yaXc72512FXK0pXDyvlCfKPU6BjD9xcS+5dcW0GqLXBP14Jrpx+UwMNaafw5ZrP4tPzlOH0ErGIABGIABaxlIJyO3uuU0cLcogAIogALaKJD5RRHNpMQPynm443dIAsAADMAADNjKwOkq4PxJzOkukve2tjv3JWSp8xtLmb35fo4BzFxhYt/yywBmERH9wcT+UO41F1pEBPdwXy5D/B6swAAM2M5AOil+XxsjgAtBARRAARRwS4FMKvqY7RMt90cwCQMwAAMwUA4D090NeauA1et5/55z7fLrwup1o3RRW3TmM3FreQ0DmDE375ip+djglwE82wsPJvLANZfH7UieCuCRlkaj5kHaury2Rid0ggEYgIGqGZiWiYs/4pbjwN2iAAqgAApooUAmJf4HE3jVEzgPtpon8mAbtmEABiphQFUBj+Q5C3iKCmDmO4vnu7keDOBKxgl+1955xY++MBRrkmmLxw/6g739ody2HYmv3D3lVIKjM8rVj9+jD8EADMCAGwy890RklxZGABeBAiiAAijgjgKzicjHMinxPYINN4IN2pl2hgEYgIHSDOSrAp7sLFABTFIfY9gCBpQ5NdTc5GkVMBXApccaxmP9NPKjAphKSP3amb7nbZuo8T53xwi1kA6NvdUYPdETBmAABsxnYCElfssdx4E7RQEUQAEU0EKBdErsJYgwP4igDWlDGIABGPCQgcUq4KXVLBjAHuprgWFqY39TJlVuAr/W74dibP9pIye235MfFcDqjG3bdeP+3J4jVZV77pwxQ/UvfZ5YDwZgAAZgIB8DEzKx6oe0MAS4CBRAARRAATcUWEhGnuSB3e0Hdtqf9ocBGICBlQxMJ5ZuiXuyAzMLTlZyYpMmE+35z7/OTepX8j0GsN282MR+7r2os3or4byc353mCIF8CVBesygxnmsAj7Y0yUyS8S93XOF7eIABGIABGMgysNAXvd4Nx4G7RAEUQAEUCF2BqS+e8xOZlPhudhLiKwEJDMAADMAADJxhILcicqIdAxg2zrBhoxZTXUsXPZRjbBX7HQxgu3mxsQ+oe5rt9bYfqD4y28NZqLbywn2JxfOtc+eCmQQV73DB/AcDMAADMFCQgf7ol0M3BLgAFEABFEABNxRYSEXvKTghWbQimXsk8IIBGIABGKiGgVM5VcAYwDBUDUMm/Y0yqXKT+LV+jwFMnzGJ/+y1et0PBmNNMk01JNW+Fj9bK76z88VoC4vlsmMJX5kDYQAGYAAGCjAwKBOrPuSG88BdogAKoAAKhKpAJiW+XmAy4iHd4od02pwgFAZgAAbKZECdBdx6+lzU8TaSmnBTJjeGxhDp1JkkfjaZX8tXDGC7ebF1PPC6AnhEbYdr6JjAddOHy2Fgvu/M4qEZqt3p74x3MAADMAADpRnoF5tDNQT4cBRAARRAAfsVkInIRzMpMV/OQx2/w8M/DMAADMCAqwzMvF8FPIYBXPpBlod94zUaiZ9e8FCL8Zv9W3UmpKvjBvdt7pzpdQUwu0eYywL9uLy2m3t/2/SxNrZ+hpnymEEndIIBGIAB8SX7nQfuEAVQAAVQIFQFMsnozzPhEnTBAAzAAAzAQGkGRlsb5VgrFcCwUpoV0zUab2v4YCvPrJFb7VcMYPt5MZ33fNfvdQWwOls73+fwGv3DFgbm3j8+QPUdW+6J+6B/wgAMwAAM+MzAW1KuOitUY4APRwEUQAEUsFuBTH/kD32ezHgApBIKBmAABmDACgbUlobKBGbeJBFgOwNTXRjAtrcx91d8HPO6Ali9H5oX1xx9zNZHxUjskmJ2G9IHaT8YgAEYCJ6B9BP1V9ntPHB3KIACKIACoSkgf+uqH86kxBQTfPATPJqjOQzAAAyYyQDbeJrZbvS3ytpNJfKrrfhd/ndUAFemPazqoZfXFcDpJAYwbOvBtl/toI7KUNtA+/X+vK/d/NC+tC8MwICrDKRToj80Y4APRgEUQAEUsFuBdCp6s6sTLPdNcAkDMAADMFANA2xtCDfVcGPa36STQg7GmjwxgTGA6TOm8a+u18sKYHWmtokacM303UoYoModXirhhd+FFxiAARj4gIHjdrsP3B0KoAAKoEBoCiykIl9hwv1gwiUxwxa1MAADMAADMAADMPA+A8PxRgxg+oOz/cHLKnh2juB5y4Vn7nmq3J0dL13gm3tkHIcBGPCTgblUw6WhmQN8MAqgAAqggJ0KyK+t+nCmX4z5OYHx3gRIMAADMAADMAADMGAmA+NtGMCwaya7XrSblwbwVGcDxhCLKexhIOnuuODF2MJ7wA8MwAAMwMByBhZSkW473QfuCgVQAAVQIDQFFvqi1y+fcPg/QQgMwAAMwAAMwAAMwIBiYLKzgQpgTCt7TKsK29JLA1i9F+Mq4yoMwAAMwAAMwAAMwEA+Bhb6xQuhGQR8MAqgAAqggJ0KZPojv5Zv0uE1ghEYgAEYgAEYgAEYgIGZRBQDuELTkH5jT7/xzACONUl1pjZsoAEMwAAMwAAMwAAMwEAhBt7ri1xgpwPBXaEACqAACgSugJSrzsqkxDuFJh1eJyCBARiAARiAgfcZIHGPceGoCTjfJzCAHW17xn8hvTKAR+JNjKH0IxiAARiAARiAARiAgaIMLPRHWwI3CPhAFEABFEABOxXIJKMbSOxg7sAADMAADMAADMAADBRjYDjeVLMJPBTDACumMT/Tsw96ZQCrs7RpYz3bmHahXWAABmAABmAABvRhIPJtO10I7goFUAAFUCBwBTKpyBf1meAINmgLGIABGIABGIABGNCRgbG2Rg8MYAwwHduWayo+5nhlAKuztNG6uNbogz4wAAMwAAMwAAMwIOR7TzSeE7hJwAeiAAqgAArYp0AmJV5jYiW4ggEYgAEYgAEYgAEYKMaAMq8Gm2urAh6KYQAX05if6dkHvTKAZxIYwDCuJ+M1twtHZLC4g+1cYQAGYAAGvGUgKR63z4XgjlAABVAABQJV4FSi6cqaH/aY4L2d4NETPWEABmAABmAABjRk4FQiigGsYbsQy/tvqM14wL5aPJFORhnb6EMwAAMwAAMwAAMwAAMlGZhLiuOBmgR8GAqgAAqggH0KzCQiT5I08j9phMZoDAMwAAMwAAMwYDoDc32idgO4mTOATefAxev3wgAejlP97iI73DNzPwzAAAzAAAzAQLUMTPVGP2GfG8EdoQAKoAAKBKbAbE90uNpJiL8jgIEBGIABGIABGIABhxhICjkUq3ELaAzgkqv96VP69SkvDOCxNrZ/hm392KZNaBMYgAEYgAEY0JeBya6GzsBMAj4IBVAABVDAPgVOJcQxJnp9J3rahraBARiAARiAARjQiYGx1saaqoCVgazT/XAt9K9yGPDCAFZnaJfzWfwOTMIADMAADMAADMAADCgGJrvEnfa5EdwRCqAACqBAYApMtNbvSyeZVAmsYAAGYAAGYAAGYAAGSjNwsqMBA5gzy5wzMr0wgNV7MMaUHmPQCI1gAAZgAAZgAAZgQMiZHrEgV606KzCTgA9CARRAARSwT4HxxMd/fLhVfHeqS8hTCf6hAQzAgLcMjLdH5GhrvRxrrZcTHZEV/6a66uVUZ2TJv1PdEXkqsfTfbE9Ezvcu+8fiFRLJmDAwAAOBMzDdHa3NAGYL6MDbjARa7UlULwzg+b7ar4O2REMYgAEYqIwBNfYuf46c7V36rLn47Nm99Jl08Rm1K/8z7Fhb/eIzrnrWJX/gbf4APdETBk4zMNEh5GBc/J59TgR3hAIogAIoELgCgzHxzcGYkPxDAxiAAa8ZePuIkM/sWS2/szuYf8/sXi2ffaBuyb/n7l8tj+2tW/HvpYfq5Ev7l/57Zf8a+eqBuiX/XjtYJ088smbJv9cfXSPfeGzlv7cfr5fL/717dI0cWPZvKFYvh+NL/420nE4kKMM8+2+8baVproz05aa5+v9y01z9fy5PwoNdHypLGpFkQy8YWMqAGlcGm6s/B5gtoJfqCV9m6DGTqK3yfTjO1uewbgbrtJO+7VSukTmdyPOsUMLIzD57qK/DLUufUdQzy2Bs5fPMu0dWPve8/fjK5yP1zHTikZXPU68dXPnc9cqyZzP1rPbiQyuf4154cOUzn3oGDOqZc/Fz9qyWbz8eIY9GLhEGYMA3BgaORn8ucJOAD0QBFEABFLBPgYHm6GNemz68H0YiDMBAloHXDtYH+zAekNkcaILB53t6ds/KJMpzDxQwzvMkZl59eKlprkz043kSPfmM8zcPrVlhmr9zZGWSSZnoy01z9f/RltNV5rmJq/G2lav1Ty6rNFem+XTXSuN8pmdllYCqGiAhqm9ClLYJuG2SQg5hADMmOFZ9X6sBPNbWCDOOMcPcVHhumk+ujLWlLy6pAAAgAElEQVTyVWTWbGQuW2wZupG5T1Mj0+fnDJuemXLvRT3jZp93+UruAwZgwAcGvjsR+9i/t8+F4I5QAAVQAAUCV+CdlsZzfJioCIZZBQcDMLDIwEBMyOf3Brwim0QGpnsADCw3zo8fXCPnegsnPEkGo40tDIy2NFZdBazMY1t04D7c6dOnErVtfT7Z2QD3GMDWM6B2s3kuuxPP/ad35Mk1zPg+mB2R0Nl/nV94sE4Oxqj+JY+I6QkDvjLwzcANAj4QBVAABVDAXgUGY+I1Jm5fJ27MUMxQpxkIeitoEh/+Jz7QOL/Gzz9YJyc7qRjGGLPbGJvoqH47XAxgu9mwte/XagCrCuK82iThIa8umMX5edFUF7U18RuPrmHxYQCLD4m/88ffgerC1s9O5zXIm5I3DYoBtVunvS4Ed4YCKIACKBC4AoNx8StBTWJ8DgETDLjJAFtBa5CwIDEVSHJSnXs9FFtjVPKWBDwmTCUMTHdVXw3JGcCwVglruvxurQbwfF+UOUFT81IXxky9DnUu/Ev72OknUAOSeD6QeL5Qm7L1s5u5DHJYtHvQDAw0R88L3BzgA1EABVAABexVYDAmdgQ9mfF5BFAw4BYDbAWNAVwokWLj68/eXycn2oVMk/DG9LCQgbkeDGBTzRquuzoDvhYDmEUP1WkOq/rrNtMj5FBcSBXz2BjLcU88uyxngK2f3cpfkK+ivUNk4FV7HQjuDAVQAAVQIBQFnt571Q8PxsSpECc3tpFhi2QYcIABtoImkbI8kWLr/1/Yq84GE3KkVUhVHUMiGw1sYkAtbFBbOQ9W8Y8toOkLJvaFWgzgsdZG5gALF8KYyLFn15wUcrLrjDGgTDFb4znui2eXXAbefpxzf8kZnhn70AItfGTgS6GYA3woCqAACqCA3QoMxsTXfZy8MPccMPfghwC4HAbYCppESm4ixdbvX9p/2gBWfUJVx8wkMH08SzxjJGhhJo20NFZnAMeatLh+eGRMqoSBU4nqz72e7Cxw/i9jGWOBgQykk0KOtS195nnpIQxgW+NZ7uvMcxtbPy/t9+U89/M7aAYDVTNwg90OBHeHAiiAAigQigJDzZE9TM5VT84Y3BjcMFAmA2wFfSaRQFLFXi1eebh+6ZgQF3KyE8OlEsOF39Wbl4n26gwxtsPVu13pd/nb51R3dbyrKnlVPYyu+XVFF7N0mesVcrhl5fPyqw+voQKYc3mtZoCtn1f2e3KHaAID/jAwEI/OvJS4+COhGAN8KAqgAAqggN0KvNW8ds1gTPyASdyfSRxd0RUGzjDAVtD2Gp+Y2qfb9vgjywzg9xdIqKoZVT1D0hsNTGdgqqv6c4BNv3eu373+W0sF8HwfBjB9xvw+M919ekeTfM8zKuYh/iO2t5kBtn4+8xyfbwzgNfSBAQ8ZiIuv2e0+cHcogAIogAKhKjDQLJ5m4vZw4i6zIhLN0dxFBtgKmkSRzYmiNx4rfEaYqp6Z7TU/GUxC3+02nO3BAKYPuNMHprur432x4p1FPyx6MnCr5+z4ps58n+go/qz2xqEIBjAVwNYy8NrBNUt39SHHgx4wAAP+MnBfqMYAH44CKIACKGC3AgPxaI+LRhT3XPyhHn3Qxw8G2AoaA9gOA/jjeRNepSoFhmJCqmqabIKVr2hhGgPKFFDb21b8jzOA6fcGmmHTieoM4LHWRtrbwPY2bTz263rn+4QcbS39HKRiHjtiOmJz2nEpA2z9XLr/+5En4D3R3WEGvj/WtrrObueBu0MBFEABFAhVgYFYdIPDEy2r2PxdxYa+6LuCAbaCXppkIOlijx4DzYUrgHPn2Yl2toT2K3HN+/pvqo/EGzGAMbecMDirrQA+2dHghD6Mt/6Pt0FrPJMovOVzbhyjvh84igFMDG9PDJ/blm8fKS+eX94n+D8GJgzAQJUM/FOopgAfjgIogAIoYL8CMrHqQ4MxMVrlRLXC3OF9CHpgAAZKMaC21cp90OZ7OxMoLrXrs3tWVzQfjrQKqapsgk7u8nloXisD420NlRvAzU2wjmlsHAPVGsCnujGAax1n+PuA56qkkJNdlT+/qNjHpViPe7W/vdn6ufJxoNRzPz9HUxgowUCz6LDfeeAOUQAFUAAFQldgMCZ+n0m5xKRMJWdF5gY8wVMxBtRW0Gp7LRIp9idSXGnj5x+oq3iMHIoLqaptSHSjgUkMTHVVYQCzBTT93EADfLq7Ctabm+Rcb5T2NrC9TRqHvbzWdFLIsfbqnlueI5bnWcaic5DZ+rm6caDYMz8/Q1MYKM3AUEvkitBNAS4ABVAABVDAfgUGm8WdTMylJ2Y0QiMY8I4BdXbYM1QOkDiyJHH04r41FRvAi+NJ/HTVjZfJXN4LQ9lPBmZ6qjgXFQMYQ9BAQ7AaA3goxvm/fo4/vLe389tcr5AjLdXH9sf2saOPKwsdXbhPtn6ufiwgR4J2MFA1A8Ny1aqz7HcduEMUQAEUQIHQFZh85Kf+w2BM/CuTdtWTdnWJf6qK0c1xBtgKmgpgWxJKrxyo0gB+fwxQ1TeqCofkNhrozoDidDDWVPE20LrfF9dH31vOQDUG8FgrBvByHfm/nn1rulvIoRqfQ17ejwFsSxzr+n2w9TN5MHKhMBAGA0OxyG+HbghwASiAAiiAAu4oMNgs/iaMCY/PJNCCAXcZYCtoDGBbEk5eJI5UFc4c5wJjghtQKTkcb8QANqCdMN5qM96qMYBPdnD+L9zVxp3f+qlFPCc7vXn2eO1gPTvZWLKTjS3xeDX3wdbP3owH5HTQEQYqZ2AoHrnNHdeBO0UBFEABFAhdgaF45CgTduUTNpqhGQzUxgBbQWMCV5Os0e1vXn+s3pMdDdS5wKoqx+8EMO+PxrUwMN6GAVyLfvytGf1vuorzrqe7Of8XvvXle75PyNHW2uL23Oee1x/FANYtHuV6Kn+uYutn78aE3PGB79EVBkoy8N544uM/HroZwAWgAAqgAAq4o8BwrP4iJuiSE7QnCX50RmcYWMoAW0FXnqwgwaOXZm8ejng6P0x0CJmmwhAjXFMGJjsbKq8AZotzeNaU50KGpTJzB5sr2+58rhcDuJCevB6uMTzTK6RaZOblM4iKfYhH9YpHaY/K2uP4wdqOcPGyP/Fe3o5P6ImeujMwFIs86Y7jwJ2iAAqgAApoo8BgTLyu+yTJ9RHIwYB9DLAVdGXJCpI7+un1zhHv++Vom5CqWoekORroxsBMonJjLIMBTF82zQDuqozzoeYmCeeM17qN14rJyS4hBz02f9Xz2DtHBQYwW0AbywBbP3v/7EKeBk1hoHwGhmKRg9qYAVwICqAACqCAOwoMxKJfZsIuf8JGK7SCAe8YYCto/UxNjOby2uSZ3aulWsTgx3igqnVmekioa5dQN8zI8lo/tTCh0spIr6+B92Nc8JuBSreAHm1pxOR3fGz0m8lK31+d9zve7k98omIeFfuoGIh4EQ1MZOCdx73dvceP5wDe07/xC23RNmwG3m1uONcdt4E7RQEUQAEU0EaBgebop8KeBPl8AjEYcJcBtQ2XiQkErtntxNdzD6z2xfzNHQtV9Q6VZRhelSb//fz94XhlW+PCL/z6yaMf7z3dXdlW5xPtDRjAGMDaMDDXJ+RIi//PFM/d73YMyDOAme3/2sF632P33Die7/0fi9AYjU1iYCAefUkbI4ALQQEUQAEUcEuBE4+s+5HBmJgzaeLkWgn0YMAuBo7trcMEpprCKAYUs0GMQ2NtQqpqHj+MDt4TXStlYKytsaIqYAxgGKuUsbB/v9IKYGUYh33NfD79TDFwKuH9eb+F4hzidjMNUJeNa7X1s1879xTqJ7xuV76C9qQ9a2VgoDn6i265DdwtCqAACqCAVgoMNos/r3Uy4+8JiGAABqplgK2gSSSZlpR66aE1gRjAqk+pah5V1UOSHw3CZmCys7LqyLCvl8+nz1TKQKUVwHO9UcZmKoBDZ2CyM9hnkJf2s3uPaXGr69fL1s/BjhHV5gT4O9rJZgbejTds1coI4GJQAAVQAAXcUmAwLvbZPNFybwSSMKA/A2wFjQlsUnLq1YeD3UZOnQusqnsqNTP4fTTzkoFTiWhlFcAYQ/RZwxiopAJ4KNbEDg2Gta+X46EO76XOZh9tCz7GVzGQSTEb1+r2MwZbPwc/RpB7QXMYWMHAqaf3XvXDbjkN3C0KoAAKoIBWCgzGRHQwJn7AJL1ikg6swgvt0R4GhGRLObcTNCYl6E48GqwBvDg+xIU82cmW0Dok3V29BlWJPthc/jnAbF/OAgTT+kolFcCjrU0Y/BjAoTEw2yPkcDyc56fjj2AAmxSzunytbP0czhhBXgPdYWAFA3+slQnAxaAACqAACripwGBMPM8kvWKSxgCOoQn9IjgG2AoaA9iUJNUbh0IwgN8fj8dahVRVP6YZK1yvBW2WFFJVPZZrAmMAW9Dmjhl8U13lV7lPtHP+L+N6OH18uju4837zPQepGMiUeI3rdPvZgq2fg3uOzzdW8Br6w8BpBgbi0XvcdBq4axRAARRAAa0UGIyJfiZnAjQYgIGwGVDbdJGscTtZY0L7v30kEuoCoeEWIVX1D8l3NAiagbHWxvINYMfMw6Dbgs/zvv9XYgBPd3P+Lwx6z2AxTdMpIcfbw39WUQs2TYjVuEa3nydeeyS8xZphP0/z+eGPk7QBbZDDwL8NH4l8TCsDgItBARRAARRwU4Gh5siWnAkq1MQ210GwBANuM8BW0G4nbExI2L3brEcfnewKNvlcLDHNz9xoi5MdDeUbwEk3NIF9e9p5qqt8vud6MIBhPzj21Rb8I616xB4qBjIhVuMa3X2eYOtnPcYKcjq0AwwsMvAtN10G7hoFUAAFUEA7BeSdqz48GBMnmaAJ0mAABsJmQFVXPrPH3aQFCSu92/6ZPXVaLZKaaOdcYEyI4EwIVfXIFtDB6Q3bwWpdrgGstkJX1Zi0DxoEwcBMItwtn/M9F6hYiHhV73jV5fZh62fyGfnGLV6Di1AYaBZt2hkAXBAKoAAKoIC7Cgw1R/5r3glRk0qnvNfGGbVaGRG0EUG1VwyobbtcTlxw7/om1Z5/UC8DWPU5VRWkqoOCSETzGW7rrDgr2wDGIKNPGsZAuQbwSGsjbWtY2xo5dyWFnOwUcjCu3/PF8w9gABOr6xmrq+OEvHoe5X30G3toE9rENAYGjkYvc9dl4M5RAAVQAAW0U2AgHr3btMmU6yUAhAF7GWAraD0TK64nvF58SD8DWI2DQ3EhTyXcNieNTPCbZqIkhRxqbirLBKZCkv5oWp8s1wCe6GjAADZt7DLsetNJIcfa9I3xX9yHAex6PKzj/bP1s75jBjkb2sZRBt6Vq1adpV3ynwtCARRAARRwV4GBw9GfGoyJ7zk6MbNSlGpqGNCMAbaCxgDWMbn0yoE1+o4V8dPVQhnOXsWc8dHsGG1pLM8AhkM49JFDP8zlqc7yzgCe7sYA9kN/3vP0opHZXiGHW/Q2C1QspGOMxjW5/ezA1s96jxvkGWkfBxn4z+46DNw5CqAACqCAtgoMxsQ/ODgp65vM18yQgw2C9qAZYCtotxM5OibyTNhaTlUNqeohkulo4AcDqvqxnG2gYRD+/ODPz/cstwJ4tjfK+GqYue8nN16+93S3kEMGPP8dP4gBrGOM6vI1mRCfB/0czeeRu4GBkBloFrdom/znwlAABVAABdxVYDAmWgkSQg4SDHjohxEYCZIBtoLGBNYpofX6oxEjFg2p6qHZHgwoLxPzvNdpnqa7ouUZwBhEmISGMTBZDtuxJsn25swtXs8HiqmJDnOeL15/LEIF8G7ic13i8xf21skBcihGPJ8EmUPgs8yZUyxtq8xwIvJRd90F7hwFUAAFUEBbBdQB9ZZOvgTEPBTBgKEMsBU0CSZdEkzqOt46bIYBrOZydS6wqibyOlHN+7mt6VxPmQYwVej0PdMM4DK2gB5paaJdDWtX3eesuT4hR1rNStS/eRgDWKfY1PVrefuIWf2HfBvtBQNOMPAX2ib+uTAUQAEUQAEUGIyJtwlInAhIMEQNNURd7J9qWy/Xkxvcvx5G+LtHzTGAs2PFRDtbQutuAJh0fapSbai5qWQVMFtAu71QwCSms9c62VV6e/OJds7/zerF19r7+EzP6cVa2fnalK8qFiIu1SMudb0d1HFBpvQbrpMcGww4xEBc7MddQAEUQAEUQAFtFRhsFv+FwMShwAQTlIdGQxhgK2gSTeEnuczdYk5VF8331Z6sJuGPhoqBkZbG0gYwVYJUihrGwGQZFcBTXZz/yzzgwTyQFHKyy9znTbXd7nd212ECsw10qAyw9bO5Ywj5RtrOdgZGWtas1Tbpz4WhAAqgAAqgwFA8cqvtkzH3R8AJA+YxwFbQGMBhG8DP3b/a6AUjaktoVW1E8h4NamVAVUEOlqgC5pxUOKuVs6D/vhwDeLYXAzjodrHt89TuCGNt5sXhy5+dnnuAuDTsuNT1z2frZ/PHkeXjCv+nTS1h4AWcBRRAARRAARTQWoGBw9EfG4yJjCUTr9HJetqAABgGljKgtvlyPdnB/YeXcHxh7xrz55S4kJOdGFO2GQpB34+qgixpACcxyoJuFz6vtrGtHAM4DdcsIqqhsn2uV8jhlqWxramxvoqJiEnDi0ld1/74QbZ+NnXs4LrtmANox8LtONQceULrpD8XhwIogAIogAJKgaFY5Ekm9MITOtqgDQyExwBbQZNsCivp9dJ+Cwzg97d8V9VHnNFam1nkstk224MB7HL723rvpQxgtfW5rffOffk/H0x3m3neb6FnHhUThRWP8bluPwuw9XN4z+GFxgNep01g4AwDw/HItTgLKIACKIACKKC9AkOxyEEm8DMTOFqgBQzowwBbQbud9Akz6ffqw/YYwGpMG2kRUlUjkfhHg0oZUNs7UwEMN5Vyo/vvlzKAJ9oxgHVvQx2vTy22mujQJ4726plGxURhxmR8trvPA2z9bN944tW4xPvAhgYMTMrEqh/SPunPBaIACqAACqDA6NG6szWYOM3favP9Siu0JBCFAW8ZYCtod5M+YSb8Tjxq33ZzQzEhVVWSjklzrknvdhmJNxY1gakw17v96F8r26eUATzV1cBYWcP2xy4yN98n5GirtzGwLs8UJziWBQN8d/DPI2z9bOd4osu4xnXAV60MDMUif4ijgAIogAIogALGKDAYEy/XOvnx9wRQMAADfjHAVtDBJ13CNF91+Ow3D9lnAGf7p6pOUlWdLibouefq2n28rQEDmD5j1ZhRygCe6eFca8bL8sfLmR67tnzOxgvZryom0iE24xrceR544cE6OcACe4okYAAGNGZgqDnyWWOS/lwoCqAACqAACgw0R385+4DHV0w8GIAB3Rh45/GIfGaPO0kPElzht7XtW86pKiVVrUSCHw3KYUBVQxbbBpoKYDgqhyOdfqeoARxr4tx0FjyUNz8mhZzsEnIwbvezg4qJiE3Dj01daQP1zGd7HK7bszbXY/cYTvv60r7/Ntgq/iNuAgqgAAqgAAoYo8BAS/R6ggJfggJW7Gm8Yg/mzWJebQPmSuKD+ww/yTbQbFb/qGY8G4oLqaqWdDJluBY920NVQ2IA69k29Jnq2qWYATwSb2JcxAAuyYBa+DLebn+soOILFRMRm4Yfm7rSBscfsXcXnmridf7GjXGWdjarnQdi0b8zJuHPhaIACqAACqCAUkAdXD8YE9MEHWYFHbQX7eUaA2wFTfIpiOTXs/evdmfxTvx09VImWZ2Jgvnkhm7K6BiMNRU0gakAdoMDm/p7MQN4vL2xpPlnkxbcS+X9d65XyJEWt55DnmUnHkzwAM4BZutnt8YV13IZ3K89fA/EonHcBBRAARRAARQwToHBuPgaAYk9AQltSVvayMA7R9gKOggD1PXPUMknG/tPsXsaaxdseUrFW1HTazjeiAEMI0UZ0dJILLC4pZgBrH6m5b3AnxbtMp0QcsjBHY6ef7AOAzQAA9TlGFxt/ayO/SkWr/IzchwwAAM6MPBOvPES45L+XDAKoAAKoAAKDMbEfTpMpFwDAR0MwEAxBtgKmipgv5NjLz7kngGs+pyqZlJVTRgfaJCPgfE2DOB8uvCamf1lsqPwudYzCQxguM7P9WSnuzH6i/swgP2OP11/f7Z+dnd8Kfbsz8/gQkMG3sFBQAEUQAEUQAEjFRhpXfPxwZj4voaTK6tAHVxlDocE+sUYYCtoTGA/k2SvHHD37DFV1XQqkT/xjSHgti7FKibZAtptNkwcGyY7ii1oiLIQhmrjJQzM9wk52uZ2bP7ygXoqgKkA9o0Btn52e3wp9tzPz2BDNwYGmqO/YWTSn4tGARRAARRAAaXAYEz8T90mV66HgA8GYGA5A2wFjQHspwH82kF3DeBsX5voYEtoE00tP695JhFlC2hMsSWmmJ+8+f3eJzvzVwCrrc79/mze36wFEzO9Qg47dt5vNhbI/fraIxjAfsaeLr83Wz/zrJ871vA9POjOwEA8ejMOAgqgAAqgAAoYq8BQc6RL98mW6yMghAEYUAyobcJcTpZw7/6Z4K8/hgGs+piqdpovcH4mBoZZBoYX7aUq4Aabm/L+owLYPR68YCrM9zhZYAtotdV5mNfFZ2vUl5JCTnULORQn7lYxgYqNiD39iz1d1patnxljyO/AgEEMZIYTkY8am/TnwlEABVAABVBguKX+KoMmXraGZmtoGHCcgRf2riEZxXZ0njPw1uMRxpb3xxaV+J7p0SghTwVmqObUcBwDGIPOjvGgkAGstjqnje1o41raUS1qGW8nIZ+bF3jrcMTzeMtl05N7P22ms/Uz40zuOMP38KA9A83iz3EOUAAFUAAFUMBoBeSqVWcNxsRQ3km3mWAkry6OG3BoQr8IkwG2gqYSwY8E2rtHMYCX9+vJLgyBWswEW/52rC3/uanpJGem2tLGrtxHIQNYbXXuigbcZ/55ba5PyBG2fF6xEE7FRn7EXLynu7H84tbPR4i5l8fc/J/8CgxozEBc7DM66c/FowAKoAAKoIBSYCAe/V0CDo0DDgznFQkJeHWbV7aCdjdx5EvScM9qxpgC84yqhmKr3/yGgStGiqqOzLcNNAaw21yYyH8hA1htdW7i/XDN3rTbTIItn4s9V31nDzGnL7Gno7v5sPWz28/wxcYafgYbujIwHI804hygAAqgAAqggPEKDMSit+s62XJdBIIwAAP5GGAraBJyXiXknnugDgO4gAGs+p6qilLVUZgNbmpwKhHFAGYbciv6fz4DWG1xztjm5tim2n2yU8hBzvstGgOpGMmreIv3cTt2f2FvnRwoEm/me97jNfIAMAADITPwrPEJf24ABVAABVAABZQC44mP//hgTLwX8sRa9OGTayPwgwEYyGXgnaNCqm3ESCahQa0MHNuHAZzbt/J9r84FPpVw1yRw2SBS5j8VwLBvQx/IZwCrLc5tuDfuobI+qna2GGslrs433y9/7dheDOBa40z+fvXiM5s6xmc5X/yfcQgGYEBzBpK4BiiAAiiAAihgjQKDMfFXmk+8PDCwYhYGYGAJA2wFjfnrRVLt5YfWLOGKubBAIiIu5MnOypLsmBIW6JUUcijWtMIEZgtoC9rWscrmkx0rz7NWW5wzTrnF8myPkMOc91t23PPy/jUstnR0u2YvYuzse7D1c4HYmmf7sscins9gKBQGjorN1iT9uREUQAEUQAEUGGwWh0OZUAl6CXphAAZqYICtoDGBs8mlar++9jAGcCXz/1gb5wK7ZhiNta40zjg31S3TzAbm8xnAMwkMYBvattx7mO5WC1pIolcy56sYqdr4ir8jRlcMsPUzY04lYw6/Cy8aMTAh71z1YdwCFEABFEABFLBGgcFWcb5GEy2GGMkJGICBshhgK2iSS7UmGE88ypZ0lc7/qnpqthcDrFzTwfTfy7d1LgYw/JvG9UR7w4pKdjh2g2O15fNEB0n1Sud69fsnHq3HAKYCuGoG1HE9bP3M2FPN2MPfwE3oDDSL/8OahD83ggIogAIogAJZBQZj4njokyymV1mmF+1EQAwDZxhgK2hM4FpM4DcOYQBXM56oc4Gnut0wD0wzury+3unuKMaZY9sle82QDu830bHUAFZbm+twXVyDv/OIOsd8hC2fq36+fONwpGrzr5bYjL+1I7Y//gi77FQTY/M3Z57z0QItQmMgLj6TzZXzFQVQAAVQAAWsUWAwLn41tMkV47fqB3PajKAYBoRkK2g7EkVhJPzePoIBXMsYMtEuZBpzzGojSRkog81LzwGmctJf0wpT0Ht9l1cAj7U1Wt1vYUjImR4h1WKlWuY41//27ccxgMOITW34TLX1s+v9h/tn/IUBYxn43luH1v6kNcl+bgQFUAAFUAAFsgoMxSI7CVCMDVB4wGIRgdMMsBU0BnC1ybKBZsb9Wuf+kVYhlUmI4WCpBkkhhzCA4dvwhR7LK4AnOzn/19oxOynkZBdze61zu/p7FSNVG1/xd+7G5mz9zPjjxfjDe8BRaAw0i7/J5sn5igIogAIogAJWKfBS4uKPDMbEbGiTLAae0wYe3BHg18qA2maMZJO7yaZq2v7Z+1cz7no096oqq5mEpQao4caXFybPaEvjkipgKoBh3QuugnyP5RXApxJRTH0LxzZ13u9YGzF1rTF17t8/u4fYspoY0+W/OcHWzzxfePR8kTsW8T1zW1AMDMUjR61K9nMzKIACKIACKJCrwEAs+mdBTap8DgEcDMCA1wywFTRJukoSbs8/yNlknvbBuJCTnRhjQZpaQX3W8upJDGA4D4o9rz5non35IgYMYK+01eV95nqFHOa8X8+NJ7WVbyWxFb/rdix+jK2fPe+DnsbqGLO0DwyUZGA4Vn9Rbp6c71EABVAABVDAKgUGmqMPEGBiysEADJjKAFtBu510qjTp+OJDGMB+9HVVfaWqsHQxBbiO2ttiuitKBbCF1ZIu9Y2JjjMG8FCsSWYYo6waowTw9nYAACAASURBVKe7Oe/Xj/lcveeL+9hhp9L40tXfZ+tncgh+jUO8L2wFxcBALPqmVUl+bgYFUAAFUAAFlivwdltT/WBM/CCoyZXPIZCDARjwmgG2gsYELjfx9soBDGCv+1/2/VQV1mxv7cajSwaVzvc614MBrHP7cG2lx5rcCuCx1karzE+X2z+dEnKig1g6O/f68VXFSuXGVfye2zE4Wz8zFvkxBvGecBUkA0OxyK8tz5PzfxRAARRAARSwToHBmHgmyAmWzyKggwEY8JoBtoJ2OwFVbgLy+CP1JbeA8ppNl95vKCakqspy2Zyw5d6VyTLU3PRBFfB8H9vn2tK2rtxH7jbmJzsbGJcsqGhXW9GPthJD+x1XHD9YjwG8m7i6VGzN1s+MRX6PRbw/jAXBwHBzZJd1SX5uCAVQAAVQAAWWKzAYF31BTKx8BgEcDMCAXwyU3Ar6CyRySiVyXPj5G4cwgP3qg7nvO9HOltA2mGwjLWe20MUAZmGDaUxPtDd8sIDhVDcGsGntt/x6ZxJs+Zw7z/r5/RuPYQC7EBPXco9s/cwzvZ9jEO8NXwEyMP9WYu2PLs+R838UQAEUQAEUsE6BwZjYFOAES/VVjIAO3mDADwbUNmS1JDP4W/tN8rcPR5iDApqDRlqFVNVay5P4/N8cTXINNAxgc9qNPna6rXL5nWMsMncsTgo52UXc7EfcXOg933o8QjxNBXBRBthRhzGp0PjB67BhEgMDseifWZfg54ZQAAVQAAVQIJ8CMrHqQ4MxMWbSRM21EljCAAzkY4CtoO03cWsx6t89Sr/J12/8em0oLqSq2sKQMlODqa4z5wBjAJvZhi73vawBPBTj/F9TOUgnhRxrZ972a44u9L5qV51aYi3+1u5YnK2fGZMKjR28DhumMTDQHH0gX46c11AABVAABVDASgUGY+Krpk3WXC8BJgzAwHIGSm4FzYp+Z5N6aru65bzw/wDGkPjp6i1TDQiXr3u2BwPY5fY3/d4n2k9vYT7WigFsYlvO9Qo50hLAHBXQrhimxRsqZsLIdVSDIsfmsPUzY5JpYxnXC7NFGPjBwOGosDLBz02hAAqgAAqgQD4FhpojdxWZGEmakxyAARgwhgG1LRlJK0eTVkUM/ucerDOGYRvnY1XFpaq5TDQiXL3mdEp8cIYqFcCwa1o/yBrAJzs4/9e0tptW5/0Sd4caszz3QB2xdJGY0tXnDLZ+xkyz8RmFe3KW6+/ky43zGgqgAAqgAApYq8Ab8XN+YjAm/pXgx9ngJ9QkA9zBndcMHNtH4srV5FSh+2bLuvDHGVXNxVmcZhmJI/HTVZQYwGa1m2mGnx/XmzWAp7ujLDxJmcGvWiR0sjP8ucrrmNTE9yOOZiHl8niaOJqxycSxjGuG20IMDMSjPdYm+LkxFEABFEABFCikwFAs8reFJkdeJ3CCARgwiYF3jgjJ9nUkr3KTVy/vX8NCFw0qqtS5wNPdZpgRfphSpr3neFvDYhUwBjDMmsbuRNvpxQtzvRjAJrTdfJ+Qo63E2rrE2ipmyo2h+N6BmJqtn3lO0OA5QZcxkOuwfz4eiEU3FMqN8zoKoAAKoAAKWKvAUDwSI9CxP9ChjWljVxhgK2gHklUVbM/36sP1JHY0SuxMdAipthg2wZhw+RqnujCAXW5/k+9dVQAPNTfJDFvPaz/OzvQKqRYHuRKfmnCfrx3EAMb0PvMcwdbPjE8mjFtcI5xWwMCYTKz6kLXJfW4MBVAABVAABQop8E688ZIKJkwe0jVKpNNuBLswkJ+BF9kKmgqO903iE49iAOs2Toy2Camqvkw2mWy/9pme6GIFMFt3w6lprKvq9dGWRsYXnRfaJIWc7BJyEPNXu+dqFTNhgJ4xQF3WQm0Hrlv8yPXkf+5FF3SBgTIZiIvfK5QX53UUQAEUQAEUsF6BwZh4i6ChzKABA5iHQRjQngG1FfSze0jguJy4yt77m4ci2vPq4vyrqr5mejDXdDXX1Jmcg7Emzm7W2UTj2vKavOPtDfJkBwawzmPLeDvPXLrO+28ejmAAV7DLTDbWNPIrWz/zfEBOAwbcY+AO65P73CAKoAAKoAAKFFJgMCZ+U9cHUa6LJAkMwEA1DLAVNAa4Ssi9cwQDuJr+E9TfqCowtmrV0wgfjjdiAGOy5jVZdTUX1XWNtzfK6e4G465bZ029uja1o8BICzFtUPNrNZ+jYiYjzUxXTNuA7pOtnxmnqhk/+Bu40ZyBf30jfs5PFMqJ8zoKoAAKoAAKWK/AQHP0pzWfrFmd597qPNqcNq+ZAbaCxgQeaOZhXPf5faxNSFVx6pXJwPt4o+VYWwMGMAawcf1yvK1RzvVGjbtu28etUwnO+9V9Ls5eHwaw27Hzsb1s/ZztC3zlGQoGrGLgr6xP7HODKIACKIACKFBMgYHD0R8bjIk0AY5VAU7N5hk8wIPpDLAVtNtJrGfvJ4llSh9WVWGcN+uNceuVkTTZiQHslZa8T3BsT7Q1sqBEs4ULk53E06bMxeo6n7vf7djRZQP8mT3snGNSX+VamVtgoAIGmsXhYjlxfoYCKIACKIACTigwGBN/QQBRQQBBdSYGMwwYwQBbQbubyHvhQQxgk+Z1dS6wqhLDLNNDg5lEFFNeMyONvlG6b5zsYPtnXTiZ7xNytI1nK5PmYXWtz++tYxvogLZa1s1sZutnxivTxiuuF2bLZqBVnO9EYp+bRAEUQAEUQIFiCgzGxf6yJ0+MLyOML9qTgBgGTjPAVtBumsAvPrSGsdq0+Tou5MlOtoTWwcBR5g1V2aUNRx3aims4005TXRjAOvAw2yPkcJw43MQ4/MV9azCAHTSA2fqZ8crE8YprhtsyGXi9WC6cn6EACqAACqCAMwoMPR5pKHPyJKFuWkKd64VZxxlgK2g3DeBXD2AAmzqvj7UKqQxIHYwMl69hro+zVF1ufxPvXVWum3jdNl3zdDfn/Zo696rrfuVhDGDdKnP9vh62fsZEM3nM4trhtyQDcfErziT2uVEUQAEUQAEUKKXAYEwcKzl5Om4koQ8BJgyYyQBbQbtnArOVnZl9NTvGDrcIqarIbDJGTLsXTHj4g1kYKJeBdErI8f+fvTOPj6q6+3+sbW37tM/Tp7+SZe6AiNi6r5VWW7Wt1tan1dZaWttaq6iAskPmTliNgLjU1qW0isIEEBFDJgmJAoqQCeJSFVkDCYshmTuIWm2tS21dzu91BoZGTMjM5M6dc+55/8Ermsxy7/t87vd8z/dzz/dO1HveSc0/Jv8kXyZfNln/nDsxHA34UgPndlcL5+8QgAAEIAABYwgk7MDNJDy+THjYAcuNC2jAtsRmnmtmVFu/HaMC6N4Hse+1KRgw6Rowbr/uremwd5spn5dbTUkTEsbeM5Dt4l8azxrKD+vonaNLjMoVc727VvXPp/UzccsPcYtzQMcH0cCb20f0P8yYoj4nCgEIQAACEOiOwO5QyVkHmTgppPugkM74khybrAFaQZu1q6F1LAawX673VyfyXOB8mFpvYwBjJmKoooFuNPBGOS2f/TLXyvNoHRPAADbkGcC0fqYu4KfYxbmg5041ELaququD83cIQAACEICAUQTEwIJDHdv6a6cTJ+YnBjgaQAM+0ACt7cwxgdtDLIT9NJ/L3WVyl1k+jFBTv5PdlOjNVO1z3mlof7olXptsCSfMXOunuba91MIANsQA3j6yhLWtD9a2foo/nAvzqdsaSNiBK40q6nOyEIAABCAAgXQIOLb1oNuTLp9HIocG0IBKGqAVtP9NYLmrQSXNcSzuxMBE2BJ/L0/DmOhmxxrmDgzRABpAA9lrQHYHeHmCO3Gd+VE9jjKHUr11McfXszHaNKSIPBnzFw2gAb9r4IPWUN/idOrgvAYCEIAABCBgFIF4OHgZC3H1FuKMCWOCBtzTQFupJdZR3PJ1cW/DNRS2fBszwnt3nb1De2J2Q2P0owE04LkG/jHVErvL3MvJfDtXaWwsbLi6yNc5ounmMa2fiV/EXTRghAZC1rNGFfM5WQhAAAIQgEC6BOJjgl9ybOt9IxICjRfmjA9JOxromQZk27MuC0BX9Oyu+i4/15CWciqc/6YhxX6/o9n485O7z3hGbfY7+Nj9CDs0gAYy1cDfrrdEgvWT7+dfOuX4ex2wfQStn1lH92wdDT/46aCBhB24Pt06OK+DAAQgAAEIGEfAsa2ndJjQOUYSTzSABnqiAQpc/i1wbbkOA7gn14Yu75W70P5xAyZOpiYOr0czaAANZKIB+TzwVyeRc+oyN/b0OLdcW9z1TZLczKg1G1o/E8d6Gh94PxrSRQO7y0pOM66YzwlDAAIQgAAE0iXg2NZEXSZ1jpMEFA2ggWw1QCto/xrAzcPZ3ZDtdaHb++RzgeWutEzMDF4LLzSABtBAehp4c5olXhpPrqnb3NiT45U5lArdXDgGd/N0Wj8Tx3oSF3gv+tFMA7tFQcEh6dbAeR0EIAABCEDAOAJOyDpZs8nd9624GA8SbjSQGw3QCtrd4pIqxbodIzGATYsZr06kJTSGVnqGFpzghAbS08AbN1hC3mRj2nxi+vkeNDdmB7C25jitn4llpsc2zt+cayBuB2cbV8jnhCEAAQhAAAKZEJB3Sjm2FSdBMidBYqwZa5M1IJ8Xq4pxyXG4Y0i/ODpAwdrA5zTKXWpvTUvP2MAAghMaQANooAsNTLfEa1PIjU3NjV8cEyAv9pnRTetn4pmp8YzzNlP78dLgxZnUwHktBCAAAQhAwEgCCTtwL8mSmckS4864m6YBWkG7Y7qqZF63jcMANu06Tp2v3K0md61h7MAADaABNJC5Bt6ebomXJ5ALp+YUE3/KHEqlnI5j6VmeTutn4pmJcYxzNlr3/3rV/vIXjCzkc9IQgAAEIACBTAgkwoEfkzQZnTSxe87A3XMmX/OyLRoFpp4VmFTi54SI3yZfz07YEq9Nztz4wCyCGRpAAyZr4M2plthdxvxp9Pwp1z8hi5xYtx3AV3Sdw8uW3sZrmnU9GkADJmngsUxq37wWAhCAAAQgYCyBPaVF/+XY1j9ZLFAEQQNowBQN0Aq66+KRSuZud8ey7qoikxa4nOtBCjpyF5vczWayocO5M/5oAA2ko4G/Xc/zfk3Jd9M5T5lLdZdv8Xf182ZaP7OOT+d65zXoxE8aiIeCo4wt5HPiEIAABCAAgUwJxMPBR/2UCHAuJLZoAA0cTAO0gla/kJVOsXHjNRjAB9O5aX97qcwScldbOgYIr4ETGkADpmlA3iTz6iTyQ9Pmxu7Od+NgDOB0ck6VX0PrZ+Jad9c5f0cjftRAvCzYP9PaN6+HAAQgAAEIGEsgbgdH+jEh4JxIdNEAGuhKA7JNmsrFHI6te5O6aSgGcFf6NvX3CdsScnebacYO58uYowE0cDANvDXNEnt43i+dNDrppNE0tJh8WLc20Accr3y8jal5H+fNWh8NGKqBkLXV2AI+Jw4BCEAAAhDIhkBbWZ9+JE6GJk6dFALQAlowRQO0gu7eZFXZiG6+rpiCFzG8Uw3IXW5v34ghdDBDiL+hDzRghgbeuIGWz6bktdmcZ/MwDGCVc93ujo3Wz6zbs7nueQ+68YEGbsum9s17IAABCEAAAkYTcGyr2QdJQKeFYM6LBBcNoIHONNBeGhAvDKL1XXfFJVX/vo0dD8x5BzHA94y3hNz1hskFAzSABozUwHRLvDbFEk6YHLCzHJDf7dXF9hEYwKrmud0d17pBhaJtHNc31zIaQANGauA7RhfwOXkIQAACEIBANgQc2/o9iZORiRMGwkEMBK4J/18TtILWdxfwztEB4hfx66AaSIQtIXe/GWn+sAOacUcDxmpAPu/3lYn+z+HI03s+xjtHBWgBfUBL5e6MV1X+TuvnnuufGAJDNKCfBuLh4BvPDz7tU9nUvXkPBCAAAQhAwGgCTpn1XZIf/ZIfxowxQwM91wCtoPU0gXeNxQDm+k/j+g/v3QX3znSMYIxwNIAG/K+BN6da4qWyNGIjNxAd9AYiU+bX1rEYwKoYupkcB62fiXGmxCjOE613ooGHjC7ec/IQgAAEIACBbAnIO6gc2/p7J5Mri2MKJGgADfhaA7SC1tMAjpdiADNnp18UeXmiJeSuOAwwGKABNOBXDfyt3BIJclZf56xuz/vtIYsdwJrtAKb1c/q5n9vXC58HezSggAZC1uXZ1r15HwQgAAEIQMB4Ak7YqiKhUSChoXBD4QYNeK4B2UYtkzvveW1+TeMXBhV6rhHmR/3nR7krTu6O86v5w3kxtmjAXA28Nln/GM08m58xlIZi53ltry5+39Xr+X3nHN3lIh9fw7WSn2sF7nBHA3nXwAcvTygsMr54DwAIQAACEIBAtgQSduBKEpq8JzQs6DA/0UCeNEAraHcLVLksgq2/pojrJE/Xie55gtwd9/dyc00iDELGHg34SwNvTbPEngmsX3Sfm/J5/Buu1if/y2VuqcNn0/qZWJfPWMF3oz8FNPB0tvVu3gcBCEAAAhCAQEFBwZ7SokLHtj5QYFKnsE9hHw2gAc81QCtofQqA0qxnrqII0RMNvDqJltAYgf4yAhlP88bzjamW2M3zfskHerhm4AZIPfJfWj+T9/Yk7+W96McXGghZkyjeQwACEIAABCDQQwIJO/CcLxKDHi6EYUCCjAbM1ACtoPUogm25DgOYGNXzGCV3zb3Fc4FpiX2jecYhZrHmYz7dEq9fb4lEuOdxkLkEhluuLabVswbPAab1M9cq8RoNGK+BkHVyD0vevB0CEIAABCAAgbgdLDc+qcA85k56NGC0BtgJob4J3DKc558xV7tTBJIGyhs3aG4GYWBiYqMBYzTw9nRLvDLRnfjHPAJHqQGZU+nQ/tjkY6T1M9cq8RoNoAFrtygoOISqPQQgAAEIQAACPSTQXtb7dBILkks0gAZM1gCtoNU3gHeMxAA2+RrNxbm/NgUTmF2haAANqK2BN6dZ4iVaPht9k2Iu5j+ZU5lsrqp+7rR+Zl2ei+uez0RXGmpgVg/L3bwdAhCAAAQgAAFJQJQXfCJhB17SMBmgGMCuVTSABlzTgGyzpnpByOTjax2DAcw87X7hRu6qk7vrMMFggAbQgGoaeKOcls/Me+7Pe5KpzKlMzilVP/ftIwOurW+4hnJzDcEVrmgg9xpI2IGLqNpDAAIQgAAEIOASASdsVZDA5D6BgTGM0YDaGqAVtLo7gdtK1dYO17a+4yN318lddqqZPxwPY4IGzNXAa5Mt4fC8X0ywHN3o2TbOwgBW9BnAmwYXofsc6Z5cXd9cnbEzcuzefaW81+ddKnnzMRCAAAQgAAEIOLb1M5IqI5MqFpgsMNFABw0kW0FfVURRTLGi2AtXFgrHZjcE83Tu5mnTngv8Wrm5xhqmqp5j/5YhO/XfmmaJl8fnLtYxj8B2rwYCQuZWqu+ENe34aP3M9UmMRgNoYK8GEnZgGZV6CEAAAhCAAARcJPDaiC/9t2Nb/yLZIOFEA2jAdA3ItmumFZyUOd8rOi9Grr9KGsBcmzDIsQbClpC77t7xsdH0j2mW+P3FxeKpEQF2PN+opxFqqoE95OxisSXkb93+Y6oldvO8X+Z7j/KdddzwqFy+Lx9HQ66X41zPo+uLcWQc0UDPNJCwA8NdLHnzURCAAAQgAAEISAKOba0iSelZkgI/+KEBf2iAVtCdG7H5Mopph+eP60qX+PjyBH8+F3hTaUCcf2KRKCwsFKuH+dtIM9Uk9fN5f/PoItEvWCgqfuVP7b5+Pc/71WWO8MtxbhxMx5t85bWdfS+5LrmuX2IL54GW3dBAe6j3kVTqIQABCEAAAhBwmYBjW+PcmKj5DBI+NIAGdNcAraDVMoCbri1mRwQ7FjzVgNyFJ3fj+cFQe3u6Jeb8skT0tQqT5q80gP1qovlhvDiHj193r99giSM66HfggGLROt4fRrC8Pl+ZSN6oe96o4/E3DcUA7syIzcfvXhhUJNpKedSJjtcRx8z8hQbc10DCDmx2udzNx0EAAhCAAAQgIAnsHh84muTF/eQFpjBFA3pqgFbQ6pjAzcNoiUcc8T6OyOcC/+36j5tROhl0uyYExKVfL95v/ErzV/47/agi4UzS+9x0GgeOtWdam/iDj2u4f+8isfDyEq1v0nhzmiVe4nm/nt7cw1z6n7l067AS5Vog58N8VeE7af38H11yjcICDaCBeCh4C1V6CEAAAhCAAARyRMCxre0kXCRcaAANoIG9GqAVtBom8LYRGMBck/mLy69O0rMl9ILLSoQ0yVKm74E/T+hXJGZcWJzcHSx3CPMPBqpp4E8Di8UlX+taw1LT8tnAe6botxv4jXJaPjOv5W9ek+xlbqWC+Wn6MdD6Ob/XAXEI/mhAPQ20h3ufnaOSNx8LAQhAAAIQgEAiHLiLBEi9BIgxYUzQQH40QCtoNQzgnaMxgIkB+YkBKe5yl57crafDTk5phg0+6+M7Jg80gPn//7TEhoXeLI47okg8fLUmu4GnW+K1KfmNZ6m4xk+zx2Hn6AAG8JX5zXNp/Wz2NUgMZvzRQKcaeF2UF3yS6jwEIAABCEAAAjki0B7u/X2SkE6TENqT8fxJNGCoBmRbNtN3J+T7/HeN5blozM35n5tlS2i5a09lE3jZNSVC7uzF0NTb0GT8Mh+/oqJCMeq7xeKvCl+j8nm/L/O8X/JpRfJpmVt1nt/16uL3+TVLOz9WvY+J1s/5z+3IrxkDNJAnDYS6/N4Hc1Tu5mMhAAEIQAACEJAEto/of5hjW2+SBHWZjFC0UKRogUbRqJcaoBV0fgts8RAGsJd657sOEl/Dlnhtsnom8CvXW0nzC+Mwc+MQZv5i9rWjikTjMPVaQr851RK7yw4SW8ivWWN5rAGZW/nRVNXlnDYPKULzHmue/JY5CA2or4F4OHgZ1XkIQAACEIAABHJMwLGtJSRG6idGjBFjhAa80wCtoPNnAK8bVEiBjAKZchp4eYI6zwV+YnhADPgKu34xcv1l5PZkPAPFheL6/ysRbyjStv1v1/O8X3JW73LWTFjLHEsXw9RPx0nrZzWvh0yuHV7LGKKBnGjg/d3jAl/Occmbj4cABCAAAQhAIB6yBpPM5CSZUa6AzTgzzmggfQ3QCjo/RcIN17BDgus0/evUS1ZyN98/puZvN/DfplpJk6ukGOOvJ2Yh7/Wvfs46pkg8Pzp/u4HfvtESr05SM355GSv5LnU1sOHqIgzgPDwHePuoEuoC3NyIBtAAGvi4BtZQkYcABCAAAQhAwAMC7XbvgGNbH7JYV3exztgwNmggPxrYPKSYQpnHhTJa5OVH68SY9LgnbEvI3X1ePxd43diAOOc4dv1i3vrXvHVrbHuXFIrfX1ws3vR4N/Bb0yyxZ3x6cYR4C6d8aYC81vubG8lrud7zdb3zvWhPAw2M96DkzVdAAAIQgAAEICAJOLa1XoPkgDvmPn7HHExgggZyqAFaQXtfKNt6XTGazqGmmevdKQa9OtGbltD/mGYlzSyLXb/CLYOQzzHDRL7gpCKxJeTNbuA3ymn5zNziztySa44yx/JTa2XVz4XWz3pcF7m+7vh8dIAGOtdAvDR4IhV5CEAAAhCAAAQ8IuCErRtJSjpPSuACFzRgtgZoBe2tCdwyHAOYmKNHzHlpvCXkrr9c7QZutgPihyez6xfD1gzDNhfj3C9YKOb8skS8PT1H1+l0S7w2RY94xbzCOEkNyBxLddPUT8dH62euO2IvGkADXWqgXRQUHOJRyZuvgQAEIAABCEAgEQ6cSWLSZWLCbjR2o6EBwzWweSjPTPOqILdjVIDrzfDrTad8JBG2hNz956YJLM0qaVr1tTD+cmEK8pnm6WrggGLROt7d3cDyOn15ImsHneI1x2qJHSNLMIA9erSJbLeN5oiRaAANoIEuNBCy/kwlHgIQgAAEIAABDwmIgQWHOrb1KslJF8kJxXgWsGjAaA3QCtq7XcAvjsEAZi7WbC4O790F6IYJvGtCQFz69WLaHReaZ1JiTOd2zPv3LhILLy9x5WaNN6da4qUyzeIUeazReWwqr5A5llc39Jn8PbR+Jj6mrjl+ogU00IUGwtYPPSx581UQgAAEIAABCEgCCTuwgOSki+SEoglFEzRgvAZkGzeTi1lenXtbKQYwc7Gec7HcDdiTVrOLrygRR/XOrQmGyQhf0zVw5TeLxUtTst+1/zf5vF9yQuNzQl3n6bZxFrmsBzuA5eNjdNUIx61nDsq4MW6aaeCd3eWBz1GJhwAEIAABCEDAYwKJUOCXmiUNLKwoQKEBNOCpBppoBZ3TwuELVxaKOJr2VNPM++4WjOSuwDczfC7wnikBMfgsdv2abkxy/t6Z88cdUSQevjqz3cDy5o6/TnY3XhB/4em1BmSOJXMtr27qM/F7aP3Mde31dc33oTkNNfCwx+Vuvg4CEIAABCAAAUmgrazP/zq29Z6GyQPFcgwTNIAGPNEAraBzWzRcf1WhJ+PIPEehJJcakM8F/nuazwVedk2JOKFfES2fafmMBjzWQFFRoRj13WLx1zSu1bemWWLPeOJmLuMmn+2dvtZfndtczkTTN3XOsvWzXCugZ+/0DGtYowENNRC2rqUKDwEIQAACEIBAngg4tvUECZSGCRTmHwttNOCZBmRbt1Shh5/uFhE3Di72bByZ65jrcq2BVydZ4u0bO281+8r1VtJ8Ytend7s+YQ3rzjTwtaOKROOwQJfPBn5jqiXkTR25jhd8Poy90sCmwUXksTnaBb2D1s/EStbkaAANdKuB3eNKDs9TyZuvhQAEIAABCEAgHg6WebX45HsodKABNKCrBmgF7a7xmzLSm67FANb1muC4O4/nctfgW9M/agLLls/fPBozrjMzjt+hi3xoIFBcKGZcWPxRE3i6JV6bYgkH87fbQi7xv/P4ryqXpqHFGMA5MIBp/azXdaDq9clxoSMDNLCRyjsEIAABCEAAAnkkEA8HTzAg4aCQwV2JaAAN9EgDtILOy9nc2gAAIABJREFUjQHcPAwDmDnYf4UfuXvwjal99ptL03/E837zYfLxnZjLB9NASXGheGPq3p3Ab93YW7wy0X+xiPmFMZUaaB5GJ5vUjYdu/aT1M9cW8RUNoIG0NTAjjyVvvhoCEIAABCAAAUnAsa1dJC9pJy89MpHgDGc0oK8GaAXtvgm8fUQJMZWbM3ylgfZJx4idkRGiZeVDYs/cy5Mm8MABGMAHM+L4G0ZtvjTQIm/WuP10sWP5HLGt+jbRdst3fRWPyDn1zTndHDvyV/fzV1o/c225eY3yWejJzxpIhALfpPIOAQhAAAIQgECeCTi2dbefEw7OjYQaDaABtzRAK2h3i2gvjsYAdkubfE5+41x88tFiZ2S4aF4VFVsb6/f/21U9XZxxdInIl8HF92KuooGuNbB0/HdES0PV/utVXrvbau8Qbb87HyOYm5N8o4Gdo9kB7NbOX/k5tH7Ob75Fvgt/NKCVBl4T5QWfzHPJm6+HAAQgAAEIQMAJWT8iidIqifJNQQLdoTvdNCBbQa8b5K4J6mZRSrfPahsbIJ5RZNdaA+3XnyB2zBsrtq6q/oiJ1NEE7tunNwZwYdcmHAYlbPKlgdtvKOvyum2pv1u03nmJcMJBrWOUbnkWx+v+2mDXuADPAHbpGcC0fnZfn1zzMEUD/tVAwg4soOIOAQhAAAIQgIACBOJjgp91bOttEi//Jl6MLWOLBtzTgGz7ppvRqurxtofcGxc0DksvNRAvP1nsXFAmtjbUdmkgSRP42UcWYf5i/qIBRTVQNmLwQa9feQ231N8jdt1+EUYwNytpeyOAzLVUzQN1Oy5aP5Nreplr8l3oTXcNJEKBXypQ8uYQIAABCEAAAhCQBBzbWqp7csHxkyCjATTglQZk+zfdilaqHa/cSe3VePE9xAa3NBAvP0nsuN8WzbGDG7+pHcAPz78b809R8y9fu075XnV2PF956SXdGsCpa7l5WYVonXmpiIf7MHdhBmungReuKiJv7eEu4M1DirQbd7dyHz6HPBoNoIEsNPC+M976f1TcIQABCEAAAhBQhEAiHBiWxYTOIogCCBpAA0ZqgFbQPW+DveEaCmnMu/oUU9qnDRA7HrxebI3VpW0YSeMo8ofpGMAYwGhAUQ384NxzMrqe5TXdvCwiWmf+XDhlGMHMYfrMYTLnUu1GQJ2Oh9bP+miduMRYoQE1NJCwA42KlLs5DAhAAAIQgAAEJIHd4UAfEiU1EiXGgXFAA3pogFbQPTOB2Umhh85Nj0ft0weIHQsnia2xJRkbRdIsumVSKeafouYfO3HV2Ymbr7E45YTjs7qu5bXdsnyeaL37N8IZ39fIG+FMnxt0O//NQzGAe2I40/qZnFW3a57jRbP51kAiHLCptkMAAhCAAAQgoBiBeDjYlO8kge8nUUUDaEAnDdAKOnsTeOt1xRTN6SCgrAbapn9DbF9UnvGOX2kMdfw3buiVGMAYwGhAUQ0EAiWiqSGzXf0dr2/5382PLRQvzh4i4hP7KxvPdMqrONbcrANkztUTA9Tk93LDYm40ybUOVzTgbw20hfscp1jJm8OBAAQgAAEIQCBuB28lCfN3Esb4Mr5owF0N0Ao6ewO4ZUQJxXIMYOU00Hbz2WJ75YyPmLgHGj6Z/P9vBv4E809R8y9fu075XrV2Hj9Rc78r13vzigcxgpnTlJvTUnl/y/ASDOAsngFM62d3100pPfITrmjA9xpoo8IOAQhAAAIQgICCBOKh4DkkYr5PxJQtTKA9tKerBmgFnZ0JvGNUgHhEsVwZDbTddI6rxm/KJP7+d87GAMYARgMKa2Dxvbe7YgCnrvnmxyvFzshwEZ/0FWXim675Fcft3tpgx8gABnAWBjCtn93TINczLNGAORqIh4IzFSx5c0gQgAAEIAABCIjygk86tvU3EjNzEjPGmrFGA+5ogFbQmZvArWMxgLn+3Ln+esJRGr/bqm9z1QBKGUHy5yknHo/5p7D5x25ctXbj5mM8Zs6YnJPrv3lVldgxb6yITz4WI5ibnfKugdYxGMCZtrGm9XP+c7Se5He8l/FDA/nTQDwcvIAKOwQgAAEIQAACihJwbOshEqX8JUqwhz0a0FMDtILO3ACWzNC7nnrXftzCQbHrtgtEy5I/5sT4SRnAW2J1onfQwgDGAEYDCmtg0uhrcxoH9hvBU45jzsMIzpsGZM6VqQFq8utp/Ux+qn2uS7zNW7xFO9Y78THBzypa8uawIAABCEAAAhBwQtblJCwseNAAGkADmWuAVtAZmMCDClmUU5jxXgP7jN9tdTNzavikDOCn6xdi/Cls/OVjtynfqd6O42su+7kn8WBrQ63YsXCSiJef7H3sY76BuW2JtYMyyNOyaJfsJ8N4x6gSNEPcQANoAA1kp4ElVNYhAAEIQAACEFCYwEvji3s5tvUB5k/m5g/MYIYG0MDmocXssEijaLj+6iIW1NktqOGWDTdp/N5+kWh55F5vjJ7G+uT3LKmYiQGMAYwGFNfARd8/19O4kDKC2284lXieTTznPVnrZv1VGMDpmNSbh5KjsqZlTYsG0EC2GoiHrMEKl7w5NAhAAAIQgAAEJAEnbD2T7WTP+0gU0QAaMFkDtIJOr7i4aQjFNZOvE8/OvayPaL3zEtHyyGxvDZ59BvB9t03D/FPc/GNHrno7cr0ek9NPOSkv8WFrrE5sX1Qu2qd+LWtDz7NYiunqizHaOJibFLszgGn9zDqWuIoG0ECPNPChY1tBKusQgAAEIAABCChOwLGtySQ9PUp6fFEkQANoAA1kpwHZNq67ApPpf99ybTFxkoJ67jSQMn6XRfJj7OwzgG8sG40BjAGMBhTRQK9evTodi969g3mNE0kjuHKGaLvxzNzFROYb2NqWaKJLTbf5uXycC+uf7NY/cIMbGkADjm2tU7zczeFBAAIQgAAEICAJJEIlp5K8kbyhATSABrLXAK2gD74TuGUYBjDXV/bXV5fsyg4XrTMvFc2Pzs+vobPPAB51zW87NZy83uHI97HLFQ0cXAPyed2pZ3fn7afcEVw5Q7TP+CYGFIZ1TjTQPIwdwAe7AZPWzznIy7iWc3Itd5kHwxve+dZA2JpGVR0CEIAABCAAAQ0IiIKCQ5yw5ZBYsghCA2gADWSngfZSS6zjWWtd7rTYPoIdFlxb2V1bnXGLj+8nWu/+jWh+dEH+TZx95q80kX558Y8wgBXZ/YkBenAD1HQ+NZG7lIod22ruEG23fJdCdr4L2T77/u0j6VDTlQEsc3b5GJfOcgx+516+BktYogHfa+AbGpS8OUQIQAACEIAABCSBuB2cTXLm++SMRa7PCjtcs2pds7SC7noX8M4xFNm4Xnt+ve43fh97QCnzJrWD8Lyzv4kBjAGMBjTQwD23lCsZQ6QRvOu2C8jXyddd0cCLozGAuzKAaf3c85yMvBaGaMB4DbwiBhYcSkUdAhCAAAQgAAFNCMRLgxeTwBmfwLlSbEBH6MhkDdAKunMTeNdYDGCTr4uennt8wpHixVmDRPOKRUqaNikD+IRjj8H808D8M333K+dfKG4IjVA6luw3gsNBcnPM4Kw1sGuc1WVnlq6MURN+T+tn1qo9zUt5PxpCA5ZwQtY8TcrdHCYEIAABCEAAApLAK+W9Pu/Y1rskMiSzaAANoIHsNUAr6M4N4Hgoe6bo0Vx28UlfFS/OHiKaH69U2qyRBnBTQ50IBEowgDGA0YAGGrjuil8pH1NkXNlW/2ex6/aLhIMRnLUJanIOIXMvEwzdTM6R1s/m5pQmxwLOHd3nRANh6+dU0yEAAQhAAAIQ0IyAE7ZW5CQx4M5tihZoAA0YpAHZVi6TYpTfX7tuUCH6N0j/buQR8UlHa2P8pnb/PlFzP8afBsYfu195NrDUwMX/d74WBnAqvrQ8fI9ovfMS4YR7M58yn2akAWl4+j3PzOT8doyiI40beRqfgaGIBozXwHuto/t+UbOSN4cLAQhAAAIQgIBjW6NJ5IxP5DIqKqAX9IIGOtfA5iHFFNyu3Ft03HhNEXGFgnVaGmifdIzYGRkumldFtTJnpElTPftODGAMYDSgiQbOHHCadjFGxpnmZRHROvNSEQ/3SSumkqN1nqOZxEXmYJkYpH5+7eYh5KMmaZ9zJf6hgRxqIGQ1UEGHAAQgAAEIQEBDAu2h3keSJOUwScIAoFiFBozRAK2g/7PjRJrhzC3MLQfTQPv1J4od88aKrQ3VWpoy0pi5++brMf80Mf/YBcwu4H59+2oba2S8aVlWIVrv/o1wyg5nfiW3PqgGmoZiAEtTm9bP5KEHy0P5G/pAA5lpIBEOlGpY8uaQIQABCEAAAhCQBBzb2kbyk1nyAy94oQE00JkGaAW91wTeeh0GcGf64HeWaC8/aZ/xW6O1GSMNmamhkRjAGMBoQCMNPLfsIe3jTsvyeXuN4PF9D2oCMt+Ym6duvY7HkkgDmNbP5l4DxD/GHg24r4Hd4wNHU0GHAAQgAAEIQEBTAo5t3U6C5H6CBFOYogEzNUAr6ELRMqKEwjQ7lD6igXj5yWLH/bZojtVqb8BI81f+Gzbo15h/Gpl/7AJmF/DD8+/2TfxpfmyheHHWIBEff8RHYi25p5m5Z8dxbxmOAUzrZ66DjtcE/40e0ECPNbBT03I3hw0BCEAAAhCAgCSQKA2cR0LU44SI4gtmBxpAA0kN0Aq6UOwchQHMvLp3Xm2fdrrYsXCS2Bpb4hvjJWUA//zH/4cBjAGMBjTSwJw/TPddHGpesVC8OHuIcCb0Jw8lD01qYMcosw1gWj9T1yAHRwNowF0NJOzAnVTPIQABCEAAAhDQmEBT+bGfdmzrHyRJ7iZJ8IQnGjBXA7LtnGw/Z+q/1rEBCtGGF6Lbp39dbF9ULrbG6nxnuKQM4HO++Q3MP43MP3YAswN4eniUb+NR8+OLkkZwfOJRzL+Gz78yBzM1/0y2fh5JDsoa1Nw1KGPP2OdCA7tDgfM1Lnlz6BCAAAQgAAEISAKJcKA6F4kCn0kCigbQgKkaMLkVdHspxTdTdd9201lie+UMXxu/KQP42KO/ggGMAYwGNNLAiKt+41sDOBWXmlcuTj5nPT75GIxgQ41gmYOZagDT+pl1p6n5N+eN9nOogbe2j+h/GJVzCEAAAhCAAAQ0J5CwA1flMGGgAGFoAQJNsRAxWQMmt4I2edxNPfe2m87Za/zuez5uyozw689NK2tESXEx5p9G5h87gNkBLNu2+zUmHXhezauq9hrBU45lHWbgOuyFQeZ1oZGtn9tKWXuZmody3mgfDeRGA3KzkOblbg4fAhCAAAQgAAFJYNeEw0sc2/qQpCk3SRNc4YoGzNTAjpHm7cJYf3URxWaDis1J4zf6O2NMlZTJEovOxfzF/EUDmmng7DMGGBertjbUiB332yI+5XjmZoPmZpmLmbYLWD5+hfWWmestxp1xRwO504DcLETVHAIQgAAEIAABnxBwbGstiVPuEifYwhYNmKmBzUOLjSrCbRqCAWzCtb7r1vPEtiV3mWem7NvhXDnrdsw/zcw/dgCzA/gr/Y80NmZtbagVOxZOEu03nIJJZoARLHMxkwzgzUPJPU3IPTlHM9fSjHtex/3D+Jig5ZOSN6cBAQhAAAIQgIBjW1NJrvKaXFGQMaAgwzVm3jXWHrKEbEtnSiFuy7XFxDK/xrJwUOy67QLRUjfTXBNlnwH8pxmTMYAxgNGAhhpY91iV2fFrvxF8GnO1X+dq2xJbDLr5cN0gWj+zvjRvfcmYM+ZeaCAesp6nUg4BCEAAAhCAgI8IxEuDX/ciieA7SFbRABowTQMmtYJuGY4B7Dt97zN+t9X9yWzjpMPzjaeMHYb5p6H5xy5gdgEvX3gvcUzGslhd8rntbTeegRHsQyO4ZZg53Wdo/cy60nd5tw9jEmOk53UaDwdv8FHJm1OBAAQgAAEIQECUF3zCsa09JGd6JmeMG+OGBtTWgCmtoLePLKGY7JfCjTR+b79ItCy9D8Okg/krnwN87W9/hQGMAYwGNNTA3DtnEM86xrN9RnD7jWcyd/tl7rYtsX1kwIjOM7R+Vnvtw9qU8UEDemsgbgcHUCmHAAQgAAEIQMBnBJyQNY8kTe8kjfFj/NCAmhowpRX0i2MCFJF1LyKX9RGtd14iWpbOxijpaJR0+O+f/uj7mH8amn/sAGYH8C2TSolrHWKZvKEl9W979FbRNuNbzOG6z+G2JXaO9r8BTOtnNdc7rEMZFzSgmQZCXR7vy3KTkM9K3pwOBCAAAQhAAAJO2Po5CVuXCRAFER8URNA3+s6nBmSbOr8/C7htLAZwPjXWo+/eZ/w2L4vsNwRSxgA//2OSSBZnnTEAAxgDGA1oqIGxQ68kvnUwfTuL7dtq7hC7bj2PdY/G655d4/yfb+4YRceZHuV8Guub82Y9jwY80UCECjkEIAABCEAAAj4ksDPc738c2/o3CZUnCRWFFRaeaMBADfi9FXS867uI0buqei87XLTOvFQ0P3o/xkg3xkjKLPnqUUdi/mlo/rEDmB3Av/rphcS5NONc0gi+7QLmblXn7oMcl8zF/HzDIa2fqVVQr0IDaCC3GoiHgpf4sOTNKUEAAhCAAAQgIAk4thUjmcptMgVf+KIBczXg51bQ668qpFB8kIKsatd9fHw/0Xr3b0TzYwswRNI0RKQBvHFljSgqKsIAxgBGAxpq4NyzzyTeZRDvZMzbVv/n5PPgnXCQOV6jOX7dVYW+NIFp/WzuGkq1PJrjQYs+1sC/5eYgKuQQgAAEIAABCPiUQMIOhHycyFC40KhwgQ5ZVPlVA7JtnR93ZmwYXESM1SDGxiccmTR+W1Y8gBGSoREizZDHK+dg/Glo/LH7l92/UgPHHf1V4l4WcU/Gvpb6e5LPh3fCvZnrNZjrN1xT7Mtck9bPrA/9uj7kvNC2Qhp43Kflbk4LAhCAAAQgAAFJ4KVxxccqlHhQYNCgwIBeWKyggcw10DTUf4W5zUOKidkKx+z4xP7ixVmDRPPjD2GAZGmASBPkwbtvwwDGAEYDmmqguLhIbFpZSwzsQQxsefjepBEcD/dhzld4zvfjI0do/Zz5eoM1GszQABrIWAMhawzVcQhAAAIQgAAEfE7Asa0dGScJCi+AOReSXjSABlTTgB9bQW+9DgNYNZ3J44lP+qp4cfYQsXVlJaZHD0wPaf7Kf3dOm4D5p6n5xy5gdgFLDchd/KnrmZ9741o2HFqWVSSfH++UYQSrOPfLnMxP3WZo/cxaTsXrjGNCl37UQDwUPMrnJW9ODwIQgAAEIACBeCg404+JDOdEgo4G0IBKGvBbK+htI0rYDaTQzVDxyUeLnZHhonlVFLPDBeM3ZZBMHD0UAxgDGA1orIEH/vQ7YqKLMbFl+dzkYwWcsr7kAArlADIn85MBTOtn1nAqreE4FvToYw3soCIOAQhAAAIQgIABBOLh4AU+TmgoTihUnEBnLJ5M14CfWkHvHIUBrIKe268/QeyYN1ZsXVWNyeGiyZEygK+57OeYfxqbf+wCZhfw78vDxMYcxEb5XHn5mIH4+CNYaymw1to52j8GMK2fWS+qkF9zDOjQCA2ErT8YUPLmFCEAAQhAAAIQaC3v+xnHtt42IsFRYIEOZxYTaMBcDchW0OuvKvTFLo3WMQGKvnmcU9qvP3Gv8duA8Zsya3Px88cXfA8DGAMYDWisAXvY1RjAOTCAU/G2ecXC5GMHnAn9yQnymBPsGusPA5jWz+aukVgfM/ZoIC8aOJeKOAQgAAEIQAAChhBwbKuehCsvCRfFkjwWS9A8ms+HBnaOCvjCAG4vRT/50E+8/CSx435bNMdqMTVyaGqkzI0zTj8V809j848dwOwA/u0vLiZWehArmx9flDSC4xOPYm2Th7WNzMn80AKa1s/k1vnIrflOdGeiBuLh4BtN5cd+2pCSN6cJAQhAAAIQgIATtq41MenhnEn20QAayIcGdG8F/cKgQgq8Hhd426d9TexYOAnj1wMjI2X+yp9H9jsCAxgDGA1orIHzv30WBrCHcbN55eLk8+jjk75CnuBxniBzM51NYJkb5yMn5ztZC6IBNGCkBsJWFZVwCEAAAhCAAAQMIpAYG+htZNLj8cIcxiwu0AAakBrQvRX0hquLKNJ5NH+0TxuQNH63xpZgYnhoYkjzd91jVRh/Ght/7P5l96/UwEnHH0vs9Dh2yvjZvKoq+ZiC+ORjyRc8yhfWX1OkrQEsWz/TWYY1EutkNIAGvNNAwg5caVDJm1OFAAQgAAEIQEAScGxrEwmXdwkXrGGNBszWgM6toDcPwQDO9fXbNv0bYvuicrE1Vod5kQfzQhoYyxfeiwGMAYwGNNdAIBAQmxu4gUbGNHf+ZTgnNdQkH1sQn3I8RnCOjeBNg/U1gHeOKkEfOdZHrvNWPt/sdS3jr934f9Aa6ltMJRwCEIAABCAAAcMIJOzAzSRu2iVuLJZZLKMBjTWgayvoLdfSpi9X82XbzWeL7ZUzMH5dMyuyNz3u/+MtmH+am3/sAmYXsNRAY3SeS+Zn9vHEHfNV4+9vqE12s2gvP5m8NUd565Zr9TSAm4ZyU2Gucko+l9oOGkADXWjgL4aVuzldCEAAAhCAAAQkgd2hkrO6SA5YqOdooQ5vEnI0YLYGdG0F3TycnRpuX7ttN52z1/hVwPg03qjYNwa3XW9jAGMAowEfaOChWX/AAFZlbkkZwVNPZX3p8vqyeViJdi2gaf1s9jrI7Vyaz0NPaCA9DSRCgSlUwSEAAQhAAAIQMJCAGFhwqGNbfyVpSi9pghOc0AAacEMDOraC3k6rPtcK19L43VZ9G+aEKuZEh+MID78G888H5h+7gNkFfNf0icTYDrFNiZt8YnXJxxy0T/2aa/OpGzmZzp+xfaR+BjCtn1lL6XzNcezoV1cN7C4rOc3AkjenDAEIQAACEICAJODY1oO6JjEcNwk4GkADumpAt1bQL44JULDt4c6dXbeeJ7bV3oUpoZop0eF4rrj0pxjAGMBowAcamDBqKLG2Q2xTwgBOHY80gitniPYbzyCv6GFe8eLogFY7gGn9zLpN13Ubx412NdfAblFQcAgVcAhAAAIQgAAEDCUQDwcv0zyZoXjQw+IB48+CBg14rwHdWkG3jcMAzuo6CQfFrtsuEC11MzEjUsV/hX/+8HvfwfzzgfnHDmB2AA/65c+IuQrH2pQhvT16q2i76Vus5bJcy8ncbO2VhVr8o/Wz92uNrPLWLLXIdzG+aEBdDSTswH2Glrs5bQhAAAIQgAAEJIH4mOCXHNt6n4RN3YSNsWFs0IA/NaBTK2g0mKEG9xm/2+r/jAmhgQmRMiNOP+UkDGAMYDTgAw3ImzlS1zU/65Vnsa3mDtF2y3cxgrMw33QxgGn9nGEemYUWyNVhjAbQQGca2G0HfkL1GwIQgAAEIAABwwk4tvVUZ4kCvyOBRANoAA3kVgOyHZ7qxbt1VxVRlE23EFfWR7TeeYloeWS28gV3TJGPmyJ9D++D+ecD848dwOwA/topJxKDNbr5JjUfSSNYds0g90w/95Q5mup5ZNO15JFoOn1NwwpWaMBVDbz7qv3lLxhe8ub0IQABCEAAAhBwbGsiSZarSRaFi3TNEl6HVgzXQHupJdZfpXb7vo3XULjrdo5MGb9L52A6aGg6SPPhuWUPYf5i/qIBn2igd9ASW2J1xGNN4/G22n1GcDhIntxNnixzNJUN4HVXFQqZ63abR3VznrwfhmgADaCBzDUQDwcfpeINAQhAAAIQgAAECpyQdTLJVObJFMxghgbQgBsa2Dla7We4NQ0tpnDXVWFSGr8zLxUty+djNGhqNKR2ni1dcE+n5l+vXr06/T27TNlligbU1sBTdQ8QlzWPyy31dye7ajgYwV3mYTJHU9kA3jm6pMtjdyOH5jNYi6EBNIAGutZA3A6OpOQNAQhAAAIQgAAECkRBwSGObcVJnLpOnGADGzSABnKpAdkeT9UCXvMwDOADxz4+vp9ovfs3ovnR+zEYNDcYUgZwxR0zMHp9svsTY1ZtY9ar8amecxfx2SfxueXhWfuM4N6YiQfckNZ8nboGsHzMyYH5E//PegoNoAE04J0G4mXB/pS8IQABCEAAAhCAQJJAwg7cSyLmXSIGa1ijATTQUQMqt4LeNgIDODVW+43fxxZgLPjEWEgZwLdOLsUAxgBGAz7SwJ9umkKc9lmcbl5Wkey6EQ/3wVjcZwRvG1Gi5A2EtH5mnZPKnfmJFtBAnjQQsrZS7oYABCAAAQhAAAL7CSTCgR+TmOUpMTvgTm7GgXFAA2ZqQNVW0DtHBYwvtMYnHClenDVINK9YhKHgM0MhZQCXXjsI889H5p9Xu0z5HnV3G08ZO4x47dN43bJ8brILh1PW1/j8ZMdINR8jQutnM9cyrGEZdzSgjgbioeDv9hd8+Q8IQAACEIAABCCwp7Tovxzb+icJmzoJG2PBWKAB8zSgYivo1rHmGsDxiV8RL84eIpofr8RI8KmRkDKAL//5xRjAGMBowEcaGHL5pcRtn8ftluXz9hrB4801gmWOptojRGj9bN76hTUrY44G1NNAvCz4bSrdEIAABCAAAQhA4CME4uHgoyRu6iVujAljggbM0YBsBb3uKrWeByyPyTQNxicdnTR+t67E+E0ZpH7/+YPvno355yPzj5256u7M9WpsfnzBeRjAPjeAU/NS82MLk3N2fGJ/4/KV9pCllAFM62fzcmbT1gicLxrXRAN/f37waZ/6SMGX/4EABCAAAQhAAAJxOzhSk2TGuMU948JCAw2Yo4H8tILu1WkB8YVBhUbF2/ZJx4idkeGieVUU48AQ4yBlIJx60gkYwBjAaMBHGvjG104ljhsWx5tXPGikESxzNVV2AdP62Zz1CmtTxhoNKK2Bh6hwQwACEIAABCAAgY8RaCvr048kTukkzigjBi2iRZM1INvnqVDM23C1GQZw+/UniB3zxoqtq6oxDAwzDFIGcO/eQcw/H5l/Xu3b7GDxAAAgAElEQVQy5XvU3Wnc9/A+xHND47l8bIO8mSs+6StGrJ1krqZCzth0bbERvE1en3DurM/RgCYaCFmXf6zgyy8gAAEIQAACEICAJODYVjNJnSZJnc1xolU04FcNqNIKetMQfxfz2q8/ca/x21CDUWCoUSAN4GcefhDzF/MXDfhQA88+sojYbnBsb15VlZzj45OP9bUxKXO1fBvAtH5mTebXNRnnhbY11MAHe0qLCqlwQwACEIAABCAAgU4JOLb1ew0THF8v6hkPFh1owEwN7BwVyHtBb4tPd3PEy08SO+63RXOsFnPAYHMgtfu3bu6fMP98aP6xO1fd3blejY28tlPXOT/rjWWx3wiecpwv14xbrsu/AbxzVIkv2bIGM3MNxrgz7ppr4KlOi738EgIQgAAEIAABCEgCTpn1Xc2THRaf7AxGA2jANxqQ7fTyuaujZbi/Cnrt004XOxZOEltjS4wthGOCfNwEmf37aRjAGMBowIcauO93U4n13OTzHw001CZzgHj5yb7JE+W6XeZq+cwVm4b6u1sMtRHMQDSABjTTwESq2xCAAAQgAAEIQKBLAs8PPu1Tjm39XbMEx1eLeNizwEADaCClgXy3gt4x0h8GcPv0AfuM37r/FILTLopn856Pm4wYr+oymTF+DOafD80/r3aZ8j3q7jSeFh6VRcxXN1Yxj7g0NvuM4PYbTvXFGlLmavkygGn9zJoltWbhJ1pAA4poIGSd3GXBlz9AAAIQgAAEIAABScAJW1Ukb4okb+zk9EVhhuuJ66knGshnK+jWMXobwG3TvyG2LyoXW2OYuBgHXRsHowdfgQGMAYwGfKiBYYN+jQGc9s1OXcdI384fsbpkjtA+9WtarzdeHN3FI0OuKMy5MUzrZ9Y4PVnj8F70gwZc10BCFBQcQmUbAhCAAAQgAAEIHJRAwg5cSSLmeiKmdWEBPaAHNJBfDeSrFXRbaX7PO1vdtd10jtheOYPCP4X/tDTwq59eiPnnQ/OPnbnq7sz1amx+duEFacUA3xqczAHpjb80gitniLYbz9RyvdY2rgsD+MrcGsC0ftYzR842t+Z9jDca0EIDsw5a7OWPEIAABCAAAQhAQBLYU1pU6NjWByR4WiR4WhYq0BbaQgOZaSAeCoh1VxXlfCdHxxaCL1xZKBw7oFWMSRq/0VvTK/hSGIfTPg2cd863MIAxgNGADzXwrW+cTpxjrktfA/uM4PYZ39Qq95G5mszZOuZwuf5vmZO2hzLLZcn94YUG0AAayK0GEnbgIqraEIAABCAAAQhAIC0CCTvwHMlZbpMz+MIXDaCBTDTgdStoWdzL5Pjy+dpdt54nti25K/0iLwVxWHXQwInHHYP550Pzz6tdpnyPujuN+/c7gljXIdax0zn9Ntfbau4Qbbd8V5s8yOubBGn9zBomn3k/343+0ECnGnj3lfJen0+r4MuLIAABCEAAAhCAQNwOlpNUdZpUaVMIYPwYPzTgPw3Idnu53tWR+vyNgxU3gMNBseu2C0RL3UwK/BT4s9ZAU0OdCARKMIAxgNGATzWwdvnirOMDhmn6hqlfWUkjWOYaqufUG6/xrkuMfCyJ6jw4Pv+tgRhTxhQNdKuBpVSyIQABCEAAAhCAQNoE2st6n06C1W2CxeLXhhHXCRrwUgNetoJuulZRA3if8bsN4xdTwwXje03t/Rh/PjX+2Jmr7s5cL8dm2YJZxEoXYqVfDd50z2u/ERwOKrn+axrqjQFM62fWPV6ue/gu9IYG0tdAIhwYlnbBlxdCAAIQgAAEIAABUV7wiYQdeImEK/2EC1awQgNowAsN7Bwd8GQXcPMwxXZ4SOP39otEyyP3UsynmO+aBqrn3IUBjAGMBnysgYrbb3QtXqRrFvI6/+4cbqm/O5mLOIoZwc3XedMhZufoEiUNcC/yb76DdR4aQAMqa2BPadERVLIhAAEIQAACEIBARgScsFWhcoLDsZGAowE0YKoGvGgFvW2EIkW+sj6i9c5LRMvS2RTxMX5d18A9t5Rj/vnY/PNypynfpeaO45smjnU9bmDw+tfgTXdsWx6+J5mbOOHeShiiMmdLPcIjVz9p/cy6y9R1F+eN9lXXQMIObM6o2MuLIQABCEAAAhCAgCTg2NbPVE90OD6ScTSABkzUgBetoHeOCuS3qJkyfpdFKN5j/OZMA9PskRjAGMBowMcaGD34ipzFj3TNQl7nX8O4eVlEtM68VMTDffKaM+W6Owytn1lvmbje4pzRvS4aSNiBm6liQwACEIAABCAAgYwJvDbiS//t2Na/dEl6OE4SdDSABkzSgHvFvl6d7hrZNTZPBnDZ4cliavOj8ynaY/zmXAPDB12G+edj849duWruyvVyXH7xkx/mPI5g8PrX4E13bFuWVYjWu38jnLLD82IEy5wtVzt/5efS+pk1lklrLM4Vveumgd2hkrMyLvjyBghAAAIQgAAEICAJOLa1Srfkh+MlYUcDaMAUDch2fLkq+Mldxl5yjI/vlyyeNj+6gGI9xq9nGvjFj3+IAYwBjAZ8rIFvf/MbnsWTdM1CXudfw7hl+by9RvD4vt7mUKW5M4Bp/cy6ysv1AN+F3tBAxhp4XZQXfJIKNgQgAAEIQAACEMiKgGNb40jAMk7APF3wMz6MDxowVwO5agW9blChZ3Fsv/H72AMU6TF+PdfAd751Buafj80/L3ea8l1q7jY+5qtf8TyuYPD61+BNd2ybH1soXpw1SMTHH+FZPiVzN7dvCqT1s7lrDNaXjD0aUEwDoc6PJ24HF2ZV7OVNEIAABCAAAQhAQBLYPT5wNIlf54kWXOCCBtCAChpwrxX0fwqHG64uynnBMj6xf7I42vz4QxTnMX7zpoHjjzkaAxgDGA34WANFRUViw+PVeYsx6RqGvM6fpnHzigfFi7OHCGdC/5znVeuvKXLdAKb1M2sdFdY6HAM6RANdayBuB39N9RoCEIAABCAAAQj0iIBjW9tJuLpOuGADGzSABvKtAbdbQW8eUpyzQmV80leTxdDmxyspyGP85lUDmxuWiJKSEsw/H5t/7MpVc1eu1+OyYtHsvMYazF1/mruZjKvMeXZGhov4xKNyll9tGuLuY0GahuYuF8x33sz3s3ZDA2jAJxp4f/e4wJd7VPDlzRCAAAQgAAEIQCARDtzlk+QoZwtu+LCAQANoIJ8acLsV9Nbr3C/6xScfjfGL4auUCdMYnYf5i/mLBgzQwIKZtygVezIxDnmtv8zj5pWLxY55Y0V88jGur0u3XOueAUzrZ9Y1+VzX8N3oDw2krYE1VKwhAAEIQAACEIBAjwm0h3t/nwQs7QTM9cU87GGPBtBAOhqQbfrcevZby3D3DOD2Scckd71sXUULTgr5ahXyF997O+afAeaf17tN+T71dh3fNsXGAOYGJKU00Lyqaq8RPOVY19aOLcMzzQN7dZk37hgVcO240slheQ1rHTSABtBAVhoY3+OCLx8AAQhAAAIQgAAEto/of5hjW2+SkGWVkLF4tuHGtYMGvNKAW62gd4wq6XHsar/+xGRxc2sDxi/Gr1rGb2o8/nzTFAxgDGA0YIAGSq8dpJT5l4pB/FRzbvB0XBpqxI77bRGfcnyP864dIzM1gAs7NYBp/cy6xat1C9+D1tBAzzQQDwdPoGINAQhAAAIQgAAEXCHg2NYSkrOeJWfwgx8aQAO51oBbraBfHJP9zo/28pOSxcytDbUU3NlxpbQGrh83HPPPAPOPHbnq7cj1ekwu+9mPlY5FnhqOzEtqaqGhVuxYOEm033BK1kawzN162gmG1s+sVXK9VuHz0RgacE0D7aKg4BBXCr58CAQgAAEIQAACEIiHrMEkaq4lalkv7BkDxgANoIHuNOBGK+i2cZlzbpv2tWTxsjmG8UsxX49dXddd8SsMYAxgNGCABr737bPUNP0wYxmXAzWw3wg+LeP1YluplaYBTOvn7nJp/p75OgBmMEMDHmsgZP2ZSjUEIAABCEAAAhBwjUC73Tvg2NaHJHUeJ3W0T864+IFG0SgasIRs35ftLpAXriwU8QxiT/u0AUnjd2tsCYXcAwu5/L/SmrjkRz/A/DPA/PN6tynfp96O4xOOPUbpWMRNQ3rcNOTpOMXqxPbKGaLtxjPSXgvJ3E3mcNnmf1uuLU77u8i1WW+hATSABvKsgbD1Q9cKvnwQBCAAAQhAAAIQkAQc21pPkpfnJC8DU4axYqzQgLka6Ekr6PVXF6ZVAGyf/nWxfVG52Bqro7CO0aulBs4+YwAGMAYwGjBAAyXFxWLzKrpTeGpgMi+6My/uM4Lbbzwzrdxs/VXZGcCy9XO8NPvHf7DmMHfNwdgz9mggLxp4Z3d54HNUqiEAAQhAAAIQgICrBJywdSPJXV6Su7QW/IwNY4MG0EBHDWTbCnrT4KKDxpy2m85O7krB+GXHku5mwleP6o/5Z4D5x45c9Xbk5mNMYtG57hhyGJtwzJMGtkdvFW0zvnXQHE3mcF3vAKb1c8c8mf9m3YQG0IDGGqh3tdjLh0EAAhCAAAQgAAFJIBEOnKlxgnTQxTLnRfKPBtCAHzUg2/l1XQjsfJeIbB/dGYu2m87Za/zmqfCpu9nI8atlmG9cWSOKioowgDGA0YAhGnjwz7dhXDJ/+0ID22ruELtuPa/TXK0pi7yP1s+sgTrL+/kdukADSmtgKFVqCEAAAhCAAAQg4DoBMbDgUMe2XiURVDoR7LQYwJgxZmjATA1k0wq6eVjJR+KINH63VVM4x8BVy8Dt6XisrIxg/Bli/OVjtynfqd6u4zumjveF+dfT2Mf7/TOXJY3g2y74SM4mc7hMbvyj9bOZ6wPWhYw7GtBbA7vHlRzuesGXD4QABCAAAQhAAAKSQMIOLCBZ1DtZZPwYPzRglgYybQW9feReA1juLtlWexcFc3ZM+VIDcjcgJp16Jh1jwpjkSgPjRwz2ZSzD0PWPoZvtWG6r/7PYdftFwgkHxbYRmRnAO0bx3F/WRWatixhvxtsHGthAdRoCEIAABCAAAQjkjEAiFPilDxKmj9wpzfmwCEADaMDvGsikFfS2688ULXUzKZRj/PpaA3dOm4ABzA5gNGCQBq649Ke+jmnZmoe8zz8Gckv9PaJl2nfS3gG8pYtHfvg9J+b8WPehATSguQZm5KzgywdDAAIQgAAEIACBtrI+/+vY1nuaJ0wYwDZJPxpGAyZpQLaCXn9V58/8PbBVYNOSeyiSY/76XgMTRw3F/DPI/MvVrlI+V58dyxec+23fxzXMXP+YudmOZVPt3WkZwLR+Zh1k0jqIc0XvftJAIhT4JpVpCEAAAhCAAAQgkFMCjm094acEinNhQYAG0IAJGtg5OtBpUfD5a/qItVcW7f/blhWVFMkxgH2vgcGX/QIDGAMYDRikgVNOPN73cS1b05D3+cc4ljncf27sKxJ7c7yP3wAoHw9iQu7LObLGQwNowGcaeE0MLDg0pwVfPhwCEIAABCAAAQjEw8EynyVRLIDZEYwG0IARGpDt/lKFwWfHDRCr590sYtGIaHxwpnjq5t+I50ccR4Ec89cIDfz4gvMw/wwy/9ipq89O3VyNVSBQIpoa6oyIbxi6/jF0sxnLtcOPS+Z0MreTOZ7M9WTOl8r/5GNBWMtjiqEBNIAGNNRAyLqfijQEIAABCEAAAhDIOYF4OHgCyaKGySIGH8UONGC8BmQraNn2b+3gw0Vs0Z+ShUFZHNz/r/Je8ewjD4rNDbUUyTGCfa2BMwechgGMAYwGDNPAmtr7fR3XsjELeY9/zGKZu8kcLlZ573/yulSOt+hPydwv2fo5FDA+H6aWQS0DDaABHTWQCAV+mfOCL18AAQhAAAIQgAAEJAHHttp0TJg4ZhJ9NIAGTNeAbPv3lwnnfbw4mCoSyp/VFeKZRxaKTatqxNaYf4qjFLoZy5QGjux3BOafYeZfrnaW8rn67C6uuu8ODGBubvKdBmSuJnM2mbvtv6GvY063779l7kfrZ9ZBpq+DOH+uAY018F58TPBLVKQhAAEIQAACEICAJwSckPVnjRMn7npmJygaQANGa2DtjRcdtEi4v4BYHRFP1z8gNq6s8V3BNGUE8tM8U3j9Y1HMX8xfNGCgBv40YzJzGQawbzQgczOZo8WqO3Ry6cT4TeV0Mvdj/Y75hQbQABrQUwNxO7jak2IvXwIBCEAAAhCAAAQkASdk/YjEUc/EkXFj3NAAGmgbf5RY/cDt6ZnA+4qJT9XfLzasqPZN4RTj1zzjNzXmjy68D/PPQPOPnbr67NTN1VhNHnMtcxgGsPYakLmYzMlSxm46P2XOJ3M/1gCsAdAAGkADemogbgfDVKMhAAEIQAACEICAZwR2lwc+59jWOySPeiaPjBvjhgbQwI6p3xRPPPCHjAqIssj45JL7xfoVVbSGpoiubRF9wcxbMIAxgNGAgRoYfNkvtI1bqRtY+GnozUux+mTuJXOwdAzfjq+RuZ7M+cj9yf3RABpAA/pqoL209/GeFXz5IghAAAIQgAAEICAJOLa1lARS3wSSsWPs0IDRGnjZCVuVrZOPHflk1X1PdiwUpvvfa2rmibXLK8WWxjoK6pjBWmng9+VhzD8Dzb9c7Srlc/XZWXzR98/VKlZh9hpq9nbMKWJ1Yt1ji8UTS+ZlbPzKfO6J6JzndpSffIVjW7Mc22on9zc69+cmAB6BhAb01cAuqtAQgAAEIAABCEDAcwKJcGAYi0gWkWgADaABLTTwnmNba2TrqN1lJaeJgoJDUpOGEOKQhuic8lg08mG65m/H1z2xzwjeGsMIplivR7G+bMRgDGAMYDRgoAZOP/UkDOCO5iL/rawe5M11SeO3NjvjN5mnVUXurKysPDSV78mfbWV9+sVD1mDHtuod2/onObwWOTymnb6mHWPH2Lmigbgd/GPHWM5/QwACEIAABCAAAU8I7A4H+rBoZNGIBtAAGlBWAzuTOz5C1sBX7S9/obuJoTEa+UUsGnm7o7mbyX+vrpkrnlu2SGzBCFa2oIxBvdegHvTLn2H+GWj+sVNXn526uRqrPr17E58xfZXWgMyhZHcVmVNlkoMd8Np3G6siv+0u74uPCX42URo4L2EHbo6HrOcd2/qQnF7ZnN4VE4nxZXzRgJ4aiIeCP+gupvN3CEAAAhCAAAQgkBMC8XCwiSRSzySScWPc0IDvNPBX2dZZ7uyQN+hkE/QbaipOjkUjbQcUEjMqQjZWV4hnH3lQbG5YonSRFTNUj926uRinC88/FwMYAxgNGKqBZx5+kLkJE1g5DTQ1LEneRCdzqJ7kYLFoJLG6ZvaAbHLAlycUFjkha+C+dtG7WSf4bp2AicxuVDSgpwbeai3v+5ls4jrvgQAEIAABCEAAAj0mELeDt7I4ZHGIBtAAGsiLBt6XOzbkzg25g0OUF3yyx0G9oKBgdWWkVyxa0djDAqSIVUfEMw8/IDavqlWu0JoLU5HP1MdQHnDayZh/hpp/udpZyufqs7u4NvJH5iQMYGU0IG+WkzfNNVZHemr8yvc/vTo6q8SNXFCUF3xCPjJEPjrECVsrHNv6F7l+XnJ9DDs9DTvGjXFzUwNL3IjrfAYEIAABCEAAAhDIikA8FDyHxSCLQTSABtCAZxrY39a5dXTfL2YVuNN409Kldx0Wi0YiPTaBo5GkEfx0/QKxcWWNMgVXzFp9zNpcjNURfQ/v1ADu1atXp7/H3NPH3GOsGKvuNDDr1nLmIgzgvGtg06qa5E1ysWiPd/zuNY6rIwufqqz8bBopXlYv2VNa9F8HtIt209zgszDL0AAaQANdaEB298oqcPMmCEAAAhCAAAQg4AYBuePMsa2/Yf54Zv6QGHeRGKNBNOhTDbwld17IHRgvjSs+1o24nclnNEYjg2PRyHuuGMHRiNhrBFfnvfCaC1ORz9TDVF67fDEmL7t/0YDBGrghNII5CAM4bxrYtHKf8evOjl9p/r7fWF0RziS3c+O1bWV9+klTQj56xLGt132ag7PuZt2NBtBAvjUgn80edCNu8xkQgAAEIAABCEAgawKObT3Eog/zDQ2gATTgigY+6NjWuan82E9nHZxdemPj4jnnx6KR190ygeXnPFU3X6xfEc1bARazVg+zNhfjtGzBLMw/g82/7naH8nf/7yC+7opfMfdgAHuugQ0rq5M3wbmZS8WqIm/EqioudCndy/pjxMCCQw9oF/1v1gSurAnybTzx/ZifaCD/Gngh6+DMGyEAAQhAAAIQgIBbBJyQdTmLPBZ5aAANoIHsNJCwAy8ld1CErMvjY4Jfcis2u/k5DZWz+8eqI02uFi6jEfHkkvli3WOLxRaK0Z4Xo3NhrurwmXPvnIEBjAGMBgzWwE9/eD7xljnXGw3E6pM3uz1Zd78bz/c98DO2NVbfd4ybuZ5bn/VKea/PJ8KBCx3bmuXY1i7WB9mtD+AGNzSABpywNc2t2MznQAACEIAABCAAgawJvDS+uJdjWx+QoJKgogE0gAbS0sA7qbbOcseEKCg4JOsA7OEb1yyZ84XGqkit2yaw/LwnaueJtcsrxZZYnTdFWYrfxnL+3ZQQ5p/B5h87fP2/w7e7MT5zwNeMjX863KTji2OM1SVvbltTO/9A09al/5+zrKGm4osepoA9+qqO7aLj4eAbrBXSWiuw8zL/Oy8ZA8ZABQ18o0cBmDdDAAIQgAAEIAABtwg4YesZFnMs5tAAGkADXWpgZ8IO3JkoDZzXWt73M27FXq8/R5SXfyIWjdySCxNYfubqmrkYwZjTOTVnSq+7CgMYAxgNGKyBI/sdkdMY4wsDk3koK43Im9jkzWwyl8lVniRzMJmLeZ3/ufV9orzgk/vaRZfLR55wE3mX6wYVjCeOAQMUDeRXA6+I8gJt471b8wafAwEIQAACEICAIgQc25qM8cMCDg2gATSwXwOvyLbO8ZA12LGtoCKh2rXDaIxGfhGLRt7OVYFzdfVc8dyyRWJLw5KsirAU4M19xm93Y//bX1yM+Wew+dfd7lD+bsYO4eeWPcTcgsnrmga2NHhi/L7bWBX5rWuJnCIflOwkFrIG7msXHWcdsX8dgfGWX+MN/vBXQQNzFQnVHAYEIAABCEAAAhAoKEiESk5lwcaCDQ2gAYM18J5jW2vidjCsU1vnnsxfjVWzT4lFI21pmcBVkax2wzRWV4hnH3lQbG6oda1Q251ByN/9bR7/4NxzMIAxgNGA4Rp45P67mVMwgHusgaaGuuTNajJXSSsXiu7LhTLPiRKra2YP6EnOpst797eLtq16x7b+afC6QgXziWPABEUD+dRAyBqoS+zmOCEAAQhAAAIQMICAfIalE7YcFmkYgGgADRikgZ3JHQsha+BrI7703waE+o+d4urKSK9YtKIxo8JnqgCayc/qiHjm4QfEppUYwRjUPTOoTzv5RMw/w80/dvmascv3YOM85w/Te2z+EYt7Fot15rd5VW3y5rTG6uxubsswZ3p6dXRWyccSMAN+ER8T/Kx8dErCDty8r130hwatMTDe8mm88d3oL/8aeK91dF9tnvVuwJTEKUIAAhCAAAQgIAnE7eBsFmWYf2gADfhYA286tlUv2zrvHldyOJF/L4GlS+86rKE6MjfDgmZmu2X2mcWN0b1G8MaV1RTv2b2VlQb69O6NAYwBjAYM18CNZaOzih86m5Yce88N640ra5I3o8lcxIucR+ZWMsci39xL4OUJhUXO3nbR8x3bes3H6w3Mt/ybb4wBY5BvDawi9kMAAhCAAAQgAAHlCMRLgxezEMP8QwNowEcaeF/uOJA7D+QOhOcHn/Yp5QKvQgcUq6oYG4tG3veiKCq/4+n6B8QGjGBMjAyM8GcfWYTxZ7jxd7BdofzNnJ3BI6/+DbEzg9hpunkscw2Zc3iV3yRzqaqKsQqleModiigv+IR85Ip89IoTtlY4tvUvH60/8m088f2Yn2gg/xoYp1zg5YAgAAEIQAACEIDAK+W9Pu/Y1rssvjAA0QAa0FgD+9s603Yp83mtcfGc82PRyOseFknFU3XzxfoVUYr5FPO71UD9vD9hAGMAowE0IH7x4x92Gy9MNz05//rkTWZP1y/w0vgVsarIG7Gqigszz8DMfsee0qL/2t8uOhxsysk6JMT6Lidc82+0YXYyBsppYPf4wNFmR3XOHgIQgAAEIAABZQnsuwNXuQSKxQoLVjSABrrQwFsybskdBHIngbLBVaMDa6yqOCoWjWz10gSW37Wmdr5Y/1iV2IIRirHRhQYif7gR8w/zDw2gAXH2GQOIk13ESdONX5lDyFxC5hRe5zEyd5I5lEYpn7KH2lbWp598ZIsTtiod2/pbF2sAahYYf2gADaiogZ3KBlcODAIQgAAEIAABCDi2NZoFFkYbGkADCmvgg45tnZvKj/00kdt9AmuWzPlCY1WkNg/FU/FE7Tyxdnml2BLr+fP+TC+E++38b5owFvMP8w8NoAHx1aOOxADGAP6oBmL1Yt1ji8Wa2nn5MH5FLDpnWUNNxRfdz8j4RDGw4NAD2kW/p/A6RUUzimPCJEUDXmogbN1B5IYABCAAAQhAAALKEmgP9T6SBRXmHxpAA4ppYI/cASB3AuyacHiJsgHUZwdWWVl5aCwauSUfJrD8ztU1c8Xa5Q+JLbG6jxZ5KXoby2Ps0Csx/zD/0AAaEEVFRWL9Yzw6wG83+WRzPjJHkLmCzBnyla/IXEnmTD5LA5U9HWe89f+ckDXQsa1Zjm3tUmzNgtHmpdHGd6E3BTWQsAPfUzaAcmAQgAAEIAABCEBAEnBsaxsLKQxANIAG8qiBdzq2dRYFBYcQnfNHoLF6zq9j0cg7+SqsNtbMFc8tWySaMIKNNX5TpsBlP/txj8y/3kFLjBt6hZg0Zij/YIAG8qSB879zVo+u48J9BvjyhfcaHxNTsdHEnzInkLmBzBHylZ/I3EjmSPnL0PhmSaBju+h4OPhGHtcvmHEKmnHogZqGxxp4c/uI/ocRnSEAAQhAAAIQgIDSBBzbuipdN3QAACAASURBVN3jJInFEoslNIAGdso7+RPhwIWt5X0/o3SQNPDgGqtmnxKLRtryWGQVjdUV4tlHHhRNDUso+hu6C/p7387eOOrTOyhmzpiYT6OA745GYAADsWrxbPHrn13YYxN43p03MRcYOBc0xZYkjd/V1Xk1fmUsS6yumT3AwJRQ6VMW5QWf3B0OfCthB26Wj4xxbOtD6hoYgGgADXilgUQ4UK10kOTgIAABCEAAAhCAgCSQKA2c51WCxPeQjKMBYzXwSqqts2NbQaKv+gRWR2eVxKKRp/NpAie/uzoinnn4AbFpVS3Ff8OK/6eccHxWplG/voeL2b+fivmI+YgGFNLAyKsvS7ZyTu3ozfTnrZNLmQMMmgM2r6pN3gQmbwbLex4SjaxtrI30Vj9z4whfGl/ca3+76LDlsO40dt3JzebcbO6JBhJ24CoiLwQgAAEIQAACEFCeQFP5sZ92bOsfLJBYIKEBNOCiBt6Td+LH7WD57rKS00R5wSeUD4Yc4McILF1612GxaCSiQPFVxKoj4un6BWLjympMAANMAPmcRysQyNgAPurIfmLenTeqYBhwDAqZj0rEMHiIG0LDRaCkJOPrWprF8pngJrY+Nu2cN62sSd70FYsqYfzK3GPhU5WVn/1YgsQvtCCwt110cJR81IxjW++6uM7xxFzieFmbowGlNfBhu907oEUw5CAhAAEIQAACEICAbF1Ccql0cskik7tYddBAsq2zvPP+tRFf+m8iq38INEYjg2PRyHuqmChP1c0X61dEMQN8bAQ/uWRBxibRV/ofKe7/400YrxiNaEBhDcjW7H0P75Px9f3rSy4i5vs45m9YWZ28yUuVPCMWjbzfWF0R9k8mx5nsLg98TnY+o100NQ/qXmjADQ0k7MBzRFYIQAACEIAABCCgDQHZusSNJIjPIJlGA0Zp4E3HturjIWvw7nElh2sT8DjQrAg0Lp5zfiwaeV2h4qxYs2S+WLeiClPAh6ZATeSPGRlExx79FbHont9h/Cls/KkUOziW/D6fWd6occxXj8roGj/37DOJ9T6M9Rsej4on6+5XK3ZXRd6IVVVcmFWyxJu0IdAa6lu8r130fMe2XmMNa9QaVocbqzlGxTcAyE5n2gQ8DhQCEIAABCAAAQjsmnB4iWNbH7LwYeGDBtDAQTTwvmzrLO+cl3fQPz/4tE8RPc0i0FA5u3+sOtKkmnmypna+WPfYYrG1sQ6DwCcGwaxby9M2h04+4ThRdd8f1DIQMGIZDzRwUA1Uz7lDDDjt5LSv8+OPOZr47pP4vjVWn+zi8eSS+QfVSJ5yjW2N1fcdY1Z2x9mKgQWHykfWxO1geF+76H8dZD2EMae4McfYUc/wQgPtZb1PJ3pCAAIQgAAEIAABrQg4trXWi0SJ7yAhRwP6aCBuB190bGuWvEO+razP/2oV1DjYnBBYs2TOFxqrIrV5KswetFj8RM1csXZ5pdgSq8co0NwomBYelZYxdOqJxwtpJKmoR44pv7tM4a8+/2UP3C3O/85ZaV3rxcVFYtPKWmK7zrE9Vp+8WeuJ2nmKxuw5yxpqKr6Yk+SJD9WKwJ7Sov9KtYt2bGtLTtauIX3Wgzk5f0xkbiTQQQNdX6cvi/KCT2gV2DhYCEAAAhCAAAQg4NjWVJJ7FmJowHgNvC3vfJd3wMs74YmMEOiMQGVl5aGxaOQWVQ2W1Ukj+CGxpYEdwVs1NQtGXX15t6bQGaefKh6eP1NRI0F9803V65fjMks7j1feJy750fndXu+FhYViZWUEA1jDmC7n4rXLHxJyblb4+r5F5jad5Tz8DgJtZX36yUfeOGGr0rGtv7FeNn69jHmrg3mb22OMEBkhAAEIQAACEICAdgTipcGvs5hhMYMGjNPABx3bOm8f0f8w7YIXB5w3Ao3Vc34di0beUbWg21hdIZ5btkg0NSzBNNDMNPjZhT84qCF01hkDxNIFf1bZTODYaIGMBtLUQEPVHDHk8l8c9JqXBvCCmbcSyzWK5XLulXOwnItVzRNkDiNzmbwlUnyxdgQ6aRf9Hutn49bPGMC5NVeV5xsPBS/RLnhxwBCAAAQgAAEIQEC2MHFsaw8LGBYwaMD3Gtgj72CXd7K3270DRD8I9IRALFpxeiwacRQu7opYdYV49pEHRdMqjGBddgR/96wzuzSDzj37TPHog/eobChwbGkaf0rHDc7Bcx1PHDVEFBcXd3nt3zF1PAawBgawnGvlnCvnXsWvcUfmMD3JgXgvBJzx1v+Tj8pJPjLHttpYR/t+Ha28OYkGc67Bf+8M9/sfoh8EIAABCEAAAhDQkoATsuaRMOY8YWTRYPgdo3m4xt7p2NZZFBQcomWA4qCVJbA6OqskFo08rXihN1mM/ssjC8WmVTWYCIqbCL+8+IedmkA/OPdsseKhe1U3FTg+zFM0kKUGfl8eEr2DwU6v/wf+xA5glW/ikXOrnGM1MH7l9fm0zF2UTaw4MG0JHNAu+h95WPdRa6DWgAZyqYGwtULbAMWBQwACEIAABCAAASds/ZxFCgYwGvCFBnYm70QPWQNfKe/1eaIbBHJNYOnSuw5rqI7MVd4ElqZEdUQ8Xf+A2LiyGiNYUSP4oVm/F3379PmICfSTC84T8nmhWmgsS/OLczPr+beMd+fjPecPU8VRR/b7yPUvb/5Y99hiYraCMVvOpXJOlXOrDpqWuYrMWXKdF/H5EGgt7/uZRGngvIQduFk+csexrQ9ZZ/tinY3BmkuDVf3PHk10gwAEIAABCEAAAtoSkK1MHNv6NwsTFiZoQDsNvJpq65wYG+itbRDiwLUn0BiNDI5FI+/pUASWx/hU3XyxfkUUU0ExU+HpugVi0T2/E1f84mLx0x+eL8pLh4lVVXO0MBd00T7HqYdZZeo41UTuFIN/83Pxk//7nggPv0o8/tB9Yv3jxGqVdgBvSBq/C3SKy+83VleEtU+0OAFtCewpLSrc3y46bDmst7Vbb2P8qm/O5nyM4qHgUdoGIQ4cAhCAAAQgAAEISAKObcVYjLAYQQPKa+A9eSe5vKN8dzjwLfkMbyIYBFQh0Lh4zvmxaOR1nYyLNUvmJ3eXbVHMCFWp2O/lsTxTr5WpoJMBwrGyO1tbDWzAAFbiZiV509STS+brpaOqyBuxqooLVcmTOA4ISAJt4T7Hxe1gWD6qx7Gtd1l/K7/+zrm5iAaU10AL0QsCEIAABCAAAQhoTyBhB0Iknsonniw+zLz7dH9bZ7lbX/tgwwn4mkBD5ez+sepIk04msDzWJ2rniRcerRRbY3VKFNq9NF1V+q5nHn5AL3MBU5HxQgM518DGlTy/PW9xOlYv1q2oEmuWzMv5OOcgb9jWWH3fMb5Oujg57QnsLg987oB20az3zVzvM+5qj/vvtQ82nAAEIAABCEAAAhB4aVzxsRjAGMBoQAkNvCnvCI+HgqNeKivuS3SCgG4E1iyZ84XGqkhtDoq5OS9AP1EzT6xdjhGcL7MBA5j2xDrGDY45t7rdtAoD2OuYvKWxLtkdQ94cpae+5yxrqKn4om75E8cLgdZQ32InZF0uH/Hj2NbrrM2VWJtjzqptzuZ+fMqs7xKdIAABCEAAAhCAgC8IOLa1g0UGiww04LkG3k+1dZZ3gD8/+LRP+SKgcBJGExBCHNIQnVMei0Y+1LF4vLpmrnhu2SKxhR3Bnu6IfuaRhZqaDbk1wHS8hjhmNOGWBjatqvU0Dnlttqr0fXLOkzdByTnQrfHz/HOqIndWVlYeanQSxsn7goAYWHDo7rKS0zq0i/4363TP1+m5NxdNN1cVP/94OPhGU/mxn/ZFUOEkIAABCEAAAhCAQDwUnMmigkUFGsi9BhJ24CXHtuY7IWtgW1mf/yX6QMCvBBqqKy6NRSNve14Adqkta2N1hXj2kQdFU8MSDAgPnpP8l4cxgHW9VjhuDN9caWAz8Tfn84+c4+RNT3LOy2gcq5TS/buNVZHf+jWf4rwg8Ep5r8/vaxd9p2NbrazZc79mhzGMHdtaTPSBAAQgAAEIQAACviEQDwcvIMklyUUDOdHA28m2znYwLO/k9k3Q4EQgkAaBxqrZp8SikbaMisouGbhufWdjtELI9sSb2YmWUyPiL+wAzsx8Uew6cet643OUMtXyrsmmGDfg5GqX8OaG2uRNTrFMjV/1Yk9idc3sAWmkJLwEAr4h0FbWp188ZA3e1y7676zhc7KGZwew4jt0c677kHWFb4IGJwIBCEAAAhCAAARay/t+xrGtt3OeRJmeRHL+ai2kQrlZLMbDwaaEHbhZ3qm9fUT/w4gwEDCZwOrorJJYNPK09sZOdUQ8Xb9AbFrJMylzYUg8u3RR3s0m7TWqnjHDmDImPdIABnC96zfebFpZm7ypyQfGr9TW2sbaSG+TcyzOHQIfaRdtW2sc2/qAmk5u1vhwNYrrB/K53EQYCEAAAhCAAAQg4CsCjm3Vk9QaldSqZcbqbY6/LO/Alndit9u9A74KDJwMBFwgsHTpXYfFopGIXww2aQRvXFntemE+F8aqLp8pW5D6RR+cB7tY0YA7GtjSWEecdakFv7x5SXazaPTLTQnVkYVPVVZ+1oUUhY+AgK8I7B4X+LJ81JBjW7Mc22qnvkN9Bw1kpYG/+CowcDIQgAAEIAABCEBAEnBsayjJYVbJIUaq3uZtNuP3z45tnUVBwSFEEQhAoHsCjdHI4Fg08p5fzJGn6uaL9SuiGBQuGBQYwO4YZn65tjgP9BCrjhBbXYitG1ZWJ7tX+Oiaer+xuiLcfcbBKyAAAUnggHbR/6DeQ70HDXSvgUQoMIUIAgEIQAACEIAABHxHIDE20NuxrQ9JCLtPCGFkJKOdyTupQ9bAV+0vf8F3AYATgoBHBBoXzzk/Fo287qNitHhyyXyx7rHFYosLxXpdduy6fZzPL3uIHcB+2ZnHeaBlNzRQXYEBnO2cEqtP3pz0ZN39/tJiVeSNWFXFhR6lK3wNBHxHID4m+Fn5iCL5qKJ4yHqe2o+RNY1sbn437j2JUMmpvgsAnBAEIAABCEAAAhCQBBzb2oi5yUIADSQ18GqqrbO8OYIIAQEIuEegoXJ2/1h1pEldE3hOVkXzNTXzxNrllWJLjLalmRrEzy/HAFb3emA3KmPjvQYaa+ZiAGdqAMfqkjcjramdn9UcprjOtzVW33eMe5kInwQBCOwpLSrs0C46QQ2AOhAaSGpgNx3eiI8QgAAEIAABCPiWQCIUuImkj8TfUA28L++ElndE7w4HviXKCz7h2wudE4OAAgTWLJnzhcaqSK3iBeesiuira+aKtcsfwgjOwLx4fnllVqz9qB/OyXuzEebqMZdxNNMbSUx9vXxW8guPVorVtXN9GkfnLGuoqfiiAqkLhwABXxNoC/c5Lm4Hw/JRR45tvWtoTcC43a6M80frfwk7cJ+vL3RODgIQgAAEIAABswlI44sE8KMJIDx8zWN/W+ed4X7/Y/bVz9lDwHsCQohDGqJzymPRyId+NGBWV88V8tm2WxqWYGR0YwbLndN+1ADnpJ6xyJjoMSZP1M4jbnYTN7c01CW7Tqyumeff+FkVubOysvJQ7zMUvhECZhPYXR743AHtojFGbV/XRRjffeO72w78xOyrn7OHAAQgAAEIQMDXBMTAgkMd2/orpifJvU818Ja8ozkeCo7aU1p0hK8vZk4OAhoRaKiuuDQWjbytvDFTlZ1x0lhdIZ595EGxGSO4S0Nn7aMYwMrr343nuvIZ/jXqXB7bNUswgLva0dzUUJe8uUjOLRnFjSznsIy+wz0dvNtYFfmtRqkMhwoBXxPYNeHwEidkXS4fkeTY1us+rRVggmJyv/uq/eUv+Ppi5uQgAAEIQAACEIBA3A4uJKHHAPaJBva3dZZ3MDeVH/tprnAIQEBNArFoxemxaMTJU6E5syJ6lgXuxmiF+MsjC8WmhtoujdCuCv5+//26Rxd7MgZ+1hfnlt0NGnBTk9uaJfOJkwfsAJZzh5xD5Fzic906MidQM1vhqCAAAblpYHdZyWkd2kX/2ye1Awxgww3ghB1YzhUOAQhAAAIQgAAEfE8gbgd/TQKPAayrBhJ24KXknckh6/L4mOCXfH/BcoIQ8BGB1dFZJbFo5GmfF7ZFrDoinq5fIDaurMbg2GdwrHsMA9j3us/yxgm4qGnQ5npcnqrDAE7d+LNpVY145uEHRMz/xq80ttc21kZ6+yi14VQg4HsCr5T3+nwiHLjQsa1Zjm216lpH4LipgcVDwRG+v2A5QQhAAAIQgAAEICBNM8e23icBJgHWRANvJ9s628GwvBNZFBQcwlUMAQjoS2Dp0rsOi0UjkVybC6p8vjQ5NqzACF73WJXfd7RxfhjAaCADDTxVf7/xN8hseLwmebNQ5vPVHD21Vh1Z+FRl5Wf1zWA4cghAQBJoK+vTLx6yBu9rF/13TWoK7P41fPev1Gm8LNifqxgCEIAABCAAAQgYQcCxrSdJ1DGAFdbAzoQduFO2dd4+ov9hRlyUnCQEDCMQq6oYG4tG3k+r8K3Xcw07Lcw/WbdArH88aqzhgQFs5i7PtK7vDExDPs8/Onq6/gFj46GcC+ScYJCe35dzvmFpDqcLASMIiPKCT+5rF10eD1nPO7b1gcI1Bkxgs03gLUZclJwkBCAAAQhAAAIQkASckDWBxBwDWCENvCzvIJZ3EsfHBC2uUghAwAwCjYvnnB+LRl43qAgu1iyZJ2Q75K2NdUaZH+tXsAPYJJ1zrv4xanM1lrLlcaoFshE/Y/Vi/YqoeHLJfJOMXxGrirwRq6q40IyshrOEAAR2jwt82QlZA/e1i25XqN6A+Wu2+SvioeDvuEIhAAEIQAACEICAMQScsHUSyTgGcB418J5jW2vitHU2JuZwohDoisAT1fO+EquKbMyVyZD7z82uFecTtfPEC48uFltj9UaYIHLHW+7HAtMNxmhAFw088/BCI2KfjPEy1suYn93YZDfHZPddLl8/VZGNco7vav7n9xCAgP8J7G8XbVv1jm39M4/1Bwxg0w3gsuC3/X/FcYYQgAAEIAABCECgAwHHttpIwDGBPdTAzuSdwCFr4Kv2l7/QQYr8JwQgYDiB52fN+lRDdE552i2hfdQydnX1XPHcskWiKbbE12aIfA6yEoaEj7Tz/9u79yC5qjs/4OINCyb4AZLmDiB7qSTLru1skd1ar+3dTS3ZPMp4t3ajqiRVIfknqlRlCfai6RHOH+mqbBL+SG0VVJHKBPVtaRCF3erbI2lAYEDq23oZY2EeQsJVGGQ8PUJgY4yxeUq6qTOLWDE1w/TMdM909/38Qcka9XTf87nfvvf4/M45l2ebi1WysaTf0e/e398F4CPpjuzxByvZ3rGFFn57Ot+n0mp8+86dd3iMS877d5pP4EyBia8PXhQe8TRZGLjt/e2iTy3hWIQCcL4LwD8/uO66887Mo/9NgAABAgQIEOh7gfe35dERzndHuJPn/6ent3U+NjxwVd9/oTSQAIFFCzS2xr+fJvEP81jYatTK2WM7QyG4P7eGfvoRBeA85lqbe7qI19GC8GP339uXk16O1EPh91vZnlq5o35d/N36UX1r2SqrRfeIvAGB/hd4+RtXrDxju+hjisEWJ3QwA9/s/2+UFhIgQIAAAQIEpglMFga+2sEOVicLi967O4vWJ8JM3jCjN8zszYorzp0WOX8lQIDAnAKPbtlyaZrEI108uN3aoH51YYWfqULw/fdmz9S39VVx5OldY625WYXJSQZykYGw80E/Pfs37OIQ2hR2dej5+9fCv4OVvffd8/E5b/ReQIAAgWkCWXHF2cc2rL4uPCKqORw93CxE7xirUhBuYwb+3bTI+SsBAgQIECBAoP8Fjq9febHnsOhUL7JT/cG2zke/tuay/v/WaCEBAksl0KiV/zxN4p/MOZC+wELrnO+78AHw9gz+1+Ls0fvuyQ7t7o9C8CEF4PbkYrlz6fOdxzZl4HsPfKsvCsDP7N6WhdXMYfJO199X2nTuZmjnK/Vq+c+Wqn/gcwgQ6H+BMFY1bbtoiwC6cxFAL5yXk8fXr7yi/781WkiAAAECBAgQmEFgsjDw4CILgL3Q4XOM7fs/C78MM3LDzNyXbll17QyR8iMCBAi0TeCR7XetTJN4xwyDzfkZaK/F2XfGt2RhBW0vr5Y7tNsK4FznuHOFp/xcC/rM8OCDvV0ADpNawiSdNMl14TdLk9ID+7aXBtp24/dGBAgQmEHgxQ1XfWZiKFoXHjHVLESvGcOykGEeGTgwQ6T8iAABAgQIECCQD4GJocGb5tFxUkhtXyG1VyxPnrmt8+Hitefn45uhlQQIdJNAo1a6MU3iN/JeQDuwYzR78uGkJwvBh3ZtU6jrswJe3r+P2r+wbe5Puz3+YKUnr2VP7apNTco53Y4c//mLRhKv66a+gmMhQCAfAtnaFedM2y76XWNaCsIfkYH/mo9vhlYSIECAAAECBGYQOL5+5ac/oqPUK0VKx9newvTxqZm1Q9GNE18f/MQMsfEjAgQILLlAo3LXp9Mk3pvjwfYPCqi9WAgO26Q6d4srmPHj108Z+P63t/ZUATgUfg+M392/17H5PU7hQL2y8Zol7wj4QAIECMwg8Erx8ksmhwduaBaikWYh+pHxLcXgD2VgOPr8DLHxIwIECBAgQIBAfgSaQ9GzH+ogtbeYqDjb/Z5vnt7WOcykzVasOCs/6ddSAgR6SaBeL57bqJWH0yR+p58KIQtty75to9kTD4Uiyo6uL6Q8U1cAXuh59nsKv/2Yge9PXbvGu/valY5P7bqwf/to/xZ+57czwbv1pFSsVCrn9FLfwbESIJAvgTO3i54YHnzdWFeuC8KTxrfy9f3XWgIECBAgQGAGgWYh+t86xbnrFD8/WRi4fXL9wPVHi2sunCEWfkSAAIGuFUiT8u+ktfgH/VgUWUib9o5tysJ2qkfS7i2mHE63K6DMr9DCi1dfZ+CJh6rdW/xNx6cm1+zbvrmvz8E87zfPNKobf7trOwYOjAABAjMIZMUV576/XXQxPNqqWYhOGvvK0djXUPR/Z4iFHxEgQIAAAQIE8iXQLET/RCe47zvBr4RtnSeGonXNQjSYr4RrLQEC/ShwoFK5qJ7Et6VJfHKeg9h9O6C/Z6ycfe+Bb2ZH0u5bERyOyXmyklUGZOB0Bp58uPsKwOE6FSbThEk1p4/Tn/GptBrfvnPnHRf0Y19CmwgQyJfAS7euurw5FK19f7voCeNg/T0OFrYGz1fCtZYAAQIECBAgMIPAwXXXndcsRK/p/PZV5/e9ZiHaN1EYHLat8wyh9yMCBPpGIK2V/2maxE2D9H9XWGrUytlj99+bHa5v65oVdgrAf3d+ZJWFDMTZk48kXXN9CjsUhMkzDYXf6YXvH9W3lv+obzoMGkKAAIFpAh9sF12IxpuF6C1jYn01JvbW8fUrL552yv2VAAECBAgQIJBPgWYh2qqz2/Od3eenZrIORWtfvekTl+YzyVpNgEAeBepj5cvqSXmLosqHC2uNpJx9NxSCd29f/kJLOj69sODvtjiWgRxn4KlHast+XTpc3549tvObWZg04/7x4ftHmsSVcG/NY59CmwkQyKfAxNcHLwqPyJosDNz2/nbRp4yR9fQY2c58JlmrCRAgQIAAAQIzCDSHov+gc9tznds3moVoPGzrfOyW1VfPcFr9iAABArkSSGvltWkSv2ogf9pAfq2cPXrfPdmh3WPLWnBxXqadlxwX/2RBFp7etXzXo0P1bVO7JCj8zpjDV+rV8p/lqvOgsQQIEJhB4OVvXLHy/e2iR5uF6FXjZb01XjY5PPCfZzitfkSAAAECBAgQyKfA8fUrr2gWopM6tV3dqT0RZqKGGalhZmrYujufadVqAgQIzC6wt7L5qjSJdyswzTCwX4uz74xvyZ5eppV3aWKVnVzOkEuF8FyuPl2OCSmh6BwmwzRkbubMVeOde5KR1bPfYf0LAQIE8imQFVecHR6tFR6x1RyOHm4WoneMnXX12Fn20oZVa/KZVq0mQIAAAQIECMwi0ByKHtOJ7bpO7AfbOh/92hrbsM2SXT8mQIDAmQJZlp3VSOJ1aRL/SsFt5oLbgR2j2ZMPL+0zOFPbrM5cdFGM4pLDDBzavXTPKH9qV21q8ov7wcz3gzSJfxHumWfeR/1vAgQIEJhdIDxb9oPtoocHD3dkHG2o68amso60s9CRdh6a/ez5FwIECBAgQIBATgUmCwP/rYc6dL3U+ZzPsf4yzCgNM0vDDNOcRlGzCRAg0BaBPZX42jSJHzfoP+ugf7Zv+2j2xENbsyON8Y5vD72ntkmhL4eFPt+/2b9/ebZ5pt75AnCY5LJ/+935u+5U55W5A/XKxmvactP1JgQIEMipwIsbrvpMeDRXcziqNAvRa8bVOlLUbXlcLeyal9MoajYBAgQIECBAYHaBHxeu/Mc6qkveUT155rbOh4vXnj/7GfIvBAgQIDBfgYMjI+fVk1IxTeITeS62zNX2fds3TxWCn013dKwQvGdMAXiu8+Df51W4yl9hr48mEBxOt3fmWpOOT+1uECa3+D595Pfp3XBvrFQq58z3vur1BAgQIDC7QLZ2xTnTtot+zzjb0o6zHRta/eXZz5B/IUCAAAECBAjkVCBbseKsZiGa1DnteOf0eJgZGmaI/ugbV3vOVk6/b5pNgMDSCtST8u+lSfycgsBHFgSyvWObs8cfrGSdKAQrAH+0vWzyyVMG2l0APtLYMTWJZe+2zQq/c08UeKZR3fjbS3sX9mkECBDIp0Dz1uiTzaFobbMQjTQL0YvG2zo+3vazrLji3HymTasJECBAgAABAnMINAtRrEPa9g7pm2du6xwK7XOcBv9MgAABAh0Q2Le99LE0iUfyVGRZaFtDsfZ7D3wzO9LGFcF7rQBWmJq7MMUoJ0ahYPtsG7aeD9eoMGnFBJNSK9+dU2k1vn3nzjsu6MAt1lsSIECAQAsCZ24XPTE8+Lrxt/aOv00ODdzTZbtfQAAAIABJREFUwmnwEgIECBAgQIBAPgUmhgb/Qge0LR3Q58MMz8nhgRuOFtdcmM80aTUBAgS6UyAdK/2LNCkfm7M4Or/nKLYy+N5zr2nUytlj99+bHa4vfrtWK/OscJ3zO5eT4mfuHWrxoou/4ZoUJqmEa1TuPVv73hzdXYv/sDvvyo6KAAEC+RQIK1WPDQ98KTyzNjwarFmIThmPW9x43MTw4L/NZ5q0mgABAgQIECDQgsCrN33i0mYhekenc96dzldOb+vcLESDLVB7CQECBAgso8D+2ugVjWq8TeGgtaJkIylnj953T/bM7m0LLtyE5wzzbs2bE6e+zkCtvODryDP1bVOTUlKF33lcT0ujYQeMZbzl+mgCBAgQaEHgpVtXXf7BdtHDUdO43LzH5U6ELbdboPYSAgQIECBAgEB+BZpD0S4dzTk7mu+FGZoThcHisQ2rr8uKK87Ob2K0nAABAr0r0KiVbkyT+I2+Lra0tjqstWJCLc4eHb8nO7Rr/oXgfdtGW/uMdh6v92IuA12XgcbYpnkXgMPkk+/ef2+m8DuvyREv767Ff9q7d2hHToAAgXwL/O120YM3h0eKNQvR28bp5hyn25vvxGg9AQIECBAgQKAFgeZw9Fc6ljN2LKe2dQ4zMsNK6RYovYQAAQIEekCgPlZekyblhiLwvAoL2XfGt2RP7xpruZCzf/vdXVeIcs7nd8558WpHBsLzelt9/u+hXWNTuw80FPLnd/2sxjv3JCOre+AW7BAJECBAoAWBY8WBX5tcP3C97aJnHKvLwhjmxPDghhYovYQAAQIECBAgkG+BycLAP1AAnupUvtEsROMTQ9G6Y7esvjrfqdB6AgQI9LdApVI5p1ErD6dJ/E47Chx5eo8DO0azJx9O5izohNflyUVbFUtlYOYMhOeBz1UAfmpXbWqSCcOZDWd1qcavN5J4XX/fsbWOAAECBI4OrVn1/nbRo81C9KoxvKkC8GclgwABAgQIECBAoAWBZiF6LocdyBNhW+cwozLMrDy47rrzWqDyEgIECBDoI4HGtvJn06T01KyD61ahzVrEDVs8P/HQ1uxIY3zG4s6BHVtm/V3e8yzyyKEs9XAGwvPAZywAp+NTk0n277BbwAKvifvrlY3X9NEtWVMIECBAoAWBbO2Kc8KjySYKg8Pvbxf9Tg7H837cApWXECBAgAABAgQIBIHJwsDteegwThQGX2gWopEwc/LFDVd93NknQIAAAQL1cvnCehLflibxybkH4UtZmoT/+rGAt7B27RvbnD3+YCU70tjxoSLPgXEF4P7MST9mX5s6mdX920c/dG14Nt0xNXlk7/bNfXot7Xie3g47WISdLNzBCRAgQIDA8fUrLz69XXSzEB3pyNje0OxbMXfk8wpzft6dzjwBAgQIECBAgECLAseGBv5kmTptU8/u6OBn/yrMiAwzI8MMyRY5vIwAAQIEciiwe+umP06TeKKThZB+fu892zZNFYJDcSes9gvPDO7n9mpbx4tc8tMnE03CdvDhmhAmiYRdA8KW0L4/C/7+HKqPlf9RDm/RmkyAAAECLQq8uOGqz4RHmzWHo0qzEL3WwfG2To/nzfr+E0OD/7JFDi8jQIAAAQIECBB47qZrLmgWol/0Qcfw5JnbOod2ObsECBAgQKBVgb333fPxNCndqzix4OJEtmdsU3bwgW9lB8Zt6ypHC88Ru/6x27/97qlrQrg2OK8LPq8nGrXy/zpcqZzf6v3M6wgQIECAwAzbRb/XB+N+bx4rDvyas0uAAAECBAgQIDAPgYmhwW092hF8OcxsDDMcf1y4cmAeTfZSAgQIECAwo0BaK69Nk/hVxYoFFysUevpk9abvgO/Akmegynya+dHdtfgPZ7xZ+SEBAgQIEJiHQPPW6JPhkWhTj0YrRC/26Bjg+Dya7KUECBAgQIAAAQJBYGJ48D/2SOfvzTO3dc5WrDjLGSRAgAABAu0WqFfKq9Ikvn/aQLzCpsKmDMiADMjAEmWgNLpve+lj7b6/eT8CBAgQIBAEpm0X3Su7Av4nZ48AAQIECBAgQGCeAmH1bLMQnerSIvDzUzMUh6K1rxQvv2SeTfNyAgQIECCwIIEsy85qJPG6NIl/qRBsVZ4MyIAMyMASZeDl3bX4Txd04/JLBAgQIEBgAQJHi2sunFw/cP1kYeC28Gi1bh0fPHbL6qsX0Dy/QoAAAQIECBAg0CxET3RJAfgnp7d1nvyrgSudGQIECBAgsJwCjdpdv9FI4oNLNPC/RCvLFHKcTxmQARnowgzcvycZWb2c9zyfTYAAAQIEjq9fecUH20UPR80uGSt8ypkhQIAAAQIECBBYoECzEP31MnXq3gszDMNMw2PDA1/KiivOXmAT/BoBAgQIEOiIwMGRkfPqtfiv0yQ+0YUFA0VjW9LKgAzIQC9noBq/3qjG/74jNzBvSoAAAQIEFinw4vBVvzlRGBwOj2RrFqK3l2XscDj6H4tshl8nQIAAAQIECORXoLk++sISduJ+MDk8cEdzKPqKbZ3zmzktJ0CAQK8JNLbGv58m8Q8Vga0clAEZkAEZaEsGanF9V7LRlpa91iFwvAQIEMipQBjDC2N5U2N6hegHSzWOODk08MWckms2AQIECBAgQGDxAmHlbbMQvdyhztsbYabgxNDgzS9tWLVm8UfrHQgQIECAwPII1Ct3XpJWS/+vLQP/vbxizbFbcSkDMiADi8nAW42kdEtWLNr9aHlu5z6VAAECBNogcHRozarmUHRjeJRbsxD9rENjiq9ma1ec04bD9RYECBAgQIAAgfwKNIeiu9vUWTtxelvnyfUD1x9cd915+VXVcgIECBDoR4G0Wr4hTeLjCsFWAcqADMiADMwrA9X4iXpt42/1471RmwgQIEAgvwKhSHtsw+rrztgu+t22jDEORXfnV1XLCRAgQIAAAQJtEpgcHvjXi+icHW0WopGJocG/OPq1NZe16ZC8DQECBAgQ6FqBPZX48jQpjc1r4N+KucWsmPO78iMDMtDLGTiZVuPbd+6844KuvbE5MAIECBAg0CaBMDYYxgjDWGGzEIUxw2wh/00ODfybNh2StyFAgAABAgQI5FfgxQ1XfbxZiFqdofdGsxCNTxYG/rJ5a/T386um5QQIECCQd4G0Vl6bJvFrCsFWAcqADMiADMySgaONZOMf5P1+qf0ECBAgkF+BMHY4NYZYiMabhSiMKbZSEH43jFXmV03LCRAgQIAAAQJtFJgoDG6cpRN2Mmzr3CxE/3Niw+AfHS5ee34bP9ZbESBAgACBnhbYlWy8upHE6SwD/728Ys2xW3EpAzIgA4vKQGk0PD++p29yDp4AAQIECLRRIIwphrHFqTHGvx1rPDnTWGQYo2zjx3orAgQIECBAgEC+BZ676ZoLmsPR3zQL0USzED3fHI7KYbuVl25ddXm+ZbSeAAECBAh8tEBWLJ7dqJZvTpP4bYVgqwBlQAZkIPcZeLmRlL760XcO/0qAAAECBAiEMccw9hjGIKfGIsOY5HD0N2GMkg4BAgQIECBAgAABAgQIECBAoCsE6rWNv5VW4ycUf3Jf/LFqclGrJuXHNaSHM1CNk/r4yKe64qbkIAgQIECAAAECBAgQIECAAAECBAgQIECAAIHFC9TL5QvrSXxbmsQnFXF6uIijgKmILQMyMJ8MVOPXG0m8bvF3Ee9AgAABAgQIECBAgAABAgQIECBAgAABAgQIdKXA7mTTF9Mkfl4RWBFYBmRABvo+A/t3jW369a68GTkoAgQIECBAgAABAgQIECBAgAABAgQIECBAoH0Cj27ZcmmaxCOKP31f/LFScj4rJb1WXvonA281auXh8Bz49t05vBMBAgQIECBAgAABAgQIECBAgAABAgQIECDQ9QL1JP5XaRL/VCFYIVgGZEAG+iQD1fjp3bXS57v+BuQACRAgQIAAAQIECBAgQIAAAQIECBAgQIAAgc4IPLL9rpVpNR5X/OmT4k//rGC0GtW5lIH5ZeBkWo1vP1ypnN+Zu4V3JUCAAAECBAgQIECAAAECBAgQIECAAAECBHpGIMuysxpJvC5N4l8qBCsEy4AMyECvZaD8QiPZ+Ac9c9NxoAQIECBAgAABAgQIECBAgAABAgQIECBAgMDSCOxN4s80ktI+xZ9eK/44XpmVgfxmoDRar9x5ydLcJXwKAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0HMC9Xrx3EatPJwm8bv5Lagopjn3MiADXZ+BlxtJ6as9d5NxwAQIECBAgAABAgQIECBAgAABAgQIECBAgMDyCOwZ2/i7aS3+gSJQ1xeBPCd1fs9J5cWr5zPQSMrV+vjIp5bn7uBTCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAgZ4VOFCpXJRW49vTJD6lEKwQLAMyIAPLnIFq/Hp4XnvP3lQcOAECBAgQIECAAAECBAgQIECAAAECBAgQINAdAo2tpT9Jk7ip+LPMxR8rN3t+5abvkO/QQjMQns++a2zTr3fHXcFRECBAgAABAgQIECBAgAABAgQIECBAgAABAj0vUB8rX5Ym8T0LLV74PYUvGZABGVhQBt4Kz2XPisWze/5GogEECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA9wmktfLaNIl/ppCzoEKOFaxWMcuADLSegWr89O5a6fPddydwRAQIECBAgAABAgQIECBAgAABAgQIECBAgEBfCeytbL4qrcV1RWBFYBmQARnoSAZO1JP4tsOVyvl9dfPQGAIECBAgQIAAAQIECBAgQIAAAQIECBAgQKB7BbIsO6tRLd+cJvHbCkAdKQC1vkrQikpWMtBHGSi/kG4tf7l7r/6OjAABAgQIECBAgAABAgQIECBAgAABAgQIEOhrgd3VTb+ZJvH3FYEVgWVABmRgsRkojdYrd17S1zcNjSNAgAABAgQIECBAgAABAgQIECBAgAABAgS6X+DgyMh59aRUTJP4hALQYgtAfl+GZCCHGTieVss3dP/V3hESIECAAAECBAgQIECAAAECBAgQIECAAAECuRJIa6UvpEn8wxwWb/po+1nFR/mVgaXMQCMpV+vjI5/K1c1CYwkQIECAAAECBAgQIECAAAECBAgQIECAAIHeEXh0y5ZL0yQeWcoCis9SsJMBGei5DFTj1xtJvK53ru6OlAABAgQIECBAgAABAgQIECBAgAABAgQIEMi1QKNW/vM0iX8yZ1GmqnA1p1HCiJEM9FMGGrXSI41t8ZW5vkloPAECBAgQIECAAAECBAgQIECAAAECBAgQINB7Avtro1ekSbyjnwo32qIQKQMysIgMvNWolYezYvHs3ruiO2ICBAgQIECAAAECBAgQIECAAAECBAgQIECAwPsCjVrpxjSJ31hE0cQzdq0ClgEZ6O0MVOOn91Tv+pwbAwECBAgQIECAAAECBAgQIECAAAECBAgQIECgLwQalbs+nSbxXkVgqydlQAZyloH36kl82+FK5fy+uJhrBAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgtEC9Xjw3bH+aJvE7OSsA9fbKRStPnT8ZWGAGyi+kW8tfPn0N9CcBAgQIECBAgAABAgQIECBAgAABAgQIECBAoC8F0qT8O2kSP6sIbCWoDMhA/2agNFqv3HlJX17ENYoAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMF2gXi5fGLZFTZP4ZP8WgBT3nFsZyGEGjqfV8g3Tr3n+ToAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDIhUA9ia9Pk3gih0WiBW4pq6AoKzLQxRnYWh8f+VQuLt4aSYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCYTaA+Vr4srcV3d3FRR7HWM2BlQAY+KgM/byTxutmucX5OgAABAgQIECBAgAABAgQIECBAgAABAgQIEMilQForr02T+FWFYCs8ZUAGeiUDjVrpkca2+MpcXrQ1mgABAgQIECBAgAABAgQIECBAgAABAgQIECAwl0AopKRJvKtXij+OU6FSBnKbgbcatfJwViyePdd1zb8TIECAAAECBAgQIECAAAECBAgQIECAAAECBHItkGXZWWE71TSJf6W4ltvi2kdtt+vfbMe8zBkoPbWnetfncn2h1ngCBAgQIECAAAECBAgQIECAAAECBAgQIECAwHwF9lTia9MkflwRWBFYBmSgSzLwXj2JbztcqZw/3+uZ1xMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKxYsaJeL55bT0rFNIlPdEkBaJlXHioEyoEMLE8Gyi/Ua6UvuTATIECAAAECBAgQIECAAAECBAgQIECAAAECBAi0QaCelH8vTeLnlqfwo+DGXQZynIFTaRKP1Ct3XtKGS5m3IECAAAECBAgQIECAAAECBAgQIECAAAECBAgQOC2wb3vpY6EQk+NClNXHnn0rA0ubgeP1WvyV09cgfxIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECHRAoF4r//M0KR9TCLYqVQZkoIMZ2PpIbfMnO3AJ85YECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLTBfbXRq9oVONtHSz+WGm5tCstefPulgz8vJHE66Zfc/ydAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgCQQatdKNaRK/oRBsJagMyEAbMvBwY1t85RJcunwEAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAbAL1sfKaNCk32lD86ZYViI7DalgZWNoMvNWolYezYvHs2a4zfk6AAAECBAgQIECAAAECBAgQIECAAAECBAgQILCEAqFw06iWb06T+B2FYCtBZUAGWs9A6ak91bs+t4SXKx9FgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQqkBjW/mzaVJ6qvXij0IZKxnIaQbeqyfxbYcrlfNbvb54HQECBAgQIECAAAECBAgQIECAAAECBAgQIECAwDII1MvlC0NhJ03ik60Vtkq2213a7XZ5817uDDxfr5W+tAyXJx9JgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwUIHdWzf9cZrEP26tCGwVKCcZyEEGTqVJPPLt0dGLF3pd8XsECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLLKPBwZeTvhYJPDgpby72i0udb1dvtGXipXou/soyXIx9NgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQLoG0Vl6bJvFPFYKtcpWBXGag8kht8yfbdT3xPgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAl0gUK+UVzWS8n0KgLksAHb76lTH15kV1D9vJPG6Lrj8OAQCBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFOCGRZdlZai/9LmsRvKgQrBMtAX2fgoV2VzVEnriPekwABAgQIECBAgAABAgQIECBAgAABAgQIECBAoMsEGrW7fqORxAcVAPu6AGhVbWdW1Xa766/q1fgvw2SPLrvsOBwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFOCtTrxXMbtfJwmsTvKgQrBMtAX2TgsXq1/A87ed3w3gQIECBAgAABAgQIECBAgAABAgQIECBAgAABAl0ukNZKX0iT+DkFwL4oAHb76lTH15lVye/Vk1IxTOro8suNwyNAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgKgQOVykVpNb49TeJTCsEKwTLQUxl4fney6YtLcZ3wGQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAj0msLsa/7M0iScVAHuqAGhVbWdW1Xa7a5isMfLt0dGLe+wy43AJECBAgAABAgQIECBAgAABAgQIECBAgAABAgSWUuBAZeMn0lr89VBc8h8DGei6DPyfRhL/9z1jG393Ka8LPosAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJOX1VsAAAblUlEQVQECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAmgf8PUhSAFpOPbOoAAAAASUVORK5CYII="/> +</defs> +</svg> diff --git a/src/assets/svg/wallets/metamask/metamask-login.svg b/src/assets/svg/wallets/metamask/metamask-login.svg new file mode 100644 index 00000000..bd9ccac9 --- /dev/null +++ b/src/assets/svg/wallets/metamask/metamask-login.svg @@ -0,0 +1,9 @@ +<svg width="41" height="41" viewBox="0 0 41 41" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<rect width="41" height="41" rx="6.40625" fill="url(#pattern0)"/> +<defs> +<pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1"> +<use xlink:href="#image0_475_6233" transform="translate(-0.254076) scale(0.00271739)"/> +</pattern> +<image id="image0_475_6233" width="555" height="368" xlink:href="data:image/png;base64,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"/> +</defs> +</svg> diff --git a/src/components/Containers/Footer/Footer.js b/src/components/Containers/Footer/Footer.js new file mode 100644 index 00000000..94e4d85f --- /dev/null +++ b/src/components/Containers/Footer/Footer.js @@ -0,0 +1,16 @@ +import React from 'react'; + +import {ReactComponent as StarkWareLogo} from '../../../assets/svg/starkware.svg'; +import {toClasses} from '../../../utils'; +import styles from './Footer.module.scss'; +import {FOOTER_TXT} from './Footer.strings'; + +export const Footer = () => { + return ( + <footer className={styles.footer}> + <div className={toClasses(styles.copyright, 'row')}> + <StarkWareLogo /> {FOOTER_TXT} + </div> + </footer> + ); +}; diff --git a/src/components/Containers/Footer/Footer.module.scss b/src/components/Containers/Footer/Footer.module.scss new file mode 100644 index 00000000..5abb6db2 --- /dev/null +++ b/src/components/Containers/Footer/Footer.module.scss @@ -0,0 +1,18 @@ +@import '../../../index'; + +$height: $--footer-height; +$copyright-color: $--color-beta; + +.footer { + font-size: 13px; + height: #{$height}px; + border-top: 1px solid transparent; + + .copyright { + color: $copyright-color; + display: flex; + font-size: 12px; + line-height: 24px; + margin: auto; + } +} diff --git a/src/components/Containers/Footer/Footer.strings.js b/src/components/Containers/Footer/Footer.strings.js new file mode 100644 index 00000000..3fb1439e --- /dev/null +++ b/src/components/Containers/Footer/Footer.strings.js @@ -0,0 +1 @@ +export const FOOTER_TXT = '© 2021 StarkWare Industries Ltd. All Rights Reserved'; diff --git a/src/components/Containers/Header/Header.constants.js b/src/components/Containers/Header/Header.constants.js new file mode 100644 index 00000000..fb520bb8 --- /dev/null +++ b/src/components/Containers/Header/Header.constants.js @@ -0,0 +1 @@ +export const STARKNET_LOGO_SIZE = 30; diff --git a/src/components/Containers/Header/Header.js b/src/components/Containers/Header/Header.js new file mode 100644 index 00000000..ef847279 --- /dev/null +++ b/src/components/Containers/Header/Header.js @@ -0,0 +1,30 @@ +import React from 'react'; + +import StarkNetLogoPath from '../../../assets/img/starknet.png'; +import {ChainType} from '../../../enums'; +import {toClasses} from '../../../utils'; +import {WalletButton} from '../../Features'; +import {useWallets} from '../../Features/Wallet/Wallet.hooks'; +import {STARKNET_LOGO_SIZE} from './Header.constants'; +import styles from './Header.module.scss'; +import {CHAIN_TXT} from './Header.strings'; + +export const Header = () => { + const {chainName} = useWallets(); + + return ( + <div className={toClasses(styles.header, 'row')}> + <div className={toClasses(styles.left, 'row')}> + <img alt="" height={STARKNET_LOGO_SIZE} src={StarkNetLogoPath} /> + {chainName && ( + <div className={styles.chain}> + {chainName !== ChainType.MAIN.name && CHAIN_TXT(chainName)} + </div> + )} + </div> + <div className={toClasses(styles.right, 'row')}> + <WalletButton /> + </div> + </div> + ); +}; diff --git a/src/components/Containers/Header/Header.module.scss b/src/components/Containers/Header/Header.module.scss new file mode 100644 index 00000000..5ccc6ce7 --- /dev/null +++ b/src/components/Containers/Header/Header.module.scss @@ -0,0 +1,29 @@ +@import '../../../index'; + +$height: $--header-height; +$background-color: $--color-alpha-5; +$chain-color: $--color-beta; + +.header { + height: #{$height}px; + border-bottom: 1px solid transparent; + justify-content: space-between; + padding: 0 40px; + background: $background-color; + box-shadow: 0 4px 30px rgba(0, 0, 0, 0.05); + + .chain { + color: $chain-color; + margin: 5px 10px 0 10px; + font-size: 15px; + font-weight: 500; + opacity: 0.8; + text-transform: capitalize; + } + + .left { + } + + .right { + } +} diff --git a/src/components/Containers/Header/Header.strings.js b/src/components/Containers/Header/Header.strings.js new file mode 100644 index 00000000..fb4e5777 --- /dev/null +++ b/src/components/Containers/Header/Header.strings.js @@ -0,0 +1,4 @@ +import {capitalize, evaluate} from '../../../utils'; + +export const CHAIN_TXT = chainName => + capitalize(evaluate('{{chainName}} test network', {chainName})); diff --git a/src/components/Containers/Main/Main.js b/src/components/Containers/Main/Main.js new file mode 100644 index 00000000..53ec8631 --- /dev/null +++ b/src/components/Containers/Main/Main.js @@ -0,0 +1,24 @@ +import React, {useEffect, useState} from 'react'; + +import {useVars, useWindowSize} from '../../../hooks'; +import {Bridge} from '../../Features'; +import {Login} from '../../Features/Login/Login'; +import {useWallets} from '../../Features/Wallet/Wallet.hooks'; +import styles from './Main.module.scss'; + +export const Main = () => { + const windowSize = useWindowSize(); + const {mainOffset} = useVars(); + const {isConnected} = useWallets(); + const [height, setHeight] = useState(null); + + useEffect(() => { + setHeight(document.body.offsetHeight - mainOffset); + }, [windowSize]); + + return ( + <main className={styles.main} style={{height}}> + {isConnected ? <Bridge /> : <Login />} + </main> + ); +}; diff --git a/src/components/Containers/Main/Main.module.scss b/src/components/Containers/Main/Main.module.scss new file mode 100644 index 00000000..fb35a370 --- /dev/null +++ b/src/components/Containers/Main/Main.module.scss @@ -0,0 +1,5 @@ +.main { + display: flex; + flex-direction: column; + overflow-y: auto; +} diff --git a/src/components/Containers/index.js b/src/components/Containers/index.js new file mode 100644 index 00000000..90346829 --- /dev/null +++ b/src/components/Containers/index.js @@ -0,0 +1,3 @@ +export * from './Main/Main'; +export * from './Footer/Footer'; +export * from './Header/Header'; diff --git a/src/components/Features/Account/Account.constants.js b/src/components/Features/Account/Account.constants.js new file mode 100644 index 00000000..45e9a7b7 --- /dev/null +++ b/src/components/Features/Account/Account.constants.js @@ -0,0 +1,13 @@ +import {evaluate} from '../../../utils'; + +export const LINKS = { + ETHERSCAN: { + text: 'etherscan', + url: (chainName, account) => + evaluate('https://{{chainName}}.etherscan.io/address/{{account}}', {chainName, account}) + }, + VOYAGER: { + text: 'voyager', + url: account => evaluate('https://voyager.online/contract/{{account}}', {account}) + } +}; diff --git a/src/components/Features/Account/Account.js b/src/components/Features/Account/Account.js new file mode 100644 index 00000000..815ec9a8 --- /dev/null +++ b/src/components/Features/Account/Account.js @@ -0,0 +1,33 @@ +import React from 'react'; + +import {AccountAddress, LogoutButton, TransferLogContainer} from '.'; +import {BackButton, Menu, MenuTitle} from '../../UI'; +import {useBridgeActions} from '../Bridge/Bridge.hooks'; +import {useTransferData} from '../Transfer/Transfer.hooks'; +import {useWallets} from '../Wallet/Wallet.hooks'; +import {LINKS} from './Account.constants'; +import styles from './Account.module.scss'; +import {TITLE_TXT} from './Account.strings'; +import {LinkButton} from './LinkButton/LinkButton'; + +export const Account = () => { + const {showTransferMenu} = useBridgeActions(); + const {account, chainName, resetWallet} = useWallets(); + const {isEthereum, isStarknet} = useTransferData(); + + return ( + <Menu> + <div className={styles.account}> + <BackButton onClick={showTransferMenu} /> + <MenuTitle text={TITLE_TXT} /> + <AccountAddress address={account} /> + {isEthereum && ( + <LinkButton text={LINKS.ETHERSCAN.text} url={LINKS.ETHERSCAN.url(chainName, account)} /> + )} + {isStarknet && <LinkButton text={LINKS.VOYAGER.text} url={LINKS.VOYAGER.url(account)} />} + <TransferLogContainer /> + {isEthereum && <LogoutButton onClick={resetWallet} />} + </div> + </Menu> + ); +}; diff --git a/src/components/Features/Account/Account.module.scss b/src/components/Features/Account/Account.module.scss new file mode 100644 index 00000000..e35b8d2b --- /dev/null +++ b/src/components/Features/Account/Account.module.scss @@ -0,0 +1,2 @@ +.account { +} diff --git a/src/components/Features/Account/Account.strings.js b/src/components/Features/Account/Account.strings.js new file mode 100644 index 00000000..71c43f75 --- /dev/null +++ b/src/components/Features/Account/Account.strings.js @@ -0,0 +1 @@ +export const TITLE_TXT = 'Account'; diff --git a/src/components/Features/Account/AccountAddress/AccountAddress.constants.js b/src/components/Features/Account/AccountAddress/AccountAddress.constants.js new file mode 100644 index 00000000..dfae1c26 --- /dev/null +++ b/src/components/Features/Account/AccountAddress/AccountAddress.constants.js @@ -0,0 +1 @@ +export const COPIED_ANIMATION_TIMEOUT_INTERVAL = 1000; diff --git a/src/components/Features/Account/AccountAddress/AccountAddress.js b/src/components/Features/Account/AccountAddress/AccountAddress.js new file mode 100644 index 00000000..630473ce --- /dev/null +++ b/src/components/Features/Account/AccountAddress/AccountAddress.js @@ -0,0 +1,36 @@ +import PropTypes from 'prop-types'; +import React, {useRef} from 'react'; + +import {ReactComponent as CopyIcon} from '../../../../assets/svg/icons/copy.svg'; +import {useAnimation} from '../../../../hooks'; +import {toClasses} from '../../../../utils'; +import {COPIED_ANIMATION_TIMEOUT_INTERVAL} from './AccountAddress.constants'; +import styles from './AccountAddress.module.scss'; +import {COPIED_MSG_TXT} from './AccountAddress.strings'; + +export const AccountAddress = ({address}) => { + const [isAnimate, startAnimation] = useAnimation(COPIED_ANIMATION_TIMEOUT_INTERVAL); + const ref = useRef(); + + const onCopyClick = async () => { + const cb = navigator.clipboard; + await cb.writeText(ref.current.innerText); + startAnimation(); + }; + + return ( + <> + <div ref={ref} className={styles.accountAddress}> + {address.length <= 42 ? address : `${address.substring(0, 42)}...`} + <CopyIcon onClick={onCopyClick} /> + </div> + <div className={toClasses(styles.copiedMsg, isAnimate && styles.copied)}> + {COPIED_MSG_TXT} + </div> + </> + ); +}; + +AccountAddress.propTypes = { + address: PropTypes.string +}; diff --git a/src/components/Features/Account/AccountAddress/AccountAddress.module.scss b/src/components/Features/Account/AccountAddress/AccountAddress.module.scss new file mode 100644 index 00000000..b5bcaf79 --- /dev/null +++ b/src/components/Features/Account/AccountAddress/AccountAddress.module.scss @@ -0,0 +1,41 @@ +@import '../../../../index'; + +$background-color: $--color-alpha-3; +$color: $--color-white-1; +$path-stroke-color-hover: $--color-gamma; +$msg-color: $--color-gamma-1; + +.accountAddress { + background: $background-color; + color: $color; + padding: 7px 10px 7px 15px; + border-radius: 7px; + font-size: 16px; + margin: 20px 0 10px 0; + display: flex; + align-items: center; + justify-content: space-between; + + svg { + cursor: pointer; + + &:hover { + path { + stroke: $path-stroke-color-hover; + } + } + } +} + +.copiedMsg { + opacity: 0; + transition: 0.3s ease-in-out; + color: $msg-color; + font-size: 13px; + float: right; + text-transform: capitalize; + + &.copied { + opacity: 1; + } +} diff --git a/src/components/Features/Account/AccountAddress/AccountAddress.strings.js b/src/components/Features/Account/AccountAddress/AccountAddress.strings.js new file mode 100644 index 00000000..ecdc5706 --- /dev/null +++ b/src/components/Features/Account/AccountAddress/AccountAddress.strings.js @@ -0,0 +1 @@ +export const COPIED_MSG_TXT = 'copied!'; diff --git a/src/components/Features/Account/LinkButton/LinkButton.js b/src/components/Features/Account/LinkButton/LinkButton.js new file mode 100644 index 00000000..561913da --- /dev/null +++ b/src/components/Features/Account/LinkButton/LinkButton.js @@ -0,0 +1,24 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {ReactComponent as RedirectIcon} from '../../../../assets/svg/icons/redirect.svg'; +import {openInNewTab} from '../../../../utils'; +import styles from './LinkButton.module.scss'; + +export const LinkButton = ({text, url}) => { + const onClick = () => { + openInNewTab(url); + }; + + return ( + <div className={styles.linkButton} onClick={onClick}> + {text} + <RedirectIcon /> + </div> + ); +}; + +LinkButton.propTypes = { + text: PropTypes.string, + url: PropTypes.string +}; diff --git a/src/components/Features/Account/LinkButton/LinkButton.module.scss b/src/components/Features/Account/LinkButton/LinkButton.module.scss new file mode 100644 index 00000000..19e43d75 --- /dev/null +++ b/src/components/Features/Account/LinkButton/LinkButton.module.scss @@ -0,0 +1,36 @@ +@import '../../../../index'; + +$color: $--color-gamma-1; +$border-color: $--color-gamma-1; +$color-hover: $--color-gamma; +$border-color-hover: $--color-gamma; +$path-fill-color-hover: $--color-gamma; + +.linkButton { + color: $color; + padding: 3px 10px; + border-radius: 7px; + border-color: $border-color; + border-style: solid; + border-width: 1px; + font-size: 12px; + margin: 10px 10px 10px 0; + text-transform: capitalize; + display: inline-block; + cursor: pointer; + + svg { + margin-left: 5px; + } + + &:hover { + color: $color-hover; + border-color: $border-color-hover; + + svg { + path { + fill: $path-fill-color-hover; + } + } + } +} diff --git a/src/components/Features/Account/LogoutButton/LogoutButton.js b/src/components/Features/Account/LogoutButton/LogoutButton.js new file mode 100644 index 00000000..08aed9ca --- /dev/null +++ b/src/components/Features/Account/LogoutButton/LogoutButton.js @@ -0,0 +1,31 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {useColors} from '../../../../hooks'; +import {Button} from '../../../UI'; +import {BTN_TXT} from './LogoutButton.strings'; + +export const LogoutButton = ({onClick}) => { + const {colorAlpha5, colorWhite} = useColors(); + + return ( + <Button + colorBackground={colorAlpha5} + colorBorder={colorAlpha5} + colorText={colorWhite} + height={50} + style={{ + marginTop: '25px', + width: '100%', + borderRadius: '7px', + fontSize: '16px' + }} + text={BTN_TXT} + onClick={onClick} + /> + ); +}; + +LogoutButton.propTypes = { + onClick: PropTypes.func +}; diff --git a/src/components/Features/Account/LogoutButton/LogoutButton.strings.js b/src/components/Features/Account/LogoutButton/LogoutButton.strings.js new file mode 100644 index 00000000..b64e57a7 --- /dev/null +++ b/src/components/Features/Account/LogoutButton/LogoutButton.strings.js @@ -0,0 +1 @@ +export const BTN_TXT = 'Logout'; diff --git a/src/components/Features/Account/TransferLog/TransferLog.js b/src/components/Features/Account/TransferLog/TransferLog.js new file mode 100644 index 00000000..c8b14f7b --- /dev/null +++ b/src/components/Features/Account/TransferLog/TransferLog.js @@ -0,0 +1,33 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {CryptoLogo} from '../../../UI'; +import {CryptoLogoSize} from '../../../UI/CryptoLogo/CryptoLogo.enums'; +import styles from './TransferLog.module.scss'; + +export const TransferLog = ({name, symbol, amount, timestamp}) => { + return ( + <> + <div className={styles.transferLog}> + <div className={styles.left}> + <CryptoLogo size={CryptoLogoSize.SMALL} symbol={symbol} /> + <div> + {name} + <div className={styles.data}>{new Date(timestamp).toLocaleString()}</div> + </div> + </div> + <div className={styles.amount}> + {amount} {symbol.toUpperCase()} + </div> + <hr /> + </div> + </> + ); +}; + +TransferLog.propTypes = { + name: PropTypes.string, + symbol: PropTypes.string, + amount: PropTypes.number, + timestamp: PropTypes.number +}; diff --git a/src/components/Features/Account/TransferLog/TransferLog.module.scss b/src/components/Features/Account/TransferLog/TransferLog.module.scss new file mode 100644 index 00000000..0a7b59dc --- /dev/null +++ b/src/components/Features/Account/TransferLog/TransferLog.module.scss @@ -0,0 +1,39 @@ +@import '../../../../index'; + +$color: $--color-alpha-6; +$hr-color: $--color-alpha-3; + +.transferLog { + display: flex; + flex-direction: row; + justify-content: space-between; + font-size: 15px; + line-height: 21px; + margin: 10px 5px; + + &:nth-child(2) { + margin-top: 20px; + } + + .left { + display: flex; + } + + .data { + font-size: 13px; + color: $color; + } + + .amount { + font-weight: bold; + } +} + +hr { + display: none; + + &:not(:last-child) { + display: block; + border: 1px solid $hr-color; + } +} diff --git a/src/components/Features/Account/TransferLogContainer/TransferLogContainer.js b/src/components/Features/Account/TransferLogContainer/TransferLogContainer.js new file mode 100644 index 00000000..fd92ef59 --- /dev/null +++ b/src/components/Features/Account/TransferLogContainer/TransferLogContainer.js @@ -0,0 +1,53 @@ +import PropTypes from 'prop-types'; +import React, {useState} from 'react'; + +import {ReactComponent as CollapseIcon} from '../../../../assets/svg/icons/collapse.svg'; +import {toClasses} from '../../../../utils'; +import styles from './TransferLogContainer.module.scss'; +import { + EMPTY_MSG_TXT, + OVERVIEW_TXT, + TITLE_TXT, + VIEW_MORE_TXT +} from './TransferLogContainer.strings'; + +export const TransferLogContainer = ({children}) => { + const [showChildren, setShowChildren] = useState(false); + + const toggleShowChildren = () => { + setShowChildren(!showChildren); + }; + + const renderChildren = () => { + if (!children) { + return <div className={styles.empty}>{EMPTY_MSG_TXT}</div>; + } else if (!showChildren) { + return ( + <div className={styles.viewMore}> + {Array.isArray(children) ? children.length : 1} {OVERVIEW_TXT}{' '} + <span onClick={toggleShowChildren}>{VIEW_MORE_TXT}</span> + </div> + ); + } else { + return children; + } + }; + + return ( + <div className={styles.transferLogContainer}> + <div className={toClasses(styles.title, showChildren && styles.showChildren)}> + {TITLE_TXT} + {children && ( + <div> + <CollapseIcon onClick={toggleShowChildren} /> + </div> + )} + </div> + {renderChildren()} + </div> + ); +}; + +TransferLogContainer.propTypes = { + children: PropTypes.oneOfType([PropTypes.array, PropTypes.object]) +}; diff --git a/src/components/Features/Account/TransferLogContainer/TransferLogContainer.module.scss b/src/components/Features/Account/TransferLogContainer/TransferLogContainer.module.scss new file mode 100644 index 00000000..665b415e --- /dev/null +++ b/src/components/Features/Account/TransferLogContainer/TransferLogContainer.module.scss @@ -0,0 +1,54 @@ +@import '../../../../index'; + +$color: $--color-white; +$border-color: $--color-alpha-3; +$empty-msg-color: $--color-white-1; +$view-more-color: $--color-gamma-1; + +.transferLogContainer { + color: $color; + padding: 13px; + border-radius: 7px; + border-color: $border-color; + border-style: solid; + border-width: 2px; + margin: 10px 0; + + .title { + display: flex; + justify-content: space-between; + align-items: center; + font-size: 14px; + line-height: 16px; + font-weight: 600; + text-transform: capitalize; + margin-bottom: 10px; + + &.showChildren { + svg { + transform: scale(1, -1); + } + } + + svg { + transition: 0.3s ease-in-out; + cursor: pointer; + } + } + + .empty { + color: $empty-msg-color; + font-size: 12px; + opacity: 0.3; + } + + .viewMore { + font-size: 12px; + + span { + cursor: pointer; + text-transform: capitalize; + color: $view-more-color; + } + } +} diff --git a/src/components/Features/Account/TransferLogContainer/TransferLogContainer.strings.js b/src/components/Features/Account/TransferLogContainer/TransferLogContainer.strings.js new file mode 100644 index 00000000..8daece9f --- /dev/null +++ b/src/components/Features/Account/TransferLogContainer/TransferLogContainer.strings.js @@ -0,0 +1,4 @@ +export const TITLE_TXT = 'Transaction log'; +export const OVERVIEW_TXT = 'recent transactions'; +export const EMPTY_MSG_TXT = 'Transactions will appear here...'; +export const VIEW_MORE_TXT = 'view more'; diff --git a/src/components/Features/Account/index.js b/src/components/Features/Account/index.js new file mode 100644 index 00000000..14a3d8bf --- /dev/null +++ b/src/components/Features/Account/index.js @@ -0,0 +1,4 @@ +export * from './TransferLog/TransferLog'; +export * from './TransferLogContainer/TransferLogContainer'; +export * from './LogoutButton/LogoutButton'; +export * from './AccountAddress/AccountAddress'; diff --git a/src/components/Features/Bridge/Bridge.hooks.js b/src/components/Features/Bridge/Bridge.hooks.js new file mode 100644 index 00000000..80637cf2 --- /dev/null +++ b/src/components/Features/Bridge/Bridge.hooks.js @@ -0,0 +1,27 @@ +import {useCallback} from 'react'; +import {useDispatch, useSelector} from 'react-redux'; + +import {MenuType} from '../../../enums'; +import {selectBridge} from './Bridge.selectors'; +import {showMenuAction} from './Bridge.slice'; + +export const useBridgeData = () => { + return { + ...useSelector(selectBridge) + }; +}; + +export const useBridgeActions = () => { + return { + showAccountMenu: useShowBridgeMenu(MenuType.ACCOUNT), + showTransferMenu: useShowBridgeMenu(MenuType.TRANSFER), + showSelectTokenMenu: useShowBridgeMenu(MenuType.SELECT_TOKEN) + }; +}; + +const useShowBridgeMenu = type => { + const dispatch = useDispatch(); + return useCallback(() => { + dispatch(showMenuAction(type)); + }, [dispatch]); +}; diff --git a/src/components/Features/Bridge/Bridge.js b/src/components/Features/Bridge/Bridge.js new file mode 100644 index 00000000..9959d591 --- /dev/null +++ b/src/components/Features/Bridge/Bridge.js @@ -0,0 +1,25 @@ +import React from 'react'; + +import {MenuType} from '../../../enums'; +import {Account} from '../Account/Account'; +import {SelectToken} from '../SelectToken/SelectToken'; +import {Transfer} from '../Transfer/Transfer'; +import {useBridgeData} from './Bridge.hooks'; +import styles from './Bridge.module.scss'; + +export const Bridge = () => { + const {menu} = useBridgeData(); + + const renderMenu = () => { + switch (menu) { + case MenuType.TRANSFER: + return <Transfer />; + case MenuType.SELECT_TOKEN: + return <SelectToken />; + case MenuType.ACCOUNT: + return <Account />; + } + }; + + return <div className={styles.bridge}>{renderMenu()}</div>; +}; diff --git a/src/components/Features/Bridge/Bridge.module.scss b/src/components/Features/Bridge/Bridge.module.scss new file mode 100644 index 00000000..1c96da1b --- /dev/null +++ b/src/components/Features/Bridge/Bridge.module.scss @@ -0,0 +1,16 @@ +@import '../../../index'; + +$background-color: $--color-alpha; + +.bridge { + display: flex; + flex-direction: column; + overflow: hidden; + background: $background-color; + border-radius: 20px; + padding: 20px; + width: 500px; + max-height: 650px; + margin: auto; + transition: 0.3s ease-in-out; +} diff --git a/src/components/Features/Bridge/Bridge.selectors.js b/src/components/Features/Bridge/Bridge.selectors.js new file mode 100644 index 00000000..993b9f14 --- /dev/null +++ b/src/components/Features/Bridge/Bridge.selectors.js @@ -0,0 +1,3 @@ +export const selectBridge = state => state.bridge; + +export const selectMenu = state => state.bridge.menu; diff --git a/src/components/Features/Bridge/Bridge.slice.js b/src/components/Features/Bridge/Bridge.slice.js new file mode 100644 index 00000000..2b9787e4 --- /dev/null +++ b/src/components/Features/Bridge/Bridge.slice.js @@ -0,0 +1,21 @@ +import {createSlice} from '@reduxjs/toolkit'; + +import {MenuType} from '../../../enums'; + +const initialState = { + menu: MenuType.TRANSFER +}; + +const bridgeSlice = createSlice({ + name: 'bridge', + initialState, + reducers: { + showMenuAction(state, action) { + state.menu = action.payload; + } + } +}); + +export const {showMenuAction, setTokensAction, resetAction} = bridgeSlice.actions; + +export default bridgeSlice.reducer; diff --git a/src/components/Features/Login/Login.js b/src/components/Features/Login/Login.js new file mode 100644 index 00000000..d0d7c97a --- /dev/null +++ b/src/components/Features/Login/Login.js @@ -0,0 +1,135 @@ +import React, {useEffect, useRef, useState} from 'react'; +import {ChainUnsupportedError} from 'use-wallet'; + +import {NetworkType, toChainName, WalletType} from '../../../enums'; +import {useWalletHandlerProvider} from '../../../hooks'; +import {capitalize, toClasses} from '../../../utils'; +import {BackButton, Menu} from '../../UI'; +import {useHideModal, useWalletConnectionModal} from '../ModalProvider/ModalProvider.hooks'; +import {useTransferData} from '../Transfer/Transfer.hooks'; +import {WalletStatus} from '../Wallet/Wallet.enums'; +import {useWallets} from '../Wallet/Wallet.hooks'; +import {MODAL_TIMEOUT_DURATION} from '../Wallet/WalletButton/WalletButton.constants'; +import {WalletLogin} from '../Wallet/WalletLogin/WalletLogin'; +import styles from './Login.module.scss'; +import {DOWNLOAD_TEXT, SUBTITLE_TXT, TITLE_TXT} from './Login.strings'; + +export const Login = () => { + const {isEthereum, isStarknet} = useTransferData(); + const [walletType, setWalletType] = useState(isEthereum ? WalletType.L1 : WalletType.L2); + const [selectedWalletName, setSelectedWalletName] = useState(''); + const [errorMsg, setErrorMsg] = useState(''); + const modalTimeoutId = useRef(null); + const hideModal = useHideModal(); + const showWalletConnectionModal = useWalletConnectionModal(); + const {status, error, connectWallet, swapWallets} = useWallets(); + const {getWalletHandlers} = useWalletHandlerProvider(); + + useEffect(() => { + error && handleError(error); + }, [error]); + + useEffect(() => { + setWalletType(isEthereum ? WalletType.L1 : WalletType.L2); + }, [isEthereum]); + + useEffect(() => { + switch (status) { + case WalletStatus.CONNECTING: + maybeShowModal(); + break; + case WalletStatus.CONNECTED: + setSelectedWalletName(''); + setErrorMsg(''); + maybeHideModal(); + break; + case WalletStatus.ERROR: + case WalletStatus.DISCONNECTED: + maybeHideModal(); + break; + } + return () => { + maybeHideModal(); + }; + }, [status]); + + const onWalletConnect = walletHandler => { + if (!walletHandler.isInstalled()) { + return walletHandler.install(); + } + const {config} = walletHandler; + setSelectedWalletName(config.name); + return connectWallet(walletHandler); + }; + + const onDownloadClick = () => { + const handlers = getWalletHandlers(walletType); + if (handlers.length > 0) { + return handlers[0].install(); + } + }; + + const handleError = error => { + if (error.name === ChainUnsupportedError.name) { + const msg = error.message.replace( + /\d+/g, + match => `${match} (${capitalize(toChainName(Number(match)))})` + ); + setErrorMsg(msg); + } + }; + + const maybeShowModal = () => { + maybeHideModal(); + modalTimeoutId.current = setTimeout(() => { + showWalletConnectionModal(selectedWalletName); + }, MODAL_TIMEOUT_DURATION); + }; + + const maybeHideModal = () => { + if (typeof modalTimeoutId.current === 'number') { + clearTimeout(modalTimeoutId.current); + modalTimeoutId.current = null; + } + hideModal(); + }; + + const renderLoginWallets = () => { + return getWalletHandlers(walletType).map(walletHandler => { + const { + config: {id, description, name, loginLogoPath} + } = walletHandler; + return ( + <WalletLogin + key={id} + description={description} + logoPath={loginLogoPath} + name={name} + onClick={() => onWalletConnect(walletHandler)} + /> + ); + }); + }; + + return ( + <Menu> + <div className={toClasses(styles.login, 'center')}> + <div className={styles.content}> + {isStarknet && <BackButton onClick={swapWallets} />} + <div className={styles.title}>{TITLE_TXT}</div> + <p> + {SUBTITLE_TXT( + walletType === WalletType.L1 ? NetworkType.ETHEREUM.name : NetworkType.STARKNET.name + )} + </p> + <div className={styles.container}>{renderLoginWallets()}</div> + {errorMsg && <div className={styles.errorMsg}>{errorMsg}</div>} + </div> + <div className={styles.separator} /> + <div className={styles.download}> + {DOWNLOAD_TEXT[0]} <span onClick={onDownloadClick}>{DOWNLOAD_TEXT[1]}</span> + </div> + </div> + </Menu> + ); +}; diff --git a/src/components/Features/Login/Login.module.scss b/src/components/Features/Login/Login.module.scss new file mode 100644 index 00000000..c1de3017 --- /dev/null +++ b/src/components/Features/Login/Login.module.scss @@ -0,0 +1,76 @@ +@import '../../../index'; + +$background-color: $--color-alpha; +$text-color: $--color-white; +$download-color: $--color-white-1; +$download-button-color: $--color-beta; +$container-color: $--color-alpha-3; +$error-color: $--color-error; + +.login { + position: absolute; + width: 450px; + background: $background-color; + box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1); + border-radius: 20px; + + .content { + margin: 30px; + + p { + font-size: 12px; + color: $text-color; + opacity: 0.7; + } + + .title { + margin-bottom: 30px; + font-weight: 600; + font-size: 24px; + line-height: 30px; + text-align: center; + letter-spacing: 0.01em; + color: $text-color; + text-transform: capitalize; + } + + .container { + margin-top: 20px; + border: 1px solid $container-color; + box-sizing: border-box; + border-radius: 8px; + } + + .errorMsg { + margin-top: 20px; + line-height: 20px; + padding: 7px; + font-size: 14px; + border: 1px solid $error-color; + color: $error-color; + background-color: $text-color; + border-radius: 7px; + } + } + + .download { + margin: 30px; + font-size: 14px; + line-height: 17px; + text-align: center; + letter-spacing: 0.01em; + color: $download-color; + + span { + cursor: pointer; + color: $download-button-color; + text-decoration: underline; + } + } +} + +.separator { + height: 1px; + width: 100%; + background: $container-color; +} diff --git a/src/components/Features/Login/Login.strings.js b/src/components/Features/Login/Login.strings.js new file mode 100644 index 00000000..af1f5753 --- /dev/null +++ b/src/components/Features/Login/Login.strings.js @@ -0,0 +1,8 @@ +import {evaluate} from '../../../utils'; + +export const TITLE_TXT = 'Login'; + +export const SUBTITLE_TXT = networkName => + evaluate('Please select {{networkName}} wallet to connect with this dApp:', {networkName}); + +export const DOWNLOAD_TEXT = ['Don’t have a wallet?', 'Download Here']; diff --git a/src/components/Features/ModalProvider/ModalProvider.hooks.js b/src/components/Features/ModalProvider/ModalProvider.hooks.js new file mode 100644 index 00000000..5a60382c --- /dev/null +++ b/src/components/Features/ModalProvider/ModalProvider.hooks.js @@ -0,0 +1,53 @@ +import {useCallback} from 'react'; +import {useDispatch, useSelector} from 'react-redux'; + +import {ModalType} from '../../UI/Modal/Modal/Modal.constants'; +import {selectModal} from './ModalProvider.selectors'; +import {hideModalAction, showModalAction} from './ModalProvider.slice'; + +export const useModal = () => { + return { + modal: useSelector(selectModal) + }; +}; + +export const useHideModal = () => { + const dispatch = useDispatch(); + return useCallback(() => { + dispatch(hideModalAction()); + }, [dispatch]); +}; + +export const useWalletConnectionModal = () => { + const dispatch = useDispatch(); + return useCallback( + walletName => { + dispatch( + showModalAction({ + componentPath: 'Features/ModalProvider/WalletConnectionModal/WalletConnectionModal', + componentProps: { + walletName + }, + title: walletName + }) + ); + }, + [dispatch] + ); +}; + +export const useErrorModal = () => { + const dispatch = useDispatch(); + return useCallback( + error => { + dispatch( + showModalAction({ + title: error.name, + body: error.message, + type: ModalType.ERROR + }) + ); + }, + [dispatch] + ); +}; diff --git a/src/components/Features/ModalProvider/ModalProvider.js b/src/components/Features/ModalProvider/ModalProvider.js new file mode 100644 index 00000000..9e6fb2ec --- /dev/null +++ b/src/components/Features/ModalProvider/ModalProvider.js @@ -0,0 +1,25 @@ +import React, {lazy, Suspense} from 'react'; + +import {Loading, Modal, ModalBody, ModalFooter, ModalHeader, ModalTitle} from '../../UI'; +import {LoadingSize} from '../../UI/Loading/Loading.enums'; +import {useHideModal, useModal} from './ModalProvider.hooks'; + +export const ModalProvider = () => { + const {modal} = useModal(); + const {handleOnClose} = useHideModal(); + const CustomComponent = lazy(() => import(`../../${modal.componentPath}`)); + + return ( + <Modal show={modal.show} size={modal.size} type={modal.type}> + <ModalHeader type={modal.type} onClose={handleOnClose}> + {modal.title && <ModalTitle>{modal.title}</ModalTitle>} + </ModalHeader> + <ModalBody type={modal.type}> + <Suspense fallback={<Loading size={LoadingSize.LARGE} />}> + {modal.componentPath ? <CustomComponent {...modal.componentProps} /> : modal.body} + </Suspense> + </ModalBody> + {modal.withButtons && <ModalFooter onClose={handleOnClose} {...modal} />} + </Modal> + ); +}; diff --git a/src/components/Features/ModalProvider/ModalProvider.selectors.js b/src/components/Features/ModalProvider/ModalProvider.selectors.js new file mode 100644 index 00000000..d0f21e88 --- /dev/null +++ b/src/components/Features/ModalProvider/ModalProvider.selectors.js @@ -0,0 +1 @@ +export const selectModal = state => state.modal; diff --git a/src/components/Features/ModalProvider/ModalProvider.slice.js b/src/components/Features/ModalProvider/ModalProvider.slice.js new file mode 100644 index 00000000..c4d0752c --- /dev/null +++ b/src/components/Features/ModalProvider/ModalProvider.slice.js @@ -0,0 +1,26 @@ +import {createSlice} from '@reduxjs/toolkit'; + +const initialState = { + show: false, + componentPath: '', + componentProps: null, + withButtons: false, + body: '' +}; + +const modalSlice = createSlice({ + name: 'modal', + initialState, + reducers: { + showModalAction(state, action) { + Object.assign(state, {...action.payload, show: true}); + }, + hideModalAction(state) { + Object.assign(state, initialState); + } + } +}); + +export const {showModalAction, hideModalAction} = modalSlice.actions; + +export default modalSlice.reducer; diff --git a/src/components/Features/ModalProvider/WalletConnectionModal/WalletConnectionModal.js b/src/components/Features/ModalProvider/WalletConnectionModal/WalletConnectionModal.js new file mode 100644 index 00000000..abf818a2 --- /dev/null +++ b/src/components/Features/ModalProvider/WalletConnectionModal/WalletConnectionModal.js @@ -0,0 +1,28 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {useColors} from '../../../../hooks'; +import {toClasses} from '../../../../utils'; +import {Loading} from '../../../UI'; +import {LoadingSize} from '../../../UI/Loading/Loading.enums'; +import styles from './WalletConnectionModal.module.scss'; +import {BODY_TXT} from './WalletConnectionModal.strings'; + +const WalletConnectionModal = ({walletName}) => { + const {colorBeta} = useColors(); + + return ( + <div className={styles.walletConnectionModal}> + <div>{BODY_TXT(walletName)}</div> + <div className={toClasses(styles.loading, 'center')}> + <Loading color={colorBeta} size={LoadingSize.LARGE} /> + </div> + </div> + ); +}; + +WalletConnectionModal.propTypes = { + walletName: PropTypes.string +}; + +export default WalletConnectionModal; diff --git a/src/components/Features/ModalProvider/WalletConnectionModal/WalletConnectionModal.module.scss b/src/components/Features/ModalProvider/WalletConnectionModal/WalletConnectionModal.module.scss new file mode 100644 index 00000000..21237730 --- /dev/null +++ b/src/components/Features/ModalProvider/WalletConnectionModal/WalletConnectionModal.module.scss @@ -0,0 +1,5 @@ +.walletConnectionModal { + .loading { + margin-top: 30px; + } +} diff --git a/src/components/Features/ModalProvider/WalletConnectionModal/WalletConnectionModal.strings.js b/src/components/Features/ModalProvider/WalletConnectionModal/WalletConnectionModal.strings.js new file mode 100644 index 00000000..7faac418 --- /dev/null +++ b/src/components/Features/ModalProvider/WalletConnectionModal/WalletConnectionModal.strings.js @@ -0,0 +1,4 @@ +import {evaluate} from '../../../../utils'; + +export const BODY_TXT = walletName => + evaluate('Waiting for confirmation from {{walletName}}', {walletName}); diff --git a/src/components/Features/ModalProvider/index.js b/src/components/Features/ModalProvider/index.js new file mode 100644 index 00000000..a26780ed --- /dev/null +++ b/src/components/Features/ModalProvider/index.js @@ -0,0 +1 @@ +export * from './WalletConnectionModal/WalletConnectionModal'; diff --git a/src/components/Features/SelectToken/SearchToken/SearchToken.js b/src/components/Features/SelectToken/SearchToken/SearchToken.js new file mode 100644 index 00000000..dbe7f964 --- /dev/null +++ b/src/components/Features/SelectToken/SearchToken/SearchToken.js @@ -0,0 +1,37 @@ +import PropTypes from 'prop-types'; +import React, {useEffect, useState} from 'react'; + +import {ReactComponent as SearchIcon} from '../../../../assets/svg/icons/search.svg'; +import {Input} from '../../../UI'; +import styles from './SearchToken.module.scss'; +import {SEARCH_PLACEHOLDER} from './SearchToken.strings'; + +export const SearchToken = ({tokens, onSearchResults}) => { + const [searchTerm, setSearchTerm] = useState(''); + + const handleChange = event => { + setSearchTerm(event.target.value); + }; + + useEffect(() => { + const results = tokens.filter(token => token.name.toLowerCase().includes(searchTerm)); + onSearchResults(results); + }, [searchTerm]); + + return ( + <div className={styles.searchToken}> + <SearchIcon /> + <Input + placeholder={SEARCH_PLACEHOLDER} + style={{fontSize: '20px', width: '100%'}} + value={searchTerm} + onChange={handleChange} + /> + </div> + ); +}; + +SearchToken.propTypes = { + tokens: PropTypes.array, + onSearchResults: PropTypes.func +}; diff --git a/src/components/Features/SelectToken/SearchToken/SearchToken.module.scss b/src/components/Features/SelectToken/SearchToken/SearchToken.module.scss new file mode 100644 index 00000000..080fc2d7 --- /dev/null +++ b/src/components/Features/SelectToken/SearchToken/SearchToken.module.scss @@ -0,0 +1,15 @@ +$border-color: rgba(255, 255, 255, 0.05); + +.searchToken { + display: flex; + flex-direction: row; + align-items: center; + margin: 15px 0 10px 0; + padding: 0 10px; + border: 1px solid $border-color; + border-radius: 7px; + + svg { + margin-right: 5px; + } +} diff --git a/src/components/Features/SelectToken/SearchToken/SearchToken.strings.js b/src/components/Features/SelectToken/SearchToken/SearchToken.strings.js new file mode 100644 index 00000000..e09c2e21 --- /dev/null +++ b/src/components/Features/SelectToken/SearchToken/SearchToken.strings.js @@ -0,0 +1 @@ +export const SEARCH_PLACEHOLDER = 'Token name, symbol, or address'; diff --git a/src/components/Features/SelectToken/SelectToken.js b/src/components/Features/SelectToken/SelectToken.js new file mode 100644 index 00000000..1dcbfa71 --- /dev/null +++ b/src/components/Features/SelectToken/SelectToken.js @@ -0,0 +1,64 @@ +import React, {useEffect, useState} from 'react'; + +import EthereumLogo from '../../../assets/svg/tokens/eth.svg'; +import StarkNetLogo from '../../../assets/svg/tokens/starknet.svg'; +import {useColors} from '../../../hooks'; +import {BackButton, Loading, Menu, MenuTitle} from '../../UI'; +import {LoadingSize} from '../../UI/Loading/Loading.enums'; +import {useBridgeActions} from '../Bridge/Bridge.hooks'; +import {useTransferActions, useTransferData} from '../Transfer/Transfer.hooks'; +import {SearchToken} from './SearchToken/SearchToken'; +import styles from './SelectToken.module.scss'; +import {TITLE_TXT} from './SelectToken.strings'; +import {SelectTokenList} from './SelectTokenList/SelectTokenList'; + +export const SelectToken = () => { + const isLoading = true; + const tokensData = []; + const {colorBeta} = useColors(); + const {showTransferMenu} = useBridgeActions(); + const {isEthereum, fromNetwork} = useTransferData(); + const {selectToken} = useTransferActions(); + const [searchTokens, setSearchTokens] = useState(tokensData); + + useEffect(() => { + setSearchTokens(tokensData); + }, [tokensData]); + + const onTokenSelect = tokenData => { + selectToken(tokenData); + showTransferMenu(); + }; + + return ( + <Menu> + <div className={styles.selectToken}> + <BackButton onClick={showTransferMenu} /> + <MenuTitle text={TITLE_TXT} /> + <MenuTitle color={colorBeta} text={fromNetwork.name} /> + <div> + {isLoading && ( + <div className="center"> + <Loading size={LoadingSize.EXTRA_LARGE} /> + </div> + )} + {!isLoading && ( + <> + <SearchToken + tokens={tokensData} + onSearchResults={searchResult => setSearchTokens(searchResult)} + /> + <SelectTokenList tokens={searchTokens} onClick={onTokenSelect} /> + </> + )} + </div> + <div + className={styles.background} + style={{ + backgroundImage: `url(${isEthereum ? EthereumLogo : StarkNetLogo})` + }} + /> + </div> + </Menu> + ); +}; diff --git a/src/components/Features/SelectToken/SelectToken.module.scss b/src/components/Features/SelectToken/SelectToken.module.scss new file mode 100644 index 00000000..15b01277 --- /dev/null +++ b/src/components/Features/SelectToken/SelectToken.module.scss @@ -0,0 +1,35 @@ +@import '../../../index'; + +$color: $--color-white; +$network-color: $--color-beta; + +.selectToken { + padding: 0 20px; + position: relative; + min-height: 400px; + + .background { + content: ''; + background-size: cover; + background-repeat: no-repeat; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + opacity: 0.05; + pointer-events: none; + } + + .title { + font-size: 26px; + font-weight: bold; + color: $color; + margin: 20px 0; + + span { + color: $network-color; + text-transform: capitalize; + } + } +} diff --git a/src/components/Features/SelectToken/SelectToken.strings.js b/src/components/Features/SelectToken/SelectToken.strings.js new file mode 100644 index 00000000..1fd5ca5f --- /dev/null +++ b/src/components/Features/SelectToken/SelectToken.strings.js @@ -0,0 +1 @@ +export const TITLE_TXT = 'Select token from'; diff --git a/src/components/Features/SelectToken/SelectTokenList/SelectTokenList.js b/src/components/Features/SelectToken/SelectTokenList/SelectTokenList.js new file mode 100644 index 00000000..a24f7b3f --- /dev/null +++ b/src/components/Features/SelectToken/SelectTokenList/SelectTokenList.js @@ -0,0 +1,28 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {SelectTokenRow} from '../SelectTokenRow/SelectTokenRow'; +import styles from './SelectTokenList.module.scss'; + +export const SelectTokenList = ({tokens, onClick}) => { + return ( + <div className={styles.selectTokenList}> + {tokens.map((tokenData, index) => { + return ( + <SelectTokenRow + key={index} + balance={tokenData.balance} + name={tokenData.name} + symbol={tokenData.symbol} + onClick={() => onClick(tokenData)} + /> + ); + })} + </div> + ); +}; + +SelectTokenList.propTypes = { + tokens: PropTypes.array, + onClick: PropTypes.func +}; diff --git a/src/components/Features/SelectToken/SelectTokenList/SelectTokenList.module.scss b/src/components/Features/SelectToken/SelectTokenList/SelectTokenList.module.scss new file mode 100644 index 00000000..9563feb7 --- /dev/null +++ b/src/components/Features/SelectToken/SelectTokenList/SelectTokenList.module.scss @@ -0,0 +1,4 @@ +.selectTokenList { + max-height: 100%; + overflow-y: auto; +} diff --git a/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js b/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js new file mode 100644 index 00000000..30e96345 --- /dev/null +++ b/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js @@ -0,0 +1,36 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {formatBalance} from '../../../../utils'; +import {CryptoLogo} from '../../../UI'; +import {CryptoLogoSize} from '../../../UI/CryptoLogo/CryptoLogo.enums'; +import styles from './SelectTokenRow.module.scss'; + +export const SelectTokenRow = ({name, balance, symbol, onClick}) => { + return ( + <div className={styles.selectTokenRow} onClick={onClick}> + <hr /> + <div className={styles.data}> + <div className={styles.left}> + <CryptoLogo size={CryptoLogoSize.MEDIUM} symbol={symbol} /> + <div> + <div className={styles.symbol}>{symbol}</div> + <div className={styles.name}>{name}</div> + </div> + </div> + <div className={styles.right}> + <div className={styles.balance}> + {formatBalance(balance)} {symbol} + </div> + </div> + </div> + </div> + ); +}; + +SelectTokenRow.propTypes = { + name: PropTypes.string, + balance: PropTypes.number, + symbol: PropTypes.string, + onClick: PropTypes.func +}; diff --git a/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.module.scss b/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.module.scss new file mode 100644 index 00000000..8cdbd882 --- /dev/null +++ b/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.module.scss @@ -0,0 +1,79 @@ +@import '../../../../index'; + +$hr-color: rgba(255, 255, 255, 0.05); +$symbol-color: $--color-white; +$name-color: $--color-alpha-6-hover; +$balance-color: $--color-alpha-6-hover; +$name-color-hover: $--color-white; +$balance-color-hover: $--color-white; + +.selectTokenRow { + cursor: pointer; + + &:first-child { + hr { + display: none; + } + } + + hr { + border-color: $hr-color; + } + + .data { + margin: 20px 0; + display: flex; + justify-content: space-between; + align-content: center; + flex-wrap: nowrap; + align-items: center; + + .left { + display: flex; + align-items: center; + + .symbol { + color: $symbol-color; + font-weight: 600; + font-size: 18px; + text-transform: uppercase; + transition: 0.4s ease-in-out; + margin: 3px 0; + } + + .name { + font-size: 16px; + color: $name-color; + text-transform: capitalize; + transition: 0.4s ease-in-out; + } + } + + .right { + .balance { + float: right; + font-size: 18px; + color: $balance-color; + text-transform: uppercase; + transition: 0.4s ease-in-out; + margin: 0 10px; + } + } + } + + &:hover { + .data { + .left { + .name { + color: $name-color-hover; + } + } + + .right { + .balance { + color: $balance-color-hover; + } + } + } + } +} diff --git a/src/components/Features/SelectToken/index.js b/src/components/Features/SelectToken/index.js new file mode 100644 index 00000000..98f256ce --- /dev/null +++ b/src/components/Features/SelectToken/index.js @@ -0,0 +1,3 @@ +export * from './SearchToken/SearchToken'; +export * from './SelectTokenList/SelectTokenList'; +export * from './SelectTokenRow/SelectTokenRow'; diff --git a/src/components/Features/Transfer/MaxButton/MaxButton.js b/src/components/Features/Transfer/MaxButton/MaxButton.js new file mode 100644 index 00000000..41e9c5fe --- /dev/null +++ b/src/components/Features/Transfer/MaxButton/MaxButton.js @@ -0,0 +1,17 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import styles from './MaxButton.module.scss'; +import {BTN_TXT} from './MaxButton.strings'; + +export const MaxButton = ({onClick}) => { + return ( + <div className={styles.maxButton} onClick={onClick}> + {BTN_TXT} + </div> + ); +}; + +MaxButton.propTypes = { + onClick: PropTypes.func +}; diff --git a/src/components/Features/Transfer/MaxButton/MaxButton.module.scss b/src/components/Features/Transfer/MaxButton/MaxButton.module.scss new file mode 100644 index 00000000..a6302afc --- /dev/null +++ b/src/components/Features/Transfer/MaxButton/MaxButton.module.scss @@ -0,0 +1,13 @@ +@import '../../../../index'; + +$color: $--color-white; + +.maxButton { + text-transform: uppercase; + font-weight: 600; + font-size: 15px; + color: $color; + cursor: pointer; + z-index: 1; + margin: 0 20px; +} diff --git a/src/components/Features/Transfer/MaxButton/MaxButton.strings.js b/src/components/Features/Transfer/MaxButton/MaxButton.strings.js new file mode 100644 index 00000000..0d9a018c --- /dev/null +++ b/src/components/Features/Transfer/MaxButton/MaxButton.strings.js @@ -0,0 +1 @@ +export const BTN_TXT = 'max'; diff --git a/src/components/Features/Transfer/NetworkMenu/NetworkMenu.js b/src/components/Features/Transfer/NetworkMenu/NetworkMenu.js new file mode 100644 index 00000000..1ad33bfd --- /dev/null +++ b/src/components/Features/Transfer/NetworkMenu/NetworkMenu.js @@ -0,0 +1,27 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {Badge} from '../../../UI'; +import {NetworkTitle} from '../NetworkTitle/NetworkTitle'; +import {TokenBalance} from '../TokenBalance/TokenBalance'; +import styles from './NetworkMenu.module.scss'; + +export const NetworkMenu = ({title, networkData, tokenData, children}) => { + return ( + <div className={styles.networkMenu}> + <Badge text={title} /> + <div className={styles.networkContainer}> + <NetworkTitle networkData={networkData} /> + <TokenBalance balance={tokenData.balance} symbol={tokenData.symbol} /> + </div> + {children} + </div> + ); +}; + +NetworkMenu.propTypes = { + title: PropTypes.string, + networkData: PropTypes.object, + tokenData: PropTypes.object, + children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) +}; diff --git a/src/components/Features/Transfer/NetworkMenu/NetworkMenu.module.scss b/src/components/Features/Transfer/NetworkMenu/NetworkMenu.module.scss new file mode 100644 index 00000000..e2e80db8 --- /dev/null +++ b/src/components/Features/Transfer/NetworkMenu/NetworkMenu.module.scss @@ -0,0 +1,19 @@ +@import '../../../../index'; + +$background-color: $--color-alpha-1; +$box-shadow-color: rgba(0, 0, 0, 0.1); + +.networkMenu { + background: $background-color; + box-shadow: 0 4px 30px $box-shadow-color; + border-radius: 20px; + height: 100%; + margin-top: 10px; + padding: 30px 40px; + + .networkContainer { + display: flex; + justify-content: space-between; + align-items: center; + } +} diff --git a/src/components/Features/Transfer/NetworkSwap/NetworkSwap.js b/src/components/Features/Transfer/NetworkSwap/NetworkSwap.js new file mode 100644 index 00000000..3f72181e --- /dev/null +++ b/src/components/Features/Transfer/NetworkSwap/NetworkSwap.js @@ -0,0 +1,31 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {ReactComponent as SwapIcon} from '../../../../assets/svg/icons/swap.svg'; +import {useColors} from '../../../../hooks'; +import {toClasses} from '../../../../utils'; +import {Circle} from '../../../UI'; +import styles from './NetworkSwap.module.scss'; + +export const NetworkSwap = ({isFlipped, onClick}) => { + const {colorAlpha5} = useColors(); + + return ( + <div className={toClasses(styles.networkSwap, isFlipped && styles.flipped)} onClick={onClick}> + <Circle + color={colorAlpha5} + size={50} + style={{ + boxShadow: '0px 5px 35px rgba(0, 0, 0, 0.30)' + }} + > + <SwapIcon /> + </Circle> + </div> + ); +}; + +NetworkSwap.propTypes = { + isFlipped: PropTypes.bool, + onClick: PropTypes.func +}; diff --git a/src/components/Features/Transfer/NetworkSwap/NetworkSwap.module.scss b/src/components/Features/Transfer/NetworkSwap/NetworkSwap.module.scss new file mode 100644 index 00000000..376a2889 --- /dev/null +++ b/src/components/Features/Transfer/NetworkSwap/NetworkSwap.module.scss @@ -0,0 +1,27 @@ +.networkSwap { + position: absolute; + margin: 10px auto auto auto; + z-index: 1; + left: 50%; + transform: translate(-50%); + cursor: pointer; + transition: 0.3s ease-in-out; + + &.flipped { + svg { + transform: scale(1, -1); + } + } + + svg { + transition: 0.2s ease-in-out; + margin: auto; + height: 100%; + display: flex; + width: 25px; + } + + &:hover { + filter: brightness(1.4); + } +} diff --git a/src/components/Features/Transfer/NetworkTitle/NetworkTitle.js b/src/components/Features/Transfer/NetworkTitle/NetworkTitle.js new file mode 100644 index 00000000..baeb9044 --- /dev/null +++ b/src/components/Features/Transfer/NetworkTitle/NetworkTitle.js @@ -0,0 +1,19 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {CryptoLogo} from '../../../UI'; +import {CryptoLogoSize} from '../../../UI/CryptoLogo/CryptoLogo.enums'; +import styles from './NetworkTitle.module.scss'; + +export const NetworkTitle = ({networkData}) => { + return ( + <div className={styles.networkTitle}> + <CryptoLogo size={CryptoLogoSize.MEDIUM} symbol={networkData.symbol} /> + {networkData.name} + </div> + ); +}; + +NetworkTitle.propTypes = { + networkData: PropTypes.object +}; diff --git a/src/components/Features/Transfer/NetworkTitle/NetworkTitle.module.scss b/src/components/Features/Transfer/NetworkTitle/NetworkTitle.module.scss new file mode 100644 index 00000000..f18fa84b --- /dev/null +++ b/src/components/Features/Transfer/NetworkTitle/NetworkTitle.module.scss @@ -0,0 +1,12 @@ +@import '../../../../index'; + +$color: $--color-white; + +.networkTitle { + display: flex; + align-items: center; + font-weight: 600; + font-size: 15px; + color: $color; + text-transform: capitalize; +} diff --git a/src/components/Features/Transfer/TokenBalance/TokenBalance.js b/src/components/Features/Transfer/TokenBalance/TokenBalance.js new file mode 100644 index 00000000..69e070c8 --- /dev/null +++ b/src/components/Features/Transfer/TokenBalance/TokenBalance.js @@ -0,0 +1,32 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {useIsLoading} from '../../../../hooks'; +import {formatBalance} from '../../../../utils'; +import {Loading} from '../../../UI'; +import {LoadingSize} from '../../../UI/Loading/Loading.enums'; +import styles from './TokenBalance.module.scss'; +import {TITLE_TXT} from './TokenBalance.strings'; + +export const TokenBalance = ({symbol, balance}) => { + const isLoading = useIsLoading(symbol); + + return ( + <div className={styles.tokenBalance}> + {isLoading && <Loading size={LoadingSize.SMALL} />} + {!isLoading && ( + <> + <span>{TITLE_TXT}</span> + <div className={styles.balance}> + {formatBalance(balance)} {symbol} + </div> + </> + )} + </div> + ); +}; + +TokenBalance.propTypes = { + symbol: PropTypes.string, + balance: PropTypes.number +}; diff --git a/src/components/Features/Transfer/TokenBalance/TokenBalance.module.scss b/src/components/Features/Transfer/TokenBalance/TokenBalance.module.scss new file mode 100644 index 00000000..ec12b5a7 --- /dev/null +++ b/src/components/Features/Transfer/TokenBalance/TokenBalance.module.scss @@ -0,0 +1,16 @@ +@import '../../../../index'; + +$color: $--color-alpha-6; +$balance-color: $--color-white; + +.tokenBalance { + color: $color; + font-size: 14px; + text-align: right; + letter-spacing: 0.01em; + + .balance { + line-height: 24px; + color: $balance-color; + } +} diff --git a/src/components/Features/Transfer/TokenBalance/TokenBalance.strings.js b/src/components/Features/Transfer/TokenBalance/TokenBalance.strings.js new file mode 100644 index 00000000..cf1cc987 --- /dev/null +++ b/src/components/Features/Transfer/TokenBalance/TokenBalance.strings.js @@ -0,0 +1 @@ +export const TITLE_TXT = 'Available balance'; diff --git a/src/components/Features/Transfer/TokenInput/TokenInput.js b/src/components/Features/Transfer/TokenInput/TokenInput.js new file mode 100644 index 00000000..6b69364d --- /dev/null +++ b/src/components/Features/Transfer/TokenInput/TokenInput.js @@ -0,0 +1,44 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {toClasses} from '../../../../utils'; +import {Input} from '../../../UI'; +import {MaxButton} from '../MaxButton/MaxButton'; +import {TokenSelector} from '../TokenSelector/TokenSelector'; +import styles from './TokenInput.module.scss'; +import {INPUT_PLACEHOLDER} from './TokenInput.strings'; + +export const TokenInput = ({ + value, + hasError, + selectedToken, + onMaxClick, + onTokenSelect, + onInputChange +}) => { + return ( + <div className={toClasses(styles.tokenInput, hasError && styles.hasError)}> + <Input + placeholder={INPUT_PLACEHOLDER} + style={{ + fontSize: '24px', + fontWeight: '600' + }} + type="number" + value={value} + onChange={onInputChange} + /> + <MaxButton onClick={onMaxClick} /> + <TokenSelector tokenData={selectedToken} onClick={onTokenSelect} /> + </div> + ); +}; + +TokenInput.propTypes = { + value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), + hasError: PropTypes.bool, + selectedToken: PropTypes.object, + onMaxClick: PropTypes.func, + onTokenSelect: PropTypes.func, + onInputChange: PropTypes.func +}; diff --git a/src/components/Features/Transfer/TokenInput/TokenInput.module.scss b/src/components/Features/Transfer/TokenInput/TokenInput.module.scss new file mode 100644 index 00000000..a5780534 --- /dev/null +++ b/src/components/Features/Transfer/TokenInput/TokenInput.module.scss @@ -0,0 +1,23 @@ +@import '../../../../index'; + +$background-color: $--color-alpha-2; +$error-color: $--color-error; + +.tokenInput { + display: flex; + flex-direction: row; + align-items: center; + background: $background-color; + height: 50px; + margin: 20px 0; + padding: 10px; + border-radius: 7px; + transition: 0.3s ease-in-out; + + &.hasError { + margin: 20px 0 10px 0; + border-color: $error-color; + border-style: solid; + border-width: 1px; + } +} diff --git a/src/components/Features/Transfer/TokenInput/TokenInput.strings.js b/src/components/Features/Transfer/TokenInput/TokenInput.strings.js new file mode 100644 index 00000000..65ad1a0e --- /dev/null +++ b/src/components/Features/Transfer/TokenInput/TokenInput.strings.js @@ -0,0 +1 @@ +export const INPUT_PLACEHOLDER = '0.00'; diff --git a/src/components/Features/Transfer/TokenSelector/TokenSelector.js b/src/components/Features/Transfer/TokenSelector/TokenSelector.js new file mode 100644 index 00000000..04685457 --- /dev/null +++ b/src/components/Features/Transfer/TokenSelector/TokenSelector.js @@ -0,0 +1,34 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {ReactComponent as DownArrowIcon} from '../../../../assets/svg/icons/collapse.svg'; +import {useColors, useIsLoading} from '../../../../hooks'; +import {CryptoLogo, Icon, Loading} from '../../../UI'; +import {CryptoLogoSize} from '../../../UI/CryptoLogo/CryptoLogo.enums'; +import {LoadingSize} from '../../../UI/Loading/Loading.enums'; +import styles from './TokenSelector.module.scss'; + +export const TokenSelector = ({tokenData, onClick}) => { + const {colorAlpha5} = useColors(); + const isLoading = useIsLoading(tokenData.symbol); + + return ( + <div className={styles.tokenSelector} onClick={onClick}> + {isLoading && <Loading size={LoadingSize.SMALL} />} + {!isLoading && ( + <> + <CryptoLogo color={colorAlpha5} size={CryptoLogoSize.SMALL} symbol={tokenData?.symbol} /> + {tokenData.symbol} + </> + )} + <Icon isClickable={true}> + <DownArrowIcon /> + </Icon> + </div> + ); +}; + +TokenSelector.propTypes = { + tokenData: PropTypes.object, + onClick: PropTypes.func +}; diff --git a/src/components/Features/Transfer/TokenSelector/TokenSelector.module.scss b/src/components/Features/Transfer/TokenSelector/TokenSelector.module.scss new file mode 100644 index 00000000..d8a11554 --- /dev/null +++ b/src/components/Features/Transfer/TokenSelector/TokenSelector.module.scss @@ -0,0 +1,25 @@ +@import '../../../../index'; + +$color: $--color-alpha-6; +$background-color: $--color-alpha-5; +$color-hover: $--color-alpha-6-hover; +$background-color-hover: $--color-alpha-5-hover; + +.tokenSelector { + display: flex; + align-items: center; + font-weight: 500; + font-size: 15px; + color: $color; + text-transform: capitalize; + cursor: pointer; + padding: 10px 5px 10px 15px; + background: $background-color; + border-radius: 7px; + transition: 0.3s ease-in-out; + + &:hover { + color: $color-hover; + background: $background-color-hover; + } +} diff --git a/src/components/Features/Transfer/Transfer.hooks.js b/src/components/Features/Transfer/Transfer.hooks.js new file mode 100644 index 00000000..752b3c65 --- /dev/null +++ b/src/components/Features/Transfer/Transfer.hooks.js @@ -0,0 +1,84 @@ +import {useCallback} from 'react'; +import {useDispatch, useSelector} from 'react-redux'; + +import {ActionType} from '../../../enums'; +import { + fromNetworkSelector, + fromStarknetSelector, + getCurrentAmountSelector, + selectTransfer, + toNetworkSelector, + toStarknetSelector +} from './Transfer.selectors'; +import {resetAction, selectTokenAction, setAmountAction, setTransferAction} from './Transfer.slice'; + +export const useTransferActions = () => { + return { + setAmount: useSetAmount(), + setActionType: useSetActionType(), + selectToken: useSelectToken(), + resetTransfer: useResetTransfer() + }; +}; + +export const useTransferData = () => { + return { + ...useSelector(selectTransfer), + isEthereum: useSelector(toStarknetSelector), + isStarknet: useSelector(fromStarknetSelector), + fromNetwork: useSelector(fromNetworkSelector), + toNetwork: useSelector(toNetworkSelector) + }; +}; + +export const useAmount = () => { + const amount = useSelector(getCurrentAmountSelector); + const setAmount = useSetAmount(); + return [amount, setAmount]; +}; + +export const useIsEthereum = () => { + const isEthereum = useSelector(toStarknetSelector); + const setEthereum = useSetActionType(ActionType.TRANSFER_TO_STARKNET); + return [isEthereum, setEthereum]; +}; + +export const useIsStarknet = () => { + const isStarknet = useSelector(fromStarknetSelector); + const setStarknet = useSetActionType(ActionType.TRANSFER_FROM_STARKNET); + return [isStarknet, setStarknet]; +}; + +const useSetAmount = () => { + const dispatch = useDispatch(); + return useCallback( + amount => { + dispatch(setAmountAction(amount)); + }, + [dispatch] + ); +}; + +const useSetActionType = action => { + const dispatch = useDispatch(); + return useCallback(() => { + dispatch(setTransferAction(action)); + }, [dispatch]); +}; + +const useSelectToken = () => { + const dispatch = useDispatch(); + return useCallback( + token => { + dispatch(selectTokenAction(token)); + }, + [dispatch] + ); +}; + +const useResetTransfer = () => { + const dispatch = useDispatch(); + return useCallback(() => { + dispatch(resetAction()); + }, [dispatch]); +}; diff --git a/src/components/Features/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer.js new file mode 100644 index 00000000..ba72d7ff --- /dev/null +++ b/src/components/Features/Transfer/Transfer.js @@ -0,0 +1,94 @@ +import React, {useEffect, useState} from 'react'; + +import {NetworkMenu, NetworkSwap, TokenInput, TransferButton} from '.'; +import {ActionType, NetworkType} from '../../../enums'; +import {Menu} from '../../UI'; +import {useBridgeActions} from '../Bridge/Bridge.hooks'; +import {useAmount, useIsEthereum, useIsStarknet, useTransferData} from './Transfer.hooks'; +import styles from './Transfer.module.scss'; +import {INSUFFICIENT_BALANCE_ERROR_MSG} from './Transfer.strings.js'; +import {TransferMenuTab} from './TransferMenuTab/TransferMenuTab'; + +export const Transfer = () => { + const [hasError, setHasError] = useState(false); + const [isButtonDisabled, setIsButtonDisabled] = useState(true); + const [errorMsg, setErrorMsg] = useState(''); + const {action, selectedToken, fromNetwork, toNetwork} = useTransferData(); + const {showSelectTokenMenu} = useBridgeActions(); + const [isEthereum, setEthereum] = useIsEthereum(); + const [isStarknet, setStarknet] = useIsStarknet(); + const [amount, setAmount] = useAmount(); + + useEffect(() => { + setAmount(''); + }, [selectedToken]); + + useEffect(() => { + if (Math.ceil(amount) === 0) { + setHasError(false); + setIsButtonDisabled(true); + } else { + if (amount > selectedToken.balance) { + setHasError(true); + setIsButtonDisabled(true); + setErrorMsg(INSUFFICIENT_BALANCE_ERROR_MSG); + } else { + setHasError(false); + setIsButtonDisabled(false); + } + } + }, [amount, action]); + + const onMaxClick = () => { + setAmount(selectedToken.balance); + }; + + const onInputChange = event => { + setAmount(event.target.value); + }; + + const onSwapClick = () => { + isEthereum ? setStarknet() : setEthereum(); + }; + + const renderTabs = () => { + return Object.values(ActionType).map((tab, index) => { + return ( + <TransferMenuTab + key={index} + isActive={action === tab} + text={ + tab === ActionType.TRANSFER_TO_STARKNET + ? NetworkType.ETHEREUM.name + : NetworkType.STARKNET.name + } + onClick={() => action !== tab && onSwapClick()} + /> + ); + }); + }; + + return ( + <Menu> + <div className={styles.transfer}> + <div className={styles.tabsContainer}>{renderTabs()}</div> + <div className={styles.container}> + <NetworkMenu networkData={fromNetwork} title="from" tokenData={selectedToken}> + <TokenInput + hasError={hasError} + selectedToken={selectedToken} + value={amount} + onInputChange={onInputChange} + onMaxClick={onMaxClick} + onTokenSelect={showSelectTokenMenu} + /> + {hasError && <div className={styles.errorMsg}>{errorMsg}</div>} + <TransferButton isDisabled={isButtonDisabled} onClick={() => {}} /> + <NetworkSwap isFlipped={isStarknet} onClick={onSwapClick} /> + </NetworkMenu> + <NetworkMenu networkData={toNetwork} title="to" tokenData={selectedToken} /> + </div> + </div> + </Menu> + ); +}; diff --git a/src/components/Features/Transfer/Transfer.module.scss b/src/components/Features/Transfer/Transfer.module.scss new file mode 100644 index 00000000..083e9cdb --- /dev/null +++ b/src/components/Features/Transfer/Transfer.module.scss @@ -0,0 +1,26 @@ +@import '../../../index'; + +$background-color: $--color-alpha-1; +$error-msg-color: $--color-error; + +.transfer { + .tabsContainer { + display: flex; + background: $background-color; + border-radius: 10px; + padding: 10px; + } + + .container { + height: 100%; + display: flex; + flex-direction: column; + transition: 0.3s ease-in-out; + + .errorMsg { + font-size: 12px; + line-height: 24px; + color: $error-msg-color; + } + } +} diff --git a/src/components/Features/Transfer/Transfer.selectors.js b/src/components/Features/Transfer/Transfer.selectors.js new file mode 100644 index 00000000..86b09f8a --- /dev/null +++ b/src/components/Features/Transfer/Transfer.selectors.js @@ -0,0 +1,39 @@ +import {createSelector} from '@reduxjs/toolkit'; + +import {ActionType, NetworkType} from '../../../enums'; + +export const selectTransfer = state => state.transfer; + +export const selectTransferAction = state => state.transfer.action; + +export const selectWithdrawAmount = state => state.transfer.withdrawAmount; + +export const selectDepositAmount = state => state.transfer.depositAmount; + +export const toStarknetSelector = createSelector( + selectTransferAction, + action => action === ActionType.TRANSFER_TO_STARKNET +); + +export const fromStarknetSelector = createSelector( + selectTransferAction, + action => action === ActionType.TRANSFER_FROM_STARKNET +); + +export const fromNetworkSelector = createSelector(selectTransferAction, action => + action === ActionType.TRANSFER_TO_STARKNET ? NetworkType.ETHEREUM : NetworkType.STARKNET +); + +export const toNetworkSelector = createSelector(selectTransferAction, action => + action === ActionType.TRANSFER_TO_STARKNET ? NetworkType.STARKNET : NetworkType.ETHEREUM +); + +export const getCurrentAmountSelector = createSelector( + [selectTransferAction, selectDepositAmount, selectWithdrawAmount], + (action, depositAmount, withdrawAmount) => { + if (action === ActionType.TRANSFER_TO_STARKNET) { + return depositAmount; + } + return withdrawAmount; + } +); diff --git a/src/components/Features/Transfer/Transfer.slice.js b/src/components/Features/Transfer/Transfer.slice.js new file mode 100644 index 00000000..6271c29d --- /dev/null +++ b/src/components/Features/Transfer/Transfer.slice.js @@ -0,0 +1,38 @@ +import {createSlice} from '@reduxjs/toolkit'; + +import {ActionType, NetworkType} from '../../../enums'; + +const initialState = { + selectedToken: {balance: 0, name: NetworkType.ETHEREUM.name, symbol: NetworkType.ETHEREUM.symbol}, + action: ActionType.TRANSFER_TO_STARKNET, + depositAmount: '', + withdrawAmount: '' +}; + +const transferSlice = createSlice({ + name: 'transfer', + initialState, + reducers: { + selectTokenAction(state, action) { + state.selectedToken = action.payload; + }, + setTransferAction(state, action) { + state.action = action.payload; + }, + setAmountAction(state, action) { + if (state.action === ActionType.TRANSFER_TO_STARKNET) { + state.depositAmount = action.payload; + } else { + state.withdrawAmount = action.payload; + } + }, + resetAction(state) { + Object.assign(state, initialState); + } + } +}); + +export const {selectTokenAction, setTransferAction, setAmountAction, resetAction} = + transferSlice.actions; + +export default transferSlice.reducer; diff --git a/src/components/Features/Transfer/Transfer.strings.js b/src/components/Features/Transfer/Transfer.strings.js new file mode 100644 index 00000000..4ce0ec4d --- /dev/null +++ b/src/components/Features/Transfer/Transfer.strings.js @@ -0,0 +1 @@ +export const INSUFFICIENT_BALANCE_ERROR_MSG = 'Insufficient balance'; diff --git a/src/components/Features/Transfer/TransferButton/TransferButton.js b/src/components/Features/Transfer/TransferButton/TransferButton.js new file mode 100644 index 00000000..7c6f8aed --- /dev/null +++ b/src/components/Features/Transfer/TransferButton/TransferButton.js @@ -0,0 +1,32 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {useColors} from '../../../../hooks'; +import {Button} from '../../../UI'; +import {BTN_TXT} from './TransferButton.strings'; + +export const TransferButton = ({onClick, isDisabled}) => { + const {colorBeta, colorWhite} = useColors(); + + return ( + <Button + colorBackground={colorBeta} + colorBorder={colorBeta} + colorText={colorWhite} + height={50} + isDisabled={isDisabled} + style={{ + width: '100%', + borderRadius: '7px', + fontSize: '16px' + }} + text={BTN_TXT} + onClick={onClick} + /> + ); +}; + +TransferButton.propTypes = { + onClick: PropTypes.func, + isDisabled: PropTypes.bool +}; diff --git a/src/components/Features/Transfer/TransferButton/TransferButton.strings.js b/src/components/Features/Transfer/TransferButton/TransferButton.strings.js new file mode 100644 index 00000000..51b58167 --- /dev/null +++ b/src/components/Features/Transfer/TransferButton/TransferButton.strings.js @@ -0,0 +1 @@ +export const BTN_TXT = 'transfer'; diff --git a/src/components/Features/Transfer/TransferMenuTab/TransferMenuTab.js b/src/components/Features/Transfer/TransferMenuTab/TransferMenuTab.js new file mode 100644 index 00000000..792f1a86 --- /dev/null +++ b/src/components/Features/Transfer/TransferMenuTab/TransferMenuTab.js @@ -0,0 +1,22 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {toClasses} from '../../../../utils'; +import styles from './TransferMenuTab.module.scss'; + +export const TransferMenuTab = ({text, isActive, onClick}) => { + return ( + <div + className={toClasses(styles.transferMenuTab, isActive && styles.isActive)} + onClick={onClick} + > + {text} + </div> + ); +}; + +TransferMenuTab.propTypes = { + text: PropTypes.string, + isActive: PropTypes.bool, + onClick: PropTypes.func +}; diff --git a/src/components/Features/Transfer/TransferMenuTab/TransferMenuTab.module.scss b/src/components/Features/Transfer/TransferMenuTab/TransferMenuTab.module.scss new file mode 100644 index 00000000..e0a0a90f --- /dev/null +++ b/src/components/Features/Transfer/TransferMenuTab/TransferMenuTab.module.scss @@ -0,0 +1,26 @@ +@import '../../../../index'; + +$background-color: $--color-alpha-1; +$color: $--color-white; +$active-background-color: $--color-alpha-4; +$active-box-shadow-color: rgba(0, 0, 0, 0.1); + +.transferMenuTab { + background: $background-color; + border-radius: 10px; + font-weight: 500; + font-size: 14px; + line-height: 24px; + color: $color; + padding: 5px; + text-align: center; + width: 100%; + text-transform: capitalize; + cursor: pointer; + transition: 0.3s ease-in-out; + + &.isActive { + background: $active-background-color; + box-shadow: 0 4px 10px $active-box-shadow-color; + } +} diff --git a/src/components/Features/Transfer/index.js b/src/components/Features/Transfer/index.js new file mode 100644 index 00000000..b259a8fe --- /dev/null +++ b/src/components/Features/Transfer/index.js @@ -0,0 +1,9 @@ +export * from './MaxButton/MaxButton'; +export * from './NetworkMenu/NetworkMenu'; +export * from './NetworkSwap/NetworkSwap'; +export * from './NetworkTitle/NetworkTitle'; +export * from './TokenBalance/TokenBalance'; +export * from './TokenInput/TokenInput'; +export * from './TokenSelector/TokenSelector'; +export * from './TransferButton/TransferButton'; +export * from './TransferMenuTab/TransferMenuTab.module.scss'; diff --git a/src/components/Features/Wallet/Wallet.enums.js b/src/components/Features/Wallet/Wallet.enums.js new file mode 100644 index 00000000..0d9c758a --- /dev/null +++ b/src/components/Features/Wallet/Wallet.enums.js @@ -0,0 +1,6 @@ +export const WalletStatus = { + DISCONNECTED: 'disconnected', + CONNECTING: 'connecting', + CONNECTED: 'connected', + ERROR: 'error' +}; diff --git a/src/components/Features/Wallet/Wallet.hooks.js b/src/components/Features/Wallet/Wallet.hooks.js new file mode 100644 index 00000000..0723b501 --- /dev/null +++ b/src/components/Features/Wallet/Wallet.hooks.js @@ -0,0 +1,7 @@ +import {useContext} from 'react'; + +import {WalletsContext} from './Wallets.context'; + +export const useWallets = () => { + return useContext(WalletsContext); +}; diff --git a/src/components/Features/Wallet/WalletButton/WalletButton.constants.js b/src/components/Features/Wallet/WalletButton/WalletButton.constants.js new file mode 100644 index 00000000..83199cde --- /dev/null +++ b/src/components/Features/Wallet/WalletButton/WalletButton.constants.js @@ -0,0 +1,2 @@ +export const MODAL_TIMEOUT_DURATION = 2000; +export const WALLET_LOGO_SIZE = 30; diff --git a/src/components/Features/Wallet/WalletButton/WalletButton.js b/src/components/Features/Wallet/WalletButton/WalletButton.js new file mode 100644 index 00000000..e08ba804 --- /dev/null +++ b/src/components/Features/Wallet/WalletButton/WalletButton.js @@ -0,0 +1,32 @@ +import React from 'react'; + +import {useColors} from '../../../../hooks'; +import {formatAddress} from '../../../../utils'; +import {Button, DynamicIcon} from '../../../UI'; +import {useBridgeActions} from '../../Bridge/Bridge.hooks'; +import {useWallets} from '../Wallet.hooks'; +import {WALLET_LOGO_SIZE} from './WalletButton.constants'; +import {BTN_TXT} from './WalletButton.strings'; + +export const WalletButton = () => { + const {colorBeta, colorWhite} = useColors(); + const {showAccountMenu} = useBridgeActions(); + const {account, isConnected, logoPath} = useWallets(); + + return ( + <> + {isConnected && ( + <Button + colorBackground="transparent" + colorBorder={colorBeta} + colorText={colorWhite} + height={40} + icon={<DynamicIcon path={logoPath} size={WALLET_LOGO_SIZE} />} + style={{borderWidth: '2px'}} + text={BTN_TXT(formatAddress(account))} + onClick={showAccountMenu} + /> + )} + </> + ); +}; diff --git a/src/components/Features/Wallet/WalletButton/WalletButton.strings.js b/src/components/Features/Wallet/WalletButton/WalletButton.strings.js new file mode 100644 index 00000000..f7e967ad --- /dev/null +++ b/src/components/Features/Wallet/WalletButton/WalletButton.strings.js @@ -0,0 +1,3 @@ +import {evaluate} from '../../../../utils'; + +export const BTN_TXT = address => evaluate('Account | {{address}}', {address}); diff --git a/src/components/Features/Wallet/WalletLogin/WalletLogin.js b/src/components/Features/Wallet/WalletLogin/WalletLogin.js new file mode 100644 index 00000000..edfb5765 --- /dev/null +++ b/src/components/Features/Wallet/WalletLogin/WalletLogin.js @@ -0,0 +1,32 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {ReactComponent as ForwardIcon} from '../../../../assets/svg/icons/forward.svg'; +import {capitalize} from '../../../../utils'; +import {DynamicIcon} from '../../../UI'; +import styles from './WalletLogin.module.scss'; + +export const WalletLogin = ({name, description, logoPath, onClick}) => { + return ( + <> + <div className={styles.walletLogin} onClick={onClick}> + <div className={styles.left}> + <DynamicIcon path={logoPath} size={41} /> + <div className={styles.text}> + <div className={styles.title}>{capitalize(name)}</div> + <div className={styles.description}>{capitalize(description)}</div> + </div> + </div> + <ForwardIcon /> + </div> + <div className={styles.separator} /> + </> + ); +}; + +WalletLogin.propTypes = { + name: PropTypes.string, + description: PropTypes.string, + logoPath: PropTypes.string, + onClick: PropTypes.func +}; diff --git a/src/components/Features/Wallet/WalletLogin/WalletLogin.module.scss b/src/components/Features/Wallet/WalletLogin/WalletLogin.module.scss new file mode 100644 index 00000000..878d5da6 --- /dev/null +++ b/src/components/Features/Wallet/WalletLogin/WalletLogin.module.scss @@ -0,0 +1,66 @@ +@import '../../../../index'; + +$text-color: $--color-white; +$background-color-hover: $--color-alpha-1; + +.walletLogin { + display: flex; + padding: 15px 20px; + cursor: pointer; + transition: 0.3s ease-in-out; + align-items: center; + justify-content: space-between; + + .left { + display: flex; + + .text { + display: flex; + flex-direction: column; + margin-left: 20px; + + .title { + font-weight: 500; + font-size: 18px; + display: flex; + align-items: center; + line-height: 150%; + color: $text-color; + } + + .description { + font-size: 12px; + display: flex; + align-items: center; + color: $text-color; + opacity: 0.5; + line-height: 150%; + } + } + } + + svg { + transition: 0.3s ease-in-out; + } + + &:hover { + background: $background-color-hover; + box-sizing: border-box; + border-radius: 8px; + + svg { + transform: scale(2) scale3d(1, -1, -2); + } + } +} + +.separator { + display: none; + + &:not(:last-child) { + display: block; + height: 1px; + width: 100%; + background: $--color-alpha-3; + } +} diff --git a/src/components/Features/Wallet/Wallets.context.js b/src/components/Features/Wallet/Wallets.context.js new file mode 100644 index 00000000..51e83009 --- /dev/null +++ b/src/components/Features/Wallet/Wallets.context.js @@ -0,0 +1,15 @@ +import {createContext} from 'react'; + +import {WalletStatus} from './Wallet.enums'; + +export const WalletsContext = createContext({ + account: '', + isConnected: false, + status: WalletStatus.DISCONNECTED, + chainName: '', + chainId: -1, + error: null, + connectWallet: () => {}, + resetWallet: () => {}, + swapWallets: () => {} +}); diff --git a/src/components/Features/Wallet/Wallets.reducer.js b/src/components/Features/Wallet/Wallets.reducer.js new file mode 100644 index 00000000..e82bc977 --- /dev/null +++ b/src/components/Features/Wallet/Wallets.reducer.js @@ -0,0 +1,55 @@ +import {WalletStatus} from './Wallet.enums'; + +export const actions = { + SET_ACTIVE_WALLET_ACTION: 'Wallets/SET_ACTIVE_WALLET_ACTION', + RESET_ACTIVE_WALLET_ACTION: 'Wallets/RESET_ACTIVE_WALLET_ACTION', + SET_WALLET_CONFIG_ACTION: 'Wallets/SET_WALLET_CONFIG_ACTION', + RESET_WALLET_CONFIG_ACTION: 'Wallets/RESET_WALLET_CONFIG_ACTION' +}; + +export const initialState = { + activeWallet: { + account: '', + isConnected: false, + status: WalletStatus.DISCONNECTED, + chainName: '', + chainId: -1, + error: null + }, + l1WalletConfig: null, + l2WalletConfig: null +}; + +export const reducer = (state, action) => { + switch (action.type) { + case actions.SET_ACTIVE_WALLET_ACTION: + return { + ...state, + activeWallet: action.payload + }; + + case actions.RESET_ACTIVE_WALLET_ACTION: + return { + ...state, + activeWallet: initialState.activeWallet + }; + + case actions.SET_WALLET_CONFIG_ACTION: { + const walletConfig = action.payload; + return { + ...state, + [`l${walletConfig.type}WalletConfig`]: walletConfig + }; + } + + case actions.RESET_WALLET_CONFIG_ACTION: { + return { + ...state, + [`l${state.activeWallet.type}WalletConfig`]: null + }; + } + + default: + return state; + } +}; diff --git a/src/components/Features/Wallet/WalletsProvider.js b/src/components/Features/Wallet/WalletsProvider.js new file mode 100644 index 00000000..e01e1bd2 --- /dev/null +++ b/src/components/Features/Wallet/WalletsProvider.js @@ -0,0 +1,179 @@ +import {getStarknet} from '@argent/get-starknet'; +import PropTypes from 'prop-types'; +import React, {useEffect, useReducer, useState} from 'react'; +import {useWallet} from 'use-wallet'; + +import {WalletType} from '../../../enums'; +import {useIsEthereum, useIsStarknet, useTransferData} from '../Transfer/Transfer.hooks'; +import {WalletStatus} from './Wallet.enums'; +import {WalletsContext} from './Wallets.context'; +import {actions, initialState, reducer} from './Wallets.reducer'; + +export const WalletsProvider = ({children}) => { + const [state, dispatch] = useReducer(reducer, initialState); + const [pendingWalletConfig, setPendingWalletConfig] = useState({}); + const {status, connect, reset, isConnected, error, account, chainId, networkName} = useWallet(); + const {selectedAddress, isConnected: isStarknetConnected, enable} = getStarknet(); + const {action} = useTransferData(); + const [isEthereum, setEthereum] = useIsEthereum(); + const [isStarknet, setStarknet] = useIsStarknet(); + const walletConfigMap = { + [WalletType.L1]: state.l1WalletConfig, + [WalletType.L2]: state.l2WalletConfig + }; + + // Handles action change + useEffect(async () => { + if (isEthereum && isConnected()) { + setL1Wallet(); + } else if (isStarknet && isStarknetConnected) { + await setL2Wallet(); + } else { + resetActiveWallet(); + } + }, [action]); + + // Handles L2 wallet changes + useEffect(async () => { + if (isStarknet) { + if (isStarknetConnected && !isWalletConnected(WalletType.L2)) { + setWalletConfig(); + } + await setL2Wallet(); + } + }, [selectedAddress, isStarknetConnected]); + + // Handles L1 wallet changes + useEffect(async () => { + if (isEthereum) { + if (isConnected() && !isWalletConnected(WalletType.L1)) { + setWalletConfig(); + } + setL1Wallet(); + } + }, [status, error, account, chainId, networkName]); + + const connectWallet = async walletConfig => { + setPendingWalletConfig(walletConfig); + if (isEthereum) { + const {connectorId} = walletConfig; + await connect(connectorId); + setL1Wallet(); + } else { + await getStarknet({showModal: true}).enable(); + await setL2Wallet(); + } + }; + + const resetWallet = () => { + resetWalletConfig(); + if (isEthereum) { + return reset(); + } else { + return null; + } + }; + + const swapWallets = async () => { + if (isWalletConnected(WalletType.L1) && !isWalletConnected(WalletType.L2)) { + setEthereum(); + setL1Wallet(); + } else if (isWalletConnected(WalletType.L2) && !isWalletConnected(WalletType.L1)) { + setStarknet(); + await setL2Wallet(); + } + }; + + const setL1Wallet = () => { + // To support serializable object in the store + let serialError = error ? {...error} : null; + setActiveWallet({ + type: WalletType.L1, + account, + status, + chainId, + error: serialError, + chainName: networkName, + isConnected: isConnected() + }); + }; + + const setL2Wallet = async () => { + let status, + error = null; + try { + await enable(); + status = WalletStatus.CONNECTED; + } catch (err) { + error = err; + status = WalletStatus.ERROR; + } finally { + setActiveWallet({ + type: WalletType.L2, + status, + chainId, + error, + isConnected: isStarknetConnected, + account: selectedAddress, + chainName: networkName + }); + } + }; + + const isWalletConnected = walletType => { + return !!walletConfigMap[walletType]; + }; + + const activeWallet = () => { + const config = walletConfigMap[state.activeWallet.type]; + const {name, buttonLogoPath: logoPath} = config || {}; + return { + ...state.activeWallet, + name, + logoPath + }; + }; + + // Dispatchers + + const setActiveWallet = walletData => { + dispatch({ + type: actions.SET_ACTIVE_WALLET_ACTION, + payload: walletData + }); + }; + + const resetActiveWallet = () => { + dispatch({ + type: actions.RESET_ACTIVE_WALLET_ACTION + }); + }; + + const setWalletConfig = () => { + dispatch({ + type: actions.SET_WALLET_CONFIG_ACTION, + payload: pendingWalletConfig + }); + }; + + const resetWalletConfig = () => { + dispatch({ + type: actions.RESET_WALLET_CONFIG_ACTION + }); + }; + + // context + + const context = { + ...activeWallet(), + connectWallet, + resetWallet, + swapWallets + }; + + return <WalletsContext.Provider value={context}>{children}</WalletsContext.Provider>; +}; + +WalletsProvider.propTypes = { + children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) +}; diff --git a/src/components/Features/index.js b/src/components/Features/index.js new file mode 100644 index 00000000..2fd3422f --- /dev/null +++ b/src/components/Features/index.js @@ -0,0 +1,6 @@ +export * from './Account/Account'; +export * from './Bridge/Bridge'; +export * from './ModalProvider/ModalProvider'; +export * from './SelectToken/SelectToken'; +export * from './Transfer/Transfer'; +export * from './Wallet/WalletButton/WalletButton'; diff --git a/src/components/UI/BackButton/BackButton.js b/src/components/UI/BackButton/BackButton.js new file mode 100644 index 00000000..5be1350b --- /dev/null +++ b/src/components/UI/BackButton/BackButton.js @@ -0,0 +1,18 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {ReactComponent as BackIcon} from '../../../assets/svg/icons/back.svg'; +import styles from './BackButton.module.scss'; +import {BTN_TXT} from './BackButton.strings'; + +export const BackButton = ({onClick}) => { + return ( + <div className={styles.backButton} onClick={onClick}> + <BackIcon /> {BTN_TXT} + </div> + ); +}; + +BackButton.propTypes = { + onClick: PropTypes.func +}; diff --git a/src/components/UI/BackButton/BackButton.module.scss b/src/components/UI/BackButton/BackButton.module.scss new file mode 100644 index 00000000..13f0dc51 --- /dev/null +++ b/src/components/UI/BackButton/BackButton.module.scss @@ -0,0 +1,30 @@ +@import '../../../index'; + +$color: $--color-alpha-6; +$hover-color: $--color-alpha-6-hover; +$svg-hover-fill-color: $--color-alpha-6-hover; + +.backButton { + display: flex; + align-items: center; + font-size: 14px; + text-transform: capitalize; + color: $color; + margin: 20px 0; + cursor: pointer; + transition: 0.3s ease-in-out; + + svg { + margin-right: 7px; + } + + &:hover { + color: $hover-color; + + svg { + path { + fill: $svg-hover-fill-color; + } + } + } +} diff --git a/src/components/UI/BackButton/BackButton.strings.js b/src/components/UI/BackButton/BackButton.strings.js new file mode 100644 index 00000000..4ba46f98 --- /dev/null +++ b/src/components/UI/BackButton/BackButton.strings.js @@ -0,0 +1 @@ +export const BTN_TXT = 'back'; diff --git a/src/components/UI/Badge/Badge.js b/src/components/UI/Badge/Badge.js new file mode 100644 index 00000000..ccc75675 --- /dev/null +++ b/src/components/UI/Badge/Badge.js @@ -0,0 +1,12 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import styles from './Badge.module.scss'; + +export const Badge = ({text}) => { + return <div className={styles.badge}>{text}</div>; +}; + +Badge.propTypes = { + text: PropTypes.string +}; diff --git a/src/components/UI/Badge/Badge.module.scss b/src/components/UI/Badge/Badge.module.scss new file mode 100644 index 00000000..c75b6fb1 --- /dev/null +++ b/src/components/UI/Badge/Badge.module.scss @@ -0,0 +1,15 @@ +@import '../../../index'; + +$background-color: $--color-gamma; + +.badge { + background: $background-color; + border-radius: 3px; + text-transform: uppercase; + font-weight: bold; + font-size: 10px; + line-height: 24px; + display: inline-block; + padding: 0 10px; + margin-bottom: 15px; +} diff --git a/src/components/UI/Button/Button.js b/src/components/UI/Button/Button.js new file mode 100644 index 00000000..1ed867f6 --- /dev/null +++ b/src/components/UI/Button/Button.js @@ -0,0 +1,64 @@ +import PropTypes from 'prop-types'; +import React, {useState} from 'react'; + +import {toClasses} from '../../../utils'; +import styles from './Button.module.scss'; + +export const Button = ({ + text, + width, + height, + icon, + iconAlign = 'left', + colorText, + colorTextHover, + colorBackground, + colorBackgroundHover, + colorBorder, + colorBorderHover, + style, + isDisabled, + onClick +}) => { + const [isHover, setIsHover] = useState(false); + const styleObj = { + width, + height, + color: isHover ? colorTextHover || colorText : colorText, + backgroundColor: isHover ? colorBackgroundHover || colorBackground : colorBackground, + borderColor: isHover ? colorBorderHover || colorBorder : colorBorder, + ...style + }; + + return ( + <button + className={toClasses(styles.button, isDisabled && styles.isDisabled)} + style={styleObj} + onClick={onClick} + onMouseEnter={() => setIsHover(true)} + onMouseLeave={() => setIsHover(false)} + > + {iconAlign === 'left' && icon} + {text} + {iconAlign === 'right' && icon} + </button> + ); +}; + +Button.propTypes = { + text: PropTypes.string, + width: PropTypes.string, + height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), + colorText: PropTypes.string, + colorTextHover: PropTypes.string, + colorBackground: PropTypes.string, + colorBackgroundHover: PropTypes.string, + colorBorder: PropTypes.string, + colorBorderHover: PropTypes.string, + style: PropTypes.object, + icon: PropTypes.object, + iconAlign: PropTypes.string, + isDisabled: PropTypes.bool, + onClick: PropTypes.func, + children: PropTypes.oneOfType([PropTypes.array, PropTypes.object]) +}; diff --git a/src/components/UI/Button/Button.module.scss b/src/components/UI/Button/Button.module.scss new file mode 100644 index 00000000..0d2813c5 --- /dev/null +++ b/src/components/UI/Button/Button.module.scss @@ -0,0 +1,27 @@ +.button { + display: flex; + justify-content: space-around; + align-items: center; + text-align: center; + text-transform: capitalize; + font-weight: bold; + font-size: 14px; + line-height: 24px; + border: 1px solid; + box-sizing: border-box; + border-radius: 7px; + margin: 10px 0; + padding: 20px 15px; + cursor: pointer; + transition: 0.3s; + + &.isDisabled { + pointer-events: none; + opacity: 0.3; + } + + img, + svg { + margin-right: 10px; + } +} diff --git a/src/components/UI/Circle/Circle.js b/src/components/UI/Circle/Circle.js new file mode 100644 index 00000000..81603322 --- /dev/null +++ b/src/components/UI/Circle/Circle.js @@ -0,0 +1,27 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import styles from './Circle.module.scss'; + +export const Circle = ({size, color, style, children}) => { + return ( + <div + className={styles.circle} + style={{ + height: `${size}px`, + width: `${size}px`, + background: color, + ...style + }} + > + {children} + </div> + ); +}; + +Circle.propTypes = { + size: PropTypes.number, + color: PropTypes.string, + style: PropTypes.object, + children: PropTypes.object +}; diff --git a/src/components/UI/Circle/Circle.module.scss b/src/components/UI/Circle/Circle.module.scss new file mode 100644 index 00000000..d3025358 --- /dev/null +++ b/src/components/UI/Circle/Circle.module.scss @@ -0,0 +1,10 @@ +@import '../../../index'; + +$default-background-color: linear-gradient(0deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.2)), + $--color-white; + +.circle { + margin: 0 10px 0 0; + background: $default-background-color; + border-radius: 50%; +} diff --git a/src/components/UI/CryptoLogo/CryptoLogo.constants.js b/src/components/UI/CryptoLogo/CryptoLogo.constants.js new file mode 100644 index 00000000..2ebfd571 --- /dev/null +++ b/src/components/UI/CryptoLogo/CryptoLogo.constants.js @@ -0,0 +1 @@ +export const CIRCLE_LOGO_SIZE_DIFF = 14; diff --git a/src/components/UI/CryptoLogo/CryptoLogo.enums.js b/src/components/UI/CryptoLogo/CryptoLogo.enums.js new file mode 100644 index 00000000..6c42316b --- /dev/null +++ b/src/components/UI/CryptoLogo/CryptoLogo.enums.js @@ -0,0 +1,5 @@ +export const CryptoLogoSize = { + SMALL: 30, + MEDIUM: 50, + LARGE: 70 +}; diff --git a/src/components/UI/CryptoLogo/CryptoLogo.js b/src/components/UI/CryptoLogo/CryptoLogo.js new file mode 100644 index 00000000..b9bc6d0b --- /dev/null +++ b/src/components/UI/CryptoLogo/CryptoLogo.js @@ -0,0 +1,26 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {Circle} from '../Circle/Circle'; +import {DynamicIcon} from '../DynamicIcon/DynamicIcon'; +import {CIRCLE_LOGO_SIZE_DIFF} from './CryptoLogo.constants'; +import styles from './CryptoLogo.module.scss'; + +export const CryptoLogo = ({symbol, color, size}) => { + return symbol ? ( + <Circle color={color} size={size}> + <div className={styles.cryptoLogo}> + <DynamicIcon + path={`tokens/${symbol.toLowerCase()}.svg`} + size={size - CIRCLE_LOGO_SIZE_DIFF} + /> + </div> + </Circle> + ) : null; +}; + +CryptoLogo.propTypes = { + symbol: PropTypes.string, + color: PropTypes.string, + size: PropTypes.number +}; diff --git a/src/components/UI/CryptoLogo/CryptoLogo.module.scss b/src/components/UI/CryptoLogo/CryptoLogo.module.scss new file mode 100644 index 00000000..df808127 --- /dev/null +++ b/src/components/UI/CryptoLogo/CryptoLogo.module.scss @@ -0,0 +1,9 @@ +.cryptoLogo { + display: flex; + margin: auto; + height: 100%; + + img { + margin: auto; + } +} diff --git a/src/components/UI/DynamicIcon/DynamicIcon.js b/src/components/UI/DynamicIcon/DynamicIcon.js new file mode 100644 index 00000000..ba227562 --- /dev/null +++ b/src/components/UI/DynamicIcon/DynamicIcon.js @@ -0,0 +1,33 @@ +import PropTypes from 'prop-types'; +import React, {useEffect, useRef, useState} from 'react'; + +export const DynamicIcon = ({path, size}) => { + const [loading, setLoading] = useState(false); + const [, setError] = useState(null); + const ImportedIconRef = useRef(null); + + useEffect(async () => { + setLoading(true); + const importIcon = async () => { + try { + ImportedIconRef.current = (await import(`../../../assets/svg/${path}`)).default; + } catch (ex) { + setError(ex); + } finally { + setLoading(false); + } + }; + await importIcon(); + }, [path]); + + if (!loading && ImportedIconRef.current) { + const {current: ImportedIcon} = ImportedIconRef; + return <img alt="" height={size} src={ImportedIcon} width={size} />; + } + return null; +}; + +DynamicIcon.propTypes = { + path: PropTypes.string, + size: PropTypes.number +}; diff --git a/src/components/UI/Icon/Icon.js b/src/components/UI/Icon/Icon.js new file mode 100644 index 00000000..81b187f7 --- /dev/null +++ b/src/components/UI/Icon/Icon.js @@ -0,0 +1,28 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {toClasses} from '../../../utils'; +import styles from './Icon.module.scss'; + +export const Icon = ({isClickable, onClick, style, className, children}) => { + return ( + <div + className={toClasses(styles.icon, className)} + style={{ + cursor: isClickable ? 'pointer' : 'default', + ...style + }} + onClick={onClick} + > + {children} + </div> + ); +}; + +Icon.propTypes = { + isClickable: PropTypes.bool, + onClick: PropTypes.func, + style: PropTypes.object, + className: PropTypes.string, + children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) +}; diff --git a/src/components/UI/Icon/Icon.module.scss b/src/components/UI/Icon/Icon.module.scss new file mode 100644 index 00000000..a3e43065 --- /dev/null +++ b/src/components/UI/Icon/Icon.module.scss @@ -0,0 +1,8 @@ +.icon { + display: flex; + align-content: center; + + svg { + margin: 0 10px; + } +} diff --git a/src/components/UI/Input/Input.Module.scss b/src/components/UI/Input/Input.Module.scss new file mode 100644 index 00000000..a3a8ac1b --- /dev/null +++ b/src/components/UI/Input/Input.Module.scss @@ -0,0 +1,46 @@ +@import '../../../index'; + +$font: $--primary-font; +$color: $--color-white; + +input { + &.input { + font-family: $font; + background-color: transparent; + padding: 5px; + border-radius: 5px; + margin: 10px 0; + font-size: 15px; + line-height: 24px; + outline: none; + color: $color; + transition: all 0.3s ease-out; + display: inline-block; + max-width: 100%; + text-align: left; + outline: 0; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + border: none; + + &.isDisabled { + pointer-events: none; + opacity: 0.8; + } + } +} + +input::-webkit-input-placeholder { + opacity: 0.5; +} + +input::-webkit-outer-spin-button, +input::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type='number'] { + -moz-appearance: textfield; +} diff --git a/src/components/UI/Input/Input.js b/src/components/UI/Input/Input.js new file mode 100644 index 00000000..897ab9e8 --- /dev/null +++ b/src/components/UI/Input/Input.js @@ -0,0 +1,21 @@ +import PropTypes from 'prop-types'; +import React, {forwardRef} from 'react'; + +import {toClasses} from '../../../utils'; +import styles from './Input.Module.scss'; + +export const Input = forwardRef(({isDisabled, ...props}, ref) => { + return ( + <input + ref={ref} + className={toClasses(styles.input, isDisabled && styles.isDisabled)} + {...props} + /> + ); +}); + +Input.propTypes = { + isDisabled: PropTypes.bool +}; + +Input.displayName = 'Input'; diff --git a/src/components/UI/KeyFrames/KeyFrames.js b/src/components/UI/KeyFrames/KeyFrames.js new file mode 100644 index 00000000..ee419004 --- /dev/null +++ b/src/components/UI/KeyFrames/KeyFrames.js @@ -0,0 +1,33 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +export const Keyframes = props => { + const toCss = cssObject => + typeof cssObject === 'string' + ? cssObject + : Object.keys(cssObject).reduce((accumulator, key) => { + const cssKey = key.replace(/[A-Z]/g, v => `-${v.toLowerCase()}`); + const cssValue = cssObject[key].toString().replace("'", ''); + return `${accumulator}${cssKey}:${cssValue};`; + }, ''); + + return ( + <style> + {`@keyframes ${props.name} { + ${Object.keys(props) + .map(key => { + return ['from', 'to'].includes(key) + ? `${key} { ${toCss(props[key])} }` + : /^_[0-9]+$/.test(key) + ? `${key.replace('_', '')}% { ${toCss(props[key])} }` + : ''; + }) + .join(' ')} + }`} + </style> + ); +}; + +Keyframes.propTypes = { + name: PropTypes.string +}; diff --git a/src/components/UI/Loading/Loading.enums.js b/src/components/UI/Loading/Loading.enums.js new file mode 100644 index 00000000..9dc1a791 --- /dev/null +++ b/src/components/UI/Loading/Loading.enums.js @@ -0,0 +1,6 @@ +export const LoadingSize = { + SMALL: 30, + MEDIUM: 50, + LARGE: 70, + EXTRA_LARGE: 110 +}; diff --git a/src/components/UI/Loading/Loading.js b/src/components/UI/Loading/Loading.js new file mode 100644 index 00000000..7040b7f1 --- /dev/null +++ b/src/components/UI/Loading/Loading.js @@ -0,0 +1,47 @@ +import PropTypes from 'prop-types'; +import React, {useEffect, useState} from 'react'; + +import {Keyframes} from '../KeyFrames/KeyFrames'; +import './Loading.scss'; + +export const Loading = ({size, color}) => { + const [keyFrameSize, setKeyFrameSize] = useState(size - size / 10); + + useEffect(() => { + setKeyFrameSize(size - size / 10); + }, [size]); + + return ( + <> + <div + className="lds-ripple" + style={{width: `${size}px`, height: `${size}px`, borderColor: color}} + > + <div style={{borderColor: color}} /> + <div style={{borderColor: color}} /> + </div> + <Keyframes + _0={{ + top: `${keyFrameSize / 2}px`, + left: `${keyFrameSize / 2}px`, + width: 0, + height: 0, + opacity: 1 + }} + _100={{ + top: '0px', + left: '0px', + width: `${keyFrameSize}px`, + height: `${keyFrameSize}px`, + opacity: 0 + }} + name="lds-ripple" + /> + </> + ); +}; + +Loading.propTypes = { + size: PropTypes.number, + color: PropTypes.string +}; diff --git a/src/components/UI/Loading/Loading.scss b/src/components/UI/Loading/Loading.scss new file mode 100644 index 00000000..51b81c11 --- /dev/null +++ b/src/components/UI/Loading/Loading.scss @@ -0,0 +1,22 @@ +@import '../../../index'; + +$border-color: $--color-white; + +.lds-ripple { + display: inline-block; + position: relative; + width: 80px; + height: 80px; +} + +.lds-ripple div { + position: absolute; + border: 4px solid $border-color; + opacity: 1; + border-radius: 50%; + animation: lds-ripple 1s cubic-bezier(0, 0.2, 0.8, 1) infinite; +} + +.lds-ripple div:nth-child(2) { + animation-delay: -0.5s; +} diff --git a/src/components/UI/Menu/Menu.js b/src/components/UI/Menu/Menu.js new file mode 100644 index 00000000..edb01396 --- /dev/null +++ b/src/components/UI/Menu/Menu.js @@ -0,0 +1,22 @@ +import PropTypes from 'prop-types'; +import React, {useEffect, useState} from 'react'; + +import {toClasses} from '../../../utils'; +import styles from './Menu.module.scss'; + +export const Menu = ({children}) => { + const [show, setShow] = useState(false); + + useEffect(() => { + const timeoutId = setTimeout(() => setShow(true), 0); + return () => { + clearTimeout(timeoutId); + }; + }, []); + + return <div className={toClasses(styles.menu, show && styles.show)}>{children}</div>; +}; + +Menu.propTypes = { + children: PropTypes.oneOfType([PropTypes.array, PropTypes.object]) +}; diff --git a/src/components/UI/Menu/Menu.module.scss b/src/components/UI/Menu/Menu.module.scss new file mode 100644 index 00000000..b750c703 --- /dev/null +++ b/src/components/UI/Menu/Menu.module.scss @@ -0,0 +1,9 @@ +.menu { + opacity: 0; + max-height: 100%; + transition: all 0.4s ease-in-out; + + &.show { + opacity: 1; + } +} diff --git a/src/components/UI/MenuTitle/MenuTitle.js b/src/components/UI/MenuTitle/MenuTitle.js new file mode 100644 index 00000000..8140d386 --- /dev/null +++ b/src/components/UI/MenuTitle/MenuTitle.js @@ -0,0 +1,17 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import styles from './MenuTitle.module.scss'; + +export const MenuTitle = ({text, color}) => { + return ( + <div className={styles.menuTitle} style={{color}}> + {text} + </div> + ); +}; + +MenuTitle.propTypes = { + text: PropTypes.string, + color: PropTypes.string +}; diff --git a/src/components/UI/MenuTitle/MenuTitle.module.scss b/src/components/UI/MenuTitle/MenuTitle.module.scss new file mode 100644 index 00000000..e249ce2a --- /dev/null +++ b/src/components/UI/MenuTitle/MenuTitle.module.scss @@ -0,0 +1,9 @@ +@import '../../../index'; + +$color: $--color-white; + +.menuTitle { + font-size: 26px; + font-weight: bold; + color: $color; +} diff --git a/src/components/UI/Modal/Modal/Modal.constants.js b/src/components/UI/Modal/Modal/Modal.constants.js new file mode 100644 index 00000000..aea6f970 --- /dev/null +++ b/src/components/UI/Modal/Modal/Modal.constants.js @@ -0,0 +1,21 @@ +export const ModalSize = { + SMALL: { + width: 400, + height: 200 + }, + MEDIUM: { + width: 500, + height: 300 + }, + LARGE: { + width: 700, + height: 500 + } +}; + +export const ModalType = { + INFO: 'info', + SUCCESS: 'success', + WARNING: 'warning', + ERROR: 'error' +}; diff --git a/src/components/UI/Modal/Modal/Modal.js b/src/components/UI/Modal/Modal/Modal.js new file mode 100644 index 00000000..c66d9f86 --- /dev/null +++ b/src/components/UI/Modal/Modal/Modal.js @@ -0,0 +1,28 @@ +import PropTypes from 'prop-types'; +import React from 'react'; +import {createPortal} from 'react-dom'; + +import {toClasses} from '../../../../utils'; +import {ModalSize, ModalType} from './Modal.constants'; +import styles from './Modal.module.scss'; + +export const Modal = ({show, type = ModalType.INFO, size = ModalSize.SMALL, children}) => { + const {height, width} = size; + return show + ? createPortal( + <div className={toClasses(styles.modal, styles[type])}> + <div className={toClasses(styles.container, styles[type])} style={{width, height}}> + {children} + </div> + </div>, + document.body + ) + : null; +}; + +Modal.propTypes = { + show: PropTypes.bool, + type: PropTypes.string, + size: PropTypes.string, + children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) +}; diff --git a/src/components/UI/Modal/Modal/Modal.module.scss b/src/components/UI/Modal/Modal/Modal.module.scss new file mode 100644 index 00000000..5e0ebe68 --- /dev/null +++ b/src/components/UI/Modal/Modal/Modal.module.scss @@ -0,0 +1,30 @@ +@import '../../../../index'; + +$backdrop-color: rgba(0, 0, 0, 0.5); +$background-color: $--color-white; +$error-color: $--color-error; + +.modal { + background: $backdrop-color; + top: 0; + left: 0; + right: 0; + bottom: 0; + position: absolute; + z-index: 1; + + .container { + top: 50%; + left: 50%; + position: absolute; + transform: translate(-50%, -50%); + background: $background-color; + box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1); + border-radius: 10px; + padding: 20px 30px; + + &.error { + border: 1px solid $error-color; + } + } +} diff --git a/src/components/UI/Modal/ModalBody/ModalBody.js b/src/components/UI/Modal/ModalBody/ModalBody.js new file mode 100644 index 00000000..9f8aa329 --- /dev/null +++ b/src/components/UI/Modal/ModalBody/ModalBody.js @@ -0,0 +1,15 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {toClasses} from '../../../../utils'; +import {ModalType} from '../Modal/Modal.constants'; +import styles from './ModalBody.module.scss'; + +export const ModalBody = ({type = ModalType.INFO, children}) => { + return <div className={toClasses(styles.modalBody, styles[type])}>{children}</div>; +}; + +ModalBody.propTypes = { + type: PropTypes.string, + children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) +}; diff --git a/src/components/UI/Modal/ModalBody/ModalBody.module.scss b/src/components/UI/Modal/ModalBody/ModalBody.module.scss new file mode 100644 index 00000000..280014a8 --- /dev/null +++ b/src/components/UI/Modal/ModalBody/ModalBody.module.scss @@ -0,0 +1,17 @@ +@import '../../../../index'; + +$color: $--color-omega; +$error-color: $--color-error; + +.modalBody { + padding: 10px 0; + font-size: 14px; + line-height: 21px; + letter-spacing: 0.01em; + color: $color; + white-space: break-spaces; + + &.error { + color: $error-color; + } +} diff --git a/src/components/UI/Modal/ModalFooter/ModalFooter.js b/src/components/UI/Modal/ModalFooter/ModalFooter.js new file mode 100644 index 00000000..a0039d4d --- /dev/null +++ b/src/components/UI/Modal/ModalFooter/ModalFooter.js @@ -0,0 +1,7 @@ +import React from 'react'; + +import styles from './ModalFooter.module.scss'; + +export const ModalFooter = () => { + return <div className={styles.modalFooter} />; +}; diff --git a/src/components/UI/Modal/ModalFooter/ModalFooter.module.scss b/src/components/UI/Modal/ModalFooter/ModalFooter.module.scss new file mode 100644 index 00000000..feeb88ab --- /dev/null +++ b/src/components/UI/Modal/ModalFooter/ModalFooter.module.scss @@ -0,0 +1,2 @@ +.modalFooter { +} diff --git a/src/components/UI/Modal/ModalHeader/ModalHeader.js b/src/components/UI/Modal/ModalHeader/ModalHeader.js new file mode 100644 index 00000000..7013aba1 --- /dev/null +++ b/src/components/UI/Modal/ModalHeader/ModalHeader.js @@ -0,0 +1,15 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {toClasses} from '../../../../utils'; +import {ModalType} from '../Modal/Modal.constants'; +import styles from './ModalHeader.module.scss'; + +export const ModalHeader = ({type = ModalType.INFO, children}) => { + return <div className={toClasses(styles.modalHeader, styles[type])}>{children}</div>; +}; + +ModalHeader.propTypes = { + type: PropTypes.string, + children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) +}; diff --git a/src/components/UI/Modal/ModalHeader/ModalHeader.module.scss b/src/components/UI/Modal/ModalHeader/ModalHeader.module.scss new file mode 100644 index 00000000..f85601ea --- /dev/null +++ b/src/components/UI/Modal/ModalHeader/ModalHeader.module.scss @@ -0,0 +1,9 @@ +@import '../../../../index'; + +$error-color: $--color-error; + +.modalHeader { + &.error { + color: $error-color; + } +} diff --git a/src/components/UI/Modal/ModalTitle/ModalTitle.js b/src/components/UI/Modal/ModalTitle/ModalTitle.js new file mode 100644 index 00000000..44e812d1 --- /dev/null +++ b/src/components/UI/Modal/ModalTitle/ModalTitle.js @@ -0,0 +1,12 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import styles from './ModalTitle.module.scss'; + +export const ModalTitle = ({children}) => { + return <div className={styles.modalTitle}>{children}</div>; +}; + +ModalTitle.propTypes = { + children: PropTypes.oneOfType([PropTypes.object, PropTypes.array, PropTypes.string]) +}; diff --git a/src/components/UI/Modal/ModalTitle/ModalTitle.module.scss b/src/components/UI/Modal/ModalTitle/ModalTitle.module.scss new file mode 100644 index 00000000..bd480206 --- /dev/null +++ b/src/components/UI/Modal/ModalTitle/ModalTitle.module.scss @@ -0,0 +1,9 @@ +@import '../../../../index'; + +.modalTitle { + font-weight: 600; + font-size: 20px; + line-height: 32px; + letter-spacing: 0.01em; + text-transform: capitalize; +} diff --git a/src/components/UI/index.js b/src/components/UI/index.js new file mode 100644 index 00000000..386a5de1 --- /dev/null +++ b/src/components/UI/index.js @@ -0,0 +1,17 @@ +export * from './BackButton/BackButton'; +export * from './Badge/Badge'; +export * from './Button/Button'; +export * from './Circle/Circle'; +export * from './CryptoLogo/CryptoLogo'; +export * from './Icon/Icon'; +export * from './DynamicIcon/DynamicIcon'; +export * from './KeyFrames/KeyFrames'; +export * from './Loading/Loading'; +export * from './Menu/Menu'; +export * from './MenuTitle/MenuTitle'; +export * from './Modal/Modal/Modal'; +export * from './Modal/ModalHeader/ModalHeader'; +export * from './Modal/ModalBody/ModalBody'; +export * from './Modal/ModalTitle/ModalTitle'; +export * from './Modal/ModalFooter/ModalFooter'; +export * from './Input/Input'; diff --git a/src/config/supported-chains.json b/src/config/supported-chains.json new file mode 100644 index 00000000..39485404 --- /dev/null +++ b/src/config/supported-chains.json @@ -0,0 +1 @@ +[1, 5] diff --git a/src/config/tokens/ethereum.goerli.json b/src/config/tokens/ethereum.goerli.json new file mode 100644 index 00000000..7346552d --- /dev/null +++ b/src/config/tokens/ethereum.goerli.json @@ -0,0 +1,12 @@ +[ + { + "address": "0xce87904b5fce1ced9e548c061d0ceb9950401758", + "name": "HEX", + "symbol": "HEX" + }, + { + "address": "0x0b788e8d159c1959bd8dde838790df79d015ee57", + "name": "Dai Stablecoin", + "symbol": "DAI" + } +] diff --git a/src/config/tokens/ethereum.json b/src/config/tokens/ethereum.json new file mode 100644 index 00000000..eae1fe92 --- /dev/null +++ b/src/config/tokens/ethereum.json @@ -0,0 +1,12 @@ +[ + { + "address": "0x2b591e99afe9f32eaa6214f7b7629768c40eeb39", + "name": "HEX", + "symbol": "HEX" + }, + { + "address": "0x6b175474e89094c44da98b954eedeac495271d0f", + "name": "Dai Stablecoin", + "symbol": "DAI" + } +] diff --git a/src/config/tokens/starknet.goerli.json b/src/config/tokens/starknet.goerli.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/src/config/tokens/starknet.goerli.json @@ -0,0 +1 @@ +[] diff --git a/src/config/tokens/starknet.json b/src/config/tokens/starknet.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/src/config/tokens/starknet.json @@ -0,0 +1 @@ +[] diff --git a/src/config/wallets.json b/src/config/wallets.json new file mode 100644 index 00000000..520bf230 --- /dev/null +++ b/src/config/wallets.json @@ -0,0 +1,19 @@ +[ + { + "id": "metamask", + "name": "MetaMask", + "connectorId": "injected", + "type": 1, + "description": "Login using a browser wallet", + "loginLogoPath": "wallets/metamask/metamask-login.svg", + "buttonLogoPath": "wallets/metamask/metamask-button.svg" + }, + { + "id": "argent", + "name": "Argent X", + "type": 2, + "description": "Login using a browser wallet", + "loginLogoPath": "wallets/argent/argent-button.svg", + "buttonLogoPath": "wallets/argent/argent-button.svg" + } +] diff --git a/src/contracts/ERC20/ERC20.js b/src/contracts/ERC20/ERC20.js new file mode 100644 index 00000000..67350073 --- /dev/null +++ b/src/contracts/ERC20/ERC20.js @@ -0,0 +1,6 @@ +import {web3} from '../../web3'; +import {abi} from './ERC20.json'; + +export const createERC20Contract = address => { + return new web3.eth.Contract(abi, address); +}; diff --git a/src/contracts/ERC20/ERC20.json b/src/contracts/ERC20/ERC20.json new file mode 100644 index 00000000..abee352b --- /dev/null +++ b/src/contracts/ERC20/ERC20.json @@ -0,0 +1,13771 @@ +{ + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "allSourcePaths": { + "24": "contracts/starkware/contracts/tokens/ERC20/ERC20.sol", + "25": "contracts/starkware/contracts/tokens/ERC20/IERC20.sol" + }, + "ast": { + "absolutePath": "contracts/starkware/contracts/tokens/ERC20/ERC20.sol", + "exportedSymbols": { + "ERC20": [2626] + }, + "id": 2627, + "license": "Apache-2.0.", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 2143, + "literals": ["solidity", "^", "0.6", ".12"], + "nodeType": "PragmaDirective", + "src": "40:24:24" + }, + { + "absolutePath": "contracts/starkware/contracts/tokens/ERC20/IERC20.sol", + "file": "./IERC20.sol", + "id": 2144, + "nodeType": "ImportDirective", + "scope": 2627, + "sourceUnit": 2696, + "src": "66:22:24", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 2145, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2695, + "src": "108:6:24", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$2695", + "typeString": "contract IERC20" + } + }, + "id": 2146, + "nodeType": "InheritanceSpecifier", + "src": "108:6:24" + } + ], + "contractDependencies": [2695], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 2626, + "linearizedBaseContracts": [2626, 2695], + "name": "ERC20", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 2150, + "mutability": "mutable", + "name": "_balances", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2626, + "src": "121:46:24", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "typeName": { + "id": 2149, + "keyType": { + "id": 2147, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "129:7:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "121:27:24", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "valueType": { + "id": 2148, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "140:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2156, + "mutability": "mutable", + "name": "_allowances", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2626, + "src": "174:68:24", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + }, + "typeName": { + "id": 2155, + "keyType": { + "id": 2151, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "182:7:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "174:47:24", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + }, + "valueType": { + "id": 2154, + "keyType": { + "id": 2152, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "201:7:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "193:27:24", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "valueType": { + "id": 2153, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "212:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2158, + "mutability": "mutable", + "name": "_totalSupply", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2626, + "src": "249:29:24", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2157, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "249:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "baseFunctions": [2633], + "body": { + "id": 2166, + "nodeType": "Block", + "src": "347:36:24", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 2164, + "name": "_totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2158, + "src": "364:12:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 2163, + "id": 2165, + "nodeType": "Return", + "src": "357:19:24" + } + ] + }, + "documentation": null, + "functionSelector": "18160ddd", + "id": 2167, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "totalSupply", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 2160, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "320:8:24" + }, + "parameters": { + "id": 2159, + "nodeType": "ParameterList", + "parameters": [], + "src": "305:2:24" + }, + "returnParameters": { + "id": 2163, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2162, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2167, + "src": "338:7:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2161, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "338:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "337:9:24" + }, + "scope": 2626, + "src": "285:98:24", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [2640], + "body": { + "id": 2179, + "nodeType": "Block", + "src": "464:42:24", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2175, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2150, + "src": "481:9:24", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 2177, + "indexExpression": { + "argumentTypes": null, + "id": 2176, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2169, + "src": "491:7:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "481:18:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 2174, + "id": 2178, + "nodeType": "Return", + "src": "474:25:24" + } + ] + }, + "documentation": null, + "functionSelector": "70a08231", + "id": 2180, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "balanceOf", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 2171, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "437:8:24" + }, + "parameters": { + "id": 2170, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2169, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2180, + "src": "408:15:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2168, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "408:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "407:17:24" + }, + "returnParameters": { + "id": 2174, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2173, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2180, + "src": "455:7:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2172, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "455:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "454:9:24" + }, + "scope": 2626, + "src": "389:117:24", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [2649], + "body": { + "id": 2199, + "nodeType": "Block", + "src": "604:78:24", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2191, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "624:3:24", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2192, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "624:10:24", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 2193, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2182, + "src": "636:9:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 2194, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2184, + "src": "647:6:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2190, + "name": "_transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2439, + "src": "614:9:24", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 2195, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "614:40:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2196, + "nodeType": "ExpressionStatement", + "src": "614:40:24" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 2197, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "671:4:24", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 2189, + "id": 2198, + "nodeType": "Return", + "src": "664:11:24" + } + ] + }, + "documentation": null, + "functionSelector": "a9059cbb", + "id": 2200, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "transfer", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 2186, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "580:8:24" + }, + "parameters": { + "id": 2185, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2182, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2200, + "src": "530:17:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2181, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "530:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2184, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2200, + "src": "549:14:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2183, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "549:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "529:35:24" + }, + "returnParameters": { + "id": 2189, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2188, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2200, + "src": "598:4:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2187, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "598:4:24", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "597:6:24" + }, + "scope": 2626, + "src": "512:170:24", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [2658], + "body": { + "id": 2216, + "nodeType": "Block", + "src": "778:51:24", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2210, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2156, + "src": "795:11:24", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 2212, + "indexExpression": { + "argumentTypes": null, + "id": 2211, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2202, + "src": "807:5:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "795:18:24", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 2214, + "indexExpression": { + "argumentTypes": null, + "id": 2213, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2204, + "src": "814:7:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "795:27:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 2209, + "id": 2215, + "nodeType": "Return", + "src": "788:34:24" + } + ] + }, + "documentation": null, + "functionSelector": "dd62ed3e", + "id": 2217, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "allowance", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 2206, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "751:8:24" + }, + "parameters": { + "id": 2205, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2202, + "mutability": "mutable", + "name": "owner", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2217, + "src": "707:13:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2201, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "707:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2204, + "mutability": "mutable", + "name": "spender", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2217, + "src": "722:15:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2203, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "722:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "706:32:24" + }, + "returnParameters": { + "id": 2209, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2208, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2217, + "src": "769:7:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2207, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "769:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "768:9:24" + }, + "scope": 2626, + "src": "688:141:24", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [2667], + "body": { + "id": 2236, + "nodeType": "Block", + "src": "915:74:24", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2228, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "934:3:24", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2229, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "934:10:24", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 2230, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2219, + "src": "946:7:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 2231, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2221, + "src": "955:5:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2227, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2587, + "src": "925:8:24", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 2232, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "925:36:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2233, + "nodeType": "ExpressionStatement", + "src": "925:36:24" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 2234, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "978:4:24", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 2226, + "id": 2235, + "nodeType": "Return", + "src": "971:11:24" + } + ] + }, + "documentation": null, + "functionSelector": "095ea7b3", + "id": 2237, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "approve", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 2223, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "891:8:24" + }, + "parameters": { + "id": 2222, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2219, + "mutability": "mutable", + "name": "spender", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2237, + "src": "852:15:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2218, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "852:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2221, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2237, + "src": "869:13:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2220, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "869:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "851:32:24" + }, + "returnParameters": { + "id": 2226, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2225, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2237, + "src": "909:4:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2224, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "909:4:24", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "908:6:24" + }, + "scope": 2626, + "src": "835:154:24", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [2678], + "body": { + "id": 2282, + "nodeType": "Block", + "src": "1137:289:24", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2250, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2239, + "src": "1157:6:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 2251, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2241, + "src": "1165:9:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 2252, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2243, + "src": "1176:6:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2249, + "name": "_transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2439, + "src": "1147:9:24", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 2253, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1147:36:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2254, + "nodeType": "ExpressionStatement", + "src": "1147:36:24" + }, + { + "assignments": [2256], + "declarations": [ + { + "constant": false, + "id": 2256, + "mutability": "mutable", + "name": "sender_allowance", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2282, + "src": "1193:24:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2255, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1193:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2263, + "initialValue": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2257, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2156, + "src": "1220:11:24", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 2259, + "indexExpression": { + "argumentTypes": null, + "id": 2258, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2239, + "src": "1232:6:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1220:19:24", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 2262, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2260, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "1240:3:24", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2261, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1240:10:24", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1220:31:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1193:58:24" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2267, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2265, + "name": "sender_allowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2256, + "src": "1269:16:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "argumentTypes": null, + "id": 2266, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2243, + "src": "1289:6:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1269:26:24", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "45524332303a207472616e73666572206578636565647320616c6c6f77616e6365", + "id": 2268, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1297:35:24", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_292f2b964b628633d11c4b250c2d6c513aac5ad4a05db69ac16d809150823e72", + "typeString": "literal_string \"ERC20: transfer exceeds allowance\"" + }, + "value": "ERC20: transfer exceeds allowance" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_292f2b964b628633d11c4b250c2d6c513aac5ad4a05db69ac16d809150823e72", + "typeString": "literal_string \"ERC20: transfer exceeds allowance\"" + } + ], + "id": 2264, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [-18, -18], + "referencedDeclaration": -18, + "src": "1261:7:24", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 2269, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1261:72:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2270, + "nodeType": "ExpressionStatement", + "src": "1261:72:24" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2272, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2239, + "src": "1352:6:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2273, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "1360:3:24", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2274, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1360:10:24", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2277, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2275, + "name": "sender_allowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2256, + "src": "1372:16:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "argumentTypes": null, + "id": 2276, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2243, + "src": "1391:6:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1372:25:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2271, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2587, + "src": "1343:8:24", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 2278, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1343:55:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2279, + "nodeType": "ExpressionStatement", + "src": "1343:55:24" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 2280, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1415:4:24", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 2248, + "id": 2281, + "nodeType": "Return", + "src": "1408:11:24" + } + ] + }, + "documentation": null, + "functionSelector": "23b872dd", + "id": 2283, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "transferFrom", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 2245, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1113:8:24" + }, + "parameters": { + "id": 2244, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2239, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2283, + "src": "1026:14:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2238, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1026:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2241, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2283, + "src": "1050:17:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2240, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1050:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2243, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2283, + "src": "1077:14:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2242, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1077:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1016:81:24" + }, + "returnParameters": { + "id": 2248, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2247, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2283, + "src": "1131:4:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2246, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1131:4:24", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1130:6:24" + }, + "scope": 2626, + "src": "995:431:24", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "body": { + "id": 2321, + "nodeType": "Block", + "src": "1518:258:24", + "statements": [ + { + "assignments": [2293], + "declarations": [ + { + "constant": false, + "id": 2293, + "mutability": "mutable", + "name": "spender_allowance", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2321, + "src": "1528:25:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2292, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1528:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2300, + "initialValue": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2294, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2156, + "src": "1556:11:24", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 2297, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2295, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "1568:3:24", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2296, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1568:10:24", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1556:23:24", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 2299, + "indexExpression": { + "argumentTypes": null, + "id": 2298, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2285, + "src": "1580:7:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1556:32:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1528:60:24" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2306, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2304, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2302, + "name": "spender_allowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2293, + "src": "1606:17:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "argumentTypes": null, + "id": 2303, + "name": "addedValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2287, + "src": "1626:10:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1606:30:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "argumentTypes": null, + "id": 2305, + "name": "spender_allowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2293, + "src": "1640:17:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1606:51:24", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "45524332303a204f766572666c6f77", + "id": 2307, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1659:17:24", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_26a018b402736bda51ff8c596d3a05c63463387018abe06be1ae020b387256a6", + "typeString": "literal_string \"ERC20: Overflow\"" + }, + "value": "ERC20: Overflow" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_26a018b402736bda51ff8c596d3a05c63463387018abe06be1ae020b387256a6", + "typeString": "literal_string \"ERC20: Overflow\"" + } + ], + "id": 2301, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [-18, -18], + "referencedDeclaration": -18, + "src": "1598:7:24", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 2308, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1598:79:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2309, + "nodeType": "ExpressionStatement", + "src": "1598:79:24" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2311, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "1696:3:24", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2312, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1696:10:24", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 2313, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2285, + "src": "1708:7:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2316, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2314, + "name": "spender_allowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2293, + "src": "1717:17:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "argumentTypes": null, + "id": 2315, + "name": "addedValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2287, + "src": "1737:10:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1717:30:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2310, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2587, + "src": "1687:8:24", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 2317, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1687:61:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2318, + "nodeType": "ExpressionStatement", + "src": "1687:61:24" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 2319, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1765:4:24", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 2291, + "id": 2320, + "nodeType": "Return", + "src": "1758:11:24" + } + ] + }, + "documentation": null, + "functionSelector": "39509351", + "id": 2322, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "increaseAllowance", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 2288, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2285, + "mutability": "mutable", + "name": "spender", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2322, + "src": "1459:15:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2284, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1459:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2287, + "mutability": "mutable", + "name": "addedValue", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2322, + "src": "1476:18:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2286, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1476:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1458:37:24" + }, + "returnParameters": { + "id": 2291, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2290, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2322, + "src": "1512:4:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2289, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1512:4:24", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1511:6:24" + }, + "scope": 2626, + "src": "1432:344:24", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 2358, + "nodeType": "Block", + "src": "1873:263:24", + "statements": [ + { + "assignments": [2332], + "declarations": [ + { + "constant": false, + "id": 2332, + "mutability": "mutable", + "name": "sender_allowance", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2358, + "src": "1883:24:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2331, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1883:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2339, + "initialValue": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2333, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2156, + "src": "1910:11:24", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 2336, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2334, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "1922:3:24", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2335, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1922:10:24", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1910:23:24", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 2338, + "indexExpression": { + "argumentTypes": null, + "id": 2337, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2324, + "src": "1934:7:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1910:32:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1883:59:24" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2343, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2341, + "name": "sender_allowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2332, + "src": "1960:16:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "argumentTypes": null, + "id": 2342, + "name": "subtractedValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2326, + "src": "1980:15:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1960:35:24", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "45524332303a207472616e73666572206578636565647320616c6c6f77616e6365", + "id": 2344, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1997:35:24", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_292f2b964b628633d11c4b250c2d6c513aac5ad4a05db69ac16d809150823e72", + "typeString": "literal_string \"ERC20: transfer exceeds allowance\"" + }, + "value": "ERC20: transfer exceeds allowance" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_292f2b964b628633d11c4b250c2d6c513aac5ad4a05db69ac16d809150823e72", + "typeString": "literal_string \"ERC20: transfer exceeds allowance\"" + } + ], + "id": 2340, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [-18, -18], + "referencedDeclaration": -18, + "src": "1952:7:24", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 2345, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1952:81:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2346, + "nodeType": "ExpressionStatement", + "src": "1952:81:24" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2348, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "2052:3:24", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2349, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2052:10:24", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 2350, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2324, + "src": "2064:7:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2353, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2351, + "name": "sender_allowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2332, + "src": "2073:16:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "argumentTypes": null, + "id": 2352, + "name": "subtractedValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2326, + "src": "2092:15:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2073:34:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2347, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2587, + "src": "2043:8:24", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 2354, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2043:65:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2355, + "nodeType": "ExpressionStatement", + "src": "2043:65:24" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 2356, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2125:4:24", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 2330, + "id": 2357, + "nodeType": "Return", + "src": "2118:11:24" + } + ] + }, + "documentation": null, + "functionSelector": "a457c2d7", + "id": 2359, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "decreaseAllowance", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 2327, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2324, + "mutability": "mutable", + "name": "spender", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2359, + "src": "1809:15:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2323, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1809:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2326, + "mutability": "mutable", + "name": "subtractedValue", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2359, + "src": "1826:23:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2325, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1826:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1808:42:24" + }, + "returnParameters": { + "id": 2330, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2329, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2359, + "src": "1867:4:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2328, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1867:4:24", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1866:6:24" + }, + "scope": 2626, + "src": "1782:354:24", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 2438, + "nodeType": "Block", + "src": "2251:610:24", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 2374, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2369, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2361, + "src": "2269:6:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 2372, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2287:1:24", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 2371, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2279:7:24", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 2370, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2279:7:24", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 2373, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2279:10:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "2269:20:24", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "45524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373", + "id": 2375, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2291:39:24", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea", + "typeString": "literal_string \"ERC20: transfer from the zero address\"" + }, + "value": "ERC20: transfer from the zero address" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea", + "typeString": "literal_string \"ERC20: transfer from the zero address\"" + } + ], + "id": 2368, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [-18, -18], + "referencedDeclaration": -18, + "src": "2261:7:24", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 2376, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2261:70:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2377, + "nodeType": "ExpressionStatement", + "src": "2261:70:24" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 2384, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2379, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2363, + "src": "2349:9:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 2382, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2370:1:24", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 2381, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2362:7:24", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 2380, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2362:7:24", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 2383, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2362:10:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "2349:23:24", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "45524332303a207472616e7366657220746f20746865207a65726f2061646472657373", + "id": 2385, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2374:37:24", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f", + "typeString": "literal_string \"ERC20: transfer to the zero address\"" + }, + "value": "ERC20: transfer to the zero address" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f", + "typeString": "literal_string \"ERC20: transfer to the zero address\"" + } + ], + "id": 2378, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [-18, -18], + "referencedDeclaration": -18, + "src": "2341:7:24", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 2386, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2341:71:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2387, + "nodeType": "ExpressionStatement", + "src": "2341:71:24" + }, + { + "assignments": [2389], + "declarations": [ + { + "constant": false, + "id": 2389, + "mutability": "mutable", + "name": "sender_balance", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2438, + "src": "2422:22:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2388, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2422:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2393, + "initialValue": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2390, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2150, + "src": "2447:9:24", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 2392, + "indexExpression": { + "argumentTypes": null, + "id": 2391, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2361, + "src": "2457:6:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2447:17:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2422:42:24" + }, + { + "assignments": [2395], + "declarations": [ + { + "constant": false, + "id": 2395, + "mutability": "mutable", + "name": "recipient_balance", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2438, + "src": "2474:25:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2394, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2474:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2399, + "initialValue": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2396, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2150, + "src": "2502:9:24", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 2398, + "indexExpression": { + "argumentTypes": null, + "id": 2397, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2363, + "src": "2512:9:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2502:20:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2474:48:24" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2403, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2401, + "name": "sender_balance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2389, + "src": "2540:14:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "argumentTypes": null, + "id": 2402, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2365, + "src": "2558:6:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2540:24:24", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365", + "id": 2404, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2566:40:24", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6", + "typeString": "literal_string \"ERC20: transfer amount exceeds balance\"" + }, + "value": "ERC20: transfer amount exceeds balance" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6", + "typeString": "literal_string \"ERC20: transfer amount exceeds balance\"" + } + ], + "id": 2400, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [-18, -18], + "referencedDeclaration": -18, + "src": "2532:7:24", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 2405, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2532:75:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2406, + "nodeType": "ExpressionStatement", + "src": "2532:75:24" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2412, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2410, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2408, + "name": "recipient_balance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2395, + "src": "2625:17:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "argumentTypes": null, + "id": 2409, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2365, + "src": "2645:6:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2625:26:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "argumentTypes": null, + "id": 2411, + "name": "recipient_balance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2395, + "src": "2655:17:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2625:47:24", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "45524332303a204f766572666c6f77", + "id": 2413, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2674:17:24", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_26a018b402736bda51ff8c596d3a05c63463387018abe06be1ae020b387256a6", + "typeString": "literal_string \"ERC20: Overflow\"" + }, + "value": "ERC20: Overflow" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_26a018b402736bda51ff8c596d3a05c63463387018abe06be1ae020b387256a6", + "typeString": "literal_string \"ERC20: Overflow\"" + } + ], + "id": 2407, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [-18, -18], + "referencedDeclaration": -18, + "src": "2617:7:24", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 2414, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2617:75:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2415, + "nodeType": "ExpressionStatement", + "src": "2617:75:24" + }, + { + "expression": { + "argumentTypes": null, + "id": 2422, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2416, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2150, + "src": "2702:9:24", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 2418, + "indexExpression": { + "argumentTypes": null, + "id": 2417, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2361, + "src": "2712:6:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2702:17:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2421, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2419, + "name": "sender_balance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2389, + "src": "2722:14:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "argumentTypes": null, + "id": 2420, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2365, + "src": "2739:6:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2722:23:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2702:43:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2423, + "nodeType": "ExpressionStatement", + "src": "2702:43:24" + }, + { + "expression": { + "argumentTypes": null, + "id": 2430, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2424, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2150, + "src": "2755:9:24", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 2426, + "indexExpression": { + "argumentTypes": null, + "id": 2425, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2363, + "src": "2765:9:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2755:20:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2429, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2427, + "name": "recipient_balance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2395, + "src": "2778:17:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "argumentTypes": null, + "id": 2428, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2365, + "src": "2798:6:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2778:26:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2755:49:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2431, + "nodeType": "ExpressionStatement", + "src": "2755:49:24" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2433, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2361, + "src": "2828:6:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 2434, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2363, + "src": "2836:9:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 2435, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2365, + "src": "2847:6:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2432, + "name": "Transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2686, + "src": "2819:8:24", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 2436, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2819:35:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2437, + "nodeType": "EmitStatement", + "src": "2814:40:24" + } + ] + }, + "documentation": null, + "id": 2439, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_transfer", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 2366, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2361, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2439, + "src": "2170:14:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2360, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2170:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2363, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2439, + "src": "2194:17:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2362, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2194:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2365, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2439, + "src": "2221:14:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2364, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2221:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2160:81:24" + }, + "returnParameters": { + "id": 2367, + "nodeType": "ParameterList", + "parameters": [], + "src": "2251:0:24" + }, + "scope": 2626, + "src": "2142:719:24", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2490, + "nodeType": "Block", + "src": "2924:314:24", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 2452, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2447, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2441, + "src": "2942:7:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 2450, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2961:1:24", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 2449, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2953:7:24", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 2448, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2953:7:24", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 2451, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2953:10:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "2942:21:24", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "45524332303a206d696e7420746f20746865207a65726f2061646472657373", + "id": 2453, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2965:33:24", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e", + "typeString": "literal_string \"ERC20: mint to the zero address\"" + }, + "value": "ERC20: mint to the zero address" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e", + "typeString": "literal_string \"ERC20: mint to the zero address\"" + } + ], + "id": 2446, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [-18, -18], + "referencedDeclaration": -18, + "src": "2934:7:24", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 2454, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2934:65:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2455, + "nodeType": "ExpressionStatement", + "src": "2934:65:24" + }, + { + "assignments": [2457], + "declarations": [ + { + "constant": false, + "id": 2457, + "mutability": "mutable", + "name": "_total", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2490, + "src": "3009:14:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2456, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3009:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2459, + "initialValue": { + "argumentTypes": null, + "id": 2458, + "name": "_totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2158, + "src": "3026:12:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3009:29:24" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2465, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2463, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2461, + "name": "_total", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2457, + "src": "3056:6:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "argumentTypes": null, + "id": 2462, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2443, + "src": "3065:6:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3056:15:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "argumentTypes": null, + "id": 2464, + "name": "_total", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2457, + "src": "3075:6:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3056:25:24", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "45524332303a204f766572666c6f77", + "id": 2466, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3083:17:24", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_26a018b402736bda51ff8c596d3a05c63463387018abe06be1ae020b387256a6", + "typeString": "literal_string \"ERC20: Overflow\"" + }, + "value": "ERC20: Overflow" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_26a018b402736bda51ff8c596d3a05c63463387018abe06be1ae020b387256a6", + "typeString": "literal_string \"ERC20: Overflow\"" + } + ], + "id": 2460, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [-18, -18], + "referencedDeclaration": -18, + "src": "3048:7:24", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 2467, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3048:53:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2468, + "nodeType": "ExpressionStatement", + "src": "3048:53:24" + }, + { + "expression": { + "argumentTypes": null, + "id": 2473, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 2469, + "name": "_totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2158, + "src": "3111:12:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2472, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2470, + "name": "_total", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2457, + "src": "3126:6:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "argumentTypes": null, + "id": 2471, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2443, + "src": "3135:6:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3126:15:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3111:30:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2474, + "nodeType": "ExpressionStatement", + "src": "3111:30:24" + }, + { + "expression": { + "argumentTypes": null, + "id": 2479, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2475, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2150, + "src": "3151:9:24", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 2477, + "indexExpression": { + "argumentTypes": null, + "id": 2476, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2441, + "src": "3161:7:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "3151:18:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "argumentTypes": null, + "id": 2478, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2443, + "src": "3173:6:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3151:28:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2480, + "nodeType": "ExpressionStatement", + "src": "3151:28:24" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 2484, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3211:1:24", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 2483, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3203:7:24", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 2482, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3203:7:24", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 2485, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3203:10:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 2486, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2441, + "src": "3215:7:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 2487, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2443, + "src": "3224:6:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2481, + "name": "Transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2686, + "src": "3194:8:24", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 2488, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3194:37:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2489, + "nodeType": "EmitStatement", + "src": "3189:42:24" + } + ] + }, + "documentation": null, + "id": 2491, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_mint", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 2444, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2441, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2491, + "src": "2882:15:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2440, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2882:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2443, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2491, + "src": "2899:14:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2442, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2899:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2881:33:24" + }, + "returnParameters": { + "id": 2445, + "nodeType": "ParameterList", + "parameters": [], + "src": "2924:0:24" + }, + "scope": 2626, + "src": "2867:371:24", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2542, + "nodeType": "Block", + "src": "3300:355:24", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 2504, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2499, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2493, + "src": "3318:7:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 2502, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3337:1:24", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 2501, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3329:7:24", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 2500, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3329:7:24", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 2503, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3329:10:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "3318:21:24", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "45524332303a206275726e2066726f6d20746865207a65726f2061646472657373", + "id": 2505, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3341:35:24", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f", + "typeString": "literal_string \"ERC20: burn from the zero address\"" + }, + "value": "ERC20: burn from the zero address" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f", + "typeString": "literal_string \"ERC20: burn from the zero address\"" + } + ], + "id": 2498, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [-18, -18], + "referencedDeclaration": -18, + "src": "3310:7:24", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 2506, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3310:67:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2507, + "nodeType": "ExpressionStatement", + "src": "3310:67:24" + }, + { + "assignments": [2509], + "declarations": [ + { + "constant": false, + "id": 2509, + "mutability": "mutable", + "name": "current_balance", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2542, + "src": "3387:23:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2508, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3387:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2513, + "initialValue": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2510, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2150, + "src": "3413:9:24", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 2512, + "indexExpression": { + "argumentTypes": null, + "id": 2511, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2493, + "src": "3423:7:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3413:18:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3387:44:24" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2517, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2515, + "name": "current_balance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2509, + "src": "3449:15:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "argumentTypes": null, + "id": 2516, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2495, + "src": "3468:5:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3449:24:24", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365", + "id": 2518, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3475:36:24", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd", + "typeString": "literal_string \"ERC20: burn amount exceeds balance\"" + }, + "value": "ERC20: burn amount exceeds balance" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd", + "typeString": "literal_string \"ERC20: burn amount exceeds balance\"" + } + ], + "id": 2514, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [-18, -18], + "referencedDeclaration": -18, + "src": "3441:7:24", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 2519, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3441:71:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2520, + "nodeType": "ExpressionStatement", + "src": "3441:71:24" + }, + { + "expression": { + "argumentTypes": null, + "id": 2527, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2521, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2150, + "src": "3522:9:24", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 2523, + "indexExpression": { + "argumentTypes": null, + "id": 2522, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2493, + "src": "3532:7:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "3522:18:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2526, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2524, + "name": "current_balance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2509, + "src": "3543:15:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "argumentTypes": null, + "id": 2525, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2495, + "src": "3561:5:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3543:23:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3522:44:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2528, + "nodeType": "ExpressionStatement", + "src": "3522:44:24" + }, + { + "expression": { + "argumentTypes": null, + "id": 2531, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 2529, + "name": "_totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2158, + "src": "3576:12:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "-=", + "rightHandSide": { + "argumentTypes": null, + "id": 2530, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2495, + "src": "3592:5:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3576:21:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2532, + "nodeType": "ExpressionStatement", + "src": "3576:21:24" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2534, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2493, + "src": "3621:7:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 2537, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3638:1:24", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 2536, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3630:7:24", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 2535, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3630:7:24", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 2538, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3630:10:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 2539, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2495, + "src": "3642:5:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2533, + "name": "Transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2686, + "src": "3612:8:24", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 2540, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3612:36:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2541, + "nodeType": "EmitStatement", + "src": "3607:41:24" + } + ] + }, + "documentation": null, + "id": 2543, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_burn", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 2496, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2493, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2543, + "src": "3259:15:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2492, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3259:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2495, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2543, + "src": "3276:13:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2494, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3276:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3258:32:24" + }, + "returnParameters": { + "id": 2497, + "nodeType": "ParameterList", + "parameters": [], + "src": "3300:0:24" + }, + "scope": 2626, + "src": "3244:411:24", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2586, + "nodeType": "Block", + "src": "3765:255:24", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 2558, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2553, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2545, + "src": "3783:5:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 2556, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3800:1:24", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 2555, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3792:7:24", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 2554, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3792:7:24", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 2557, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3792:10:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "3783:19:24", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "45524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373", + "id": 2559, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3804:38:24", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208", + "typeString": "literal_string \"ERC20: approve from the zero address\"" + }, + "value": "ERC20: approve from the zero address" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208", + "typeString": "literal_string \"ERC20: approve from the zero address\"" + } + ], + "id": 2552, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [-18, -18], + "referencedDeclaration": -18, + "src": "3775:7:24", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 2560, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3775:68:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2561, + "nodeType": "ExpressionStatement", + "src": "3775:68:24" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 2568, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2563, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2547, + "src": "3861:7:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 2566, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3880:1:24", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 2565, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3872:7:24", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 2564, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3872:7:24", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 2567, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3872:10:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "3861:21:24", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "45524332303a20617070726f766520746f20746865207a65726f2061646472657373", + "id": 2569, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3884:36:24", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029", + "typeString": "literal_string \"ERC20: approve to the zero address\"" + }, + "value": "ERC20: approve to the zero address" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029", + "typeString": "literal_string \"ERC20: approve to the zero address\"" + } + ], + "id": 2562, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [-18, -18], + "referencedDeclaration": -18, + "src": "3853:7:24", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 2570, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3853:68:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2571, + "nodeType": "ExpressionStatement", + "src": "3853:68:24" + }, + { + "expression": { + "argumentTypes": null, + "id": 2578, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2572, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2156, + "src": "3932:11:24", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 2575, + "indexExpression": { + "argumentTypes": null, + "id": 2573, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2545, + "src": "3944:5:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3932:18:24", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 2576, + "indexExpression": { + "argumentTypes": null, + "id": 2574, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2547, + "src": "3951:7:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "3932:27:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 2577, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2549, + "src": "3962:5:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3932:35:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2579, + "nodeType": "ExpressionStatement", + "src": "3932:35:24" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2581, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2545, + "src": "3991:5:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 2582, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2547, + "src": "3998:7:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 2583, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2549, + "src": "4007:5:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2580, + "name": "Approval", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2694, + "src": "3982:8:24", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 2584, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3982:31:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2585, + "nodeType": "EmitStatement", + "src": "3977:36:24" + } + ] + }, + "documentation": null, + "id": 2587, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_approve", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 2550, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2545, + "mutability": "mutable", + "name": "owner", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2587, + "src": "3688:13:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2544, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3688:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2547, + "mutability": "mutable", + "name": "spender", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2587, + "src": "3711:15:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2546, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3711:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2549, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2587, + "src": "3736:13:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2548, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3736:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3678:77:24" + }, + "returnParameters": { + "id": 2551, + "nodeType": "ParameterList", + "parameters": [], + "src": "3765:0:24" + }, + "scope": 2626, + "src": "3661:359:24", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2624, + "nodeType": "Block", + "src": "4087:262:24", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2595, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2589, + "src": "4103:7:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 2596, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2591, + "src": "4112:6:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2594, + "name": "_burn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2543, + "src": "4097:5:24", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256)" + } + }, + "id": 2597, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4097:22:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2598, + "nodeType": "ExpressionStatement", + "src": "4097:22:24" + }, + { + "assignments": [2600], + "declarations": [ + { + "constant": false, + "id": 2600, + "mutability": "mutable", + "name": "current_allowance", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2624, + "src": "4129:25:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2599, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4129:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2607, + "initialValue": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2601, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2156, + "src": "4157:11:24", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 2603, + "indexExpression": { + "argumentTypes": null, + "id": 2602, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2589, + "src": "4169:7:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4157:20:24", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 2606, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2604, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "4178:3:24", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2605, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "4178:10:24", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4157:32:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4129:60:24" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2611, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2609, + "name": "current_allowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2600, + "src": "4207:17:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "argumentTypes": null, + "id": 2610, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2591, + "src": "4228:6:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4207:27:24", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "45524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e6365", + "id": 2612, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4236:38:24", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_a287c363786607a1457a2d9d12fa61c0073358e02d76b4035fc2c2d86a19c0db", + "typeString": "literal_string \"ERC20: burn amount exceeds allowance\"" + }, + "value": "ERC20: burn amount exceeds allowance" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_a287c363786607a1457a2d9d12fa61c0073358e02d76b4035fc2c2d86a19c0db", + "typeString": "literal_string \"ERC20: burn amount exceeds allowance\"" + } + ], + "id": 2608, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [-18, -18], + "referencedDeclaration": -18, + "src": "4199:7:24", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 2613, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4199:76:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2614, + "nodeType": "ExpressionStatement", + "src": "4199:76:24" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2616, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2589, + "src": "4294:7:24", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2617, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "4303:3:24", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2618, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "4303:10:24", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2621, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2619, + "name": "current_allowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2600, + "src": "4315:17:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "argumentTypes": null, + "id": 2620, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2591, + "src": "4335:6:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4315:26:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2615, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2587, + "src": "4285:8:24", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 2622, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4285:57:24", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2623, + "nodeType": "ExpressionStatement", + "src": "4285:57:24" + } + ] + }, + "documentation": null, + "id": 2625, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_burnFrom", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 2592, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2589, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2625, + "src": "4045:15:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2588, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4045:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2591, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2625, + "src": "4062:14:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2590, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4062:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4044:33:24" + }, + "returnParameters": { + "id": 2593, + "nodeType": "ParameterList", + "parameters": [], + "src": "4087:0:24" + }, + "scope": 2626, + "src": "4026:323:24", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 2627, + "src": "90:4261:24" + } + ], + "src": "40:4312:24" + }, + "bytecode": "608060405234801561001057600080fd5b50610775806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c806370a082311161005b57806370a0823114610149578063a457c2d71461016f578063a9059cbb1461019b578063dd62ed3e146101c757610088565b8063095ea7b31461008d57806318160ddd146100cd57806323b872dd146100e7578063395093511461011d575b600080fd5b6100b9600480360360408110156100a357600080fd5b506001600160a01b0381351690602001356101f5565b604080519115158252519081900360200190f35b6100d561020b565b60408051918252519081900360200190f35b6100b9600480360360608110156100fd57600080fd5b506001600160a01b03813581169160208101359091169060400135610211565b6100b96004803603604081101561013357600080fd5b506001600160a01b038135169060200135610299565b6100d56004803603602081101561015f57600080fd5b50356001600160a01b031661031d565b6100b96004803603604081101561018557600080fd5b506001600160a01b038135169060200135610338565b6100b9600480360360408110156101b157600080fd5b506001600160a01b0381351690602001356103a8565b6100d5600480360360408110156101dd57600080fd5b506001600160a01b03813581169160200135166103b5565b60006102023384846103e0565b50600192915050565b60025490565b600061021e8484846104cc565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156102815760405162461bcd60e51b81526004018080602001828103825260218152602001806106b06021913960400191505060405180910390fd5b61028e85338584036103e0565b506001949350505050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828101811115610306576040805162461bcd60e51b815260206004820152600f60248201526e45524332303a204f766572666c6f7760881b604482015290519081900360640190fd5b61031333858584016103e0565b5060019392505050565b6001600160a01b031660009081526020819052604090205490565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561039b5760405162461bcd60e51b81526004018080602001828103825260218152602001806106b06021913960400191505060405180910390fd5b61031333858584036103e0565b60006102023384846104cc565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166104255760405162461bcd60e51b815260040180806020018281038252602481526020018061071c6024913960400191505060405180910390fd5b6001600160a01b03821661046a5760405162461bcd60e51b815260040180806020018281038252602281526020018061068e6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166105115760405162461bcd60e51b81526004018080602001828103825260258152602001806106f76025913960400191505060405180910390fd5b6001600160a01b0382166105565760405162461bcd60e51b815260040180806020018281038252602381526020018061066b6023913960400191505060405180910390fd5b6001600160a01b03808416600090815260208190526040808220549285168252902054828210156105b85760405162461bcd60e51b81526004018080602001828103825260268152602001806106d16026913960400191505060405180910390fd5b808382011015610601576040805162461bcd60e51b815260206004820152600f60248201526e45524332303a204f766572666c6f7760881b604482015290519081900360640190fd5b6001600160a01b0380861660008181526020818152604080832088880390559388168083529184902085880190558351878152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a3505050505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e73666572206578636565647320616c6c6f77616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a2646970667358221220661330c930994431bdf133435807d3e76d7466af024fdd46ca386f7d8147cdb564736f6c634300060c0033", + "bytecodeSha1": "aa83c2cb1a3ad47ec87b8df787b15a8af4dfab8d", + "compiler": { + "evm_version": "istanbul", + "optimizer": { + "enabled": true, + "runs": 200 + }, + "version": "0.6.12+commit.27d51765" + }, + "contractName": "ERC20", + "coverageMap": { + "branches": { + "24": { + "ERC20._approve": { + "29": [3783, 3802, true], + "30": [3861, 3882, true] + }, + "ERC20._transfer": { + "31": [2269, 2289, true], + "32": [2349, 2372, true], + "33": [2540, 2564, true], + "34": [2625, 2672, true] + }, + "ERC20.decreaseAllowance": { + "28": [1960, 1995, true] + }, + "ERC20.increaseAllowance": { + "27": [1606, 1657, true] + }, + "ERC20.transferFrom": { + "26": [1269, 1295, true] + } + }, + "25": {} + }, + "statements": { + "24": { + "ERC20._approve": { + "15": [3775, 3843], + "16": [3853, 3921], + "17": [3932, 3967], + "18": [3977, 4013] + }, + "ERC20._transfer": { + "19": [2261, 2331], + "20": [2341, 2412], + "21": [2532, 2607], + "22": [2617, 2692], + "23": [2702, 2745], + "24": [2755, 2804], + "25": [2814, 2854] + }, + "ERC20.allowance": { + "14": [788, 822] + }, + "ERC20.approve": { + "0": [925, 961], + "1": [971, 982] + }, + "ERC20.balanceOf": { + "10": [474, 499] + }, + "ERC20.decreaseAllowance": { + "11": [1952, 2033], + "12": [2043, 2108] + }, + "ERC20.increaseAllowance": { + "7": [1598, 1677], + "8": [1687, 1748], + "9": [1758, 1769] + }, + "ERC20.totalSupply": { + "2": [357, 376] + }, + "ERC20.transfer": { + "13": [614, 654] + }, + "ERC20.transferFrom": { + "3": [1147, 1183], + "4": [1261, 1333], + "5": [1343, 1398], + "6": [1408, 1419] + } + }, + "25": {} + } + }, + "dependencies": ["IERC20"], + "deployedBytecode": "608060405234801561001057600080fd5b50600436106100885760003560e01c806370a082311161005b57806370a0823114610149578063a457c2d71461016f578063a9059cbb1461019b578063dd62ed3e146101c757610088565b8063095ea7b31461008d57806318160ddd146100cd57806323b872dd146100e7578063395093511461011d575b600080fd5b6100b9600480360360408110156100a357600080fd5b506001600160a01b0381351690602001356101f5565b604080519115158252519081900360200190f35b6100d561020b565b60408051918252519081900360200190f35b6100b9600480360360608110156100fd57600080fd5b506001600160a01b03813581169160208101359091169060400135610211565b6100b96004803603604081101561013357600080fd5b506001600160a01b038135169060200135610299565b6100d56004803603602081101561015f57600080fd5b50356001600160a01b031661031d565b6100b96004803603604081101561018557600080fd5b506001600160a01b038135169060200135610338565b6100b9600480360360408110156101b157600080fd5b506001600160a01b0381351690602001356103a8565b6100d5600480360360408110156101dd57600080fd5b506001600160a01b03813581169160200135166103b5565b60006102023384846103e0565b50600192915050565b60025490565b600061021e8484846104cc565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156102815760405162461bcd60e51b81526004018080602001828103825260218152602001806106b06021913960400191505060405180910390fd5b61028e85338584036103e0565b506001949350505050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828101811115610306576040805162461bcd60e51b815260206004820152600f60248201526e45524332303a204f766572666c6f7760881b604482015290519081900360640190fd5b61031333858584016103e0565b5060019392505050565b6001600160a01b031660009081526020819052604090205490565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561039b5760405162461bcd60e51b81526004018080602001828103825260218152602001806106b06021913960400191505060405180910390fd5b61031333858584036103e0565b60006102023384846104cc565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166104255760405162461bcd60e51b815260040180806020018281038252602481526020018061071c6024913960400191505060405180910390fd5b6001600160a01b03821661046a5760405162461bcd60e51b815260040180806020018281038252602281526020018061068e6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166105115760405162461bcd60e51b81526004018080602001828103825260258152602001806106f76025913960400191505060405180910390fd5b6001600160a01b0382166105565760405162461bcd60e51b815260040180806020018281038252602381526020018061066b6023913960400191505060405180910390fd5b6001600160a01b03808416600090815260208190526040808220549285168252902054828210156105b85760405162461bcd60e51b81526004018080602001828103825260268152602001806106d16026913960400191505060405180910390fd5b808382011015610601576040805162461bcd60e51b815260206004820152600f60248201526e45524332303a204f766572666c6f7760881b604482015290519081900360640190fd5b6001600160a01b0380861660008181526020818152604080832088880390559388168083529184902085880190558351878152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a3505050505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e73666572206578636565647320616c6c6f77616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a2646970667358221220661330c930994431bdf133435807d3e76d7466af024fdd46ca386f7d8147cdb564736f6c634300060c0033", + "deployedSourceMap": "90:4261:24:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;835:154;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;835:154:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;285:98;;;:::i;:::-;;;;;;;;;;;;;;;;995:431;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;995:431:24;;;;;;;;;;;;;;;;;:::i;1432:344::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1432:344:24;;;;;;;;:::i;389:117::-;;;;;;;;;;;;;;;;-1:-1:-1;389:117:24;-1:-1:-1;;;;;389:117:24;;:::i;1782:354::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1782:354:24;;;;;;;;:::i;512:170::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;512:170:24;;;;;;;;:::i;688:141::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;688:141:24;;;;;;;;;;:::i;835:154::-;909:4;925:36;934:10;946:7;955:5;925:8;:36::i;:::-;-1:-1:-1;978:4:24;835:154;;;;:::o;285:98::-;364:12;;285:98;:::o;995:431::-;1131:4;1147:36;1157:6;1165:9;1176:6;1147:9;:36::i;:::-;-1:-1:-1;;;;;1220:19:24;;1193:24;1220:19;;;:11;:19;;;;;;;;1240:10;1220:31;;;;;;;;1269:26;;;;1261:72;;;;-1:-1:-1;;;1261:72:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1343:55;1352:6;1360:10;1391:6;1372:16;:25;1343:8;:55::i;:::-;-1:-1:-1;1415:4:24;;995:431;-1:-1:-1;;;;995:431:24:o;1432:344::-;1568:10;1512:4;1556:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;1556:32:24;;;;;;;;;;1606:30;;;:51;-1:-1:-1;1606:51:24;1598:79;;;;;-1:-1:-1;;;1598:79:24;;;;;;;;;;;;-1:-1:-1;;;1598:79:24;;;;;;;;;;;;;;;1687:61;1696:10;1708:7;1737:10;1717:17;:30;1687:8;:61::i;:::-;-1:-1:-1;1765:4:24;;1432:344;-1:-1:-1;;;1432:344:24:o;389:117::-;-1:-1:-1;;;;;481:18:24;455:7;481:18;;;;;;;;;;;;389:117::o;1782:354::-;1922:10;1867:4;1910:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;1910:32:24;;;;;;;;;;1960:35;;;;1952:81;;;;-1:-1:-1;;;1952:81:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2043:65;2052:10;2064:7;2092:15;2073:16;:34;2043:8;:65::i;512:170::-;598:4;614:40;624:10;636:9;647:6;614:9;:40::i;688:141::-;-1:-1:-1;;;;;795:18:24;;;769:7;795:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;688:141::o;3661:359::-;-1:-1:-1;;;;;3783:19:24;;3775:68;;;;-1:-1:-1;;;3775:68:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3861:21:24;;3853:68;;;;-1:-1:-1;;;3853:68:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3932:18:24;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:35;;;3982:31;;;;;;;;;;;;;;;;;3661:359;;;:::o;2142:719::-;-1:-1:-1;;;;;2269:20:24;;2261:70;;;;-1:-1:-1;;;2261:70:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2349:23:24;;2341:71;;;;-1:-1:-1;;;2341:71:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2447:17:24;;;2422:22;2447:17;;;;;;;;;;;;2502:20;;;;;;;;2540:24;;;;2532:75;;;;-1:-1:-1;;;2532:75:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2655:17;2645:6;2625:17;:26;:47;;2617:75;;;;;-1:-1:-1;;;2617:75:24;;;;;;;;;;;;-1:-1:-1;;;2617:75:24;;;;;;;;;;;;;;;-1:-1:-1;;;;;2702:17:24;;;:9;:17;;;;;;;;;;;2722:23;;;2702:43;;2755:20;;;;;;;;;;2778:26;;;2755:49;;2819:35;;;;;;;2755:20;;2819:35;;;;;;;;;;;2142:719;;;;;:::o", + "language": "Solidity", + "natspec": { + "kind": "dev", + "methods": {}, + "version": 1 + }, + "offset": [90, 4351], + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x88 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x149 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x16F JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x19B JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x1C7 JUMPI PUSH2 0x88 JUMP JUMPDEST DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0xCD JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0xE7 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x11D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1F5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xD5 PUSH2 0x20B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xB9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x211 JUMP JUMPDEST PUSH2 0xB9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x133 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x299 JUMP JUMPDEST PUSH2 0xD5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x15F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x31D JUMP JUMPDEST PUSH2 0xB9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x338 JUMP JUMPDEST PUSH2 0xB9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x3A8 JUMP JUMPDEST PUSH2 0xD5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x3B5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x202 CALLER DUP5 DUP5 PUSH2 0x3E0 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x21E DUP5 DUP5 DUP5 PUSH2 0x4CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 DUP2 LT ISZERO PUSH2 0x281 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x6B0 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x28E DUP6 CALLER DUP6 DUP5 SUB PUSH2 0x3E0 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD DUP3 DUP2 ADD DUP2 GT ISZERO PUSH2 0x306 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x45524332303A204F766572666C6F77 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x313 CALLER DUP6 DUP6 DUP5 ADD PUSH2 0x3E0 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD DUP3 DUP2 LT ISZERO PUSH2 0x39B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x6B0 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x313 CALLER DUP6 DUP6 DUP5 SUB PUSH2 0x3E0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x202 CALLER DUP5 DUP5 PUSH2 0x4CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x425 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x71C PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x46A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x68E PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x511 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x6F7 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x556 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x66B PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SLOAD SWAP3 DUP6 AND DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP3 DUP3 LT ISZERO PUSH2 0x5B8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x6D1 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 DUP4 DUP3 ADD LT ISZERO PUSH2 0x601 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x45524332303A204F766572666C6F77 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP9 DUP9 SUB SWAP1 SSTORE SWAP4 DUP9 AND DUP1 DUP4 MSTORE SWAP2 DUP5 SWAP1 KECCAK256 DUP6 DUP9 ADD SWAP1 SSTORE DUP4 MLOAD DUP8 DUP2 MSTORE SWAP4 MLOAD SWAP2 SWAP4 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH6 0x786365656473 KECCAK256 PUSH2 0x6C6C PUSH16 0x77616E636545524332303A207472616E PUSH20 0x66657220616D6F756E7420657863656564732062 PUSH2 0x6C61 PUSH15 0x636545524332303A207472616E7366 PUSH6 0x722066726F6D KECCAK256 PUSH21 0x6865207A65726F206164647265737345524332303A KECCAK256 PUSH2 0x7070 PUSH19 0x6F76652066726F6D20746865207A65726F2061 PUSH5 0x6472657373 LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH7 0x1330C930994431 0xBD CALL CALLER NUMBER PC SMOD 0xD3 0xE7 PUSH14 0x7466AF024FDD46CA386F7D8147CD 0xB5 PUSH5 0x736F6C6343 STOP MOD 0xC STOP CALLER ", + "pcMap": { + "0": { + "offset": [90, 4351], + "op": "PUSH1", + "path": "24", + "value": "0x80" + }, + "2": { + "fn": null, + "offset": [90, 4351], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "4": { + "fn": null, + "offset": [90, 4351], + "op": "MSTORE", + "path": "24" + }, + "5": { + "fn": null, + "offset": [90, 4351], + "op": "CALLVALUE", + "path": "24" + }, + "6": { + "fn": null, + "offset": [90, 4351], + "op": "DUP1", + "path": "24" + }, + "7": { + "fn": null, + "offset": [90, 4351], + "op": "ISZERO", + "path": "24" + }, + "8": { + "fn": null, + "offset": [90, 4351], + "op": "PUSH2", + "path": "24", + "value": "0x10" + }, + "11": { + "fn": null, + "offset": [90, 4351], + "op": "JUMPI", + "path": "24" + }, + "12": { + "fn": null, + "offset": [90, 4351], + "op": "PUSH1", + "path": "24", + "value": "0x0" + }, + "14": { + "fn": null, + "offset": [90, 4351], + "op": "DUP1", + "path": "24" + }, + "15": { + "dev": "Cannot send ether to nonpayable function", + "fn": null, + "offset": [90, 4351], + "op": "REVERT", + "path": "24" + }, + "16": { + "fn": null, + "offset": [90, 4351], + "op": "JUMPDEST", + "path": "24" + }, + "17": { + "fn": null, + "offset": [90, 4351], + "op": "POP", + "path": "24" + }, + "18": { + "fn": null, + "offset": [90, 4351], + "op": "PUSH1", + "path": "24", + "value": "0x4" + }, + "20": { + "fn": null, + "offset": [90, 4351], + "op": "CALLDATASIZE", + "path": "24" + }, + "21": { + "fn": null, + "offset": [90, 4351], + "op": "LT", + "path": "24" + }, + "22": { + "fn": null, + "offset": [90, 4351], + "op": "PUSH2", + "path": "24", + "value": "0x88" + }, + "25": { + "fn": null, + "offset": [90, 4351], + "op": "JUMPI", + "path": "24" + }, + "26": { + "fn": null, + "offset": [90, 4351], + "op": "PUSH1", + "path": "24", + "value": "0x0" + }, + "28": { + "fn": null, + "offset": [90, 4351], + "op": "CALLDATALOAD", + "path": "24" + }, + "29": { + "fn": null, + "offset": [90, 4351], + "op": "PUSH1", + "path": "24", + "value": "0xE0" + }, + "31": { + "fn": null, + "offset": [90, 4351], + "op": "SHR", + "path": "24" + }, + "32": { + "fn": null, + "offset": [90, 4351], + "op": "DUP1", + "path": "24" + }, + "33": { + "fn": null, + "offset": [90, 4351], + "op": "PUSH4", + "path": "24", + "value": "0x70A08231" + }, + "38": { + "fn": null, + "offset": [90, 4351], + "op": "GT", + "path": "24" + }, + "39": { + "fn": null, + "offset": [90, 4351], + "op": "PUSH2", + "path": "24", + "value": "0x5B" + }, + "42": { + "fn": null, + "offset": [90, 4351], + "op": "JUMPI", + "path": "24" + }, + "43": { + "fn": null, + "offset": [90, 4351], + "op": "DUP1", + "path": "24" + }, + "44": { + "fn": null, + "offset": [90, 4351], + "op": "PUSH4", + "path": "24", + "value": "0x70A08231" + }, + "49": { + "fn": null, + "offset": [90, 4351], + "op": "EQ", + "path": "24" + }, + "50": { + "fn": null, + "offset": [90, 4351], + "op": "PUSH2", + "path": "24", + "value": "0x149" + }, + "53": { + "fn": null, + "offset": [90, 4351], + "op": "JUMPI", + "path": "24" + }, + "54": { + "fn": null, + "offset": [90, 4351], + "op": "DUP1", + "path": "24" + }, + "55": { + "fn": null, + "offset": [90, 4351], + "op": "PUSH4", + "path": "24", + "value": "0xA457C2D7" + }, + "60": { + "fn": null, + "offset": [90, 4351], + "op": "EQ", + "path": "24" + }, + "61": { + "fn": null, + "offset": [90, 4351], + "op": "PUSH2", + "path": "24", + "value": "0x16F" + }, + "64": { + "fn": null, + "offset": [90, 4351], + "op": "JUMPI", + "path": "24" + }, + "65": { + "fn": null, + "offset": [90, 4351], + "op": "DUP1", + "path": "24" + }, + "66": { + "fn": null, + "offset": [90, 4351], + "op": "PUSH4", + "path": "24", + "value": "0xA9059CBB" + }, + "71": { + "fn": null, + "offset": [90, 4351], + "op": "EQ", + "path": "24" + }, + "72": { + "fn": null, + "offset": [90, 4351], + "op": "PUSH2", + "path": "24", + "value": "0x19B" + }, + "75": { + "fn": null, + "offset": [90, 4351], + "op": "JUMPI", + "path": "24" + }, + "76": { + "fn": null, + "offset": [90, 4351], + "op": "DUP1", + "path": "24" + }, + "77": { + "fn": null, + "offset": [90, 4351], + "op": "PUSH4", + "path": "24", + "value": "0xDD62ED3E" + }, + "82": { + "fn": null, + "offset": [90, 4351], + "op": "EQ", + "path": "24" + }, + "83": { + "fn": null, + "offset": [90, 4351], + "op": "PUSH2", + "path": "24", + "value": "0x1C7" + }, + "86": { + "fn": null, + "offset": [90, 4351], + "op": "JUMPI", + "path": "24" + }, + "87": { + "fn": null, + "offset": [90, 4351], + "op": "PUSH2", + "path": "24", + "value": "0x88" + }, + "90": { + "fn": null, + "offset": [90, 4351], + "op": "JUMP", + "path": "24" + }, + "91": { + "fn": null, + "offset": [90, 4351], + "op": "JUMPDEST", + "path": "24" + }, + "92": { + "fn": null, + "offset": [90, 4351], + "op": "DUP1", + "path": "24" + }, + "93": { + "fn": null, + "offset": [90, 4351], + "op": "PUSH4", + "path": "24", + "value": "0x95EA7B3" + }, + "98": { + "fn": null, + "offset": [90, 4351], + "op": "EQ", + "path": "24" + }, + "99": { + "fn": null, + "offset": [90, 4351], + "op": "PUSH2", + "path": "24", + "value": "0x8D" + }, + "102": { + "fn": null, + "offset": [90, 4351], + "op": "JUMPI", + "path": "24" + }, + "103": { + "fn": null, + "offset": [90, 4351], + "op": "DUP1", + "path": "24" + }, + "104": { + "fn": null, + "offset": [90, 4351], + "op": "PUSH4", + "path": "24", + "value": "0x18160DDD" + }, + "109": { + "fn": null, + "offset": [90, 4351], + "op": "EQ", + "path": "24" + }, + "110": { + "fn": null, + "offset": [90, 4351], + "op": "PUSH2", + "path": "24", + "value": "0xCD" + }, + "113": { + "fn": null, + "offset": [90, 4351], + "op": "JUMPI", + "path": "24" + }, + "114": { + "fn": null, + "offset": [90, 4351], + "op": "DUP1", + "path": "24" + }, + "115": { + "fn": null, + "offset": [90, 4351], + "op": "PUSH4", + "path": "24", + "value": "0x23B872DD" + }, + "120": { + "fn": null, + "offset": [90, 4351], + "op": "EQ", + "path": "24" + }, + "121": { + "fn": null, + "offset": [90, 4351], + "op": "PUSH2", + "path": "24", + "value": "0xE7" + }, + "124": { + "fn": null, + "offset": [90, 4351], + "op": "JUMPI", + "path": "24" + }, + "125": { + "fn": null, + "offset": [90, 4351], + "op": "DUP1", + "path": "24" + }, + "126": { + "fn": null, + "offset": [90, 4351], + "op": "PUSH4", + "path": "24", + "value": "0x39509351" + }, + "131": { + "fn": null, + "offset": [90, 4351], + "op": "EQ", + "path": "24" + }, + "132": { + "fn": null, + "offset": [90, 4351], + "op": "PUSH2", + "path": "24", + "value": "0x11D" + }, + "135": { + "fn": null, + "offset": [90, 4351], + "op": "JUMPI", + "path": "24" + }, + "136": { + "fn": null, + "offset": [90, 4351], + "op": "JUMPDEST", + "path": "24" + }, + "137": { + "fn": null, + "offset": [90, 4351], + "op": "PUSH1", + "path": "24", + "value": "0x0" + }, + "139": { + "fn": null, + "offset": [90, 4351], + "op": "DUP1", + "path": "24" + }, + "140": { + "first_revert": true, + "fn": null, + "offset": [90, 4351], + "op": "REVERT", + "path": "24" + }, + "141": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "JUMPDEST", + "path": "24" + }, + "142": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "PUSH2", + "path": "24", + "value": "0xB9" + }, + "145": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "PUSH1", + "path": "24", + "value": "0x4" + }, + "147": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "DUP1", + "path": "24" + }, + "148": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "CALLDATASIZE", + "path": "24" + }, + "149": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "SUB", + "path": "24" + }, + "150": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "152": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "DUP2", + "path": "24" + }, + "153": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "LT", + "path": "24" + }, + "154": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "ISZERO", + "path": "24" + }, + "155": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "PUSH2", + "path": "24", + "value": "0xA3" + }, + "158": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "JUMPI", + "path": "24" + }, + "159": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "PUSH1", + "path": "24", + "value": "0x0" + }, + "161": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "DUP1", + "path": "24" + }, + "162": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "REVERT", + "path": "24" + }, + "163": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "JUMPDEST", + "path": "24" + }, + "164": { + "op": "POP" + }, + "165": { + "op": "PUSH1", + "value": "0x1" + }, + "167": { + "op": "PUSH1", + "value": "0x1" + }, + "169": { + "op": "PUSH1", + "value": "0xA0" + }, + "171": { + "op": "SHL" + }, + "172": { + "op": "SUB" + }, + "173": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "DUP2", + "path": "24" + }, + "174": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "CALLDATALOAD", + "path": "24" + }, + "175": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "AND", + "path": "24" + }, + "176": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "SWAP1", + "path": "24" + }, + "177": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "179": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "ADD", + "path": "24" + }, + "180": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "CALLDATALOAD", + "path": "24" + }, + "181": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "PUSH2", + "path": "24", + "value": "0x1F5" + }, + "184": { + "fn": "ERC20.approve", + "jump": "i", + "offset": [835, 989], + "op": "JUMP", + "path": "24" + }, + "185": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "JUMPDEST", + "path": "24" + }, + "186": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "188": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "DUP1", + "path": "24" + }, + "189": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "MLOAD", + "path": "24" + }, + "190": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "SWAP2", + "path": "24" + }, + "191": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "ISZERO", + "path": "24" + }, + "192": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "ISZERO", + "path": "24" + }, + "193": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "DUP3", + "path": "24" + }, + "194": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "MSTORE", + "path": "24" + }, + "195": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "MLOAD", + "path": "24" + }, + "196": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "SWAP1", + "path": "24" + }, + "197": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "DUP2", + "path": "24" + }, + "198": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "SWAP1", + "path": "24" + }, + "199": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "SUB", + "path": "24" + }, + "200": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "202": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "ADD", + "path": "24" + }, + "203": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "SWAP1", + "path": "24" + }, + "204": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "RETURN", + "path": "24" + }, + "205": { + "fn": "ERC20.totalSupply", + "offset": [285, 383], + "op": "JUMPDEST", + "path": "24" + }, + "206": { + "fn": "ERC20.totalSupply", + "offset": [285, 383], + "op": "PUSH2", + "path": "24", + "value": "0xD5" + }, + "209": { + "fn": "ERC20.totalSupply", + "offset": [285, 383], + "op": "PUSH2", + "path": "24", + "value": "0x20B" + }, + "212": { + "fn": "ERC20.totalSupply", + "jump": "i", + "offset": [285, 383], + "op": "JUMP", + "path": "24" + }, + "213": { + "fn": "ERC20.totalSupply", + "offset": [285, 383], + "op": "JUMPDEST", + "path": "24" + }, + "214": { + "fn": "ERC20.totalSupply", + "offset": [285, 383], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "216": { + "fn": "ERC20.totalSupply", + "offset": [285, 383], + "op": "DUP1", + "path": "24" + }, + "217": { + "fn": "ERC20.totalSupply", + "offset": [285, 383], + "op": "MLOAD", + "path": "24" + }, + "218": { + "fn": "ERC20.totalSupply", + "offset": [285, 383], + "op": "SWAP2", + "path": "24" + }, + "219": { + "fn": "ERC20.totalSupply", + "offset": [285, 383], + "op": "DUP3", + "path": "24" + }, + "220": { + "fn": "ERC20.totalSupply", + "offset": [285, 383], + "op": "MSTORE", + "path": "24" + }, + "221": { + "fn": "ERC20.totalSupply", + "offset": [285, 383], + "op": "MLOAD", + "path": "24" + }, + "222": { + "fn": "ERC20.totalSupply", + "offset": [285, 383], + "op": "SWAP1", + "path": "24" + }, + "223": { + "fn": "ERC20.totalSupply", + "offset": [285, 383], + "op": "DUP2", + "path": "24" + }, + "224": { + "fn": "ERC20.totalSupply", + "offset": [285, 383], + "op": "SWAP1", + "path": "24" + }, + "225": { + "fn": "ERC20.totalSupply", + "offset": [285, 383], + "op": "SUB", + "path": "24" + }, + "226": { + "fn": "ERC20.totalSupply", + "offset": [285, 383], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "228": { + "fn": "ERC20.totalSupply", + "offset": [285, 383], + "op": "ADD", + "path": "24" + }, + "229": { + "fn": "ERC20.totalSupply", + "offset": [285, 383], + "op": "SWAP1", + "path": "24" + }, + "230": { + "fn": "ERC20.totalSupply", + "offset": [285, 383], + "op": "RETURN", + "path": "24" + }, + "231": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "JUMPDEST", + "path": "24" + }, + "232": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "PUSH2", + "path": "24", + "value": "0xB9" + }, + "235": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "PUSH1", + "path": "24", + "value": "0x4" + }, + "237": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "DUP1", + "path": "24" + }, + "238": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "CALLDATASIZE", + "path": "24" + }, + "239": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "SUB", + "path": "24" + }, + "240": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "PUSH1", + "path": "24", + "value": "0x60" + }, + "242": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "DUP2", + "path": "24" + }, + "243": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "LT", + "path": "24" + }, + "244": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "ISZERO", + "path": "24" + }, + "245": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "PUSH2", + "path": "24", + "value": "0xFD" + }, + "248": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "JUMPI", + "path": "24" + }, + "249": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "PUSH1", + "path": "24", + "value": "0x0" + }, + "251": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "DUP1", + "path": "24" + }, + "252": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "REVERT", + "path": "24" + }, + "253": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "JUMPDEST", + "path": "24" + }, + "254": { + "op": "POP" + }, + "255": { + "op": "PUSH1", + "value": "0x1" + }, + "257": { + "op": "PUSH1", + "value": "0x1" + }, + "259": { + "op": "PUSH1", + "value": "0xA0" + }, + "261": { + "op": "SHL" + }, + "262": { + "op": "SUB" + }, + "263": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "DUP2", + "path": "24" + }, + "264": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "CALLDATALOAD", + "path": "24" + }, + "265": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "DUP2", + "path": "24" + }, + "266": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "AND", + "path": "24" + }, + "267": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "SWAP2", + "path": "24" + }, + "268": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "270": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "DUP2", + "path": "24" + }, + "271": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "ADD", + "path": "24" + }, + "272": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "CALLDATALOAD", + "path": "24" + }, + "273": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "SWAP1", + "path": "24" + }, + "274": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "SWAP2", + "path": "24" + }, + "275": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "AND", + "path": "24" + }, + "276": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "SWAP1", + "path": "24" + }, + "277": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "279": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "ADD", + "path": "24" + }, + "280": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "CALLDATALOAD", + "path": "24" + }, + "281": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "PUSH2", + "path": "24", + "value": "0x211" + }, + "284": { + "fn": "ERC20.transferFrom", + "jump": "i", + "offset": [995, 1426], + "op": "JUMP", + "path": "24" + }, + "285": { + "fn": "ERC20.increaseAllowance", + "offset": [1432, 1776], + "op": "JUMPDEST", + "path": "24" + }, + "286": { + "fn": "ERC20.increaseAllowance", + "offset": [1432, 1776], + "op": "PUSH2", + "path": "24", + "value": "0xB9" + }, + "289": { + "fn": "ERC20.increaseAllowance", + "offset": [1432, 1776], + "op": "PUSH1", + "path": "24", + "value": "0x4" + }, + "291": { + "fn": "ERC20.increaseAllowance", + "offset": [1432, 1776], + "op": "DUP1", + "path": "24" + }, + "292": { + "fn": "ERC20.increaseAllowance", + "offset": [1432, 1776], + "op": "CALLDATASIZE", + "path": "24" + }, + "293": { + "fn": "ERC20.increaseAllowance", + "offset": [1432, 1776], + "op": "SUB", + "path": "24" + }, + "294": { + "fn": "ERC20.increaseAllowance", + "offset": [1432, 1776], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "296": { + "fn": "ERC20.increaseAllowance", + "offset": [1432, 1776], + "op": "DUP2", + "path": "24" + }, + "297": { + "fn": "ERC20.increaseAllowance", + "offset": [1432, 1776], + "op": "LT", + "path": "24" + }, + "298": { + "fn": "ERC20.increaseAllowance", + "offset": [1432, 1776], + "op": "ISZERO", + "path": "24" + }, + "299": { + "fn": "ERC20.increaseAllowance", + "offset": [1432, 1776], + "op": "PUSH2", + "path": "24", + "value": "0x133" + }, + "302": { + "fn": "ERC20.increaseAllowance", + "offset": [1432, 1776], + "op": "JUMPI", + "path": "24" + }, + "303": { + "fn": "ERC20.increaseAllowance", + "offset": [1432, 1776], + "op": "PUSH1", + "path": "24", + "value": "0x0" + }, + "305": { + "fn": "ERC20.increaseAllowance", + "offset": [1432, 1776], + "op": "DUP1", + "path": "24" + }, + "306": { + "fn": "ERC20.increaseAllowance", + "offset": [1432, 1776], + "op": "REVERT", + "path": "24" + }, + "307": { + "fn": "ERC20.increaseAllowance", + "offset": [1432, 1776], + "op": "JUMPDEST", + "path": "24" + }, + "308": { + "op": "POP" + }, + "309": { + "op": "PUSH1", + "value": "0x1" + }, + "311": { + "op": "PUSH1", + "value": "0x1" + }, + "313": { + "op": "PUSH1", + "value": "0xA0" + }, + "315": { + "op": "SHL" + }, + "316": { + "op": "SUB" + }, + "317": { + "fn": "ERC20.increaseAllowance", + "offset": [1432, 1776], + "op": "DUP2", + "path": "24" + }, + "318": { + "fn": "ERC20.increaseAllowance", + "offset": [1432, 1776], + "op": "CALLDATALOAD", + "path": "24" + }, + "319": { + "fn": "ERC20.increaseAllowance", + "offset": [1432, 1776], + "op": "AND", + "path": "24" + }, + "320": { + "fn": "ERC20.increaseAllowance", + "offset": [1432, 1776], + "op": "SWAP1", + "path": "24" + }, + "321": { + "fn": "ERC20.increaseAllowance", + "offset": [1432, 1776], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "323": { + "fn": "ERC20.increaseAllowance", + "offset": [1432, 1776], + "op": "ADD", + "path": "24" + }, + "324": { + "fn": "ERC20.increaseAllowance", + "offset": [1432, 1776], + "op": "CALLDATALOAD", + "path": "24" + }, + "325": { + "fn": "ERC20.increaseAllowance", + "offset": [1432, 1776], + "op": "PUSH2", + "path": "24", + "value": "0x299" + }, + "328": { + "fn": "ERC20.increaseAllowance", + "jump": "i", + "offset": [1432, 1776], + "op": "JUMP", + "path": "24" + }, + "329": { + "fn": "ERC20.balanceOf", + "offset": [389, 506], + "op": "JUMPDEST", + "path": "24" + }, + "330": { + "fn": "ERC20.balanceOf", + "offset": [389, 506], + "op": "PUSH2", + "path": "24", + "value": "0xD5" + }, + "333": { + "fn": "ERC20.balanceOf", + "offset": [389, 506], + "op": "PUSH1", + "path": "24", + "value": "0x4" + }, + "335": { + "fn": "ERC20.balanceOf", + "offset": [389, 506], + "op": "DUP1", + "path": "24" + }, + "336": { + "fn": "ERC20.balanceOf", + "offset": [389, 506], + "op": "CALLDATASIZE", + "path": "24" + }, + "337": { + "fn": "ERC20.balanceOf", + "offset": [389, 506], + "op": "SUB", + "path": "24" + }, + "338": { + "fn": "ERC20.balanceOf", + "offset": [389, 506], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "340": { + "fn": "ERC20.balanceOf", + "offset": [389, 506], + "op": "DUP2", + "path": "24" + }, + "341": { + "fn": "ERC20.balanceOf", + "offset": [389, 506], + "op": "LT", + "path": "24" + }, + "342": { + "fn": "ERC20.balanceOf", + "offset": [389, 506], + "op": "ISZERO", + "path": "24" + }, + "343": { + "fn": "ERC20.balanceOf", + "offset": [389, 506], + "op": "PUSH2", + "path": "24", + "value": "0x15F" + }, + "346": { + "fn": "ERC20.balanceOf", + "offset": [389, 506], + "op": "JUMPI", + "path": "24" + }, + "347": { + "fn": "ERC20.balanceOf", + "offset": [389, 506], + "op": "PUSH1", + "path": "24", + "value": "0x0" + }, + "349": { + "fn": "ERC20.balanceOf", + "offset": [389, 506], + "op": "DUP1", + "path": "24" + }, + "350": { + "fn": "ERC20.balanceOf", + "offset": [389, 506], + "op": "REVERT", + "path": "24" + }, + "351": { + "fn": "ERC20.balanceOf", + "offset": [389, 506], + "op": "JUMPDEST", + "path": "24" + }, + "352": { + "op": "POP" + }, + "353": { + "fn": "ERC20.balanceOf", + "offset": [389, 506], + "op": "CALLDATALOAD", + "path": "24" + }, + "354": { + "op": "PUSH1", + "value": "0x1" + }, + "356": { + "op": "PUSH1", + "value": "0x1" + }, + "358": { + "op": "PUSH1", + "value": "0xA0" + }, + "360": { + "op": "SHL" + }, + "361": { + "op": "SUB" + }, + "362": { + "fn": "ERC20.balanceOf", + "offset": [389, 506], + "op": "AND", + "path": "24" + }, + "363": { + "fn": "ERC20.balanceOf", + "offset": [389, 506], + "op": "PUSH2", + "path": "24", + "value": "0x31D" + }, + "366": { + "fn": "ERC20.balanceOf", + "jump": "i", + "offset": [389, 506], + "op": "JUMP", + "path": "24" + }, + "367": { + "fn": "ERC20.decreaseAllowance", + "offset": [1782, 2136], + "op": "JUMPDEST", + "path": "24" + }, + "368": { + "fn": "ERC20.decreaseAllowance", + "offset": [1782, 2136], + "op": "PUSH2", + "path": "24", + "value": "0xB9" + }, + "371": { + "fn": "ERC20.decreaseAllowance", + "offset": [1782, 2136], + "op": "PUSH1", + "path": "24", + "value": "0x4" + }, + "373": { + "fn": "ERC20.decreaseAllowance", + "offset": [1782, 2136], + "op": "DUP1", + "path": "24" + }, + "374": { + "fn": "ERC20.decreaseAllowance", + "offset": [1782, 2136], + "op": "CALLDATASIZE", + "path": "24" + }, + "375": { + "fn": "ERC20.decreaseAllowance", + "offset": [1782, 2136], + "op": "SUB", + "path": "24" + }, + "376": { + "fn": "ERC20.decreaseAllowance", + "offset": [1782, 2136], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "378": { + "fn": "ERC20.decreaseAllowance", + "offset": [1782, 2136], + "op": "DUP2", + "path": "24" + }, + "379": { + "fn": "ERC20.decreaseAllowance", + "offset": [1782, 2136], + "op": "LT", + "path": "24" + }, + "380": { + "fn": "ERC20.decreaseAllowance", + "offset": [1782, 2136], + "op": "ISZERO", + "path": "24" + }, + "381": { + "fn": "ERC20.decreaseAllowance", + "offset": [1782, 2136], + "op": "PUSH2", + "path": "24", + "value": "0x185" + }, + "384": { + "fn": "ERC20.decreaseAllowance", + "offset": [1782, 2136], + "op": "JUMPI", + "path": "24" + }, + "385": { + "fn": "ERC20.decreaseAllowance", + "offset": [1782, 2136], + "op": "PUSH1", + "path": "24", + "value": "0x0" + }, + "387": { + "fn": "ERC20.decreaseAllowance", + "offset": [1782, 2136], + "op": "DUP1", + "path": "24" + }, + "388": { + "fn": "ERC20.decreaseAllowance", + "offset": [1782, 2136], + "op": "REVERT", + "path": "24" + }, + "389": { + "fn": "ERC20.decreaseAllowance", + "offset": [1782, 2136], + "op": "JUMPDEST", + "path": "24" + }, + "390": { + "op": "POP" + }, + "391": { + "op": "PUSH1", + "value": "0x1" + }, + "393": { + "op": "PUSH1", + "value": "0x1" + }, + "395": { + "op": "PUSH1", + "value": "0xA0" + }, + "397": { + "op": "SHL" + }, + "398": { + "op": "SUB" + }, + "399": { + "fn": "ERC20.decreaseAllowance", + "offset": [1782, 2136], + "op": "DUP2", + "path": "24" + }, + "400": { + "fn": "ERC20.decreaseAllowance", + "offset": [1782, 2136], + "op": "CALLDATALOAD", + "path": "24" + }, + "401": { + "fn": "ERC20.decreaseAllowance", + "offset": [1782, 2136], + "op": "AND", + "path": "24" + }, + "402": { + "fn": "ERC20.decreaseAllowance", + "offset": [1782, 2136], + "op": "SWAP1", + "path": "24" + }, + "403": { + "fn": "ERC20.decreaseAllowance", + "offset": [1782, 2136], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "405": { + "fn": "ERC20.decreaseAllowance", + "offset": [1782, 2136], + "op": "ADD", + "path": "24" + }, + "406": { + "fn": "ERC20.decreaseAllowance", + "offset": [1782, 2136], + "op": "CALLDATALOAD", + "path": "24" + }, + "407": { + "fn": "ERC20.decreaseAllowance", + "offset": [1782, 2136], + "op": "PUSH2", + "path": "24", + "value": "0x338" + }, + "410": { + "fn": "ERC20.decreaseAllowance", + "jump": "i", + "offset": [1782, 2136], + "op": "JUMP", + "path": "24" + }, + "411": { + "fn": "ERC20.transfer", + "offset": [512, 682], + "op": "JUMPDEST", + "path": "24" + }, + "412": { + "fn": "ERC20.transfer", + "offset": [512, 682], + "op": "PUSH2", + "path": "24", + "value": "0xB9" + }, + "415": { + "fn": "ERC20.transfer", + "offset": [512, 682], + "op": "PUSH1", + "path": "24", + "value": "0x4" + }, + "417": { + "fn": "ERC20.transfer", + "offset": [512, 682], + "op": "DUP1", + "path": "24" + }, + "418": { + "fn": "ERC20.transfer", + "offset": [512, 682], + "op": "CALLDATASIZE", + "path": "24" + }, + "419": { + "fn": "ERC20.transfer", + "offset": [512, 682], + "op": "SUB", + "path": "24" + }, + "420": { + "fn": "ERC20.transfer", + "offset": [512, 682], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "422": { + "fn": "ERC20.transfer", + "offset": [512, 682], + "op": "DUP2", + "path": "24" + }, + "423": { + "fn": "ERC20.transfer", + "offset": [512, 682], + "op": "LT", + "path": "24" + }, + "424": { + "fn": "ERC20.transfer", + "offset": [512, 682], + "op": "ISZERO", + "path": "24" + }, + "425": { + "fn": "ERC20.transfer", + "offset": [512, 682], + "op": "PUSH2", + "path": "24", + "value": "0x1B1" + }, + "428": { + "fn": "ERC20.transfer", + "offset": [512, 682], + "op": "JUMPI", + "path": "24" + }, + "429": { + "fn": "ERC20.transfer", + "offset": [512, 682], + "op": "PUSH1", + "path": "24", + "value": "0x0" + }, + "431": { + "fn": "ERC20.transfer", + "offset": [512, 682], + "op": "DUP1", + "path": "24" + }, + "432": { + "fn": "ERC20.transfer", + "offset": [512, 682], + "op": "REVERT", + "path": "24" + }, + "433": { + "fn": "ERC20.transfer", + "offset": [512, 682], + "op": "JUMPDEST", + "path": "24" + }, + "434": { + "op": "POP" + }, + "435": { + "op": "PUSH1", + "value": "0x1" + }, + "437": { + "op": "PUSH1", + "value": "0x1" + }, + "439": { + "op": "PUSH1", + "value": "0xA0" + }, + "441": { + "op": "SHL" + }, + "442": { + "op": "SUB" + }, + "443": { + "fn": "ERC20.transfer", + "offset": [512, 682], + "op": "DUP2", + "path": "24" + }, + "444": { + "fn": "ERC20.transfer", + "offset": [512, 682], + "op": "CALLDATALOAD", + "path": "24" + }, + "445": { + "fn": "ERC20.transfer", + "offset": [512, 682], + "op": "AND", + "path": "24" + }, + "446": { + "fn": "ERC20.transfer", + "offset": [512, 682], + "op": "SWAP1", + "path": "24" + }, + "447": { + "fn": "ERC20.transfer", + "offset": [512, 682], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "449": { + "fn": "ERC20.transfer", + "offset": [512, 682], + "op": "ADD", + "path": "24" + }, + "450": { + "fn": "ERC20.transfer", + "offset": [512, 682], + "op": "CALLDATALOAD", + "path": "24" + }, + "451": { + "fn": "ERC20.transfer", + "offset": [512, 682], + "op": "PUSH2", + "path": "24", + "value": "0x3A8" + }, + "454": { + "fn": "ERC20.transfer", + "jump": "i", + "offset": [512, 682], + "op": "JUMP", + "path": "24" + }, + "455": { + "fn": "ERC20.allowance", + "offset": [688, 829], + "op": "JUMPDEST", + "path": "24" + }, + "456": { + "fn": "ERC20.allowance", + "offset": [688, 829], + "op": "PUSH2", + "path": "24", + "value": "0xD5" + }, + "459": { + "fn": "ERC20.allowance", + "offset": [688, 829], + "op": "PUSH1", + "path": "24", + "value": "0x4" + }, + "461": { + "fn": "ERC20.allowance", + "offset": [688, 829], + "op": "DUP1", + "path": "24" + }, + "462": { + "fn": "ERC20.allowance", + "offset": [688, 829], + "op": "CALLDATASIZE", + "path": "24" + }, + "463": { + "fn": "ERC20.allowance", + "offset": [688, 829], + "op": "SUB", + "path": "24" + }, + "464": { + "fn": "ERC20.allowance", + "offset": [688, 829], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "466": { + "fn": "ERC20.allowance", + "offset": [688, 829], + "op": "DUP2", + "path": "24" + }, + "467": { + "fn": "ERC20.allowance", + "offset": [688, 829], + "op": "LT", + "path": "24" + }, + "468": { + "fn": "ERC20.allowance", + "offset": [688, 829], + "op": "ISZERO", + "path": "24" + }, + "469": { + "fn": "ERC20.allowance", + "offset": [688, 829], + "op": "PUSH2", + "path": "24", + "value": "0x1DD" + }, + "472": { + "fn": "ERC20.allowance", + "offset": [688, 829], + "op": "JUMPI", + "path": "24" + }, + "473": { + "fn": "ERC20.allowance", + "offset": [688, 829], + "op": "PUSH1", + "path": "24", + "value": "0x0" + }, + "475": { + "fn": "ERC20.allowance", + "offset": [688, 829], + "op": "DUP1", + "path": "24" + }, + "476": { + "fn": "ERC20.allowance", + "offset": [688, 829], + "op": "REVERT", + "path": "24" + }, + "477": { + "fn": "ERC20.allowance", + "offset": [688, 829], + "op": "JUMPDEST", + "path": "24" + }, + "478": { + "op": "POP" + }, + "479": { + "op": "PUSH1", + "value": "0x1" + }, + "481": { + "op": "PUSH1", + "value": "0x1" + }, + "483": { + "op": "PUSH1", + "value": "0xA0" + }, + "485": { + "op": "SHL" + }, + "486": { + "op": "SUB" + }, + "487": { + "fn": "ERC20.allowance", + "offset": [688, 829], + "op": "DUP2", + "path": "24" + }, + "488": { + "fn": "ERC20.allowance", + "offset": [688, 829], + "op": "CALLDATALOAD", + "path": "24" + }, + "489": { + "fn": "ERC20.allowance", + "offset": [688, 829], + "op": "DUP2", + "path": "24" + }, + "490": { + "fn": "ERC20.allowance", + "offset": [688, 829], + "op": "AND", + "path": "24" + }, + "491": { + "fn": "ERC20.allowance", + "offset": [688, 829], + "op": "SWAP2", + "path": "24" + }, + "492": { + "fn": "ERC20.allowance", + "offset": [688, 829], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "494": { + "fn": "ERC20.allowance", + "offset": [688, 829], + "op": "ADD", + "path": "24" + }, + "495": { + "fn": "ERC20.allowance", + "offset": [688, 829], + "op": "CALLDATALOAD", + "path": "24" + }, + "496": { + "fn": "ERC20.allowance", + "offset": [688, 829], + "op": "AND", + "path": "24" + }, + "497": { + "fn": "ERC20.allowance", + "offset": [688, 829], + "op": "PUSH2", + "path": "24", + "value": "0x3B5" + }, + "500": { + "fn": "ERC20.allowance", + "jump": "i", + "offset": [688, 829], + "op": "JUMP", + "path": "24" + }, + "501": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "JUMPDEST", + "path": "24" + }, + "502": { + "fn": "ERC20.approve", + "offset": [909, 913], + "op": "PUSH1", + "path": "24", + "value": "0x0" + }, + "504": { + "fn": "ERC20.approve", + "offset": [925, 961], + "op": "PUSH2", + "path": "24", + "statement": 0, + "value": "0x202" + }, + "507": { + "fn": "ERC20.approve", + "offset": [934, 944], + "op": "CALLER", + "path": "24" + }, + "508": { + "fn": "ERC20.approve", + "offset": [946, 953], + "op": "DUP5", + "path": "24" + }, + "509": { + "fn": "ERC20.approve", + "offset": [955, 960], + "op": "DUP5", + "path": "24" + }, + "510": { + "fn": "ERC20.approve", + "offset": [925, 933], + "op": "PUSH2", + "path": "24", + "value": "0x3E0" + }, + "513": { + "fn": "ERC20.approve", + "jump": "i", + "offset": [925, 961], + "op": "JUMP", + "path": "24" + }, + "514": { + "fn": "ERC20.approve", + "offset": [925, 961], + "op": "JUMPDEST", + "path": "24" + }, + "515": { + "op": "POP" + }, + "516": { + "fn": "ERC20.approve", + "offset": [978, 982], + "op": "PUSH1", + "path": "24", + "statement": 1, + "value": "0x1" + }, + "518": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "SWAP3", + "path": "24" + }, + "519": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "SWAP2", + "path": "24" + }, + "520": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "POP", + "path": "24" + }, + "521": { + "fn": "ERC20.approve", + "offset": [835, 989], + "op": "POP", + "path": "24" + }, + "522": { + "fn": "ERC20.approve", + "jump": "o", + "offset": [835, 989], + "op": "JUMP", + "path": "24" + }, + "523": { + "fn": "ERC20.totalSupply", + "offset": [285, 383], + "op": "JUMPDEST", + "path": "24" + }, + "524": { + "fn": "ERC20.totalSupply", + "offset": [364, 376], + "op": "PUSH1", + "path": "24", + "statement": 2, + "value": "0x2" + }, + "526": { + "fn": "ERC20.totalSupply", + "offset": [364, 376], + "op": "SLOAD", + "path": "24" + }, + "527": { + "fn": "ERC20.totalSupply", + "offset": [285, 383], + "op": "SWAP1", + "path": "24" + }, + "528": { + "fn": "ERC20.totalSupply", + "jump": "o", + "offset": [285, 383], + "op": "JUMP", + "path": "24" + }, + "529": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "JUMPDEST", + "path": "24" + }, + "530": { + "fn": "ERC20.transferFrom", + "offset": [1131, 1135], + "op": "PUSH1", + "path": "24", + "value": "0x0" + }, + "532": { + "fn": "ERC20.transferFrom", + "offset": [1147, 1183], + "op": "PUSH2", + "path": "24", + "statement": 3, + "value": "0x21E" + }, + "535": { + "fn": "ERC20.transferFrom", + "offset": [1157, 1163], + "op": "DUP5", + "path": "24" + }, + "536": { + "fn": "ERC20.transferFrom", + "offset": [1165, 1174], + "op": "DUP5", + "path": "24" + }, + "537": { + "fn": "ERC20.transferFrom", + "offset": [1176, 1182], + "op": "DUP5", + "path": "24" + }, + "538": { + "fn": "ERC20.transferFrom", + "offset": [1147, 1156], + "op": "PUSH2", + "path": "24", + "value": "0x4CC" + }, + "541": { + "fn": "ERC20.transferFrom", + "jump": "i", + "offset": [1147, 1183], + "op": "JUMP", + "path": "24" + }, + "542": { + "fn": "ERC20.transferFrom", + "offset": [1147, 1183], + "op": "JUMPDEST", + "path": "24" + }, + "543": { + "op": "PUSH1", + "value": "0x1" + }, + "545": { + "op": "PUSH1", + "value": "0x1" + }, + "547": { + "op": "PUSH1", + "value": "0xA0" + }, + "549": { + "op": "SHL" + }, + "550": { + "op": "SUB" + }, + "551": { + "fn": "ERC20.transferFrom", + "offset": [1220, 1239], + "op": "DUP5", + "path": "24" + }, + "552": { + "fn": "ERC20.transferFrom", + "offset": [1220, 1239], + "op": "AND", + "path": "24" + }, + "553": { + "fn": "ERC20.transferFrom", + "offset": [1193, 1217], + "op": "PUSH1", + "path": "24", + "value": "0x0" + }, + "555": { + "fn": "ERC20.transferFrom", + "offset": [1220, 1239], + "op": "SWAP1", + "path": "24" + }, + "556": { + "fn": "ERC20.transferFrom", + "offset": [1220, 1239], + "op": "DUP2", + "path": "24" + }, + "557": { + "fn": "ERC20.transferFrom", + "offset": [1220, 1239], + "op": "MSTORE", + "path": "24" + }, + "558": { + "fn": "ERC20.transferFrom", + "offset": [1220, 1231], + "op": "PUSH1", + "path": "24", + "value": "0x1" + }, + "560": { + "fn": "ERC20.transferFrom", + "offset": [1220, 1239], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "562": { + "fn": "ERC20.transferFrom", + "offset": [1220, 1239], + "op": "SWAP1", + "path": "24" + }, + "563": { + "fn": "ERC20.transferFrom", + "offset": [1220, 1239], + "op": "DUP2", + "path": "24" + }, + "564": { + "fn": "ERC20.transferFrom", + "offset": [1220, 1239], + "op": "MSTORE", + "path": "24" + }, + "565": { + "fn": "ERC20.transferFrom", + "offset": [1220, 1239], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "567": { + "fn": "ERC20.transferFrom", + "offset": [1220, 1239], + "op": "DUP1", + "path": "24" + }, + "568": { + "fn": "ERC20.transferFrom", + "offset": [1220, 1239], + "op": "DUP4", + "path": "24" + }, + "569": { + "fn": "ERC20.transferFrom", + "offset": [1220, 1239], + "op": "KECCAK256", + "path": "24" + }, + "570": { + "fn": "ERC20.transferFrom", + "offset": [1240, 1250], + "op": "CALLER", + "path": "24" + }, + "571": { + "fn": "ERC20.transferFrom", + "offset": [1220, 1251], + "op": "DUP5", + "path": "24" + }, + "572": { + "fn": "ERC20.transferFrom", + "offset": [1220, 1251], + "op": "MSTORE", + "path": "24" + }, + "573": { + "fn": "ERC20.transferFrom", + "offset": [1220, 1251], + "op": "SWAP1", + "path": "24" + }, + "574": { + "fn": "ERC20.transferFrom", + "offset": [1220, 1251], + "op": "SWAP2", + "path": "24" + }, + "575": { + "fn": "ERC20.transferFrom", + "offset": [1220, 1251], + "op": "MSTORE", + "path": "24" + }, + "576": { + "fn": "ERC20.transferFrom", + "offset": [1220, 1251], + "op": "SWAP1", + "path": "24" + }, + "577": { + "fn": "ERC20.transferFrom", + "offset": [1220, 1251], + "op": "KECCAK256", + "path": "24" + }, + "578": { + "fn": "ERC20.transferFrom", + "offset": [1220, 1251], + "op": "SLOAD", + "path": "24" + }, + "579": { + "fn": "ERC20.transferFrom", + "offset": [1269, 1295], + "op": "DUP3", + "path": "24", + "statement": 4 + }, + "580": { + "fn": "ERC20.transferFrom", + "offset": [1269, 1295], + "op": "DUP2", + "path": "24" + }, + "581": { + "fn": "ERC20.transferFrom", + "offset": [1269, 1295], + "op": "LT", + "path": "24" + }, + "582": { + "branch": 26, + "fn": "ERC20.transferFrom", + "offset": [1269, 1295], + "op": "ISZERO", + "path": "24" + }, + "583": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "PUSH2", + "path": "24", + "value": "0x281" + }, + "586": { + "branch": 26, + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "JUMPI", + "path": "24" + }, + "587": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "589": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "MLOAD", + "path": "24" + }, + "590": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "594": { + "op": "PUSH1", + "value": "0xE5" + }, + "596": { + "op": "SHL" + }, + "597": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "DUP2", + "path": "24" + }, + "598": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "MSTORE", + "path": "24" + }, + "599": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "PUSH1", + "path": "24", + "value": "0x4" + }, + "601": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "ADD", + "path": "24" + }, + "602": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "DUP1", + "path": "24" + }, + "603": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "DUP1", + "path": "24" + }, + "604": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "606": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "ADD", + "path": "24" + }, + "607": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "DUP3", + "path": "24" + }, + "608": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "DUP2", + "path": "24" + }, + "609": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "SUB", + "path": "24" + }, + "610": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "DUP3", + "path": "24" + }, + "611": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "MSTORE", + "path": "24" + }, + "612": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "PUSH1", + "path": "24", + "value": "0x21" + }, + "614": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "DUP2", + "path": "24" + }, + "615": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "MSTORE", + "path": "24" + }, + "616": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "618": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "ADD", + "path": "24" + }, + "619": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "DUP1", + "path": "24" + }, + "620": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "PUSH2", + "path": "24", + "value": "0x6B0" + }, + "623": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "PUSH1", + "path": "24", + "value": "0x21" + }, + "625": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "SWAP2", + "path": "24" + }, + "626": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "CODECOPY", + "path": "24" + }, + "627": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "629": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "ADD", + "path": "24" + }, + "630": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "SWAP2", + "path": "24" + }, + "631": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "POP", + "path": "24" + }, + "632": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "POP", + "path": "24" + }, + "633": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "635": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "MLOAD", + "path": "24" + }, + "636": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "DUP1", + "path": "24" + }, + "637": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "SWAP2", + "path": "24" + }, + "638": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "SUB", + "path": "24" + }, + "639": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "SWAP1", + "path": "24" + }, + "640": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "REVERT", + "path": "24" + }, + "641": { + "fn": "ERC20.transferFrom", + "offset": [1261, 1333], + "op": "JUMPDEST", + "path": "24" + }, + "642": { + "fn": "ERC20.transferFrom", + "offset": [1343, 1398], + "op": "PUSH2", + "path": "24", + "statement": 5, + "value": "0x28E" + }, + "645": { + "fn": "ERC20.transferFrom", + "offset": [1352, 1358], + "op": "DUP6", + "path": "24" + }, + "646": { + "fn": "ERC20.transferFrom", + "offset": [1360, 1370], + "op": "CALLER", + "path": "24" + }, + "647": { + "fn": "ERC20.transferFrom", + "offset": [1391, 1397], + "op": "DUP6", + "path": "24" + }, + "648": { + "fn": "ERC20.transferFrom", + "offset": [1372, 1388], + "op": "DUP5", + "path": "24" + }, + "649": { + "fn": "ERC20.transferFrom", + "offset": [1372, 1397], + "op": "SUB", + "path": "24" + }, + "650": { + "fn": "ERC20.transferFrom", + "offset": [1343, 1351], + "op": "PUSH2", + "path": "24", + "value": "0x3E0" + }, + "653": { + "fn": "ERC20.transferFrom", + "jump": "i", + "offset": [1343, 1398], + "op": "JUMP", + "path": "24" + }, + "654": { + "fn": "ERC20.transferFrom", + "offset": [1343, 1398], + "op": "JUMPDEST", + "path": "24" + }, + "655": { + "op": "POP" + }, + "656": { + "fn": "ERC20.transferFrom", + "offset": [1415, 1419], + "op": "PUSH1", + "path": "24", + "statement": 6, + "value": "0x1" + }, + "658": { + "fn": "ERC20.transferFrom", + "offset": [1415, 1419], + "op": "SWAP5", + "path": "24" + }, + "659": { + "fn": "ERC20.transferFrom", + "offset": [995, 1426], + "op": "SWAP4", + "path": "24" + }, + "660": { + "op": "POP" + }, + "661": { + "op": "POP" + }, + "662": { + "op": "POP" + }, + "663": { + "op": "POP" + }, + "664": { + "fn": "ERC20.transferFrom", + "jump": "o", + "offset": [995, 1426], + "op": "JUMP", + "path": "24" + }, + "665": { + "fn": "ERC20.increaseAllowance", + "offset": [1432, 1776], + "op": "JUMPDEST", + "path": "24" + }, + "666": { + "fn": "ERC20.increaseAllowance", + "offset": [1568, 1578], + "op": "CALLER", + "path": "24" + }, + "667": { + "fn": "ERC20.increaseAllowance", + "offset": [1512, 1516], + "op": "PUSH1", + "path": "24", + "value": "0x0" + }, + "669": { + "fn": "ERC20.increaseAllowance", + "offset": [1556, 1579], + "op": "SWAP1", + "path": "24" + }, + "670": { + "fn": "ERC20.increaseAllowance", + "offset": [1556, 1579], + "op": "DUP2", + "path": "24" + }, + "671": { + "fn": "ERC20.increaseAllowance", + "offset": [1556, 1579], + "op": "MSTORE", + "path": "24" + }, + "672": { + "fn": "ERC20.increaseAllowance", + "offset": [1556, 1567], + "op": "PUSH1", + "path": "24", + "value": "0x1" + }, + "674": { + "fn": "ERC20.increaseAllowance", + "offset": [1556, 1579], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "676": { + "fn": "ERC20.increaseAllowance", + "offset": [1556, 1579], + "op": "SWAP1", + "path": "24" + }, + "677": { + "fn": "ERC20.increaseAllowance", + "offset": [1556, 1579], + "op": "DUP2", + "path": "24" + }, + "678": { + "fn": "ERC20.increaseAllowance", + "offset": [1556, 1579], + "op": "MSTORE", + "path": "24" + }, + "679": { + "fn": "ERC20.increaseAllowance", + "offset": [1556, 1579], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "681": { + "fn": "ERC20.increaseAllowance", + "offset": [1556, 1579], + "op": "DUP1", + "path": "24" + }, + "682": { + "fn": "ERC20.increaseAllowance", + "offset": [1556, 1579], + "op": "DUP4", + "path": "24" + }, + "683": { + "fn": "ERC20.increaseAllowance", + "offset": [1556, 1579], + "op": "KECCAK256", + "path": "24" + }, + "684": { + "op": "PUSH1", + "value": "0x1" + }, + "686": { + "op": "PUSH1", + "value": "0x1" + }, + "688": { + "op": "PUSH1", + "value": "0xA0" + }, + "690": { + "op": "SHL" + }, + "691": { + "op": "SUB" + }, + "692": { + "fn": "ERC20.increaseAllowance", + "offset": [1556, 1588], + "op": "DUP7", + "path": "24" + }, + "693": { + "fn": "ERC20.increaseAllowance", + "offset": [1556, 1588], + "op": "AND", + "path": "24" + }, + "694": { + "fn": "ERC20.increaseAllowance", + "offset": [1556, 1588], + "op": "DUP5", + "path": "24" + }, + "695": { + "fn": "ERC20.increaseAllowance", + "offset": [1556, 1588], + "op": "MSTORE", + "path": "24" + }, + "696": { + "fn": "ERC20.increaseAllowance", + "offset": [1556, 1588], + "op": "SWAP1", + "path": "24" + }, + "697": { + "fn": "ERC20.increaseAllowance", + "offset": [1556, 1588], + "op": "SWAP2", + "path": "24" + }, + "698": { + "fn": "ERC20.increaseAllowance", + "offset": [1556, 1588], + "op": "MSTORE", + "path": "24" + }, + "699": { + "fn": "ERC20.increaseAllowance", + "offset": [1556, 1588], + "op": "DUP2", + "path": "24" + }, + "700": { + "fn": "ERC20.increaseAllowance", + "offset": [1556, 1588], + "op": "KECCAK256", + "path": "24" + }, + "701": { + "fn": "ERC20.increaseAllowance", + "offset": [1556, 1588], + "op": "SLOAD", + "path": "24" + }, + "702": { + "fn": "ERC20.increaseAllowance", + "offset": [1606, 1636], + "op": "DUP3", + "path": "24", + "statement": 7 + }, + "703": { + "fn": "ERC20.increaseAllowance", + "offset": [1606, 1636], + "op": "DUP2", + "path": "24" + }, + "704": { + "fn": "ERC20.increaseAllowance", + "offset": [1606, 1636], + "op": "ADD", + "path": "24" + }, + "705": { + "fn": "ERC20.increaseAllowance", + "offset": [1606, 1657], + "op": "DUP2", + "path": "24" + }, + "706": { + "op": "GT" + }, + "707": { + "branch": 27, + "fn": "ERC20.increaseAllowance", + "offset": [1606, 1657], + "op": "ISZERO", + "path": "24" + }, + "708": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "PUSH2", + "path": "24", + "value": "0x306" + }, + "711": { + "branch": 27, + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "JUMPI", + "path": "24" + }, + "712": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "714": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "DUP1", + "path": "24" + }, + "715": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "MLOAD", + "path": "24" + }, + "716": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "720": { + "op": "PUSH1", + "value": "0xE5" + }, + "722": { + "op": "SHL" + }, + "723": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "DUP2", + "path": "24" + }, + "724": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "MSTORE", + "path": "24" + }, + "725": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "727": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "PUSH1", + "path": "24", + "value": "0x4" + }, + "729": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "DUP3", + "path": "24" + }, + "730": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "ADD", + "path": "24" + }, + "731": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "MSTORE", + "path": "24" + }, + "732": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "PUSH1", + "path": "24", + "value": "0xF" + }, + "734": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "PUSH1", + "path": "24", + "value": "0x24" + }, + "736": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "DUP3", + "path": "24" + }, + "737": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "ADD", + "path": "24" + }, + "738": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "MSTORE", + "path": "24" + }, + "739": { + "op": "PUSH15", + "value": "0x45524332303A204F766572666C6F77" + }, + "755": { + "op": "PUSH1", + "value": "0x88" + }, + "757": { + "op": "SHL" + }, + "758": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "PUSH1", + "path": "24", + "value": "0x44" + }, + "760": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "DUP3", + "path": "24" + }, + "761": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "ADD", + "path": "24" + }, + "762": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "MSTORE", + "path": "24" + }, + "763": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "SWAP1", + "path": "24" + }, + "764": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "MLOAD", + "path": "24" + }, + "765": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "SWAP1", + "path": "24" + }, + "766": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "DUP2", + "path": "24" + }, + "767": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "SWAP1", + "path": "24" + }, + "768": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "SUB", + "path": "24" + }, + "769": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "PUSH1", + "path": "24", + "value": "0x64" + }, + "771": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "ADD", + "path": "24" + }, + "772": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "SWAP1", + "path": "24" + }, + "773": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "REVERT", + "path": "24" + }, + "774": { + "fn": "ERC20.increaseAllowance", + "offset": [1598, 1677], + "op": "JUMPDEST", + "path": "24" + }, + "775": { + "fn": "ERC20.increaseAllowance", + "offset": [1687, 1748], + "op": "PUSH2", + "path": "24", + "statement": 8, + "value": "0x313" + }, + "778": { + "fn": "ERC20.increaseAllowance", + "offset": [1696, 1706], + "op": "CALLER", + "path": "24" + }, + "779": { + "fn": "ERC20.increaseAllowance", + "offset": [1708, 1715], + "op": "DUP6", + "path": "24" + }, + "780": { + "fn": "ERC20.increaseAllowance", + "offset": [1737, 1747], + "op": "DUP6", + "path": "24" + }, + "781": { + "fn": "ERC20.increaseAllowance", + "offset": [1717, 1734], + "op": "DUP5", + "path": "24" + }, + "782": { + "fn": "ERC20.increaseAllowance", + "offset": [1717, 1747], + "op": "ADD", + "path": "24" + }, + "783": { + "fn": "ERC20.increaseAllowance", + "offset": [1687, 1695], + "op": "PUSH2", + "path": "24", + "value": "0x3E0" + }, + "786": { + "fn": "ERC20.increaseAllowance", + "jump": "i", + "offset": [1687, 1748], + "op": "JUMP", + "path": "24" + }, + "787": { + "fn": "ERC20.increaseAllowance", + "offset": [1687, 1748], + "op": "JUMPDEST", + "path": "24" + }, + "788": { + "op": "POP" + }, + "789": { + "fn": "ERC20.increaseAllowance", + "offset": [1765, 1769], + "op": "PUSH1", + "path": "24", + "statement": 9, + "value": "0x1" + }, + "791": { + "fn": "ERC20.increaseAllowance", + "offset": [1765, 1769], + "op": "SWAP4", + "path": "24" + }, + "792": { + "fn": "ERC20.increaseAllowance", + "offset": [1432, 1776], + "op": "SWAP3", + "path": "24" + }, + "793": { + "op": "POP" + }, + "794": { + "op": "POP" + }, + "795": { + "op": "POP" + }, + "796": { + "fn": "ERC20.increaseAllowance", + "jump": "o", + "offset": [1432, 1776], + "op": "JUMP", + "path": "24" + }, + "797": { + "fn": "ERC20.balanceOf", + "offset": [389, 506], + "op": "JUMPDEST", + "path": "24" + }, + "798": { + "op": "PUSH1", + "value": "0x1" + }, + "800": { + "op": "PUSH1", + "value": "0x1" + }, + "802": { + "op": "PUSH1", + "value": "0xA0" + }, + "804": { + "op": "SHL" + }, + "805": { + "op": "SUB" + }, + "806": { + "fn": "ERC20.balanceOf", + "offset": [481, 499], + "op": "AND", + "path": "24", + "statement": 10 + }, + "807": { + "fn": "ERC20.balanceOf", + "offset": [455, 462], + "op": "PUSH1", + "path": "24", + "value": "0x0" + }, + "809": { + "fn": "ERC20.balanceOf", + "offset": [481, 499], + "op": "SWAP1", + "path": "24" + }, + "810": { + "fn": "ERC20.balanceOf", + "offset": [481, 499], + "op": "DUP2", + "path": "24" + }, + "811": { + "fn": "ERC20.balanceOf", + "offset": [481, 499], + "op": "MSTORE", + "path": "24" + }, + "812": { + "fn": "ERC20.balanceOf", + "offset": [481, 499], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "814": { + "fn": "ERC20.balanceOf", + "offset": [481, 499], + "op": "DUP2", + "path": "24" + }, + "815": { + "fn": "ERC20.balanceOf", + "offset": [481, 499], + "op": "SWAP1", + "path": "24" + }, + "816": { + "fn": "ERC20.balanceOf", + "offset": [481, 499], + "op": "MSTORE", + "path": "24" + }, + "817": { + "fn": "ERC20.balanceOf", + "offset": [481, 499], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "819": { + "fn": "ERC20.balanceOf", + "offset": [481, 499], + "op": "SWAP1", + "path": "24" + }, + "820": { + "fn": "ERC20.balanceOf", + "offset": [481, 499], + "op": "KECCAK256", + "path": "24" + }, + "821": { + "fn": "ERC20.balanceOf", + "offset": [481, 499], + "op": "SLOAD", + "path": "24" + }, + "822": { + "fn": "ERC20.balanceOf", + "offset": [481, 499], + "op": "SWAP1", + "path": "24" + }, + "823": { + "fn": "ERC20.balanceOf", + "jump": "o", + "offset": [389, 506], + "op": "JUMP", + "path": "24" + }, + "824": { + "fn": "ERC20.decreaseAllowance", + "offset": [1782, 2136], + "op": "JUMPDEST", + "path": "24" + }, + "825": { + "fn": "ERC20.decreaseAllowance", + "offset": [1922, 1932], + "op": "CALLER", + "path": "24" + }, + "826": { + "fn": "ERC20.decreaseAllowance", + "offset": [1867, 1871], + "op": "PUSH1", + "path": "24", + "value": "0x0" + }, + "828": { + "fn": "ERC20.decreaseAllowance", + "offset": [1910, 1933], + "op": "SWAP1", + "path": "24" + }, + "829": { + "fn": "ERC20.decreaseAllowance", + "offset": [1910, 1933], + "op": "DUP2", + "path": "24" + }, + "830": { + "fn": "ERC20.decreaseAllowance", + "offset": [1910, 1933], + "op": "MSTORE", + "path": "24" + }, + "831": { + "fn": "ERC20.decreaseAllowance", + "offset": [1910, 1921], + "op": "PUSH1", + "path": "24", + "value": "0x1" + }, + "833": { + "fn": "ERC20.decreaseAllowance", + "offset": [1910, 1933], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "835": { + "fn": "ERC20.decreaseAllowance", + "offset": [1910, 1933], + "op": "SWAP1", + "path": "24" + }, + "836": { + "fn": "ERC20.decreaseAllowance", + "offset": [1910, 1933], + "op": "DUP2", + "path": "24" + }, + "837": { + "fn": "ERC20.decreaseAllowance", + "offset": [1910, 1933], + "op": "MSTORE", + "path": "24" + }, + "838": { + "fn": "ERC20.decreaseAllowance", + "offset": [1910, 1933], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "840": { + "fn": "ERC20.decreaseAllowance", + "offset": [1910, 1933], + "op": "DUP1", + "path": "24" + }, + "841": { + "fn": "ERC20.decreaseAllowance", + "offset": [1910, 1933], + "op": "DUP4", + "path": "24" + }, + "842": { + "fn": "ERC20.decreaseAllowance", + "offset": [1910, 1933], + "op": "KECCAK256", + "path": "24" + }, + "843": { + "op": "PUSH1", + "value": "0x1" + }, + "845": { + "op": "PUSH1", + "value": "0x1" + }, + "847": { + "op": "PUSH1", + "value": "0xA0" + }, + "849": { + "op": "SHL" + }, + "850": { + "op": "SUB" + }, + "851": { + "fn": "ERC20.decreaseAllowance", + "offset": [1910, 1942], + "op": "DUP7", + "path": "24" + }, + "852": { + "fn": "ERC20.decreaseAllowance", + "offset": [1910, 1942], + "op": "AND", + "path": "24" + }, + "853": { + "fn": "ERC20.decreaseAllowance", + "offset": [1910, 1942], + "op": "DUP5", + "path": "24" + }, + "854": { + "fn": "ERC20.decreaseAllowance", + "offset": [1910, 1942], + "op": "MSTORE", + "path": "24" + }, + "855": { + "fn": "ERC20.decreaseAllowance", + "offset": [1910, 1942], + "op": "SWAP1", + "path": "24" + }, + "856": { + "fn": "ERC20.decreaseAllowance", + "offset": [1910, 1942], + "op": "SWAP2", + "path": "24" + }, + "857": { + "fn": "ERC20.decreaseAllowance", + "offset": [1910, 1942], + "op": "MSTORE", + "path": "24" + }, + "858": { + "fn": "ERC20.decreaseAllowance", + "offset": [1910, 1942], + "op": "DUP2", + "path": "24" + }, + "859": { + "fn": "ERC20.decreaseAllowance", + "offset": [1910, 1942], + "op": "KECCAK256", + "path": "24" + }, + "860": { + "fn": "ERC20.decreaseAllowance", + "offset": [1910, 1942], + "op": "SLOAD", + "path": "24" + }, + "861": { + "fn": "ERC20.decreaseAllowance", + "offset": [1960, 1995], + "op": "DUP3", + "path": "24", + "statement": 11 + }, + "862": { + "fn": "ERC20.decreaseAllowance", + "offset": [1960, 1995], + "op": "DUP2", + "path": "24" + }, + "863": { + "fn": "ERC20.decreaseAllowance", + "offset": [1960, 1995], + "op": "LT", + "path": "24" + }, + "864": { + "branch": 28, + "fn": "ERC20.decreaseAllowance", + "offset": [1960, 1995], + "op": "ISZERO", + "path": "24" + }, + "865": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "PUSH2", + "path": "24", + "value": "0x39B" + }, + "868": { + "branch": 28, + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "JUMPI", + "path": "24" + }, + "869": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "871": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "MLOAD", + "path": "24" + }, + "872": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "876": { + "op": "PUSH1", + "value": "0xE5" + }, + "878": { + "op": "SHL" + }, + "879": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "DUP2", + "path": "24" + }, + "880": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "MSTORE", + "path": "24" + }, + "881": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "PUSH1", + "path": "24", + "value": "0x4" + }, + "883": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "ADD", + "path": "24" + }, + "884": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "DUP1", + "path": "24" + }, + "885": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "DUP1", + "path": "24" + }, + "886": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "888": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "ADD", + "path": "24" + }, + "889": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "DUP3", + "path": "24" + }, + "890": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "DUP2", + "path": "24" + }, + "891": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "SUB", + "path": "24" + }, + "892": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "DUP3", + "path": "24" + }, + "893": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "MSTORE", + "path": "24" + }, + "894": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "PUSH1", + "path": "24", + "value": "0x21" + }, + "896": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "DUP2", + "path": "24" + }, + "897": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "MSTORE", + "path": "24" + }, + "898": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "900": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "ADD", + "path": "24" + }, + "901": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "DUP1", + "path": "24" + }, + "902": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "PUSH2", + "path": "24", + "value": "0x6B0" + }, + "905": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "PUSH1", + "path": "24", + "value": "0x21" + }, + "907": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "SWAP2", + "path": "24" + }, + "908": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "CODECOPY", + "path": "24" + }, + "909": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "911": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "ADD", + "path": "24" + }, + "912": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "SWAP2", + "path": "24" + }, + "913": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "POP", + "path": "24" + }, + "914": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "POP", + "path": "24" + }, + "915": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "917": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "MLOAD", + "path": "24" + }, + "918": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "DUP1", + "path": "24" + }, + "919": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "SWAP2", + "path": "24" + }, + "920": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "SUB", + "path": "24" + }, + "921": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "SWAP1", + "path": "24" + }, + "922": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "REVERT", + "path": "24" + }, + "923": { + "fn": "ERC20.decreaseAllowance", + "offset": [1952, 2033], + "op": "JUMPDEST", + "path": "24" + }, + "924": { + "fn": "ERC20.decreaseAllowance", + "offset": [2043, 2108], + "op": "PUSH2", + "path": "24", + "statement": 12, + "value": "0x313" + }, + "927": { + "fn": "ERC20.decreaseAllowance", + "offset": [2052, 2062], + "op": "CALLER", + "path": "24" + }, + "928": { + "fn": "ERC20.decreaseAllowance", + "offset": [2064, 2071], + "op": "DUP6", + "path": "24" + }, + "929": { + "fn": "ERC20.decreaseAllowance", + "offset": [2092, 2107], + "op": "DUP6", + "path": "24" + }, + "930": { + "fn": "ERC20.decreaseAllowance", + "offset": [2073, 2089], + "op": "DUP5", + "path": "24" + }, + "931": { + "fn": "ERC20.decreaseAllowance", + "offset": [2073, 2107], + "op": "SUB", + "path": "24" + }, + "932": { + "fn": "ERC20.decreaseAllowance", + "offset": [2043, 2051], + "op": "PUSH2", + "path": "24", + "value": "0x3E0" + }, + "935": { + "fn": "ERC20.decreaseAllowance", + "jump": "i", + "offset": [2043, 2108], + "op": "JUMP", + "path": "24" + }, + "936": { + "fn": "ERC20.transfer", + "offset": [512, 682], + "op": "JUMPDEST", + "path": "24" + }, + "937": { + "fn": "ERC20.transfer", + "offset": [598, 602], + "op": "PUSH1", + "path": "24", + "value": "0x0" + }, + "939": { + "fn": "ERC20.transfer", + "offset": [614, 654], + "op": "PUSH2", + "path": "24", + "statement": 13, + "value": "0x202" + }, + "942": { + "fn": "ERC20.transfer", + "offset": [624, 634], + "op": "CALLER", + "path": "24" + }, + "943": { + "fn": "ERC20.transfer", + "offset": [636, 645], + "op": "DUP5", + "path": "24" + }, + "944": { + "fn": "ERC20.transfer", + "offset": [647, 653], + "op": "DUP5", + "path": "24" + }, + "945": { + "fn": "ERC20.transfer", + "offset": [614, 623], + "op": "PUSH2", + "path": "24", + "value": "0x4CC" + }, + "948": { + "fn": "ERC20.transfer", + "jump": "i", + "offset": [614, 654], + "op": "JUMP", + "path": "24" + }, + "949": { + "fn": "ERC20.allowance", + "offset": [688, 829], + "op": "JUMPDEST", + "path": "24" + }, + "950": { + "op": "PUSH1", + "value": "0x1" + }, + "952": { + "op": "PUSH1", + "value": "0x1" + }, + "954": { + "op": "PUSH1", + "value": "0xA0" + }, + "956": { + "op": "SHL" + }, + "957": { + "op": "SUB" + }, + "958": { + "fn": "ERC20.allowance", + "offset": [795, 813], + "op": "SWAP2", + "path": "24", + "statement": 14 + }, + "959": { + "fn": "ERC20.allowance", + "offset": [795, 813], + "op": "DUP3", + "path": "24" + }, + "960": { + "fn": "ERC20.allowance", + "offset": [795, 813], + "op": "AND", + "path": "24" + }, + "961": { + "fn": "ERC20.allowance", + "offset": [769, 776], + "op": "PUSH1", + "path": "24", + "value": "0x0" + }, + "963": { + "fn": "ERC20.allowance", + "offset": [795, 813], + "op": "SWAP1", + "path": "24" + }, + "964": { + "fn": "ERC20.allowance", + "offset": [795, 813], + "op": "DUP2", + "path": "24" + }, + "965": { + "fn": "ERC20.allowance", + "offset": [795, 813], + "op": "MSTORE", + "path": "24" + }, + "966": { + "fn": "ERC20.allowance", + "offset": [795, 806], + "op": "PUSH1", + "path": "24", + "value": "0x1" + }, + "968": { + "fn": "ERC20.allowance", + "offset": [795, 813], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "970": { + "fn": "ERC20.allowance", + "offset": [795, 813], + "op": "SWAP1", + "path": "24" + }, + "971": { + "fn": "ERC20.allowance", + "offset": [795, 813], + "op": "DUP2", + "path": "24" + }, + "972": { + "fn": "ERC20.allowance", + "offset": [795, 813], + "op": "MSTORE", + "path": "24" + }, + "973": { + "fn": "ERC20.allowance", + "offset": [795, 813], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "975": { + "fn": "ERC20.allowance", + "offset": [795, 813], + "op": "DUP1", + "path": "24" + }, + "976": { + "fn": "ERC20.allowance", + "offset": [795, 813], + "op": "DUP4", + "path": "24" + }, + "977": { + "fn": "ERC20.allowance", + "offset": [795, 813], + "op": "KECCAK256", + "path": "24" + }, + "978": { + "fn": "ERC20.allowance", + "offset": [795, 822], + "op": "SWAP4", + "path": "24" + }, + "979": { + "fn": "ERC20.allowance", + "offset": [795, 822], + "op": "SWAP1", + "path": "24" + }, + "980": { + "fn": "ERC20.allowance", + "offset": [795, 822], + "op": "SWAP5", + "path": "24" + }, + "981": { + "fn": "ERC20.allowance", + "offset": [795, 822], + "op": "AND", + "path": "24" + }, + "982": { + "fn": "ERC20.allowance", + "offset": [795, 822], + "op": "DUP3", + "path": "24" + }, + "983": { + "fn": "ERC20.allowance", + "offset": [795, 822], + "op": "MSTORE", + "path": "24" + }, + "984": { + "fn": "ERC20.allowance", + "offset": [795, 822], + "op": "SWAP2", + "path": "24" + }, + "985": { + "fn": "ERC20.allowance", + "offset": [795, 822], + "op": "SWAP1", + "path": "24" + }, + "986": { + "fn": "ERC20.allowance", + "offset": [795, 822], + "op": "SWAP2", + "path": "24" + }, + "987": { + "fn": "ERC20.allowance", + "offset": [795, 822], + "op": "MSTORE", + "path": "24" + }, + "988": { + "fn": "ERC20.allowance", + "offset": [795, 822], + "op": "KECCAK256", + "path": "24" + }, + "989": { + "fn": "ERC20.allowance", + "offset": [795, 822], + "op": "SLOAD", + "path": "24" + }, + "990": { + "fn": "ERC20.allowance", + "offset": [795, 822], + "op": "SWAP1", + "path": "24" + }, + "991": { + "fn": "ERC20.allowance", + "jump": "o", + "offset": [688, 829], + "op": "JUMP", + "path": "24" + }, + "992": { + "fn": "ERC20._approve", + "offset": [3661, 4020], + "op": "JUMPDEST", + "path": "24" + }, + "993": { + "op": "PUSH1", + "value": "0x1" + }, + "995": { + "op": "PUSH1", + "value": "0x1" + }, + "997": { + "op": "PUSH1", + "value": "0xA0" + }, + "999": { + "op": "SHL" + }, + "1000": { + "op": "SUB" + }, + "1001": { + "fn": "ERC20._approve", + "offset": [3783, 3802], + "op": "DUP4", + "path": "24", + "statement": 15 + }, + "1002": { + "branch": 29, + "fn": "ERC20._approve", + "offset": [3783, 3802], + "op": "AND", + "path": "24" + }, + "1003": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "PUSH2", + "path": "24", + "value": "0x425" + }, + "1006": { + "branch": 29, + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "JUMPI", + "path": "24" + }, + "1007": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "1009": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "MLOAD", + "path": "24" + }, + "1010": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "1014": { + "op": "PUSH1", + "value": "0xE5" + }, + "1016": { + "op": "SHL" + }, + "1017": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "DUP2", + "path": "24" + }, + "1018": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "MSTORE", + "path": "24" + }, + "1019": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "PUSH1", + "path": "24", + "value": "0x4" + }, + "1021": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "ADD", + "path": "24" + }, + "1022": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "DUP1", + "path": "24" + }, + "1023": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "DUP1", + "path": "24" + }, + "1024": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "1026": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "ADD", + "path": "24" + }, + "1027": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "DUP3", + "path": "24" + }, + "1028": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "DUP2", + "path": "24" + }, + "1029": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "SUB", + "path": "24" + }, + "1030": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "DUP3", + "path": "24" + }, + "1031": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "MSTORE", + "path": "24" + }, + "1032": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "PUSH1", + "path": "24", + "value": "0x24" + }, + "1034": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "DUP2", + "path": "24" + }, + "1035": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "MSTORE", + "path": "24" + }, + "1036": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "1038": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "ADD", + "path": "24" + }, + "1039": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "DUP1", + "path": "24" + }, + "1040": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "PUSH2", + "path": "24", + "value": "0x71C" + }, + "1043": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "PUSH1", + "path": "24", + "value": "0x24" + }, + "1045": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "SWAP2", + "path": "24" + }, + "1046": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "CODECOPY", + "path": "24" + }, + "1047": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "1049": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "ADD", + "path": "24" + }, + "1050": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "SWAP2", + "path": "24" + }, + "1051": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "POP", + "path": "24" + }, + "1052": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "POP", + "path": "24" + }, + "1053": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "1055": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "MLOAD", + "path": "24" + }, + "1056": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "DUP1", + "path": "24" + }, + "1057": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "SWAP2", + "path": "24" + }, + "1058": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "SUB", + "path": "24" + }, + "1059": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "SWAP1", + "path": "24" + }, + "1060": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "REVERT", + "path": "24" + }, + "1061": { + "fn": "ERC20._approve", + "offset": [3775, 3843], + "op": "JUMPDEST", + "path": "24" + }, + "1062": { + "op": "PUSH1", + "value": "0x1" + }, + "1064": { + "op": "PUSH1", + "value": "0x1" + }, + "1066": { + "op": "PUSH1", + "value": "0xA0" + }, + "1068": { + "op": "SHL" + }, + "1069": { + "op": "SUB" + }, + "1070": { + "fn": "ERC20._approve", + "offset": [3861, 3882], + "op": "DUP3", + "path": "24", + "statement": 16 + }, + "1071": { + "branch": 30, + "fn": "ERC20._approve", + "offset": [3861, 3882], + "op": "AND", + "path": "24" + }, + "1072": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "PUSH2", + "path": "24", + "value": "0x46A" + }, + "1075": { + "branch": 30, + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "JUMPI", + "path": "24" + }, + "1076": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "1078": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "MLOAD", + "path": "24" + }, + "1079": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "1083": { + "op": "PUSH1", + "value": "0xE5" + }, + "1085": { + "op": "SHL" + }, + "1086": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "DUP2", + "path": "24" + }, + "1087": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "MSTORE", + "path": "24" + }, + "1088": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "PUSH1", + "path": "24", + "value": "0x4" + }, + "1090": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "ADD", + "path": "24" + }, + "1091": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "DUP1", + "path": "24" + }, + "1092": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "DUP1", + "path": "24" + }, + "1093": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "1095": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "ADD", + "path": "24" + }, + "1096": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "DUP3", + "path": "24" + }, + "1097": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "DUP2", + "path": "24" + }, + "1098": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "SUB", + "path": "24" + }, + "1099": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "DUP3", + "path": "24" + }, + "1100": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "MSTORE", + "path": "24" + }, + "1101": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "PUSH1", + "path": "24", + "value": "0x22" + }, + "1103": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "DUP2", + "path": "24" + }, + "1104": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "MSTORE", + "path": "24" + }, + "1105": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "1107": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "ADD", + "path": "24" + }, + "1108": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "DUP1", + "path": "24" + }, + "1109": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "PUSH2", + "path": "24", + "value": "0x68E" + }, + "1112": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "PUSH1", + "path": "24", + "value": "0x22" + }, + "1114": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "SWAP2", + "path": "24" + }, + "1115": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "CODECOPY", + "path": "24" + }, + "1116": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "1118": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "ADD", + "path": "24" + }, + "1119": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "SWAP2", + "path": "24" + }, + "1120": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "POP", + "path": "24" + }, + "1121": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "POP", + "path": "24" + }, + "1122": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "1124": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "MLOAD", + "path": "24" + }, + "1125": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "DUP1", + "path": "24" + }, + "1126": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "SWAP2", + "path": "24" + }, + "1127": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "SUB", + "path": "24" + }, + "1128": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "SWAP1", + "path": "24" + }, + "1129": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "REVERT", + "path": "24" + }, + "1130": { + "fn": "ERC20._approve", + "offset": [3853, 3921], + "op": "JUMPDEST", + "path": "24" + }, + "1131": { + "op": "PUSH1", + "value": "0x1" + }, + "1133": { + "op": "PUSH1", + "value": "0x1" + }, + "1135": { + "op": "PUSH1", + "value": "0xA0" + }, + "1137": { + "op": "SHL" + }, + "1138": { + "op": "SUB" + }, + "1139": { + "fn": "ERC20._approve", + "offset": [3932, 3950], + "op": "DUP1", + "path": "24", + "statement": 17 + }, + "1140": { + "fn": "ERC20._approve", + "offset": [3932, 3950], + "op": "DUP5", + "path": "24" + }, + "1141": { + "fn": "ERC20._approve", + "offset": [3932, 3950], + "op": "AND", + "path": "24" + }, + "1142": { + "fn": "ERC20._approve", + "offset": [3932, 3950], + "op": "PUSH1", + "path": "24", + "value": "0x0" + }, + "1144": { + "fn": "ERC20._approve", + "offset": [3932, 3950], + "op": "DUP2", + "path": "24" + }, + "1145": { + "fn": "ERC20._approve", + "offset": [3932, 3950], + "op": "DUP2", + "path": "24" + }, + "1146": { + "fn": "ERC20._approve", + "offset": [3932, 3950], + "op": "MSTORE", + "path": "24" + }, + "1147": { + "fn": "ERC20._approve", + "offset": [3932, 3943], + "op": "PUSH1", + "path": "24", + "value": "0x1" + }, + "1149": { + "fn": "ERC20._approve", + "offset": [3932, 3950], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "1151": { + "fn": "ERC20._approve", + "offset": [3932, 3950], + "op": "SWAP1", + "path": "24" + }, + "1152": { + "fn": "ERC20._approve", + "offset": [3932, 3950], + "op": "DUP2", + "path": "24" + }, + "1153": { + "fn": "ERC20._approve", + "offset": [3932, 3950], + "op": "MSTORE", + "path": "24" + }, + "1154": { + "fn": "ERC20._approve", + "offset": [3932, 3950], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "1156": { + "fn": "ERC20._approve", + "offset": [3932, 3950], + "op": "DUP1", + "path": "24" + }, + "1157": { + "fn": "ERC20._approve", + "offset": [3932, 3950], + "op": "DUP4", + "path": "24" + }, + "1158": { + "fn": "ERC20._approve", + "offset": [3932, 3950], + "op": "KECCAK256", + "path": "24" + }, + "1159": { + "fn": "ERC20._approve", + "offset": [3932, 3959], + "op": "SWAP5", + "path": "24" + }, + "1160": { + "fn": "ERC20._approve", + "offset": [3932, 3959], + "op": "DUP8", + "path": "24" + }, + "1161": { + "fn": "ERC20._approve", + "offset": [3932, 3959], + "op": "AND", + "path": "24" + }, + "1162": { + "fn": "ERC20._approve", + "offset": [3932, 3959], + "op": "DUP1", + "path": "24" + }, + "1163": { + "fn": "ERC20._approve", + "offset": [3932, 3959], + "op": "DUP5", + "path": "24" + }, + "1164": { + "fn": "ERC20._approve", + "offset": [3932, 3959], + "op": "MSTORE", + "path": "24" + }, + "1165": { + "fn": "ERC20._approve", + "offset": [3932, 3959], + "op": "SWAP5", + "path": "24" + }, + "1166": { + "fn": "ERC20._approve", + "offset": [3932, 3959], + "op": "DUP3", + "path": "24" + }, + "1167": { + "fn": "ERC20._approve", + "offset": [3932, 3959], + "op": "MSTORE", + "path": "24" + }, + "1168": { + "fn": "ERC20._approve", + "offset": [3932, 3959], + "op": "SWAP2", + "path": "24" + }, + "1169": { + "fn": "ERC20._approve", + "offset": [3932, 3959], + "op": "DUP3", + "path": "24" + }, + "1170": { + "fn": "ERC20._approve", + "offset": [3932, 3959], + "op": "SWAP1", + "path": "24" + }, + "1171": { + "fn": "ERC20._approve", + "offset": [3932, 3959], + "op": "KECCAK256", + "path": "24" + }, + "1172": { + "fn": "ERC20._approve", + "offset": [3932, 3967], + "op": "DUP6", + "path": "24" + }, + "1173": { + "fn": "ERC20._approve", + "offset": [3932, 3967], + "op": "SWAP1", + "path": "24" + }, + "1174": { + "fn": "ERC20._approve", + "offset": [3932, 3967], + "op": "SSTORE", + "path": "24" + }, + "1175": { + "fn": "ERC20._approve", + "offset": [3982, 4013], + "op": "DUP2", + "path": "24", + "statement": 18 + }, + "1176": { + "fn": "ERC20._approve", + "offset": [3982, 4013], + "op": "MLOAD", + "path": "24" + }, + "1177": { + "fn": "ERC20._approve", + "offset": [3982, 4013], + "op": "DUP6", + "path": "24" + }, + "1178": { + "fn": "ERC20._approve", + "offset": [3982, 4013], + "op": "DUP2", + "path": "24" + }, + "1179": { + "fn": "ERC20._approve", + "offset": [3982, 4013], + "op": "MSTORE", + "path": "24" + }, + "1180": { + "fn": "ERC20._approve", + "offset": [3982, 4013], + "op": "SWAP2", + "path": "24" + }, + "1181": { + "fn": "ERC20._approve", + "offset": [3982, 4013], + "op": "MLOAD", + "path": "24" + }, + "1182": { + "fn": "ERC20._approve", + "offset": [3982, 4013], + "op": "PUSH32", + "path": "24", + "value": "0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925" + }, + "1215": { + "fn": "ERC20._approve", + "offset": [3982, 4013], + "op": "SWAP3", + "path": "24" + }, + "1216": { + "fn": "ERC20._approve", + "offset": [3982, 4013], + "op": "DUP2", + "path": "24" + }, + "1217": { + "fn": "ERC20._approve", + "offset": [3982, 4013], + "op": "SWAP1", + "path": "24" + }, + "1218": { + "fn": "ERC20._approve", + "offset": [3982, 4013], + "op": "SUB", + "path": "24" + }, + "1219": { + "fn": "ERC20._approve", + "offset": [3982, 4013], + "op": "SWAP1", + "path": "24" + }, + "1220": { + "fn": "ERC20._approve", + "offset": [3982, 4013], + "op": "SWAP2", + "path": "24" + }, + "1221": { + "fn": "ERC20._approve", + "offset": [3982, 4013], + "op": "ADD", + "path": "24" + }, + "1222": { + "fn": "ERC20._approve", + "offset": [3982, 4013], + "op": "SWAP1", + "path": "24" + }, + "1223": { + "fn": "ERC20._approve", + "offset": [3982, 4013], + "op": "LOG3", + "path": "24" + }, + "1224": { + "fn": "ERC20._approve", + "offset": [3661, 4020], + "op": "POP", + "path": "24" + }, + "1225": { + "fn": "ERC20._approve", + "offset": [3661, 4020], + "op": "POP", + "path": "24" + }, + "1226": { + "fn": "ERC20._approve", + "offset": [3661, 4020], + "op": "POP", + "path": "24" + }, + "1227": { + "fn": "ERC20._approve", + "jump": "o", + "offset": [3661, 4020], + "op": "JUMP", + "path": "24" + }, + "1228": { + "fn": "ERC20._transfer", + "offset": [2142, 2861], + "op": "JUMPDEST", + "path": "24" + }, + "1229": { + "op": "PUSH1", + "value": "0x1" + }, + "1231": { + "op": "PUSH1", + "value": "0x1" + }, + "1233": { + "op": "PUSH1", + "value": "0xA0" + }, + "1235": { + "op": "SHL" + }, + "1236": { + "op": "SUB" + }, + "1237": { + "fn": "ERC20._transfer", + "offset": [2269, 2289], + "op": "DUP4", + "path": "24", + "statement": 19 + }, + "1238": { + "branch": 31, + "fn": "ERC20._transfer", + "offset": [2269, 2289], + "op": "AND", + "path": "24" + }, + "1239": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "PUSH2", + "path": "24", + "value": "0x511" + }, + "1242": { + "branch": 31, + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "JUMPI", + "path": "24" + }, + "1243": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "1245": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "MLOAD", + "path": "24" + }, + "1246": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "1250": { + "op": "PUSH1", + "value": "0xE5" + }, + "1252": { + "op": "SHL" + }, + "1253": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "DUP2", + "path": "24" + }, + "1254": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "MSTORE", + "path": "24" + }, + "1255": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "PUSH1", + "path": "24", + "value": "0x4" + }, + "1257": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "ADD", + "path": "24" + }, + "1258": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "DUP1", + "path": "24" + }, + "1259": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "DUP1", + "path": "24" + }, + "1260": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "1262": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "ADD", + "path": "24" + }, + "1263": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "DUP3", + "path": "24" + }, + "1264": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "DUP2", + "path": "24" + }, + "1265": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "SUB", + "path": "24" + }, + "1266": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "DUP3", + "path": "24" + }, + "1267": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "MSTORE", + "path": "24" + }, + "1268": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "PUSH1", + "path": "24", + "value": "0x25" + }, + "1270": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "DUP2", + "path": "24" + }, + "1271": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "MSTORE", + "path": "24" + }, + "1272": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "1274": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "ADD", + "path": "24" + }, + "1275": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "DUP1", + "path": "24" + }, + "1276": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "PUSH2", + "path": "24", + "value": "0x6F7" + }, + "1279": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "PUSH1", + "path": "24", + "value": "0x25" + }, + "1281": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "SWAP2", + "path": "24" + }, + "1282": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "CODECOPY", + "path": "24" + }, + "1283": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "1285": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "ADD", + "path": "24" + }, + "1286": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "SWAP2", + "path": "24" + }, + "1287": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "POP", + "path": "24" + }, + "1288": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "POP", + "path": "24" + }, + "1289": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "1291": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "MLOAD", + "path": "24" + }, + "1292": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "DUP1", + "path": "24" + }, + "1293": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "SWAP2", + "path": "24" + }, + "1294": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "SUB", + "path": "24" + }, + "1295": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "SWAP1", + "path": "24" + }, + "1296": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "REVERT", + "path": "24" + }, + "1297": { + "fn": "ERC20._transfer", + "offset": [2261, 2331], + "op": "JUMPDEST", + "path": "24" + }, + "1298": { + "op": "PUSH1", + "value": "0x1" + }, + "1300": { + "op": "PUSH1", + "value": "0x1" + }, + "1302": { + "op": "PUSH1", + "value": "0xA0" + }, + "1304": { + "op": "SHL" + }, + "1305": { + "op": "SUB" + }, + "1306": { + "fn": "ERC20._transfer", + "offset": [2349, 2372], + "op": "DUP3", + "path": "24", + "statement": 20 + }, + "1307": { + "branch": 32, + "fn": "ERC20._transfer", + "offset": [2349, 2372], + "op": "AND", + "path": "24" + }, + "1308": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "PUSH2", + "path": "24", + "value": "0x556" + }, + "1311": { + "branch": 32, + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "JUMPI", + "path": "24" + }, + "1312": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "1314": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "MLOAD", + "path": "24" + }, + "1315": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "1319": { + "op": "PUSH1", + "value": "0xE5" + }, + "1321": { + "op": "SHL" + }, + "1322": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "DUP2", + "path": "24" + }, + "1323": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "MSTORE", + "path": "24" + }, + "1324": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "PUSH1", + "path": "24", + "value": "0x4" + }, + "1326": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "ADD", + "path": "24" + }, + "1327": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "DUP1", + "path": "24" + }, + "1328": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "DUP1", + "path": "24" + }, + "1329": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "1331": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "ADD", + "path": "24" + }, + "1332": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "DUP3", + "path": "24" + }, + "1333": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "DUP2", + "path": "24" + }, + "1334": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "SUB", + "path": "24" + }, + "1335": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "DUP3", + "path": "24" + }, + "1336": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "MSTORE", + "path": "24" + }, + "1337": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "PUSH1", + "path": "24", + "value": "0x23" + }, + "1339": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "DUP2", + "path": "24" + }, + "1340": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "MSTORE", + "path": "24" + }, + "1341": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "1343": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "ADD", + "path": "24" + }, + "1344": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "DUP1", + "path": "24" + }, + "1345": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "PUSH2", + "path": "24", + "value": "0x66B" + }, + "1348": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "PUSH1", + "path": "24", + "value": "0x23" + }, + "1350": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "SWAP2", + "path": "24" + }, + "1351": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "CODECOPY", + "path": "24" + }, + "1352": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "1354": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "ADD", + "path": "24" + }, + "1355": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "SWAP2", + "path": "24" + }, + "1356": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "POP", + "path": "24" + }, + "1357": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "POP", + "path": "24" + }, + "1358": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "1360": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "MLOAD", + "path": "24" + }, + "1361": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "DUP1", + "path": "24" + }, + "1362": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "SWAP2", + "path": "24" + }, + "1363": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "SUB", + "path": "24" + }, + "1364": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "SWAP1", + "path": "24" + }, + "1365": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "REVERT", + "path": "24" + }, + "1366": { + "fn": "ERC20._transfer", + "offset": [2341, 2412], + "op": "JUMPDEST", + "path": "24" + }, + "1367": { + "op": "PUSH1", + "value": "0x1" + }, + "1369": { + "op": "PUSH1", + "value": "0x1" + }, + "1371": { + "op": "PUSH1", + "value": "0xA0" + }, + "1373": { + "op": "SHL" + }, + "1374": { + "op": "SUB" + }, + "1375": { + "fn": "ERC20._transfer", + "offset": [2447, 2464], + "op": "DUP1", + "path": "24" + }, + "1376": { + "fn": "ERC20._transfer", + "offset": [2447, 2464], + "op": "DUP5", + "path": "24" + }, + "1377": { + "fn": "ERC20._transfer", + "offset": [2447, 2464], + "op": "AND", + "path": "24" + }, + "1378": { + "fn": "ERC20._transfer", + "offset": [2422, 2444], + "op": "PUSH1", + "path": "24", + "value": "0x0" + }, + "1380": { + "fn": "ERC20._transfer", + "offset": [2447, 2464], + "op": "SWAP1", + "path": "24" + }, + "1381": { + "fn": "ERC20._transfer", + "offset": [2447, 2464], + "op": "DUP2", + "path": "24" + }, + "1382": { + "fn": "ERC20._transfer", + "offset": [2447, 2464], + "op": "MSTORE", + "path": "24" + }, + "1383": { + "fn": "ERC20._transfer", + "offset": [2447, 2464], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "1385": { + "fn": "ERC20._transfer", + "offset": [2447, 2464], + "op": "DUP2", + "path": "24" + }, + "1386": { + "fn": "ERC20._transfer", + "offset": [2447, 2464], + "op": "SWAP1", + "path": "24" + }, + "1387": { + "fn": "ERC20._transfer", + "offset": [2447, 2464], + "op": "MSTORE", + "path": "24" + }, + "1388": { + "fn": "ERC20._transfer", + "offset": [2447, 2464], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "1390": { + "fn": "ERC20._transfer", + "offset": [2447, 2464], + "op": "DUP1", + "path": "24" + }, + "1391": { + "fn": "ERC20._transfer", + "offset": [2447, 2464], + "op": "DUP3", + "path": "24" + }, + "1392": { + "fn": "ERC20._transfer", + "offset": [2447, 2464], + "op": "KECCAK256", + "path": "24" + }, + "1393": { + "fn": "ERC20._transfer", + "offset": [2447, 2464], + "op": "SLOAD", + "path": "24" + }, + "1394": { + "fn": "ERC20._transfer", + "offset": [2502, 2522], + "op": "SWAP3", + "path": "24" + }, + "1395": { + "fn": "ERC20._transfer", + "offset": [2502, 2522], + "op": "DUP6", + "path": "24" + }, + "1396": { + "fn": "ERC20._transfer", + "offset": [2502, 2522], + "op": "AND", + "path": "24" + }, + "1397": { + "fn": "ERC20._transfer", + "offset": [2502, 2522], + "op": "DUP3", + "path": "24" + }, + "1398": { + "fn": "ERC20._transfer", + "offset": [2502, 2522], + "op": "MSTORE", + "path": "24" + }, + "1399": { + "fn": "ERC20._transfer", + "offset": [2502, 2522], + "op": "SWAP1", + "path": "24" + }, + "1400": { + "fn": "ERC20._transfer", + "offset": [2502, 2522], + "op": "KECCAK256", + "path": "24" + }, + "1401": { + "fn": "ERC20._transfer", + "offset": [2502, 2522], + "op": "SLOAD", + "path": "24" + }, + "1402": { + "fn": "ERC20._transfer", + "offset": [2540, 2564], + "op": "DUP3", + "path": "24", + "statement": 21 + }, + "1403": { + "fn": "ERC20._transfer", + "offset": [2540, 2564], + "op": "DUP3", + "path": "24" + }, + "1404": { + "fn": "ERC20._transfer", + "offset": [2540, 2564], + "op": "LT", + "path": "24" + }, + "1405": { + "branch": 33, + "fn": "ERC20._transfer", + "offset": [2540, 2564], + "op": "ISZERO", + "path": "24" + }, + "1406": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "PUSH2", + "path": "24", + "value": "0x5B8" + }, + "1409": { + "branch": 33, + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "JUMPI", + "path": "24" + }, + "1410": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "1412": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "MLOAD", + "path": "24" + }, + "1413": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "1417": { + "op": "PUSH1", + "value": "0xE5" + }, + "1419": { + "op": "SHL" + }, + "1420": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "DUP2", + "path": "24" + }, + "1421": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "MSTORE", + "path": "24" + }, + "1422": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "PUSH1", + "path": "24", + "value": "0x4" + }, + "1424": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "ADD", + "path": "24" + }, + "1425": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "DUP1", + "path": "24" + }, + "1426": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "DUP1", + "path": "24" + }, + "1427": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "1429": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "ADD", + "path": "24" + }, + "1430": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "DUP3", + "path": "24" + }, + "1431": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "DUP2", + "path": "24" + }, + "1432": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "SUB", + "path": "24" + }, + "1433": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "DUP3", + "path": "24" + }, + "1434": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "MSTORE", + "path": "24" + }, + "1435": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "PUSH1", + "path": "24", + "value": "0x26" + }, + "1437": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "DUP2", + "path": "24" + }, + "1438": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "MSTORE", + "path": "24" + }, + "1439": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "1441": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "ADD", + "path": "24" + }, + "1442": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "DUP1", + "path": "24" + }, + "1443": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "PUSH2", + "path": "24", + "value": "0x6D1" + }, + "1446": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "PUSH1", + "path": "24", + "value": "0x26" + }, + "1448": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "SWAP2", + "path": "24" + }, + "1449": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "CODECOPY", + "path": "24" + }, + "1450": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "1452": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "ADD", + "path": "24" + }, + "1453": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "SWAP2", + "path": "24" + }, + "1454": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "POP", + "path": "24" + }, + "1455": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "POP", + "path": "24" + }, + "1456": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "1458": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "MLOAD", + "path": "24" + }, + "1459": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "DUP1", + "path": "24" + }, + "1460": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "SWAP2", + "path": "24" + }, + "1461": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "SUB", + "path": "24" + }, + "1462": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "SWAP1", + "path": "24" + }, + "1463": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "REVERT", + "path": "24" + }, + "1464": { + "fn": "ERC20._transfer", + "offset": [2532, 2607], + "op": "JUMPDEST", + "path": "24" + }, + "1465": { + "fn": "ERC20._transfer", + "offset": [2655, 2672], + "op": "DUP1", + "path": "24", + "statement": 22 + }, + "1466": { + "fn": "ERC20._transfer", + "offset": [2645, 2651], + "op": "DUP4", + "path": "24" + }, + "1467": { + "fn": "ERC20._transfer", + "offset": [2625, 2642], + "op": "DUP3", + "path": "24" + }, + "1468": { + "fn": "ERC20._transfer", + "offset": [2625, 2651], + "op": "ADD", + "path": "24" + }, + "1469": { + "fn": "ERC20._transfer", + "offset": [2625, 2672], + "op": "LT", + "path": "24" + }, + "1470": { + "branch": 34, + "fn": "ERC20._transfer", + "offset": [2625, 2672], + "op": "ISZERO", + "path": "24" + }, + "1471": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "PUSH2", + "path": "24", + "value": "0x601" + }, + "1474": { + "branch": 34, + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "JUMPI", + "path": "24" + }, + "1475": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "1477": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "DUP1", + "path": "24" + }, + "1478": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "MLOAD", + "path": "24" + }, + "1479": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "1483": { + "op": "PUSH1", + "value": "0xE5" + }, + "1485": { + "op": "SHL" + }, + "1486": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "DUP2", + "path": "24" + }, + "1487": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "MSTORE", + "path": "24" + }, + "1488": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "1490": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "PUSH1", + "path": "24", + "value": "0x4" + }, + "1492": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "DUP3", + "path": "24" + }, + "1493": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "ADD", + "path": "24" + }, + "1494": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "MSTORE", + "path": "24" + }, + "1495": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "PUSH1", + "path": "24", + "value": "0xF" + }, + "1497": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "PUSH1", + "path": "24", + "value": "0x24" + }, + "1499": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "DUP3", + "path": "24" + }, + "1500": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "ADD", + "path": "24" + }, + "1501": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "MSTORE", + "path": "24" + }, + "1502": { + "op": "PUSH15", + "value": "0x45524332303A204F766572666C6F77" + }, + "1518": { + "op": "PUSH1", + "value": "0x88" + }, + "1520": { + "op": "SHL" + }, + "1521": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "PUSH1", + "path": "24", + "value": "0x44" + }, + "1523": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "DUP3", + "path": "24" + }, + "1524": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "ADD", + "path": "24" + }, + "1525": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "MSTORE", + "path": "24" + }, + "1526": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "SWAP1", + "path": "24" + }, + "1527": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "MLOAD", + "path": "24" + }, + "1528": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "SWAP1", + "path": "24" + }, + "1529": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "DUP2", + "path": "24" + }, + "1530": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "SWAP1", + "path": "24" + }, + "1531": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "SUB", + "path": "24" + }, + "1532": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "PUSH1", + "path": "24", + "value": "0x64" + }, + "1534": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "ADD", + "path": "24" + }, + "1535": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "SWAP1", + "path": "24" + }, + "1536": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "REVERT", + "path": "24" + }, + "1537": { + "fn": "ERC20._transfer", + "offset": [2617, 2692], + "op": "JUMPDEST", + "path": "24" + }, + "1538": { + "op": "PUSH1", + "value": "0x1" + }, + "1540": { + "op": "PUSH1", + "value": "0x1" + }, + "1542": { + "op": "PUSH1", + "value": "0xA0" + }, + "1544": { + "op": "SHL" + }, + "1545": { + "op": "SUB" + }, + "1546": { + "fn": "ERC20._transfer", + "offset": [2702, 2719], + "op": "DUP1", + "path": "24", + "statement": 23 + }, + "1547": { + "fn": "ERC20._transfer", + "offset": [2702, 2719], + "op": "DUP7", + "path": "24" + }, + "1548": { + "fn": "ERC20._transfer", + "offset": [2702, 2719], + "op": "AND", + "path": "24" + }, + "1549": { + "fn": "ERC20._transfer", + "offset": [2702, 2711], + "op": "PUSH1", + "path": "24", + "value": "0x0" + }, + "1551": { + "fn": "ERC20._transfer", + "offset": [2702, 2719], + "op": "DUP2", + "path": "24" + }, + "1552": { + "fn": "ERC20._transfer", + "offset": [2702, 2719], + "op": "DUP2", + "path": "24" + }, + "1553": { + "fn": "ERC20._transfer", + "offset": [2702, 2719], + "op": "MSTORE", + "path": "24" + }, + "1554": { + "fn": "ERC20._transfer", + "offset": [2702, 2719], + "op": "PUSH1", + "path": "24", + "value": "0x20" + }, + "1556": { + "fn": "ERC20._transfer", + "offset": [2702, 2719], + "op": "DUP2", + "path": "24" + }, + "1557": { + "fn": "ERC20._transfer", + "offset": [2702, 2719], + "op": "DUP2", + "path": "24" + }, + "1558": { + "fn": "ERC20._transfer", + "offset": [2702, 2719], + "op": "MSTORE", + "path": "24" + }, + "1559": { + "fn": "ERC20._transfer", + "offset": [2702, 2719], + "op": "PUSH1", + "path": "24", + "value": "0x40" + }, + "1561": { + "fn": "ERC20._transfer", + "offset": [2702, 2719], + "op": "DUP1", + "path": "24" + }, + "1562": { + "fn": "ERC20._transfer", + "offset": [2702, 2719], + "op": "DUP4", + "path": "24" + }, + "1563": { + "fn": "ERC20._transfer", + "offset": [2702, 2719], + "op": "KECCAK256", + "path": "24" + }, + "1564": { + "fn": "ERC20._transfer", + "offset": [2722, 2745], + "op": "DUP9", + "path": "24" + }, + "1565": { + "fn": "ERC20._transfer", + "offset": [2722, 2745], + "op": "DUP9", + "path": "24" + }, + "1566": { + "fn": "ERC20._transfer", + "offset": [2722, 2745], + "op": "SUB", + "path": "24" + }, + "1567": { + "fn": "ERC20._transfer", + "offset": [2702, 2745], + "op": "SWAP1", + "path": "24" + }, + "1568": { + "fn": "ERC20._transfer", + "offset": [2702, 2745], + "op": "SSTORE", + "path": "24" + }, + "1569": { + "fn": "ERC20._transfer", + "offset": [2755, 2775], + "op": "SWAP4", + "path": "24", + "statement": 24 + }, + "1570": { + "fn": "ERC20._transfer", + "offset": [2755, 2775], + "op": "DUP9", + "path": "24" + }, + "1571": { + "fn": "ERC20._transfer", + "offset": [2755, 2775], + "op": "AND", + "path": "24" + }, + "1572": { + "fn": "ERC20._transfer", + "offset": [2755, 2775], + "op": "DUP1", + "path": "24" + }, + "1573": { + "fn": "ERC20._transfer", + "offset": [2755, 2775], + "op": "DUP4", + "path": "24" + }, + "1574": { + "fn": "ERC20._transfer", + "offset": [2755, 2775], + "op": "MSTORE", + "path": "24" + }, + "1575": { + "fn": "ERC20._transfer", + "offset": [2755, 2775], + "op": "SWAP2", + "path": "24" + }, + "1576": { + "fn": "ERC20._transfer", + "offset": [2755, 2775], + "op": "DUP5", + "path": "24" + }, + "1577": { + "fn": "ERC20._transfer", + "offset": [2755, 2775], + "op": "SWAP1", + "path": "24" + }, + "1578": { + "fn": "ERC20._transfer", + "offset": [2755, 2775], + "op": "KECCAK256", + "path": "24" + }, + "1579": { + "fn": "ERC20._transfer", + "offset": [2778, 2804], + "op": "DUP6", + "path": "24" + }, + "1580": { + "fn": "ERC20._transfer", + "offset": [2778, 2804], + "op": "DUP9", + "path": "24" + }, + "1581": { + "fn": "ERC20._transfer", + "offset": [2778, 2804], + "op": "ADD", + "path": "24" + }, + "1582": { + "fn": "ERC20._transfer", + "offset": [2755, 2804], + "op": "SWAP1", + "path": "24" + }, + "1583": { + "fn": "ERC20._transfer", + "offset": [2755, 2804], + "op": "SSTORE", + "path": "24" + }, + "1584": { + "fn": "ERC20._transfer", + "offset": [2819, 2854], + "op": "DUP4", + "path": "24", + "statement": 25 + }, + "1585": { + "fn": "ERC20._transfer", + "offset": [2819, 2854], + "op": "MLOAD", + "path": "24" + }, + "1586": { + "fn": "ERC20._transfer", + "offset": [2819, 2854], + "op": "DUP8", + "path": "24" + }, + "1587": { + "fn": "ERC20._transfer", + "offset": [2819, 2854], + "op": "DUP2", + "path": "24" + }, + "1588": { + "fn": "ERC20._transfer", + "offset": [2819, 2854], + "op": "MSTORE", + "path": "24" + }, + "1589": { + "fn": "ERC20._transfer", + "offset": [2819, 2854], + "op": "SWAP4", + "path": "24" + }, + "1590": { + "fn": "ERC20._transfer", + "offset": [2819, 2854], + "op": "MLOAD", + "path": "24" + }, + "1591": { + "fn": "ERC20._transfer", + "offset": [2755, 2775], + "op": "SWAP2", + "path": "24" + }, + "1592": { + "fn": "ERC20._transfer", + "offset": [2755, 2775], + "op": "SWAP4", + "path": "24" + }, + "1593": { + "fn": "ERC20._transfer", + "offset": [2819, 2854], + "op": "PUSH32", + "path": "24", + "value": "0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF" + }, + "1626": { + "fn": "ERC20._transfer", + "offset": [2819, 2854], + "op": "SWAP3", + "path": "24" + }, + "1627": { + "fn": "ERC20._transfer", + "offset": [2819, 2854], + "op": "SWAP1", + "path": "24" + }, + "1628": { + "fn": "ERC20._transfer", + "offset": [2819, 2854], + "op": "DUP2", + "path": "24" + }, + "1629": { + "fn": "ERC20._transfer", + "offset": [2819, 2854], + "op": "SWAP1", + "path": "24" + }, + "1630": { + "fn": "ERC20._transfer", + "offset": [2819, 2854], + "op": "SUB", + "path": "24" + }, + "1631": { + "fn": "ERC20._transfer", + "offset": [2819, 2854], + "op": "SWAP1", + "path": "24" + }, + "1632": { + "fn": "ERC20._transfer", + "offset": [2819, 2854], + "op": "SWAP2", + "path": "24" + }, + "1633": { + "fn": "ERC20._transfer", + "offset": [2819, 2854], + "op": "ADD", + "path": "24" + }, + "1634": { + "fn": "ERC20._transfer", + "offset": [2819, 2854], + "op": "SWAP1", + "path": "24" + }, + "1635": { + "fn": "ERC20._transfer", + "offset": [2819, 2854], + "op": "LOG3", + "path": "24" + }, + "1636": { + "fn": "ERC20._transfer", + "offset": [2142, 2861], + "op": "POP", + "path": "24" + }, + "1637": { + "fn": "ERC20._transfer", + "offset": [2142, 2861], + "op": "POP", + "path": "24" + }, + "1638": { + "fn": "ERC20._transfer", + "offset": [2142, 2861], + "op": "POP", + "path": "24" + }, + "1639": { + "fn": "ERC20._transfer", + "offset": [2142, 2861], + "op": "POP", + "path": "24" + }, + "1640": { + "fn": "ERC20._transfer", + "offset": [2142, 2861], + "op": "POP", + "path": "24" + }, + "1641": { + "fn": "ERC20._transfer", + "jump": "o", + "offset": [2142, 2861], + "op": "JUMP", + "path": "24" + } + }, + "sha1": "be5ac30d9240f886669c060219687b44fa2b39b6", + "source": "// SPDX-License-Identifier: Apache-2.0.\npragma solidity ^0.6.12;\n\nimport \"./IERC20.sol\";\n\ncontract ERC20 is IERC20 {\n mapping(address => uint256) internal _balances;\n\n mapping(address => mapping(address => uint256)) internal _allowances;\n\n uint256 internal _totalSupply;\n\n function totalSupply() public view override returns (uint256) {\n return _totalSupply;\n }\n\n function balanceOf(address account) public view override returns (uint256) {\n return _balances[account];\n }\n\n function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\n _transfer(msg.sender, recipient, amount);\n return true;\n }\n\n function allowance(address owner, address spender) public view override returns (uint256) {\n return _allowances[owner][spender];\n }\n\n function approve(address spender, uint256 value) public override returns (bool) {\n _approve(msg.sender, spender, value);\n return true;\n }\n\n function transferFrom(\n address sender,\n address recipient,\n uint256 amount\n ) public virtual override returns (bool) {\n _transfer(sender, recipient, amount);\n uint256 sender_allowance = _allowances[sender][msg.sender];\n require(sender_allowance >= amount, \"ERC20: transfer exceeds allowance\");\n _approve(sender, msg.sender, sender_allowance - amount);\n return true;\n }\n\n function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {\n uint256 spender_allowance = _allowances[msg.sender][spender];\n require(spender_allowance + addedValue >= spender_allowance, \"ERC20: Overflow\");\n _approve(msg.sender, spender, spender_allowance + addedValue);\n return true;\n }\n\n function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {\n uint256 sender_allowance = _allowances[msg.sender][spender];\n require(sender_allowance >= subtractedValue, \"ERC20: transfer exceeds allowance\");\n _approve(msg.sender, spender, sender_allowance - subtractedValue);\n return true;\n }\n\n function _transfer(\n address sender,\n address recipient,\n uint256 amount\n ) internal {\n require(sender != address(0), \"ERC20: transfer from the zero address\");\n require(recipient != address(0), \"ERC20: transfer to the zero address\");\n uint256 sender_balance = _balances[sender];\n uint256 recipient_balance = _balances[recipient];\n require(sender_balance >= amount, \"ERC20: transfer amount exceeds balance\");\n require(recipient_balance + amount >= recipient_balance, \"ERC20: Overflow\");\n _balances[sender] = sender_balance - amount;\n _balances[recipient] = recipient_balance + amount;\n emit Transfer(sender, recipient, amount);\n }\n\n function _mint(address account, uint256 amount) internal {\n require(account != address(0), \"ERC20: mint to the zero address\");\n uint256 _total = _totalSupply;\n require(_total + amount >= _total, \"ERC20: Overflow\");\n _totalSupply = _total + amount;\n _balances[account] += amount;\n emit Transfer(address(0), account, amount);\n }\n\n function _burn(address account, uint256 value) internal {\n require(account != address(0), \"ERC20: burn from the zero address\");\n uint256 current_balance = _balances[account];\n require(current_balance >= value, \"ERC20: burn amount exceeds balance\");\n _balances[account] = current_balance - value;\n _totalSupply -= value;\n emit Transfer(account, address(0), value);\n }\n\n function _approve(\n address owner,\n address spender,\n uint256 value\n ) internal {\n require(owner != address(0), \"ERC20: approve from the zero address\");\n require(spender != address(0), \"ERC20: approve to the zero address\");\n\n _allowances[owner][spender] = value;\n emit Approval(owner, spender, value);\n }\n\n function _burnFrom(address account, uint256 amount) internal {\n _burn(account, amount);\n uint256 current_allowance = _allowances[account][msg.sender];\n require(current_allowance >= amount, \"ERC20: burn amount exceeds allowance\");\n _approve(account, msg.sender, current_allowance - amount);\n }\n}\n", + "sourceMap": "90:4261:24:-:0;;;;;;;;;;;;;;;;;;;", + "sourcePath": "contracts/starkware/contracts/tokens/ERC20/ERC20.sol", + "type": "contract" +} diff --git a/src/contracts/StarknetERC20Bridge/StarknetERC20Bridge.js b/src/contracts/StarknetERC20Bridge/StarknetERC20Bridge.js new file mode 100644 index 00000000..4712d206 --- /dev/null +++ b/src/contracts/StarknetERC20Bridge/StarknetERC20Bridge.js @@ -0,0 +1,6 @@ +import {web3} from '../../web3'; +import {abi} from './StarknetERC20Bridge.json'; + +const address = ''; + +export const starkNetERC20Bridge = new web3.eth.Contract(abi, address); diff --git a/src/contracts/StarknetERC20Bridge/StarknetERC20Bridge.json b/src/contracts/StarknetERC20Bridge/StarknetERC20Bridge.json new file mode 100644 index 00000000..0471cdd9 --- /dev/null +++ b/src/contracts/StarknetERC20Bridge/StarknetERC20Bridge.json @@ -0,0 +1,31587 @@ +{ + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + } + ], + "name": "LogDeposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "acceptedGovernor", + "type": "address" + } + ], + "name": "LogNewGovernorAccepted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "nominatedGovernor", + "type": "address" + } + ], + "name": "LogNominatedGovernor", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "LogNominationCancelled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "removedGovernor", + "type": "address" + } + ], + "name": "LogRemovedGovernor", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "LogSetL2TokenContract", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "LogSetMaxDeposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "LogSetMaxTotalBalance", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "LogWithdrawal", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "isFrozen", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "l2TokenContract_", + "type": "uint256" + } + ], + "name": "setL2TokenContract", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "maxDeposit_", + "type": "uint256" + } + ], + "name": "setMaxDeposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "maxTotalBalance_", + "type": "uint256" + } + ], + "name": "setMaxTotalBalance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "starknetAcceptGovernance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "starknetCancelNomination", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "testGovernor", + "type": "address" + } + ], + "name": "starknetIsGovernor", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newGovernor", + "type": "address" + } + ], + "name": "starknetNominateNewGovernor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "governorForRemoval", + "type": "address" + } + ], + "name": "starknetRemoveGovernor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "allSourcePaths": { + "0": "contracts/common-contracts/src/libraries/NamedStorage.sol", + "1": "contracts/scalable-dex/contracts/src/components/Governance.sol", + "10": "contracts/scalable-dex/contracts/src/interfaces/ProxySupport.sol", + "11": "contracts/scalable-dex/contracts/src/libraries/Common.sol", + "16": "contracts/starkware/cairo/eth/CairoConstants.sol", + "25": "contracts/starkware/contracts/tokens/ERC20/IERC20.sol", + "26": "contracts/starkware/starknet/apps/token/solidity/StarknetERC20Bridge.sol", + "28": "contracts/starkware/starknet/apps/token/solidity/StarknetTokenBridge.sol", + "29": "contracts/starkware/starknet/apps/token/solidity/StarknetTokenStorage.sol", + "30": "contracts/starkware/starknet/apps/token/solidity/Transfers.sol", + "31": "contracts/starkware/starknet/eth/IStarknetMessaging.sol", + "34": "contracts/starkware/starknet/eth/StarknetGovernance.sol", + "5": "contracts/scalable-dex/contracts/src/interfaces/BlockDirectCall.sol", + "6": "contracts/scalable-dex/contracts/src/interfaces/ContractInitializer.sol", + "8": "contracts/scalable-dex/contracts/src/interfaces/MGovernance.sol" + }, + "ast": { + "absolutePath": "contracts/starkware/starknet/apps/token/solidity/StarknetERC20Bridge.sol", + "exportedSymbols": { + "StarknetERC20Bridge": [2769] + }, + "id": 2770, + "license": "Apache-2.0.", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 2697, + "literals": ["solidity", "^", "0.6", ".12"], + "nodeType": "PragmaDirective", + "src": "40:24:26" + }, + { + "absolutePath": "contracts/common-contracts/src/libraries/NamedStorage.sol", + "file": "contracts/common-contracts/src/libraries/NamedStorage.sol", + "id": 2698, + "nodeType": "ImportDirective", + "scope": 2770, + "sourceUnit": 218, + "src": "66:67:26", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/starkware/contracts/tokens/ERC20/IERC20.sol", + "file": "contracts/starkware/contracts/tokens/ERC20/IERC20.sol", + "id": 2699, + "nodeType": "ImportDirective", + "scope": 2770, + "sourceUnit": 2696, + "src": "134:63:26", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/starkware/starknet/apps/token/solidity/StarknetTokenBridge.sol", + "file": "contracts/starkware/starknet/apps/token/solidity/StarknetTokenBridge.sol", + "id": 2700, + "nodeType": "ImportDirective", + "scope": 2770, + "sourceUnit": 3211, + "src": "198:82:26", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/starkware/starknet/apps/token/solidity/Transfers.sol", + "file": "contracts/starkware/starknet/apps/token/solidity/Transfers.sol", + "id": 2701, + "nodeType": "ImportDirective", + "scope": 2770, + "sourceUnit": 3520, + "src": "281:72:26", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 2702, + "name": "StarknetTokenBridge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3210, + "src": "387:19:26", + "typeDescriptions": { + "typeIdentifier": "t_contract$_StarknetTokenBridge_$3210", + "typeString": "contract StarknetTokenBridge" + } + }, + "id": 2703, + "nodeType": "InheritanceSpecifier", + "src": "387:19:26" + } + ], + "contractDependencies": [446, 627, 656, 699, 917, 3210, 3355, 4350], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 2769, + "linearizedBaseContracts": [2769, 3210, 917, 656, 627, 4350, 446, 699, 3355], + "name": "StarknetERC20Bridge", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 2744, + "nodeType": "Block", + "src": "476:269:26", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2725, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2722, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2718, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "548:4:26", + "typeDescriptions": { + "typeIdentifier": "t_contract$_StarknetERC20Bridge_$2769", + "typeString": "contract StarknetERC20Bridge" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_StarknetERC20Bridge_$2769", + "typeString": "contract StarknetERC20Bridge" + } + ], + "id": 2717, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "540:7:26", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 2716, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "540:7:26", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 2719, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "540:13:26", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 2712, + "name": "bridgedToken", + "nodeType": "Identifier", + "overloadedDeclarations": [3240, 3299], + "referencedDeclaration": 3240, + "src": "514:12:26", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 2713, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "514:14:26", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 2711, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2695, + "src": "507:6:26", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$2695_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 2714, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "507:22:26", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$2695", + "typeString": "contract IERC20" + } + }, + "id": 2715, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "balanceOf", + "nodeType": "MemberAccess", + "referencedDeclaration": 2640, + "src": "507:32:26", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 2720, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "507:47:26", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "argumentTypes": null, + "id": 2721, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2705, + "src": "557:6:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "507:56:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 2723, + "name": "maxTotalBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [3273, 3338], + "referencedDeclaration": 3273, + "src": "567:15:26", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 2724, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "567:17:26", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "507:77:26", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4d41585f42414c414e43455f4558434545444544", + "id": 2726, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "598:22:26", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d24ec41da52cc3754d98b259a05ea7ee3bf5b2f335e623d989d33ec6a80b1e79", + "typeString": "literal_string \"MAX_BALANCE_EXCEEDED\"" + }, + "value": "MAX_BALANCE_EXCEEDED" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_d24ec41da52cc3754d98b259a05ea7ee3bf5b2f335e623d989d33ec6a80b1e79", + "typeString": "literal_string \"MAX_BALANCE_EXCEEDED\"" + } + ], + "id": 2710, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [-18, -18], + "referencedDeclaration": -18, + "src": "486:7:26", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 2727, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "486:144:26", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2728, + "nodeType": "ExpressionStatement", + "src": "486:144:26" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 2732, + "name": "bridgedToken", + "nodeType": "Identifier", + "overloadedDeclarations": [3240, 3299], + "referencedDeclaration": 3240, + "src": "661:12:26", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 2733, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "661:14:26", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2734, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "677:3:26", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2735, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "677:10:26", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 2736, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2705, + "src": "689:6:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 2729, + "name": "Transfers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3519, + "src": "640:9:26", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Transfers_$3519_$", + "typeString": "type(library Transfers)" + } + }, + "id": 2731, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "transferIn", + "nodeType": "MemberAccess", + "referencedDeclaration": 3437, + "src": "640:20:26", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 2737, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "640:56:26", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2738, + "nodeType": "ExpressionStatement", + "src": "640:56:26" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2740, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2705, + "src": "718:6:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 2741, + "name": "l2Recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2707, + "src": "726:11:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2739, + "name": "sendMessage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3127, + "src": "706:11:26", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256)" + } + }, + "id": 2742, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "706:32:26", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2743, + "nodeType": "ExpressionStatement", + "src": "706:32:26" + } + ] + }, + "documentation": null, + "functionSelector": "e2bbb158", + "id": 2745, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "deposit", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 2708, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2705, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2745, + "src": "430:14:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2704, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "430:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2707, + "mutability": "mutable", + "name": "l2Recipient", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2745, + "src": "446:19:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2706, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "446:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "429:37:26" + }, + "returnParameters": { + "id": 2709, + "nodeType": "ParameterList", + "parameters": [], + "src": "476:0:26" + }, + "scope": 2769, + "src": "413:332:26", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [3197], + "body": { + "id": 2767, + "nodeType": "Block", + "src": "820:116:26", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2754, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2747, + "src": "845:6:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 2755, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2749, + "src": "853:9:26", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 2753, + "name": "consumeMessage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3190, + "src": "830:14:26", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (uint256,address)" + } + }, + "id": 2756, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "830:33:26", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2757, + "nodeType": "ExpressionStatement", + "src": "830:33:26" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 2761, + "name": "bridgedToken", + "nodeType": "Identifier", + "overloadedDeclarations": [3240, 3299], + "referencedDeclaration": 3240, + "src": "895:12:26", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 2762, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "895:14:26", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 2763, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2749, + "src": "911:9:26", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 2764, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2747, + "src": "922:6:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 2758, + "name": "Transfers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3519, + "src": "873:9:26", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Transfers_$3519_$", + "typeString": "type(library Transfers)" + } + }, + "id": 2760, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "transferOut", + "nodeType": "MemberAccess", + "referencedDeclaration": 3518, + "src": "873:21:26", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 2765, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "873:56:26", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2766, + "nodeType": "ExpressionStatement", + "src": "873:56:26" + } + ] + }, + "documentation": null, + "functionSelector": "00f714ce", + "id": 2768, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "withdraw", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 2751, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "811:8:26" + }, + "parameters": { + "id": 2750, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2747, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2768, + "src": "769:14:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2746, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "769:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2749, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2768, + "src": "785:17:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2748, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "785:7:26", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "768:35:26" + }, + "returnParameters": { + "id": 2752, + "nodeType": "ParameterList", + "parameters": [], + "src": "820:0:26" + }, + "scope": 2769, + "src": "751:185:26", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + } + ], + "scope": 2770, + "src": "355:583:26" + } + ], + "src": "40:899:26" + }, + "bytecode": "60a060405234801561001057600080fd5b50600030425a60405160200180846001600160a01b0316815260200183815260200182815260200193505050506040516020818303038152906040528051906020012090508060808181525050602a815550608051611fac61007c600039806102eb5250611fac6000f3fe608060405234801561001057600080fd5b50600436106100ce5760003560e01c8063894ecf041161008c578063a90e32b811610066578063a90e32b814610241578063bb371fdd1461025e578063e2bbb1581461027b578063e37fec251461029e576100ce565b8063894ecf04146101f657806391a66a2614610213578063946be3ed14610239576100ce565b8062f714ce146100d357806301a01590146101015780632e1a7d4d1461013b57806333eeb14714610158578063439fab911461016057806384f921cd146101d0575b600080fd5b6100ff600480360360408110156100e957600080fd5b50803590602001356001600160a01b03166102a6565b005b6101276004803603602081101561011757600080fd5b50356001600160a01b03166102c6565b604080519115158252519081900360200190f35b6100ff6004803603602081101561015157600080fd5b50356102d7565b6101276102e4565b6100ff6004803603602081101561017657600080fd5b81019060208101813564010000000081111561019157600080fd5b8201836020820111156101a357600080fd5b803590602001918460018302840111640100000000831117156101c557600080fd5b5090925090506102e9565b6100ff600480360360208110156101e657600080fd5b50356001600160a01b03166104bc565b6100ff6004803603602081101561020c57600080fd5b50356104c5565b6100ff6004803603602081101561022957600080fd5b50356001600160a01b031661054d565b6100ff610556565b6100ff6004803603602081101561025757600080fd5b5035610560565b6100ff6004803603602081101561027457600080fd5b50356106eb565b6100ff6004803603604081101561029157600080fd5b5080359060200135610773565b6100ff610863565b6102b0828261086b565b6102c26102bb610a19565b8284610a41565b5050565b60006102d182610c82565b92915050565b6102e181336102a6565b50565b600090565b7f00000000000000000000000000000000000000000000000000000000000000008054908115610359576040805162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b604482015290519081900360640190fd5b505060006103656102e4565b602090810291508101808310156103b9576040805162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b604482015290519081900360640190fd5b60006103c782848688611e6a565b60208110156103d557600080fd5b50356001600160a01b031690503660006103f18582888a611e6a565b915091506103ff82826102c2565b36600061040e8887818c611e6a565b90925090506001600160a01b038516156104395761042d858383610cb1565b505050505050506102c2565b610441610f08565b15610495578015610490576040805162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b604482015290519081900360640190fd5b6104b1565b61049f8282610f23565b6104a98282610f6c565b6104b1610faf565b505050505050505050565b6102e181611031565b6104ce33610c82565b610511576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517fa9aec19ec61c04ae0a4a1498ab6ce04cbd68b3d54c47888a45eb2bd37caf06bc9181900360200190a16102e18161117e565b6102e1816111a0565b61055e61129d565b565b61056861136a565b156105ba576040805162461bcd60e51b815260206004820152601d60248201527f4c325f544f4b454e5f434f4e54524143545f414c52454144595f534554000000604482015290519081900360640190fd5b8080610607576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b600167080000000000001160c01b018110610663576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b61066c33610c82565b6106af576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805183815290517f49774a785afe45b60857497c0aff8733f202ca7e75329ad6408073564efea6df9181900360200190a16102c28261138d565b6106f433610c82565b610737576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517faf474b5afcf11bd99dc9fc7f499e6ab368d650bf7ef23993f0d61bd9ad7626519181900360200190a16102e1816113af565b61077b6113d1565b82610784610a19565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156107d057600080fd5b505afa1580156107e4573d6000803e3d6000fd5b505050506040513d60208110156107fa57600080fd5b5051011115610847576040805162461bcd60e51b815260206004820152601460248201527313505617d09053105390d157d15610d15151115160621b604482015290519081900360640190fd5b610859610852610a19565b33846113f4565b6102c282826115dd565b61055e6118cb565b604080516001600160a01b03831681526020810184905281517fb4214c8c54fc7442f36d3682f59aebaf09358a4431835b30efb29d52cf9e1e91929181900390910190a160408051600480825260a08201909252606091602082016080803683370190505090506000816000815181106108e157fe5b602002602001018181525050816001600160a01b03168160018151811061090457fe5b6020908102919091010152600160801b83068160028151811061092357fe5b6020908102919091010152600160801b83048160038151811061094257fe5b602002602001018181525050610956611962565b6001600160a01b0316632c9dd5c061096c61136a565b836040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156109c25781810151838201526020016109aa565b505050509050019350505050602060405180830381600087803b1580156109e857600080fd5b505af11580156109fc573d6000803e3d6000fd5b505050506040513d6020811015610a1257600080fd5b5050505050565b6000610a3c604051806060016040528060298152602001611f4e60299139611981565b905090565b826001600160a01b038316610a91576040805162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b604482015290519081900360640190fd5b6000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610ae057600080fd5b505afa158015610af4573d6000803e3d6000fd5b505050506040513d6020811015610b0a57600080fd5b50519050828103811015610b51576040805162461bcd60e51b8152602060048201526009602482015268554e444552464c4f5760b81b604482015290519081900360640190fd5b604080516001600160a01b03808716602483015260448083018790528351808403909101815260649092019092526020810180516001600160e01b031663a9059cbb60e01b17905290610ba6908716826119fe565b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610bf557600080fd5b505afa158015610c09573d6000803e3d6000fd5b505050506040513d6020811015610c1f57600080fd5b505190508483038114610c79576040805162461bcd60e51b815260206004820152601c60248201527f494e434f52524543545f414d4f554e545f5452414e5346455252454400000000604482015290519081900360640190fd5b50505050505050565b600080610c8d611bad565b6001600160a01b039390931660009081526020939093525050604090205460ff1690565b610cc3836001600160a01b0316611c5c565b610d09576040805162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b604482015290519081900360640190fd5b60006060846001600160a01b031663439fab9160e01b85856040516024018080602001828103825284848281815260200192508082843760008382015260408051601f909201601f1990811690940182810390940182529283526020810180516001600160e01b03166001600160e01b0319909916989098178852915182519297909650869550935090915081905083835b60208310610dba5780518252601f199092019160209182019101610d9b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610e1a576040519150601f19603f3d011682016040523d82523d6000602084013e610e1f565b606091505b5091509150818190610eaf5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e74578181015183820152602001610e5c565b50505050905090810190601f168015610ea15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508051819015610f005760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610e74578181015183820152602001610e5c565b505050505050565b600080610f13611962565b6001600160a01b03161415905090565b604081146102c2576040805162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b604482015290519081900360640190fd5b60008083836040811015610f7f57600080fd5b506001600160a01b03813581169350602090910135169050610fa082611c62565b610fa981611c84565b50505050565b6000610fb9611bad565b6001810154909150600160a01b900460ff1615611013576040805162461bcd60e51b81526020600482015260136024820152721053149150511657d253925512505312569151606a1b604482015290519081900360640190fd5b60018101805460ff60a01b1916600160a01b1790556102e133611ca6565b61103a33610c82565b61107d576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b336001600160a01b03821614156110d2576040805162461bcd60e51b8152602060048201526014602482015273474f5645524e4f525f53454c465f52454d4f564560601b604482015290519081900360640190fd5b60006110dc611bad565b90506110e782610c82565b611127576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa3a7ab22a92727a960a11b604482015290519081900360640190fd5b6001600160a01b03821660008181526020838152604091829020805460ff19169055815192835290517fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a295999281900390910190a15050565b6102e1604051806060016040528060278152602001611f066027913982611d26565b6111a933610c82565b6111ec576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b60006111f6611bad565b905061120182610c82565b15611246576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b6001810180546001600160a01b0384166001600160a01b0319909116811790915560408051918252517f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a69181900360200190a15050565b60006112a7611bad565b60018101549091506001600160a01b0316331461130b576040805162461bcd60e51b815260206004820152601760248201527f4f4e4c595f43414e4449444154455f474f5645524e4f52000000000000000000604482015290519081900360640190fd5b6001810154611322906001600160a01b0316611ca6565b6001810180546001600160a01b03191690556040805133815290517fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d29181900360200190a150565b6000610a3c604051806060016040528060278152602001611edf60279139611981565b6102e1604051806060016040528060278152602001611edf6027913982611da0565b6102e1604051806060016040528060218152602001611f2d6021913982611d26565b6000610a3c604051806060016040528060278152602001611f0660279139611981565b604080516370a0823160e01b8152306004820152905184916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561143f57600080fd5b505afa158015611453573d6000803e3d6000fd5b505050506040513d602081101561146957600080fd5b505190508281018111156114af576040805162461bcd60e51b81526020600482015260086024820152674f564552464c4f5760c01b604482015290519081900360640190fd5b604080516001600160a01b03808716602483015230604483015260648083018790528351808403909101815260849092019092526020810180516001600160e01b03166323b872dd60e01b1790529061150a908716826119fe565b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561155957600080fd5b505afa15801561156d573d6000803e3d6000fd5b505050506040513d602081101561158357600080fd5b505190508285018114610c79576040805162461bcd60e51b815260206004820152601c60248201527f494e434f52524543545f414d4f554e545f5452414e5346455252454400000000604482015290519081900360640190fd5b6115e561136a565b611636576040805162461bcd60e51b815260206004820152601960248201527f4c325f544f4b454e5f434f4e54524143545f4e4f545f53455400000000000000604482015290519081900360640190fd5b8080611683576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b600167080000000000001160c01b0181106116df576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b6116e7611df3565b8311156117255760405162461bcd60e51b8152600401808060200182810382526024815260200180611ebb6024913960400191505060405180910390fd5b604080513381526020810185905280820184905290517f9dbb0e7dda3e09710ce75b801addc87cf9d9c6c581641b3275fca409ad086c629181900360600190a160408051600380825260808201909252606091602082018380368337019050509050828160008151811061179557fe5b6020908102919091010152600160801b8406816001815181106117b457fe5b6020908102919091010152600160801b8404816002815181106117d357fe5b6020026020010181815250506117e7611962565b6001600160a01b0316633e3aa6c56117fd61136a565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5846040518463ffffffff1660e01b81526004018084815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561187a578181015183820152602001611862565b50505050905001945050505050602060405180830381600087803b1580156118a157600080fd5b505af11580156118b5573d6000803e3d6000fd5b505050506040513d6020811015610f0057600080fd5b6118d433610c82565b611917576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6000611921611bad565b6001810180546001600160a01b03191690556040519091507f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f590600090a150565b6000610a3c604051806060016040528060288152602001611e93602891395b600080826040516020018082805190602001908083835b602083106119b75780518252601f199092019160209182019101611998565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508054915050919050565b611a0782611c5c565b611a4c576040805162461bcd60e51b81526020600482015260116024820152704241445f544f4b454e5f4144445245535360781b604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310611a8a5780518252601f199092019160209182019101611a6b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611aec576040519150601f19603f3d011682016040523d82523d6000602084013e611af1565b606091505b5091509150818190611b445760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610e74578181015183820152602001610e5c565b50805115610fa957808060200190516020811015611b6157600080fd5b5051610fa9576040805162461bcd60e51b81526020600482015260166024820152751513d2d15397d3d4115490551253d397d1905253115160521b604482015290519081900360640190fd5b6000806040518060400160405280601c81526020017f535441524b4e45545f312e305f474f5645524e414e43455f494e464f000000008152506040516020018082805190602001908083835b60208310611c185780518252601f199092019160209182019101611bf9565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508091505090565b3b151590565b6102e1604051806060016040528060298152602001611f4e6029913982611e16565b6102e1604051806060016040528060288152602001611e936028913982611e16565b611caf81610c82565b15611cf4576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b6000611cfe611bad565b6001600160a01b0390921660009081526020929092525060409020805460ff19166001179055565b6000826040516020018082805190602001908083835b60208310611d5b5780518252601f199092019160209182019101611d3c565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050818155505050565b611da982611981565b15611de9576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b6102c28282611d26565b6000610a3c604051806060016040528060218152602001611f2d60219139611981565b6000611e2183611981565b6001600160a01b031614611de9576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b60008085851115611e79578182fd5b83861115611e85578182fd5b505082019391909203915056fe535441524b4e45545f544f4b454e5f4252494447455f4d4553534147494e475f434f4e54524143545452414e534645525f544f5f535441524b4e45545f414d4f554e545f4558434545444544535441524b4e45545f544f4b454e5f4252494447455f4c325f544f4b454e5f434f4e5452414354535441524b4e45545f544f4b454e5f4252494447455f4d41585f544f54414c5f42414c414e4345535441524b4e45545f544f4b454e5f4252494447455f4d41585f4445504f534954535441524b4e45545f45524332305f544f4b454e5f4252494447455f544f4b454e5f41444452455353a2646970667358221220fd2fe883d770c6733418100eae3f37e39ee730035d864ee143dfa0a26b5856e164736f6c634300060c0033", + "bytecodeSha1": "e87d42c61c5da19738e736af0764caf94d479bf6", + "compiler": { + "evm_version": "istanbul", + "optimizer": { + "enabled": true, + "runs": 200 + }, + "version": "0.6.12+commit.27d51765" + }, + "contractName": "StarknetERC20Bridge", + "coverageMap": { + "branches": { + "0": { + "NamedStorage.setAddressValueOnce": { + "101": [2262, 2299, true] + }, + "NamedStorage.setUintValueOnce": { + "100": [1665, 1688, true] + } + }, + "1": { + "Governance.acceptGovernance": { + "97": [3393, 3428, true] + }, + "Governance.addGovernor": { + "98": [3019, 3043, true] + }, + "Governance.initGovernance": { + "93": [1646, 1662, true] + }, + "Governance.nominateNewGovernor": { + "96": [2488, 2512, true] + }, + "Governance.removeGovernor": { + "94": [3841, 3873, true], + "95": [3980, 4010, true] + } + }, + "10": { + "ProxySupport.callExternalInitializer": { + "106": [2645, 2681, true], + "107": [2961, 2968, true], + "108": [3007, 3029, true] + }, + "ProxySupport.initialize": { + "102": [1674, 1705, true], + "103": [2095, 2121, false], + "104": [2227, 2242, false], + "105": [2266, 2286, true] + } + }, + "11": { + "Addresses.safeTokenContractCall": { + "88": [887, 911, true], + "89": [1074, 1081, true], + "90": [1117, 1138, false], + "91": [1162, 1192, true] + } + }, + "16": {}, + "25": {}, + "26": { + "StarknetERC20Bridge.deposit": { + "87": [507, 584, true] + } + }, + "28": { + "StarknetTokenBridge.sendMessage": { + "110": [3454, 3476, true] + }, + "StarknetTokenBridge.validateInitData": { + "109": [1297, 1314, true] + } + }, + "29": {}, + "30": { + "Transfers.transferIn": { + "114": [564, 615, true], + "115": [1019, 1069, true] + }, + "Transfers.transferOut": { + "111": [1408, 1433, true], + "112": [1549, 1600, true], + "113": [1977, 2027, true] + } + }, + "31": {}, + "34": {}, + "5": { + "ProxySupport.initialize": { + "92": [1178, 1197, true] + } + }, + "6": {}, + "8": { + "Governance.cancelNomination": { + "99": [434, 456, true] + } + } + }, + "statements": { + "0": { + "NamedStorage.setAddressValueOnce": { + "86": [2254, 2315] + }, + "NamedStorage.setUintValueOnce": { + "83": [1657, 1704], + "84": [1714, 1739] + } + }, + "1": { + "Governance.acceptGovernance": { + "55": [3385, 3456], + "56": [3492, 3526], + "57": [3536, 3572], + "58": [3644, 3683] + }, + "Governance.addGovernor": { + "81": [3011, 3064], + "82": [3138, 3180] + }, + "Governance.cancelNomination": { + "72": [2244, 2280], + "73": [2290, 2319] + }, + "Governance.initGovernance": { + "44": [1638, 1686], + "45": [1696, 1718], + "46": [1804, 1827] + }, + "Governance.isGovernor": { + "36": [1994, 2037] + }, + "Governance.nominateNewGovernor": { + "52": [2480, 2533], + "53": [2543, 2578], + "54": [2588, 2626] + }, + "Governance.removeGovernor": { + "47": [3833, 3898], + "48": [3972, 4027], + "49": [4037, 4087], + "50": [4097, 4140] + } + }, + "10": { + "ProxySupport.callExternalInitializer": { + "37": [2637, 2704], + "38": [2953, 2989], + "39": [2999, 3050] + }, + "ProxySupport.initialize": { + "4": [1666, 1729], + "5": [1891, 1940], + "6": [2137, 2182], + "7": [2196, 2203], + "8": [2258, 2311], + "9": [2391, 2417], + "10": [2431, 2464], + "11": [2478, 2494] + } + }, + "11": { + "Addresses.isContract": { + "78": [329, 344] + }, + "Addresses.safeTokenContractCall": { + "75": [879, 933], + "76": [1066, 1102], + "77": [1154, 1219] + } + }, + "16": {}, + "25": {}, + "26": { + "StarknetERC20Bridge.deposit": { + "21": [486, 630], + "22": [640, 696], + "23": [706, 738] + }, + "StarknetERC20Bridge.withdraw": { + "0": [830, 863], + "1": [873, 929] + } + }, + "28": { + "StarknetTokenBridge.consumeMessage": { + "25": [3935, 3972], + "26": [4036, 4071], + "27": [4081, 4112], + "28": [4122, 4161], + "29": [4171, 4210], + "30": [4221, 4289] + }, + "StarknetTokenBridge.initializeContractState": { + "42": [1843, 1870], + "43": [1880, 1917] + }, + "StarknetTokenBridge.isInitialized": { + "40": [1044, 1095] + }, + "StarknetTokenBridge.sendMessage": { + "66": [3446, 3517], + "67": [3527, 3575], + "68": [3639, 3663], + "69": [3673, 3712], + "70": [3722, 3761], + "71": [3771, 3844] + }, + "StarknetTokenBridge.setL2TokenContract": { + "17": [2846, 2890], + "18": [2900, 2933] + }, + "StarknetTokenBridge.setMaxDeposit": { + "19": [3212, 3246], + "20": [3256, 3279] + }, + "StarknetTokenBridge.setMaxTotalBalance": { + "13": [3034, 3078], + "14": [3088, 3121] + }, + "StarknetTokenBridge.validateInitData": { + "41": [1289, 1336] + }, + "StarknetTokenBridge.withdraw": { + "3": [4429, 4457] + } + }, + "29": { + "StarknetTokenStorage.bridgedToken": { + "31": [829, 883], + "79": [1545, 1607] + }, + "StarknetTokenStorage.l2TokenContract": { + "59": [965, 1011], + "60": [1679, 1729] + }, + "StarknetTokenStorage.maxDeposit": { + "61": [1796, 1845], + "85": [1088, 1137] + }, + "StarknetTokenStorage.maxTotalBalance": { + "51": [1917, 1972], + "62": [1219, 1274] + }, + "StarknetTokenStorage.messagingContract": { + "74": [1369, 1448], + "80": [2061, 2137] + } + }, + "30": { + "Transfers.transferIn": { + "63": [556, 628], + "64": [818, 855], + "65": [1011, 1102] + }, + "Transfers.transferOut": { + "32": [1400, 1455], + "33": [1541, 1614], + "34": [1776, 1813], + "35": [1969, 2060] + } + }, + "31": {}, + "34": { + "StarknetGovernance.starknetAcceptGovernance": { + "16": [1053, 1071] + }, + "StarknetGovernance.starknetCancelNomination": { + "24": [1139, 1157] + }, + "StarknetGovernance.starknetIsGovernor": { + "2": [706, 737] + }, + "StarknetGovernance.starknetNominateNewGovernor": { + "15": [827, 859] + }, + "StarknetGovernance.starknetRemoveGovernor": { + "12": [951, 985] + } + }, + "5": {}, + "6": {}, + "8": {} + } + }, + "dependencies": [ + "Addresses", + "BlockDirectCall", + "CairoConstants", + "ContractInitializer", + "Governance", + "IERC20", + "IStarknetMessaging", + "MGovernance", + "NamedStorage", + "ProxySupport", + "StarknetGovernance", + "StarknetTokenBridge", + "StarknetTokenStorage", + "Transfers" + ], + "deployedBytecode": "608060405234801561001057600080fd5b50600436106100ce5760003560e01c8063894ecf041161008c578063a90e32b811610066578063a90e32b814610241578063bb371fdd1461025e578063e2bbb1581461027b578063e37fec251461029e576100ce565b8063894ecf04146101f657806391a66a2614610213578063946be3ed14610239576100ce565b8062f714ce146100d357806301a01590146101015780632e1a7d4d1461013b57806333eeb14714610158578063439fab911461016057806384f921cd146101d0575b600080fd5b6100ff600480360360408110156100e957600080fd5b50803590602001356001600160a01b03166102a6565b005b6101276004803603602081101561011757600080fd5b50356001600160a01b03166102c6565b604080519115158252519081900360200190f35b6100ff6004803603602081101561015157600080fd5b50356102d7565b6101276102e4565b6100ff6004803603602081101561017657600080fd5b81019060208101813564010000000081111561019157600080fd5b8201836020820111156101a357600080fd5b803590602001918460018302840111640100000000831117156101c557600080fd5b5090925090506102e9565b6100ff600480360360208110156101e657600080fd5b50356001600160a01b03166104bc565b6100ff6004803603602081101561020c57600080fd5b50356104c5565b6100ff6004803603602081101561022957600080fd5b50356001600160a01b031661054d565b6100ff610556565b6100ff6004803603602081101561025757600080fd5b5035610560565b6100ff6004803603602081101561027457600080fd5b50356106eb565b6100ff6004803603604081101561029157600080fd5b5080359060200135610773565b6100ff610863565b6102b0828261086b565b6102c26102bb610a19565b8284610a41565b5050565b60006102d182610c82565b92915050565b6102e181336102a6565b50565b600090565b7f00000000000000000000000000000000000000000000000000000000000000008054908115610359576040805162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b604482015290519081900360640190fd5b505060006103656102e4565b602090810291508101808310156103b9576040805162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b604482015290519081900360640190fd5b60006103c782848688611e6a565b60208110156103d557600080fd5b50356001600160a01b031690503660006103f18582888a611e6a565b915091506103ff82826102c2565b36600061040e8887818c611e6a565b90925090506001600160a01b038516156104395761042d858383610cb1565b505050505050506102c2565b610441610f08565b15610495578015610490576040805162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b604482015290519081900360640190fd5b6104b1565b61049f8282610f23565b6104a98282610f6c565b6104b1610faf565b505050505050505050565b6102e181611031565b6104ce33610c82565b610511576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517fa9aec19ec61c04ae0a4a1498ab6ce04cbd68b3d54c47888a45eb2bd37caf06bc9181900360200190a16102e18161117e565b6102e1816111a0565b61055e61129d565b565b61056861136a565b156105ba576040805162461bcd60e51b815260206004820152601d60248201527f4c325f544f4b454e5f434f4e54524143545f414c52454144595f534554000000604482015290519081900360640190fd5b8080610607576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b600167080000000000001160c01b018110610663576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b61066c33610c82565b6106af576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805183815290517f49774a785afe45b60857497c0aff8733f202ca7e75329ad6408073564efea6df9181900360200190a16102c28261138d565b6106f433610c82565b610737576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517faf474b5afcf11bd99dc9fc7f499e6ab368d650bf7ef23993f0d61bd9ad7626519181900360200190a16102e1816113af565b61077b6113d1565b82610784610a19565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156107d057600080fd5b505afa1580156107e4573d6000803e3d6000fd5b505050506040513d60208110156107fa57600080fd5b5051011115610847576040805162461bcd60e51b815260206004820152601460248201527313505617d09053105390d157d15610d15151115160621b604482015290519081900360640190fd5b610859610852610a19565b33846113f4565b6102c282826115dd565b61055e6118cb565b604080516001600160a01b03831681526020810184905281517fb4214c8c54fc7442f36d3682f59aebaf09358a4431835b30efb29d52cf9e1e91929181900390910190a160408051600480825260a08201909252606091602082016080803683370190505090506000816000815181106108e157fe5b602002602001018181525050816001600160a01b03168160018151811061090457fe5b6020908102919091010152600160801b83068160028151811061092357fe5b6020908102919091010152600160801b83048160038151811061094257fe5b602002602001018181525050610956611962565b6001600160a01b0316632c9dd5c061096c61136a565b836040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156109c25781810151838201526020016109aa565b505050509050019350505050602060405180830381600087803b1580156109e857600080fd5b505af11580156109fc573d6000803e3d6000fd5b505050506040513d6020811015610a1257600080fd5b5050505050565b6000610a3c604051806060016040528060298152602001611f4e60299139611981565b905090565b826001600160a01b038316610a91576040805162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b604482015290519081900360640190fd5b6000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610ae057600080fd5b505afa158015610af4573d6000803e3d6000fd5b505050506040513d6020811015610b0a57600080fd5b50519050828103811015610b51576040805162461bcd60e51b8152602060048201526009602482015268554e444552464c4f5760b81b604482015290519081900360640190fd5b604080516001600160a01b03808716602483015260448083018790528351808403909101815260649092019092526020810180516001600160e01b031663a9059cbb60e01b17905290610ba6908716826119fe565b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610bf557600080fd5b505afa158015610c09573d6000803e3d6000fd5b505050506040513d6020811015610c1f57600080fd5b505190508483038114610c79576040805162461bcd60e51b815260206004820152601c60248201527f494e434f52524543545f414d4f554e545f5452414e5346455252454400000000604482015290519081900360640190fd5b50505050505050565b600080610c8d611bad565b6001600160a01b039390931660009081526020939093525050604090205460ff1690565b610cc3836001600160a01b0316611c5c565b610d09576040805162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b604482015290519081900360640190fd5b60006060846001600160a01b031663439fab9160e01b85856040516024018080602001828103825284848281815260200192508082843760008382015260408051601f909201601f1990811690940182810390940182529283526020810180516001600160e01b03166001600160e01b0319909916989098178852915182519297909650869550935090915081905083835b60208310610dba5780518252601f199092019160209182019101610d9b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610e1a576040519150601f19603f3d011682016040523d82523d6000602084013e610e1f565b606091505b5091509150818190610eaf5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e74578181015183820152602001610e5c565b50505050905090810190601f168015610ea15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508051819015610f005760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610e74578181015183820152602001610e5c565b505050505050565b600080610f13611962565b6001600160a01b03161415905090565b604081146102c2576040805162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b604482015290519081900360640190fd5b60008083836040811015610f7f57600080fd5b506001600160a01b03813581169350602090910135169050610fa082611c62565b610fa981611c84565b50505050565b6000610fb9611bad565b6001810154909150600160a01b900460ff1615611013576040805162461bcd60e51b81526020600482015260136024820152721053149150511657d253925512505312569151606a1b604482015290519081900360640190fd5b60018101805460ff60a01b1916600160a01b1790556102e133611ca6565b61103a33610c82565b61107d576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b336001600160a01b03821614156110d2576040805162461bcd60e51b8152602060048201526014602482015273474f5645524e4f525f53454c465f52454d4f564560601b604482015290519081900360640190fd5b60006110dc611bad565b90506110e782610c82565b611127576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa3a7ab22a92727a960a11b604482015290519081900360640190fd5b6001600160a01b03821660008181526020838152604091829020805460ff19169055815192835290517fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a295999281900390910190a15050565b6102e1604051806060016040528060278152602001611f066027913982611d26565b6111a933610c82565b6111ec576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b60006111f6611bad565b905061120182610c82565b15611246576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b6001810180546001600160a01b0384166001600160a01b0319909116811790915560408051918252517f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a69181900360200190a15050565b60006112a7611bad565b60018101549091506001600160a01b0316331461130b576040805162461bcd60e51b815260206004820152601760248201527f4f4e4c595f43414e4449444154455f474f5645524e4f52000000000000000000604482015290519081900360640190fd5b6001810154611322906001600160a01b0316611ca6565b6001810180546001600160a01b03191690556040805133815290517fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d29181900360200190a150565b6000610a3c604051806060016040528060278152602001611edf60279139611981565b6102e1604051806060016040528060278152602001611edf6027913982611da0565b6102e1604051806060016040528060218152602001611f2d6021913982611d26565b6000610a3c604051806060016040528060278152602001611f0660279139611981565b604080516370a0823160e01b8152306004820152905184916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561143f57600080fd5b505afa158015611453573d6000803e3d6000fd5b505050506040513d602081101561146957600080fd5b505190508281018111156114af576040805162461bcd60e51b81526020600482015260086024820152674f564552464c4f5760c01b604482015290519081900360640190fd5b604080516001600160a01b03808716602483015230604483015260648083018790528351808403909101815260849092019092526020810180516001600160e01b03166323b872dd60e01b1790529061150a908716826119fe565b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561155957600080fd5b505afa15801561156d573d6000803e3d6000fd5b505050506040513d602081101561158357600080fd5b505190508285018114610c79576040805162461bcd60e51b815260206004820152601c60248201527f494e434f52524543545f414d4f554e545f5452414e5346455252454400000000604482015290519081900360640190fd5b6115e561136a565b611636576040805162461bcd60e51b815260206004820152601960248201527f4c325f544f4b454e5f434f4e54524143545f4e4f545f53455400000000000000604482015290519081900360640190fd5b8080611683576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b600167080000000000001160c01b0181106116df576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b6116e7611df3565b8311156117255760405162461bcd60e51b8152600401808060200182810382526024815260200180611ebb6024913960400191505060405180910390fd5b604080513381526020810185905280820184905290517f9dbb0e7dda3e09710ce75b801addc87cf9d9c6c581641b3275fca409ad086c629181900360600190a160408051600380825260808201909252606091602082018380368337019050509050828160008151811061179557fe5b6020908102919091010152600160801b8406816001815181106117b457fe5b6020908102919091010152600160801b8404816002815181106117d357fe5b6020026020010181815250506117e7611962565b6001600160a01b0316633e3aa6c56117fd61136a565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5846040518463ffffffff1660e01b81526004018084815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561187a578181015183820152602001611862565b50505050905001945050505050602060405180830381600087803b1580156118a157600080fd5b505af11580156118b5573d6000803e3d6000fd5b505050506040513d6020811015610f0057600080fd5b6118d433610c82565b611917576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6000611921611bad565b6001810180546001600160a01b03191690556040519091507f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f590600090a150565b6000610a3c604051806060016040528060288152602001611e93602891395b600080826040516020018082805190602001908083835b602083106119b75780518252601f199092019160209182019101611998565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508054915050919050565b611a0782611c5c565b611a4c576040805162461bcd60e51b81526020600482015260116024820152704241445f544f4b454e5f4144445245535360781b604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310611a8a5780518252601f199092019160209182019101611a6b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611aec576040519150601f19603f3d011682016040523d82523d6000602084013e611af1565b606091505b5091509150818190611b445760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610e74578181015183820152602001610e5c565b50805115610fa957808060200190516020811015611b6157600080fd5b5051610fa9576040805162461bcd60e51b81526020600482015260166024820152751513d2d15397d3d4115490551253d397d1905253115160521b604482015290519081900360640190fd5b6000806040518060400160405280601c81526020017f535441524b4e45545f312e305f474f5645524e414e43455f494e464f000000008152506040516020018082805190602001908083835b60208310611c185780518252601f199092019160209182019101611bf9565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508091505090565b3b151590565b6102e1604051806060016040528060298152602001611f4e6029913982611e16565b6102e1604051806060016040528060288152602001611e936028913982611e16565b611caf81610c82565b15611cf4576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b6000611cfe611bad565b6001600160a01b0390921660009081526020929092525060409020805460ff19166001179055565b6000826040516020018082805190602001908083835b60208310611d5b5780518252601f199092019160209182019101611d3c565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050818155505050565b611da982611981565b15611de9576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b6102c28282611d26565b6000610a3c604051806060016040528060218152602001611f2d60219139611981565b6000611e2183611981565b6001600160a01b031614611de9576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b60008085851115611e79578182fd5b83861115611e85578182fd5b505082019391909203915056fe535441524b4e45545f544f4b454e5f4252494447455f4d4553534147494e475f434f4e54524143545452414e534645525f544f5f535441524b4e45545f414d4f554e545f4558434545444544535441524b4e45545f544f4b454e5f4252494447455f4c325f544f4b454e5f434f4e5452414354535441524b4e45545f544f4b454e5f4252494447455f4d41585f544f54414c5f42414c414e4345535441524b4e45545f544f4b454e5f4252494447455f4d41585f4445504f534954535441524b4e45545f45524332305f544f4b454e5f4252494447455f544f4b454e5f41444452455353a2646970667358221220fd2fe883d770c6733418100eae3f37e39ee730035d864ee143dfa0a26b5856e164736f6c634300060c0033", + "deployedSourceMap": "355:583:26:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;751:185;;;;;;;;;;;;;;;;-1:-1:-1;751:185:26;;;;;;-1:-1:-1;;;;;751:185:26;;:::i;:::-;;617:127:34;;;;;;;;;;;;;;;;-1:-1:-1;617:127:34;-1:-1:-1;;;;;617:127:34;;:::i;:::-;;;;;;;;;;;;;;;;;;4376:88:28;;;;;;;;;;;;;;;;-1:-1:-1;4376:88:28;;:::i;775:86:10:-;;;:::i;1483:1028::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1483:1028:10;;-1:-1:-1;1483:1028:10;-1:-1:-1;1483:1028:10;:::i;872:120:34:-;;;;;;;;;;;;;;;;-1:-1:-1;872:120:34;-1:-1:-1;;;;;872:120:34;;:::i;2946:182:28:-;;;;;;;;;;;;;;;;-1:-1:-1;2946:182:28;;:::i;750:116:34:-;;;;;;;;;;;;;;;;-1:-1:-1;750:116:34;-1:-1:-1;;;;;750:116:34;;:::i;998:80::-;;;:::i;2665:275:28:-;;;;;;;;;;;;;;;;-1:-1:-1;2665:275:28;;:::i;3134:152::-;;;;;;;;;;;;;;;;-1:-1:-1;3134:152:28;;:::i;413:332:26:-;;;;;;;;;;;;;;;;-1:-1:-1;413:332:26;;;;;;;:::i;1084:80:34:-;;;:::i;751:185:26:-;830:33;845:6;853:9;830:14;:33::i;:::-;873:56;895:14;:12;:14::i;:::-;911:9;922:6;873:21;:56::i;:::-;751:185;;:::o;617:127:34:-;690:4;713:24;724:12;713:10;:24::i;:::-;706:31;617:127;-1:-1:-1;;617:127:34:o;4376:88:28:-;4429:28;4438:6;4446:10;4429:8;:28::i;:::-;4376:88;:::o;775:86:10:-;826:4;775:86;:::o;1483:1028::-;1052:21:5;1132:11;;;1178:19;;1170:54;;;;;-1:-1:-1;;;1170:54:5;;;;;;;;;;;;-1:-1:-1;;;1170:54:5;;;;;;;;;;;;;;;1483:1028:10;;1561:17:::1;1586:19;:17;:19::i;:::-;1581:2;:24:::0;;::::1;::::0;-1:-1:-1;1642:14:10;::::1;1674:31:::0;;::::1;;1666:63;;;::::0;;-1:-1:-1;;;1666:63:10;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;1666:63:10;;;;;;;;;;;;;::::1;;1739:18;1771:32;1786:16:::0;1776:9;1771:4;;:32:::1;:::i;:::-;1760:55;;;;;;;::::0;::::1;;-1:-1:-1::0;1760:55:10::1;-1:-1:-1::0;;;;;1760:55:10::1;::::0;-1:-1:-1;1826:35:10::1;;1864:16;1870:9:::0;1826:35;1864:4;;:16:::1;:::i;:::-;1826:54;;;;1891:49;1919:20;;1891:27;:49::i;:::-;1951:23;;1977;:4:::0;1982:16;1977:4;;:23:::1;:::i;:::-;1951:49:::0;;-1:-1:-1;1951:49:10;-1:-1:-1;;;;;;2095:26:10;::::1;::::0;2091:122:::1;;2137:45;2161:10;2173:8;;2137:23;:45::i;:::-;2196:7;;;;;;;;;2091:122;2227:15;:13;:15::i;:::-;2223:282;;;2266:20:::0;;2258:53:::1;;;::::0;;-1:-1:-1;;;2258:53:10;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2258:53:10;;;;;;;;;;;;;::::1;;2223:282;;;2391:26;2408:8;;2391:16;:26::i;:::-;2431:33;2455:8;;2431:23;:33::i;:::-;2478:16;:14;:16::i;:::-;1244:1:5;;;;;;;1483:1028:10::0;;:::o;872:120:34:-;951:34;966:18;951:14;:34::i;2946:182:28:-;434:22:8;445:10;434;:22::i;:::-;426:50;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;;;;3039:39:28::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;3088:33;3104:16;3088:15;:33::i;750:116:34:-:0;827:32;847:11;827:19;:32::i;998:80::-;1053:18;:16;:18::i;:::-;998:80::o;2665:275:28:-;2461:17;:15;:17::i;:::-;:22;2453:64;;;;;-1:-1:-1;;;2453:64:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;2791:16;2260:14;2252:50:::1;;;::::0;;-1:-1:-1;;;2252:50:28;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2252:50:28;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;2320:9:28::1;:38;2312:74;;;::::0;;-1:-1:-1;;;2312:74:28;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2312:74:28;;;;;;;;;;;;;::::1;;434:22:8::2;445:10;434;:22::i;:::-;426:50;;;::::0;;-1:-1:-1;;;426:50:8;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;;::::2;;2851:39:28::3;::::0;;;;;;;::::3;::::0;;;;::::3;::::0;;::::3;2900:33;2916:16;2900:15;:33::i;3134:152::-:0;434:22:8;445:10;434;:22::i;:::-;426:50;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;;;;3217:29:28::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;3256:23;3267:11;3256:10;:23::i;413:332:26:-:0;567:17;:15;:17::i;:::-;557:6;514:14;:12;:14::i;:::-;-1:-1:-1;;;;;507:32:26;;548:4;507:47;;;;;;;;;;;;;-1:-1:-1;;;;;507:47:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;507:47:26;:56;:77;;486:144;;;;;-1:-1:-1;;;486:144:26;;;;;;;;;;;;-1:-1:-1;;;486:144:26;;;;;;;;;;;;;;;640:56;661:14;:12;:14::i;:::-;677:10;689:6;640:20;:56::i;:::-;706:32;718:6;726:11;706;:32::i;1084:80:34:-;1139:18;:16;:18::i;3857:439:28:-;3940:32;;;-1:-1:-1;;;;;3940:32:28;;;;;;;;;;;;;;;;;;;;;;;4010:16;;;4024:1;4010:16;;;;;;;;;3983:24;;4010:16;;;;;;;;;;-1:-1:-1;4010:16:28;3983:43;;2140:1;4036:7;4044:1;4036:10;;;;;;;;;;;;;:35;;;;;4102:9;-1:-1:-1;;;;;4094:18:28;4081:7;4089:1;4081:10;;;;;;;;;;;;;;;;;:31;-1:-1:-1;;;4135:6:28;:26;4122:7;4130:1;4122:10;;;;;;;;;;;;;;;;;:39;-1:-1:-1;;;4184:6:28;:26;4171:7;4179:1;4171:10;;;;;;;;;;;;;:39;;;;;4221:19;:17;:19::i;:::-;-1:-1:-1;;;;;4221:40:28;;4262:17;:15;:17::i;:::-;4281:7;4221:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3857:439:28:o;763:127:29:-;810:7;836:47;865:17;;;;;;;;;;;;;;;;;836:28;:47::i;:::-;829:54;;763:127;:::o;1181:886:30:-;1329:5;-1:-1:-1;;;;;1408:25:30;;1400:55;;;;;-1:-1:-1;;;1400:55:30;;;;;;;;;;;;-1:-1:-1;;;1400:55:30;;;;;;;;;;;;;;;1465:27;1495:11;-1:-1:-1;;;;;1495:21:30;;1525:4;1495:36;;;;;;;;;;;;;-1:-1:-1;;;;;1495:36:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1495:36:30;;-1:-1:-1;1549:28:30;;;:51;-1:-1:-1;1549:51:30;1541:73;;;;;-1:-1:-1;;;1541:73:30;;;;;;;;;;;;-1:-1:-1;;;1541:73:30;;;;;;;;;;;;;;;1648:118;;;-1:-1:-1;;;;;1648:118:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1648:118:30;-1:-1:-1;;;1648:118:30;;;;1776:37;;:27;;1648:118;1776:27;:37::i;:::-;1823:26;1852:11;-1:-1:-1;;;;;1852:21:30;;1882:4;1852:36;;;;;;;;;;;;;-1:-1:-1;;;;;1852:36:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1852:36:30;;-1:-1:-1;1999:28:30;;;1977:50;;1969:91;;;;;-1:-1:-1;;;1969:91:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;1181:886;;;;;;;:::o;1840:204:1:-;1914:4;1930:32;1965:19;:17;:19::i;:::-;-1:-1:-1;;;;;2001:36:1;;;;:22;:36;;;;;;;;-1:-1:-1;;2001:36:1;;;;;;;1840:204::o;2517:540:10:-;2645:36;:23;-1:-1:-1;;;;;2645:34:10;;:36::i;:::-;2637:67;;;;;-1:-1:-1;;;2637:67:10;;;;;;;;;;;;-1:-1:-1;;;2637:67:10;;;;;;;;;;;;;;;2785:12;2799:23;2826;-1:-1:-1;;;;;2826:36:10;2899:24;;;2925:7;;2876:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2876:57:10;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2876:57:10;-1:-1:-1;;;;;;2876:57:10;;;;;;;;;2826:117;;;;2876:57;;2826:117;;-1:-1:-1;2826:117:10;;-1:-1:-1;2876:57:10;-1:-1:-1;2826:117:10;;-1:-1:-1;2826:117:10;;-1:-1:-1;2826:117:10;2876:57;2826:117;;;;;;;;;;-1:-1:-1;;2826:117:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2784:159;;;;2961:7;2977:10;2953:36;;;;;-1:-1:-1;;;2953:36:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3007:17:10;;:10;;:22;2999:51;;;;-1:-1:-1;;;2999:51:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2517:540;;;;;:::o;971:131:28:-;1028:4;;1051:19;:17;:19::i;:::-;-1:-1:-1;;;;;1051:44:28;;;1044:51;;971:131;:::o;1209:134::-;1312:2;1297:17;;1289:47;;;;;-1:-1:-1;;;1289:47:28;;;;;;;;;;;;-1:-1:-1;;;1289:47:28;;;;;;;;;;;;;;1605:319;1688:21;1711:37;1776:4;;1752:81;;;;;;;;;;-1:-1:-1;;;;;;1752:81:28;;;;;-1:-1:-1;1752:81:28;;;;;;;-1:-1:-1;1843:27:28;1752:81;1843:12;:27::i;:::-;1880:37;1898:18;1880:17;:37::i;:::-;1605:319;;;;:::o;1529:305:1:-;1574:32;1609:19;:17;:19::i;:::-;1647:15;;;;;;-1:-1:-1;;;;1647:15:1;;;;1646:16;1638:48;;;;;-1:-1:-1;;;1638:48:1;;;;;;;;;;;;-1:-1:-1;;;1638:48:1;;;;;;;;;;;;;;;1714:4;1696:15;;:22;;-1:-1:-1;;;;1696:22:1;-1:-1:-1;;;1696:22:1;;;1804:23;1816:10;1804:11;:23::i;3747:400::-;434:22:8;445:10;434;:22::i;:::-;426:50;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;;;;3841:10:1::1;-1:-1:-1::0;;;;;3841:32:1;::::1;;;3833:65;;;::::0;;-1:-1:-1;;;3833:65:1;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;3833:65:1;;;;;;;;;;;;;::::1;;3908:32;3943:19;:17;:19::i;:::-;3908:54;;3980:30;3991:18;3980:10;:30::i;:::-;3972:55;;;::::0;;-1:-1:-1;;;3972:55:1;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;3972:55:1;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;4037:42:1;::::1;4082:5;4037:42:::0;;;::::1;::::0;;;;;;;;:50;;-1:-1:-1;;4037:50:1::1;::::0;;4102:38;;;;;;;::::1;::::0;;;;;;;;::::1;486:1:8;3747:400:1::0;:::o;1858:121:29:-;1917:55;1943:21;;;;;;;;;;;;;;;;;1966:5;1917:25;:55::i;2332:301:1:-;434:22:8;445:10;434;:22::i;:::-;426:50;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;;;;2416:32:1::1;2451:19;:17;:19::i;:::-;2416:54;;2489:23;2500:11;2489:10;:23::i;:::-;2488:24;2480:53;;;::::0;;-1:-1:-1;;;2480:53:1;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2480:53:1;;;;;;;;;;;;;::::1;;2543:21;::::0;::::1;:35:::0;;-1:-1:-1;;;;;2543:35:1;::::1;-1:-1:-1::0;;;;;;2543:35:1;;::::1;::::0;::::1;::::0;;;2593:33:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;486:1:8;2332:301:1::0;:::o;3193:497::-;3321:32;3356:19;:17;:19::i;:::-;3407:21;;;;;;-1:-1:-1;;;;;;3407:21:1;3393:10;:35;3385:71;;;;;-1:-1:-1;;;3385:71:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;3504:21;;;;3492:34;;-1:-1:-1;;;;;3504:21:1;3492:11;:34::i;:::-;3536:21;;;:36;;-1:-1:-1;;;;;;3536:36:1;;;3649:34;;;3672:10;3649:34;;;;;;;;;;;;;3193:497;:::o;896:122:29:-;946:7;972:39;998:12;;;;;;;;;;;;;;;;;972:25;:39::i;1620:116::-;1679:50;1709:12;;;;;;;;;;;;;;;;;1723:5;1679:29;:50::i;1742:110::-;1796:49;1822:15;;;;;;;;;;;;;;;;;1839:5;1796:25;:49::i;1150:131::-;1200:7;1226:48;1252:21;;;;;;;;;;;;;;;;;1226:25;:48::i;320:789:30:-;510:36;;;-1:-1:-1;;;510:36:30;;540:4;510:36;;;;;;464:5;;436:18;;-1:-1:-1;;;;;510:21:30;;;;;:36;;;;;;;;;;;;;;:21;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;510:36:30;;-1:-1:-1;564:28:30;;;:51;-1:-1:-1;564:51:30;556:72;;;;;-1:-1:-1;;;556:72:30;;;;;;;;;;;;-1:-1:-1;;;556:72:30;;;;;;;;;;;;;;;662:146;;;-1:-1:-1;;;;;662:146:30;;;;;;;773:4;662:146;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;662:146:30;-1:-1:-1;;;662:146:30;;;;818:37;;:27;;662:146;818:27;:37::i;:::-;865:26;894:11;-1:-1:-1;;;;;894:21:30;;924:4;894:36;;;;;;;;;;;;;-1:-1:-1;;;;;894:36:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;894:36:30;;-1:-1:-1;1041:28:30;;;1019:50;;1011:91;;;;;-1:-1:-1;;;1011:91:30;;;;;;;;;;;;;;;;;;;;;;;;;;;3292:559:28;2589:17;:15;:17::i;:::-;2581:60;;;;;-1:-1:-1;;;2581:60:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;3419:11;2260:14;2252:50:::1;;;::::0;;-1:-1:-1;;;2252:50:28;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2252:50:28;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;2320:9:28::1;:38;2312:74;;;::::0;;-1:-1:-1;;;2312:74:28;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2312:74:28;;;;;;;;;;;;;::::1;;3464:12:::2;:10;:12::i;:::-;3454:6;:22;;3446:71;;;;-1:-1:-1::0;;;3446:71:28::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3532:43;::::0;;3543:10:::2;3532:43:::0;;::::2;::::0;::::2;::::0;;;;;;;;;;;::::2;::::0;;;;;;;::::2;3613:16;::::0;;3627:1:::2;3613:16:::0;;;;;::::2;::::0;;;3586:24:::2;::::0;3613:16:::2;::::0;::::2;3586:24:::0;;3613:16:::2;::::0;::::2;;::::0;-1:-1:-1;3613:16:28::2;3586:43;;3652:11;3639:7;3647:1;3639:10;;;;;;;;;::::0;;::::2;::::0;;;;;:24;-1:-1:-1;;;3686:6:28;:26:::2;3673:7;3681:1;3673:10;;;;;;;;;::::0;;::::2;::::0;;;;;:39;-1:-1:-1;;;3735:6:28;:26:::2;3722:7;3730:1;3722:10;;;;;;;;;;;;;:39;;;::::0;::::2;3771:19;:17;:19::i;:::-;-1:-1:-1::0;;;;;3771:35:28::2;;3807:17;:15;:17::i;:::-;2016:76;3836:7;3771:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;2118:208:1::0;434:22:8;445:10;434;:22::i;:::-;426:50;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;;;;2180:32:1::1;2215:19;:17;:19::i;:::-;2244:21;::::0;::::1;:36:::0;;-1:-1:-1;;;;;;2244:36:1::1;::::0;;2295:24:::1;::::0;2180:54;;-1:-1:-1;2295:24:1::1;::::0;2276:3:::1;::::0;2295:24:::1;486:1:8;2118:208:1:o:0;1287:168:29:-;1339:18;1395:52;1424:22;;;;;;;;;;;;;;;;;1752:212:0;1820:14;1846:12;1888:4;1871:22;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1871:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1861:33;;;;;;1846:48;;1943:4;1937:11;1927:21;;1913:45;;;;:::o;784:452:11:-;887:24;898:12;887:10;:24::i;:::-;879:54;;;;;-1:-1:-1;;;879:54:11;;;;;;;;;;;;-1:-1:-1;;;879:54:11;;;;;;;;;;;;;;;988:12;1002:23;1029:12;-1:-1:-1;;;;;1029:17:11;1047:8;1029:27;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1029:27:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;987:69;;;;1074:7;1090:10;1066:36;;;;;-1:-1:-1;;;1066:36:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1117:17:11;;:21;1113:117;;1173:10;1162:30;;;;;;;;;;;;;;;-1:-1:-1;1162:30:11;1154:65;;;;;-1:-1:-1;;;1154:65:11;;;;;;;;;;;;-1:-1:-1;;;1154:65:11;;;;;;;;;;;;;;361:250:34;422:32;466:16;512:28;;;;;;;;;;;;;;;;;495:46;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;495:46:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;485:57;;;;;;466:76;;587:8;575:20;;561:44;;:::o;161:190:11:-;290:20;336:8;;;161:190::o;1485:129:29:-;1545:62;1578:17;;;;;;;;;;;;;;;;;1597:9;1545:32;:62::i;1985:159::-;2061:76;2094:22;;;;;;;;;;;;;;;;;2126:9;2061:32;:76::i;2951:236:1:-;3020:23;3031:11;3020:10;:23::i;:::-;3019:24;3011:53;;;;;-1:-1:-1;;;3011:53:1;;;;;;;;;;;;-1:-1:-1;;;3011:53:1;;;;;;;;;;;;;;;3074:32;3109:19;:17;:19::i;:::-;-1:-1:-1;;;;;3138:35:1;;;:22;:35;;;;;;;;-1:-1:-1;3138:35:1;;;:42;;-1:-1:-1;;3138:42:1;3176:4;3138:42;;;2951:236::o;1379:192:0:-;1455:12;1497:4;1480:22;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1480:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1470:33;;;;;;1455:48;;1549:5;1543:4;1536:19;1522:43;;;:::o;1577:169::-;1665:18;1678:4;1665:12;:18::i;:::-;:23;1657:47;;;;;-1:-1:-1;;;1657:47:0;;;;;;;;;;;;-1:-1:-1;;;1657:47:0;;;;;;;;;;;;;;;1714:25;1727:4;1733:5;1714:12;:25::i;1024:120:29:-;1069:7;1095:42;1121:15;;;;;;;;;;;;;;;;;1095:25;:42::i;2171:189:0:-;2295:3;2262:21;2278:4;2262:15;:21::i;:::-;-1:-1:-1;;;;;2262:37:0;;2254:61;;;;;-1:-1:-1;;;2254:61:0;;;;;;;;;;;;-1:-1:-1;;;2254:61:0;;;;;;;;;;;;;;5:318:-1;;;155:8;143:10;140:24;137:2;;;-1:-1;;167:12;137:2;202:6;192:8;189:20;186:2;;;-1:-1;;212:12;186:2;-1:-1;;244:31;;;293:25;;;;;-1:-1;131:192::o", + "language": "Solidity", + "natspec": { + "kind": "dev", + "methods": {}, + "version": 1 + }, + "offset": [355, 938], + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xCE JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x894ECF04 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xA90E32B8 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA90E32B8 EQ PUSH2 0x241 JUMPI DUP1 PUSH4 0xBB371FDD EQ PUSH2 0x25E JUMPI DUP1 PUSH4 0xE2BBB158 EQ PUSH2 0x27B JUMPI DUP1 PUSH4 0xE37FEC25 EQ PUSH2 0x29E JUMPI PUSH2 0xCE JUMP JUMPDEST DUP1 PUSH4 0x894ECF04 EQ PUSH2 0x1F6 JUMPI DUP1 PUSH4 0x91A66A26 EQ PUSH2 0x213 JUMPI DUP1 PUSH4 0x946BE3ED EQ PUSH2 0x239 JUMPI PUSH2 0xCE JUMP JUMPDEST DUP1 PUSH3 0xF714CE EQ PUSH2 0xD3 JUMPI DUP1 PUSH4 0x1A01590 EQ PUSH2 0x101 JUMPI DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x13B JUMPI DUP1 PUSH4 0x33EEB147 EQ PUSH2 0x158 JUMPI DUP1 PUSH4 0x439FAB91 EQ PUSH2 0x160 JUMPI DUP1 PUSH4 0x84F921CD EQ PUSH2 0x1D0 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2A6 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x127 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x117 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2C6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x151 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2D7 JUMP JUMPDEST PUSH2 0x127 PUSH2 0x2E4 JUMP JUMPDEST PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x176 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x191 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x2E9 JUMP JUMPDEST PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4BC JUMP JUMPDEST PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x20C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x4C5 JUMP JUMPDEST PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x229 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x54D JUMP JUMPDEST PUSH2 0xFF PUSH2 0x556 JUMP JUMPDEST PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x257 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x560 JUMP JUMPDEST PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x274 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x6EB JUMP JUMPDEST PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x291 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x773 JUMP JUMPDEST PUSH2 0xFF PUSH2 0x863 JUMP JUMPDEST PUSH2 0x2B0 DUP3 DUP3 PUSH2 0x86B JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x2BB PUSH2 0xA19 JUMP JUMPDEST DUP3 DUP5 PUSH2 0xA41 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D1 DUP3 PUSH2 0xC82 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2E1 DUP2 CALLER PUSH2 0x2A6 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 DUP1 SLOAD SWAP1 DUP2 ISZERO PUSH2 0x359 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x1112549150D517D0D0531317D11254D0531313D5D151 PUSH1 0x52 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x0 PUSH2 0x365 PUSH2 0x2E4 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 POP DUP2 ADD DUP1 DUP4 LT ISZERO PUSH2 0x3B9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x1253925517D110551057D513D3D7D4D3505313 PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3C7 DUP3 DUP5 DUP7 DUP9 PUSH2 0x1E6A JUMP JUMPDEST PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP CALLDATASIZE PUSH1 0x0 PUSH2 0x3F1 DUP6 DUP3 DUP9 DUP11 PUSH2 0x1E6A JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x3FF DUP3 DUP3 PUSH2 0x2C2 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 PUSH2 0x40E DUP9 DUP8 DUP2 DUP13 PUSH2 0x1E6A JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND ISZERO PUSH2 0x439 JUMPI PUSH2 0x42D DUP6 DUP4 DUP4 PUSH2 0xCB1 JUMP JUMPDEST POP POP POP POP POP POP POP PUSH2 0x2C2 JUMP JUMPDEST PUSH2 0x441 PUSH2 0xF08 JUMP JUMPDEST ISZERO PUSH2 0x495 JUMPI DUP1 ISZERO PUSH2 0x490 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x554E45585045435445445F494E49545F44415441 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x4B1 JUMP JUMPDEST PUSH2 0x49F DUP3 DUP3 PUSH2 0xF23 JUMP JUMPDEST PUSH2 0x4A9 DUP3 DUP3 PUSH2 0xF6C JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0xFAF JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x2E1 DUP2 PUSH2 0x1031 JUMP JUMPDEST PUSH2 0x4CE CALLER PUSH2 0xC82 JUMP JUMPDEST PUSH2 0x511 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4F4E4C595F474F5645524E414E4345 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xA9AEC19EC61C04AE0A4A1498AB6CE04CBD68B3D54C47888A45EB2BD37CAF06BC SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 PUSH2 0x2E1 DUP2 PUSH2 0x117E JUMP JUMPDEST PUSH2 0x2E1 DUP2 PUSH2 0x11A0 JUMP JUMPDEST PUSH2 0x55E PUSH2 0x129D JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x568 PUSH2 0x136A JUMP JUMPDEST ISZERO PUSH2 0x5BA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C325F544F4B454E5F434F4E54524143545F414C52454144595F534554000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP1 PUSH2 0x607 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x4C325F414444524553535F4F55545F4F465F52414E4745 PUSH1 0x48 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH8 0x800000000000011 PUSH1 0xC0 SHL ADD DUP2 LT PUSH2 0x663 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x4C325F414444524553535F4F55545F4F465F52414E4745 PUSH1 0x48 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x66C CALLER PUSH2 0xC82 JUMP JUMPDEST PUSH2 0x6AF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4F4E4C595F474F5645524E414E4345 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x49774A785AFE45B60857497C0AFF8733F202CA7E75329AD6408073564EFEA6DF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 PUSH2 0x2C2 DUP3 PUSH2 0x138D JUMP JUMPDEST PUSH2 0x6F4 CALLER PUSH2 0xC82 JUMP JUMPDEST PUSH2 0x737 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4F4E4C595F474F5645524E414E4345 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xAF474B5AFCF11BD99DC9FC7F499E6AB368D650BF7EF23993F0D61BD9AD762651 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 PUSH2 0x2E1 DUP2 PUSH2 0x13AF JUMP JUMPDEST PUSH2 0x77B PUSH2 0x13D1 JUMP JUMPDEST DUP3 PUSH2 0x784 PUSH2 0xA19 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7E4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ADD GT ISZERO PUSH2 0x847 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x13505617D09053105390D157D15610D151511151 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x859 PUSH2 0x852 PUSH2 0xA19 JUMP JUMPDEST CALLER DUP5 PUSH2 0x13F4 JUMP JUMPDEST PUSH2 0x2C2 DUP3 DUP3 PUSH2 0x15DD JUMP JUMPDEST PUSH2 0x55E PUSH2 0x18CB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE DUP2 MLOAD PUSH32 0xB4214C8C54FC7442F36D3682F59AEBAF09358A4431835B30EFB29D52CF9E1E91 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 PUSH1 0x40 DUP1 MLOAD PUSH1 0x4 DUP1 DUP3 MSTORE PUSH1 0xA0 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 PUSH1 0x20 DUP3 ADD PUSH1 0x80 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x8E1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x904 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 PUSH1 0x80 SHL DUP4 MOD DUP2 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x923 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 PUSH1 0x80 SHL DUP4 DIV DUP2 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x942 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x956 PUSH2 0x1962 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2C9DD5C0 PUSH2 0x96C PUSH2 0x136A JUMP JUMPDEST DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x9C2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x9AA JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x9E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA3C PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4E PUSH1 0x29 SWAP2 CODECOPY PUSH2 0x1981 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xA91 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x1253959053125117D49150D25412515395 PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xAE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAF4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB0A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP3 DUP2 SUB DUP2 LT ISZERO PUSH2 0xB51 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x554E444552464C4F57 PUSH1 0xB8 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP8 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 PUSH2 0xBA6 SWAP1 DUP8 AND DUP3 PUSH2 0x19FE JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC09 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xC1F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP5 DUP4 SUB DUP2 EQ PUSH2 0xC79 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E434F52524543545F414D4F554E545F5452414E5346455252454400000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xC8D PUSH2 0x1BAD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP4 SWAP1 SWAP4 MSTORE POP POP PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0xCC3 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1C5C JUMP JUMPDEST PUSH2 0xD09 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x115250D7D393D517D057D0D3D395149050D5 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x439FAB91 PUSH1 0xE0 SHL DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F SWAP1 SWAP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND SWAP1 SWAP5 ADD DUP3 DUP2 SUB SWAP1 SWAP5 ADD DUP3 MSTORE SWAP3 DUP4 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP10 AND SWAP9 SWAP1 SWAP9 OR DUP9 MSTORE SWAP2 MLOAD DUP3 MLOAD SWAP3 SWAP8 SWAP1 SWAP7 POP DUP7 SWAP6 POP SWAP4 POP SWAP1 SWAP2 POP DUP2 SWAP1 POP DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xDBA JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xD9B JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xE1A JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xE1F JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP2 SWAP1 PUSH2 0xEAF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xE74 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xE5C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xEA1 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP1 MLOAD DUP2 SWAP1 ISZERO PUSH2 0xF00 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0xE74 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xE5C JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xF13 PUSH2 0x1962 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP2 EQ PUSH2 0x2C2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x494C4C4547414C5F444154415F53495A45 PUSH1 0x78 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 DUP4 PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xF7F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP4 POP PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD AND SWAP1 POP PUSH2 0xFA0 DUP3 PUSH2 0x1C62 JUMP JUMPDEST PUSH2 0xFA9 DUP2 PUSH2 0x1C84 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFB9 PUSH2 0x1BAD JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x1013 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x1053149150511657D253925512505312569151 PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 ADD DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE PUSH2 0x2E1 CALLER PUSH2 0x1CA6 JUMP JUMPDEST PUSH2 0x103A CALLER PUSH2 0xC82 JUMP JUMPDEST PUSH2 0x107D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4F4E4C595F474F5645524E414E4345 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ ISZERO PUSH2 0x10D2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x474F5645524E4F525F53454C465F52454D4F5645 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x10DC PUSH2 0x1BAD JUMP JUMPDEST SWAP1 POP PUSH2 0x10E7 DUP3 PUSH2 0xC82 JUMP JUMPDEST PUSH2 0x1127 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x2727AA2FA3A7AB22A92727A9 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP4 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP2 MLOAD SWAP3 DUP4 MSTORE SWAP1 MLOAD PUSH32 0xD75F94825E770B8B512BE8E74759E252AD00E102E38F50CCE2F7C6F868A29599 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH2 0x2E1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F06 PUSH1 0x27 SWAP2 CODECOPY DUP3 PUSH2 0x1D26 JUMP JUMPDEST PUSH2 0x11A9 CALLER PUSH2 0xC82 JUMP JUMPDEST PUSH2 0x11EC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4F4E4C595F474F5645524E414E4345 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x11F6 PUSH2 0x1BAD JUMP JUMPDEST SWAP1 POP PUSH2 0x1201 DUP3 PUSH2 0xC82 JUMP JUMPDEST ISZERO PUSH2 0x1246 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x20A62922A0A22CAFA3A7AB22A92727A9 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0x6166272C8D3F5F579082F2827532732F97195007983BB5B83AC12C56700B01A6 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12A7 PUSH2 0x1BAD JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x130B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F43414E4449444154455F474F5645524E4F52000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD PUSH2 0x1322 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1CA6 JUMP JUMPDEST PUSH1 0x1 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE SWAP1 MLOAD PUSH32 0xCFB473E6C03F9A29DDAF990E736FA3DE5188A0BD85D684F5B6E164EBFBFFF5D2 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA3C PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1EDF PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x1981 JUMP JUMPDEST PUSH2 0x2E1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1EDF PUSH1 0x27 SWAP2 CODECOPY DUP3 PUSH2 0x1DA0 JUMP JUMPDEST PUSH2 0x2E1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F2D PUSH1 0x21 SWAP2 CODECOPY DUP3 PUSH2 0x1D26 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA3C PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F06 PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x1981 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD DUP5 SWAP2 PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x143F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1453 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1469 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP3 DUP2 ADD DUP2 GT ISZERO PUSH2 0x14AF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x4F564552464C4F57 PUSH1 0xC0 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x24 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP1 DUP4 ADD DUP8 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 PUSH2 0x150A SWAP1 DUP8 AND DUP3 PUSH2 0x19FE JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1559 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x156D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1583 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP3 DUP6 ADD DUP2 EQ PUSH2 0xC79 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E434F52524543545F414D4F554E545F5452414E5346455252454400000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x15E5 PUSH2 0x136A JUMP JUMPDEST PUSH2 0x1636 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C325F544F4B454E5F434F4E54524143545F4E4F545F53455400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP1 PUSH2 0x1683 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x4C325F414444524553535F4F55545F4F465F52414E4745 PUSH1 0x48 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH8 0x800000000000011 PUSH1 0xC0 SHL ADD DUP2 LT PUSH2 0x16DF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x4C325F414444524553535F4F55545F4F465F52414E4745 PUSH1 0x48 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x16E7 PUSH2 0x1DF3 JUMP JUMPDEST DUP4 GT ISZERO PUSH2 0x1725 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1EBB PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD DUP5 SWAP1 MSTORE SWAP1 MLOAD PUSH32 0x9DBB0E7DDA3E09710CE75B801ADDC87CF9D9C6C581641B3275FCA409AD086C62 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 PUSH1 0x40 DUP1 MLOAD PUSH1 0x3 DUP1 DUP3 MSTORE PUSH1 0x80 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 PUSH1 0x20 DUP3 ADD DUP4 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP3 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x1795 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 PUSH1 0x80 SHL DUP5 MOD DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x17B4 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 PUSH1 0x80 SHL DUP5 DIV DUP2 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x17D3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x17E7 PUSH2 0x1962 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3E3AA6C5 PUSH2 0x17FD PUSH2 0x136A JUMP JUMPDEST PUSH32 0x2D757788A8D8D6F21D1CD40BCE38A8222D70654214E96FF95D8086E684FBEE5 DUP5 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x187A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1862 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x18B5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF00 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x18D4 CALLER PUSH2 0xC82 JUMP JUMPDEST PUSH2 0x1917 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4F4E4C595F474F5645524E414E4345 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1921 PUSH2 0x1BAD JUMP JUMPDEST PUSH1 0x1 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 POP PUSH32 0x7A8DC7DD7FFFB43C4807438FA62729225156941E641FD877938F4EDADE3429F5 SWAP1 PUSH1 0x0 SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA3C PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E93 PUSH1 0x28 SWAP2 CODECOPY JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x19B7 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1998 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP1 SLOAD SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1A07 DUP3 PUSH2 0x1C5C JUMP JUMPDEST PUSH2 0x1A4C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x4241445F544F4B454E5F41444452455353 PUSH1 0x78 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1A8A JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1A6B JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1AEC JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1AF1 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP2 SWAP1 PUSH2 0x1B44 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0xE74 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xE5C JUMP JUMPDEST POP DUP1 MLOAD ISZERO PUSH2 0xFA9 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1B61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0xFA9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x1513D2D15397D3D4115490551253D397D19052531151 PUSH1 0x52 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1C DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x535441524B4E45545F312E305F474F5645524E414E43455F494E464F00000000 DUP2 MSTORE POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1C18 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1BF9 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP1 SWAP2 POP POP SWAP1 JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x2E1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4E PUSH1 0x29 SWAP2 CODECOPY DUP3 PUSH2 0x1E16 JUMP JUMPDEST PUSH2 0x2E1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E93 PUSH1 0x28 SWAP2 CODECOPY DUP3 PUSH2 0x1E16 JUMP JUMPDEST PUSH2 0x1CAF DUP2 PUSH2 0xC82 JUMP JUMPDEST ISZERO PUSH2 0x1CF4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x20A62922A0A22CAFA3A7AB22A92727A9 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1CFE PUSH2 0x1BAD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP3 SWAP1 SWAP3 MSTORE POP PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1D5B JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1D3C JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP2 DUP2 SSTORE POP POP POP JUMP JUMPDEST PUSH2 0x1DA9 DUP3 PUSH2 0x1981 JUMP JUMPDEST ISZERO PUSH2 0x1DE9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x1053149150511657D4D155 PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2C2 DUP3 DUP3 PUSH2 0x1D26 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA3C PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F2D PUSH1 0x21 SWAP2 CODECOPY PUSH2 0x1981 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E21 DUP4 PUSH2 0x1981 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1DE9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x1053149150511657D4D155 PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP6 GT ISZERO PUSH2 0x1E79 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP4 DUP7 GT ISZERO PUSH2 0x1E85 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP3 ADD SWAP4 SWAP2 SWAP1 SWAP3 SUB SWAP2 POP JUMP INVALID MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F SLOAD 0x4F 0x4B GASLIMIT 0x4E 0x5F TIMESTAMP MSTORE 0x49 DIFFICULTY SELFBALANCE GASLIMIT 0x5F 0x4D GASLIMIT MSTORE8 MSTORE8 COINBASE SELFBALANCE 0x49 0x4E SELFBALANCE 0x5F NUMBER 0x4F 0x4E SLOAD MSTORE COINBASE NUMBER SLOAD SLOAD MSTORE COINBASE 0x4E MSTORE8 CHAINID GASLIMIT MSTORE 0x5F SLOAD 0x4F 0x5F MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F COINBASE 0x4D 0x4F SSTORE 0x4E SLOAD 0x5F GASLIMIT PC NUMBER GASLIMIT GASLIMIT DIFFICULTY GASLIMIT DIFFICULTY MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F SLOAD 0x4F 0x4B GASLIMIT 0x4E 0x5F TIMESTAMP MSTORE 0x49 DIFFICULTY SELFBALANCE GASLIMIT 0x5F 0x4C ORIGIN 0x5F SLOAD 0x4F 0x4B GASLIMIT 0x4E 0x5F NUMBER 0x4F 0x4E SLOAD MSTORE COINBASE NUMBER SLOAD MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F SLOAD 0x4F 0x4B GASLIMIT 0x4E 0x5F TIMESTAMP MSTORE 0x49 DIFFICULTY SELFBALANCE GASLIMIT 0x5F 0x4D COINBASE PC 0x5F SLOAD 0x4F SLOAD COINBASE 0x4C 0x5F TIMESTAMP COINBASE 0x4C COINBASE 0x4E NUMBER GASLIMIT MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F SLOAD 0x4F 0x4B GASLIMIT 0x4E 0x5F TIMESTAMP MSTORE 0x49 DIFFICULTY SELFBALANCE GASLIMIT 0x5F 0x4D COINBASE PC 0x5F DIFFICULTY GASLIMIT POP 0x4F MSTORE8 0x49 SLOAD MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F GASLIMIT MSTORE NUMBER ORIGIN ADDRESS 0x5F SLOAD 0x4F 0x4B GASLIMIT 0x4E 0x5F TIMESTAMP MSTORE 0x49 DIFFICULTY SELFBALANCE GASLIMIT 0x5F SLOAD 0x4F 0x4B GASLIMIT 0x4E 0x5F COINBASE DIFFICULTY DIFFICULTY MSTORE GASLIMIT MSTORE8 MSTORE8 LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 REVERT 0x2F 0xE8 DUP4 0xD7 PUSH17 0xC6733418100EAE3F37E39EE730035D864E 0xE1 NUMBER 0xDF LOG0 LOG2 PUSH12 0x5856E164736F6C634300060C STOP CALLER ", + "pcMap": { + "0": { + "offset": [355, 938], + "op": "PUSH1", + "path": "26", + "value": "0x80" + }, + "2": { + "fn": null, + "offset": [355, 938], + "op": "PUSH1", + "path": "26", + "value": "0x40" + }, + "4": { + "fn": null, + "offset": [355, 938], + "op": "MSTORE", + "path": "26" + }, + "5": { + "fn": null, + "offset": [355, 938], + "op": "CALLVALUE", + "path": "26" + }, + "6": { + "fn": null, + "offset": [355, 938], + "op": "DUP1", + "path": "26" + }, + "7": { + "fn": null, + "offset": [355, 938], + "op": "ISZERO", + "path": "26" + }, + "8": { + "fn": null, + "offset": [355, 938], + "op": "PUSH2", + "path": "26", + "value": "0x10" + }, + "11": { + "fn": null, + "offset": [355, 938], + "op": "JUMPI", + "path": "26" + }, + "12": { + "fn": null, + "offset": [355, 938], + "op": "PUSH1", + "path": "26", + "value": "0x0" + }, + "14": { + "fn": null, + "offset": [355, 938], + "op": "DUP1", + "path": "26" + }, + "15": { + "dev": "Cannot send ether to nonpayable function", + "fn": null, + "offset": [355, 938], + "op": "REVERT", + "path": "26" + }, + "16": { + "fn": null, + "offset": [355, 938], + "op": "JUMPDEST", + "path": "26" + }, + "17": { + "fn": null, + "offset": [355, 938], + "op": "POP", + "path": "26" + }, + "18": { + "fn": null, + "offset": [355, 938], + "op": "PUSH1", + "path": "26", + "value": "0x4" + }, + "20": { + "fn": null, + "offset": [355, 938], + "op": "CALLDATASIZE", + "path": "26" + }, + "21": { + "fn": null, + "offset": [355, 938], + "op": "LT", + "path": "26" + }, + "22": { + "fn": null, + "offset": [355, 938], + "op": "PUSH2", + "path": "26", + "value": "0xCE" + }, + "25": { + "fn": null, + "offset": [355, 938], + "op": "JUMPI", + "path": "26" + }, + "26": { + "fn": null, + "offset": [355, 938], + "op": "PUSH1", + "path": "26", + "value": "0x0" + }, + "28": { + "fn": null, + "offset": [355, 938], + "op": "CALLDATALOAD", + "path": "26" + }, + "29": { + "fn": null, + "offset": [355, 938], + "op": "PUSH1", + "path": "26", + "value": "0xE0" + }, + "31": { + "fn": null, + "offset": [355, 938], + "op": "SHR", + "path": "26" + }, + "32": { + "fn": null, + "offset": [355, 938], + "op": "DUP1", + "path": "26" + }, + "33": { + "fn": null, + "offset": [355, 938], + "op": "PUSH4", + "path": "26", + "value": "0x894ECF04" + }, + "38": { + "fn": null, + "offset": [355, 938], + "op": "GT", + "path": "26" + }, + "39": { + "fn": null, + "offset": [355, 938], + "op": "PUSH2", + "path": "26", + "value": "0x8C" + }, + "42": { + "fn": null, + "offset": [355, 938], + "op": "JUMPI", + "path": "26" + }, + "43": { + "fn": null, + "offset": [355, 938], + "op": "DUP1", + "path": "26" + }, + "44": { + "fn": null, + "offset": [355, 938], + "op": "PUSH4", + "path": "26", + "value": "0xA90E32B8" + }, + "49": { + "fn": null, + "offset": [355, 938], + "op": "GT", + "path": "26" + }, + "50": { + "fn": null, + "offset": [355, 938], + "op": "PUSH2", + "path": "26", + "value": "0x66" + }, + "53": { + "fn": null, + "offset": [355, 938], + "op": "JUMPI", + "path": "26" + }, + "54": { + "fn": null, + "offset": [355, 938], + "op": "DUP1", + "path": "26" + }, + "55": { + "fn": null, + "offset": [355, 938], + "op": "PUSH4", + "path": "26", + "value": "0xA90E32B8" + }, + "60": { + "fn": null, + "offset": [355, 938], + "op": "EQ", + "path": "26" + }, + "61": { + "fn": null, + "offset": [355, 938], + "op": "PUSH2", + "path": "26", + "value": "0x241" + }, + "64": { + "fn": null, + "offset": [355, 938], + "op": "JUMPI", + "path": "26" + }, + "65": { + "fn": null, + "offset": [355, 938], + "op": "DUP1", + "path": "26" + }, + "66": { + "fn": null, + "offset": [355, 938], + "op": "PUSH4", + "path": "26", + "value": "0xBB371FDD" + }, + "71": { + "fn": null, + "offset": [355, 938], + "op": "EQ", + "path": "26" + }, + "72": { + "fn": null, + "offset": [355, 938], + "op": "PUSH2", + "path": "26", + "value": "0x25E" + }, + "75": { + "fn": null, + "offset": [355, 938], + "op": "JUMPI", + "path": "26" + }, + "76": { + "fn": null, + "offset": [355, 938], + "op": "DUP1", + "path": "26" + }, + "77": { + "fn": null, + "offset": [355, 938], + "op": "PUSH4", + "path": "26", + "value": "0xE2BBB158" + }, + "82": { + "fn": null, + "offset": [355, 938], + "op": "EQ", + "path": "26" + }, + "83": { + "fn": null, + "offset": [355, 938], + "op": "PUSH2", + "path": "26", + "value": "0x27B" + }, + "86": { + "fn": null, + "offset": [355, 938], + "op": "JUMPI", + "path": "26" + }, + "87": { + "fn": null, + "offset": [355, 938], + "op": "DUP1", + "path": "26" + }, + "88": { + "fn": null, + "offset": [355, 938], + "op": "PUSH4", + "path": "26", + "value": "0xE37FEC25" + }, + "93": { + "fn": null, + "offset": [355, 938], + "op": "EQ", + "path": "26" + }, + "94": { + "fn": null, + "offset": [355, 938], + "op": "PUSH2", + "path": "26", + "value": "0x29E" + }, + "97": { + "fn": null, + "offset": [355, 938], + "op": "JUMPI", + "path": "26" + }, + "98": { + "fn": null, + "offset": [355, 938], + "op": "PUSH2", + "path": "26", + "value": "0xCE" + }, + "101": { + "fn": null, + "offset": [355, 938], + "op": "JUMP", + "path": "26" + }, + "102": { + "fn": null, + "offset": [355, 938], + "op": "JUMPDEST", + "path": "26" + }, + "103": { + "fn": null, + "offset": [355, 938], + "op": "DUP1", + "path": "26" + }, + "104": { + "fn": null, + "offset": [355, 938], + "op": "PUSH4", + "path": "26", + "value": "0x894ECF04" + }, + "109": { + "fn": null, + "offset": [355, 938], + "op": "EQ", + "path": "26" + }, + "110": { + "fn": null, + "offset": [355, 938], + "op": "PUSH2", + "path": "26", + "value": "0x1F6" + }, + "113": { + "fn": null, + "offset": [355, 938], + "op": "JUMPI", + "path": "26" + }, + "114": { + "fn": null, + "offset": [355, 938], + "op": "DUP1", + "path": "26" + }, + "115": { + "fn": null, + "offset": [355, 938], + "op": "PUSH4", + "path": "26", + "value": "0x91A66A26" + }, + "120": { + "fn": null, + "offset": [355, 938], + "op": "EQ", + "path": "26" + }, + "121": { + "fn": null, + "offset": [355, 938], + "op": "PUSH2", + "path": "26", + "value": "0x213" + }, + "124": { + "fn": null, + "offset": [355, 938], + "op": "JUMPI", + "path": "26" + }, + "125": { + "fn": null, + "offset": [355, 938], + "op": "DUP1", + "path": "26" + }, + "126": { + "fn": null, + "offset": [355, 938], + "op": "PUSH4", + "path": "26", + "value": "0x946BE3ED" + }, + "131": { + "fn": null, + "offset": [355, 938], + "op": "EQ", + "path": "26" + }, + "132": { + "fn": null, + "offset": [355, 938], + "op": "PUSH2", + "path": "26", + "value": "0x239" + }, + "135": { + "fn": null, + "offset": [355, 938], + "op": "JUMPI", + "path": "26" + }, + "136": { + "fn": null, + "offset": [355, 938], + "op": "PUSH2", + "path": "26", + "value": "0xCE" + }, + "139": { + "fn": null, + "offset": [355, 938], + "op": "JUMP", + "path": "26" + }, + "140": { + "fn": null, + "offset": [355, 938], + "op": "JUMPDEST", + "path": "26" + }, + "141": { + "fn": null, + "offset": [355, 938], + "op": "DUP1", + "path": "26" + }, + "142": { + "fn": null, + "offset": [355, 938], + "op": "PUSH3", + "path": "26", + "value": "0xF714CE" + }, + "146": { + "fn": null, + "offset": [355, 938], + "op": "EQ", + "path": "26" + }, + "147": { + "fn": null, + "offset": [355, 938], + "op": "PUSH2", + "path": "26", + "value": "0xD3" + }, + "150": { + "fn": null, + "offset": [355, 938], + "op": "JUMPI", + "path": "26" + }, + "151": { + "fn": null, + "offset": [355, 938], + "op": "DUP1", + "path": "26" + }, + "152": { + "fn": null, + "offset": [355, 938], + "op": "PUSH4", + "path": "26", + "value": "0x1A01590" + }, + "157": { + "fn": null, + "offset": [355, 938], + "op": "EQ", + "path": "26" + }, + "158": { + "fn": null, + "offset": [355, 938], + "op": "PUSH2", + "path": "26", + "value": "0x101" + }, + "161": { + "fn": null, + "offset": [355, 938], + "op": "JUMPI", + "path": "26" + }, + "162": { + "fn": null, + "offset": [355, 938], + "op": "DUP1", + "path": "26" + }, + "163": { + "fn": null, + "offset": [355, 938], + "op": "PUSH4", + "path": "26", + "value": "0x2E1A7D4D" + }, + "168": { + "fn": null, + "offset": [355, 938], + "op": "EQ", + "path": "26" + }, + "169": { + "fn": null, + "offset": [355, 938], + "op": "PUSH2", + "path": "26", + "value": "0x13B" + }, + "172": { + "fn": null, + "offset": [355, 938], + "op": "JUMPI", + "path": "26" + }, + "173": { + "fn": null, + "offset": [355, 938], + "op": "DUP1", + "path": "26" + }, + "174": { + "fn": null, + "offset": [355, 938], + "op": "PUSH4", + "path": "26", + "value": "0x33EEB147" + }, + "179": { + "fn": null, + "offset": [355, 938], + "op": "EQ", + "path": "26" + }, + "180": { + "fn": null, + "offset": [355, 938], + "op": "PUSH2", + "path": "26", + "value": "0x158" + }, + "183": { + "fn": null, + "offset": [355, 938], + "op": "JUMPI", + "path": "26" + }, + "184": { + "fn": null, + "offset": [355, 938], + "op": "DUP1", + "path": "26" + }, + "185": { + "fn": null, + "offset": [355, 938], + "op": "PUSH4", + "path": "26", + "value": "0x439FAB91" + }, + "190": { + "fn": null, + "offset": [355, 938], + "op": "EQ", + "path": "26" + }, + "191": { + "fn": null, + "offset": [355, 938], + "op": "PUSH2", + "path": "26", + "value": "0x160" + }, + "194": { + "fn": null, + "offset": [355, 938], + "op": "JUMPI", + "path": "26" + }, + "195": { + "fn": null, + "offset": [355, 938], + "op": "DUP1", + "path": "26" + }, + "196": { + "fn": null, + "offset": [355, 938], + "op": "PUSH4", + "path": "26", + "value": "0x84F921CD" + }, + "201": { + "fn": null, + "offset": [355, 938], + "op": "EQ", + "path": "26" + }, + "202": { + "fn": null, + "offset": [355, 938], + "op": "PUSH2", + "path": "26", + "value": "0x1D0" + }, + "205": { + "fn": null, + "offset": [355, 938], + "op": "JUMPI", + "path": "26" + }, + "206": { + "fn": null, + "offset": [355, 938], + "op": "JUMPDEST", + "path": "26" + }, + "207": { + "fn": null, + "offset": [355, 938], + "op": "PUSH1", + "path": "26", + "value": "0x0" + }, + "209": { + "fn": null, + "offset": [355, 938], + "op": "DUP1", + "path": "26" + }, + "210": { + "first_revert": true, + "fn": null, + "offset": [355, 938], + "op": "REVERT", + "path": "26" + }, + "211": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [751, 936], + "op": "JUMPDEST", + "path": "26" + }, + "212": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [751, 936], + "op": "PUSH2", + "path": "26", + "value": "0xFF" + }, + "215": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [751, 936], + "op": "PUSH1", + "path": "26", + "value": "0x4" + }, + "217": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [751, 936], + "op": "DUP1", + "path": "26" + }, + "218": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [751, 936], + "op": "CALLDATASIZE", + "path": "26" + }, + "219": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [751, 936], + "op": "SUB", + "path": "26" + }, + "220": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [751, 936], + "op": "PUSH1", + "path": "26", + "value": "0x40" + }, + "222": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [751, 936], + "op": "DUP2", + "path": "26" + }, + "223": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [751, 936], + "op": "LT", + "path": "26" + }, + "224": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [751, 936], + "op": "ISZERO", + "path": "26" + }, + "225": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [751, 936], + "op": "PUSH2", + "path": "26", + "value": "0xE9" + }, + "228": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [751, 936], + "op": "JUMPI", + "path": "26" + }, + "229": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [751, 936], + "op": "PUSH1", + "path": "26", + "value": "0x0" + }, + "231": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [751, 936], + "op": "DUP1", + "path": "26" + }, + "232": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [751, 936], + "op": "REVERT", + "path": "26" + }, + "233": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [751, 936], + "op": "JUMPDEST", + "path": "26" + }, + "234": { + "op": "POP" + }, + "235": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [751, 936], + "op": "DUP1", + "path": "26" + }, + "236": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [751, 936], + "op": "CALLDATALOAD", + "path": "26" + }, + "237": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [751, 936], + "op": "SWAP1", + "path": "26" + }, + "238": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [751, 936], + "op": "PUSH1", + "path": "26", + "value": "0x20" + }, + "240": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [751, 936], + "op": "ADD", + "path": "26" + }, + "241": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [751, 936], + "op": "CALLDATALOAD", + "path": "26" + }, + "242": { + "op": "PUSH1", + "value": "0x1" + }, + "244": { + "op": "PUSH1", + "value": "0x1" + }, + "246": { + "op": "PUSH1", + "value": "0xA0" + }, + "248": { + "op": "SHL" + }, + "249": { + "op": "SUB" + }, + "250": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [751, 936], + "op": "AND", + "path": "26" + }, + "251": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [751, 936], + "op": "PUSH2", + "path": "26", + "value": "0x2A6" + }, + "254": { + "fn": "StarknetERC20Bridge.withdraw", + "jump": "i", + "offset": [751, 936], + "op": "JUMP", + "path": "26" + }, + "255": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [751, 936], + "op": "JUMPDEST", + "path": "26" + }, + "256": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [751, 936], + "op": "STOP", + "path": "26" + }, + "257": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "JUMPDEST", + "path": "34" + }, + "258": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "PUSH2", + "path": "34", + "value": "0x127" + }, + "261": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "PUSH1", + "path": "34", + "value": "0x4" + }, + "263": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "DUP1", + "path": "34" + }, + "264": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "CALLDATASIZE", + "path": "34" + }, + "265": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "SUB", + "path": "34" + }, + "266": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "PUSH1", + "path": "34", + "value": "0x20" + }, + "268": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "DUP2", + "path": "34" + }, + "269": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "LT", + "path": "34" + }, + "270": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "ISZERO", + "path": "34" + }, + "271": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "PUSH2", + "path": "34", + "value": "0x117" + }, + "274": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "JUMPI", + "path": "34" + }, + "275": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "PUSH1", + "path": "34", + "value": "0x0" + }, + "277": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "DUP1", + "path": "34" + }, + "278": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "REVERT", + "path": "34" + }, + "279": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "JUMPDEST", + "path": "34" + }, + "280": { + "op": "POP" + }, + "281": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "CALLDATALOAD", + "path": "34" + }, + "282": { + "op": "PUSH1", + "value": "0x1" + }, + "284": { + "op": "PUSH1", + "value": "0x1" + }, + "286": { + "op": "PUSH1", + "value": "0xA0" + }, + "288": { + "op": "SHL" + }, + "289": { + "op": "SUB" + }, + "290": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "AND", + "path": "34" + }, + "291": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "PUSH2", + "path": "34", + "value": "0x2C6" + }, + "294": { + "fn": "StarknetGovernance.starknetIsGovernor", + "jump": "i", + "offset": [617, 744], + "op": "JUMP", + "path": "34" + }, + "295": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "JUMPDEST", + "path": "34" + }, + "296": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "PUSH1", + "path": "34", + "value": "0x40" + }, + "298": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "DUP1", + "path": "34" + }, + "299": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "MLOAD", + "path": "34" + }, + "300": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "SWAP2", + "path": "34" + }, + "301": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "ISZERO", + "path": "34" + }, + "302": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "ISZERO", + "path": "34" + }, + "303": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "DUP3", + "path": "34" + }, + "304": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "MSTORE", + "path": "34" + }, + "305": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "MLOAD", + "path": "34" + }, + "306": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "SWAP1", + "path": "34" + }, + "307": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "DUP2", + "path": "34" + }, + "308": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "SWAP1", + "path": "34" + }, + "309": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "SUB", + "path": "34" + }, + "310": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "PUSH1", + "path": "34", + "value": "0x20" + }, + "312": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "ADD", + "path": "34" + }, + "313": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "SWAP1", + "path": "34" + }, + "314": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "RETURN", + "path": "34" + }, + "315": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "JUMPDEST", + "path": "28" + }, + "316": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "PUSH2", + "path": "28", + "value": "0xFF" + }, + "319": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "321": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "DUP1", + "path": "28" + }, + "322": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "CALLDATASIZE", + "path": "28" + }, + "323": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "SUB", + "path": "28" + }, + "324": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "326": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "DUP2", + "path": "28" + }, + "327": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "LT", + "path": "28" + }, + "328": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "ISZERO", + "path": "28" + }, + "329": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "PUSH2", + "path": "28", + "value": "0x151" + }, + "332": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "JUMPI", + "path": "28" + }, + "333": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "335": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "DUP1", + "path": "28" + }, + "336": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "REVERT", + "path": "28" + }, + "337": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "JUMPDEST", + "path": "28" + }, + "338": { + "op": "POP" + }, + "339": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "CALLDATALOAD", + "path": "28" + }, + "340": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "PUSH2", + "path": "28", + "value": "0x2D7" + }, + "343": { + "fn": "StarknetTokenBridge.withdraw", + "jump": "i", + "offset": [4376, 4464], + "op": "JUMP", + "path": "28" + }, + "344": { + "fn": "ProxySupport.isFrozen", + "offset": [775, 861], + "op": "JUMPDEST", + "path": "10" + }, + "345": { + "fn": "ProxySupport.isFrozen", + "offset": [775, 861], + "op": "PUSH2", + "path": "10", + "value": "0x127" + }, + "348": { + "fn": "ProxySupport.isFrozen", + "offset": [775, 861], + "op": "PUSH2", + "path": "10", + "value": "0x2E4" + }, + "351": { + "fn": "ProxySupport.isFrozen", + "jump": "i", + "offset": [775, 861], + "op": "JUMP", + "path": "10" + }, + "352": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "JUMPDEST", + "path": "10" + }, + "353": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH2", + "path": "10", + "value": "0xFF" + }, + "356": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH1", + "path": "10", + "value": "0x4" + }, + "358": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP1", + "path": "10" + }, + "359": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "CALLDATASIZE", + "path": "10" + }, + "360": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "SUB", + "path": "10" + }, + "361": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "363": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP2", + "path": "10" + }, + "364": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "LT", + "path": "10" + }, + "365": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "ISZERO", + "path": "10" + }, + "366": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH2", + "path": "10", + "value": "0x176" + }, + "369": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "JUMPI", + "path": "10" + }, + "370": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "372": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP1", + "path": "10" + }, + "373": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "REVERT", + "path": "10" + }, + "374": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "JUMPDEST", + "path": "10" + }, + "375": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP2", + "path": "10" + }, + "376": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "ADD", + "path": "10" + }, + "377": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "SWAP1", + "path": "10" + }, + "378": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "380": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP2", + "path": "10" + }, + "381": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "ADD", + "path": "10" + }, + "382": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP2", + "path": "10" + }, + "383": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "CALLDATALOAD", + "path": "10" + }, + "384": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH5", + "path": "10", + "value": "0x100000000" + }, + "390": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP2", + "path": "10" + }, + "391": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "GT", + "path": "10" + }, + "392": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "ISZERO", + "path": "10" + }, + "393": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH2", + "path": "10", + "value": "0x191" + }, + "396": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "JUMPI", + "path": "10" + }, + "397": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "399": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP1", + "path": "10" + }, + "400": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "REVERT", + "path": "10" + }, + "401": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "JUMPDEST", + "path": "10" + }, + "402": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP3", + "path": "10" + }, + "403": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "ADD", + "path": "10" + }, + "404": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP4", + "path": "10" + }, + "405": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "407": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP3", + "path": "10" + }, + "408": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "ADD", + "path": "10" + }, + "409": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "GT", + "path": "10" + }, + "410": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "ISZERO", + "path": "10" + }, + "411": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH2", + "path": "10", + "value": "0x1A3" + }, + "414": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "JUMPI", + "path": "10" + }, + "415": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "417": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP1", + "path": "10" + }, + "418": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "REVERT", + "path": "10" + }, + "419": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "JUMPDEST", + "path": "10" + }, + "420": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP1", + "path": "10" + }, + "421": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "CALLDATALOAD", + "path": "10" + }, + "422": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "SWAP1", + "path": "10" + }, + "423": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "425": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "ADD", + "path": "10" + }, + "426": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "SWAP2", + "path": "10" + }, + "427": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP5", + "path": "10" + }, + "428": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH1", + "path": "10", + "value": "0x1" + }, + "430": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP4", + "path": "10" + }, + "431": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "MUL", + "path": "10" + }, + "432": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP5", + "path": "10" + }, + "433": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "ADD", + "path": "10" + }, + "434": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "GT", + "path": "10" + }, + "435": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH5", + "path": "10", + "value": "0x100000000" + }, + "441": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP4", + "path": "10" + }, + "442": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "GT", + "path": "10" + }, + "443": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "OR", + "path": "10" + }, + "444": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "ISZERO", + "path": "10" + }, + "445": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH2", + "path": "10", + "value": "0x1C5" + }, + "448": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "JUMPI", + "path": "10" + }, + "449": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "451": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP1", + "path": "10" + }, + "452": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "REVERT", + "path": "10" + }, + "453": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "JUMPDEST", + "path": "10" + }, + "454": { + "op": "POP" + }, + "455": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "SWAP1", + "path": "10" + }, + "456": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "SWAP3", + "path": "10" + }, + "457": { + "op": "POP" + }, + "458": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "SWAP1", + "path": "10" + }, + "459": { + "op": "POP" + }, + "460": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH2", + "path": "10", + "value": "0x2E9" + }, + "463": { + "fn": "ProxySupport.initialize", + "jump": "i", + "offset": [1483, 2511], + "op": "JUMP", + "path": "10" + }, + "464": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "JUMPDEST", + "path": "34" + }, + "465": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "PUSH2", + "path": "34", + "value": "0xFF" + }, + "468": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "PUSH1", + "path": "34", + "value": "0x4" + }, + "470": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "DUP1", + "path": "34" + }, + "471": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "CALLDATASIZE", + "path": "34" + }, + "472": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "SUB", + "path": "34" + }, + "473": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "PUSH1", + "path": "34", + "value": "0x20" + }, + "475": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "DUP2", + "path": "34" + }, + "476": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "LT", + "path": "34" + }, + "477": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "ISZERO", + "path": "34" + }, + "478": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "PUSH2", + "path": "34", + "value": "0x1E6" + }, + "481": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "JUMPI", + "path": "34" + }, + "482": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "PUSH1", + "path": "34", + "value": "0x0" + }, + "484": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "DUP1", + "path": "34" + }, + "485": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "REVERT", + "path": "34" + }, + "486": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "JUMPDEST", + "path": "34" + }, + "487": { + "op": "POP" + }, + "488": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "CALLDATALOAD", + "path": "34" + }, + "489": { + "op": "PUSH1", + "value": "0x1" + }, + "491": { + "op": "PUSH1", + "value": "0x1" + }, + "493": { + "op": "PUSH1", + "value": "0xA0" + }, + "495": { + "op": "SHL" + }, + "496": { + "op": "SUB" + }, + "497": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "AND", + "path": "34" + }, + "498": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "PUSH2", + "path": "34", + "value": "0x4BC" + }, + "501": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "jump": "i", + "offset": [872, 992], + "op": "JUMP", + "path": "34" + }, + "502": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "JUMPDEST", + "path": "28" + }, + "503": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "PUSH2", + "path": "28", + "value": "0xFF" + }, + "506": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "508": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "DUP1", + "path": "28" + }, + "509": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "CALLDATASIZE", + "path": "28" + }, + "510": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "SUB", + "path": "28" + }, + "511": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "513": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "DUP2", + "path": "28" + }, + "514": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "LT", + "path": "28" + }, + "515": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "ISZERO", + "path": "28" + }, + "516": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "PUSH2", + "path": "28", + "value": "0x20C" + }, + "519": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "JUMPI", + "path": "28" + }, + "520": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "522": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "DUP1", + "path": "28" + }, + "523": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "REVERT", + "path": "28" + }, + "524": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "JUMPDEST", + "path": "28" + }, + "525": { + "op": "POP" + }, + "526": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "CALLDATALOAD", + "path": "28" + }, + "527": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "PUSH2", + "path": "28", + "value": "0x4C5" + }, + "530": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "jump": "i", + "offset": [2946, 3128], + "op": "JUMP", + "path": "28" + }, + "531": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "JUMPDEST", + "path": "34" + }, + "532": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "PUSH2", + "path": "34", + "value": "0xFF" + }, + "535": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "PUSH1", + "path": "34", + "value": "0x4" + }, + "537": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "DUP1", + "path": "34" + }, + "538": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "CALLDATASIZE", + "path": "34" + }, + "539": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "SUB", + "path": "34" + }, + "540": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "PUSH1", + "path": "34", + "value": "0x20" + }, + "542": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "DUP2", + "path": "34" + }, + "543": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "LT", + "path": "34" + }, + "544": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "ISZERO", + "path": "34" + }, + "545": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "PUSH2", + "path": "34", + "value": "0x229" + }, + "548": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "JUMPI", + "path": "34" + }, + "549": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "PUSH1", + "path": "34", + "value": "0x0" + }, + "551": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "DUP1", + "path": "34" + }, + "552": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "REVERT", + "path": "34" + }, + "553": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "JUMPDEST", + "path": "34" + }, + "554": { + "op": "POP" + }, + "555": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "CALLDATALOAD", + "path": "34" + }, + "556": { + "op": "PUSH1", + "value": "0x1" + }, + "558": { + "op": "PUSH1", + "value": "0x1" + }, + "560": { + "op": "PUSH1", + "value": "0xA0" + }, + "562": { + "op": "SHL" + }, + "563": { + "op": "SUB" + }, + "564": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "AND", + "path": "34" + }, + "565": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "PUSH2", + "path": "34", + "value": "0x54D" + }, + "568": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "jump": "i", + "offset": [750, 866], + "op": "JUMP", + "path": "34" + }, + "569": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "offset": [998, 1078], + "op": "JUMPDEST", + "path": "34" + }, + "570": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "offset": [998, 1078], + "op": "PUSH2", + "path": "34", + "value": "0xFF" + }, + "573": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "offset": [998, 1078], + "op": "PUSH2", + "path": "34", + "value": "0x556" + }, + "576": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "jump": "i", + "offset": [998, 1078], + "op": "JUMP", + "path": "34" + }, + "577": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "JUMPDEST", + "path": "28" + }, + "578": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "PUSH2", + "path": "28", + "value": "0xFF" + }, + "581": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "583": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "DUP1", + "path": "28" + }, + "584": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "CALLDATASIZE", + "path": "28" + }, + "585": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "SUB", + "path": "28" + }, + "586": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "588": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "DUP2", + "path": "28" + }, + "589": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "LT", + "path": "28" + }, + "590": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "ISZERO", + "path": "28" + }, + "591": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "PUSH2", + "path": "28", + "value": "0x257" + }, + "594": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "JUMPI", + "path": "28" + }, + "595": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "597": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "DUP1", + "path": "28" + }, + "598": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "REVERT", + "path": "28" + }, + "599": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "JUMPDEST", + "path": "28" + }, + "600": { + "op": "POP" + }, + "601": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "CALLDATALOAD", + "path": "28" + }, + "602": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "PUSH2", + "path": "28", + "value": "0x560" + }, + "605": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "jump": "i", + "offset": [2665, 2940], + "op": "JUMP", + "path": "28" + }, + "606": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "JUMPDEST", + "path": "28" + }, + "607": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "PUSH2", + "path": "28", + "value": "0xFF" + }, + "610": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "612": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "DUP1", + "path": "28" + }, + "613": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "CALLDATASIZE", + "path": "28" + }, + "614": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "SUB", + "path": "28" + }, + "615": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "617": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "DUP2", + "path": "28" + }, + "618": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "LT", + "path": "28" + }, + "619": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "ISZERO", + "path": "28" + }, + "620": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "PUSH2", + "path": "28", + "value": "0x274" + }, + "623": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "JUMPI", + "path": "28" + }, + "624": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "626": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "DUP1", + "path": "28" + }, + "627": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "REVERT", + "path": "28" + }, + "628": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "JUMPDEST", + "path": "28" + }, + "629": { + "op": "POP" + }, + "630": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "CALLDATALOAD", + "path": "28" + }, + "631": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "PUSH2", + "path": "28", + "value": "0x6EB" + }, + "634": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "jump": "i", + "offset": [3134, 3286], + "op": "JUMP", + "path": "28" + }, + "635": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [413, 745], + "op": "JUMPDEST", + "path": "26" + }, + "636": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [413, 745], + "op": "PUSH2", + "path": "26", + "value": "0xFF" + }, + "639": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [413, 745], + "op": "PUSH1", + "path": "26", + "value": "0x4" + }, + "641": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [413, 745], + "op": "DUP1", + "path": "26" + }, + "642": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [413, 745], + "op": "CALLDATASIZE", + "path": "26" + }, + "643": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [413, 745], + "op": "SUB", + "path": "26" + }, + "644": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [413, 745], + "op": "PUSH1", + "path": "26", + "value": "0x40" + }, + "646": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [413, 745], + "op": "DUP2", + "path": "26" + }, + "647": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [413, 745], + "op": "LT", + "path": "26" + }, + "648": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [413, 745], + "op": "ISZERO", + "path": "26" + }, + "649": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [413, 745], + "op": "PUSH2", + "path": "26", + "value": "0x291" + }, + "652": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [413, 745], + "op": "JUMPI", + "path": "26" + }, + "653": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [413, 745], + "op": "PUSH1", + "path": "26", + "value": "0x0" + }, + "655": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [413, 745], + "op": "DUP1", + "path": "26" + }, + "656": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [413, 745], + "op": "REVERT", + "path": "26" + }, + "657": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [413, 745], + "op": "JUMPDEST", + "path": "26" + }, + "658": { + "op": "POP" + }, + "659": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [413, 745], + "op": "DUP1", + "path": "26" + }, + "660": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [413, 745], + "op": "CALLDATALOAD", + "path": "26" + }, + "661": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [413, 745], + "op": "SWAP1", + "path": "26" + }, + "662": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [413, 745], + "op": "PUSH1", + "path": "26", + "value": "0x20" + }, + "664": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [413, 745], + "op": "ADD", + "path": "26" + }, + "665": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [413, 745], + "op": "CALLDATALOAD", + "path": "26" + }, + "666": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [413, 745], + "op": "PUSH2", + "path": "26", + "value": "0x773" + }, + "669": { + "fn": "StarknetERC20Bridge.deposit", + "jump": "i", + "offset": [413, 745], + "op": "JUMP", + "path": "26" + }, + "670": { + "fn": "StarknetGovernance.starknetCancelNomination", + "offset": [1084, 1164], + "op": "JUMPDEST", + "path": "34" + }, + "671": { + "fn": "StarknetGovernance.starknetCancelNomination", + "offset": [1084, 1164], + "op": "PUSH2", + "path": "34", + "value": "0xFF" + }, + "674": { + "fn": "StarknetGovernance.starknetCancelNomination", + "offset": [1084, 1164], + "op": "PUSH2", + "path": "34", + "value": "0x863" + }, + "677": { + "fn": "StarknetGovernance.starknetCancelNomination", + "jump": "i", + "offset": [1084, 1164], + "op": "JUMP", + "path": "34" + }, + "678": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [751, 936], + "op": "JUMPDEST", + "path": "26" + }, + "679": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [830, 863], + "op": "PUSH2", + "path": "26", + "statement": 0, + "value": "0x2B0" + }, + "682": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [845, 851], + "op": "DUP3", + "path": "26" + }, + "683": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [853, 862], + "op": "DUP3", + "path": "26" + }, + "684": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [830, 844], + "op": "PUSH2", + "path": "26", + "value": "0x86B" + }, + "687": { + "fn": "StarknetERC20Bridge.withdraw", + "jump": "i", + "offset": [830, 863], + "op": "JUMP", + "path": "26" + }, + "688": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [830, 863], + "op": "JUMPDEST", + "path": "26" + }, + "689": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [873, 929], + "op": "PUSH2", + "path": "26", + "statement": 1, + "value": "0x2C2" + }, + "692": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [895, 909], + "op": "PUSH2", + "path": "26", + "value": "0x2BB" + }, + "695": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [895, 907], + "op": "PUSH2", + "path": "26", + "value": "0xA19" + }, + "698": { + "fn": "StarknetERC20Bridge.withdraw", + "jump": "i", + "offset": [895, 909], + "op": "JUMP", + "path": "26" + }, + "699": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [895, 909], + "op": "JUMPDEST", + "path": "26" + }, + "700": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [911, 920], + "op": "DUP3", + "path": "26" + }, + "701": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [922, 928], + "op": "DUP5", + "path": "26" + }, + "702": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [873, 894], + "op": "PUSH2", + "path": "26", + "value": "0xA41" + }, + "705": { + "fn": "StarknetERC20Bridge.withdraw", + "jump": "i", + "offset": [873, 929], + "op": "JUMP", + "path": "26" + }, + "706": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [873, 929], + "op": "JUMPDEST", + "path": "26" + }, + "707": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [751, 936], + "op": "POP", + "path": "26" + }, + "708": { + "fn": "StarknetERC20Bridge.withdraw", + "offset": [751, 936], + "op": "POP", + "path": "26" + }, + "709": { + "fn": "StarknetERC20Bridge.withdraw", + "jump": "o", + "offset": [751, 936], + "op": "JUMP", + "path": "26" + }, + "710": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "JUMPDEST", + "path": "34" + }, + "711": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [690, 694], + "op": "PUSH1", + "path": "34", + "value": "0x0" + }, + "713": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [713, 737], + "op": "PUSH2", + "path": "34", + "statement": 2, + "value": "0x2D1" + }, + "716": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [724, 736], + "op": "DUP3", + "path": "34" + }, + "717": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [713, 723], + "op": "PUSH2", + "path": "34", + "value": "0xC82" + }, + "720": { + "fn": "StarknetGovernance.starknetIsGovernor", + "jump": "i", + "offset": [713, 737], + "op": "JUMP", + "path": "34" + }, + "721": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [713, 737], + "op": "JUMPDEST", + "path": "34" + }, + "722": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [706, 737], + "op": "SWAP3", + "path": "34" + }, + "723": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "SWAP2", + "path": "34" + }, + "724": { + "op": "POP" + }, + "725": { + "op": "POP" + }, + "726": { + "fn": "StarknetGovernance.starknetIsGovernor", + "jump": "o", + "offset": [617, 744], + "op": "JUMP", + "path": "34" + }, + "727": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "JUMPDEST", + "path": "28" + }, + "728": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4429, 4457], + "op": "PUSH2", + "path": "28", + "statement": 3, + "value": "0x2E1" + }, + "731": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4438, 4444], + "op": "DUP2", + "path": "28" + }, + "732": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4446, 4456], + "op": "CALLER", + "path": "28" + }, + "733": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4429, 4437], + "op": "PUSH2", + "path": "28", + "value": "0x2A6" + }, + "736": { + "fn": "StarknetTokenBridge.withdraw", + "jump": "i", + "offset": [4429, 4457], + "op": "JUMP", + "path": "28" + }, + "737": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4429, 4457], + "op": "JUMPDEST", + "path": "28" + }, + "738": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "POP", + "path": "28" + }, + "739": { + "fn": "StarknetTokenBridge.withdraw", + "jump": "o", + "offset": [4376, 4464], + "op": "JUMP", + "path": "28" + }, + "740": { + "fn": "ProxySupport.isFrozen", + "offset": [775, 861], + "op": "JUMPDEST", + "path": "10" + }, + "741": { + "fn": "ProxySupport.isFrozen", + "offset": [826, 830], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "743": { + "fn": "ProxySupport.isFrozen", + "offset": [775, 861], + "op": "SWAP1", + "path": "10" + }, + "744": { + "fn": "ProxySupport.isFrozen", + "jump": "o", + "offset": [775, 861], + "op": "JUMP", + "path": "10" + }, + "745": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "JUMPDEST", + "path": "10" + }, + "746": { + "offset": [1052, 1073], + "op": "PUSH32", + "path": "5", + "value": "0x0" + }, + "779": { + "offset": [1132, 1143], + "op": "DUP1", + "path": "5" + }, + "780": { + "fn": "ProxySupport.initialize", + "offset": [1132, 1143], + "op": "SLOAD", + "path": "5" + }, + "781": { + "fn": "ProxySupport.initialize", + "offset": [1132, 1143], + "op": "SWAP1", + "path": "5" + }, + "782": { + "offset": [1178, 1197], + "op": "DUP2", + "path": "5" + }, + "783": { + "branch": 92, + "fn": "ProxySupport.initialize", + "offset": [1178, 1197], + "op": "ISZERO", + "path": "5" + }, + "784": { + "offset": [1170, 1224], + "op": "PUSH2", + "path": "5", + "value": "0x359" + }, + "787": { + "branch": 92, + "offset": [1170, 1224], + "op": "JUMPI", + "path": "5" + }, + "788": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "PUSH1", + "path": "5", + "value": "0x40" + }, + "790": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "DUP1", + "path": "5" + }, + "791": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "MLOAD", + "path": "5" + }, + "792": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "796": { + "op": "PUSH1", + "value": "0xE5" + }, + "798": { + "op": "SHL" + }, + "799": { + "offset": [1170, 1224], + "op": "DUP2", + "path": "5" + }, + "800": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "MSTORE", + "path": "5" + }, + "801": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "PUSH1", + "path": "5", + "value": "0x20" + }, + "803": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "PUSH1", + "path": "5", + "value": "0x4" + }, + "805": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "DUP3", + "path": "5" + }, + "806": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "ADD", + "path": "5" + }, + "807": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "MSTORE", + "path": "5" + }, + "808": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "PUSH1", + "path": "5", + "value": "0x16" + }, + "810": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "PUSH1", + "path": "5", + "value": "0x24" + }, + "812": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "DUP3", + "path": "5" + }, + "813": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "ADD", + "path": "5" + }, + "814": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "MSTORE", + "path": "5" + }, + "815": { + "op": "PUSH22", + "value": "0x1112549150D517D0D0531317D11254D0531313D5D151" + }, + "838": { + "op": "PUSH1", + "value": "0x52" + }, + "840": { + "op": "SHL" + }, + "841": { + "offset": [1170, 1224], + "op": "PUSH1", + "path": "5", + "value": "0x44" + }, + "843": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "DUP3", + "path": "5" + }, + "844": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "ADD", + "path": "5" + }, + "845": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "MSTORE", + "path": "5" + }, + "846": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "SWAP1", + "path": "5" + }, + "847": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "MLOAD", + "path": "5" + }, + "848": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "SWAP1", + "path": "5" + }, + "849": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "DUP2", + "path": "5" + }, + "850": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "SWAP1", + "path": "5" + }, + "851": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "SUB", + "path": "5" + }, + "852": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "PUSH1", + "path": "5", + "value": "0x64" + }, + "854": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "ADD", + "path": "5" + }, + "855": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "SWAP1", + "path": "5" + }, + "856": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "REVERT", + "path": "5" + }, + "857": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "JUMPDEST", + "path": "5" + }, + "858": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "POP", + "path": "10" + }, + "859": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "POP", + "path": "10" + }, + "860": { + "fn": "ProxySupport.initialize", + "offset": [1561, 1578], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "862": { + "fn": "ProxySupport.initialize", + "offset": [1586, 1605], + "op": "PUSH2", + "path": "10", + "value": "0x365" + }, + "865": { + "fn": "ProxySupport.initialize", + "offset": [1586, 1603], + "op": "PUSH2", + "path": "10", + "value": "0x2E4" + }, + "868": { + "fn": "ProxySupport.initialize", + "jump": "i", + "offset": [1586, 1605], + "op": "JUMP", + "path": "10" + }, + "869": { + "fn": "ProxySupport.initialize", + "offset": [1586, 1605], + "op": "JUMPDEST", + "path": "10" + }, + "870": { + "fn": "ProxySupport.initialize", + "offset": [1581, 1583], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "872": { + "fn": "ProxySupport.initialize", + "offset": [1581, 1605], + "op": "SWAP1", + "path": "10" + }, + "873": { + "fn": "ProxySupport.initialize", + "offset": [1581, 1605], + "op": "DUP2", + "path": "10" + }, + "874": { + "fn": "ProxySupport.initialize", + "offset": [1581, 1605], + "op": "MUL", + "path": "10" + }, + "875": { + "fn": "ProxySupport.initialize", + "offset": [1581, 1605], + "op": "SWAP2", + "path": "10" + }, + "876": { + "op": "POP" + }, + "877": { + "fn": "ProxySupport.initialize", + "offset": [1642, 1656], + "op": "DUP2", + "path": "10" + }, + "878": { + "fn": "ProxySupport.initialize", + "offset": [1642, 1656], + "op": "ADD", + "path": "10" + }, + "879": { + "fn": "ProxySupport.initialize", + "offset": [1674, 1705], + "op": "DUP1", + "path": "10", + "statement": 4 + }, + "880": { + "fn": "ProxySupport.initialize", + "offset": [1674, 1705], + "op": "DUP4", + "path": "10" + }, + "881": { + "fn": "ProxySupport.initialize", + "offset": [1674, 1705], + "op": "LT", + "path": "10" + }, + "882": { + "branch": 102, + "fn": "ProxySupport.initialize", + "offset": [1674, 1705], + "op": "ISZERO", + "path": "10" + }, + "883": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "PUSH2", + "path": "10", + "value": "0x3B9" + }, + "886": { + "branch": 102, + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "JUMPI", + "path": "10" + }, + "887": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "PUSH1", + "path": "10", + "value": "0x40" + }, + "889": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "DUP1", + "path": "10" + }, + "890": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "MLOAD", + "path": "10" + }, + "891": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "895": { + "op": "PUSH1", + "value": "0xE5" + }, + "897": { + "op": "SHL" + }, + "898": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "DUP2", + "path": "10" + }, + "899": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "MSTORE", + "path": "10" + }, + "900": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "902": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "PUSH1", + "path": "10", + "value": "0x4" + }, + "904": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "DUP3", + "path": "10" + }, + "905": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "ADD", + "path": "10" + }, + "906": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "MSTORE", + "path": "10" + }, + "907": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "PUSH1", + "path": "10", + "value": "0x13" + }, + "909": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "PUSH1", + "path": "10", + "value": "0x24" + }, + "911": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "DUP3", + "path": "10" + }, + "912": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "ADD", + "path": "10" + }, + "913": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "MSTORE", + "path": "10" + }, + "914": { + "op": "PUSH19", + "value": "0x1253925517D110551057D513D3D7D4D3505313" + }, + "934": { + "op": "PUSH1", + "value": "0x6A" + }, + "936": { + "op": "SHL" + }, + "937": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "PUSH1", + "path": "10", + "value": "0x44" + }, + "939": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "DUP3", + "path": "10" + }, + "940": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "ADD", + "path": "10" + }, + "941": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "MSTORE", + "path": "10" + }, + "942": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "SWAP1", + "path": "10" + }, + "943": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "MLOAD", + "path": "10" + }, + "944": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "SWAP1", + "path": "10" + }, + "945": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "DUP2", + "path": "10" + }, + "946": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "SWAP1", + "path": "10" + }, + "947": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "SUB", + "path": "10" + }, + "948": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "PUSH1", + "path": "10", + "value": "0x64" + }, + "950": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "ADD", + "path": "10" + }, + "951": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "SWAP1", + "path": "10" + }, + "952": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "REVERT", + "path": "10" + }, + "953": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "JUMPDEST", + "path": "10" + }, + "954": { + "fn": "ProxySupport.initialize", + "offset": [1739, 1757], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "956": { + "fn": "ProxySupport.initialize", + "offset": [1771, 1803], + "op": "PUSH2", + "path": "10", + "value": "0x3C7" + }, + "959": { + "fn": "ProxySupport.initialize", + "offset": [1786, 1802], + "op": "DUP3", + "path": "10" + }, + "960": { + "fn": "ProxySupport.initialize", + "offset": [1776, 1785], + "op": "DUP5", + "path": "10" + }, + "961": { + "fn": "ProxySupport.initialize", + "offset": [1771, 1775], + "op": "DUP7", + "path": "10" + }, + "962": { + "fn": "ProxySupport.initialize", + "offset": [1771, 1775], + "op": "DUP9", + "path": "10" + }, + "963": { + "fn": "ProxySupport.initialize", + "offset": [1771, 1803], + "op": "PUSH2", + "path": "10", + "value": "0x1E6A" + }, + "966": { + "fn": "ProxySupport.initialize", + "jump": "i", + "offset": [1771, 1803], + "op": "JUMP", + "path": "10" + }, + "967": { + "fn": "ProxySupport.initialize", + "offset": [1771, 1803], + "op": "JUMPDEST", + "path": "10" + }, + "968": { + "fn": "ProxySupport.initialize", + "offset": [1760, 1815], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "970": { + "fn": "ProxySupport.initialize", + "offset": [1760, 1815], + "op": "DUP2", + "path": "10" + }, + "971": { + "fn": "ProxySupport.initialize", + "offset": [1760, 1815], + "op": "LT", + "path": "10" + }, + "972": { + "fn": "ProxySupport.initialize", + "offset": [1760, 1815], + "op": "ISZERO", + "path": "10" + }, + "973": { + "fn": "ProxySupport.initialize", + "offset": [1760, 1815], + "op": "PUSH2", + "path": "10", + "value": "0x3D5" + }, + "976": { + "fn": "ProxySupport.initialize", + "offset": [1760, 1815], + "op": "JUMPI", + "path": "10" + }, + "977": { + "fn": "ProxySupport.initialize", + "offset": [1760, 1815], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "979": { + "fn": "ProxySupport.initialize", + "offset": [1760, 1815], + "op": "DUP1", + "path": "10" + }, + "980": { + "fn": "ProxySupport.initialize", + "offset": [1760, 1815], + "op": "REVERT", + "path": "10" + }, + "981": { + "fn": "ProxySupport.initialize", + "offset": [1760, 1815], + "op": "JUMPDEST", + "path": "10" + }, + "982": { + "op": "POP" + }, + "983": { + "fn": "ProxySupport.initialize", + "offset": [1760, 1815], + "op": "CALLDATALOAD", + "path": "10" + }, + "984": { + "op": "PUSH1", + "value": "0x1" + }, + "986": { + "op": "PUSH1", + "value": "0x1" + }, + "988": { + "op": "PUSH1", + "value": "0xA0" + }, + "990": { + "op": "SHL" + }, + "991": { + "op": "SUB" + }, + "992": { + "fn": "ProxySupport.initialize", + "offset": [1760, 1815], + "op": "AND", + "path": "10" + }, + "993": { + "fn": "ProxySupport.initialize", + "offset": [1760, 1815], + "op": "SWAP1", + "path": "10" + }, + "994": { + "op": "POP" + }, + "995": { + "fn": "ProxySupport.initialize", + "offset": [1826, 1861], + "op": "CALLDATASIZE", + "path": "10" + }, + "996": { + "fn": "ProxySupport.initialize", + "offset": [1826, 1861], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "998": { + "fn": "ProxySupport.initialize", + "offset": [1864, 1880], + "op": "PUSH2", + "path": "10", + "value": "0x3F1" + }, + "1001": { + "fn": "ProxySupport.initialize", + "offset": [1870, 1879], + "op": "DUP6", + "path": "10" + }, + "1002": { + "fn": "ProxySupport.initialize", + "offset": [1826, 1861], + "op": "DUP3", + "path": "10" + }, + "1003": { + "fn": "ProxySupport.initialize", + "offset": [1864, 1868], + "op": "DUP9", + "path": "10" + }, + "1004": { + "fn": "ProxySupport.initialize", + "offset": [1864, 1868], + "op": "DUP11", + "path": "10" + }, + "1005": { + "fn": "ProxySupport.initialize", + "offset": [1864, 1880], + "op": "PUSH2", + "path": "10", + "value": "0x1E6A" + }, + "1008": { + "fn": "ProxySupport.initialize", + "jump": "i", + "offset": [1864, 1880], + "op": "JUMP", + "path": "10" + }, + "1009": { + "fn": "ProxySupport.initialize", + "offset": [1864, 1880], + "op": "JUMPDEST", + "path": "10" + }, + "1010": { + "fn": "ProxySupport.initialize", + "offset": [1826, 1880], + "op": "SWAP2", + "path": "10" + }, + "1011": { + "fn": "ProxySupport.initialize", + "offset": [1826, 1880], + "op": "POP", + "path": "10" + }, + "1012": { + "fn": "ProxySupport.initialize", + "offset": [1826, 1880], + "op": "SWAP2", + "path": "10" + }, + "1013": { + "fn": "ProxySupport.initialize", + "offset": [1826, 1880], + "op": "POP", + "path": "10" + }, + "1014": { + "fn": "ProxySupport.initialize", + "offset": [1891, 1940], + "op": "PUSH2", + "path": "10", + "statement": 5, + "value": "0x3FF" + }, + "1017": { + "fn": "ProxySupport.initialize", + "offset": [1919, 1939], + "op": "DUP3", + "path": "10" + }, + "1018": { + "fn": "ProxySupport.initialize", + "offset": [1919, 1939], + "op": "DUP3", + "path": "10" + }, + "1019": { + "fn": "ProxySupport.initialize", + "offset": [1891, 1918], + "op": "PUSH2", + "path": "10", + "value": "0x2C2" + }, + "1022": { + "fn": "ProxySupport.initialize", + "jump": "i", + "offset": [1891, 1940], + "op": "JUMP", + "path": "10" + }, + "1023": { + "fn": "ProxySupport.initialize", + "offset": [1891, 1940], + "op": "JUMPDEST", + "path": "10" + }, + "1024": { + "fn": "ProxySupport.initialize", + "offset": [1951, 1974], + "op": "CALLDATASIZE", + "path": "10" + }, + "1025": { + "fn": "ProxySupport.initialize", + "offset": [1951, 1974], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "1027": { + "fn": "ProxySupport.initialize", + "offset": [1977, 2000], + "op": "PUSH2", + "path": "10", + "value": "0x40E" + }, + "1030": { + "fn": "ProxySupport.initialize", + "offset": [1977, 1981], + "op": "DUP9", + "path": "10" + }, + "1031": { + "fn": "ProxySupport.initialize", + "offset": [1982, 1998], + "op": "DUP8", + "path": "10" + }, + "1032": { + "fn": "ProxySupport.initialize", + "offset": [1977, 1981], + "op": "DUP2", + "path": "10" + }, + "1033": { + "fn": "ProxySupport.initialize", + "offset": [1977, 1981], + "op": "DUP13", + "path": "10" + }, + "1034": { + "fn": "ProxySupport.initialize", + "offset": [1977, 2000], + "op": "PUSH2", + "path": "10", + "value": "0x1E6A" + }, + "1037": { + "fn": "ProxySupport.initialize", + "jump": "i", + "offset": [1977, 2000], + "op": "JUMP", + "path": "10" + }, + "1038": { + "fn": "ProxySupport.initialize", + "offset": [1977, 2000], + "op": "JUMPDEST", + "path": "10" + }, + "1039": { + "fn": "ProxySupport.initialize", + "offset": [1951, 2000], + "op": "SWAP1", + "path": "10" + }, + "1040": { + "fn": "ProxySupport.initialize", + "offset": [1951, 2000], + "op": "SWAP3", + "path": "10" + }, + "1041": { + "op": "POP" + }, + "1042": { + "fn": "ProxySupport.initialize", + "offset": [1951, 2000], + "op": "SWAP1", + "path": "10" + }, + "1043": { + "op": "POP" + }, + "1044": { + "op": "PUSH1", + "value": "0x1" + }, + "1046": { + "op": "PUSH1", + "value": "0x1" + }, + "1048": { + "op": "PUSH1", + "value": "0xA0" + }, + "1050": { + "op": "SHL" + }, + "1051": { + "op": "SUB" + }, + "1052": { + "fn": "ProxySupport.initialize", + "offset": [2095, 2121], + "op": "DUP6", + "path": "10" + }, + "1053": { + "fn": "ProxySupport.initialize", + "offset": [2095, 2121], + "op": "AND", + "path": "10" + }, + "1054": { + "branch": 103, + "fn": "ProxySupport.initialize", + "offset": [2095, 2121], + "op": "ISZERO", + "path": "10" + }, + "1055": { + "fn": "ProxySupport.initialize", + "offset": [2091, 2213], + "op": "PUSH2", + "path": "10", + "value": "0x439" + }, + "1058": { + "branch": 103, + "fn": "ProxySupport.initialize", + "offset": [2091, 2213], + "op": "JUMPI", + "path": "10" + }, + "1059": { + "fn": "ProxySupport.initialize", + "offset": [2137, 2182], + "op": "PUSH2", + "path": "10", + "statement": 6, + "value": "0x42D" + }, + "1062": { + "fn": "ProxySupport.initialize", + "offset": [2161, 2171], + "op": "DUP6", + "path": "10" + }, + "1063": { + "fn": "ProxySupport.initialize", + "offset": [2173, 2181], + "op": "DUP4", + "path": "10" + }, + "1064": { + "fn": "ProxySupport.initialize", + "offset": [2173, 2181], + "op": "DUP4", + "path": "10" + }, + "1065": { + "fn": "ProxySupport.initialize", + "offset": [2137, 2160], + "op": "PUSH2", + "path": "10", + "value": "0xCB1" + }, + "1068": { + "fn": "ProxySupport.initialize", + "jump": "i", + "offset": [2137, 2182], + "op": "JUMP", + "path": "10" + }, + "1069": { + "fn": "ProxySupport.initialize", + "offset": [2137, 2182], + "op": "JUMPDEST", + "path": "10" + }, + "1070": { + "fn": "ProxySupport.initialize", + "offset": [2196, 2203], + "op": "POP", + "path": "10", + "statement": 7 + }, + "1071": { + "fn": "ProxySupport.initialize", + "offset": [2196, 2203], + "op": "POP", + "path": "10" + }, + "1072": { + "fn": "ProxySupport.initialize", + "offset": [2196, 2203], + "op": "POP", + "path": "10" + }, + "1073": { + "fn": "ProxySupport.initialize", + "offset": [2196, 2203], + "op": "POP", + "path": "10" + }, + "1074": { + "fn": "ProxySupport.initialize", + "offset": [2196, 2203], + "op": "POP", + "path": "10" + }, + "1075": { + "fn": "ProxySupport.initialize", + "offset": [2196, 2203], + "op": "POP", + "path": "10" + }, + "1076": { + "fn": "ProxySupport.initialize", + "offset": [2196, 2203], + "op": "POP", + "path": "10" + }, + "1077": { + "fn": "ProxySupport.initialize", + "offset": [2196, 2203], + "op": "PUSH2", + "path": "10", + "value": "0x2C2" + }, + "1080": { + "fn": "ProxySupport.initialize", + "offset": [2196, 2203], + "op": "JUMP", + "path": "10" + }, + "1081": { + "fn": "ProxySupport.initialize", + "offset": [2091, 2213], + "op": "JUMPDEST", + "path": "10" + }, + "1082": { + "fn": "ProxySupport.initialize", + "offset": [2227, 2242], + "op": "PUSH2", + "path": "10", + "value": "0x441" + }, + "1085": { + "fn": "ProxySupport.initialize", + "offset": [2227, 2240], + "op": "PUSH2", + "path": "10", + "value": "0xF08" + }, + "1088": { + "fn": "ProxySupport.initialize", + "jump": "i", + "offset": [2227, 2242], + "op": "JUMP", + "path": "10" + }, + "1089": { + "branch": 104, + "fn": "ProxySupport.initialize", + "offset": [2227, 2242], + "op": "JUMPDEST", + "path": "10" + }, + "1090": { + "fn": "ProxySupport.initialize", + "offset": [2223, 2505], + "op": "ISZERO", + "path": "10" + }, + "1091": { + "fn": "ProxySupport.initialize", + "offset": [2223, 2505], + "op": "PUSH2", + "path": "10", + "value": "0x495" + }, + "1094": { + "branch": 104, + "fn": "ProxySupport.initialize", + "offset": [2223, 2505], + "op": "JUMPI", + "path": "10" + }, + "1095": { + "fn": "ProxySupport.initialize", + "offset": [2266, 2286], + "op": "DUP1", + "path": "10", + "statement": 8 + }, + "1096": { + "branch": 105, + "fn": "ProxySupport.initialize", + "offset": [2266, 2286], + "op": "ISZERO", + "path": "10" + }, + "1097": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "PUSH2", + "path": "10", + "value": "0x490" + }, + "1100": { + "branch": 105, + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "JUMPI", + "path": "10" + }, + "1101": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "PUSH1", + "path": "10", + "value": "0x40" + }, + "1103": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "DUP1", + "path": "10" + }, + "1104": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "MLOAD", + "path": "10" + }, + "1105": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "1109": { + "op": "PUSH1", + "value": "0xE5" + }, + "1111": { + "op": "SHL" + }, + "1112": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "DUP2", + "path": "10" + }, + "1113": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "MSTORE", + "path": "10" + }, + "1114": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "1116": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "PUSH1", + "path": "10", + "value": "0x4" + }, + "1118": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "DUP3", + "path": "10" + }, + "1119": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "ADD", + "path": "10" + }, + "1120": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "MSTORE", + "path": "10" + }, + "1121": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "PUSH1", + "path": "10", + "value": "0x14" + }, + "1123": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "PUSH1", + "path": "10", + "value": "0x24" + }, + "1125": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "DUP3", + "path": "10" + }, + "1126": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "ADD", + "path": "10" + }, + "1127": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "MSTORE", + "path": "10" + }, + "1128": { + "op": "PUSH20", + "value": "0x554E45585045435445445F494E49545F44415441" + }, + "1149": { + "op": "PUSH1", + "value": "0x60" + }, + "1151": { + "op": "SHL" + }, + "1152": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "PUSH1", + "path": "10", + "value": "0x44" + }, + "1154": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "DUP3", + "path": "10" + }, + "1155": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "ADD", + "path": "10" + }, + "1156": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "MSTORE", + "path": "10" + }, + "1157": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "SWAP1", + "path": "10" + }, + "1158": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "MLOAD", + "path": "10" + }, + "1159": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "SWAP1", + "path": "10" + }, + "1160": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "DUP2", + "path": "10" + }, + "1161": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "SWAP1", + "path": "10" + }, + "1162": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "SUB", + "path": "10" + }, + "1163": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "PUSH1", + "path": "10", + "value": "0x64" + }, + "1165": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "ADD", + "path": "10" + }, + "1166": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "SWAP1", + "path": "10" + }, + "1167": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "REVERT", + "path": "10" + }, + "1168": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "JUMPDEST", + "path": "10" + }, + "1169": { + "fn": "ProxySupport.initialize", + "offset": [2223, 2505], + "op": "PUSH2", + "path": "10", + "value": "0x4B1" + }, + "1172": { + "fn": "ProxySupport.initialize", + "offset": [2223, 2505], + "op": "JUMP", + "path": "10" + }, + "1173": { + "fn": "ProxySupport.initialize", + "offset": [2223, 2505], + "op": "JUMPDEST", + "path": "10" + }, + "1174": { + "fn": "ProxySupport.initialize", + "offset": [2391, 2417], + "op": "PUSH2", + "path": "10", + "statement": 9, + "value": "0x49F" + }, + "1177": { + "fn": "ProxySupport.initialize", + "offset": [2408, 2416], + "op": "DUP3", + "path": "10" + }, + "1178": { + "fn": "ProxySupport.initialize", + "offset": [2408, 2416], + "op": "DUP3", + "path": "10" + }, + "1179": { + "fn": "ProxySupport.initialize", + "offset": [2391, 2407], + "op": "PUSH2", + "path": "10", + "value": "0xF23" + }, + "1182": { + "fn": "ProxySupport.initialize", + "jump": "i", + "offset": [2391, 2417], + "op": "JUMP", + "path": "10" + }, + "1183": { + "fn": "ProxySupport.initialize", + "offset": [2391, 2417], + "op": "JUMPDEST", + "path": "10" + }, + "1184": { + "fn": "ProxySupport.initialize", + "offset": [2431, 2464], + "op": "PUSH2", + "path": "10", + "statement": 10, + "value": "0x4A9" + }, + "1187": { + "fn": "ProxySupport.initialize", + "offset": [2455, 2463], + "op": "DUP3", + "path": "10" + }, + "1188": { + "fn": "ProxySupport.initialize", + "offset": [2455, 2463], + "op": "DUP3", + "path": "10" + }, + "1189": { + "fn": "ProxySupport.initialize", + "offset": [2431, 2454], + "op": "PUSH2", + "path": "10", + "value": "0xF6C" + }, + "1192": { + "fn": "ProxySupport.initialize", + "jump": "i", + "offset": [2431, 2464], + "op": "JUMP", + "path": "10" + }, + "1193": { + "fn": "ProxySupport.initialize", + "offset": [2431, 2464], + "op": "JUMPDEST", + "path": "10" + }, + "1194": { + "fn": "ProxySupport.initialize", + "offset": [2478, 2494], + "op": "PUSH2", + "path": "10", + "statement": 11, + "value": "0x4B1" + }, + "1197": { + "fn": "ProxySupport.initialize", + "offset": [2478, 2492], + "op": "PUSH2", + "path": "10", + "value": "0xFAF" + }, + "1200": { + "fn": "ProxySupport.initialize", + "jump": "i", + "offset": [2478, 2494], + "op": "JUMP", + "path": "10" + }, + "1201": { + "fn": "ProxySupport.initialize", + "offset": [2478, 2494], + "op": "JUMPDEST", + "path": "10" + }, + "1202": { + "offset": [1244, 1245], + "op": "POP", + "path": "5" + }, + "1203": { + "fn": "ProxySupport.initialize", + "offset": [1244, 1245], + "op": "POP", + "path": "5" + }, + "1204": { + "fn": "ProxySupport.initialize", + "offset": [1244, 1245], + "op": "POP", + "path": "5" + }, + "1205": { + "fn": "ProxySupport.initialize", + "offset": [1244, 1245], + "op": "POP", + "path": "5" + }, + "1206": { + "fn": "ProxySupport.initialize", + "offset": [1244, 1245], + "op": "POP", + "path": "5" + }, + "1207": { + "fn": "ProxySupport.initialize", + "offset": [1244, 1245], + "op": "POP", + "path": "5" + }, + "1208": { + "fn": "ProxySupport.initialize", + "offset": [1244, 1245], + "op": "POP", + "path": "5" + }, + "1209": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "POP", + "path": "10" + }, + "1210": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "POP", + "path": "10" + }, + "1211": { + "fn": "ProxySupport.initialize", + "jump": "o", + "offset": [1483, 2511], + "op": "JUMP", + "path": "10" + }, + "1212": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "JUMPDEST", + "path": "34" + }, + "1213": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [951, 985], + "op": "PUSH2", + "path": "34", + "statement": 12, + "value": "0x2E1" + }, + "1216": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [966, 984], + "op": "DUP2", + "path": "34" + }, + "1217": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [951, 965], + "op": "PUSH2", + "path": "34", + "value": "0x1031" + }, + "1220": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "jump": "i", + "offset": [951, 985], + "op": "JUMP", + "path": "34" + }, + "1221": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "JUMPDEST", + "path": "28" + }, + "1222": { + "offset": [434, 456], + "op": "PUSH2", + "path": "8", + "value": "0x4CE" + }, + "1225": { + "offset": [445, 455], + "op": "CALLER", + "path": "8" + }, + "1226": { + "offset": [434, 444], + "op": "PUSH2", + "path": "8", + "value": "0xC82" + }, + "1229": { + "jump": "i", + "offset": [434, 456], + "op": "JUMP", + "path": "8" + }, + "1230": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [434, 456], + "op": "JUMPDEST", + "path": "8" + }, + "1231": { + "offset": [426, 476], + "op": "PUSH2", + "path": "8", + "value": "0x511" + }, + "1234": { + "offset": [426, 476], + "op": "JUMPI", + "path": "8" + }, + "1235": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x40" + }, + "1237": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "DUP1", + "path": "8" + }, + "1238": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "MLOAD", + "path": "8" + }, + "1239": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "1243": { + "op": "PUSH1", + "value": "0xE5" + }, + "1245": { + "op": "SHL" + }, + "1246": { + "offset": [426, 476], + "op": "DUP2", + "path": "8" + }, + "1247": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "1248": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x20" + }, + "1250": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x4" + }, + "1252": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "1253": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "1254": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "1255": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0xF" + }, + "1257": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x24" + }, + "1259": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "1260": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "1261": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "1262": { + "op": "PUSH15", + "value": "0x4F4E4C595F474F5645524E414E4345" + }, + "1278": { + "op": "PUSH1", + "value": "0x88" + }, + "1280": { + "op": "SHL" + }, + "1281": { + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x44" + }, + "1283": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "1284": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "1285": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "1286": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "1287": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "MLOAD", + "path": "8" + }, + "1288": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "1289": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "DUP2", + "path": "8" + }, + "1290": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "1291": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "SUB", + "path": "8" + }, + "1292": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x64" + }, + "1294": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "1295": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "1296": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "REVERT", + "path": "8" + }, + "1297": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "JUMPDEST", + "path": "8" + }, + "1298": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "PUSH1", + "path": "28", + "statement": 13, + "value": "0x40" + }, + "1300": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "DUP1", + "path": "28" + }, + "1301": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "MLOAD", + "path": "28" + }, + "1302": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "DUP3", + "path": "28" + }, + "1303": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "DUP2", + "path": "28" + }, + "1304": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "MSTORE", + "path": "28" + }, + "1305": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "SWAP1", + "path": "28" + }, + "1306": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "MLOAD", + "path": "28" + }, + "1307": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "PUSH32", + "path": "28", + "value": "0xA9AEC19EC61C04AE0A4A1498AB6CE04CBD68B3D54C47888A45EB2BD37CAF06BC" + }, + "1340": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "SWAP2", + "path": "28" + }, + "1341": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "DUP2", + "path": "28" + }, + "1342": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "SWAP1", + "path": "28" + }, + "1343": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "SUB", + "path": "28" + }, + "1344": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "1346": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "ADD", + "path": "28" + }, + "1347": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "SWAP1", + "path": "28" + }, + "1348": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "LOG1", + "path": "28" + }, + "1349": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3088, 3121], + "op": "PUSH2", + "path": "28", + "statement": 14, + "value": "0x2E1" + }, + "1352": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3104, 3120], + "op": "DUP2", + "path": "28" + }, + "1353": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3088, 3103], + "op": "PUSH2", + "path": "28", + "value": "0x117E" + }, + "1356": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "jump": "i", + "offset": [3088, 3121], + "op": "JUMP", + "path": "28" + }, + "1357": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "JUMPDEST", + "path": "34" + }, + "1358": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [827, 859], + "op": "PUSH2", + "path": "34", + "statement": 15, + "value": "0x2E1" + }, + "1361": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [847, 858], + "op": "DUP2", + "path": "34" + }, + "1362": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [827, 846], + "op": "PUSH2", + "path": "34", + "value": "0x11A0" + }, + "1365": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "jump": "i", + "offset": [827, 859], + "op": "JUMP", + "path": "34" + }, + "1366": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "offset": [998, 1078], + "op": "JUMPDEST", + "path": "34" + }, + "1367": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "offset": [1053, 1071], + "op": "PUSH2", + "path": "34", + "statement": 16, + "value": "0x55E" + }, + "1370": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "offset": [1053, 1069], + "op": "PUSH2", + "path": "34", + "value": "0x129D" + }, + "1373": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "jump": "i", + "offset": [1053, 1071], + "op": "JUMP", + "path": "34" + }, + "1374": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "offset": [1053, 1071], + "op": "JUMPDEST", + "path": "34" + }, + "1375": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "jump": "o", + "offset": [998, 1078], + "op": "JUMP", + "path": "34" + }, + "1376": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "JUMPDEST", + "path": "28" + }, + "1377": { + "offset": [2461, 2478], + "op": "PUSH2", + "path": "28", + "value": "0x568" + }, + "1380": { + "offset": [2461, 2476], + "op": "PUSH2", + "path": "28", + "value": "0x136A" + }, + "1383": { + "jump": "i", + "offset": [2461, 2478], + "op": "JUMP", + "path": "28" + }, + "1384": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2461, 2478], + "op": "JUMPDEST", + "path": "28" + }, + "1385": { + "offset": [2461, 2483], + "op": "ISZERO", + "path": "28" + }, + "1386": { + "offset": [2453, 2517], + "op": "PUSH2", + "path": "28", + "value": "0x5BA" + }, + "1389": { + "offset": [2453, 2517], + "op": "JUMPI", + "path": "28" + }, + "1390": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "1392": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "DUP1", + "path": "28" + }, + "1393": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "MLOAD", + "path": "28" + }, + "1394": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "1398": { + "op": "PUSH1", + "value": "0xE5" + }, + "1400": { + "op": "SHL" + }, + "1401": { + "offset": [2453, 2517], + "op": "DUP2", + "path": "28" + }, + "1402": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "MSTORE", + "path": "28" + }, + "1403": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "1405": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "1407": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "DUP3", + "path": "28" + }, + "1408": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "ADD", + "path": "28" + }, + "1409": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "MSTORE", + "path": "28" + }, + "1410": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "PUSH1", + "path": "28", + "value": "0x1D" + }, + "1412": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "PUSH1", + "path": "28", + "value": "0x24" + }, + "1414": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "DUP3", + "path": "28" + }, + "1415": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "ADD", + "path": "28" + }, + "1416": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "MSTORE", + "path": "28" + }, + "1417": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "PUSH32", + "path": "28", + "value": "0x4C325F544F4B454E5F434F4E54524143545F414C52454144595F534554000000" + }, + "1450": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "PUSH1", + "path": "28", + "value": "0x44" + }, + "1452": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "DUP3", + "path": "28" + }, + "1453": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "ADD", + "path": "28" + }, + "1454": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "MSTORE", + "path": "28" + }, + "1455": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "SWAP1", + "path": "28" + }, + "1456": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "MLOAD", + "path": "28" + }, + "1457": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "SWAP1", + "path": "28" + }, + "1458": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "DUP2", + "path": "28" + }, + "1459": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "SWAP1", + "path": "28" + }, + "1460": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "SUB", + "path": "28" + }, + "1461": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "PUSH1", + "path": "28", + "value": "0x64" + }, + "1463": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "ADD", + "path": "28" + }, + "1464": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "SWAP1", + "path": "28" + }, + "1465": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "REVERT", + "path": "28" + }, + "1466": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "JUMPDEST", + "path": "28" + }, + "1467": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2791, 2807], + "op": "DUP1", + "path": "28" + }, + "1468": { + "offset": [2260, 2274], + "op": "DUP1", + "path": "28" + }, + "1469": { + "offset": [2252, 2302], + "op": "PUSH2", + "path": "28", + "value": "0x607" + }, + "1472": { + "offset": [2252, 2302], + "op": "JUMPI", + "path": "28" + }, + "1473": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "1475": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "DUP1", + "path": "28" + }, + "1476": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "MLOAD", + "path": "28" + }, + "1477": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "1481": { + "op": "PUSH1", + "value": "0xE5" + }, + "1483": { + "op": "SHL" + }, + "1484": { + "offset": [2252, 2302], + "op": "DUP2", + "path": "28" + }, + "1485": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "MSTORE", + "path": "28" + }, + "1486": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "1488": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "1490": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "DUP3", + "path": "28" + }, + "1491": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "ADD", + "path": "28" + }, + "1492": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "MSTORE", + "path": "28" + }, + "1493": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "PUSH1", + "path": "28", + "value": "0x17" + }, + "1495": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "PUSH1", + "path": "28", + "value": "0x24" + }, + "1497": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "DUP3", + "path": "28" + }, + "1498": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "ADD", + "path": "28" + }, + "1499": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "MSTORE", + "path": "28" + }, + "1500": { + "op": "PUSH23", + "value": "0x4C325F414444524553535F4F55545F4F465F52414E4745" + }, + "1524": { + "op": "PUSH1", + "value": "0x48" + }, + "1526": { + "op": "SHL" + }, + "1527": { + "offset": [2252, 2302], + "op": "PUSH1", + "path": "28", + "value": "0x44" + }, + "1529": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "DUP3", + "path": "28" + }, + "1530": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "ADD", + "path": "28" + }, + "1531": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "MSTORE", + "path": "28" + }, + "1532": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "SWAP1", + "path": "28" + }, + "1533": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "MLOAD", + "path": "28" + }, + "1534": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "SWAP1", + "path": "28" + }, + "1535": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "DUP2", + "path": "28" + }, + "1536": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "SWAP1", + "path": "28" + }, + "1537": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "SUB", + "path": "28" + }, + "1538": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "PUSH1", + "path": "28", + "value": "0x64" + }, + "1540": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "ADD", + "path": "28" + }, + "1541": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "SWAP1", + "path": "28" + }, + "1542": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "REVERT", + "path": "28" + }, + "1543": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "JUMPDEST", + "path": "28" + }, + "1544": { + "op": "PUSH1", + "value": "0x1" + }, + "1546": { + "op": "PUSH8", + "value": "0x800000000000011" + }, + "1555": { + "op": "PUSH1", + "value": "0xC0" + }, + "1557": { + "op": "SHL" + }, + "1558": { + "op": "ADD" + }, + "1559": { + "offset": [2320, 2329], + "op": "DUP2", + "path": "28" + }, + "1560": { + "offset": [2320, 2358], + "op": "LT", + "path": "28" + }, + "1561": { + "offset": [2312, 2386], + "op": "PUSH2", + "path": "28", + "value": "0x663" + }, + "1564": { + "offset": [2312, 2386], + "op": "JUMPI", + "path": "28" + }, + "1565": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "1567": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "DUP1", + "path": "28" + }, + "1568": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "MLOAD", + "path": "28" + }, + "1569": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "1573": { + "op": "PUSH1", + "value": "0xE5" + }, + "1575": { + "op": "SHL" + }, + "1576": { + "offset": [2312, 2386], + "op": "DUP2", + "path": "28" + }, + "1577": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "MSTORE", + "path": "28" + }, + "1578": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "1580": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "1582": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "DUP3", + "path": "28" + }, + "1583": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "ADD", + "path": "28" + }, + "1584": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "MSTORE", + "path": "28" + }, + "1585": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "PUSH1", + "path": "28", + "value": "0x17" + }, + "1587": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "PUSH1", + "path": "28", + "value": "0x24" + }, + "1589": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "DUP3", + "path": "28" + }, + "1590": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "ADD", + "path": "28" + }, + "1591": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "MSTORE", + "path": "28" + }, + "1592": { + "op": "PUSH23", + "value": "0x4C325F414444524553535F4F55545F4F465F52414E4745" + }, + "1616": { + "op": "PUSH1", + "value": "0x48" + }, + "1618": { + "op": "SHL" + }, + "1619": { + "offset": [2312, 2386], + "op": "PUSH1", + "path": "28", + "value": "0x44" + }, + "1621": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "DUP3", + "path": "28" + }, + "1622": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "ADD", + "path": "28" + }, + "1623": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "MSTORE", + "path": "28" + }, + "1624": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "SWAP1", + "path": "28" + }, + "1625": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "MLOAD", + "path": "28" + }, + "1626": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "SWAP1", + "path": "28" + }, + "1627": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "DUP2", + "path": "28" + }, + "1628": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "SWAP1", + "path": "28" + }, + "1629": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "SUB", + "path": "28" + }, + "1630": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "PUSH1", + "path": "28", + "value": "0x64" + }, + "1632": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "ADD", + "path": "28" + }, + "1633": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "SWAP1", + "path": "28" + }, + "1634": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "REVERT", + "path": "28" + }, + "1635": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "JUMPDEST", + "path": "28" + }, + "1636": { + "offset": [434, 456], + "op": "PUSH2", + "path": "8", + "value": "0x66C" + }, + "1639": { + "offset": [445, 455], + "op": "CALLER", + "path": "8" + }, + "1640": { + "offset": [434, 444], + "op": "PUSH2", + "path": "8", + "value": "0xC82" + }, + "1643": { + "jump": "i", + "offset": [434, 456], + "op": "JUMP", + "path": "8" + }, + "1644": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [434, 456], + "op": "JUMPDEST", + "path": "8" + }, + "1645": { + "offset": [426, 476], + "op": "PUSH2", + "path": "8", + "value": "0x6AF" + }, + "1648": { + "offset": [426, 476], + "op": "JUMPI", + "path": "8" + }, + "1649": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x40" + }, + "1651": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "DUP1", + "path": "8" + }, + "1652": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "MLOAD", + "path": "8" + }, + "1653": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "1657": { + "op": "PUSH1", + "value": "0xE5" + }, + "1659": { + "op": "SHL" + }, + "1660": { + "offset": [426, 476], + "op": "DUP2", + "path": "8" + }, + "1661": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "1662": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x20" + }, + "1664": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x4" + }, + "1666": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "1667": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "1668": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "1669": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0xF" + }, + "1671": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x24" + }, + "1673": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "1674": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "1675": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "1676": { + "op": "PUSH15", + "value": "0x4F4E4C595F474F5645524E414E4345" + }, + "1692": { + "op": "PUSH1", + "value": "0x88" + }, + "1694": { + "op": "SHL" + }, + "1695": { + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x44" + }, + "1697": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "1698": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "1699": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "1700": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "1701": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "MLOAD", + "path": "8" + }, + "1702": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "1703": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "DUP2", + "path": "8" + }, + "1704": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "1705": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "SUB", + "path": "8" + }, + "1706": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x64" + }, + "1708": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "1709": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "1710": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "REVERT", + "path": "8" + }, + "1711": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "JUMPDEST", + "path": "8" + }, + "1712": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "PUSH1", + "path": "28", + "statement": 17, + "value": "0x40" + }, + "1714": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "DUP1", + "path": "28" + }, + "1715": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "MLOAD", + "path": "28" + }, + "1716": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "DUP4", + "path": "28" + }, + "1717": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "DUP2", + "path": "28" + }, + "1718": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "MSTORE", + "path": "28" + }, + "1719": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "SWAP1", + "path": "28" + }, + "1720": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "MLOAD", + "path": "28" + }, + "1721": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "PUSH32", + "path": "28", + "value": "0x49774A785AFE45B60857497C0AFF8733F202CA7E75329AD6408073564EFEA6DF" + }, + "1754": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "SWAP2", + "path": "28" + }, + "1755": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "DUP2", + "path": "28" + }, + "1756": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "SWAP1", + "path": "28" + }, + "1757": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "SUB", + "path": "28" + }, + "1758": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "1760": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "ADD", + "path": "28" + }, + "1761": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "SWAP1", + "path": "28" + }, + "1762": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "LOG1", + "path": "28" + }, + "1763": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2900, 2933], + "op": "PUSH2", + "path": "28", + "statement": 18, + "value": "0x2C2" + }, + "1766": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2916, 2932], + "op": "DUP3", + "path": "28" + }, + "1767": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2900, 2915], + "op": "PUSH2", + "path": "28", + "value": "0x138D" + }, + "1770": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "jump": "i", + "offset": [2900, 2933], + "op": "JUMP", + "path": "28" + }, + "1771": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "JUMPDEST", + "path": "28" + }, + "1772": { + "offset": [434, 456], + "op": "PUSH2", + "path": "8", + "value": "0x6F4" + }, + "1775": { + "offset": [445, 455], + "op": "CALLER", + "path": "8" + }, + "1776": { + "offset": [434, 444], + "op": "PUSH2", + "path": "8", + "value": "0xC82" + }, + "1779": { + "jump": "i", + "offset": [434, 456], + "op": "JUMP", + "path": "8" + }, + "1780": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [434, 456], + "op": "JUMPDEST", + "path": "8" + }, + "1781": { + "offset": [426, 476], + "op": "PUSH2", + "path": "8", + "value": "0x737" + }, + "1784": { + "offset": [426, 476], + "op": "JUMPI", + "path": "8" + }, + "1785": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x40" + }, + "1787": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "DUP1", + "path": "8" + }, + "1788": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "MLOAD", + "path": "8" + }, + "1789": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "1793": { + "op": "PUSH1", + "value": "0xE5" + }, + "1795": { + "op": "SHL" + }, + "1796": { + "offset": [426, 476], + "op": "DUP2", + "path": "8" + }, + "1797": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "1798": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x20" + }, + "1800": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x4" + }, + "1802": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "1803": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "1804": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "1805": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0xF" + }, + "1807": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x24" + }, + "1809": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "1810": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "1811": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "1812": { + "op": "PUSH15", + "value": "0x4F4E4C595F474F5645524E414E4345" + }, + "1828": { + "op": "PUSH1", + "value": "0x88" + }, + "1830": { + "op": "SHL" + }, + "1831": { + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x44" + }, + "1833": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "1834": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "1835": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "1836": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "1837": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "MLOAD", + "path": "8" + }, + "1838": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "1839": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "DUP2", + "path": "8" + }, + "1840": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "1841": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "SUB", + "path": "8" + }, + "1842": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x64" + }, + "1844": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "1845": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "1846": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "REVERT", + "path": "8" + }, + "1847": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "JUMPDEST", + "path": "8" + }, + "1848": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "PUSH1", + "path": "28", + "statement": 19, + "value": "0x40" + }, + "1850": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "DUP1", + "path": "28" + }, + "1851": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "MLOAD", + "path": "28" + }, + "1852": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "DUP3", + "path": "28" + }, + "1853": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "DUP2", + "path": "28" + }, + "1854": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "MSTORE", + "path": "28" + }, + "1855": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "SWAP1", + "path": "28" + }, + "1856": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "MLOAD", + "path": "28" + }, + "1857": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "PUSH32", + "path": "28", + "value": "0xAF474B5AFCF11BD99DC9FC7F499E6AB368D650BF7EF23993F0D61BD9AD762651" + }, + "1890": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "SWAP2", + "path": "28" + }, + "1891": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "DUP2", + "path": "28" + }, + "1892": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "SWAP1", + "path": "28" + }, + "1893": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "SUB", + "path": "28" + }, + "1894": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "1896": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "ADD", + "path": "28" + }, + "1897": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "SWAP1", + "path": "28" + }, + "1898": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "LOG1", + "path": "28" + }, + "1899": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3256, 3279], + "op": "PUSH2", + "path": "28", + "statement": 20, + "value": "0x2E1" + }, + "1902": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3267, 3278], + "op": "DUP2", + "path": "28" + }, + "1903": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3256, 3266], + "op": "PUSH2", + "path": "28", + "value": "0x13AF" + }, + "1906": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "jump": "i", + "offset": [3256, 3279], + "op": "JUMP", + "path": "28" + }, + "1907": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [413, 745], + "op": "JUMPDEST", + "path": "26" + }, + "1908": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [567, 584], + "op": "PUSH2", + "path": "26", + "statement": 21, + "value": "0x77B" + }, + "1911": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [567, 582], + "op": "PUSH2", + "path": "26", + "value": "0x13D1" + }, + "1914": { + "fn": "StarknetERC20Bridge.deposit", + "jump": "i", + "offset": [567, 584], + "op": "JUMP", + "path": "26" + }, + "1915": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [567, 584], + "op": "JUMPDEST", + "path": "26" + }, + "1916": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [557, 563], + "op": "DUP3", + "path": "26" + }, + "1917": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [514, 528], + "op": "PUSH2", + "path": "26", + "value": "0x784" + }, + "1920": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [514, 526], + "op": "PUSH2", + "path": "26", + "value": "0xA19" + }, + "1923": { + "fn": "StarknetERC20Bridge.deposit", + "jump": "i", + "offset": [514, 528], + "op": "JUMP", + "path": "26" + }, + "1924": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [514, 528], + "op": "JUMPDEST", + "path": "26" + }, + "1925": { + "op": "PUSH1", + "value": "0x1" + }, + "1927": { + "op": "PUSH1", + "value": "0x1" + }, + "1929": { + "op": "PUSH1", + "value": "0xA0" + }, + "1931": { + "op": "SHL" + }, + "1932": { + "op": "SUB" + }, + "1933": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 539], + "op": "AND", + "path": "26" + }, + "1934": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 539], + "op": "PUSH4", + "path": "26", + "value": "0x70A08231" + }, + "1939": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [548, 552], + "op": "ADDRESS", + "path": "26" + }, + "1940": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "PUSH1", + "path": "26", + "value": "0x40" + }, + "1942": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "MLOAD", + "path": "26" + }, + "1943": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "DUP3", + "path": "26" + }, + "1944": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "PUSH4", + "path": "26", + "value": "0xFFFFFFFF" + }, + "1949": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "AND", + "path": "26" + }, + "1950": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "PUSH1", + "path": "26", + "value": "0xE0" + }, + "1952": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "SHL", + "path": "26" + }, + "1953": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "DUP2", + "path": "26" + }, + "1954": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "MSTORE", + "path": "26" + }, + "1955": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "PUSH1", + "path": "26", + "value": "0x4" + }, + "1957": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "ADD", + "path": "26" + }, + "1958": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "DUP1", + "path": "26" + }, + "1959": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "DUP3", + "path": "26" + }, + "1960": { + "op": "PUSH1", + "value": "0x1" + }, + "1962": { + "op": "PUSH1", + "value": "0x1" + }, + "1964": { + "op": "PUSH1", + "value": "0xA0" + }, + "1966": { + "op": "SHL" + }, + "1967": { + "op": "SUB" + }, + "1968": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "AND", + "path": "26" + }, + "1969": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "DUP2", + "path": "26" + }, + "1970": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "MSTORE", + "path": "26" + }, + "1971": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "PUSH1", + "path": "26", + "value": "0x20" + }, + "1973": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "ADD", + "path": "26" + }, + "1974": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "SWAP2", + "path": "26" + }, + "1975": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "POP", + "path": "26" + }, + "1976": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "POP", + "path": "26" + }, + "1977": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "PUSH1", + "path": "26", + "value": "0x20" + }, + "1979": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "PUSH1", + "path": "26", + "value": "0x40" + }, + "1981": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "MLOAD", + "path": "26" + }, + "1982": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "DUP1", + "path": "26" + }, + "1983": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "DUP4", + "path": "26" + }, + "1984": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "SUB", + "path": "26" + }, + "1985": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "DUP2", + "path": "26" + }, + "1986": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "DUP7", + "path": "26" + }, + "1987": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "DUP1", + "path": "26" + }, + "1988": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "EXTCODESIZE", + "path": "26" + }, + "1989": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "ISZERO", + "path": "26" + }, + "1990": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "DUP1", + "path": "26" + }, + "1991": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "ISZERO", + "path": "26" + }, + "1992": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "PUSH2", + "path": "26", + "value": "0x7D0" + }, + "1995": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "JUMPI", + "path": "26" + }, + "1996": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "PUSH1", + "path": "26", + "value": "0x0" + }, + "1998": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "DUP1", + "path": "26" + }, + "1999": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "REVERT", + "path": "26" + }, + "2000": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "JUMPDEST", + "path": "26" + }, + "2001": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "POP", + "path": "26" + }, + "2002": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "GAS", + "path": "26" + }, + "2003": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "STATICCALL", + "path": "26" + }, + "2004": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "ISZERO", + "path": "26" + }, + "2005": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "DUP1", + "path": "26" + }, + "2006": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "ISZERO", + "path": "26" + }, + "2007": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "PUSH2", + "path": "26", + "value": "0x7E4" + }, + "2010": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "JUMPI", + "path": "26" + }, + "2011": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "RETURNDATASIZE", + "path": "26" + }, + "2012": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "PUSH1", + "path": "26", + "value": "0x0" + }, + "2014": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "DUP1", + "path": "26" + }, + "2015": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "RETURNDATACOPY", + "path": "26" + }, + "2016": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "RETURNDATASIZE", + "path": "26" + }, + "2017": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "PUSH1", + "path": "26", + "value": "0x0" + }, + "2019": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "REVERT", + "path": "26" + }, + "2020": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "JUMPDEST", + "path": "26" + }, + "2021": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "POP", + "path": "26" + }, + "2022": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "POP", + "path": "26" + }, + "2023": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "POP", + "path": "26" + }, + "2024": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "POP", + "path": "26" + }, + "2025": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "PUSH1", + "path": "26", + "value": "0x40" + }, + "2027": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "MLOAD", + "path": "26" + }, + "2028": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "RETURNDATASIZE", + "path": "26" + }, + "2029": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "PUSH1", + "path": "26", + "value": "0x20" + }, + "2031": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "DUP2", + "path": "26" + }, + "2032": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "LT", + "path": "26" + }, + "2033": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "ISZERO", + "path": "26" + }, + "2034": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "PUSH2", + "path": "26", + "value": "0x7FA" + }, + "2037": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "JUMPI", + "path": "26" + }, + "2038": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "PUSH1", + "path": "26", + "value": "0x0" + }, + "2040": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "DUP1", + "path": "26" + }, + "2041": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "REVERT", + "path": "26" + }, + "2042": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "JUMPDEST", + "path": "26" + }, + "2043": { + "op": "POP" + }, + "2044": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 554], + "op": "MLOAD", + "path": "26" + }, + "2045": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 563], + "op": "ADD", + "path": "26" + }, + "2046": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 584], + "op": "GT", + "path": "26" + }, + "2047": { + "branch": 87, + "fn": "StarknetERC20Bridge.deposit", + "offset": [507, 584], + "op": "ISZERO", + "path": "26" + }, + "2048": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "PUSH2", + "path": "26", + "value": "0x847" + }, + "2051": { + "branch": 87, + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "JUMPI", + "path": "26" + }, + "2052": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "PUSH1", + "path": "26", + "value": "0x40" + }, + "2054": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "DUP1", + "path": "26" + }, + "2055": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "MLOAD", + "path": "26" + }, + "2056": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "2060": { + "op": "PUSH1", + "value": "0xE5" + }, + "2062": { + "op": "SHL" + }, + "2063": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "DUP2", + "path": "26" + }, + "2064": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "MSTORE", + "path": "26" + }, + "2065": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "PUSH1", + "path": "26", + "value": "0x20" + }, + "2067": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "PUSH1", + "path": "26", + "value": "0x4" + }, + "2069": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "DUP3", + "path": "26" + }, + "2070": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "ADD", + "path": "26" + }, + "2071": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "MSTORE", + "path": "26" + }, + "2072": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "PUSH1", + "path": "26", + "value": "0x14" + }, + "2074": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "PUSH1", + "path": "26", + "value": "0x24" + }, + "2076": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "DUP3", + "path": "26" + }, + "2077": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "ADD", + "path": "26" + }, + "2078": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "MSTORE", + "path": "26" + }, + "2079": { + "op": "PUSH20", + "value": "0x13505617D09053105390D157D15610D151511151" + }, + "2100": { + "op": "PUSH1", + "value": "0x62" + }, + "2102": { + "op": "SHL" + }, + "2103": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "PUSH1", + "path": "26", + "value": "0x44" + }, + "2105": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "DUP3", + "path": "26" + }, + "2106": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "ADD", + "path": "26" + }, + "2107": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "MSTORE", + "path": "26" + }, + "2108": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "SWAP1", + "path": "26" + }, + "2109": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "MLOAD", + "path": "26" + }, + "2110": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "SWAP1", + "path": "26" + }, + "2111": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "DUP2", + "path": "26" + }, + "2112": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "SWAP1", + "path": "26" + }, + "2113": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "SUB", + "path": "26" + }, + "2114": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "PUSH1", + "path": "26", + "value": "0x64" + }, + "2116": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "ADD", + "path": "26" + }, + "2117": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "SWAP1", + "path": "26" + }, + "2118": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "REVERT", + "path": "26" + }, + "2119": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [486, 630], + "op": "JUMPDEST", + "path": "26" + }, + "2120": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [640, 696], + "op": "PUSH2", + "path": "26", + "statement": 22, + "value": "0x859" + }, + "2123": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [661, 675], + "op": "PUSH2", + "path": "26", + "value": "0x852" + }, + "2126": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [661, 673], + "op": "PUSH2", + "path": "26", + "value": "0xA19" + }, + "2129": { + "fn": "StarknetERC20Bridge.deposit", + "jump": "i", + "offset": [661, 675], + "op": "JUMP", + "path": "26" + }, + "2130": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [661, 675], + "op": "JUMPDEST", + "path": "26" + }, + "2131": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [677, 687], + "op": "CALLER", + "path": "26" + }, + "2132": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [689, 695], + "op": "DUP5", + "path": "26" + }, + "2133": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [640, 660], + "op": "PUSH2", + "path": "26", + "value": "0x13F4" + }, + "2136": { + "fn": "StarknetERC20Bridge.deposit", + "jump": "i", + "offset": [640, 696], + "op": "JUMP", + "path": "26" + }, + "2137": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [640, 696], + "op": "JUMPDEST", + "path": "26" + }, + "2138": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [706, 738], + "op": "PUSH2", + "path": "26", + "statement": 23, + "value": "0x2C2" + }, + "2141": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [718, 724], + "op": "DUP3", + "path": "26" + }, + "2142": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [726, 737], + "op": "DUP3", + "path": "26" + }, + "2143": { + "fn": "StarknetERC20Bridge.deposit", + "offset": [706, 717], + "op": "PUSH2", + "path": "26", + "value": "0x15DD" + }, + "2146": { + "fn": "StarknetERC20Bridge.deposit", + "jump": "i", + "offset": [706, 738], + "op": "JUMP", + "path": "26" + }, + "2147": { + "fn": "StarknetGovernance.starknetCancelNomination", + "offset": [1084, 1164], + "op": "JUMPDEST", + "path": "34" + }, + "2148": { + "fn": "StarknetGovernance.starknetCancelNomination", + "offset": [1139, 1157], + "op": "PUSH2", + "path": "34", + "statement": 24, + "value": "0x55E" + }, + "2151": { + "fn": "StarknetGovernance.starknetCancelNomination", + "offset": [1139, 1155], + "op": "PUSH2", + "path": "34", + "value": "0x18CB" + }, + "2154": { + "fn": "StarknetGovernance.starknetCancelNomination", + "jump": "i", + "offset": [1139, 1157], + "op": "JUMP", + "path": "34" + }, + "2155": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3857, 4296], + "op": "JUMPDEST", + "path": "28" + }, + "2156": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "PUSH1", + "path": "28", + "statement": 25, + "value": "0x40" + }, + "2158": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "DUP1", + "path": "28" + }, + "2159": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "MLOAD", + "path": "28" + }, + "2160": { + "op": "PUSH1", + "value": "0x1" + }, + "2162": { + "op": "PUSH1", + "value": "0x1" + }, + "2164": { + "op": "PUSH1", + "value": "0xA0" + }, + "2166": { + "op": "SHL" + }, + "2167": { + "op": "SUB" + }, + "2168": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "DUP4", + "path": "28" + }, + "2169": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "AND", + "path": "28" + }, + "2170": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "DUP2", + "path": "28" + }, + "2171": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "MSTORE", + "path": "28" + }, + "2172": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2174": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "DUP2", + "path": "28" + }, + "2175": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "ADD", + "path": "28" + }, + "2176": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "DUP5", + "path": "28" + }, + "2177": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "SWAP1", + "path": "28" + }, + "2178": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "MSTORE", + "path": "28" + }, + "2179": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "DUP2", + "path": "28" + }, + "2180": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "MLOAD", + "path": "28" + }, + "2181": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "PUSH32", + "path": "28", + "value": "0xB4214C8C54FC7442F36D3682F59AEBAF09358A4431835B30EFB29D52CF9E1E91" + }, + "2214": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "SWAP3", + "path": "28" + }, + "2215": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "SWAP2", + "path": "28" + }, + "2216": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "DUP2", + "path": "28" + }, + "2217": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "SWAP1", + "path": "28" + }, + "2218": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "SUB", + "path": "28" + }, + "2219": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "SWAP1", + "path": "28" + }, + "2220": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "SWAP2", + "path": "28" + }, + "2221": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "ADD", + "path": "28" + }, + "2222": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "SWAP1", + "path": "28" + }, + "2223": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "LOG1", + "path": "28" + }, + "2224": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "2226": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "DUP1", + "path": "28" + }, + "2227": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "MLOAD", + "path": "28" + }, + "2228": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4024, 4025], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "2230": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "DUP1", + "path": "28" + }, + "2231": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "DUP3", + "path": "28" + }, + "2232": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "MSTORE", + "path": "28" + }, + "2233": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "PUSH1", + "path": "28", + "value": "0xA0" + }, + "2235": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "DUP3", + "path": "28" + }, + "2236": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "ADD", + "path": "28" + }, + "2237": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "SWAP1", + "path": "28" + }, + "2238": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "SWAP3", + "path": "28" + }, + "2239": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "MSTORE", + "path": "28" + }, + "2240": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3983, 4007], + "op": "PUSH1", + "path": "28", + "value": "0x60" + }, + "2242": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3983, 4007], + "op": "SWAP2", + "path": "28" + }, + "2243": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2245": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "DUP3", + "path": "28" + }, + "2246": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "ADD", + "path": "28" + }, + "2247": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "PUSH1", + "path": "28", + "value": "0x80" + }, + "2249": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "DUP1", + "path": "28" + }, + "2250": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "CALLDATASIZE", + "path": "28" + }, + "2251": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "DUP4", + "path": "28" + }, + "2252": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "CALLDATACOPY", + "path": "28" + }, + "2253": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "ADD", + "path": "28" + }, + "2254": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "SWAP1", + "path": "28" + }, + "2255": { + "op": "POP" + }, + "2256": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "POP", + "path": "28" + }, + "2257": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3983, 4026], + "op": "SWAP1", + "path": "28" + }, + "2258": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3983, 4026], + "op": "POP", + "path": "28" + }, + "2259": { + "offset": [2140, 2141], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "2261": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4043], + "op": "DUP2", + "path": "28", + "statement": 26 + }, + "2262": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4044, 4045], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "2264": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4046], + "op": "DUP2", + "path": "28" + }, + "2265": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4046], + "op": "MLOAD", + "path": "28" + }, + "2266": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4046], + "op": "DUP2", + "path": "28" + }, + "2267": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4046], + "op": "LT", + "path": "28" + }, + "2268": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4046], + "op": "PUSH2", + "path": "28", + "value": "0x8E1" + }, + "2271": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4046], + "op": "JUMPI", + "path": "28" + }, + "2272": { + "dev": "Index out of range", + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4046], + "op": "INVALID", + "path": "28" + }, + "2273": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4046], + "op": "JUMPDEST", + "path": "28" + }, + "2274": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4046], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2276": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4046], + "op": "MUL", + "path": "28" + }, + "2277": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4046], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2279": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4046], + "op": "ADD", + "path": "28" + }, + "2280": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4046], + "op": "ADD", + "path": "28" + }, + "2281": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4071], + "op": "DUP2", + "path": "28" + }, + "2282": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4071], + "op": "DUP2", + "path": "28" + }, + "2283": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4071], + "op": "MSTORE", + "path": "28" + }, + "2284": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4071], + "op": "POP", + "path": "28" + }, + "2285": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4071], + "op": "POP", + "path": "28" + }, + "2286": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4102, 4111], + "op": "DUP2", + "path": "28", + "statement": 27 + }, + "2287": { + "op": "PUSH1", + "value": "0x1" + }, + "2289": { + "op": "PUSH1", + "value": "0x1" + }, + "2291": { + "op": "PUSH1", + "value": "0xA0" + }, + "2293": { + "op": "SHL" + }, + "2294": { + "op": "SUB" + }, + "2295": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4094, 4112], + "op": "AND", + "path": "28" + }, + "2296": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4088], + "op": "DUP2", + "path": "28" + }, + "2297": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4089, 4090], + "op": "PUSH1", + "path": "28", + "value": "0x1" + }, + "2299": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "DUP2", + "path": "28" + }, + "2300": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "MLOAD", + "path": "28" + }, + "2301": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "DUP2", + "path": "28" + }, + "2302": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "LT", + "path": "28" + }, + "2303": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "PUSH2", + "path": "28", + "value": "0x904" + }, + "2306": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "JUMPI", + "path": "28" + }, + "2307": { + "dev": "Index out of range", + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "INVALID", + "path": "28" + }, + "2308": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "JUMPDEST", + "path": "28" + }, + "2309": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2311": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "SWAP1", + "path": "28" + }, + "2312": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "DUP2", + "path": "28" + }, + "2313": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "MUL", + "path": "28" + }, + "2314": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "SWAP2", + "path": "28" + }, + "2315": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "SWAP1", + "path": "28" + }, + "2316": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "SWAP2", + "path": "28" + }, + "2317": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "ADD", + "path": "28" + }, + "2318": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "ADD", + "path": "28" + }, + "2319": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4112], + "op": "MSTORE", + "path": "28" + }, + "2320": { + "op": "PUSH1", + "value": "0x1" + }, + "2322": { + "op": "PUSH1", + "value": "0x80" + }, + "2324": { + "op": "SHL" + }, + "2325": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4135, 4141], + "op": "DUP4", + "path": "28", + "statement": 28 + }, + "2326": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4135, 4161], + "op": "MOD", + "path": "28" + }, + "2327": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4129], + "op": "DUP2", + "path": "28" + }, + "2328": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4130, 4131], + "op": "PUSH1", + "path": "28", + "value": "0x2" + }, + "2330": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "DUP2", + "path": "28" + }, + "2331": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "MLOAD", + "path": "28" + }, + "2332": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "DUP2", + "path": "28" + }, + "2333": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "LT", + "path": "28" + }, + "2334": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "PUSH2", + "path": "28", + "value": "0x923" + }, + "2337": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "JUMPI", + "path": "28" + }, + "2338": { + "dev": "Index out of range", + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "INVALID", + "path": "28" + }, + "2339": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "JUMPDEST", + "path": "28" + }, + "2340": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2342": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "SWAP1", + "path": "28" + }, + "2343": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "DUP2", + "path": "28" + }, + "2344": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "MUL", + "path": "28" + }, + "2345": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "SWAP2", + "path": "28" + }, + "2346": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "SWAP1", + "path": "28" + }, + "2347": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "SWAP2", + "path": "28" + }, + "2348": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "ADD", + "path": "28" + }, + "2349": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "ADD", + "path": "28" + }, + "2350": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4161], + "op": "MSTORE", + "path": "28" + }, + "2351": { + "op": "PUSH1", + "value": "0x1" + }, + "2353": { + "op": "PUSH1", + "value": "0x80" + }, + "2355": { + "op": "SHL" + }, + "2356": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4184, 4190], + "op": "DUP4", + "path": "28", + "statement": 29 + }, + "2357": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4184, 4210], + "op": "DIV", + "path": "28" + }, + "2358": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4178], + "op": "DUP2", + "path": "28" + }, + "2359": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4179, 4180], + "op": "PUSH1", + "path": "28", + "value": "0x3" + }, + "2361": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4181], + "op": "DUP2", + "path": "28" + }, + "2362": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4181], + "op": "MLOAD", + "path": "28" + }, + "2363": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4181], + "op": "DUP2", + "path": "28" + }, + "2364": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4181], + "op": "LT", + "path": "28" + }, + "2365": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4181], + "op": "PUSH2", + "path": "28", + "value": "0x942" + }, + "2368": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4181], + "op": "JUMPI", + "path": "28" + }, + "2369": { + "dev": "Index out of range", + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4181], + "op": "INVALID", + "path": "28" + }, + "2370": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4181], + "op": "JUMPDEST", + "path": "28" + }, + "2371": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4181], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2373": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4181], + "op": "MUL", + "path": "28" + }, + "2374": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4181], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2376": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4181], + "op": "ADD", + "path": "28" + }, + "2377": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4181], + "op": "ADD", + "path": "28" + }, + "2378": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4210], + "op": "DUP2", + "path": "28" + }, + "2379": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4210], + "op": "DUP2", + "path": "28" + }, + "2380": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4210], + "op": "MSTORE", + "path": "28" + }, + "2381": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4210], + "op": "POP", + "path": "28" + }, + "2382": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4210], + "op": "POP", + "path": "28" + }, + "2383": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4240], + "op": "PUSH2", + "path": "28", + "statement": 30, + "value": "0x956" + }, + "2386": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4238], + "op": "PUSH2", + "path": "28", + "value": "0x1962" + }, + "2389": { + "fn": "StarknetTokenBridge.consumeMessage", + "jump": "i", + "offset": [4221, 4240], + "op": "JUMP", + "path": "28" + }, + "2390": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4240], + "op": "JUMPDEST", + "path": "28" + }, + "2391": { + "op": "PUSH1", + "value": "0x1" + }, + "2393": { + "op": "PUSH1", + "value": "0x1" + }, + "2395": { + "op": "PUSH1", + "value": "0xA0" + }, + "2397": { + "op": "SHL" + }, + "2398": { + "op": "SUB" + }, + "2399": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4261], + "op": "AND", + "path": "28" + }, + "2400": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4261], + "op": "PUSH4", + "path": "28", + "value": "0x2C9DD5C0" + }, + "2405": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4262, 4279], + "op": "PUSH2", + "path": "28", + "value": "0x96C" + }, + "2408": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4262, 4277], + "op": "PUSH2", + "path": "28", + "value": "0x136A" + }, + "2411": { + "fn": "StarknetTokenBridge.consumeMessage", + "jump": "i", + "offset": [4262, 4279], + "op": "JUMP", + "path": "28" + }, + "2412": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4262, 4279], + "op": "JUMPDEST", + "path": "28" + }, + "2413": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4281, 4288], + "op": "DUP4", + "path": "28" + }, + "2414": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "2416": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "MLOAD", + "path": "28" + }, + "2417": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP4", + "path": "28" + }, + "2418": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH4", + "path": "28", + "value": "0xFFFFFFFF" + }, + "2423": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "AND", + "path": "28" + }, + "2424": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0xE0" + }, + "2426": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "SHL", + "path": "28" + }, + "2427": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP2", + "path": "28" + }, + "2428": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "MSTORE", + "path": "28" + }, + "2429": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "2431": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ADD", + "path": "28" + }, + "2432": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP1", + "path": "28" + }, + "2433": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP4", + "path": "28" + }, + "2434": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP2", + "path": "28" + }, + "2435": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "MSTORE", + "path": "28" + }, + "2436": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2438": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ADD", + "path": "28" + }, + "2439": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP1", + "path": "28" + }, + "2440": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2442": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ADD", + "path": "28" + }, + "2443": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP3", + "path": "28" + }, + "2444": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP2", + "path": "28" + }, + "2445": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "SUB", + "path": "28" + }, + "2446": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP3", + "path": "28" + }, + "2447": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "MSTORE", + "path": "28" + }, + "2448": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP4", + "path": "28" + }, + "2449": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP2", + "path": "28" + }, + "2450": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP2", + "path": "28" + }, + "2451": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "MLOAD", + "path": "28" + }, + "2452": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP2", + "path": "28" + }, + "2453": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "MSTORE", + "path": "28" + }, + "2454": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2456": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ADD", + "path": "28" + }, + "2457": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "SWAP2", + "path": "28" + }, + "2458": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2459": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP1", + "path": "28" + }, + "2460": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "MLOAD", + "path": "28" + }, + "2461": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "SWAP1", + "path": "28" + }, + "2462": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2464": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ADD", + "path": "28" + }, + "2465": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "SWAP1", + "path": "28" + }, + "2466": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2468": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "MUL", + "path": "28" + }, + "2469": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP1", + "path": "28" + }, + "2470": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP4", + "path": "28" + }, + "2471": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP4", + "path": "28" + }, + "2472": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "2474": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "JUMPDEST", + "path": "28" + }, + "2475": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP4", + "path": "28" + }, + "2476": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP2", + "path": "28" + }, + "2477": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "LT", + "path": "28" + }, + "2478": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ISZERO", + "path": "28" + }, + "2479": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH2", + "path": "28", + "value": "0x9C2" + }, + "2482": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "JUMPI", + "path": "28" + }, + "2483": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP2", + "path": "28" + }, + "2484": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP2", + "path": "28" + }, + "2485": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ADD", + "path": "28" + }, + "2486": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "MLOAD", + "path": "28" + }, + "2487": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP4", + "path": "28" + }, + "2488": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP3", + "path": "28" + }, + "2489": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ADD", + "path": "28" + }, + "2490": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "MSTORE", + "path": "28" + }, + "2491": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2493": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ADD", + "path": "28" + }, + "2494": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH2", + "path": "28", + "value": "0x9AA" + }, + "2497": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "JUMP", + "path": "28" + }, + "2498": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "JUMPDEST", + "path": "28" + }, + "2499": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2500": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2501": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2502": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2503": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "SWAP1", + "path": "28" + }, + "2504": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2505": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ADD", + "path": "28" + }, + "2506": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "SWAP4", + "path": "28" + }, + "2507": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2508": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2509": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2510": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2511": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2513": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "2515": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "MLOAD", + "path": "28" + }, + "2516": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP1", + "path": "28" + }, + "2517": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP4", + "path": "28" + }, + "2518": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "SUB", + "path": "28" + }, + "2519": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP2", + "path": "28" + }, + "2520": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "2522": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP8", + "path": "28" + }, + "2523": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP1", + "path": "28" + }, + "2524": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "EXTCODESIZE", + "path": "28" + }, + "2525": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ISZERO", + "path": "28" + }, + "2526": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP1", + "path": "28" + }, + "2527": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ISZERO", + "path": "28" + }, + "2528": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH2", + "path": "28", + "value": "0x9E8" + }, + "2531": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "JUMPI", + "path": "28" + }, + "2532": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "2534": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP1", + "path": "28" + }, + "2535": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "REVERT", + "path": "28" + }, + "2536": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "JUMPDEST", + "path": "28" + }, + "2537": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2538": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "GAS", + "path": "28" + }, + "2539": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "CALL", + "path": "28" + }, + "2540": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ISZERO", + "path": "28" + }, + "2541": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP1", + "path": "28" + }, + "2542": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ISZERO", + "path": "28" + }, + "2543": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH2", + "path": "28", + "value": "0x9FC" + }, + "2546": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "JUMPI", + "path": "28" + }, + "2547": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "RETURNDATASIZE", + "path": "28" + }, + "2548": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "2550": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP1", + "path": "28" + }, + "2551": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "RETURNDATACOPY", + "path": "28" + }, + "2552": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "RETURNDATASIZE", + "path": "28" + }, + "2553": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "2555": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "REVERT", + "path": "28" + }, + "2556": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "JUMPDEST", + "path": "28" + }, + "2557": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2558": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2559": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2560": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2561": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "2563": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "MLOAD", + "path": "28" + }, + "2564": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "RETURNDATASIZE", + "path": "28" + }, + "2565": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2567": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP2", + "path": "28" + }, + "2568": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "LT", + "path": "28" + }, + "2569": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ISZERO", + "path": "28" + }, + "2570": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH2", + "path": "28", + "value": "0xA12" + }, + "2573": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "JUMPI", + "path": "28" + }, + "2574": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "2576": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP1", + "path": "28" + }, + "2577": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "REVERT", + "path": "28" + }, + "2578": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "JUMPDEST", + "path": "28" + }, + "2579": { + "op": "POP" + }, + "2580": { + "op": "POP" + }, + "2581": { + "op": "POP" + }, + "2582": { + "op": "POP" + }, + "2583": { + "op": "POP" + }, + "2584": { + "fn": "StarknetTokenBridge.consumeMessage", + "jump": "o", + "offset": [3857, 4296], + "op": "JUMP", + "path": "28" + }, + "2585": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [763, 890], + "op": "JUMPDEST", + "path": "29" + }, + "2586": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [810, 817], + "op": "PUSH1", + "path": "29", + "value": "0x0" + }, + "2588": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [836, 883], + "op": "PUSH2", + "path": "29", + "statement": 31, + "value": "0xA3C" + }, + "2591": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [865, 882], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "2593": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [865, 882], + "op": "MLOAD", + "path": "29" + }, + "2594": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [865, 882], + "op": "DUP1", + "path": "29" + }, + "2595": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [865, 882], + "op": "PUSH1", + "path": "29", + "value": "0x60" + }, + "2597": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [865, 882], + "op": "ADD", + "path": "29" + }, + "2598": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [865, 882], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "2600": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [865, 882], + "op": "MSTORE", + "path": "29" + }, + "2601": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [865, 882], + "op": "DUP1", + "path": "29" + }, + "2602": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [865, 882], + "op": "PUSH1", + "path": "29", + "value": "0x29" + }, + "2604": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [865, 882], + "op": "DUP2", + "path": "29" + }, + "2605": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [865, 882], + "op": "MSTORE", + "path": "29" + }, + "2606": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [865, 882], + "op": "PUSH1", + "path": "29", + "value": "0x20" + }, + "2608": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [865, 882], + "op": "ADD", + "path": "29" + }, + "2609": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [865, 882], + "op": "PUSH2", + "path": "29", + "value": "0x1F4E" + }, + "2612": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [865, 882], + "op": "PUSH1", + "path": "29", + "value": "0x29" + }, + "2614": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [865, 882], + "op": "SWAP2", + "path": "29" + }, + "2615": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [865, 882], + "op": "CODECOPY", + "path": "29" + }, + "2616": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [836, 864], + "op": "PUSH2", + "path": "29", + "value": "0x1981" + }, + "2619": { + "fn": "StarknetTokenStorage.bridgedToken", + "jump": "i", + "offset": [836, 883], + "op": "JUMP", + "path": "29" + }, + "2620": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [836, 883], + "op": "JUMPDEST", + "path": "29" + }, + "2621": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [829, 883], + "op": "SWAP1", + "path": "29" + }, + "2622": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [829, 883], + "op": "POP", + "path": "29" + }, + "2623": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [763, 890], + "op": "SWAP1", + "path": "29" + }, + "2624": { + "fn": "StarknetTokenStorage.bridgedToken", + "jump": "o", + "offset": [763, 890], + "op": "JUMP", + "path": "29" + }, + "2625": { + "fn": "Transfers.transferOut", + "offset": [1181, 2067], + "op": "JUMPDEST", + "path": "30" + }, + "2626": { + "fn": "Transfers.transferOut", + "offset": [1329, 1334], + "op": "DUP3", + "path": "30" + }, + "2627": { + "op": "PUSH1", + "value": "0x1" + }, + "2629": { + "op": "PUSH1", + "value": "0x1" + }, + "2631": { + "op": "PUSH1", + "value": "0xA0" + }, + "2633": { + "op": "SHL" + }, + "2634": { + "op": "SUB" + }, + "2635": { + "fn": "Transfers.transferOut", + "offset": [1408, 1433], + "op": "DUP4", + "path": "30", + "statement": 32 + }, + "2636": { + "branch": 111, + "fn": "Transfers.transferOut", + "offset": [1408, 1433], + "op": "AND", + "path": "30" + }, + "2637": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "PUSH2", + "path": "30", + "value": "0xA91" + }, + "2640": { + "branch": 111, + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "JUMPI", + "path": "30" + }, + "2641": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "PUSH1", + "path": "30", + "value": "0x40" + }, + "2643": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "DUP1", + "path": "30" + }, + "2644": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "MLOAD", + "path": "30" + }, + "2645": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "2649": { + "op": "PUSH1", + "value": "0xE5" + }, + "2651": { + "op": "SHL" + }, + "2652": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "DUP2", + "path": "30" + }, + "2653": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "MSTORE", + "path": "30" + }, + "2654": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "PUSH1", + "path": "30", + "value": "0x20" + }, + "2656": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "PUSH1", + "path": "30", + "value": "0x4" + }, + "2658": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "DUP3", + "path": "30" + }, + "2659": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "ADD", + "path": "30" + }, + "2660": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "MSTORE", + "path": "30" + }, + "2661": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "PUSH1", + "path": "30", + "value": "0x11" + }, + "2663": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "PUSH1", + "path": "30", + "value": "0x24" + }, + "2665": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "DUP3", + "path": "30" + }, + "2666": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "ADD", + "path": "30" + }, + "2667": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "MSTORE", + "path": "30" + }, + "2668": { + "op": "PUSH17", + "value": "0x1253959053125117D49150D25412515395" + }, + "2686": { + "op": "PUSH1", + "value": "0x7A" + }, + "2688": { + "op": "SHL" + }, + "2689": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "PUSH1", + "path": "30", + "value": "0x44" + }, + "2691": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "DUP3", + "path": "30" + }, + "2692": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "ADD", + "path": "30" + }, + "2693": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "MSTORE", + "path": "30" + }, + "2694": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "SWAP1", + "path": "30" + }, + "2695": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "MLOAD", + "path": "30" + }, + "2696": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "SWAP1", + "path": "30" + }, + "2697": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "DUP2", + "path": "30" + }, + "2698": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "SWAP1", + "path": "30" + }, + "2699": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "SUB", + "path": "30" + }, + "2700": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "PUSH1", + "path": "30", + "value": "0x64" + }, + "2702": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "ADD", + "path": "30" + }, + "2703": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "SWAP1", + "path": "30" + }, + "2704": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "REVERT", + "path": "30" + }, + "2705": { + "fn": "Transfers.transferOut", + "offset": [1400, 1455], + "op": "JUMPDEST", + "path": "30" + }, + "2706": { + "fn": "Transfers.transferOut", + "offset": [1465, 1492], + "op": "PUSH1", + "path": "30", + "value": "0x0" + }, + "2708": { + "fn": "Transfers.transferOut", + "offset": [1495, 1506], + "op": "DUP2", + "path": "30" + }, + "2709": { + "op": "PUSH1", + "value": "0x1" + }, + "2711": { + "op": "PUSH1", + "value": "0x1" + }, + "2713": { + "op": "PUSH1", + "value": "0xA0" + }, + "2715": { + "op": "SHL" + }, + "2716": { + "op": "SUB" + }, + "2717": { + "fn": "Transfers.transferOut", + "offset": [1495, 1516], + "op": "AND", + "path": "30" + }, + "2718": { + "fn": "Transfers.transferOut", + "offset": [1495, 1516], + "op": "PUSH4", + "path": "30", + "value": "0x70A08231" + }, + "2723": { + "fn": "Transfers.transferOut", + "offset": [1525, 1529], + "op": "ADDRESS", + "path": "30" + }, + "2724": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "PUSH1", + "path": "30", + "value": "0x40" + }, + "2726": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "MLOAD", + "path": "30" + }, + "2727": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "DUP3", + "path": "30" + }, + "2728": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "PUSH4", + "path": "30", + "value": "0xFFFFFFFF" + }, + "2733": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "AND", + "path": "30" + }, + "2734": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "PUSH1", + "path": "30", + "value": "0xE0" + }, + "2736": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "SHL", + "path": "30" + }, + "2737": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "DUP2", + "path": "30" + }, + "2738": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "MSTORE", + "path": "30" + }, + "2739": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "PUSH1", + "path": "30", + "value": "0x4" + }, + "2741": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "ADD", + "path": "30" + }, + "2742": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "DUP1", + "path": "30" + }, + "2743": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "DUP3", + "path": "30" + }, + "2744": { + "op": "PUSH1", + "value": "0x1" + }, + "2746": { + "op": "PUSH1", + "value": "0x1" + }, + "2748": { + "op": "PUSH1", + "value": "0xA0" + }, + "2750": { + "op": "SHL" + }, + "2751": { + "op": "SUB" + }, + "2752": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "AND", + "path": "30" + }, + "2753": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "DUP2", + "path": "30" + }, + "2754": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "MSTORE", + "path": "30" + }, + "2755": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "PUSH1", + "path": "30", + "value": "0x20" + }, + "2757": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "ADD", + "path": "30" + }, + "2758": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "SWAP2", + "path": "30" + }, + "2759": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "POP", + "path": "30" + }, + "2760": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "POP", + "path": "30" + }, + "2761": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "PUSH1", + "path": "30", + "value": "0x20" + }, + "2763": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "PUSH1", + "path": "30", + "value": "0x40" + }, + "2765": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "MLOAD", + "path": "30" + }, + "2766": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "DUP1", + "path": "30" + }, + "2767": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "DUP4", + "path": "30" + }, + "2768": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "SUB", + "path": "30" + }, + "2769": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "DUP2", + "path": "30" + }, + "2770": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "DUP7", + "path": "30" + }, + "2771": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "DUP1", + "path": "30" + }, + "2772": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "EXTCODESIZE", + "path": "30" + }, + "2773": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "ISZERO", + "path": "30" + }, + "2774": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "DUP1", + "path": "30" + }, + "2775": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "ISZERO", + "path": "30" + }, + "2776": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "PUSH2", + "path": "30", + "value": "0xAE0" + }, + "2779": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "JUMPI", + "path": "30" + }, + "2780": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "PUSH1", + "path": "30", + "value": "0x0" + }, + "2782": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "DUP1", + "path": "30" + }, + "2783": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "REVERT", + "path": "30" + }, + "2784": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "JUMPDEST", + "path": "30" + }, + "2785": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "POP", + "path": "30" + }, + "2786": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "GAS", + "path": "30" + }, + "2787": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "STATICCALL", + "path": "30" + }, + "2788": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "ISZERO", + "path": "30" + }, + "2789": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "DUP1", + "path": "30" + }, + "2790": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "ISZERO", + "path": "30" + }, + "2791": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "PUSH2", + "path": "30", + "value": "0xAF4" + }, + "2794": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "JUMPI", + "path": "30" + }, + "2795": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "RETURNDATASIZE", + "path": "30" + }, + "2796": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "PUSH1", + "path": "30", + "value": "0x0" + }, + "2798": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "DUP1", + "path": "30" + }, + "2799": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "RETURNDATACOPY", + "path": "30" + }, + "2800": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "RETURNDATASIZE", + "path": "30" + }, + "2801": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "PUSH1", + "path": "30", + "value": "0x0" + }, + "2803": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "REVERT", + "path": "30" + }, + "2804": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "JUMPDEST", + "path": "30" + }, + "2805": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "POP", + "path": "30" + }, + "2806": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "POP", + "path": "30" + }, + "2807": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "POP", + "path": "30" + }, + "2808": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "POP", + "path": "30" + }, + "2809": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "PUSH1", + "path": "30", + "value": "0x40" + }, + "2811": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "MLOAD", + "path": "30" + }, + "2812": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "RETURNDATASIZE", + "path": "30" + }, + "2813": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "PUSH1", + "path": "30", + "value": "0x20" + }, + "2815": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "DUP2", + "path": "30" + }, + "2816": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "LT", + "path": "30" + }, + "2817": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "ISZERO", + "path": "30" + }, + "2818": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "PUSH2", + "path": "30", + "value": "0xB0A" + }, + "2821": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "JUMPI", + "path": "30" + }, + "2822": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "PUSH1", + "path": "30", + "value": "0x0" + }, + "2824": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "DUP1", + "path": "30" + }, + "2825": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "REVERT", + "path": "30" + }, + "2826": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "JUMPDEST", + "path": "30" + }, + "2827": { + "op": "POP" + }, + "2828": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "MLOAD", + "path": "30" + }, + "2829": { + "fn": "Transfers.transferOut", + "offset": [1495, 1531], + "op": "SWAP1", + "path": "30" + }, + "2830": { + "op": "POP" + }, + "2831": { + "fn": "Transfers.transferOut", + "offset": [1549, 1577], + "op": "DUP3", + "path": "30", + "statement": 33 + }, + "2832": { + "fn": "Transfers.transferOut", + "offset": [1549, 1577], + "op": "DUP2", + "path": "30" + }, + "2833": { + "fn": "Transfers.transferOut", + "offset": [1549, 1577], + "op": "SUB", + "path": "30" + }, + "2834": { + "fn": "Transfers.transferOut", + "offset": [1549, 1600], + "op": "DUP2", + "path": "30" + }, + "2835": { + "op": "LT" + }, + "2836": { + "branch": 112, + "fn": "Transfers.transferOut", + "offset": [1549, 1600], + "op": "ISZERO", + "path": "30" + }, + "2837": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "PUSH2", + "path": "30", + "value": "0xB51" + }, + "2840": { + "branch": 112, + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "JUMPI", + "path": "30" + }, + "2841": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "PUSH1", + "path": "30", + "value": "0x40" + }, + "2843": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "DUP1", + "path": "30" + }, + "2844": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "MLOAD", + "path": "30" + }, + "2845": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "2849": { + "op": "PUSH1", + "value": "0xE5" + }, + "2851": { + "op": "SHL" + }, + "2852": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "DUP2", + "path": "30" + }, + "2853": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "MSTORE", + "path": "30" + }, + "2854": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "PUSH1", + "path": "30", + "value": "0x20" + }, + "2856": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "PUSH1", + "path": "30", + "value": "0x4" + }, + "2858": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "DUP3", + "path": "30" + }, + "2859": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "ADD", + "path": "30" + }, + "2860": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "MSTORE", + "path": "30" + }, + "2861": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "PUSH1", + "path": "30", + "value": "0x9" + }, + "2863": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "PUSH1", + "path": "30", + "value": "0x24" + }, + "2865": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "DUP3", + "path": "30" + }, + "2866": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "ADD", + "path": "30" + }, + "2867": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "MSTORE", + "path": "30" + }, + "2868": { + "op": "PUSH9", + "value": "0x554E444552464C4F57" + }, + "2878": { + "op": "PUSH1", + "value": "0xB8" + }, + "2880": { + "op": "SHL" + }, + "2881": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "PUSH1", + "path": "30", + "value": "0x44" + }, + "2883": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "DUP3", + "path": "30" + }, + "2884": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "ADD", + "path": "30" + }, + "2885": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "MSTORE", + "path": "30" + }, + "2886": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "SWAP1", + "path": "30" + }, + "2887": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "MLOAD", + "path": "30" + }, + "2888": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "SWAP1", + "path": "30" + }, + "2889": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "DUP2", + "path": "30" + }, + "2890": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "SWAP1", + "path": "30" + }, + "2891": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "SUB", + "path": "30" + }, + "2892": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "PUSH1", + "path": "30", + "value": "0x64" + }, + "2894": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "ADD", + "path": "30" + }, + "2895": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "SWAP1", + "path": "30" + }, + "2896": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "REVERT", + "path": "30" + }, + "2897": { + "fn": "Transfers.transferOut", + "offset": [1541, 1614], + "op": "JUMPDEST", + "path": "30" + }, + "2898": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "PUSH1", + "path": "30", + "value": "0x40" + }, + "2900": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "DUP1", + "path": "30" + }, + "2901": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "MLOAD", + "path": "30" + }, + "2902": { + "op": "PUSH1", + "value": "0x1" + }, + "2904": { + "op": "PUSH1", + "value": "0x1" + }, + "2906": { + "op": "PUSH1", + "value": "0xA0" + }, + "2908": { + "op": "SHL" + }, + "2909": { + "op": "SUB" + }, + "2910": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "DUP1", + "path": "30" + }, + "2911": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "DUP8", + "path": "30" + }, + "2912": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "AND", + "path": "30" + }, + "2913": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "PUSH1", + "path": "30", + "value": "0x24" + }, + "2915": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "DUP4", + "path": "30" + }, + "2916": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "ADD", + "path": "30" + }, + "2917": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "MSTORE", + "path": "30" + }, + "2918": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "PUSH1", + "path": "30", + "value": "0x44" + }, + "2920": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "DUP1", + "path": "30" + }, + "2921": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "DUP4", + "path": "30" + }, + "2922": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "ADD", + "path": "30" + }, + "2923": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "DUP8", + "path": "30" + }, + "2924": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "SWAP1", + "path": "30" + }, + "2925": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "MSTORE", + "path": "30" + }, + "2926": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "DUP4", + "path": "30" + }, + "2927": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "MLOAD", + "path": "30" + }, + "2928": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "DUP1", + "path": "30" + }, + "2929": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "DUP5", + "path": "30" + }, + "2930": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "SUB", + "path": "30" + }, + "2931": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "SWAP1", + "path": "30" + }, + "2932": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "SWAP2", + "path": "30" + }, + "2933": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "ADD", + "path": "30" + }, + "2934": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "DUP2", + "path": "30" + }, + "2935": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "MSTORE", + "path": "30" + }, + "2936": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "PUSH1", + "path": "30", + "value": "0x64" + }, + "2938": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "SWAP1", + "path": "30" + }, + "2939": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "SWAP3", + "path": "30" + }, + "2940": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "ADD", + "path": "30" + }, + "2941": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "SWAP1", + "path": "30" + }, + "2942": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "SWAP3", + "path": "30" + }, + "2943": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "MSTORE", + "path": "30" + }, + "2944": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "PUSH1", + "path": "30", + "value": "0x20" + }, + "2946": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "DUP2", + "path": "30" + }, + "2947": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "ADD", + "path": "30" + }, + "2948": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "DUP1", + "path": "30" + }, + "2949": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "MLOAD", + "path": "30" + }, + "2950": { + "op": "PUSH1", + "value": "0x1" + }, + "2952": { + "op": "PUSH1", + "value": "0x1" + }, + "2954": { + "op": "PUSH1", + "value": "0xE0" + }, + "2956": { + "op": "SHL" + }, + "2957": { + "op": "SUB" + }, + "2958": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "AND", + "path": "30" + }, + "2959": { + "op": "PUSH4", + "value": "0xA9059CBB" + }, + "2964": { + "op": "PUSH1", + "value": "0xE0" + }, + "2966": { + "op": "SHL" + }, + "2967": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "OR", + "path": "30" + }, + "2968": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "SWAP1", + "path": "30" + }, + "2969": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "MSTORE", + "path": "30" + }, + "2970": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "SWAP1", + "path": "30" + }, + "2971": { + "fn": "Transfers.transferOut", + "offset": [1776, 1813], + "op": "PUSH2", + "path": "30", + "statement": 34, + "value": "0xBA6" + }, + "2974": { + "fn": "Transfers.transferOut", + "offset": [1776, 1813], + "op": "SWAP1", + "path": "30" + }, + "2975": { + "fn": "Transfers.transferOut", + "offset": [1776, 1803], + "op": "DUP8", + "path": "30" + }, + "2976": { + "fn": "Transfers.transferOut", + "offset": [1776, 1803], + "op": "AND", + "path": "30" + }, + "2977": { + "fn": "Transfers.transferOut", + "offset": [1648, 1766], + "op": "DUP3", + "path": "30" + }, + "2978": { + "fn": "Transfers.transferOut", + "offset": [1776, 1803], + "op": "PUSH2", + "path": "30", + "value": "0x19FE" + }, + "2981": { + "fn": "Transfers.transferOut", + "jump": "i", + "offset": [1776, 1813], + "op": "JUMP", + "path": "30" + }, + "2982": { + "fn": "Transfers.transferOut", + "offset": [1776, 1813], + "op": "JUMPDEST", + "path": "30" + }, + "2983": { + "fn": "Transfers.transferOut", + "offset": [1823, 1849], + "op": "PUSH1", + "path": "30", + "value": "0x0" + }, + "2985": { + "fn": "Transfers.transferOut", + "offset": [1852, 1863], + "op": "DUP4", + "path": "30" + }, + "2986": { + "op": "PUSH1", + "value": "0x1" + }, + "2988": { + "op": "PUSH1", + "value": "0x1" + }, + "2990": { + "op": "PUSH1", + "value": "0xA0" + }, + "2992": { + "op": "SHL" + }, + "2993": { + "op": "SUB" + }, + "2994": { + "fn": "Transfers.transferOut", + "offset": [1852, 1873], + "op": "AND", + "path": "30" + }, + "2995": { + "fn": "Transfers.transferOut", + "offset": [1852, 1873], + "op": "PUSH4", + "path": "30", + "value": "0x70A08231" + }, + "3000": { + "fn": "Transfers.transferOut", + "offset": [1882, 1886], + "op": "ADDRESS", + "path": "30" + }, + "3001": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "PUSH1", + "path": "30", + "value": "0x40" + }, + "3003": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "MLOAD", + "path": "30" + }, + "3004": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "DUP3", + "path": "30" + }, + "3005": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "PUSH4", + "path": "30", + "value": "0xFFFFFFFF" + }, + "3010": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "AND", + "path": "30" + }, + "3011": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "PUSH1", + "path": "30", + "value": "0xE0" + }, + "3013": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "SHL", + "path": "30" + }, + "3014": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "DUP2", + "path": "30" + }, + "3015": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "MSTORE", + "path": "30" + }, + "3016": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "PUSH1", + "path": "30", + "value": "0x4" + }, + "3018": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "ADD", + "path": "30" + }, + "3019": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "DUP1", + "path": "30" + }, + "3020": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "DUP3", + "path": "30" + }, + "3021": { + "op": "PUSH1", + "value": "0x1" + }, + "3023": { + "op": "PUSH1", + "value": "0x1" + }, + "3025": { + "op": "PUSH1", + "value": "0xA0" + }, + "3027": { + "op": "SHL" + }, + "3028": { + "op": "SUB" + }, + "3029": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "AND", + "path": "30" + }, + "3030": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "DUP2", + "path": "30" + }, + "3031": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "MSTORE", + "path": "30" + }, + "3032": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "PUSH1", + "path": "30", + "value": "0x20" + }, + "3034": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "ADD", + "path": "30" + }, + "3035": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "SWAP2", + "path": "30" + }, + "3036": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "POP", + "path": "30" + }, + "3037": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "POP", + "path": "30" + }, + "3038": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "PUSH1", + "path": "30", + "value": "0x20" + }, + "3040": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "PUSH1", + "path": "30", + "value": "0x40" + }, + "3042": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "MLOAD", + "path": "30" + }, + "3043": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "DUP1", + "path": "30" + }, + "3044": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "DUP4", + "path": "30" + }, + "3045": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "SUB", + "path": "30" + }, + "3046": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "DUP2", + "path": "30" + }, + "3047": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "DUP7", + "path": "30" + }, + "3048": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "DUP1", + "path": "30" + }, + "3049": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "EXTCODESIZE", + "path": "30" + }, + "3050": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "ISZERO", + "path": "30" + }, + "3051": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "DUP1", + "path": "30" + }, + "3052": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "ISZERO", + "path": "30" + }, + "3053": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "PUSH2", + "path": "30", + "value": "0xBF5" + }, + "3056": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "JUMPI", + "path": "30" + }, + "3057": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "PUSH1", + "path": "30", + "value": "0x0" + }, + "3059": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "DUP1", + "path": "30" + }, + "3060": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "REVERT", + "path": "30" + }, + "3061": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "JUMPDEST", + "path": "30" + }, + "3062": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "POP", + "path": "30" + }, + "3063": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "GAS", + "path": "30" + }, + "3064": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "STATICCALL", + "path": "30" + }, + "3065": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "ISZERO", + "path": "30" + }, + "3066": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "DUP1", + "path": "30" + }, + "3067": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "ISZERO", + "path": "30" + }, + "3068": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "PUSH2", + "path": "30", + "value": "0xC09" + }, + "3071": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "JUMPI", + "path": "30" + }, + "3072": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "RETURNDATASIZE", + "path": "30" + }, + "3073": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "PUSH1", + "path": "30", + "value": "0x0" + }, + "3075": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "DUP1", + "path": "30" + }, + "3076": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "RETURNDATACOPY", + "path": "30" + }, + "3077": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "RETURNDATASIZE", + "path": "30" + }, + "3078": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "PUSH1", + "path": "30", + "value": "0x0" + }, + "3080": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "REVERT", + "path": "30" + }, + "3081": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "JUMPDEST", + "path": "30" + }, + "3082": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "POP", + "path": "30" + }, + "3083": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "POP", + "path": "30" + }, + "3084": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "POP", + "path": "30" + }, + "3085": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "POP", + "path": "30" + }, + "3086": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "PUSH1", + "path": "30", + "value": "0x40" + }, + "3088": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "MLOAD", + "path": "30" + }, + "3089": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "RETURNDATASIZE", + "path": "30" + }, + "3090": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "PUSH1", + "path": "30", + "value": "0x20" + }, + "3092": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "DUP2", + "path": "30" + }, + "3093": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "LT", + "path": "30" + }, + "3094": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "ISZERO", + "path": "30" + }, + "3095": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "PUSH2", + "path": "30", + "value": "0xC1F" + }, + "3098": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "JUMPI", + "path": "30" + }, + "3099": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "PUSH1", + "path": "30", + "value": "0x0" + }, + "3101": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "DUP1", + "path": "30" + }, + "3102": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "REVERT", + "path": "30" + }, + "3103": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "JUMPDEST", + "path": "30" + }, + "3104": { + "op": "POP" + }, + "3105": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "MLOAD", + "path": "30" + }, + "3106": { + "fn": "Transfers.transferOut", + "offset": [1852, 1888], + "op": "SWAP1", + "path": "30" + }, + "3107": { + "op": "POP" + }, + "3108": { + "fn": "Transfers.transferOut", + "offset": [1999, 2027], + "op": "DUP5", + "path": "30", + "statement": 35 + }, + "3109": { + "fn": "Transfers.transferOut", + "offset": [1999, 2027], + "op": "DUP4", + "path": "30" + }, + "3110": { + "fn": "Transfers.transferOut", + "offset": [1999, 2027], + "op": "SUB", + "path": "30" + }, + "3111": { + "fn": "Transfers.transferOut", + "offset": [1977, 2027], + "op": "DUP2", + "path": "30" + }, + "3112": { + "branch": 113, + "fn": "Transfers.transferOut", + "offset": [1977, 2027], + "op": "EQ", + "path": "30" + }, + "3113": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "PUSH2", + "path": "30", + "value": "0xC79" + }, + "3116": { + "branch": 113, + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "JUMPI", + "path": "30" + }, + "3117": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "PUSH1", + "path": "30", + "value": "0x40" + }, + "3119": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "DUP1", + "path": "30" + }, + "3120": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "MLOAD", + "path": "30" + }, + "3121": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "3125": { + "op": "PUSH1", + "value": "0xE5" + }, + "3127": { + "op": "SHL" + }, + "3128": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "DUP2", + "path": "30" + }, + "3129": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "MSTORE", + "path": "30" + }, + "3130": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "PUSH1", + "path": "30", + "value": "0x20" + }, + "3132": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "PUSH1", + "path": "30", + "value": "0x4" + }, + "3134": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "DUP3", + "path": "30" + }, + "3135": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "ADD", + "path": "30" + }, + "3136": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "MSTORE", + "path": "30" + }, + "3137": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "PUSH1", + "path": "30", + "value": "0x1C" + }, + "3139": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "PUSH1", + "path": "30", + "value": "0x24" + }, + "3141": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "DUP3", + "path": "30" + }, + "3142": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "ADD", + "path": "30" + }, + "3143": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "MSTORE", + "path": "30" + }, + "3144": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "PUSH32", + "path": "30", + "value": "0x494E434F52524543545F414D4F554E545F5452414E5346455252454400000000" + }, + "3177": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "PUSH1", + "path": "30", + "value": "0x44" + }, + "3179": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "DUP3", + "path": "30" + }, + "3180": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "ADD", + "path": "30" + }, + "3181": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "MSTORE", + "path": "30" + }, + "3182": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "SWAP1", + "path": "30" + }, + "3183": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "MLOAD", + "path": "30" + }, + "3184": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "SWAP1", + "path": "30" + }, + "3185": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "DUP2", + "path": "30" + }, + "3186": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "SWAP1", + "path": "30" + }, + "3187": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "SUB", + "path": "30" + }, + "3188": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "PUSH1", + "path": "30", + "value": "0x64" + }, + "3190": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "ADD", + "path": "30" + }, + "3191": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "SWAP1", + "path": "30" + }, + "3192": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "REVERT", + "path": "30" + }, + "3193": { + "fn": "Transfers.transferOut", + "offset": [1969, 2060], + "op": "JUMPDEST", + "path": "30" + }, + "3194": { + "fn": "Transfers.transferOut", + "offset": [1181, 2067], + "op": "POP", + "path": "30" + }, + "3195": { + "fn": "Transfers.transferOut", + "offset": [1181, 2067], + "op": "POP", + "path": "30" + }, + "3196": { + "fn": "Transfers.transferOut", + "offset": [1181, 2067], + "op": "POP", + "path": "30" + }, + "3197": { + "fn": "Transfers.transferOut", + "offset": [1181, 2067], + "op": "POP", + "path": "30" + }, + "3198": { + "fn": "Transfers.transferOut", + "offset": [1181, 2067], + "op": "POP", + "path": "30" + }, + "3199": { + "fn": "Transfers.transferOut", + "offset": [1181, 2067], + "op": "POP", + "path": "30" + }, + "3200": { + "fn": "Transfers.transferOut", + "offset": [1181, 2067], + "op": "POP", + "path": "30" + }, + "3201": { + "fn": "Transfers.transferOut", + "jump": "o", + "offset": [1181, 2067], + "op": "JUMP", + "path": "30" + }, + "3202": { + "fn": "Governance.isGovernor", + "offset": [1840, 2044], + "op": "JUMPDEST", + "path": "1" + }, + "3203": { + "fn": "Governance.isGovernor", + "offset": [1914, 1918], + "op": "PUSH1", + "path": "1", + "value": "0x0" + }, + "3205": { + "fn": "Governance.isGovernor", + "offset": [1930, 1962], + "op": "DUP1", + "path": "1" + }, + "3206": { + "fn": "Governance.isGovernor", + "offset": [1965, 1984], + "op": "PUSH2", + "path": "1", + "value": "0xC8D" + }, + "3209": { + "fn": "Governance.isGovernor", + "offset": [1965, 1982], + "op": "PUSH2", + "path": "1", + "value": "0x1BAD" + }, + "3212": { + "fn": "Governance.isGovernor", + "jump": "i", + "offset": [1965, 1984], + "op": "JUMP", + "path": "1" + }, + "3213": { + "fn": "Governance.isGovernor", + "offset": [1965, 1984], + "op": "JUMPDEST", + "path": "1" + }, + "3214": { + "op": "PUSH1", + "value": "0x1" + }, + "3216": { + "op": "PUSH1", + "value": "0x1" + }, + "3218": { + "op": "PUSH1", + "value": "0xA0" + }, + "3220": { + "op": "SHL" + }, + "3221": { + "op": "SUB" + }, + "3222": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "SWAP4", + "path": "1", + "statement": 36 + }, + "3223": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "SWAP1", + "path": "1" + }, + "3224": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "SWAP4", + "path": "1" + }, + "3225": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "AND", + "path": "1" + }, + "3226": { + "fn": "Governance.isGovernor", + "offset": [2001, 2023], + "op": "PUSH1", + "path": "1", + "value": "0x0" + }, + "3228": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "SWAP1", + "path": "1" + }, + "3229": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "DUP2", + "path": "1" + }, + "3230": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "MSTORE", + "path": "1" + }, + "3231": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "PUSH1", + "path": "1", + "value": "0x20" + }, + "3233": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "SWAP4", + "path": "1" + }, + "3234": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "SWAP1", + "path": "1" + }, + "3235": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "SWAP4", + "path": "1" + }, + "3236": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "MSTORE", + "path": "1" + }, + "3237": { + "op": "POP" + }, + "3238": { + "op": "POP" + }, + "3239": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "PUSH1", + "path": "1", + "value": "0x40" + }, + "3241": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "SWAP1", + "path": "1" + }, + "3242": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "KECCAK256", + "path": "1" + }, + "3243": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "SLOAD", + "path": "1" + }, + "3244": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "PUSH1", + "path": "1", + "value": "0xFF" + }, + "3246": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "AND", + "path": "1" + }, + "3247": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "SWAP1", + "path": "1" + }, + "3248": { + "fn": "Governance.isGovernor", + "jump": "o", + "offset": [1840, 2044], + "op": "JUMP", + "path": "1" + }, + "3249": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2517, 3057], + "op": "JUMPDEST", + "path": "10" + }, + "3250": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2645, 2681], + "op": "PUSH2", + "path": "10", + "statement": 37, + "value": "0xCC3" + }, + "3253": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2645, 2668], + "op": "DUP4", + "path": "10" + }, + "3254": { + "op": "PUSH1", + "value": "0x1" + }, + "3256": { + "op": "PUSH1", + "value": "0x1" + }, + "3258": { + "op": "PUSH1", + "value": "0xA0" + }, + "3260": { + "op": "SHL" + }, + "3261": { + "op": "SUB" + }, + "3262": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2645, 2679], + "op": "AND", + "path": "10" + }, + "3263": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2645, 2679], + "op": "PUSH2", + "path": "10", + "value": "0x1C5C" + }, + "3266": { + "fn": "ProxySupport.callExternalInitializer", + "jump": "i", + "offset": [2645, 2681], + "op": "JUMP", + "path": "10" + }, + "3267": { + "branch": 106, + "fn": "ProxySupport.callExternalInitializer", + "offset": [2645, 2681], + "op": "JUMPDEST", + "path": "10" + }, + "3268": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "PUSH2", + "path": "10", + "value": "0xD09" + }, + "3271": { + "branch": 106, + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "JUMPI", + "path": "10" + }, + "3272": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "PUSH1", + "path": "10", + "value": "0x40" + }, + "3274": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "DUP1", + "path": "10" + }, + "3275": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "MLOAD", + "path": "10" + }, + "3276": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "3280": { + "op": "PUSH1", + "value": "0xE5" + }, + "3282": { + "op": "SHL" + }, + "3283": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "DUP2", + "path": "10" + }, + "3284": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "MSTORE", + "path": "10" + }, + "3285": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3287": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "PUSH1", + "path": "10", + "value": "0x4" + }, + "3289": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "DUP3", + "path": "10" + }, + "3290": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "ADD", + "path": "10" + }, + "3291": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "MSTORE", + "path": "10" + }, + "3292": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "PUSH1", + "path": "10", + "value": "0x12" + }, + "3294": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "PUSH1", + "path": "10", + "value": "0x24" + }, + "3296": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "DUP3", + "path": "10" + }, + "3297": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "ADD", + "path": "10" + }, + "3298": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "MSTORE", + "path": "10" + }, + "3299": { + "op": "PUSH18", + "value": "0x115250D7D393D517D057D0D3D395149050D5" + }, + "3318": { + "op": "PUSH1", + "value": "0x72" + }, + "3320": { + "op": "SHL" + }, + "3321": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "PUSH1", + "path": "10", + "value": "0x44" + }, + "3323": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "DUP3", + "path": "10" + }, + "3324": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "ADD", + "path": "10" + }, + "3325": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "MSTORE", + "path": "10" + }, + "3326": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "SWAP1", + "path": "10" + }, + "3327": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "MLOAD", + "path": "10" + }, + "3328": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "SWAP1", + "path": "10" + }, + "3329": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "DUP2", + "path": "10" + }, + "3330": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "SWAP1", + "path": "10" + }, + "3331": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "SUB", + "path": "10" + }, + "3332": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "PUSH1", + "path": "10", + "value": "0x64" + }, + "3334": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "ADD", + "path": "10" + }, + "3335": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "SWAP1", + "path": "10" + }, + "3336": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "REVERT", + "path": "10" + }, + "3337": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "JUMPDEST", + "path": "10" + }, + "3338": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2785, 2797], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "3340": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2799, 2822], + "op": "PUSH1", + "path": "10", + "value": "0x60" + }, + "3342": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2849], + "op": "DUP5", + "path": "10" + }, + "3343": { + "op": "PUSH1", + "value": "0x1" + }, + "3345": { + "op": "PUSH1", + "value": "0x1" + }, + "3347": { + "op": "PUSH1", + "value": "0xA0" + }, + "3349": { + "op": "SHL" + }, + "3350": { + "op": "SUB" + }, + "3351": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2862], + "op": "AND", + "path": "10" + }, + "3352": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2899, 2923], + "op": "PUSH4", + "path": "10", + "value": "0x439FAB91" + }, + "3357": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2899, 2923], + "op": "PUSH1", + "path": "10", + "value": "0xE0" + }, + "3359": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2899, 2923], + "op": "SHL", + "path": "10" + }, + "3360": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2925, 2932], + "op": "DUP6", + "path": "10" + }, + "3361": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2925, 2932], + "op": "DUP6", + "path": "10" + }, + "3362": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "PUSH1", + "path": "10", + "value": "0x40" + }, + "3364": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "MLOAD", + "path": "10" + }, + "3365": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "PUSH1", + "path": "10", + "value": "0x24" + }, + "3367": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "ADD", + "path": "10" + }, + "3368": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP1", + "path": "10" + }, + "3369": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP1", + "path": "10" + }, + "3370": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3372": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "ADD", + "path": "10" + }, + "3373": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP3", + "path": "10" + }, + "3374": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP2", + "path": "10" + }, + "3375": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SUB", + "path": "10" + }, + "3376": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP3", + "path": "10" + }, + "3377": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "MSTORE", + "path": "10" + }, + "3378": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP5", + "path": "10" + }, + "3379": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP5", + "path": "10" + }, + "3380": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP3", + "path": "10" + }, + "3381": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP2", + "path": "10" + }, + "3382": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP2", + "path": "10" + }, + "3383": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "MSTORE", + "path": "10" + }, + "3384": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3386": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "ADD", + "path": "10" + }, + "3387": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP3", + "path": "10" + }, + "3388": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "POP", + "path": "10" + }, + "3389": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP1", + "path": "10" + }, + "3390": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP3", + "path": "10" + }, + "3391": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP5", + "path": "10" + }, + "3392": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "CALLDATACOPY", + "path": "10" + }, + "3393": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "3395": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP4", + "path": "10" + }, + "3396": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP3", + "path": "10" + }, + "3397": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "ADD", + "path": "10" + }, + "3398": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "MSTORE", + "path": "10" + }, + "3399": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "PUSH1", + "path": "10", + "value": "0x40" + }, + "3401": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP1", + "path": "10" + }, + "3402": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "MLOAD", + "path": "10" + }, + "3403": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "PUSH1", + "path": "10", + "value": "0x1F" + }, + "3405": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP1", + "path": "10" + }, + "3406": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP3", + "path": "10" + }, + "3407": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "ADD", + "path": "10" + }, + "3408": { + "op": "PUSH1", + "value": "0x1F" + }, + "3410": { + "op": "NOT" + }, + "3411": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP1", + "path": "10" + }, + "3412": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP2", + "path": "10" + }, + "3413": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "AND", + "path": "10" + }, + "3414": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP1", + "path": "10" + }, + "3415": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP5", + "path": "10" + }, + "3416": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "ADD", + "path": "10" + }, + "3417": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP3", + "path": "10" + }, + "3418": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP2", + "path": "10" + }, + "3419": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SUB", + "path": "10" + }, + "3420": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP1", + "path": "10" + }, + "3421": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP5", + "path": "10" + }, + "3422": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "ADD", + "path": "10" + }, + "3423": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP3", + "path": "10" + }, + "3424": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "MSTORE", + "path": "10" + }, + "3425": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP3", + "path": "10" + }, + "3426": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP4", + "path": "10" + }, + "3427": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "MSTORE", + "path": "10" + }, + "3428": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3430": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP2", + "path": "10" + }, + "3431": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "ADD", + "path": "10" + }, + "3432": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP1", + "path": "10" + }, + "3433": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "MLOAD", + "path": "10" + }, + "3434": { + "op": "PUSH1", + "value": "0x1" + }, + "3436": { + "op": "PUSH1", + "value": "0x1" + }, + "3438": { + "op": "PUSH1", + "value": "0xE0" + }, + "3440": { + "op": "SHL" + }, + "3441": { + "op": "SUB" + }, + "3442": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "AND", + "path": "10" + }, + "3443": { + "op": "PUSH1", + "value": "0x1" + }, + "3445": { + "op": "PUSH1", + "value": "0x1" + }, + "3447": { + "op": "PUSH1", + "value": "0xE0" + }, + "3449": { + "op": "SHL" + }, + "3450": { + "op": "SUB" + }, + "3451": { + "op": "NOT" + }, + "3452": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP1", + "path": "10" + }, + "3453": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP10", + "path": "10" + }, + "3454": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "AND", + "path": "10" + }, + "3455": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP9", + "path": "10" + }, + "3456": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP1", + "path": "10" + }, + "3457": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP9", + "path": "10" + }, + "3458": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "OR", + "path": "10" + }, + "3459": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP9", + "path": "10" + }, + "3460": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "MSTORE", + "path": "10" + }, + "3461": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP2", + "path": "10" + }, + "3462": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "MLOAD", + "path": "10" + }, + "3463": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP3", + "path": "10" + }, + "3464": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "MLOAD", + "path": "10" + }, + "3465": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP3", + "path": "10" + }, + "3466": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP8", + "path": "10" + }, + "3467": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP1", + "path": "10" + }, + "3468": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP7", + "path": "10" + }, + "3469": { + "op": "POP" + }, + "3470": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP7", + "path": "10" + }, + "3471": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP6", + "path": "10" + }, + "3472": { + "op": "POP" + }, + "3473": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP4", + "path": "10" + }, + "3474": { + "op": "POP" + }, + "3475": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP1", + "path": "10" + }, + "3476": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP2", + "path": "10" + }, + "3477": { + "op": "POP" + }, + "3478": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP2", + "path": "10" + }, + "3479": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP1", + "path": "10" + }, + "3480": { + "op": "POP" + }, + "3481": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP4", + "path": "10" + }, + "3482": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP4", + "path": "10" + }, + "3483": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "JUMPDEST", + "path": "10" + }, + "3484": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3486": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP4", + "path": "10" + }, + "3487": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "LT", + "path": "10" + }, + "3488": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH2", + "path": "10", + "value": "0xDBA" + }, + "3491": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "JUMPI", + "path": "10" + }, + "3492": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP1", + "path": "10" + }, + "3493": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "MLOAD", + "path": "10" + }, + "3494": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP3", + "path": "10" + }, + "3495": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "MSTORE", + "path": "10" + }, + "3496": { + "op": "PUSH1", + "value": "0x1F" + }, + "3498": { + "op": "NOT" + }, + "3499": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP1", + "path": "10" + }, + "3500": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP3", + "path": "10" + }, + "3501": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "ADD", + "path": "10" + }, + "3502": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP2", + "path": "10" + }, + "3503": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3505": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP2", + "path": "10" + }, + "3506": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP3", + "path": "10" + }, + "3507": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "ADD", + "path": "10" + }, + "3508": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP2", + "path": "10" + }, + "3509": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "ADD", + "path": "10" + }, + "3510": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH2", + "path": "10", + "value": "0xD9B" + }, + "3513": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "JUMP", + "path": "10" + }, + "3514": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "JUMPDEST", + "path": "10" + }, + "3515": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH1", + "path": "10", + "value": "0x1" + }, + "3517": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP4", + "path": "10" + }, + "3518": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3520": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SUB", + "path": "10" + }, + "3521": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH2", + "path": "10", + "value": "0x100" + }, + "3524": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "EXP", + "path": "10" + }, + "3525": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SUB", + "path": "10" + }, + "3526": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP1", + "path": "10" + }, + "3527": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "NOT", + "path": "10" + }, + "3528": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP3", + "path": "10" + }, + "3529": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "MLOAD", + "path": "10" + }, + "3530": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "AND", + "path": "10" + }, + "3531": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP2", + "path": "10" + }, + "3532": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP5", + "path": "10" + }, + "3533": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "MLOAD", + "path": "10" + }, + "3534": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "AND", + "path": "10" + }, + "3535": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP1", + "path": "10" + }, + "3536": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP3", + "path": "10" + }, + "3537": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "OR", + "path": "10" + }, + "3538": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP6", + "path": "10" + }, + "3539": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "MSTORE", + "path": "10" + }, + "3540": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "POP", + "path": "10" + }, + "3541": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "POP", + "path": "10" + }, + "3542": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "POP", + "path": "10" + }, + "3543": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "POP", + "path": "10" + }, + "3544": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "POP", + "path": "10" + }, + "3545": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "POP", + "path": "10" + }, + "3546": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP1", + "path": "10" + }, + "3547": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "POP", + "path": "10" + }, + "3548": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "ADD", + "path": "10" + }, + "3549": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP2", + "path": "10" + }, + "3550": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "POP", + "path": "10" + }, + "3551": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "POP", + "path": "10" + }, + "3552": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "3554": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH1", + "path": "10", + "value": "0x40" + }, + "3556": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "MLOAD", + "path": "10" + }, + "3557": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP1", + "path": "10" + }, + "3558": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP4", + "path": "10" + }, + "3559": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SUB", + "path": "10" + }, + "3560": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP2", + "path": "10" + }, + "3561": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP6", + "path": "10" + }, + "3562": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "GAS", + "path": "10" + }, + "3563": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DELEGATECALL", + "path": "10" + }, + "3564": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP2", + "path": "10" + }, + "3565": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "POP", + "path": "10" + }, + "3566": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "POP", + "path": "10" + }, + "3567": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "RETURNDATASIZE", + "path": "10" + }, + "3568": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP1", + "path": "10" + }, + "3569": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "3571": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP2", + "path": "10" + }, + "3572": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "EQ", + "path": "10" + }, + "3573": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH2", + "path": "10", + "value": "0xE1A" + }, + "3576": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "JUMPI", + "path": "10" + }, + "3577": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH1", + "path": "10", + "value": "0x40" + }, + "3579": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "MLOAD", + "path": "10" + }, + "3580": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP2", + "path": "10" + }, + "3581": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "POP", + "path": "10" + }, + "3582": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH1", + "path": "10", + "value": "0x1F" + }, + "3584": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "NOT", + "path": "10" + }, + "3585": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH1", + "path": "10", + "value": "0x3F" + }, + "3587": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "RETURNDATASIZE", + "path": "10" + }, + "3588": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "ADD", + "path": "10" + }, + "3589": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "AND", + "path": "10" + }, + "3590": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP3", + "path": "10" + }, + "3591": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "ADD", + "path": "10" + }, + "3592": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH1", + "path": "10", + "value": "0x40" + }, + "3594": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "MSTORE", + "path": "10" + }, + "3595": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "RETURNDATASIZE", + "path": "10" + }, + "3596": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP3", + "path": "10" + }, + "3597": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "MSTORE", + "path": "10" + }, + "3598": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "RETURNDATASIZE", + "path": "10" + }, + "3599": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "3601": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3603": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP5", + "path": "10" + }, + "3604": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "ADD", + "path": "10" + }, + "3605": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "RETURNDATACOPY", + "path": "10" + }, + "3606": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH2", + "path": "10", + "value": "0xE1F" + }, + "3609": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "JUMP", + "path": "10" + }, + "3610": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "JUMPDEST", + "path": "10" + }, + "3611": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH1", + "path": "10", + "value": "0x60" + }, + "3613": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP2", + "path": "10" + }, + "3614": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "POP", + "path": "10" + }, + "3615": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "JUMPDEST", + "path": "10" + }, + "3616": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "POP", + "path": "10" + }, + "3617": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2784, 2943], + "op": "SWAP2", + "path": "10" + }, + "3618": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2784, 2943], + "op": "POP", + "path": "10" + }, + "3619": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2784, 2943], + "op": "SWAP2", + "path": "10" + }, + "3620": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2784, 2943], + "op": "POP", + "path": "10" + }, + "3621": { + "branch": 107, + "fn": "ProxySupport.callExternalInitializer", + "offset": [2961, 2968], + "op": "DUP2", + "path": "10", + "statement": 38 + }, + "3622": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2977, 2987], + "op": "DUP2", + "path": "10" + }, + "3623": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SWAP1", + "path": "10" + }, + "3624": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH2", + "path": "10", + "value": "0xEAF" + }, + "3627": { + "branch": 107, + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "JUMPI", + "path": "10" + }, + "3628": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH1", + "path": "10", + "value": "0x40" + }, + "3630": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "MLOAD", + "path": "10" + }, + "3631": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "3635": { + "op": "PUSH1", + "value": "0xE5" + }, + "3637": { + "op": "SHL" + }, + "3638": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP2", + "path": "10" + }, + "3639": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "MSTORE", + "path": "10" + }, + "3640": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH1", + "path": "10", + "value": "0x4" + }, + "3642": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "ADD", + "path": "10" + }, + "3643": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP1", + "path": "10" + }, + "3644": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP1", + "path": "10" + }, + "3645": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3647": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "ADD", + "path": "10" + }, + "3648": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP3", + "path": "10" + }, + "3649": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP2", + "path": "10" + }, + "3650": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SUB", + "path": "10" + }, + "3651": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP3", + "path": "10" + }, + "3652": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "MSTORE", + "path": "10" + }, + "3653": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP4", + "path": "10" + }, + "3654": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP2", + "path": "10" + }, + "3655": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP2", + "path": "10" + }, + "3656": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "MLOAD", + "path": "10" + }, + "3657": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP2", + "path": "10" + }, + "3658": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "MSTORE", + "path": "10" + }, + "3659": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3661": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "ADD", + "path": "10" + }, + "3662": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SWAP2", + "path": "10" + }, + "3663": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "POP", + "path": "10" + }, + "3664": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP1", + "path": "10" + }, + "3665": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "MLOAD", + "path": "10" + }, + "3666": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SWAP1", + "path": "10" + }, + "3667": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3669": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "ADD", + "path": "10" + }, + "3670": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SWAP1", + "path": "10" + }, + "3671": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP1", + "path": "10" + }, + "3672": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP4", + "path": "10" + }, + "3673": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP4", + "path": "10" + }, + "3674": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "3676": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "JUMPDEST", + "path": "10" + }, + "3677": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP4", + "path": "10" + }, + "3678": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP2", + "path": "10" + }, + "3679": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "LT", + "path": "10" + }, + "3680": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "ISZERO", + "path": "10" + }, + "3681": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH2", + "path": "10", + "value": "0xE74" + }, + "3684": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "JUMPI", + "path": "10" + }, + "3685": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP2", + "path": "10" + }, + "3686": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP2", + "path": "10" + }, + "3687": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "ADD", + "path": "10" + }, + "3688": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "MLOAD", + "path": "10" + }, + "3689": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP4", + "path": "10" + }, + "3690": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP3", + "path": "10" + }, + "3691": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "ADD", + "path": "10" + }, + "3692": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "MSTORE", + "path": "10" + }, + "3693": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3695": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "ADD", + "path": "10" + }, + "3696": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH2", + "path": "10", + "value": "0xE5C" + }, + "3699": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "JUMP", + "path": "10" + }, + "3700": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "JUMPDEST", + "path": "10" + }, + "3701": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "POP", + "path": "10" + }, + "3702": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "POP", + "path": "10" + }, + "3703": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "POP", + "path": "10" + }, + "3704": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "POP", + "path": "10" + }, + "3705": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SWAP1", + "path": "10" + }, + "3706": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "POP", + "path": "10" + }, + "3707": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SWAP1", + "path": "10" + }, + "3708": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP2", + "path": "10" + }, + "3709": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "ADD", + "path": "10" + }, + "3710": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SWAP1", + "path": "10" + }, + "3711": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH1", + "path": "10", + "value": "0x1F" + }, + "3713": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "AND", + "path": "10" + }, + "3714": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP1", + "path": "10" + }, + "3715": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "ISZERO", + "path": "10" + }, + "3716": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH2", + "path": "10", + "value": "0xEA1" + }, + "3719": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "JUMPI", + "path": "10" + }, + "3720": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP1", + "path": "10" + }, + "3721": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP3", + "path": "10" + }, + "3722": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SUB", + "path": "10" + }, + "3723": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP1", + "path": "10" + }, + "3724": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "MLOAD", + "path": "10" + }, + "3725": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH1", + "path": "10", + "value": "0x1" + }, + "3727": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP4", + "path": "10" + }, + "3728": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3730": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SUB", + "path": "10" + }, + "3731": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH2", + "path": "10", + "value": "0x100" + }, + "3734": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "EXP", + "path": "10" + }, + "3735": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SUB", + "path": "10" + }, + "3736": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "NOT", + "path": "10" + }, + "3737": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "AND", + "path": "10" + }, + "3738": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP2", + "path": "10" + }, + "3739": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "MSTORE", + "path": "10" + }, + "3740": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3742": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "ADD", + "path": "10" + }, + "3743": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SWAP2", + "path": "10" + }, + "3744": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "POP", + "path": "10" + }, + "3745": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "JUMPDEST", + "path": "10" + }, + "3746": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "POP", + "path": "10" + }, + "3747": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SWAP3", + "path": "10" + }, + "3748": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "POP", + "path": "10" + }, + "3749": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "POP", + "path": "10" + }, + "3750": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "POP", + "path": "10" + }, + "3751": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH1", + "path": "10", + "value": "0x40" + }, + "3753": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "MLOAD", + "path": "10" + }, + "3754": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP1", + "path": "10" + }, + "3755": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SWAP2", + "path": "10" + }, + "3756": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SUB", + "path": "10" + }, + "3757": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SWAP1", + "path": "10" + }, + "3758": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "REVERT", + "path": "10" + }, + "3759": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "JUMPDEST", + "path": "10" + }, + "3760": { + "op": "POP" + }, + "3761": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [3007, 3024], + "op": "DUP1", + "path": "10", + "statement": 39 + }, + "3762": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [3007, 3024], + "op": "MLOAD", + "path": "10" + }, + "3763": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [3007, 3017], + "op": "DUP2", + "path": "10" + }, + "3764": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [3007, 3017], + "op": "SWAP1", + "path": "10" + }, + "3765": { + "branch": 108, + "fn": "ProxySupport.callExternalInitializer", + "offset": [3007, 3029], + "op": "ISZERO", + "path": "10" + }, + "3766": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "PUSH2", + "path": "10", + "value": "0xF00" + }, + "3769": { + "branch": 108, + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "JUMPI", + "path": "10" + }, + "3770": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "PUSH1", + "path": "10", + "value": "0x40" + }, + "3772": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "MLOAD", + "path": "10" + }, + "3773": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "3777": { + "op": "PUSH1", + "value": "0xE5" + }, + "3779": { + "op": "SHL" + }, + "3780": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP2", + "path": "10" + }, + "3781": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "MSTORE", + "path": "10" + }, + "3782": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3784": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "PUSH1", + "path": "10", + "value": "0x4" + }, + "3786": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP3", + "path": "10" + }, + "3787": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "ADD", + "path": "10" + }, + "3788": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP2", + "path": "10" + }, + "3789": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP2", + "path": "10" + }, + "3790": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "MSTORE", + "path": "10" + }, + "3791": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP4", + "path": "10" + }, + "3792": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "MLOAD", + "path": "10" + }, + "3793": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "PUSH1", + "path": "10", + "value": "0x24" + }, + "3795": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP5", + "path": "10" + }, + "3796": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "ADD", + "path": "10" + }, + "3797": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "MSTORE", + "path": "10" + }, + "3798": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP4", + "path": "10" + }, + "3799": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "MLOAD", + "path": "10" + }, + "3800": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "SWAP1", + "path": "10" + }, + "3801": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "SWAP3", + "path": "10" + }, + "3802": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP4", + "path": "10" + }, + "3803": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "SWAP3", + "path": "10" + }, + "3804": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "PUSH1", + "path": "10", + "value": "0x44" + }, + "3806": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "SWAP1", + "path": "10" + }, + "3807": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "SWAP2", + "path": "10" + }, + "3808": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "ADD", + "path": "10" + }, + "3809": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "SWAP2", + "path": "10" + }, + "3810": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "SWAP1", + "path": "10" + }, + "3811": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP6", + "path": "10" + }, + "3812": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "ADD", + "path": "10" + }, + "3813": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "SWAP1", + "path": "10" + }, + "3814": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP1", + "path": "10" + }, + "3815": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP4", + "path": "10" + }, + "3816": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP4", + "path": "10" + }, + "3817": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "3819": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP4", + "path": "10" + }, + "3820": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "ISZERO", + "path": "10" + }, + "3821": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "PUSH2", + "path": "10", + "value": "0xE74" + }, + "3824": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "JUMPI", + "path": "10" + }, + "3825": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP2", + "path": "10" + }, + "3826": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP2", + "path": "10" + }, + "3827": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "ADD", + "path": "10" + }, + "3828": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "MLOAD", + "path": "10" + }, + "3829": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP4", + "path": "10" + }, + "3830": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP3", + "path": "10" + }, + "3831": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "ADD", + "path": "10" + }, + "3832": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "MSTORE", + "path": "10" + }, + "3833": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3835": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "ADD", + "path": "10" + }, + "3836": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "PUSH2", + "path": "10", + "value": "0xE5C" + }, + "3839": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "JUMP", + "path": "10" + }, + "3840": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "JUMPDEST", + "path": "10" + }, + "3841": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "POP", + "path": "10" + }, + "3842": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2517, 3057], + "op": "POP", + "path": "10" + }, + "3843": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2517, 3057], + "op": "POP", + "path": "10" + }, + "3844": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2517, 3057], + "op": "POP", + "path": "10" + }, + "3845": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2517, 3057], + "op": "POP", + "path": "10" + }, + "3846": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2517, 3057], + "op": "POP", + "path": "10" + }, + "3847": { + "fn": "ProxySupport.callExternalInitializer", + "jump": "o", + "offset": [2517, 3057], + "op": "JUMP", + "path": "10" + }, + "3848": { + "fn": "StarknetTokenBridge.isInitialized", + "offset": [971, 1102], + "op": "JUMPDEST", + "path": "28" + }, + "3849": { + "fn": "StarknetTokenBridge.isInitialized", + "offset": [1028, 1032], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "3851": { + "fn": "StarknetTokenBridge.isInitialized", + "offset": [1028, 1032], + "op": "DUP1", + "path": "28" + }, + "3852": { + "fn": "StarknetTokenBridge.isInitialized", + "offset": [1051, 1070], + "op": "PUSH2", + "path": "28", + "statement": 40, + "value": "0xF13" + }, + "3855": { + "fn": "StarknetTokenBridge.isInitialized", + "offset": [1051, 1068], + "op": "PUSH2", + "path": "28", + "value": "0x1962" + }, + "3858": { + "fn": "StarknetTokenBridge.isInitialized", + "jump": "i", + "offset": [1051, 1070], + "op": "JUMP", + "path": "28" + }, + "3859": { + "fn": "StarknetTokenBridge.isInitialized", + "offset": [1051, 1070], + "op": "JUMPDEST", + "path": "28" + }, + "3860": { + "op": "PUSH1", + "value": "0x1" + }, + "3862": { + "op": "PUSH1", + "value": "0x1" + }, + "3864": { + "op": "PUSH1", + "value": "0xA0" + }, + "3866": { + "op": "SHL" + }, + "3867": { + "op": "SUB" + }, + "3868": { + "fn": "StarknetTokenBridge.isInitialized", + "offset": [1051, 1095], + "op": "AND", + "path": "28" + }, + "3869": { + "fn": "StarknetTokenBridge.isInitialized", + "offset": [1051, 1095], + "op": "EQ", + "path": "28" + }, + "3870": { + "fn": "StarknetTokenBridge.isInitialized", + "offset": [1051, 1095], + "op": "ISZERO", + "path": "28" + }, + "3871": { + "fn": "StarknetTokenBridge.isInitialized", + "offset": [1044, 1095], + "op": "SWAP1", + "path": "28" + }, + "3872": { + "fn": "StarknetTokenBridge.isInitialized", + "offset": [1044, 1095], + "op": "POP", + "path": "28" + }, + "3873": { + "fn": "StarknetTokenBridge.isInitialized", + "offset": [971, 1102], + "op": "SWAP1", + "path": "28" + }, + "3874": { + "fn": "StarknetTokenBridge.isInitialized", + "jump": "o", + "offset": [971, 1102], + "op": "JUMP", + "path": "28" + }, + "3875": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1209, 1343], + "op": "JUMPDEST", + "path": "28" + }, + "3876": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1312, 1314], + "op": "PUSH1", + "path": "28", + "statement": 41, + "value": "0x40" + }, + "3878": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1297, 1314], + "op": "DUP2", + "path": "28" + }, + "3879": { + "branch": 109, + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1297, 1314], + "op": "EQ", + "path": "28" + }, + "3880": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "PUSH2", + "path": "28", + "value": "0x2C2" + }, + "3883": { + "branch": 109, + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "JUMPI", + "path": "28" + }, + "3884": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "3886": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "DUP1", + "path": "28" + }, + "3887": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "MLOAD", + "path": "28" + }, + "3888": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "3892": { + "op": "PUSH1", + "value": "0xE5" + }, + "3894": { + "op": "SHL" + }, + "3895": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "DUP2", + "path": "28" + }, + "3896": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "MSTORE", + "path": "28" + }, + "3897": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "3899": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "3901": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "DUP3", + "path": "28" + }, + "3902": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "ADD", + "path": "28" + }, + "3903": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "MSTORE", + "path": "28" + }, + "3904": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "PUSH1", + "path": "28", + "value": "0x11" + }, + "3906": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "PUSH1", + "path": "28", + "value": "0x24" + }, + "3908": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "DUP3", + "path": "28" + }, + "3909": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "ADD", + "path": "28" + }, + "3910": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "MSTORE", + "path": "28" + }, + "3911": { + "op": "PUSH17", + "value": "0x494C4C4547414C5F444154415F53495A45" + }, + "3929": { + "op": "PUSH1", + "value": "0x78" + }, + "3931": { + "op": "SHL" + }, + "3932": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "PUSH1", + "path": "28", + "value": "0x44" + }, + "3934": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "DUP3", + "path": "28" + }, + "3935": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "ADD", + "path": "28" + }, + "3936": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "MSTORE", + "path": "28" + }, + "3937": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "SWAP1", + "path": "28" + }, + "3938": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "MLOAD", + "path": "28" + }, + "3939": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "SWAP1", + "path": "28" + }, + "3940": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "DUP2", + "path": "28" + }, + "3941": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "SWAP1", + "path": "28" + }, + "3942": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "SUB", + "path": "28" + }, + "3943": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "PUSH1", + "path": "28", + "value": "0x64" + }, + "3945": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "ADD", + "path": "28" + }, + "3946": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "SWAP1", + "path": "28" + }, + "3947": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "REVERT", + "path": "28" + }, + "3948": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1605, 1924], + "op": "JUMPDEST", + "path": "28" + }, + "3949": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1688, 1709], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "3951": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1711, 1748], + "op": "DUP1", + "path": "28" + }, + "3952": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1776, 1780], + "op": "DUP4", + "path": "28" + }, + "3953": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1776, 1780], + "op": "DUP4", + "path": "28" + }, + "3954": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "3956": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "DUP2", + "path": "28" + }, + "3957": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "LT", + "path": "28" + }, + "3958": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "ISZERO", + "path": "28" + }, + "3959": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "PUSH2", + "path": "28", + "value": "0xF7F" + }, + "3962": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "JUMPI", + "path": "28" + }, + "3963": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "3965": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "DUP1", + "path": "28" + }, + "3966": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "REVERT", + "path": "28" + }, + "3967": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "JUMPDEST", + "path": "28" + }, + "3968": { + "op": "POP" + }, + "3969": { + "op": "PUSH1", + "value": "0x1" + }, + "3971": { + "op": "PUSH1", + "value": "0x1" + }, + "3973": { + "op": "PUSH1", + "value": "0xA0" + }, + "3975": { + "op": "SHL" + }, + "3976": { + "op": "SUB" + }, + "3977": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "DUP2", + "path": "28" + }, + "3978": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "CALLDATALOAD", + "path": "28" + }, + "3979": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "DUP2", + "path": "28" + }, + "3980": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "AND", + "path": "28" + }, + "3981": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "SWAP4", + "path": "28" + }, + "3982": { + "op": "POP" + }, + "3983": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "3985": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "SWAP1", + "path": "28" + }, + "3986": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "SWAP2", + "path": "28" + }, + "3987": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "ADD", + "path": "28" + }, + "3988": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "CALLDATALOAD", + "path": "28" + }, + "3989": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "AND", + "path": "28" + }, + "3990": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "SWAP1", + "path": "28" + }, + "3991": { + "op": "POP" + }, + "3992": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1843, 1870], + "op": "PUSH2", + "path": "28", + "statement": 42, + "value": "0xFA0" + }, + "3995": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "DUP3", + "path": "28" + }, + "3996": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1843, 1855], + "op": "PUSH2", + "path": "28", + "value": "0x1C62" + }, + "3999": { + "fn": "StarknetTokenBridge.initializeContractState", + "jump": "i", + "offset": [1843, 1870], + "op": "JUMP", + "path": "28" + }, + "4000": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1843, 1870], + "op": "JUMPDEST", + "path": "28" + }, + "4001": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1880, 1917], + "op": "PUSH2", + "path": "28", + "statement": 43, + "value": "0xFA9" + }, + "4004": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1898, 1916], + "op": "DUP2", + "path": "28" + }, + "4005": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1880, 1897], + "op": "PUSH2", + "path": "28", + "value": "0x1C84" + }, + "4008": { + "fn": "StarknetTokenBridge.initializeContractState", + "jump": "i", + "offset": [1880, 1917], + "op": "JUMP", + "path": "28" + }, + "4009": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1880, 1917], + "op": "JUMPDEST", + "path": "28" + }, + "4010": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1605, 1924], + "op": "POP", + "path": "28" + }, + "4011": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1605, 1924], + "op": "POP", + "path": "28" + }, + "4012": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1605, 1924], + "op": "POP", + "path": "28" + }, + "4013": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1605, 1924], + "op": "POP", + "path": "28" + }, + "4014": { + "fn": "StarknetTokenBridge.initializeContractState", + "jump": "o", + "offset": [1605, 1924], + "op": "JUMP", + "path": "28" + }, + "4015": { + "fn": "Governance.initGovernance", + "offset": [1529, 1834], + "op": "JUMPDEST", + "path": "1" + }, + "4016": { + "fn": "Governance.initGovernance", + "offset": [1574, 1606], + "op": "PUSH1", + "path": "1", + "value": "0x0" + }, + "4018": { + "fn": "Governance.initGovernance", + "offset": [1609, 1628], + "op": "PUSH2", + "path": "1", + "value": "0xFB9" + }, + "4021": { + "fn": "Governance.initGovernance", + "offset": [1609, 1626], + "op": "PUSH2", + "path": "1", + "value": "0x1BAD" + }, + "4024": { + "fn": "Governance.initGovernance", + "jump": "i", + "offset": [1609, 1628], + "op": "JUMP", + "path": "1" + }, + "4025": { + "fn": "Governance.initGovernance", + "offset": [1609, 1628], + "op": "JUMPDEST", + "path": "1" + }, + "4026": { + "fn": "Governance.initGovernance", + "offset": [1647, 1662], + "op": "PUSH1", + "path": "1", + "statement": 44, + "value": "0x1" + }, + "4028": { + "fn": "Governance.initGovernance", + "offset": [1647, 1662], + "op": "DUP2", + "path": "1" + }, + "4029": { + "fn": "Governance.initGovernance", + "offset": [1647, 1662], + "op": "ADD", + "path": "1" + }, + "4030": { + "fn": "Governance.initGovernance", + "offset": [1647, 1662], + "op": "SLOAD", + "path": "1" + }, + "4031": { + "fn": "Governance.initGovernance", + "offset": [1647, 1662], + "op": "SWAP1", + "path": "1" + }, + "4032": { + "fn": "Governance.initGovernance", + "offset": [1647, 1662], + "op": "SWAP2", + "path": "1" + }, + "4033": { + "op": "POP" + }, + "4034": { + "op": "PUSH1", + "value": "0x1" + }, + "4036": { + "op": "PUSH1", + "value": "0xA0" + }, + "4038": { + "op": "SHL" + }, + "4039": { + "fn": "Governance.initGovernance", + "offset": [1647, 1662], + "op": "SWAP1", + "path": "1" + }, + "4040": { + "fn": "Governance.initGovernance", + "offset": [1647, 1662], + "op": "DIV", + "path": "1" + }, + "4041": { + "fn": "Governance.initGovernance", + "offset": [1647, 1662], + "op": "PUSH1", + "path": "1", + "value": "0xFF" + }, + "4043": { + "fn": "Governance.initGovernance", + "offset": [1647, 1662], + "op": "AND", + "path": "1" + }, + "4044": { + "branch": 93, + "fn": "Governance.initGovernance", + "offset": [1646, 1662], + "op": "ISZERO", + "path": "1" + }, + "4045": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "PUSH2", + "path": "1", + "value": "0x1013" + }, + "4048": { + "branch": 93, + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "JUMPI", + "path": "1" + }, + "4049": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "PUSH1", + "path": "1", + "value": "0x40" + }, + "4051": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "DUP1", + "path": "1" + }, + "4052": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "MLOAD", + "path": "1" + }, + "4053": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "4057": { + "op": "PUSH1", + "value": "0xE5" + }, + "4059": { + "op": "SHL" + }, + "4060": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "DUP2", + "path": "1" + }, + "4061": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "MSTORE", + "path": "1" + }, + "4062": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "PUSH1", + "path": "1", + "value": "0x20" + }, + "4064": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "PUSH1", + "path": "1", + "value": "0x4" + }, + "4066": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "DUP3", + "path": "1" + }, + "4067": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "ADD", + "path": "1" + }, + "4068": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "MSTORE", + "path": "1" + }, + "4069": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "PUSH1", + "path": "1", + "value": "0x13" + }, + "4071": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "PUSH1", + "path": "1", + "value": "0x24" + }, + "4073": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "DUP3", + "path": "1" + }, + "4074": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "ADD", + "path": "1" + }, + "4075": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "MSTORE", + "path": "1" + }, + "4076": { + "op": "PUSH19", + "value": "0x1053149150511657D253925512505312569151" + }, + "4096": { + "op": "PUSH1", + "value": "0x6A" + }, + "4098": { + "op": "SHL" + }, + "4099": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "PUSH1", + "path": "1", + "value": "0x44" + }, + "4101": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "DUP3", + "path": "1" + }, + "4102": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "ADD", + "path": "1" + }, + "4103": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "MSTORE", + "path": "1" + }, + "4104": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "SWAP1", + "path": "1" + }, + "4105": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "MLOAD", + "path": "1" + }, + "4106": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "SWAP1", + "path": "1" + }, + "4107": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "DUP2", + "path": "1" + }, + "4108": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "SWAP1", + "path": "1" + }, + "4109": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "SUB", + "path": "1" + }, + "4110": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "PUSH1", + "path": "1", + "value": "0x64" + }, + "4112": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "ADD", + "path": "1" + }, + "4113": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "SWAP1", + "path": "1" + }, + "4114": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "REVERT", + "path": "1" + }, + "4115": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "JUMPDEST", + "path": "1" + }, + "4116": { + "fn": "Governance.initGovernance", + "offset": [1714, 1718], + "op": "PUSH1", + "path": "1", + "statement": 45, + "value": "0x1" + }, + "4118": { + "fn": "Governance.initGovernance", + "offset": [1696, 1711], + "op": "DUP2", + "path": "1" + }, + "4119": { + "fn": "Governance.initGovernance", + "offset": [1696, 1711], + "op": "ADD", + "path": "1" + }, + "4120": { + "fn": "Governance.initGovernance", + "offset": [1696, 1718], + "op": "DUP1", + "path": "1" + }, + "4121": { + "fn": "Governance.initGovernance", + "offset": [1696, 1718], + "op": "SLOAD", + "path": "1" + }, + "4122": { + "op": "PUSH1", + "value": "0xFF" + }, + "4124": { + "op": "PUSH1", + "value": "0xA0" + }, + "4126": { + "op": "SHL" + }, + "4127": { + "op": "NOT" + }, + "4128": { + "fn": "Governance.initGovernance", + "offset": [1696, 1718], + "op": "AND", + "path": "1" + }, + "4129": { + "op": "PUSH1", + "value": "0x1" + }, + "4131": { + "op": "PUSH1", + "value": "0xA0" + }, + "4133": { + "op": "SHL" + }, + "4134": { + "fn": "Governance.initGovernance", + "offset": [1696, 1718], + "op": "OR", + "path": "1" + }, + "4135": { + "fn": "Governance.initGovernance", + "offset": [1696, 1718], + "op": "SWAP1", + "path": "1" + }, + "4136": { + "fn": "Governance.initGovernance", + "offset": [1696, 1718], + "op": "SSTORE", + "path": "1" + }, + "4137": { + "fn": "Governance.initGovernance", + "offset": [1804, 1827], + "op": "PUSH2", + "path": "1", + "statement": 46, + "value": "0x2E1" + }, + "4140": { + "fn": "Governance.initGovernance", + "offset": [1816, 1826], + "op": "CALLER", + "path": "1" + }, + "4141": { + "fn": "Governance.initGovernance", + "offset": [1804, 1815], + "op": "PUSH2", + "path": "1", + "value": "0x1CA6" + }, + "4144": { + "fn": "Governance.initGovernance", + "jump": "i", + "offset": [1804, 1827], + "op": "JUMP", + "path": "1" + }, + "4145": { + "fn": "Governance.removeGovernor", + "offset": [3747, 4147], + "op": "JUMPDEST", + "path": "1" + }, + "4146": { + "offset": [434, 456], + "op": "PUSH2", + "path": "8", + "value": "0x103A" + }, + "4149": { + "offset": [445, 455], + "op": "CALLER", + "path": "8" + }, + "4150": { + "offset": [434, 444], + "op": "PUSH2", + "path": "8", + "value": "0xC82" + }, + "4153": { + "jump": "i", + "offset": [434, 456], + "op": "JUMP", + "path": "8" + }, + "4154": { + "fn": "Governance.removeGovernor", + "offset": [434, 456], + "op": "JUMPDEST", + "path": "8" + }, + "4155": { + "offset": [426, 476], + "op": "PUSH2", + "path": "8", + "value": "0x107D" + }, + "4158": { + "offset": [426, 476], + "op": "JUMPI", + "path": "8" + }, + "4159": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x40" + }, + "4161": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "DUP1", + "path": "8" + }, + "4162": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "MLOAD", + "path": "8" + }, + "4163": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "4167": { + "op": "PUSH1", + "value": "0xE5" + }, + "4169": { + "op": "SHL" + }, + "4170": { + "offset": [426, 476], + "op": "DUP2", + "path": "8" + }, + "4171": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "4172": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x20" + }, + "4174": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x4" + }, + "4176": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "4177": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "4178": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "4179": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0xF" + }, + "4181": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x24" + }, + "4183": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "4184": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "4185": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "4186": { + "op": "PUSH15", + "value": "0x4F4E4C595F474F5645524E414E4345" + }, + "4202": { + "op": "PUSH1", + "value": "0x88" + }, + "4204": { + "op": "SHL" + }, + "4205": { + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x44" + }, + "4207": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "4208": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "4209": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "4210": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "4211": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "MLOAD", + "path": "8" + }, + "4212": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "4213": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "DUP2", + "path": "8" + }, + "4214": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "4215": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "SUB", + "path": "8" + }, + "4216": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x64" + }, + "4218": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "4219": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "4220": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "REVERT", + "path": "8" + }, + "4221": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "JUMPDEST", + "path": "8" + }, + "4222": { + "fn": "Governance.removeGovernor", + "offset": [3841, 3851], + "op": "CALLER", + "path": "1", + "statement": 47 + }, + "4223": { + "op": "PUSH1", + "value": "0x1" + }, + "4225": { + "op": "PUSH1", + "value": "0x1" + }, + "4227": { + "op": "PUSH1", + "value": "0xA0" + }, + "4229": { + "op": "SHL" + }, + "4230": { + "op": "SUB" + }, + "4231": { + "fn": "Governance.removeGovernor", + "offset": [3841, 3873], + "op": "DUP3", + "path": "1" + }, + "4232": { + "fn": "Governance.removeGovernor", + "offset": [3841, 3873], + "op": "AND", + "path": "1" + }, + "4233": { + "fn": "Governance.removeGovernor", + "offset": [3841, 3873], + "op": "EQ", + "path": "1" + }, + "4234": { + "branch": 94, + "fn": "Governance.removeGovernor", + "offset": [3841, 3873], + "op": "ISZERO", + "path": "1" + }, + "4235": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "PUSH2", + "path": "1", + "value": "0x10D2" + }, + "4238": { + "branch": 94, + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "JUMPI", + "path": "1" + }, + "4239": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "PUSH1", + "path": "1", + "value": "0x40" + }, + "4241": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "DUP1", + "path": "1" + }, + "4242": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "MLOAD", + "path": "1" + }, + "4243": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "4247": { + "op": "PUSH1", + "value": "0xE5" + }, + "4249": { + "op": "SHL" + }, + "4250": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "DUP2", + "path": "1" + }, + "4251": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "MSTORE", + "path": "1" + }, + "4252": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "PUSH1", + "path": "1", + "value": "0x20" + }, + "4254": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "PUSH1", + "path": "1", + "value": "0x4" + }, + "4256": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "DUP3", + "path": "1" + }, + "4257": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "ADD", + "path": "1" + }, + "4258": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "MSTORE", + "path": "1" + }, + "4259": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "PUSH1", + "path": "1", + "value": "0x14" + }, + "4261": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "PUSH1", + "path": "1", + "value": "0x24" + }, + "4263": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "DUP3", + "path": "1" + }, + "4264": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "ADD", + "path": "1" + }, + "4265": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "MSTORE", + "path": "1" + }, + "4266": { + "op": "PUSH20", + "value": "0x474F5645524E4F525F53454C465F52454D4F5645" + }, + "4287": { + "op": "PUSH1", + "value": "0x60" + }, + "4289": { + "op": "SHL" + }, + "4290": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "PUSH1", + "path": "1", + "value": "0x44" + }, + "4292": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "DUP3", + "path": "1" + }, + "4293": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "ADD", + "path": "1" + }, + "4294": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "MSTORE", + "path": "1" + }, + "4295": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "SWAP1", + "path": "1" + }, + "4296": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "MLOAD", + "path": "1" + }, + "4297": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "SWAP1", + "path": "1" + }, + "4298": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "DUP2", + "path": "1" + }, + "4299": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "SWAP1", + "path": "1" + }, + "4300": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "SUB", + "path": "1" + }, + "4301": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "PUSH1", + "path": "1", + "value": "0x64" + }, + "4303": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "ADD", + "path": "1" + }, + "4304": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "SWAP1", + "path": "1" + }, + "4305": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "REVERT", + "path": "1" + }, + "4306": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "JUMPDEST", + "path": "1" + }, + "4307": { + "fn": "Governance.removeGovernor", + "offset": [3908, 3940], + "op": "PUSH1", + "path": "1", + "value": "0x0" + }, + "4309": { + "fn": "Governance.removeGovernor", + "offset": [3943, 3962], + "op": "PUSH2", + "path": "1", + "value": "0x10DC" + }, + "4312": { + "fn": "Governance.removeGovernor", + "offset": [3943, 3960], + "op": "PUSH2", + "path": "1", + "value": "0x1BAD" + }, + "4315": { + "fn": "Governance.removeGovernor", + "jump": "i", + "offset": [3943, 3962], + "op": "JUMP", + "path": "1" + }, + "4316": { + "fn": "Governance.removeGovernor", + "offset": [3943, 3962], + "op": "JUMPDEST", + "path": "1" + }, + "4317": { + "fn": "Governance.removeGovernor", + "offset": [3908, 3962], + "op": "SWAP1", + "path": "1" + }, + "4318": { + "fn": "Governance.removeGovernor", + "offset": [3908, 3962], + "op": "POP", + "path": "1" + }, + "4319": { + "fn": "Governance.removeGovernor", + "offset": [3980, 4010], + "op": "PUSH2", + "path": "1", + "statement": 48, + "value": "0x10E7" + }, + "4322": { + "fn": "Governance.removeGovernor", + "offset": [3991, 4009], + "op": "DUP3", + "path": "1" + }, + "4323": { + "fn": "Governance.removeGovernor", + "offset": [3980, 3990], + "op": "PUSH2", + "path": "1", + "value": "0xC82" + }, + "4326": { + "fn": "Governance.removeGovernor", + "jump": "i", + "offset": [3980, 4010], + "op": "JUMP", + "path": "1" + }, + "4327": { + "branch": 95, + "fn": "Governance.removeGovernor", + "offset": [3980, 4010], + "op": "JUMPDEST", + "path": "1" + }, + "4328": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "PUSH2", + "path": "1", + "value": "0x1127" + }, + "4331": { + "branch": 95, + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "JUMPI", + "path": "1" + }, + "4332": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "PUSH1", + "path": "1", + "value": "0x40" + }, + "4334": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "DUP1", + "path": "1" + }, + "4335": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "MLOAD", + "path": "1" + }, + "4336": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "4340": { + "op": "PUSH1", + "value": "0xE5" + }, + "4342": { + "op": "SHL" + }, + "4343": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "DUP2", + "path": "1" + }, + "4344": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "MSTORE", + "path": "1" + }, + "4345": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "PUSH1", + "path": "1", + "value": "0x20" + }, + "4347": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "PUSH1", + "path": "1", + "value": "0x4" + }, + "4349": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "DUP3", + "path": "1" + }, + "4350": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "ADD", + "path": "1" + }, + "4351": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "MSTORE", + "path": "1" + }, + "4352": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "PUSH1", + "path": "1", + "value": "0xC" + }, + "4354": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "PUSH1", + "path": "1", + "value": "0x24" + }, + "4356": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "DUP3", + "path": "1" + }, + "4357": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "ADD", + "path": "1" + }, + "4358": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "MSTORE", + "path": "1" + }, + "4359": { + "op": "PUSH12", + "value": "0x2727AA2FA3A7AB22A92727A9" + }, + "4372": { + "op": "PUSH1", + "value": "0xA1" + }, + "4374": { + "op": "SHL" + }, + "4375": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "PUSH1", + "path": "1", + "value": "0x44" + }, + "4377": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "DUP3", + "path": "1" + }, + "4378": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "ADD", + "path": "1" + }, + "4379": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "MSTORE", + "path": "1" + }, + "4380": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "SWAP1", + "path": "1" + }, + "4381": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "MLOAD", + "path": "1" + }, + "4382": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "SWAP1", + "path": "1" + }, + "4383": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "DUP2", + "path": "1" + }, + "4384": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "SWAP1", + "path": "1" + }, + "4385": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "SUB", + "path": "1" + }, + "4386": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "PUSH1", + "path": "1", + "value": "0x64" + }, + "4388": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "ADD", + "path": "1" + }, + "4389": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "SWAP1", + "path": "1" + }, + "4390": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "REVERT", + "path": "1" + }, + "4391": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "JUMPDEST", + "path": "1" + }, + "4392": { + "op": "PUSH1", + "value": "0x1" + }, + "4394": { + "op": "PUSH1", + "value": "0x1" + }, + "4396": { + "op": "PUSH1", + "value": "0xA0" + }, + "4398": { + "op": "SHL" + }, + "4399": { + "op": "SUB" + }, + "4400": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4079], + "op": "DUP3", + "path": "1", + "statement": 49 + }, + "4401": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4079], + "op": "AND", + "path": "1" + }, + "4402": { + "fn": "Governance.removeGovernor", + "offset": [4082, 4087], + "op": "PUSH1", + "path": "1", + "value": "0x0" + }, + "4404": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4079], + "op": "DUP2", + "path": "1" + }, + "4405": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4079], + "op": "DUP2", + "path": "1" + }, + "4406": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4079], + "op": "MSTORE", + "path": "1" + }, + "4407": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4079], + "op": "PUSH1", + "path": "1", + "value": "0x20" + }, + "4409": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4079], + "op": "DUP4", + "path": "1" + }, + "4410": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4079], + "op": "DUP2", + "path": "1" + }, + "4411": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4079], + "op": "MSTORE", + "path": "1" + }, + "4412": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4079], + "op": "PUSH1", + "path": "1", + "value": "0x40" + }, + "4414": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4079], + "op": "SWAP2", + "path": "1" + }, + "4415": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4079], + "op": "DUP3", + "path": "1" + }, + "4416": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4079], + "op": "SWAP1", + "path": "1" + }, + "4417": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4079], + "op": "KECCAK256", + "path": "1" + }, + "4418": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4087], + "op": "DUP1", + "path": "1" + }, + "4419": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4087], + "op": "SLOAD", + "path": "1" + }, + "4420": { + "op": "PUSH1", + "value": "0xFF" + }, + "4422": { + "op": "NOT" + }, + "4423": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4087], + "op": "AND", + "path": "1" + }, + "4424": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4087], + "op": "SWAP1", + "path": "1" + }, + "4425": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4087], + "op": "SSTORE", + "path": "1" + }, + "4426": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "DUP2", + "path": "1", + "statement": 50 + }, + "4427": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "MLOAD", + "path": "1" + }, + "4428": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "SWAP3", + "path": "1" + }, + "4429": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "DUP4", + "path": "1" + }, + "4430": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "MSTORE", + "path": "1" + }, + "4431": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "SWAP1", + "path": "1" + }, + "4432": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "MLOAD", + "path": "1" + }, + "4433": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "PUSH32", + "path": "1", + "value": "0xD75F94825E770B8B512BE8E74759E252AD00E102E38F50CCE2F7C6F868A29599" + }, + "4466": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "SWAP3", + "path": "1" + }, + "4467": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "DUP2", + "path": "1" + }, + "4468": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "SWAP1", + "path": "1" + }, + "4469": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "SUB", + "path": "1" + }, + "4470": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "SWAP1", + "path": "1" + }, + "4471": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "SWAP2", + "path": "1" + }, + "4472": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "ADD", + "path": "1" + }, + "4473": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "SWAP1", + "path": "1" + }, + "4474": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "LOG1", + "path": "1" + }, + "4475": { + "offset": [486, 487], + "op": "POP", + "path": "8" + }, + "4476": { + "fn": "Governance.removeGovernor", + "offset": [3747, 4147], + "op": "POP", + "path": "1" + }, + "4477": { + "fn": "Governance.removeGovernor", + "jump": "o", + "offset": [3747, 4147], + "op": "JUMP", + "path": "1" + }, + "4478": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1858, 1979], + "op": "JUMPDEST", + "path": "29" + }, + "4479": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1917, 1972], + "op": "PUSH2", + "path": "29", + "statement": 51, + "value": "0x2E1" + }, + "4482": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "4484": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "MLOAD", + "path": "29" + }, + "4485": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "DUP1", + "path": "29" + }, + "4486": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "PUSH1", + "path": "29", + "value": "0x60" + }, + "4488": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "ADD", + "path": "29" + }, + "4489": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "4491": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "MSTORE", + "path": "29" + }, + "4492": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "DUP1", + "path": "29" + }, + "4493": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "PUSH1", + "path": "29", + "value": "0x27" + }, + "4495": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "DUP2", + "path": "29" + }, + "4496": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "MSTORE", + "path": "29" + }, + "4497": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "PUSH1", + "path": "29", + "value": "0x20" + }, + "4499": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "ADD", + "path": "29" + }, + "4500": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "PUSH2", + "path": "29", + "value": "0x1F06" + }, + "4503": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "PUSH1", + "path": "29", + "value": "0x27" + }, + "4505": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "SWAP2", + "path": "29" + }, + "4506": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "CODECOPY", + "path": "29" + }, + "4507": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1966, 1971], + "op": "DUP3", + "path": "29" + }, + "4508": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1917, 1942], + "op": "PUSH2", + "path": "29", + "value": "0x1D26" + }, + "4511": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "jump": "i", + "offset": [1917, 1972], + "op": "JUMP", + "path": "29" + }, + "4512": { + "fn": "Governance.nominateNewGovernor", + "offset": [2332, 2633], + "op": "JUMPDEST", + "path": "1" + }, + "4513": { + "offset": [434, 456], + "op": "PUSH2", + "path": "8", + "value": "0x11A9" + }, + "4516": { + "offset": [445, 455], + "op": "CALLER", + "path": "8" + }, + "4517": { + "offset": [434, 444], + "op": "PUSH2", + "path": "8", + "value": "0xC82" + }, + "4520": { + "jump": "i", + "offset": [434, 456], + "op": "JUMP", + "path": "8" + }, + "4521": { + "fn": "Governance.nominateNewGovernor", + "offset": [434, 456], + "op": "JUMPDEST", + "path": "8" + }, + "4522": { + "offset": [426, 476], + "op": "PUSH2", + "path": "8", + "value": "0x11EC" + }, + "4525": { + "offset": [426, 476], + "op": "JUMPI", + "path": "8" + }, + "4526": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x40" + }, + "4528": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "DUP1", + "path": "8" + }, + "4529": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "MLOAD", + "path": "8" + }, + "4530": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "4534": { + "op": "PUSH1", + "value": "0xE5" + }, + "4536": { + "op": "SHL" + }, + "4537": { + "offset": [426, 476], + "op": "DUP2", + "path": "8" + }, + "4538": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "4539": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x20" + }, + "4541": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x4" + }, + "4543": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "4544": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "4545": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "4546": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0xF" + }, + "4548": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x24" + }, + "4550": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "4551": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "4552": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "4553": { + "op": "PUSH15", + "value": "0x4F4E4C595F474F5645524E414E4345" + }, + "4569": { + "op": "PUSH1", + "value": "0x88" + }, + "4571": { + "op": "SHL" + }, + "4572": { + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x44" + }, + "4574": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "4575": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "4576": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "4577": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "4578": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "MLOAD", + "path": "8" + }, + "4579": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "4580": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "DUP2", + "path": "8" + }, + "4581": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "4582": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "SUB", + "path": "8" + }, + "4583": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x64" + }, + "4585": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "4586": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "4587": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "REVERT", + "path": "8" + }, + "4588": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "JUMPDEST", + "path": "8" + }, + "4589": { + "fn": "Governance.nominateNewGovernor", + "offset": [2416, 2448], + "op": "PUSH1", + "path": "1", + "value": "0x0" + }, + "4591": { + "fn": "Governance.nominateNewGovernor", + "offset": [2451, 2470], + "op": "PUSH2", + "path": "1", + "value": "0x11F6" + }, + "4594": { + "fn": "Governance.nominateNewGovernor", + "offset": [2451, 2468], + "op": "PUSH2", + "path": "1", + "value": "0x1BAD" + }, + "4597": { + "fn": "Governance.nominateNewGovernor", + "jump": "i", + "offset": [2451, 2470], + "op": "JUMP", + "path": "1" + }, + "4598": { + "fn": "Governance.nominateNewGovernor", + "offset": [2451, 2470], + "op": "JUMPDEST", + "path": "1" + }, + "4599": { + "fn": "Governance.nominateNewGovernor", + "offset": [2416, 2470], + "op": "SWAP1", + "path": "1" + }, + "4600": { + "fn": "Governance.nominateNewGovernor", + "offset": [2416, 2470], + "op": "POP", + "path": "1" + }, + "4601": { + "fn": "Governance.nominateNewGovernor", + "offset": [2489, 2512], + "op": "PUSH2", + "path": "1", + "statement": 52, + "value": "0x1201" + }, + "4604": { + "fn": "Governance.nominateNewGovernor", + "offset": [2500, 2511], + "op": "DUP3", + "path": "1" + }, + "4605": { + "fn": "Governance.nominateNewGovernor", + "offset": [2489, 2499], + "op": "PUSH2", + "path": "1", + "value": "0xC82" + }, + "4608": { + "fn": "Governance.nominateNewGovernor", + "jump": "i", + "offset": [2489, 2512], + "op": "JUMP", + "path": "1" + }, + "4609": { + "fn": "Governance.nominateNewGovernor", + "offset": [2489, 2512], + "op": "JUMPDEST", + "path": "1" + }, + "4610": { + "branch": 96, + "fn": "Governance.nominateNewGovernor", + "offset": [2488, 2512], + "op": "ISZERO", + "path": "1" + }, + "4611": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "PUSH2", + "path": "1", + "value": "0x1246" + }, + "4614": { + "branch": 96, + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "JUMPI", + "path": "1" + }, + "4615": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "PUSH1", + "path": "1", + "value": "0x40" + }, + "4617": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "DUP1", + "path": "1" + }, + "4618": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "MLOAD", + "path": "1" + }, + "4619": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "4623": { + "op": "PUSH1", + "value": "0xE5" + }, + "4625": { + "op": "SHL" + }, + "4626": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "DUP2", + "path": "1" + }, + "4627": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "MSTORE", + "path": "1" + }, + "4628": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "PUSH1", + "path": "1", + "value": "0x20" + }, + "4630": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "PUSH1", + "path": "1", + "value": "0x4" + }, + "4632": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "DUP3", + "path": "1" + }, + "4633": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "ADD", + "path": "1" + }, + "4634": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "MSTORE", + "path": "1" + }, + "4635": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "PUSH1", + "path": "1", + "value": "0x10" + }, + "4637": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "PUSH1", + "path": "1", + "value": "0x24" + }, + "4639": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "DUP3", + "path": "1" + }, + "4640": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "ADD", + "path": "1" + }, + "4641": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "MSTORE", + "path": "1" + }, + "4642": { + "op": "PUSH16", + "value": "0x20A62922A0A22CAFA3A7AB22A92727A9" + }, + "4659": { + "op": "PUSH1", + "value": "0x81" + }, + "4661": { + "op": "SHL" + }, + "4662": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "PUSH1", + "path": "1", + "value": "0x44" + }, + "4664": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "DUP3", + "path": "1" + }, + "4665": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "ADD", + "path": "1" + }, + "4666": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "MSTORE", + "path": "1" + }, + "4667": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "SWAP1", + "path": "1" + }, + "4668": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "MLOAD", + "path": "1" + }, + "4669": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "SWAP1", + "path": "1" + }, + "4670": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "DUP2", + "path": "1" + }, + "4671": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "SWAP1", + "path": "1" + }, + "4672": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "SUB", + "path": "1" + }, + "4673": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "PUSH1", + "path": "1", + "value": "0x64" + }, + "4675": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "ADD", + "path": "1" + }, + "4676": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "SWAP1", + "path": "1" + }, + "4677": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "REVERT", + "path": "1" + }, + "4678": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "JUMPDEST", + "path": "1" + }, + "4679": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2564], + "op": "PUSH1", + "path": "1", + "statement": 53, + "value": "0x1" + }, + "4681": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2564], + "op": "DUP2", + "path": "1" + }, + "4682": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2564], + "op": "ADD", + "path": "1" + }, + "4683": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2578], + "op": "DUP1", + "path": "1" + }, + "4684": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2578], + "op": "SLOAD", + "path": "1" + }, + "4685": { + "op": "PUSH1", + "value": "0x1" + }, + "4687": { + "op": "PUSH1", + "value": "0x1" + }, + "4689": { + "op": "PUSH1", + "value": "0xA0" + }, + "4691": { + "op": "SHL" + }, + "4692": { + "op": "SUB" + }, + "4693": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2578], + "op": "DUP5", + "path": "1" + }, + "4694": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2578], + "op": "AND", + "path": "1" + }, + "4695": { + "op": "PUSH1", + "value": "0x1" + }, + "4697": { + "op": "PUSH1", + "value": "0x1" + }, + "4699": { + "op": "PUSH1", + "value": "0xA0" + }, + "4701": { + "op": "SHL" + }, + "4702": { + "op": "SUB" + }, + "4703": { + "op": "NOT" + }, + "4704": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2578], + "op": "SWAP1", + "path": "1" + }, + "4705": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2578], + "op": "SWAP2", + "path": "1" + }, + "4706": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2578], + "op": "AND", + "path": "1" + }, + "4707": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2578], + "op": "DUP2", + "path": "1" + }, + "4708": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2578], + "op": "OR", + "path": "1" + }, + "4709": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2578], + "op": "SWAP1", + "path": "1" + }, + "4710": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2578], + "op": "SWAP2", + "path": "1" + }, + "4711": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2578], + "op": "SSTORE", + "path": "1" + }, + "4712": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "PUSH1", + "path": "1", + "statement": 54, + "value": "0x40" + }, + "4714": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "DUP1", + "path": "1" + }, + "4715": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "MLOAD", + "path": "1" + }, + "4716": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "SWAP2", + "path": "1" + }, + "4717": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "DUP3", + "path": "1" + }, + "4718": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "MSTORE", + "path": "1" + }, + "4719": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "MLOAD", + "path": "1" + }, + "4720": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "PUSH32", + "path": "1", + "value": "0x6166272C8D3F5F579082F2827532732F97195007983BB5B83AC12C56700B01A6" + }, + "4753": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "SWAP2", + "path": "1" + }, + "4754": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "DUP2", + "path": "1" + }, + "4755": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "SWAP1", + "path": "1" + }, + "4756": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "SUB", + "path": "1" + }, + "4757": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "PUSH1", + "path": "1", + "value": "0x20" + }, + "4759": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "ADD", + "path": "1" + }, + "4760": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "SWAP1", + "path": "1" + }, + "4761": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "LOG1", + "path": "1" + }, + "4762": { + "offset": [486, 487], + "op": "POP", + "path": "8" + }, + "4763": { + "fn": "Governance.nominateNewGovernor", + "offset": [2332, 2633], + "op": "POP", + "path": "1" + }, + "4764": { + "fn": "Governance.nominateNewGovernor", + "jump": "o", + "offset": [2332, 2633], + "op": "JUMP", + "path": "1" + }, + "4765": { + "fn": "Governance.acceptGovernance", + "offset": [3193, 3690], + "op": "JUMPDEST", + "path": "1" + }, + "4766": { + "fn": "Governance.acceptGovernance", + "offset": [3321, 3353], + "op": "PUSH1", + "path": "1", + "value": "0x0" + }, + "4768": { + "fn": "Governance.acceptGovernance", + "offset": [3356, 3375], + "op": "PUSH2", + "path": "1", + "value": "0x12A7" + }, + "4771": { + "fn": "Governance.acceptGovernance", + "offset": [3356, 3373], + "op": "PUSH2", + "path": "1", + "value": "0x1BAD" + }, + "4774": { + "fn": "Governance.acceptGovernance", + "jump": "i", + "offset": [3356, 3375], + "op": "JUMP", + "path": "1" + }, + "4775": { + "fn": "Governance.acceptGovernance", + "offset": [3356, 3375], + "op": "JUMPDEST", + "path": "1" + }, + "4776": { + "fn": "Governance.acceptGovernance", + "offset": [3407, 3428], + "op": "PUSH1", + "path": "1", + "statement": 55, + "value": "0x1" + }, + "4778": { + "fn": "Governance.acceptGovernance", + "offset": [3407, 3428], + "op": "DUP2", + "path": "1" + }, + "4779": { + "fn": "Governance.acceptGovernance", + "offset": [3407, 3428], + "op": "ADD", + "path": "1" + }, + "4780": { + "fn": "Governance.acceptGovernance", + "offset": [3407, 3428], + "op": "SLOAD", + "path": "1" + }, + "4781": { + "fn": "Governance.acceptGovernance", + "offset": [3407, 3428], + "op": "SWAP1", + "path": "1" + }, + "4782": { + "fn": "Governance.acceptGovernance", + "offset": [3407, 3428], + "op": "SWAP2", + "path": "1" + }, + "4783": { + "op": "POP" + }, + "4784": { + "op": "PUSH1", + "value": "0x1" + }, + "4786": { + "op": "PUSH1", + "value": "0x1" + }, + "4788": { + "op": "PUSH1", + "value": "0xA0" + }, + "4790": { + "op": "SHL" + }, + "4791": { + "op": "SUB" + }, + "4792": { + "fn": "Governance.acceptGovernance", + "offset": [3407, 3428], + "op": "AND", + "path": "1" + }, + "4793": { + "fn": "Governance.acceptGovernance", + "offset": [3393, 3403], + "op": "CALLER", + "path": "1" + }, + "4794": { + "branch": 97, + "fn": "Governance.acceptGovernance", + "offset": [3393, 3428], + "op": "EQ", + "path": "1" + }, + "4795": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "PUSH2", + "path": "1", + "value": "0x130B" + }, + "4798": { + "branch": 97, + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "JUMPI", + "path": "1" + }, + "4799": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "PUSH1", + "path": "1", + "value": "0x40" + }, + "4801": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "DUP1", + "path": "1" + }, + "4802": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "MLOAD", + "path": "1" + }, + "4803": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "4807": { + "op": "PUSH1", + "value": "0xE5" + }, + "4809": { + "op": "SHL" + }, + "4810": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "DUP2", + "path": "1" + }, + "4811": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "MSTORE", + "path": "1" + }, + "4812": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "PUSH1", + "path": "1", + "value": "0x20" + }, + "4814": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "PUSH1", + "path": "1", + "value": "0x4" + }, + "4816": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "DUP3", + "path": "1" + }, + "4817": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "ADD", + "path": "1" + }, + "4818": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "MSTORE", + "path": "1" + }, + "4819": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "PUSH1", + "path": "1", + "value": "0x17" + }, + "4821": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "PUSH1", + "path": "1", + "value": "0x24" + }, + "4823": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "DUP3", + "path": "1" + }, + "4824": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "ADD", + "path": "1" + }, + "4825": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "MSTORE", + "path": "1" + }, + "4826": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "PUSH32", + "path": "1", + "value": "0x4F4E4C595F43414E4449444154455F474F5645524E4F52000000000000000000" + }, + "4859": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "PUSH1", + "path": "1", + "value": "0x44" + }, + "4861": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "DUP3", + "path": "1" + }, + "4862": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "ADD", + "path": "1" + }, + "4863": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "MSTORE", + "path": "1" + }, + "4864": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "SWAP1", + "path": "1" + }, + "4865": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "MLOAD", + "path": "1" + }, + "4866": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "SWAP1", + "path": "1" + }, + "4867": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "DUP2", + "path": "1" + }, + "4868": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "SWAP1", + "path": "1" + }, + "4869": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "SUB", + "path": "1" + }, + "4870": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "PUSH1", + "path": "1", + "value": "0x64" + }, + "4872": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "ADD", + "path": "1" + }, + "4873": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "SWAP1", + "path": "1" + }, + "4874": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "REVERT", + "path": "1" + }, + "4875": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "JUMPDEST", + "path": "1" + }, + "4876": { + "fn": "Governance.acceptGovernance", + "offset": [3504, 3525], + "op": "PUSH1", + "path": "1", + "statement": 56, + "value": "0x1" + }, + "4878": { + "fn": "Governance.acceptGovernance", + "offset": [3504, 3525], + "op": "DUP2", + "path": "1" + }, + "4879": { + "fn": "Governance.acceptGovernance", + "offset": [3504, 3525], + "op": "ADD", + "path": "1" + }, + "4880": { + "fn": "Governance.acceptGovernance", + "offset": [3504, 3525], + "op": "SLOAD", + "path": "1" + }, + "4881": { + "fn": "Governance.acceptGovernance", + "offset": [3492, 3526], + "op": "PUSH2", + "path": "1", + "value": "0x1322" + }, + "4884": { + "fn": "Governance.acceptGovernance", + "offset": [3492, 3526], + "op": "SWAP1", + "path": "1" + }, + "4885": { + "op": "PUSH1", + "value": "0x1" + }, + "4887": { + "op": "PUSH1", + "value": "0x1" + }, + "4889": { + "op": "PUSH1", + "value": "0xA0" + }, + "4891": { + "op": "SHL" + }, + "4892": { + "op": "SUB" + }, + "4893": { + "fn": "Governance.acceptGovernance", + "offset": [3504, 3525], + "op": "AND", + "path": "1" + }, + "4894": { + "fn": "Governance.acceptGovernance", + "offset": [3492, 3503], + "op": "PUSH2", + "path": "1", + "value": "0x1CA6" + }, + "4897": { + "fn": "Governance.acceptGovernance", + "jump": "i", + "offset": [3492, 3526], + "op": "JUMP", + "path": "1" + }, + "4898": { + "fn": "Governance.acceptGovernance", + "offset": [3492, 3526], + "op": "JUMPDEST", + "path": "1" + }, + "4899": { + "fn": "Governance.acceptGovernance", + "offset": [3536, 3557], + "op": "PUSH1", + "path": "1", + "statement": 57, + "value": "0x1" + }, + "4901": { + "fn": "Governance.acceptGovernance", + "offset": [3536, 3557], + "op": "DUP2", + "path": "1" + }, + "4902": { + "fn": "Governance.acceptGovernance", + "offset": [3536, 3557], + "op": "ADD", + "path": "1" + }, + "4903": { + "fn": "Governance.acceptGovernance", + "offset": [3536, 3572], + "op": "DUP1", + "path": "1" + }, + "4904": { + "fn": "Governance.acceptGovernance", + "offset": [3536, 3572], + "op": "SLOAD", + "path": "1" + }, + "4905": { + "op": "PUSH1", + "value": "0x1" + }, + "4907": { + "op": "PUSH1", + "value": "0x1" + }, + "4909": { + "op": "PUSH1", + "value": "0xA0" + }, + "4911": { + "op": "SHL" + }, + "4912": { + "op": "SUB" + }, + "4913": { + "op": "NOT" + }, + "4914": { + "fn": "Governance.acceptGovernance", + "offset": [3536, 3572], + "op": "AND", + "path": "1" + }, + "4915": { + "fn": "Governance.acceptGovernance", + "offset": [3536, 3572], + "op": "SWAP1", + "path": "1" + }, + "4916": { + "fn": "Governance.acceptGovernance", + "offset": [3536, 3572], + "op": "SSTORE", + "path": "1" + }, + "4917": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "PUSH1", + "path": "1", + "statement": 58, + "value": "0x40" + }, + "4919": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "DUP1", + "path": "1" + }, + "4920": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "MLOAD", + "path": "1" + }, + "4921": { + "fn": "Governance.acceptGovernance", + "offset": [3672, 3682], + "op": "CALLER", + "path": "1" + }, + "4922": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "DUP2", + "path": "1" + }, + "4923": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "MSTORE", + "path": "1" + }, + "4924": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "SWAP1", + "path": "1" + }, + "4925": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "MLOAD", + "path": "1" + }, + "4926": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "PUSH32", + "path": "1", + "value": "0xCFB473E6C03F9A29DDAF990E736FA3DE5188A0BD85D684F5B6E164EBFBFFF5D2" + }, + "4959": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "SWAP2", + "path": "1" + }, + "4960": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "DUP2", + "path": "1" + }, + "4961": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "SWAP1", + "path": "1" + }, + "4962": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "SUB", + "path": "1" + }, + "4963": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "PUSH1", + "path": "1", + "value": "0x20" + }, + "4965": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "ADD", + "path": "1" + }, + "4966": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "SWAP1", + "path": "1" + }, + "4967": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "LOG1", + "path": "1" + }, + "4968": { + "fn": "Governance.acceptGovernance", + "offset": [3193, 3690], + "op": "POP", + "path": "1" + }, + "4969": { + "fn": "Governance.acceptGovernance", + "jump": "o", + "offset": [3193, 3690], + "op": "JUMP", + "path": "1" + }, + "4970": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [896, 1018], + "op": "JUMPDEST", + "path": "29" + }, + "4971": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [946, 953], + "op": "PUSH1", + "path": "29", + "value": "0x0" + }, + "4973": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [972, 1011], + "op": "PUSH2", + "path": "29", + "statement": 59, + "value": "0xA3C" + }, + "4976": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "4978": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "MLOAD", + "path": "29" + }, + "4979": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "DUP1", + "path": "29" + }, + "4980": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "PUSH1", + "path": "29", + "value": "0x60" + }, + "4982": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "ADD", + "path": "29" + }, + "4983": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "4985": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "MSTORE", + "path": "29" + }, + "4986": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "DUP1", + "path": "29" + }, + "4987": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "PUSH1", + "path": "29", + "value": "0x27" + }, + "4989": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "DUP2", + "path": "29" + }, + "4990": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "MSTORE", + "path": "29" + }, + "4991": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "PUSH1", + "path": "29", + "value": "0x20" + }, + "4993": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "ADD", + "path": "29" + }, + "4994": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "PUSH2", + "path": "29", + "value": "0x1EDF" + }, + "4997": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "PUSH1", + "path": "29", + "value": "0x27" + }, + "4999": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "SWAP2", + "path": "29" + }, + "5000": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "CODECOPY", + "path": "29" + }, + "5001": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [972, 997], + "op": "PUSH2", + "path": "29", + "value": "0x1981" + }, + "5004": { + "fn": "StarknetTokenStorage.l2TokenContract", + "jump": "i", + "offset": [972, 1011], + "op": "JUMP", + "path": "29" + }, + "5005": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1620, 1736], + "op": "JUMPDEST", + "path": "29" + }, + "5006": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1679, 1729], + "op": "PUSH2", + "path": "29", + "statement": 60, + "value": "0x2E1" + }, + "5009": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "5011": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "MLOAD", + "path": "29" + }, + "5012": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "DUP1", + "path": "29" + }, + "5013": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "PUSH1", + "path": "29", + "value": "0x60" + }, + "5015": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "ADD", + "path": "29" + }, + "5016": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "5018": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "MSTORE", + "path": "29" + }, + "5019": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "DUP1", + "path": "29" + }, + "5020": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "PUSH1", + "path": "29", + "value": "0x27" + }, + "5022": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "DUP2", + "path": "29" + }, + "5023": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "MSTORE", + "path": "29" + }, + "5024": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "PUSH1", + "path": "29", + "value": "0x20" + }, + "5026": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "ADD", + "path": "29" + }, + "5027": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "PUSH2", + "path": "29", + "value": "0x1EDF" + }, + "5030": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "PUSH1", + "path": "29", + "value": "0x27" + }, + "5032": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "SWAP2", + "path": "29" + }, + "5033": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "CODECOPY", + "path": "29" + }, + "5034": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1723, 1728], + "op": "DUP3", + "path": "29" + }, + "5035": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1679, 1708], + "op": "PUSH2", + "path": "29", + "value": "0x1DA0" + }, + "5038": { + "fn": "StarknetTokenStorage.l2TokenContract", + "jump": "i", + "offset": [1679, 1729], + "op": "JUMP", + "path": "29" + }, + "5039": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1742, 1852], + "op": "JUMPDEST", + "path": "29" + }, + "5040": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1796, 1845], + "op": "PUSH2", + "path": "29", + "statement": 61, + "value": "0x2E1" + }, + "5043": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "5045": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "MLOAD", + "path": "29" + }, + "5046": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "DUP1", + "path": "29" + }, + "5047": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "PUSH1", + "path": "29", + "value": "0x60" + }, + "5049": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "ADD", + "path": "29" + }, + "5050": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "5052": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "MSTORE", + "path": "29" + }, + "5053": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "DUP1", + "path": "29" + }, + "5054": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "PUSH1", + "path": "29", + "value": "0x21" + }, + "5056": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "DUP2", + "path": "29" + }, + "5057": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "MSTORE", + "path": "29" + }, + "5058": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "PUSH1", + "path": "29", + "value": "0x20" + }, + "5060": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "ADD", + "path": "29" + }, + "5061": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "PUSH2", + "path": "29", + "value": "0x1F2D" + }, + "5064": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "PUSH1", + "path": "29", + "value": "0x21" + }, + "5066": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "SWAP2", + "path": "29" + }, + "5067": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "CODECOPY", + "path": "29" + }, + "5068": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1839, 1844], + "op": "DUP3", + "path": "29" + }, + "5069": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1796, 1821], + "op": "PUSH2", + "path": "29", + "value": "0x1D26" + }, + "5072": { + "fn": "StarknetTokenStorage.maxDeposit", + "jump": "i", + "offset": [1796, 1845], + "op": "JUMP", + "path": "29" + }, + "5073": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1150, 1281], + "op": "JUMPDEST", + "path": "29" + }, + "5074": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1200, 1207], + "op": "PUSH1", + "path": "29", + "value": "0x0" + }, + "5076": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1226, 1274], + "op": "PUSH2", + "path": "29", + "statement": 62, + "value": "0xA3C" + }, + "5079": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "5081": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "MLOAD", + "path": "29" + }, + "5082": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "DUP1", + "path": "29" + }, + "5083": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "PUSH1", + "path": "29", + "value": "0x60" + }, + "5085": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "ADD", + "path": "29" + }, + "5086": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "5088": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "MSTORE", + "path": "29" + }, + "5089": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "DUP1", + "path": "29" + }, + "5090": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "PUSH1", + "path": "29", + "value": "0x27" + }, + "5092": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "DUP2", + "path": "29" + }, + "5093": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "MSTORE", + "path": "29" + }, + "5094": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "PUSH1", + "path": "29", + "value": "0x20" + }, + "5096": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "ADD", + "path": "29" + }, + "5097": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "PUSH2", + "path": "29", + "value": "0x1F06" + }, + "5100": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "PUSH1", + "path": "29", + "value": "0x27" + }, + "5102": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "SWAP2", + "path": "29" + }, + "5103": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "CODECOPY", + "path": "29" + }, + "5104": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1226, 1251], + "op": "PUSH2", + "path": "29", + "value": "0x1981" + }, + "5107": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "jump": "i", + "offset": [1226, 1274], + "op": "JUMP", + "path": "29" + }, + "5108": { + "fn": "Transfers.transferIn", + "offset": [320, 1109], + "op": "JUMPDEST", + "path": "30" + }, + "5109": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "PUSH1", + "path": "30", + "value": "0x40" + }, + "5111": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "DUP1", + "path": "30" + }, + "5112": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "MLOAD", + "path": "30" + }, + "5113": { + "op": "PUSH4", + "value": "0x70A08231" + }, + "5118": { + "op": "PUSH1", + "value": "0xE0" + }, + "5120": { + "op": "SHL" + }, + "5121": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "DUP2", + "path": "30" + }, + "5122": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "MSTORE", + "path": "30" + }, + "5123": { + "fn": "Transfers.transferIn", + "offset": [540, 544], + "op": "ADDRESS", + "path": "30" + }, + "5124": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "PUSH1", + "path": "30", + "value": "0x4" + }, + "5126": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "DUP3", + "path": "30" + }, + "5127": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "ADD", + "path": "30" + }, + "5128": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "MSTORE", + "path": "30" + }, + "5129": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "SWAP1", + "path": "30" + }, + "5130": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "MLOAD", + "path": "30" + }, + "5131": { + "fn": "Transfers.transferIn", + "offset": [464, 469], + "op": "DUP5", + "path": "30" + }, + "5132": { + "fn": "Transfers.transferIn", + "offset": [464, 469], + "op": "SWAP2", + "path": "30" + }, + "5133": { + "fn": "Transfers.transferIn", + "offset": [436, 454], + "op": "PUSH1", + "path": "30", + "value": "0x0" + }, + "5135": { + "fn": "Transfers.transferIn", + "offset": [436, 454], + "op": "SWAP2", + "path": "30" + }, + "5136": { + "op": "PUSH1", + "value": "0x1" + }, + "5138": { + "op": "PUSH1", + "value": "0x1" + }, + "5140": { + "op": "PUSH1", + "value": "0xA0" + }, + "5142": { + "op": "SHL" + }, + "5143": { + "op": "SUB" + }, + "5144": { + "fn": "Transfers.transferIn", + "offset": [510, 531], + "op": "DUP5", + "path": "30" + }, + "5145": { + "fn": "Transfers.transferIn", + "offset": [510, 531], + "op": "AND", + "path": "30" + }, + "5146": { + "fn": "Transfers.transferIn", + "offset": [510, 531], + "op": "SWAP2", + "path": "30" + }, + "5147": { + "fn": "Transfers.transferIn", + "offset": [510, 531], + "op": "PUSH4", + "path": "30", + "value": "0x70A08231" + }, + "5152": { + "fn": "Transfers.transferIn", + "offset": [510, 531], + "op": "SWAP2", + "path": "30" + }, + "5153": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "PUSH1", + "path": "30", + "value": "0x24" + }, + "5155": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "DUP1", + "path": "30" + }, + "5156": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "DUP4", + "path": "30" + }, + "5157": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "ADD", + "path": "30" + }, + "5158": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "SWAP3", + "path": "30" + }, + "5159": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "PUSH1", + "path": "30", + "value": "0x20" + }, + "5161": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "SWAP3", + "path": "30" + }, + "5162": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "SWAP2", + "path": "30" + }, + "5163": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "SWAP1", + "path": "30" + }, + "5164": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "DUP3", + "path": "30" + }, + "5165": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "SWAP1", + "path": "30" + }, + "5166": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "SUB", + "path": "30" + }, + "5167": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "ADD", + "path": "30" + }, + "5168": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "DUP2", + "path": "30" + }, + "5169": { + "fn": "Transfers.transferIn", + "offset": [510, 531], + "op": "DUP7", + "path": "30" + }, + "5170": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "DUP1", + "path": "30" + }, + "5171": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "EXTCODESIZE", + "path": "30" + }, + "5172": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "ISZERO", + "path": "30" + }, + "5173": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "DUP1", + "path": "30" + }, + "5174": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "ISZERO", + "path": "30" + }, + "5175": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "PUSH2", + "path": "30", + "value": "0x143F" + }, + "5178": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "JUMPI", + "path": "30" + }, + "5179": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "PUSH1", + "path": "30", + "value": "0x0" + }, + "5181": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "DUP1", + "path": "30" + }, + "5182": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "REVERT", + "path": "30" + }, + "5183": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "JUMPDEST", + "path": "30" + }, + "5184": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "POP", + "path": "30" + }, + "5185": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "GAS", + "path": "30" + }, + "5186": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "STATICCALL", + "path": "30" + }, + "5187": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "ISZERO", + "path": "30" + }, + "5188": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "DUP1", + "path": "30" + }, + "5189": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "ISZERO", + "path": "30" + }, + "5190": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "PUSH2", + "path": "30", + "value": "0x1453" + }, + "5193": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "JUMPI", + "path": "30" + }, + "5194": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "RETURNDATASIZE", + "path": "30" + }, + "5195": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "PUSH1", + "path": "30", + "value": "0x0" + }, + "5197": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "DUP1", + "path": "30" + }, + "5198": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "RETURNDATACOPY", + "path": "30" + }, + "5199": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "RETURNDATASIZE", + "path": "30" + }, + "5200": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "PUSH1", + "path": "30", + "value": "0x0" + }, + "5202": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "REVERT", + "path": "30" + }, + "5203": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "JUMPDEST", + "path": "30" + }, + "5204": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "POP", + "path": "30" + }, + "5205": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "POP", + "path": "30" + }, + "5206": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "POP", + "path": "30" + }, + "5207": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "POP", + "path": "30" + }, + "5208": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "PUSH1", + "path": "30", + "value": "0x40" + }, + "5210": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "MLOAD", + "path": "30" + }, + "5211": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "RETURNDATASIZE", + "path": "30" + }, + "5212": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "PUSH1", + "path": "30", + "value": "0x20" + }, + "5214": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "DUP2", + "path": "30" + }, + "5215": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "LT", + "path": "30" + }, + "5216": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "ISZERO", + "path": "30" + }, + "5217": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "PUSH2", + "path": "30", + "value": "0x1469" + }, + "5220": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "JUMPI", + "path": "30" + }, + "5221": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "PUSH1", + "path": "30", + "value": "0x0" + }, + "5223": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "DUP1", + "path": "30" + }, + "5224": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "REVERT", + "path": "30" + }, + "5225": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "JUMPDEST", + "path": "30" + }, + "5226": { + "op": "POP" + }, + "5227": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "MLOAD", + "path": "30" + }, + "5228": { + "fn": "Transfers.transferIn", + "offset": [510, 546], + "op": "SWAP1", + "path": "30" + }, + "5229": { + "op": "POP" + }, + "5230": { + "fn": "Transfers.transferIn", + "offset": [564, 592], + "op": "DUP3", + "path": "30", + "statement": 63 + }, + "5231": { + "fn": "Transfers.transferIn", + "offset": [564, 592], + "op": "DUP2", + "path": "30" + }, + "5232": { + "fn": "Transfers.transferIn", + "offset": [564, 592], + "op": "ADD", + "path": "30" + }, + "5233": { + "fn": "Transfers.transferIn", + "offset": [564, 615], + "op": "DUP2", + "path": "30" + }, + "5234": { + "op": "GT" + }, + "5235": { + "branch": 114, + "fn": "Transfers.transferIn", + "offset": [564, 615], + "op": "ISZERO", + "path": "30" + }, + "5236": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "PUSH2", + "path": "30", + "value": "0x14AF" + }, + "5239": { + "branch": 114, + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "JUMPI", + "path": "30" + }, + "5240": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "PUSH1", + "path": "30", + "value": "0x40" + }, + "5242": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "DUP1", + "path": "30" + }, + "5243": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "MLOAD", + "path": "30" + }, + "5244": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "5248": { + "op": "PUSH1", + "value": "0xE5" + }, + "5250": { + "op": "SHL" + }, + "5251": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "DUP2", + "path": "30" + }, + "5252": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "MSTORE", + "path": "30" + }, + "5253": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "PUSH1", + "path": "30", + "value": "0x20" + }, + "5255": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "PUSH1", + "path": "30", + "value": "0x4" + }, + "5257": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "DUP3", + "path": "30" + }, + "5258": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "ADD", + "path": "30" + }, + "5259": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "MSTORE", + "path": "30" + }, + "5260": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "PUSH1", + "path": "30", + "value": "0x8" + }, + "5262": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "PUSH1", + "path": "30", + "value": "0x24" + }, + "5264": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "DUP3", + "path": "30" + }, + "5265": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "ADD", + "path": "30" + }, + "5266": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "MSTORE", + "path": "30" + }, + "5267": { + "op": "PUSH8", + "value": "0x4F564552464C4F57" + }, + "5276": { + "op": "PUSH1", + "value": "0xC0" + }, + "5278": { + "op": "SHL" + }, + "5279": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "PUSH1", + "path": "30", + "value": "0x44" + }, + "5281": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "DUP3", + "path": "30" + }, + "5282": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "ADD", + "path": "30" + }, + "5283": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "MSTORE", + "path": "30" + }, + "5284": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "SWAP1", + "path": "30" + }, + "5285": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "MLOAD", + "path": "30" + }, + "5286": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "SWAP1", + "path": "30" + }, + "5287": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "DUP2", + "path": "30" + }, + "5288": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "SWAP1", + "path": "30" + }, + "5289": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "SUB", + "path": "30" + }, + "5290": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "PUSH1", + "path": "30", + "value": "0x64" + }, + "5292": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "ADD", + "path": "30" + }, + "5293": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "SWAP1", + "path": "30" + }, + "5294": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "REVERT", + "path": "30" + }, + "5295": { + "fn": "Transfers.transferIn", + "offset": [556, 628], + "op": "JUMPDEST", + "path": "30" + }, + "5296": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "PUSH1", + "path": "30", + "value": "0x40" + }, + "5298": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "DUP1", + "path": "30" + }, + "5299": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "MLOAD", + "path": "30" + }, + "5300": { + "op": "PUSH1", + "value": "0x1" + }, + "5302": { + "op": "PUSH1", + "value": "0x1" + }, + "5304": { + "op": "PUSH1", + "value": "0xA0" + }, + "5306": { + "op": "SHL" + }, + "5307": { + "op": "SUB" + }, + "5308": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "DUP1", + "path": "30" + }, + "5309": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "DUP8", + "path": "30" + }, + "5310": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "AND", + "path": "30" + }, + "5311": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "PUSH1", + "path": "30", + "value": "0x24" + }, + "5313": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "DUP4", + "path": "30" + }, + "5314": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "ADD", + "path": "30" + }, + "5315": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "MSTORE", + "path": "30" + }, + "5316": { + "fn": "Transfers.transferIn", + "offset": [773, 777], + "op": "ADDRESS", + "path": "30" + }, + "5317": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "PUSH1", + "path": "30", + "value": "0x44" + }, + "5319": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "DUP4", + "path": "30" + }, + "5320": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "ADD", + "path": "30" + }, + "5321": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "MSTORE", + "path": "30" + }, + "5322": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "PUSH1", + "path": "30", + "value": "0x64" + }, + "5324": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "DUP1", + "path": "30" + }, + "5325": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "DUP4", + "path": "30" + }, + "5326": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "ADD", + "path": "30" + }, + "5327": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "DUP8", + "path": "30" + }, + "5328": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "SWAP1", + "path": "30" + }, + "5329": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "MSTORE", + "path": "30" + }, + "5330": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "DUP4", + "path": "30" + }, + "5331": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "MLOAD", + "path": "30" + }, + "5332": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "DUP1", + "path": "30" + }, + "5333": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "DUP5", + "path": "30" + }, + "5334": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "SUB", + "path": "30" + }, + "5335": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "SWAP1", + "path": "30" + }, + "5336": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "SWAP2", + "path": "30" + }, + "5337": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "ADD", + "path": "30" + }, + "5338": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "DUP2", + "path": "30" + }, + "5339": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "MSTORE", + "path": "30" + }, + "5340": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "PUSH1", + "path": "30", + "value": "0x84" + }, + "5342": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "SWAP1", + "path": "30" + }, + "5343": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "SWAP3", + "path": "30" + }, + "5344": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "ADD", + "path": "30" + }, + "5345": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "SWAP1", + "path": "30" + }, + "5346": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "SWAP3", + "path": "30" + }, + "5347": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "MSTORE", + "path": "30" + }, + "5348": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "PUSH1", + "path": "30", + "value": "0x20" + }, + "5350": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "DUP2", + "path": "30" + }, + "5351": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "ADD", + "path": "30" + }, + "5352": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "DUP1", + "path": "30" + }, + "5353": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "MLOAD", + "path": "30" + }, + "5354": { + "op": "PUSH1", + "value": "0x1" + }, + "5356": { + "op": "PUSH1", + "value": "0x1" + }, + "5358": { + "op": "PUSH1", + "value": "0xE0" + }, + "5360": { + "op": "SHL" + }, + "5361": { + "op": "SUB" + }, + "5362": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "AND", + "path": "30" + }, + "5363": { + "op": "PUSH4", + "value": "0x23B872DD" + }, + "5368": { + "op": "PUSH1", + "value": "0xE0" + }, + "5370": { + "op": "SHL" + }, + "5371": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "OR", + "path": "30" + }, + "5372": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "SWAP1", + "path": "30" + }, + "5373": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "MSTORE", + "path": "30" + }, + "5374": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "SWAP1", + "path": "30" + }, + "5375": { + "fn": "Transfers.transferIn", + "offset": [818, 855], + "op": "PUSH2", + "path": "30", + "statement": 64, + "value": "0x150A" + }, + "5378": { + "fn": "Transfers.transferIn", + "offset": [818, 855], + "op": "SWAP1", + "path": "30" + }, + "5379": { + "fn": "Transfers.transferIn", + "offset": [818, 845], + "op": "DUP8", + "path": "30" + }, + "5380": { + "fn": "Transfers.transferIn", + "offset": [818, 845], + "op": "AND", + "path": "30" + }, + "5381": { + "fn": "Transfers.transferIn", + "offset": [662, 808], + "op": "DUP3", + "path": "30" + }, + "5382": { + "fn": "Transfers.transferIn", + "offset": [818, 845], + "op": "PUSH2", + "path": "30", + "value": "0x19FE" + }, + "5385": { + "fn": "Transfers.transferIn", + "jump": "i", + "offset": [818, 855], + "op": "JUMP", + "path": "30" + }, + "5386": { + "fn": "Transfers.transferIn", + "offset": [818, 855], + "op": "JUMPDEST", + "path": "30" + }, + "5387": { + "fn": "Transfers.transferIn", + "offset": [865, 891], + "op": "PUSH1", + "path": "30", + "value": "0x0" + }, + "5389": { + "fn": "Transfers.transferIn", + "offset": [894, 905], + "op": "DUP4", + "path": "30" + }, + "5390": { + "op": "PUSH1", + "value": "0x1" + }, + "5392": { + "op": "PUSH1", + "value": "0x1" + }, + "5394": { + "op": "PUSH1", + "value": "0xA0" + }, + "5396": { + "op": "SHL" + }, + "5397": { + "op": "SUB" + }, + "5398": { + "fn": "Transfers.transferIn", + "offset": [894, 915], + "op": "AND", + "path": "30" + }, + "5399": { + "fn": "Transfers.transferIn", + "offset": [894, 915], + "op": "PUSH4", + "path": "30", + "value": "0x70A08231" + }, + "5404": { + "fn": "Transfers.transferIn", + "offset": [924, 928], + "op": "ADDRESS", + "path": "30" + }, + "5405": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "PUSH1", + "path": "30", + "value": "0x40" + }, + "5407": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "MLOAD", + "path": "30" + }, + "5408": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "DUP3", + "path": "30" + }, + "5409": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "PUSH4", + "path": "30", + "value": "0xFFFFFFFF" + }, + "5414": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "AND", + "path": "30" + }, + "5415": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "PUSH1", + "path": "30", + "value": "0xE0" + }, + "5417": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "SHL", + "path": "30" + }, + "5418": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "DUP2", + "path": "30" + }, + "5419": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "MSTORE", + "path": "30" + }, + "5420": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "PUSH1", + "path": "30", + "value": "0x4" + }, + "5422": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "ADD", + "path": "30" + }, + "5423": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "DUP1", + "path": "30" + }, + "5424": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "DUP3", + "path": "30" + }, + "5425": { + "op": "PUSH1", + "value": "0x1" + }, + "5427": { + "op": "PUSH1", + "value": "0x1" + }, + "5429": { + "op": "PUSH1", + "value": "0xA0" + }, + "5431": { + "op": "SHL" + }, + "5432": { + "op": "SUB" + }, + "5433": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "AND", + "path": "30" + }, + "5434": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "DUP2", + "path": "30" + }, + "5435": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "MSTORE", + "path": "30" + }, + "5436": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "PUSH1", + "path": "30", + "value": "0x20" + }, + "5438": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "ADD", + "path": "30" + }, + "5439": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "SWAP2", + "path": "30" + }, + "5440": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "POP", + "path": "30" + }, + "5441": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "POP", + "path": "30" + }, + "5442": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "PUSH1", + "path": "30", + "value": "0x20" + }, + "5444": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "PUSH1", + "path": "30", + "value": "0x40" + }, + "5446": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "MLOAD", + "path": "30" + }, + "5447": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "DUP1", + "path": "30" + }, + "5448": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "DUP4", + "path": "30" + }, + "5449": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "SUB", + "path": "30" + }, + "5450": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "DUP2", + "path": "30" + }, + "5451": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "DUP7", + "path": "30" + }, + "5452": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "DUP1", + "path": "30" + }, + "5453": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "EXTCODESIZE", + "path": "30" + }, + "5454": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "ISZERO", + "path": "30" + }, + "5455": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "DUP1", + "path": "30" + }, + "5456": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "ISZERO", + "path": "30" + }, + "5457": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "PUSH2", + "path": "30", + "value": "0x1559" + }, + "5460": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "JUMPI", + "path": "30" + }, + "5461": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "PUSH1", + "path": "30", + "value": "0x0" + }, + "5463": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "DUP1", + "path": "30" + }, + "5464": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "REVERT", + "path": "30" + }, + "5465": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "JUMPDEST", + "path": "30" + }, + "5466": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "POP", + "path": "30" + }, + "5467": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "GAS", + "path": "30" + }, + "5468": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "STATICCALL", + "path": "30" + }, + "5469": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "ISZERO", + "path": "30" + }, + "5470": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "DUP1", + "path": "30" + }, + "5471": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "ISZERO", + "path": "30" + }, + "5472": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "PUSH2", + "path": "30", + "value": "0x156D" + }, + "5475": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "JUMPI", + "path": "30" + }, + "5476": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "RETURNDATASIZE", + "path": "30" + }, + "5477": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "PUSH1", + "path": "30", + "value": "0x0" + }, + "5479": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "DUP1", + "path": "30" + }, + "5480": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "RETURNDATACOPY", + "path": "30" + }, + "5481": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "RETURNDATASIZE", + "path": "30" + }, + "5482": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "PUSH1", + "path": "30", + "value": "0x0" + }, + "5484": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "REVERT", + "path": "30" + }, + "5485": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "JUMPDEST", + "path": "30" + }, + "5486": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "POP", + "path": "30" + }, + "5487": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "POP", + "path": "30" + }, + "5488": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "POP", + "path": "30" + }, + "5489": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "POP", + "path": "30" + }, + "5490": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "PUSH1", + "path": "30", + "value": "0x40" + }, + "5492": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "MLOAD", + "path": "30" + }, + "5493": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "RETURNDATASIZE", + "path": "30" + }, + "5494": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "PUSH1", + "path": "30", + "value": "0x20" + }, + "5496": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "DUP2", + "path": "30" + }, + "5497": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "LT", + "path": "30" + }, + "5498": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "ISZERO", + "path": "30" + }, + "5499": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "PUSH2", + "path": "30", + "value": "0x1583" + }, + "5502": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "JUMPI", + "path": "30" + }, + "5503": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "PUSH1", + "path": "30", + "value": "0x0" + }, + "5505": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "DUP1", + "path": "30" + }, + "5506": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "REVERT", + "path": "30" + }, + "5507": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "JUMPDEST", + "path": "30" + }, + "5508": { + "op": "POP" + }, + "5509": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "MLOAD", + "path": "30" + }, + "5510": { + "fn": "Transfers.transferIn", + "offset": [894, 930], + "op": "SWAP1", + "path": "30" + }, + "5511": { + "op": "POP" + }, + "5512": { + "fn": "Transfers.transferIn", + "offset": [1041, 1069], + "op": "DUP3", + "path": "30", + "statement": 65 + }, + "5513": { + "fn": "Transfers.transferIn", + "offset": [1041, 1069], + "op": "DUP6", + "path": "30" + }, + "5514": { + "fn": "Transfers.transferIn", + "offset": [1041, 1069], + "op": "ADD", + "path": "30" + }, + "5515": { + "fn": "Transfers.transferIn", + "offset": [1019, 1069], + "op": "DUP2", + "path": "30" + }, + "5516": { + "branch": 115, + "fn": "Transfers.transferIn", + "offset": [1019, 1069], + "op": "EQ", + "path": "30" + }, + "5517": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "PUSH2", + "path": "30", + "value": "0xC79" + }, + "5520": { + "branch": 115, + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "JUMPI", + "path": "30" + }, + "5521": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "PUSH1", + "path": "30", + "value": "0x40" + }, + "5523": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "DUP1", + "path": "30" + }, + "5524": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "MLOAD", + "path": "30" + }, + "5525": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "5529": { + "op": "PUSH1", + "value": "0xE5" + }, + "5531": { + "op": "SHL" + }, + "5532": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "DUP2", + "path": "30" + }, + "5533": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "MSTORE", + "path": "30" + }, + "5534": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "PUSH1", + "path": "30", + "value": "0x20" + }, + "5536": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "PUSH1", + "path": "30", + "value": "0x4" + }, + "5538": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "DUP3", + "path": "30" + }, + "5539": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "ADD", + "path": "30" + }, + "5540": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "MSTORE", + "path": "30" + }, + "5541": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "PUSH1", + "path": "30", + "value": "0x1C" + }, + "5543": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "PUSH1", + "path": "30", + "value": "0x24" + }, + "5545": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "DUP3", + "path": "30" + }, + "5546": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "ADD", + "path": "30" + }, + "5547": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "MSTORE", + "path": "30" + }, + "5548": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "PUSH32", + "path": "30", + "value": "0x494E434F52524543545F414D4F554E545F5452414E5346455252454400000000" + }, + "5581": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "PUSH1", + "path": "30", + "value": "0x44" + }, + "5583": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "DUP3", + "path": "30" + }, + "5584": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "ADD", + "path": "30" + }, + "5585": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "MSTORE", + "path": "30" + }, + "5586": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "SWAP1", + "path": "30" + }, + "5587": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "MLOAD", + "path": "30" + }, + "5588": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "SWAP1", + "path": "30" + }, + "5589": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "DUP2", + "path": "30" + }, + "5590": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "SWAP1", + "path": "30" + }, + "5591": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "SUB", + "path": "30" + }, + "5592": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "PUSH1", + "path": "30", + "value": "0x64" + }, + "5594": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "ADD", + "path": "30" + }, + "5595": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "SWAP1", + "path": "30" + }, + "5596": { + "fn": "Transfers.transferIn", + "offset": [1011, 1102], + "op": "REVERT", + "path": "30" + }, + "5597": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3292, 3851], + "op": "JUMPDEST", + "path": "28" + }, + "5598": { + "offset": [2589, 2606], + "op": "PUSH2", + "path": "28", + "value": "0x15E5" + }, + "5601": { + "offset": [2589, 2604], + "op": "PUSH2", + "path": "28", + "value": "0x136A" + }, + "5604": { + "jump": "i", + "offset": [2589, 2606], + "op": "JUMP", + "path": "28" + }, + "5605": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2589, 2606], + "op": "JUMPDEST", + "path": "28" + }, + "5606": { + "offset": [2581, 2641], + "op": "PUSH2", + "path": "28", + "value": "0x1636" + }, + "5609": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "JUMPI", + "path": "28" + }, + "5610": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "5612": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "DUP1", + "path": "28" + }, + "5613": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "MLOAD", + "path": "28" + }, + "5614": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "5618": { + "op": "PUSH1", + "value": "0xE5" + }, + "5620": { + "op": "SHL" + }, + "5621": { + "offset": [2581, 2641], + "op": "DUP2", + "path": "28" + }, + "5622": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "MSTORE", + "path": "28" + }, + "5623": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "5625": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "5627": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "DUP3", + "path": "28" + }, + "5628": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "ADD", + "path": "28" + }, + "5629": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "MSTORE", + "path": "28" + }, + "5630": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "PUSH1", + "path": "28", + "value": "0x19" + }, + "5632": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "PUSH1", + "path": "28", + "value": "0x24" + }, + "5634": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "DUP3", + "path": "28" + }, + "5635": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "ADD", + "path": "28" + }, + "5636": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "MSTORE", + "path": "28" + }, + "5637": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "PUSH32", + "path": "28", + "value": "0x4C325F544F4B454E5F434F4E54524143545F4E4F545F53455400000000000000" + }, + "5670": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "PUSH1", + "path": "28", + "value": "0x44" + }, + "5672": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "DUP3", + "path": "28" + }, + "5673": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "ADD", + "path": "28" + }, + "5674": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "MSTORE", + "path": "28" + }, + "5675": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "SWAP1", + "path": "28" + }, + "5676": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "MLOAD", + "path": "28" + }, + "5677": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "SWAP1", + "path": "28" + }, + "5678": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "DUP2", + "path": "28" + }, + "5679": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "SWAP1", + "path": "28" + }, + "5680": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "SUB", + "path": "28" + }, + "5681": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "PUSH1", + "path": "28", + "value": "0x64" + }, + "5683": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "ADD", + "path": "28" + }, + "5684": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "SWAP1", + "path": "28" + }, + "5685": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "REVERT", + "path": "28" + }, + "5686": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "JUMPDEST", + "path": "28" + }, + "5687": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3419, 3430], + "op": "DUP1", + "path": "28" + }, + "5688": { + "offset": [2260, 2274], + "op": "DUP1", + "path": "28" + }, + "5689": { + "offset": [2252, 2302], + "op": "PUSH2", + "path": "28", + "value": "0x1683" + }, + "5692": { + "offset": [2252, 2302], + "op": "JUMPI", + "path": "28" + }, + "5693": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "5695": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "DUP1", + "path": "28" + }, + "5696": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "MLOAD", + "path": "28" + }, + "5697": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "5701": { + "op": "PUSH1", + "value": "0xE5" + }, + "5703": { + "op": "SHL" + }, + "5704": { + "offset": [2252, 2302], + "op": "DUP2", + "path": "28" + }, + "5705": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "MSTORE", + "path": "28" + }, + "5706": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "5708": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "5710": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "DUP3", + "path": "28" + }, + "5711": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "ADD", + "path": "28" + }, + "5712": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "MSTORE", + "path": "28" + }, + "5713": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "PUSH1", + "path": "28", + "value": "0x17" + }, + "5715": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "PUSH1", + "path": "28", + "value": "0x24" + }, + "5717": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "DUP3", + "path": "28" + }, + "5718": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "ADD", + "path": "28" + }, + "5719": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "MSTORE", + "path": "28" + }, + "5720": { + "op": "PUSH23", + "value": "0x4C325F414444524553535F4F55545F4F465F52414E4745" + }, + "5744": { + "op": "PUSH1", + "value": "0x48" + }, + "5746": { + "op": "SHL" + }, + "5747": { + "offset": [2252, 2302], + "op": "PUSH1", + "path": "28", + "value": "0x44" + }, + "5749": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "DUP3", + "path": "28" + }, + "5750": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "ADD", + "path": "28" + }, + "5751": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "MSTORE", + "path": "28" + }, + "5752": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "SWAP1", + "path": "28" + }, + "5753": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "MLOAD", + "path": "28" + }, + "5754": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "SWAP1", + "path": "28" + }, + "5755": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "DUP2", + "path": "28" + }, + "5756": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "SWAP1", + "path": "28" + }, + "5757": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "SUB", + "path": "28" + }, + "5758": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "PUSH1", + "path": "28", + "value": "0x64" + }, + "5760": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "ADD", + "path": "28" + }, + "5761": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "SWAP1", + "path": "28" + }, + "5762": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "REVERT", + "path": "28" + }, + "5763": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "JUMPDEST", + "path": "28" + }, + "5764": { + "op": "PUSH1", + "value": "0x1" + }, + "5766": { + "op": "PUSH8", + "value": "0x800000000000011" + }, + "5775": { + "op": "PUSH1", + "value": "0xC0" + }, + "5777": { + "op": "SHL" + }, + "5778": { + "op": "ADD" + }, + "5779": { + "offset": [2320, 2329], + "op": "DUP2", + "path": "28" + }, + "5780": { + "offset": [2320, 2358], + "op": "LT", + "path": "28" + }, + "5781": { + "offset": [2312, 2386], + "op": "PUSH2", + "path": "28", + "value": "0x16DF" + }, + "5784": { + "offset": [2312, 2386], + "op": "JUMPI", + "path": "28" + }, + "5785": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "5787": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "DUP1", + "path": "28" + }, + "5788": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "MLOAD", + "path": "28" + }, + "5789": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "5793": { + "op": "PUSH1", + "value": "0xE5" + }, + "5795": { + "op": "SHL" + }, + "5796": { + "offset": [2312, 2386], + "op": "DUP2", + "path": "28" + }, + "5797": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "MSTORE", + "path": "28" + }, + "5798": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "5800": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "5802": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "DUP3", + "path": "28" + }, + "5803": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "ADD", + "path": "28" + }, + "5804": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "MSTORE", + "path": "28" + }, + "5805": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "PUSH1", + "path": "28", + "value": "0x17" + }, + "5807": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "PUSH1", + "path": "28", + "value": "0x24" + }, + "5809": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "DUP3", + "path": "28" + }, + "5810": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "ADD", + "path": "28" + }, + "5811": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "MSTORE", + "path": "28" + }, + "5812": { + "op": "PUSH23", + "value": "0x4C325F414444524553535F4F55545F4F465F52414E4745" + }, + "5836": { + "op": "PUSH1", + "value": "0x48" + }, + "5838": { + "op": "SHL" + }, + "5839": { + "offset": [2312, 2386], + "op": "PUSH1", + "path": "28", + "value": "0x44" + }, + "5841": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "DUP3", + "path": "28" + }, + "5842": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "ADD", + "path": "28" + }, + "5843": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "MSTORE", + "path": "28" + }, + "5844": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "SWAP1", + "path": "28" + }, + "5845": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "MLOAD", + "path": "28" + }, + "5846": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "SWAP1", + "path": "28" + }, + "5847": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "DUP2", + "path": "28" + }, + "5848": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "SWAP1", + "path": "28" + }, + "5849": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "SUB", + "path": "28" + }, + "5850": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "PUSH1", + "path": "28", + "value": "0x64" + }, + "5852": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "ADD", + "path": "28" + }, + "5853": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "SWAP1", + "path": "28" + }, + "5854": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "REVERT", + "path": "28" + }, + "5855": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "JUMPDEST", + "path": "28" + }, + "5856": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3464, 3476], + "op": "PUSH2", + "path": "28", + "statement": 66, + "value": "0x16E7" + }, + "5859": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3464, 3474], + "op": "PUSH2", + "path": "28", + "value": "0x1DF3" + }, + "5862": { + "fn": "StarknetTokenBridge.sendMessage", + "jump": "i", + "offset": [3464, 3476], + "op": "JUMP", + "path": "28" + }, + "5863": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3464, 3476], + "op": "JUMPDEST", + "path": "28" + }, + "5864": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3454, 3460], + "op": "DUP4", + "path": "28" + }, + "5865": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3454, 3476], + "op": "GT", + "path": "28" + }, + "5866": { + "branch": 110, + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3454, 3476], + "op": "ISZERO", + "path": "28" + }, + "5867": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "PUSH2", + "path": "28", + "value": "0x1725" + }, + "5870": { + "branch": 110, + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "JUMPI", + "path": "28" + }, + "5871": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "5873": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "MLOAD", + "path": "28" + }, + "5874": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "5878": { + "op": "PUSH1", + "value": "0xE5" + }, + "5880": { + "op": "SHL" + }, + "5881": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "DUP2", + "path": "28" + }, + "5882": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "MSTORE", + "path": "28" + }, + "5883": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "5885": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "ADD", + "path": "28" + }, + "5886": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "DUP1", + "path": "28" + }, + "5887": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "DUP1", + "path": "28" + }, + "5888": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "5890": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "ADD", + "path": "28" + }, + "5891": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "DUP3", + "path": "28" + }, + "5892": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "DUP2", + "path": "28" + }, + "5893": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "SUB", + "path": "28" + }, + "5894": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "DUP3", + "path": "28" + }, + "5895": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "MSTORE", + "path": "28" + }, + "5896": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "PUSH1", + "path": "28", + "value": "0x24" + }, + "5898": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "DUP2", + "path": "28" + }, + "5899": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "MSTORE", + "path": "28" + }, + "5900": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "5902": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "ADD", + "path": "28" + }, + "5903": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "DUP1", + "path": "28" + }, + "5904": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "PUSH2", + "path": "28", + "value": "0x1EBB" + }, + "5907": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "PUSH1", + "path": "28", + "value": "0x24" + }, + "5909": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "SWAP2", + "path": "28" + }, + "5910": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "CODECOPY", + "path": "28" + }, + "5911": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "5913": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "ADD", + "path": "28" + }, + "5914": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "SWAP2", + "path": "28" + }, + "5915": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "POP", + "path": "28" + }, + "5916": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "POP", + "path": "28" + }, + "5917": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "5919": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "MLOAD", + "path": "28" + }, + "5920": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "DUP1", + "path": "28" + }, + "5921": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "SWAP2", + "path": "28" + }, + "5922": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "SUB", + "path": "28" + }, + "5923": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "SWAP1", + "path": "28" + }, + "5924": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "REVERT", + "path": "28" + }, + "5925": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "JUMPDEST", + "path": "28" + }, + "5926": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "PUSH1", + "path": "28", + "statement": 67, + "value": "0x40" + }, + "5928": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "DUP1", + "path": "28" + }, + "5929": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "MLOAD", + "path": "28" + }, + "5930": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3543, 3553], + "op": "CALLER", + "path": "28" + }, + "5931": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "DUP2", + "path": "28" + }, + "5932": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "MSTORE", + "path": "28" + }, + "5933": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "5935": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "DUP2", + "path": "28" + }, + "5936": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "ADD", + "path": "28" + }, + "5937": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "DUP6", + "path": "28" + }, + "5938": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "SWAP1", + "path": "28" + }, + "5939": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "MSTORE", + "path": "28" + }, + "5940": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "DUP1", + "path": "28" + }, + "5941": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "DUP3", + "path": "28" + }, + "5942": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "ADD", + "path": "28" + }, + "5943": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "DUP5", + "path": "28" + }, + "5944": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "SWAP1", + "path": "28" + }, + "5945": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "MSTORE", + "path": "28" + }, + "5946": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "SWAP1", + "path": "28" + }, + "5947": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "MLOAD", + "path": "28" + }, + "5948": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "PUSH32", + "path": "28", + "value": "0x9DBB0E7DDA3E09710CE75B801ADDC87CF9D9C6C581641B3275FCA409AD086C62" + }, + "5981": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "SWAP2", + "path": "28" + }, + "5982": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "DUP2", + "path": "28" + }, + "5983": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "SWAP1", + "path": "28" + }, + "5984": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "SUB", + "path": "28" + }, + "5985": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "PUSH1", + "path": "28", + "value": "0x60" + }, + "5987": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "ADD", + "path": "28" + }, + "5988": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "SWAP1", + "path": "28" + }, + "5989": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "LOG1", + "path": "28" + }, + "5990": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "5992": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "DUP1", + "path": "28" + }, + "5993": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "MLOAD", + "path": "28" + }, + "5994": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3627, 3628], + "op": "PUSH1", + "path": "28", + "value": "0x3" + }, + "5996": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "DUP1", + "path": "28" + }, + "5997": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "DUP3", + "path": "28" + }, + "5998": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "MSTORE", + "path": "28" + }, + "5999": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "PUSH1", + "path": "28", + "value": "0x80" + }, + "6001": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "DUP3", + "path": "28" + }, + "6002": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "ADD", + "path": "28" + }, + "6003": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "SWAP1", + "path": "28" + }, + "6004": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "SWAP3", + "path": "28" + }, + "6005": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "MSTORE", + "path": "28" + }, + "6006": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3586, 3610], + "op": "PUSH1", + "path": "28", + "value": "0x60" + }, + "6008": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3586, 3610], + "op": "SWAP2", + "path": "28" + }, + "6009": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "6011": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "DUP3", + "path": "28" + }, + "6012": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "ADD", + "path": "28" + }, + "6013": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3586, 3610], + "op": "DUP4", + "path": "28" + }, + "6014": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3586, 3610], + "op": "DUP1", + "path": "28" + }, + "6015": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "CALLDATASIZE", + "path": "28" + }, + "6016": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "DUP4", + "path": "28" + }, + "6017": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "CALLDATACOPY", + "path": "28" + }, + "6018": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "ADD", + "path": "28" + }, + "6019": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "SWAP1", + "path": "28" + }, + "6020": { + "op": "POP" + }, + "6021": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "POP", + "path": "28" + }, + "6022": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3586, 3629], + "op": "SWAP1", + "path": "28" + }, + "6023": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3586, 3629], + "op": "POP", + "path": "28" + }, + "6024": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3652, 3663], + "op": "DUP3", + "path": "28", + "statement": 68 + }, + "6025": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3646], + "op": "DUP2", + "path": "28" + }, + "6026": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3647, 3648], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "6028": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "DUP2", + "path": "28" + }, + "6029": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "MLOAD", + "path": "28" + }, + "6030": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "DUP2", + "path": "28" + }, + "6031": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "LT", + "path": "28" + }, + "6032": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "PUSH2", + "path": "28", + "value": "0x1795" + }, + "6035": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "JUMPI", + "path": "28" + }, + "6036": { + "dev": "Index out of range", + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "INVALID", + "path": "28" + }, + "6037": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "JUMPDEST", + "path": "28" + }, + "6038": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "6040": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "SWAP1", + "path": "28" + }, + "6041": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "DUP2", + "path": "28" + }, + "6042": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "MUL", + "path": "28" + }, + "6043": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "SWAP2", + "path": "28" + }, + "6044": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "SWAP1", + "path": "28" + }, + "6045": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "SWAP2", + "path": "28" + }, + "6046": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "ADD", + "path": "28" + }, + "6047": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "ADD", + "path": "28" + }, + "6048": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3663], + "op": "MSTORE", + "path": "28" + }, + "6049": { + "op": "PUSH1", + "value": "0x1" + }, + "6051": { + "op": "PUSH1", + "value": "0x80" + }, + "6053": { + "op": "SHL" + }, + "6054": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3686, 3692], + "op": "DUP5", + "path": "28", + "statement": 69 + }, + "6055": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3686, 3712], + "op": "MOD", + "path": "28" + }, + "6056": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3680], + "op": "DUP2", + "path": "28" + }, + "6057": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3681, 3682], + "op": "PUSH1", + "path": "28", + "value": "0x1" + }, + "6059": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "DUP2", + "path": "28" + }, + "6060": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "MLOAD", + "path": "28" + }, + "6061": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "DUP2", + "path": "28" + }, + "6062": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "LT", + "path": "28" + }, + "6063": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "PUSH2", + "path": "28", + "value": "0x17B4" + }, + "6066": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "JUMPI", + "path": "28" + }, + "6067": { + "dev": "Index out of range", + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "INVALID", + "path": "28" + }, + "6068": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "JUMPDEST", + "path": "28" + }, + "6069": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "6071": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "SWAP1", + "path": "28" + }, + "6072": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "DUP2", + "path": "28" + }, + "6073": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "MUL", + "path": "28" + }, + "6074": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "SWAP2", + "path": "28" + }, + "6075": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "SWAP1", + "path": "28" + }, + "6076": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "SWAP2", + "path": "28" + }, + "6077": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "ADD", + "path": "28" + }, + "6078": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "ADD", + "path": "28" + }, + "6079": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3712], + "op": "MSTORE", + "path": "28" + }, + "6080": { + "op": "PUSH1", + "value": "0x1" + }, + "6082": { + "op": "PUSH1", + "value": "0x80" + }, + "6084": { + "op": "SHL" + }, + "6085": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3735, 3741], + "op": "DUP5", + "path": "28", + "statement": 70 + }, + "6086": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3735, 3761], + "op": "DIV", + "path": "28" + }, + "6087": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3729], + "op": "DUP2", + "path": "28" + }, + "6088": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3730, 3731], + "op": "PUSH1", + "path": "28", + "value": "0x2" + }, + "6090": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3732], + "op": "DUP2", + "path": "28" + }, + "6091": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3732], + "op": "MLOAD", + "path": "28" + }, + "6092": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3732], + "op": "DUP2", + "path": "28" + }, + "6093": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3732], + "op": "LT", + "path": "28" + }, + "6094": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3732], + "op": "PUSH2", + "path": "28", + "value": "0x17D3" + }, + "6097": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3732], + "op": "JUMPI", + "path": "28" + }, + "6098": { + "dev": "Index out of range", + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3732], + "op": "INVALID", + "path": "28" + }, + "6099": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3732], + "op": "JUMPDEST", + "path": "28" + }, + "6100": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3732], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "6102": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3732], + "op": "MUL", + "path": "28" + }, + "6103": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3732], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "6105": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3732], + "op": "ADD", + "path": "28" + }, + "6106": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3732], + "op": "ADD", + "path": "28" + }, + "6107": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3761], + "op": "DUP2", + "path": "28" + }, + "6108": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3761], + "op": "DUP2", + "path": "28" + }, + "6109": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3761], + "op": "MSTORE", + "path": "28" + }, + "6110": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3761], + "op": "POP", + "path": "28" + }, + "6111": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3761], + "op": "POP", + "path": "28" + }, + "6112": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3790], + "op": "PUSH2", + "path": "28", + "statement": 71, + "value": "0x17E7" + }, + "6115": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3788], + "op": "PUSH2", + "path": "28", + "value": "0x1962" + }, + "6118": { + "fn": "StarknetTokenBridge.sendMessage", + "jump": "i", + "offset": [3771, 3790], + "op": "JUMP", + "path": "28" + }, + "6119": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3790], + "op": "JUMPDEST", + "path": "28" + }, + "6120": { + "op": "PUSH1", + "value": "0x1" + }, + "6122": { + "op": "PUSH1", + "value": "0x1" + }, + "6124": { + "op": "PUSH1", + "value": "0xA0" + }, + "6126": { + "op": "SHL" + }, + "6127": { + "op": "SUB" + }, + "6128": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3806], + "op": "AND", + "path": "28" + }, + "6129": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3806], + "op": "PUSH4", + "path": "28", + "value": "0x3E3AA6C5" + }, + "6134": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3807, 3824], + "op": "PUSH2", + "path": "28", + "value": "0x17FD" + }, + "6137": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3807, 3822], + "op": "PUSH2", + "path": "28", + "value": "0x136A" + }, + "6140": { + "fn": "StarknetTokenBridge.sendMessage", + "jump": "i", + "offset": [3807, 3824], + "op": "JUMP", + "path": "28" + }, + "6141": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3807, 3824], + "op": "JUMPDEST", + "path": "28" + }, + "6142": { + "offset": [2016, 2092], + "op": "PUSH32", + "path": "28", + "value": "0x2D757788A8D8D6F21D1CD40BCE38A8222D70654214E96FF95D8086E684FBEE5" + }, + "6175": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3836, 3843], + "op": "DUP5", + "path": "28" + }, + "6176": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "6178": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "MLOAD", + "path": "28" + }, + "6179": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP5", + "path": "28" + }, + "6180": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH4", + "path": "28", + "value": "0xFFFFFFFF" + }, + "6185": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "AND", + "path": "28" + }, + "6186": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0xE0" + }, + "6188": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "SHL", + "path": "28" + }, + "6189": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP2", + "path": "28" + }, + "6190": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "MSTORE", + "path": "28" + }, + "6191": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "6193": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ADD", + "path": "28" + }, + "6194": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP1", + "path": "28" + }, + "6195": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP5", + "path": "28" + }, + "6196": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP2", + "path": "28" + }, + "6197": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "MSTORE", + "path": "28" + }, + "6198": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "6200": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ADD", + "path": "28" + }, + "6201": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP4", + "path": "28" + }, + "6202": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP2", + "path": "28" + }, + "6203": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "MSTORE", + "path": "28" + }, + "6204": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "6206": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ADD", + "path": "28" + }, + "6207": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP1", + "path": "28" + }, + "6208": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "6210": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ADD", + "path": "28" + }, + "6211": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP3", + "path": "28" + }, + "6212": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP2", + "path": "28" + }, + "6213": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "SUB", + "path": "28" + }, + "6214": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP3", + "path": "28" + }, + "6215": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "MSTORE", + "path": "28" + }, + "6216": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP4", + "path": "28" + }, + "6217": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP2", + "path": "28" + }, + "6218": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP2", + "path": "28" + }, + "6219": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "MLOAD", + "path": "28" + }, + "6220": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP2", + "path": "28" + }, + "6221": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "MSTORE", + "path": "28" + }, + "6222": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "6224": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ADD", + "path": "28" + }, + "6225": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "SWAP2", + "path": "28" + }, + "6226": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "6227": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP1", + "path": "28" + }, + "6228": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "MLOAD", + "path": "28" + }, + "6229": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "SWAP1", + "path": "28" + }, + "6230": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "6232": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ADD", + "path": "28" + }, + "6233": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "SWAP1", + "path": "28" + }, + "6234": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "6236": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "MUL", + "path": "28" + }, + "6237": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP1", + "path": "28" + }, + "6238": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP4", + "path": "28" + }, + "6239": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP4", + "path": "28" + }, + "6240": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "6242": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "JUMPDEST", + "path": "28" + }, + "6243": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP4", + "path": "28" + }, + "6244": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP2", + "path": "28" + }, + "6245": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "LT", + "path": "28" + }, + "6246": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ISZERO", + "path": "28" + }, + "6247": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH2", + "path": "28", + "value": "0x187A" + }, + "6250": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "JUMPI", + "path": "28" + }, + "6251": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP2", + "path": "28" + }, + "6252": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP2", + "path": "28" + }, + "6253": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ADD", + "path": "28" + }, + "6254": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "MLOAD", + "path": "28" + }, + "6255": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP4", + "path": "28" + }, + "6256": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP3", + "path": "28" + }, + "6257": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ADD", + "path": "28" + }, + "6258": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "MSTORE", + "path": "28" + }, + "6259": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "6261": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ADD", + "path": "28" + }, + "6262": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH2", + "path": "28", + "value": "0x1862" + }, + "6265": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "JUMP", + "path": "28" + }, + "6266": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "JUMPDEST", + "path": "28" + }, + "6267": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "6268": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "6269": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "6270": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "6271": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "SWAP1", + "path": "28" + }, + "6272": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "6273": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ADD", + "path": "28" + }, + "6274": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "SWAP5", + "path": "28" + }, + "6275": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "6276": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "6277": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "6278": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "6279": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "6280": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "6282": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "6284": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "MLOAD", + "path": "28" + }, + "6285": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP1", + "path": "28" + }, + "6286": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP4", + "path": "28" + }, + "6287": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "SUB", + "path": "28" + }, + "6288": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP2", + "path": "28" + }, + "6289": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "6291": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP8", + "path": "28" + }, + "6292": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP1", + "path": "28" + }, + "6293": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "EXTCODESIZE", + "path": "28" + }, + "6294": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ISZERO", + "path": "28" + }, + "6295": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP1", + "path": "28" + }, + "6296": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ISZERO", + "path": "28" + }, + "6297": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH2", + "path": "28", + "value": "0x18A1" + }, + "6300": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "JUMPI", + "path": "28" + }, + "6301": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "6303": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP1", + "path": "28" + }, + "6304": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "REVERT", + "path": "28" + }, + "6305": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "JUMPDEST", + "path": "28" + }, + "6306": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "6307": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "GAS", + "path": "28" + }, + "6308": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "CALL", + "path": "28" + }, + "6309": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ISZERO", + "path": "28" + }, + "6310": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP1", + "path": "28" + }, + "6311": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ISZERO", + "path": "28" + }, + "6312": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH2", + "path": "28", + "value": "0x18B5" + }, + "6315": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "JUMPI", + "path": "28" + }, + "6316": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "RETURNDATASIZE", + "path": "28" + }, + "6317": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "6319": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP1", + "path": "28" + }, + "6320": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "RETURNDATACOPY", + "path": "28" + }, + "6321": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "RETURNDATASIZE", + "path": "28" + }, + "6322": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "6324": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "REVERT", + "path": "28" + }, + "6325": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "JUMPDEST", + "path": "28" + }, + "6326": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "6327": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "6328": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "6329": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "6330": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "6332": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "MLOAD", + "path": "28" + }, + "6333": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "RETURNDATASIZE", + "path": "28" + }, + "6334": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "6336": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP2", + "path": "28" + }, + "6337": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "LT", + "path": "28" + }, + "6338": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ISZERO", + "path": "28" + }, + "6339": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH2", + "path": "28", + "value": "0xF00" + }, + "6342": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "JUMPI", + "path": "28" + }, + "6343": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "6345": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP1", + "path": "28" + }, + "6346": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "REVERT", + "path": "28" + }, + "6347": { + "fn": "Governance.cancelNomination", + "offset": [2118, 2326], + "op": "JUMPDEST", + "path": "1" + }, + "6348": { + "offset": [434, 456], + "op": "PUSH2", + "path": "8", + "value": "0x18D4" + }, + "6351": { + "offset": [445, 455], + "op": "CALLER", + "path": "8" + }, + "6352": { + "offset": [434, 444], + "op": "PUSH2", + "path": "8", + "value": "0xC82" + }, + "6355": { + "jump": "i", + "offset": [434, 456], + "op": "JUMP", + "path": "8" + }, + "6356": { + "branch": 99, + "fn": "Governance.cancelNomination", + "offset": [434, 456], + "op": "JUMPDEST", + "path": "8" + }, + "6357": { + "offset": [426, 476], + "op": "PUSH2", + "path": "8", + "value": "0x1917" + }, + "6360": { + "branch": 99, + "offset": [426, 476], + "op": "JUMPI", + "path": "8" + }, + "6361": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x40" + }, + "6363": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "DUP1", + "path": "8" + }, + "6364": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "MLOAD", + "path": "8" + }, + "6365": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "6369": { + "op": "PUSH1", + "value": "0xE5" + }, + "6371": { + "op": "SHL" + }, + "6372": { + "offset": [426, 476], + "op": "DUP2", + "path": "8" + }, + "6373": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "6374": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x20" + }, + "6376": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x4" + }, + "6378": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "6379": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "6380": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "6381": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0xF" + }, + "6383": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x24" + }, + "6385": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "6386": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "6387": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "6388": { + "op": "PUSH15", + "value": "0x4F4E4C595F474F5645524E414E4345" + }, + "6404": { + "op": "PUSH1", + "value": "0x88" + }, + "6406": { + "op": "SHL" + }, + "6407": { + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x44" + }, + "6409": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "6410": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "6411": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "6412": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "6413": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "MLOAD", + "path": "8" + }, + "6414": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "6415": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "DUP2", + "path": "8" + }, + "6416": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "6417": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "SUB", + "path": "8" + }, + "6418": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x64" + }, + "6420": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "6421": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "6422": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "REVERT", + "path": "8" + }, + "6423": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "JUMPDEST", + "path": "8" + }, + "6424": { + "fn": "Governance.cancelNomination", + "offset": [2180, 2212], + "op": "PUSH1", + "path": "1", + "value": "0x0" + }, + "6426": { + "fn": "Governance.cancelNomination", + "offset": [2215, 2234], + "op": "PUSH2", + "path": "1", + "value": "0x1921" + }, + "6429": { + "fn": "Governance.cancelNomination", + "offset": [2215, 2232], + "op": "PUSH2", + "path": "1", + "value": "0x1BAD" + }, + "6432": { + "fn": "Governance.cancelNomination", + "jump": "i", + "offset": [2215, 2234], + "op": "JUMP", + "path": "1" + }, + "6433": { + "fn": "Governance.cancelNomination", + "offset": [2215, 2234], + "op": "JUMPDEST", + "path": "1" + }, + "6434": { + "fn": "Governance.cancelNomination", + "offset": [2244, 2265], + "op": "PUSH1", + "path": "1", + "statement": 72, + "value": "0x1" + }, + "6436": { + "fn": "Governance.cancelNomination", + "offset": [2244, 2265], + "op": "DUP2", + "path": "1" + }, + "6437": { + "fn": "Governance.cancelNomination", + "offset": [2244, 2265], + "op": "ADD", + "path": "1" + }, + "6438": { + "fn": "Governance.cancelNomination", + "offset": [2244, 2280], + "op": "DUP1", + "path": "1" + }, + "6439": { + "fn": "Governance.cancelNomination", + "offset": [2244, 2280], + "op": "SLOAD", + "path": "1" + }, + "6440": { + "op": "PUSH1", + "value": "0x1" + }, + "6442": { + "op": "PUSH1", + "value": "0x1" + }, + "6444": { + "op": "PUSH1", + "value": "0xA0" + }, + "6446": { + "op": "SHL" + }, + "6447": { + "op": "SUB" + }, + "6448": { + "op": "NOT" + }, + "6449": { + "fn": "Governance.cancelNomination", + "offset": [2244, 2280], + "op": "AND", + "path": "1" + }, + "6450": { + "fn": "Governance.cancelNomination", + "offset": [2244, 2280], + "op": "SWAP1", + "path": "1" + }, + "6451": { + "fn": "Governance.cancelNomination", + "offset": [2244, 2280], + "op": "SSTORE", + "path": "1" + }, + "6452": { + "fn": "Governance.cancelNomination", + "offset": [2295, 2319], + "op": "PUSH1", + "path": "1", + "statement": 73, + "value": "0x40" + }, + "6454": { + "fn": "Governance.cancelNomination", + "offset": [2295, 2319], + "op": "MLOAD", + "path": "1" + }, + "6455": { + "fn": "Governance.cancelNomination", + "offset": [2180, 2234], + "op": "SWAP1", + "path": "1" + }, + "6456": { + "fn": "Governance.cancelNomination", + "offset": [2180, 2234], + "op": "SWAP2", + "path": "1" + }, + "6457": { + "op": "POP" + }, + "6458": { + "fn": "Governance.cancelNomination", + "offset": [2295, 2319], + "op": "PUSH32", + "path": "1", + "value": "0x7A8DC7DD7FFFB43C4807438FA62729225156941E641FD877938F4EDADE3429F5" + }, + "6491": { + "fn": "Governance.cancelNomination", + "offset": [2295, 2319], + "op": "SWAP1", + "path": "1" + }, + "6492": { + "fn": "Governance.cancelNomination", + "offset": [2276, 2279], + "op": "PUSH1", + "path": "1", + "value": "0x0" + }, + "6494": { + "fn": "Governance.cancelNomination", + "offset": [2276, 2279], + "op": "SWAP1", + "path": "1" + }, + "6495": { + "fn": "Governance.cancelNomination", + "offset": [2295, 2319], + "op": "LOG1", + "path": "1" + }, + "6496": { + "offset": [486, 487], + "op": "POP", + "path": "8" + }, + "6497": { + "fn": "Governance.cancelNomination", + "jump": "o", + "offset": [2118, 2326], + "op": "JUMP", + "path": "1" + }, + "6498": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1287, 1455], + "op": "JUMPDEST", + "path": "29" + }, + "6499": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1339, 1357], + "op": "PUSH1", + "path": "29", + "value": "0x0" + }, + "6501": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1395, 1447], + "op": "PUSH2", + "path": "29", + "statement": 74, + "value": "0xA3C" + }, + "6504": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "6506": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "MLOAD", + "path": "29" + }, + "6507": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "DUP1", + "path": "29" + }, + "6508": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "PUSH1", + "path": "29", + "value": "0x60" + }, + "6510": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "ADD", + "path": "29" + }, + "6511": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "6513": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "MSTORE", + "path": "29" + }, + "6514": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "DUP1", + "path": "29" + }, + "6515": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "PUSH1", + "path": "29", + "value": "0x28" + }, + "6517": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "DUP2", + "path": "29" + }, + "6518": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "MSTORE", + "path": "29" + }, + "6519": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "PUSH1", + "path": "29", + "value": "0x20" + }, + "6521": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "ADD", + "path": "29" + }, + "6522": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "PUSH2", + "path": "29", + "value": "0x1E93" + }, + "6525": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "PUSH1", + "path": "29", + "value": "0x28" + }, + "6527": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "SWAP2", + "path": "29" + }, + "6528": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "CODECOPY", + "path": "29" + }, + "6529": { + "fn": "NamedStorage.getAddressValue", + "offset": [1752, 1964], + "op": "JUMPDEST", + "path": "0" + }, + "6530": { + "fn": "NamedStorage.getAddressValue", + "offset": [1820, 1834], + "op": "PUSH1", + "path": "0", + "value": "0x0" + }, + "6532": { + "fn": "NamedStorage.getAddressValue", + "offset": [1846, 1858], + "op": "DUP1", + "path": "0" + }, + "6533": { + "fn": "NamedStorage.getAddressValue", + "offset": [1888, 1892], + "op": "DUP3", + "path": "0" + }, + "6534": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "PUSH1", + "path": "0", + "value": "0x40" + }, + "6536": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "MLOAD", + "path": "0" + }, + "6537": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "6539": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "ADD", + "path": "0" + }, + "6540": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "DUP1", + "path": "0" + }, + "6541": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "DUP3", + "path": "0" + }, + "6542": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "DUP1", + "path": "0" + }, + "6543": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "MLOAD", + "path": "0" + }, + "6544": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "SWAP1", + "path": "0" + }, + "6545": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "6547": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "ADD", + "path": "0" + }, + "6548": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "SWAP1", + "path": "0" + }, + "6549": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "DUP1", + "path": "0" + }, + "6550": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "DUP4", + "path": "0" + }, + "6551": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "DUP4", + "path": "0" + }, + "6552": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "JUMPDEST", + "path": "0" + }, + "6553": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "6555": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "DUP4", + "path": "0" + }, + "6556": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "LT", + "path": "0" + }, + "6557": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "PUSH2", + "path": "0", + "value": "0x19B7" + }, + "6560": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "JUMPI", + "path": "0" + }, + "6561": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "DUP1", + "path": "0" + }, + "6562": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "MLOAD", + "path": "0" + }, + "6563": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "DUP3", + "path": "0" + }, + "6564": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "MSTORE", + "path": "0" + }, + "6565": { + "op": "PUSH1", + "value": "0x1F" + }, + "6567": { + "op": "NOT" + }, + "6568": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "SWAP1", + "path": "0" + }, + "6569": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "SWAP3", + "path": "0" + }, + "6570": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "ADD", + "path": "0" + }, + "6571": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "SWAP2", + "path": "0" + }, + "6572": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "6574": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "SWAP2", + "path": "0" + }, + "6575": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "DUP3", + "path": "0" + }, + "6576": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "ADD", + "path": "0" + }, + "6577": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "SWAP2", + "path": "0" + }, + "6578": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "ADD", + "path": "0" + }, + "6579": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "PUSH2", + "path": "0", + "value": "0x1998" + }, + "6582": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "JUMP", + "path": "0" + }, + "6583": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "JUMPDEST", + "path": "0" + }, + "6584": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "PUSH1", + "path": "0", + "value": "0x1" + }, + "6586": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "DUP4", + "path": "0" + }, + "6587": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "6589": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "SUB", + "path": "0" + }, + "6590": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "PUSH2", + "path": "0", + "value": "0x100" + }, + "6593": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "EXP", + "path": "0" + }, + "6594": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "SUB", + "path": "0" + }, + "6595": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "DUP1", + "path": "0" + }, + "6596": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "NOT", + "path": "0" + }, + "6597": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "DUP3", + "path": "0" + }, + "6598": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "MLOAD", + "path": "0" + }, + "6599": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "AND", + "path": "0" + }, + "6600": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "DUP2", + "path": "0" + }, + "6601": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "DUP5", + "path": "0" + }, + "6602": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "MLOAD", + "path": "0" + }, + "6603": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "AND", + "path": "0" + }, + "6604": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "DUP1", + "path": "0" + }, + "6605": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "DUP3", + "path": "0" + }, + "6606": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "OR", + "path": "0" + }, + "6607": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "DUP6", + "path": "0" + }, + "6608": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "MSTORE", + "path": "0" + }, + "6609": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "POP", + "path": "0" + }, + "6610": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "POP", + "path": "0" + }, + "6611": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "POP", + "path": "0" + }, + "6612": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "POP", + "path": "0" + }, + "6613": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "POP", + "path": "0" + }, + "6614": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "POP", + "path": "0" + }, + "6615": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "SWAP1", + "path": "0" + }, + "6616": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "POP", + "path": "0" + }, + "6617": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "ADD", + "path": "0" + }, + "6618": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "SWAP2", + "path": "0" + }, + "6619": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "POP", + "path": "0" + }, + "6620": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "POP", + "path": "0" + }, + "6621": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "PUSH1", + "path": "0", + "value": "0x40" + }, + "6623": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "MLOAD", + "path": "0" + }, + "6624": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "6626": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "DUP2", + "path": "0" + }, + "6627": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "DUP4", + "path": "0" + }, + "6628": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "SUB", + "path": "0" + }, + "6629": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "SUB", + "path": "0" + }, + "6630": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "DUP2", + "path": "0" + }, + "6631": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "MSTORE", + "path": "0" + }, + "6632": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "SWAP1", + "path": "0" + }, + "6633": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "PUSH1", + "path": "0", + "value": "0x40" + }, + "6635": { + "fn": "NamedStorage.getAddressValue", + "offset": [1871, 1893], + "op": "MSTORE", + "path": "0" + }, + "6636": { + "fn": "NamedStorage.getAddressValue", + "offset": [1861, 1894], + "op": "DUP1", + "path": "0" + }, + "6637": { + "fn": "NamedStorage.getAddressValue", + "offset": [1861, 1894], + "op": "MLOAD", + "path": "0" + }, + "6638": { + "fn": "NamedStorage.getAddressValue", + "offset": [1861, 1894], + "op": "SWAP1", + "path": "0" + }, + "6639": { + "fn": "NamedStorage.getAddressValue", + "offset": [1861, 1894], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "6641": { + "fn": "NamedStorage.getAddressValue", + "offset": [1861, 1894], + "op": "ADD", + "path": "0" + }, + "6642": { + "fn": "NamedStorage.getAddressValue", + "offset": [1861, 1894], + "op": "KECCAK256", + "path": "0" + }, + "6643": { + "fn": "NamedStorage.getAddressValue", + "offset": [1846, 1894], + "op": "SWAP1", + "path": "0" + }, + "6644": { + "fn": "NamedStorage.getAddressValue", + "offset": [1846, 1894], + "op": "POP", + "path": "0" + }, + "6645": { + "fn": "NamedStorage.getAddressValue", + "offset": [1943, 1947], + "op": "DUP1", + "path": "0" + }, + "6646": { + "fn": "NamedStorage.getAddressValue", + "offset": [1937, 1948], + "op": "SLOAD", + "path": "0" + }, + "6647": { + "fn": "NamedStorage.getAddressValue", + "offset": [1927, 1948], + "op": "SWAP2", + "path": "0" + }, + "6648": { + "fn": "NamedStorage.getAddressValue", + "offset": [1927, 1948], + "op": "POP", + "path": "0" + }, + "6649": { + "fn": "NamedStorage.getAddressValue", + "offset": [1913, 1958], + "op": "POP", + "path": "0" + }, + "6650": { + "fn": "NamedStorage.getAddressValue", + "offset": [1913, 1958], + "op": "SWAP2", + "path": "0" + }, + "6651": { + "fn": "NamedStorage.getAddressValue", + "offset": [1913, 1958], + "op": "SWAP1", + "path": "0" + }, + "6652": { + "fn": "NamedStorage.getAddressValue", + "offset": [1913, 1958], + "op": "POP", + "path": "0" + }, + "6653": { + "fn": "NamedStorage.getAddressValue", + "jump": "o", + "offset": [1913, 1958], + "op": "JUMP", + "path": "0" + }, + "6654": { + "fn": "Addresses.safeTokenContractCall", + "offset": [784, 1236], + "op": "JUMPDEST", + "path": "11" + }, + "6655": { + "fn": "Addresses.safeTokenContractCall", + "offset": [887, 911], + "op": "PUSH2", + "path": "11", + "statement": 75, + "value": "0x1A07" + }, + "6658": { + "fn": "Addresses.safeTokenContractCall", + "offset": [898, 910], + "op": "DUP3", + "path": "11" + }, + "6659": { + "fn": "Addresses.safeTokenContractCall", + "offset": [887, 897], + "op": "PUSH2", + "path": "11", + "value": "0x1C5C" + }, + "6662": { + "fn": "Addresses.safeTokenContractCall", + "jump": "i", + "offset": [887, 911], + "op": "JUMP", + "path": "11" + }, + "6663": { + "branch": 88, + "fn": "Addresses.safeTokenContractCall", + "offset": [887, 911], + "op": "JUMPDEST", + "path": "11" + }, + "6664": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "PUSH2", + "path": "11", + "value": "0x1A4C" + }, + "6667": { + "branch": 88, + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "JUMPI", + "path": "11" + }, + "6668": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "PUSH1", + "path": "11", + "value": "0x40" + }, + "6670": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "DUP1", + "path": "11" + }, + "6671": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "MLOAD", + "path": "11" + }, + "6672": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "6676": { + "op": "PUSH1", + "value": "0xE5" + }, + "6678": { + "op": "SHL" + }, + "6679": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "DUP2", + "path": "11" + }, + "6680": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "MSTORE", + "path": "11" + }, + "6681": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "PUSH1", + "path": "11", + "value": "0x20" + }, + "6683": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "PUSH1", + "path": "11", + "value": "0x4" + }, + "6685": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "DUP3", + "path": "11" + }, + "6686": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "ADD", + "path": "11" + }, + "6687": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "MSTORE", + "path": "11" + }, + "6688": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "PUSH1", + "path": "11", + "value": "0x11" + }, + "6690": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "PUSH1", + "path": "11", + "value": "0x24" + }, + "6692": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "DUP3", + "path": "11" + }, + "6693": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "ADD", + "path": "11" + }, + "6694": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "MSTORE", + "path": "11" + }, + "6695": { + "op": "PUSH17", + "value": "0x4241445F544F4B454E5F41444452455353" + }, + "6713": { + "op": "PUSH1", + "value": "0x78" + }, + "6715": { + "op": "SHL" + }, + "6716": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "PUSH1", + "path": "11", + "value": "0x44" + }, + "6718": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "DUP3", + "path": "11" + }, + "6719": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "ADD", + "path": "11" + }, + "6720": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "MSTORE", + "path": "11" + }, + "6721": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "SWAP1", + "path": "11" + }, + "6722": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "MLOAD", + "path": "11" + }, + "6723": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "SWAP1", + "path": "11" + }, + "6724": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "DUP2", + "path": "11" + }, + "6725": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "SWAP1", + "path": "11" + }, + "6726": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "SUB", + "path": "11" + }, + "6727": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "PUSH1", + "path": "11", + "value": "0x64" + }, + "6729": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "ADD", + "path": "11" + }, + "6730": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "SWAP1", + "path": "11" + }, + "6731": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "REVERT", + "path": "11" + }, + "6732": { + "fn": "Addresses.safeTokenContractCall", + "offset": [879, 933], + "op": "JUMPDEST", + "path": "11" + }, + "6733": { + "fn": "Addresses.safeTokenContractCall", + "offset": [988, 1000], + "op": "PUSH1", + "path": "11", + "value": "0x0" + }, + "6735": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1002, 1025], + "op": "PUSH1", + "path": "11", + "value": "0x60" + }, + "6737": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1041], + "op": "DUP4", + "path": "11" + }, + "6738": { + "op": "PUSH1", + "value": "0x1" + }, + "6740": { + "op": "PUSH1", + "value": "0x1" + }, + "6742": { + "op": "PUSH1", + "value": "0xA0" + }, + "6744": { + "op": "SHL" + }, + "6745": { + "op": "SUB" + }, + "6746": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1046], + "op": "AND", + "path": "11" + }, + "6747": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1047, 1055], + "op": "DUP4", + "path": "11" + }, + "6748": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "PUSH1", + "path": "11", + "value": "0x40" + }, + "6750": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "MLOAD", + "path": "11" + }, + "6751": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "DUP1", + "path": "11" + }, + "6752": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "DUP3", + "path": "11" + }, + "6753": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "DUP1", + "path": "11" + }, + "6754": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "MLOAD", + "path": "11" + }, + "6755": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "SWAP1", + "path": "11" + }, + "6756": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "PUSH1", + "path": "11", + "value": "0x20" + }, + "6758": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "ADD", + "path": "11" + }, + "6759": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "SWAP1", + "path": "11" + }, + "6760": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "DUP1", + "path": "11" + }, + "6761": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "DUP4", + "path": "11" + }, + "6762": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "DUP4", + "path": "11" + }, + "6763": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "JUMPDEST", + "path": "11" + }, + "6764": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "PUSH1", + "path": "11", + "value": "0x20" + }, + "6766": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "DUP4", + "path": "11" + }, + "6767": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "LT", + "path": "11" + }, + "6768": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "PUSH2", + "path": "11", + "value": "0x1A8A" + }, + "6771": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "JUMPI", + "path": "11" + }, + "6772": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "DUP1", + "path": "11" + }, + "6773": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "MLOAD", + "path": "11" + }, + "6774": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "DUP3", + "path": "11" + }, + "6775": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "MSTORE", + "path": "11" + }, + "6776": { + "op": "PUSH1", + "value": "0x1F" + }, + "6778": { + "op": "NOT" + }, + "6779": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "SWAP1", + "path": "11" + }, + "6780": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "SWAP3", + "path": "11" + }, + "6781": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "ADD", + "path": "11" + }, + "6782": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "SWAP2", + "path": "11" + }, + "6783": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "PUSH1", + "path": "11", + "value": "0x20" + }, + "6785": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "SWAP2", + "path": "11" + }, + "6786": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "DUP3", + "path": "11" + }, + "6787": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "ADD", + "path": "11" + }, + "6788": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "SWAP2", + "path": "11" + }, + "6789": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "ADD", + "path": "11" + }, + "6790": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "PUSH2", + "path": "11", + "value": "0x1A6B" + }, + "6793": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "JUMP", + "path": "11" + }, + "6794": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "JUMPDEST", + "path": "11" + }, + "6795": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "PUSH1", + "path": "11", + "value": "0x1" + }, + "6797": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "DUP4", + "path": "11" + }, + "6798": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "PUSH1", + "path": "11", + "value": "0x20" + }, + "6800": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "SUB", + "path": "11" + }, + "6801": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "PUSH2", + "path": "11", + "value": "0x100" + }, + "6804": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "EXP", + "path": "11" + }, + "6805": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "SUB", + "path": "11" + }, + "6806": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "DUP1", + "path": "11" + }, + "6807": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "NOT", + "path": "11" + }, + "6808": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "DUP3", + "path": "11" + }, + "6809": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "MLOAD", + "path": "11" + }, + "6810": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "AND", + "path": "11" + }, + "6811": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "DUP2", + "path": "11" + }, + "6812": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "DUP5", + "path": "11" + }, + "6813": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "MLOAD", + "path": "11" + }, + "6814": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "AND", + "path": "11" + }, + "6815": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "DUP1", + "path": "11" + }, + "6816": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "DUP3", + "path": "11" + }, + "6817": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "OR", + "path": "11" + }, + "6818": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "DUP6", + "path": "11" + }, + "6819": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "MSTORE", + "path": "11" + }, + "6820": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "POP", + "path": "11" + }, + "6821": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "POP", + "path": "11" + }, + "6822": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "POP", + "path": "11" + }, + "6823": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "POP", + "path": "11" + }, + "6824": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "POP", + "path": "11" + }, + "6825": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "POP", + "path": "11" + }, + "6826": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "SWAP1", + "path": "11" + }, + "6827": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "POP", + "path": "11" + }, + "6828": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "ADD", + "path": "11" + }, + "6829": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "SWAP2", + "path": "11" + }, + "6830": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "POP", + "path": "11" + }, + "6831": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "POP", + "path": "11" + }, + "6832": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "PUSH1", + "path": "11", + "value": "0x0" + }, + "6834": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "PUSH1", + "path": "11", + "value": "0x40" + }, + "6836": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "MLOAD", + "path": "11" + }, + "6837": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "DUP1", + "path": "11" + }, + "6838": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "DUP4", + "path": "11" + }, + "6839": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "SUB", + "path": "11" + }, + "6840": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "DUP2", + "path": "11" + }, + "6841": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "PUSH1", + "path": "11", + "value": "0x0" + }, + "6843": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "DUP7", + "path": "11" + }, + "6844": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "GAS", + "path": "11" + }, + "6845": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "CALL", + "path": "11" + }, + "6846": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "SWAP2", + "path": "11" + }, + "6847": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "POP", + "path": "11" + }, + "6848": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "POP", + "path": "11" + }, + "6849": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "RETURNDATASIZE", + "path": "11" + }, + "6850": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "DUP1", + "path": "11" + }, + "6851": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "PUSH1", + "path": "11", + "value": "0x0" + }, + "6853": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "DUP2", + "path": "11" + }, + "6854": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "EQ", + "path": "11" + }, + "6855": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "PUSH2", + "path": "11", + "value": "0x1AEC" + }, + "6858": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "JUMPI", + "path": "11" + }, + "6859": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "PUSH1", + "path": "11", + "value": "0x40" + }, + "6861": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "MLOAD", + "path": "11" + }, + "6862": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "SWAP2", + "path": "11" + }, + "6863": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "POP", + "path": "11" + }, + "6864": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "PUSH1", + "path": "11", + "value": "0x1F" + }, + "6866": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "NOT", + "path": "11" + }, + "6867": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "PUSH1", + "path": "11", + "value": "0x3F" + }, + "6869": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "RETURNDATASIZE", + "path": "11" + }, + "6870": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "ADD", + "path": "11" + }, + "6871": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "AND", + "path": "11" + }, + "6872": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "DUP3", + "path": "11" + }, + "6873": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "ADD", + "path": "11" + }, + "6874": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "PUSH1", + "path": "11", + "value": "0x40" + }, + "6876": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "MSTORE", + "path": "11" + }, + "6877": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "RETURNDATASIZE", + "path": "11" + }, + "6878": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "DUP3", + "path": "11" + }, + "6879": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "MSTORE", + "path": "11" + }, + "6880": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "RETURNDATASIZE", + "path": "11" + }, + "6881": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "PUSH1", + "path": "11", + "value": "0x0" + }, + "6883": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "PUSH1", + "path": "11", + "value": "0x20" + }, + "6885": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "DUP5", + "path": "11" + }, + "6886": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "ADD", + "path": "11" + }, + "6887": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "RETURNDATACOPY", + "path": "11" + }, + "6888": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "PUSH2", + "path": "11", + "value": "0x1AF1" + }, + "6891": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "JUMP", + "path": "11" + }, + "6892": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "JUMPDEST", + "path": "11" + }, + "6893": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "PUSH1", + "path": "11", + "value": "0x60" + }, + "6895": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "SWAP2", + "path": "11" + }, + "6896": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "POP", + "path": "11" + }, + "6897": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "JUMPDEST", + "path": "11" + }, + "6898": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1029, 1056], + "op": "POP", + "path": "11" + }, + "6899": { + "fn": "Addresses.safeTokenContractCall", + "offset": [987, 1056], + "op": "SWAP2", + "path": "11" + }, + "6900": { + "fn": "Addresses.safeTokenContractCall", + "offset": [987, 1056], + "op": "POP", + "path": "11" + }, + "6901": { + "fn": "Addresses.safeTokenContractCall", + "offset": [987, 1056], + "op": "SWAP2", + "path": "11" + }, + "6902": { + "fn": "Addresses.safeTokenContractCall", + "offset": [987, 1056], + "op": "POP", + "path": "11" + }, + "6903": { + "branch": 89, + "fn": "Addresses.safeTokenContractCall", + "offset": [1074, 1081], + "op": "DUP2", + "path": "11", + "statement": 76 + }, + "6904": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1090, 1100], + "op": "DUP2", + "path": "11" + }, + "6905": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "SWAP1", + "path": "11" + }, + "6906": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "PUSH2", + "path": "11", + "value": "0x1B44" + }, + "6909": { + "branch": 89, + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "JUMPI", + "path": "11" + }, + "6910": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "PUSH1", + "path": "11", + "value": "0x40" + }, + "6912": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "MLOAD", + "path": "11" + }, + "6913": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "6917": { + "op": "PUSH1", + "value": "0xE5" + }, + "6919": { + "op": "SHL" + }, + "6920": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "DUP2", + "path": "11" + }, + "6921": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "MSTORE", + "path": "11" + }, + "6922": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "PUSH1", + "path": "11", + "value": "0x20" + }, + "6924": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "PUSH1", + "path": "11", + "value": "0x4" + }, + "6926": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "DUP3", + "path": "11" + }, + "6927": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "ADD", + "path": "11" + }, + "6928": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "DUP2", + "path": "11" + }, + "6929": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "DUP2", + "path": "11" + }, + "6930": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "MSTORE", + "path": "11" + }, + "6931": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "DUP4", + "path": "11" + }, + "6932": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "MLOAD", + "path": "11" + }, + "6933": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "PUSH1", + "path": "11", + "value": "0x24" + }, + "6935": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "DUP5", + "path": "11" + }, + "6936": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "ADD", + "path": "11" + }, + "6937": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "MSTORE", + "path": "11" + }, + "6938": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "DUP4", + "path": "11" + }, + "6939": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "MLOAD", + "path": "11" + }, + "6940": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "SWAP1", + "path": "11" + }, + "6941": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "SWAP3", + "path": "11" + }, + "6942": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "DUP4", + "path": "11" + }, + "6943": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "SWAP3", + "path": "11" + }, + "6944": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "PUSH1", + "path": "11", + "value": "0x44" + }, + "6946": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "SWAP1", + "path": "11" + }, + "6947": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "SWAP2", + "path": "11" + }, + "6948": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "ADD", + "path": "11" + }, + "6949": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "SWAP2", + "path": "11" + }, + "6950": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "SWAP1", + "path": "11" + }, + "6951": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "DUP6", + "path": "11" + }, + "6952": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "ADD", + "path": "11" + }, + "6953": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "SWAP1", + "path": "11" + }, + "6954": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "DUP1", + "path": "11" + }, + "6955": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "DUP4", + "path": "11" + }, + "6956": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "DUP4", + "path": "11" + }, + "6957": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "PUSH1", + "path": "11", + "value": "0x0" + }, + "6959": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "DUP4", + "path": "11" + }, + "6960": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "ISZERO", + "path": "11" + }, + "6961": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "PUSH2", + "path": "11", + "value": "0xE74" + }, + "6964": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "JUMPI", + "path": "11" + }, + "6965": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "DUP2", + "path": "11" + }, + "6966": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "DUP2", + "path": "11" + }, + "6967": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "ADD", + "path": "11" + }, + "6968": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "MLOAD", + "path": "11" + }, + "6969": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "DUP4", + "path": "11" + }, + "6970": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "DUP3", + "path": "11" + }, + "6971": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "ADD", + "path": "11" + }, + "6972": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "MSTORE", + "path": "11" + }, + "6973": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "PUSH1", + "path": "11", + "value": "0x20" + }, + "6975": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "ADD", + "path": "11" + }, + "6976": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "PUSH2", + "path": "11", + "value": "0xE5C" + }, + "6979": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "JUMP", + "path": "11" + }, + "6980": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1066, 1102], + "op": "JUMPDEST", + "path": "11" + }, + "6981": { + "op": "POP" + }, + "6982": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1117, 1134], + "op": "DUP1", + "path": "11" + }, + "6983": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1117, 1134], + "op": "MLOAD", + "path": "11" + }, + "6984": { + "branch": 90, + "fn": "Addresses.safeTokenContractCall", + "offset": [1117, 1138], + "op": "ISZERO", + "path": "11" + }, + "6985": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1113, 1230], + "op": "PUSH2", + "path": "11", + "value": "0xFA9" + }, + "6988": { + "branch": 90, + "fn": "Addresses.safeTokenContractCall", + "offset": [1113, 1230], + "op": "JUMPI", + "path": "11" + }, + "6989": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1173, 1183], + "op": "DUP1", + "path": "11", + "statement": 77 + }, + "6990": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1162, 1192], + "op": "DUP1", + "path": "11" + }, + "6991": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1162, 1192], + "op": "PUSH1", + "path": "11", + "value": "0x20" + }, + "6993": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1162, 1192], + "op": "ADD", + "path": "11" + }, + "6994": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1162, 1192], + "op": "SWAP1", + "path": "11" + }, + "6995": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1162, 1192], + "op": "MLOAD", + "path": "11" + }, + "6996": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1162, 1192], + "op": "PUSH1", + "path": "11", + "value": "0x20" + }, + "6998": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1162, 1192], + "op": "DUP2", + "path": "11" + }, + "6999": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1162, 1192], + "op": "LT", + "path": "11" + }, + "7000": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1162, 1192], + "op": "ISZERO", + "path": "11" + }, + "7001": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1162, 1192], + "op": "PUSH2", + "path": "11", + "value": "0x1B61" + }, + "7004": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1162, 1192], + "op": "JUMPI", + "path": "11" + }, + "7005": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1162, 1192], + "op": "PUSH1", + "path": "11", + "value": "0x0" + }, + "7007": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1162, 1192], + "op": "DUP1", + "path": "11" + }, + "7008": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1162, 1192], + "op": "REVERT", + "path": "11" + }, + "7009": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1162, 1192], + "op": "JUMPDEST", + "path": "11" + }, + "7010": { + "op": "POP" + }, + "7011": { + "branch": 91, + "fn": "Addresses.safeTokenContractCall", + "offset": [1162, 1192], + "op": "MLOAD", + "path": "11" + }, + "7012": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "PUSH2", + "path": "11", + "value": "0xFA9" + }, + "7015": { + "branch": 91, + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "JUMPI", + "path": "11" + }, + "7016": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "PUSH1", + "path": "11", + "value": "0x40" + }, + "7018": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "DUP1", + "path": "11" + }, + "7019": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "MLOAD", + "path": "11" + }, + "7020": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "7024": { + "op": "PUSH1", + "value": "0xE5" + }, + "7026": { + "op": "SHL" + }, + "7027": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "DUP2", + "path": "11" + }, + "7028": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "MSTORE", + "path": "11" + }, + "7029": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "PUSH1", + "path": "11", + "value": "0x20" + }, + "7031": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "PUSH1", + "path": "11", + "value": "0x4" + }, + "7033": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "DUP3", + "path": "11" + }, + "7034": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "ADD", + "path": "11" + }, + "7035": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "MSTORE", + "path": "11" + }, + "7036": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "PUSH1", + "path": "11", + "value": "0x16" + }, + "7038": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "PUSH1", + "path": "11", + "value": "0x24" + }, + "7040": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "DUP3", + "path": "11" + }, + "7041": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "ADD", + "path": "11" + }, + "7042": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "MSTORE", + "path": "11" + }, + "7043": { + "op": "PUSH22", + "value": "0x1513D2D15397D3D4115490551253D397D19052531151" + }, + "7066": { + "op": "PUSH1", + "value": "0x52" + }, + "7068": { + "op": "SHL" + }, + "7069": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "PUSH1", + "path": "11", + "value": "0x44" + }, + "7071": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "DUP3", + "path": "11" + }, + "7072": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "ADD", + "path": "11" + }, + "7073": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "MSTORE", + "path": "11" + }, + "7074": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "SWAP1", + "path": "11" + }, + "7075": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "MLOAD", + "path": "11" + }, + "7076": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "SWAP1", + "path": "11" + }, + "7077": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "DUP2", + "path": "11" + }, + "7078": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "SWAP1", + "path": "11" + }, + "7079": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "SUB", + "path": "11" + }, + "7080": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "PUSH1", + "path": "11", + "value": "0x64" + }, + "7082": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "ADD", + "path": "11" + }, + "7083": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "SWAP1", + "path": "11" + }, + "7084": { + "fn": "Addresses.safeTokenContractCall", + "offset": [1154, 1219], + "op": "REVERT", + "path": "11" + }, + "7085": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [361, 611], + "op": "JUMPDEST", + "path": "34" + }, + "7086": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [422, 454], + "op": "PUSH1", + "path": "34", + "value": "0x0" + }, + "7088": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [466, 482], + "op": "DUP1", + "path": "34" + }, + "7089": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "PUSH1", + "path": "34", + "value": "0x40" + }, + "7091": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "MLOAD", + "path": "34" + }, + "7092": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "DUP1", + "path": "34" + }, + "7093": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "PUSH1", + "path": "34", + "value": "0x40" + }, + "7095": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "ADD", + "path": "34" + }, + "7096": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "PUSH1", + "path": "34", + "value": "0x40" + }, + "7098": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "MSTORE", + "path": "34" + }, + "7099": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "DUP1", + "path": "34" + }, + "7100": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "PUSH1", + "path": "34", + "value": "0x1C" + }, + "7102": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "DUP2", + "path": "34" + }, + "7103": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "MSTORE", + "path": "34" + }, + "7104": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "PUSH1", + "path": "34", + "value": "0x20" + }, + "7106": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "ADD", + "path": "34" + }, + "7107": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "PUSH32", + "path": "34", + "value": "0x535441524B4E45545F312E305F474F5645524E414E43455F494E464F00000000" + }, + "7140": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "DUP2", + "path": "34" + }, + "7141": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "MSTORE", + "path": "34" + }, + "7142": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "POP", + "path": "34" + }, + "7143": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "PUSH1", + "path": "34", + "value": "0x40" + }, + "7145": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "MLOAD", + "path": "34" + }, + "7146": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "PUSH1", + "path": "34", + "value": "0x20" + }, + "7148": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "ADD", + "path": "34" + }, + "7149": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP1", + "path": "34" + }, + "7150": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP3", + "path": "34" + }, + "7151": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP1", + "path": "34" + }, + "7152": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "MLOAD", + "path": "34" + }, + "7153": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "SWAP1", + "path": "34" + }, + "7154": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "PUSH1", + "path": "34", + "value": "0x20" + }, + "7156": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "ADD", + "path": "34" + }, + "7157": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "SWAP1", + "path": "34" + }, + "7158": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP1", + "path": "34" + }, + "7159": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP4", + "path": "34" + }, + "7160": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP4", + "path": "34" + }, + "7161": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "JUMPDEST", + "path": "34" + }, + "7162": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "PUSH1", + "path": "34", + "value": "0x20" + }, + "7164": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP4", + "path": "34" + }, + "7165": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "LT", + "path": "34" + }, + "7166": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "PUSH2", + "path": "34", + "value": "0x1C18" + }, + "7169": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "JUMPI", + "path": "34" + }, + "7170": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP1", + "path": "34" + }, + "7171": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "MLOAD", + "path": "34" + }, + "7172": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP3", + "path": "34" + }, + "7173": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "MSTORE", + "path": "34" + }, + "7174": { + "op": "PUSH1", + "value": "0x1F" + }, + "7176": { + "op": "NOT" + }, + "7177": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "SWAP1", + "path": "34" + }, + "7178": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "SWAP3", + "path": "34" + }, + "7179": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "ADD", + "path": "34" + }, + "7180": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "SWAP2", + "path": "34" + }, + "7181": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "PUSH1", + "path": "34", + "value": "0x20" + }, + "7183": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "SWAP2", + "path": "34" + }, + "7184": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP3", + "path": "34" + }, + "7185": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "ADD", + "path": "34" + }, + "7186": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "SWAP2", + "path": "34" + }, + "7187": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "ADD", + "path": "34" + }, + "7188": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "PUSH2", + "path": "34", + "value": "0x1BF9" + }, + "7191": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "JUMP", + "path": "34" + }, + "7192": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "JUMPDEST", + "path": "34" + }, + "7193": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "PUSH1", + "path": "34", + "value": "0x1" + }, + "7195": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP4", + "path": "34" + }, + "7196": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "PUSH1", + "path": "34", + "value": "0x20" + }, + "7198": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "SUB", + "path": "34" + }, + "7199": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "PUSH2", + "path": "34", + "value": "0x100" + }, + "7202": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "EXP", + "path": "34" + }, + "7203": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "SUB", + "path": "34" + }, + "7204": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP1", + "path": "34" + }, + "7205": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "NOT", + "path": "34" + }, + "7206": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP3", + "path": "34" + }, + "7207": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "MLOAD", + "path": "34" + }, + "7208": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "AND", + "path": "34" + }, + "7209": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP2", + "path": "34" + }, + "7210": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP5", + "path": "34" + }, + "7211": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "MLOAD", + "path": "34" + }, + "7212": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "AND", + "path": "34" + }, + "7213": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP1", + "path": "34" + }, + "7214": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP3", + "path": "34" + }, + "7215": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "OR", + "path": "34" + }, + "7216": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP6", + "path": "34" + }, + "7217": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "MSTORE", + "path": "34" + }, + "7218": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "POP", + "path": "34" + }, + "7219": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "POP", + "path": "34" + }, + "7220": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "POP", + "path": "34" + }, + "7221": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "POP", + "path": "34" + }, + "7222": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "POP", + "path": "34" + }, + "7223": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "POP", + "path": "34" + }, + "7224": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "SWAP1", + "path": "34" + }, + "7225": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "POP", + "path": "34" + }, + "7226": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "ADD", + "path": "34" + }, + "7227": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "SWAP2", + "path": "34" + }, + "7228": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "POP", + "path": "34" + }, + "7229": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "POP", + "path": "34" + }, + "7230": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "PUSH1", + "path": "34", + "value": "0x40" + }, + "7232": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "MLOAD", + "path": "34" + }, + "7233": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "PUSH1", + "path": "34", + "value": "0x20" + }, + "7235": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP2", + "path": "34" + }, + "7236": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP4", + "path": "34" + }, + "7237": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "SUB", + "path": "34" + }, + "7238": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "SUB", + "path": "34" + }, + "7239": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP2", + "path": "34" + }, + "7240": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "MSTORE", + "path": "34" + }, + "7241": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "SWAP1", + "path": "34" + }, + "7242": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "PUSH1", + "path": "34", + "value": "0x40" + }, + "7244": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "MSTORE", + "path": "34" + }, + "7245": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [485, 542], + "op": "DUP1", + "path": "34" + }, + "7246": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [485, 542], + "op": "MLOAD", + "path": "34" + }, + "7247": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [485, 542], + "op": "SWAP1", + "path": "34" + }, + "7248": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [485, 542], + "op": "PUSH1", + "path": "34", + "value": "0x20" + }, + "7250": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [485, 542], + "op": "ADD", + "path": "34" + }, + "7251": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [485, 542], + "op": "KECCAK256", + "path": "34" + }, + "7252": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [466, 542], + "op": "SWAP1", + "path": "34" + }, + "7253": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [466, 542], + "op": "POP", + "path": "34" + }, + "7254": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [587, 595], + "op": "DUP1", + "path": "34" + }, + "7255": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [575, 595], + "op": "SWAP2", + "path": "34" + }, + "7256": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [575, 595], + "op": "POP", + "path": "34" + }, + "7257": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [561, 605], + "op": "POP", + "path": "34" + }, + "7258": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [561, 605], + "op": "SWAP1", + "path": "34" + }, + "7259": { + "fn": "StarknetGovernance.getGovernanceInfo", + "jump": "o", + "offset": [561, 605], + "op": "JUMP", + "path": "34" + }, + "7260": { + "fn": "Addresses.isContract", + "offset": [161, 351], + "op": "JUMPDEST", + "path": "11" + }, + "7261": { + "fn": "Addresses.isContract", + "offset": [290, 310], + "op": "EXTCODESIZE", + "path": "11" + }, + "7262": { + "fn": "Addresses.isContract", + "offset": [336, 344], + "op": "ISZERO", + "path": "11", + "statement": 78 + }, + "7263": { + "fn": "Addresses.isContract", + "offset": [336, 344], + "op": "ISZERO", + "path": "11" + }, + "7264": { + "fn": "Addresses.isContract", + "offset": [336, 344], + "op": "SWAP1", + "path": "11" + }, + "7265": { + "fn": "Addresses.isContract", + "jump": "o", + "offset": [161, 351], + "op": "JUMP", + "path": "11" + }, + "7266": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1485, 1614], + "op": "JUMPDEST", + "path": "29" + }, + "7267": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1545, 1607], + "op": "PUSH2", + "path": "29", + "statement": 79, + "value": "0x2E1" + }, + "7270": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "7272": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "MLOAD", + "path": "29" + }, + "7273": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "DUP1", + "path": "29" + }, + "7274": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "PUSH1", + "path": "29", + "value": "0x60" + }, + "7276": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "ADD", + "path": "29" + }, + "7277": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "7279": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "MSTORE", + "path": "29" + }, + "7280": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "DUP1", + "path": "29" + }, + "7281": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "PUSH1", + "path": "29", + "value": "0x29" + }, + "7283": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "DUP2", + "path": "29" + }, + "7284": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "MSTORE", + "path": "29" + }, + "7285": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "PUSH1", + "path": "29", + "value": "0x20" + }, + "7287": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "ADD", + "path": "29" + }, + "7288": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "PUSH2", + "path": "29", + "value": "0x1F4E" + }, + "7291": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "PUSH1", + "path": "29", + "value": "0x29" + }, + "7293": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "SWAP2", + "path": "29" + }, + "7294": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "CODECOPY", + "path": "29" + }, + "7295": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1597, 1606], + "op": "DUP3", + "path": "29" + }, + "7296": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1545, 1577], + "op": "PUSH2", + "path": "29", + "value": "0x1E16" + }, + "7299": { + "fn": "StarknetTokenStorage.bridgedToken", + "jump": "i", + "offset": [1545, 1607], + "op": "JUMP", + "path": "29" + }, + "7300": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1985, 2144], + "op": "JUMPDEST", + "path": "29" + }, + "7301": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2061, 2137], + "op": "PUSH2", + "path": "29", + "statement": 80, + "value": "0x2E1" + }, + "7304": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "7306": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "MLOAD", + "path": "29" + }, + "7307": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "DUP1", + "path": "29" + }, + "7308": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "PUSH1", + "path": "29", + "value": "0x60" + }, + "7310": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "ADD", + "path": "29" + }, + "7311": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "7313": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "MSTORE", + "path": "29" + }, + "7314": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "DUP1", + "path": "29" + }, + "7315": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "PUSH1", + "path": "29", + "value": "0x28" + }, + "7317": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "DUP2", + "path": "29" + }, + "7318": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "MSTORE", + "path": "29" + }, + "7319": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "PUSH1", + "path": "29", + "value": "0x20" + }, + "7321": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "ADD", + "path": "29" + }, + "7322": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "PUSH2", + "path": "29", + "value": "0x1E93" + }, + "7325": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "PUSH1", + "path": "29", + "value": "0x28" + }, + "7327": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "SWAP2", + "path": "29" + }, + "7328": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "CODECOPY", + "path": "29" + }, + "7329": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2126, 2135], + "op": "DUP3", + "path": "29" + }, + "7330": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2061, 2093], + "op": "PUSH2", + "path": "29", + "value": "0x1E16" + }, + "7333": { + "fn": "StarknetTokenStorage.messagingContract", + "jump": "i", + "offset": [2061, 2137], + "op": "JUMP", + "path": "29" + }, + "7334": { + "fn": "Governance.addGovernor", + "offset": [2951, 3187], + "op": "JUMPDEST", + "path": "1" + }, + "7335": { + "fn": "Governance.addGovernor", + "offset": [3020, 3043], + "op": "PUSH2", + "path": "1", + "statement": 81, + "value": "0x1CAF" + }, + "7338": { + "fn": "Governance.addGovernor", + "offset": [3031, 3042], + "op": "DUP2", + "path": "1" + }, + "7339": { + "fn": "Governance.addGovernor", + "offset": [3020, 3030], + "op": "PUSH2", + "path": "1", + "value": "0xC82" + }, + "7342": { + "fn": "Governance.addGovernor", + "jump": "i", + "offset": [3020, 3043], + "op": "JUMP", + "path": "1" + }, + "7343": { + "fn": "Governance.addGovernor", + "offset": [3020, 3043], + "op": "JUMPDEST", + "path": "1" + }, + "7344": { + "branch": 98, + "fn": "Governance.addGovernor", + "offset": [3019, 3043], + "op": "ISZERO", + "path": "1" + }, + "7345": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "PUSH2", + "path": "1", + "value": "0x1CF4" + }, + "7348": { + "branch": 98, + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "JUMPI", + "path": "1" + }, + "7349": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "PUSH1", + "path": "1", + "value": "0x40" + }, + "7351": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "DUP1", + "path": "1" + }, + "7352": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "MLOAD", + "path": "1" + }, + "7353": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "7357": { + "op": "PUSH1", + "value": "0xE5" + }, + "7359": { + "op": "SHL" + }, + "7360": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "DUP2", + "path": "1" + }, + "7361": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "MSTORE", + "path": "1" + }, + "7362": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "PUSH1", + "path": "1", + "value": "0x20" + }, + "7364": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "PUSH1", + "path": "1", + "value": "0x4" + }, + "7366": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "DUP3", + "path": "1" + }, + "7367": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "ADD", + "path": "1" + }, + "7368": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "MSTORE", + "path": "1" + }, + "7369": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "PUSH1", + "path": "1", + "value": "0x10" + }, + "7371": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "PUSH1", + "path": "1", + "value": "0x24" + }, + "7373": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "DUP3", + "path": "1" + }, + "7374": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "ADD", + "path": "1" + }, + "7375": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "MSTORE", + "path": "1" + }, + "7376": { + "op": "PUSH16", + "value": "0x20A62922A0A22CAFA3A7AB22A92727A9" + }, + "7393": { + "op": "PUSH1", + "value": "0x81" + }, + "7395": { + "op": "SHL" + }, + "7396": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "PUSH1", + "path": "1", + "value": "0x44" + }, + "7398": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "DUP3", + "path": "1" + }, + "7399": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "ADD", + "path": "1" + }, + "7400": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "MSTORE", + "path": "1" + }, + "7401": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "SWAP1", + "path": "1" + }, + "7402": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "MLOAD", + "path": "1" + }, + "7403": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "SWAP1", + "path": "1" + }, + "7404": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "DUP2", + "path": "1" + }, + "7405": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "SWAP1", + "path": "1" + }, + "7406": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "SUB", + "path": "1" + }, + "7407": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "PUSH1", + "path": "1", + "value": "0x64" + }, + "7409": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "ADD", + "path": "1" + }, + "7410": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "SWAP1", + "path": "1" + }, + "7411": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "REVERT", + "path": "1" + }, + "7412": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "JUMPDEST", + "path": "1" + }, + "7413": { + "fn": "Governance.addGovernor", + "offset": [3074, 3106], + "op": "PUSH1", + "path": "1", + "value": "0x0" + }, + "7415": { + "fn": "Governance.addGovernor", + "offset": [3109, 3128], + "op": "PUSH2", + "path": "1", + "value": "0x1CFE" + }, + "7418": { + "fn": "Governance.addGovernor", + "offset": [3109, 3126], + "op": "PUSH2", + "path": "1", + "value": "0x1BAD" + }, + "7421": { + "fn": "Governance.addGovernor", + "jump": "i", + "offset": [3109, 3128], + "op": "JUMP", + "path": "1" + }, + "7422": { + "fn": "Governance.addGovernor", + "offset": [3109, 3128], + "op": "JUMPDEST", + "path": "1" + }, + "7423": { + "op": "PUSH1", + "value": "0x1" + }, + "7425": { + "op": "PUSH1", + "value": "0x1" + }, + "7427": { + "op": "PUSH1", + "value": "0xA0" + }, + "7429": { + "op": "SHL" + }, + "7430": { + "op": "SUB" + }, + "7431": { + "fn": "Governance.addGovernor", + "offset": [3138, 3173], + "op": "SWAP1", + "path": "1", + "statement": 82 + }, + "7432": { + "fn": "Governance.addGovernor", + "offset": [3138, 3173], + "op": "SWAP3", + "path": "1" + }, + "7433": { + "fn": "Governance.addGovernor", + "offset": [3138, 3173], + "op": "AND", + "path": "1" + }, + "7434": { + "fn": "Governance.addGovernor", + "offset": [3138, 3160], + "op": "PUSH1", + "path": "1", + "value": "0x0" + }, + "7436": { + "fn": "Governance.addGovernor", + "offset": [3138, 3173], + "op": "SWAP1", + "path": "1" + }, + "7437": { + "fn": "Governance.addGovernor", + "offset": [3138, 3173], + "op": "DUP2", + "path": "1" + }, + "7438": { + "fn": "Governance.addGovernor", + "offset": [3138, 3173], + "op": "MSTORE", + "path": "1" + }, + "7439": { + "fn": "Governance.addGovernor", + "offset": [3138, 3173], + "op": "PUSH1", + "path": "1", + "value": "0x20" + }, + "7441": { + "fn": "Governance.addGovernor", + "offset": [3138, 3173], + "op": "SWAP3", + "path": "1" + }, + "7442": { + "fn": "Governance.addGovernor", + "offset": [3138, 3173], + "op": "SWAP1", + "path": "1" + }, + "7443": { + "fn": "Governance.addGovernor", + "offset": [3138, 3173], + "op": "SWAP3", + "path": "1" + }, + "7444": { + "fn": "Governance.addGovernor", + "offset": [3138, 3173], + "op": "MSTORE", + "path": "1" + }, + "7445": { + "op": "POP" + }, + "7446": { + "fn": "Governance.addGovernor", + "offset": [3138, 3173], + "op": "PUSH1", + "path": "1", + "value": "0x40" + }, + "7448": { + "fn": "Governance.addGovernor", + "offset": [3138, 3173], + "op": "SWAP1", + "path": "1" + }, + "7449": { + "fn": "Governance.addGovernor", + "offset": [3138, 3173], + "op": "KECCAK256", + "path": "1" + }, + "7450": { + "fn": "Governance.addGovernor", + "offset": [3138, 3180], + "op": "DUP1", + "path": "1" + }, + "7451": { + "fn": "Governance.addGovernor", + "offset": [3138, 3180], + "op": "SLOAD", + "path": "1" + }, + "7452": { + "op": "PUSH1", + "value": "0xFF" + }, + "7454": { + "op": "NOT" + }, + "7455": { + "fn": "Governance.addGovernor", + "offset": [3138, 3180], + "op": "AND", + "path": "1" + }, + "7456": { + "fn": "Governance.addGovernor", + "offset": [3176, 3180], + "op": "PUSH1", + "path": "1", + "value": "0x1" + }, + "7458": { + "fn": "Governance.addGovernor", + "offset": [3138, 3180], + "op": "OR", + "path": "1" + }, + "7459": { + "fn": "Governance.addGovernor", + "offset": [3138, 3180], + "op": "SWAP1", + "path": "1" + }, + "7460": { + "fn": "Governance.addGovernor", + "offset": [3138, 3180], + "op": "SSTORE", + "path": "1" + }, + "7461": { + "fn": "Governance.addGovernor", + "jump": "o", + "offset": [2951, 3187], + "op": "JUMP", + "path": "1" + }, + "7462": { + "fn": "NamedStorage.setUintValue", + "offset": [1379, 1571], + "op": "JUMPDEST", + "path": "0" + }, + "7463": { + "fn": "NamedStorage.setUintValue", + "offset": [1455, 1467], + "op": "PUSH1", + "path": "0", + "value": "0x0" + }, + "7465": { + "fn": "NamedStorage.setUintValue", + "offset": [1497, 1501], + "op": "DUP3", + "path": "0" + }, + "7466": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "PUSH1", + "path": "0", + "value": "0x40" + }, + "7468": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "MLOAD", + "path": "0" + }, + "7469": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "7471": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "ADD", + "path": "0" + }, + "7472": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP1", + "path": "0" + }, + "7473": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP3", + "path": "0" + }, + "7474": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP1", + "path": "0" + }, + "7475": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "MLOAD", + "path": "0" + }, + "7476": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "SWAP1", + "path": "0" + }, + "7477": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "7479": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "ADD", + "path": "0" + }, + "7480": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "SWAP1", + "path": "0" + }, + "7481": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP1", + "path": "0" + }, + "7482": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP4", + "path": "0" + }, + "7483": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP4", + "path": "0" + }, + "7484": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "JUMPDEST", + "path": "0" + }, + "7485": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "7487": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP4", + "path": "0" + }, + "7488": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "LT", + "path": "0" + }, + "7489": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "PUSH2", + "path": "0", + "value": "0x1D5B" + }, + "7492": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "JUMPI", + "path": "0" + }, + "7493": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP1", + "path": "0" + }, + "7494": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "MLOAD", + "path": "0" + }, + "7495": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP3", + "path": "0" + }, + "7496": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "MSTORE", + "path": "0" + }, + "7497": { + "op": "PUSH1", + "value": "0x1F" + }, + "7499": { + "op": "NOT" + }, + "7500": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "SWAP1", + "path": "0" + }, + "7501": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "SWAP3", + "path": "0" + }, + "7502": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "ADD", + "path": "0" + }, + "7503": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "SWAP2", + "path": "0" + }, + "7504": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "7506": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "SWAP2", + "path": "0" + }, + "7507": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP3", + "path": "0" + }, + "7508": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "ADD", + "path": "0" + }, + "7509": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "SWAP2", + "path": "0" + }, + "7510": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "ADD", + "path": "0" + }, + "7511": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "PUSH2", + "path": "0", + "value": "0x1D3C" + }, + "7514": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "JUMP", + "path": "0" + }, + "7515": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "JUMPDEST", + "path": "0" + }, + "7516": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "PUSH1", + "path": "0", + "value": "0x1" + }, + "7518": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP4", + "path": "0" + }, + "7519": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "7521": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "SUB", + "path": "0" + }, + "7522": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "PUSH2", + "path": "0", + "value": "0x100" + }, + "7525": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "EXP", + "path": "0" + }, + "7526": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "SUB", + "path": "0" + }, + "7527": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP1", + "path": "0" + }, + "7528": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "NOT", + "path": "0" + }, + "7529": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP3", + "path": "0" + }, + "7530": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "MLOAD", + "path": "0" + }, + "7531": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "AND", + "path": "0" + }, + "7532": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP2", + "path": "0" + }, + "7533": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP5", + "path": "0" + }, + "7534": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "MLOAD", + "path": "0" + }, + "7535": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "AND", + "path": "0" + }, + "7536": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP1", + "path": "0" + }, + "7537": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP3", + "path": "0" + }, + "7538": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "OR", + "path": "0" + }, + "7539": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP6", + "path": "0" + }, + "7540": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "MSTORE", + "path": "0" + }, + "7541": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "POP", + "path": "0" + }, + "7542": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "POP", + "path": "0" + }, + "7543": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "POP", + "path": "0" + }, + "7544": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "POP", + "path": "0" + }, + "7545": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "POP", + "path": "0" + }, + "7546": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "POP", + "path": "0" + }, + "7547": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "SWAP1", + "path": "0" + }, + "7548": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "POP", + "path": "0" + }, + "7549": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "ADD", + "path": "0" + }, + "7550": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "SWAP2", + "path": "0" + }, + "7551": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "POP", + "path": "0" + }, + "7552": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "POP", + "path": "0" + }, + "7553": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "PUSH1", + "path": "0", + "value": "0x40" + }, + "7555": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "MLOAD", + "path": "0" + }, + "7556": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "7558": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP2", + "path": "0" + }, + "7559": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP4", + "path": "0" + }, + "7560": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "SUB", + "path": "0" + }, + "7561": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "SUB", + "path": "0" + }, + "7562": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP2", + "path": "0" + }, + "7563": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "MSTORE", + "path": "0" + }, + "7564": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "SWAP1", + "path": "0" + }, + "7565": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "PUSH1", + "path": "0", + "value": "0x40" + }, + "7567": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "MSTORE", + "path": "0" + }, + "7568": { + "fn": "NamedStorage.setUintValue", + "offset": [1470, 1503], + "op": "DUP1", + "path": "0" + }, + "7569": { + "fn": "NamedStorage.setUintValue", + "offset": [1470, 1503], + "op": "MLOAD", + "path": "0" + }, + "7570": { + "fn": "NamedStorage.setUintValue", + "offset": [1470, 1503], + "op": "SWAP1", + "path": "0" + }, + "7571": { + "fn": "NamedStorage.setUintValue", + "offset": [1470, 1503], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "7573": { + "fn": "NamedStorage.setUintValue", + "offset": [1470, 1503], + "op": "ADD", + "path": "0" + }, + "7574": { + "fn": "NamedStorage.setUintValue", + "offset": [1470, 1503], + "op": "KECCAK256", + "path": "0" + }, + "7575": { + "fn": "NamedStorage.setUintValue", + "offset": [1455, 1503], + "op": "SWAP1", + "path": "0" + }, + "7576": { + "fn": "NamedStorage.setUintValue", + "offset": [1455, 1503], + "op": "POP", + "path": "0" + }, + "7577": { + "fn": "NamedStorage.setUintValue", + "offset": [1549, 1554], + "op": "DUP2", + "path": "0" + }, + "7578": { + "fn": "NamedStorage.setUintValue", + "offset": [1543, 1547], + "op": "DUP2", + "path": "0" + }, + "7579": { + "fn": "NamedStorage.setUintValue", + "offset": [1536, 1555], + "op": "SSTORE", + "path": "0" + }, + "7580": { + "fn": "NamedStorage.setUintValue", + "offset": [1522, 1565], + "op": "POP", + "path": "0" + }, + "7581": { + "fn": "NamedStorage.setUintValue", + "offset": [1522, 1565], + "op": "POP", + "path": "0" + }, + "7582": { + "fn": "NamedStorage.setUintValue", + "offset": [1522, 1565], + "op": "POP", + "path": "0" + }, + "7583": { + "fn": "NamedStorage.setUintValue", + "jump": "o", + "offset": [1522, 1565], + "op": "JUMP", + "path": "0" + }, + "7584": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1577, 1746], + "op": "JUMPDEST", + "path": "0" + }, + "7585": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1665, 1683], + "op": "PUSH2", + "path": "0", + "statement": 83, + "value": "0x1DA9" + }, + "7588": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1678, 1682], + "op": "DUP3", + "path": "0" + }, + "7589": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1665, 1677], + "op": "PUSH2", + "path": "0", + "value": "0x1981" + }, + "7592": { + "fn": "NamedStorage.setUintValueOnce", + "jump": "i", + "offset": [1665, 1683], + "op": "JUMP", + "path": "0" + }, + "7593": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1665, 1683], + "op": "JUMPDEST", + "path": "0" + }, + "7594": { + "branch": 100, + "fn": "NamedStorage.setUintValueOnce", + "offset": [1665, 1688], + "op": "ISZERO", + "path": "0" + }, + "7595": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "PUSH2", + "path": "0", + "value": "0x1DE9" + }, + "7598": { + "branch": 100, + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "JUMPI", + "path": "0" + }, + "7599": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "PUSH1", + "path": "0", + "value": "0x40" + }, + "7601": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "DUP1", + "path": "0" + }, + "7602": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "MLOAD", + "path": "0" + }, + "7603": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "7607": { + "op": "PUSH1", + "value": "0xE5" + }, + "7609": { + "op": "SHL" + }, + "7610": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "DUP2", + "path": "0" + }, + "7611": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "MSTORE", + "path": "0" + }, + "7612": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "7614": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "PUSH1", + "path": "0", + "value": "0x4" + }, + "7616": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "DUP3", + "path": "0" + }, + "7617": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "ADD", + "path": "0" + }, + "7618": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "MSTORE", + "path": "0" + }, + "7619": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "PUSH1", + "path": "0", + "value": "0xB" + }, + "7621": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "PUSH1", + "path": "0", + "value": "0x24" + }, + "7623": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "DUP3", + "path": "0" + }, + "7624": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "ADD", + "path": "0" + }, + "7625": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "MSTORE", + "path": "0" + }, + "7626": { + "op": "PUSH11", + "value": "0x1053149150511657D4D155" + }, + "7638": { + "op": "PUSH1", + "value": "0xAA" + }, + "7640": { + "op": "SHL" + }, + "7641": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "PUSH1", + "path": "0", + "value": "0x44" + }, + "7643": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "DUP3", + "path": "0" + }, + "7644": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "ADD", + "path": "0" + }, + "7645": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "MSTORE", + "path": "0" + }, + "7646": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "SWAP1", + "path": "0" + }, + "7647": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "MLOAD", + "path": "0" + }, + "7648": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "SWAP1", + "path": "0" + }, + "7649": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "DUP2", + "path": "0" + }, + "7650": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "SWAP1", + "path": "0" + }, + "7651": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "SUB", + "path": "0" + }, + "7652": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "PUSH1", + "path": "0", + "value": "0x64" + }, + "7654": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "ADD", + "path": "0" + }, + "7655": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "SWAP1", + "path": "0" + }, + "7656": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "REVERT", + "path": "0" + }, + "7657": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "JUMPDEST", + "path": "0" + }, + "7658": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1714, 1739], + "op": "PUSH2", + "path": "0", + "statement": 84, + "value": "0x2C2" + }, + "7661": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1727, 1731], + "op": "DUP3", + "path": "0" + }, + "7662": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1733, 1738], + "op": "DUP3", + "path": "0" + }, + "7663": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1714, 1726], + "op": "PUSH2", + "path": "0", + "value": "0x1D26" + }, + "7666": { + "fn": "NamedStorage.setUintValueOnce", + "jump": "i", + "offset": [1714, 1739], + "op": "JUMP", + "path": "0" + }, + "7667": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1024, 1144], + "op": "JUMPDEST", + "path": "29" + }, + "7668": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1069, 1076], + "op": "PUSH1", + "path": "29", + "value": "0x0" + }, + "7670": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1095, 1137], + "op": "PUSH2", + "path": "29", + "statement": 85, + "value": "0xA3C" + }, + "7673": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "7675": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "MLOAD", + "path": "29" + }, + "7676": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "DUP1", + "path": "29" + }, + "7677": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "PUSH1", + "path": "29", + "value": "0x60" + }, + "7679": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "ADD", + "path": "29" + }, + "7680": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "7682": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "MSTORE", + "path": "29" + }, + "7683": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "DUP1", + "path": "29" + }, + "7684": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "PUSH1", + "path": "29", + "value": "0x21" + }, + "7686": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "DUP2", + "path": "29" + }, + "7687": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "MSTORE", + "path": "29" + }, + "7688": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "PUSH1", + "path": "29", + "value": "0x20" + }, + "7690": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "ADD", + "path": "29" + }, + "7691": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "PUSH2", + "path": "29", + "value": "0x1F2D" + }, + "7694": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "PUSH1", + "path": "29", + "value": "0x21" + }, + "7696": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "SWAP2", + "path": "29" + }, + "7697": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "CODECOPY", + "path": "29" + }, + "7698": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1095, 1120], + "op": "PUSH2", + "path": "29", + "value": "0x1981" + }, + "7701": { + "fn": "StarknetTokenStorage.maxDeposit", + "jump": "i", + "offset": [1095, 1137], + "op": "JUMP", + "path": "29" + }, + "7702": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2171, 2360], + "op": "JUMPDEST", + "path": "0" + }, + "7703": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2295, 2298], + "op": "PUSH1", + "path": "0", + "statement": 86, + "value": "0x0" + }, + "7705": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2262, 2283], + "op": "PUSH2", + "path": "0", + "value": "0x1E21" + }, + "7708": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2278, 2282], + "op": "DUP4", + "path": "0" + }, + "7709": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2262, 2277], + "op": "PUSH2", + "path": "0", + "value": "0x1981" + }, + "7712": { + "fn": "NamedStorage.setAddressValueOnce", + "jump": "i", + "offset": [2262, 2283], + "op": "JUMP", + "path": "0" + }, + "7713": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2262, 2283], + "op": "JUMPDEST", + "path": "0" + }, + "7714": { + "op": "PUSH1", + "value": "0x1" + }, + "7716": { + "op": "PUSH1", + "value": "0x1" + }, + "7718": { + "op": "PUSH1", + "value": "0xA0" + }, + "7720": { + "op": "SHL" + }, + "7721": { + "op": "SUB" + }, + "7722": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2262, 2299], + "op": "AND", + "path": "0" + }, + "7723": { + "branch": 101, + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2262, 2299], + "op": "EQ", + "path": "0" + }, + "7724": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "PUSH2", + "path": "0", + "value": "0x1DE9" + }, + "7727": { + "branch": 101, + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "JUMPI", + "path": "0" + }, + "7728": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "PUSH1", + "path": "0", + "value": "0x40" + }, + "7730": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "DUP1", + "path": "0" + }, + "7731": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "MLOAD", + "path": "0" + }, + "7732": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "7736": { + "op": "PUSH1", + "value": "0xE5" + }, + "7738": { + "op": "SHL" + }, + "7739": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "DUP2", + "path": "0" + }, + "7740": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "MSTORE", + "path": "0" + }, + "7741": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "7743": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "PUSH1", + "path": "0", + "value": "0x4" + }, + "7745": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "DUP3", + "path": "0" + }, + "7746": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "ADD", + "path": "0" + }, + "7747": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "MSTORE", + "path": "0" + }, + "7748": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "PUSH1", + "path": "0", + "value": "0xB" + }, + "7750": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "PUSH1", + "path": "0", + "value": "0x24" + }, + "7752": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "DUP3", + "path": "0" + }, + "7753": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "ADD", + "path": "0" + }, + "7754": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "MSTORE", + "path": "0" + }, + "7755": { + "op": "PUSH11", + "value": "0x1053149150511657D4D155" + }, + "7767": { + "op": "PUSH1", + "value": "0xAA" + }, + "7769": { + "op": "SHL" + }, + "7770": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "PUSH1", + "path": "0", + "value": "0x44" + }, + "7772": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "DUP3", + "path": "0" + }, + "7773": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "ADD", + "path": "0" + }, + "7774": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "MSTORE", + "path": "0" + }, + "7775": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "SWAP1", + "path": "0" + }, + "7776": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "MLOAD", + "path": "0" + }, + "7777": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "SWAP1", + "path": "0" + }, + "7778": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "DUP2", + "path": "0" + }, + "7779": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "SWAP1", + "path": "0" + }, + "7780": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "SUB", + "path": "0" + }, + "7781": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "PUSH1", + "path": "0", + "value": "0x64" + }, + "7783": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "ADD", + "path": "0" + }, + "7784": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "SWAP1", + "path": "0" + }, + "7785": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "REVERT", + "path": "0" + }, + "7786": { + "op": "JUMPDEST" + }, + "7787": { + "op": "PUSH1", + "value": "0x0" + }, + "7789": { + "op": "DUP1" + }, + "7790": { + "op": "DUP6" + }, + "7791": { + "op": "DUP6" + }, + "7792": { + "op": "GT" + }, + "7793": { + "op": "ISZERO" + }, + "7794": { + "op": "PUSH2", + "value": "0x1E79" + }, + "7797": { + "op": "JUMPI" + }, + "7798": { + "op": "DUP2" + }, + "7799": { + "op": "DUP3" + }, + "7800": { + "op": "REVERT" + }, + "7801": { + "op": "JUMPDEST" + }, + "7802": { + "op": "DUP4" + }, + "7803": { + "op": "DUP7" + }, + "7804": { + "op": "GT" + }, + "7805": { + "op": "ISZERO" + }, + "7806": { + "op": "PUSH2", + "value": "0x1E85" + }, + "7809": { + "op": "JUMPI" + }, + "7810": { + "op": "DUP2" + }, + "7811": { + "op": "DUP3" + }, + "7812": { + "op": "REVERT" + }, + "7813": { + "op": "JUMPDEST" + }, + "7814": { + "op": "POP" + }, + "7815": { + "op": "POP" + }, + "7816": { + "op": "DUP3" + }, + "7817": { + "op": "ADD" + }, + "7818": { + "op": "SWAP4" + }, + "7819": { + "op": "SWAP2" + }, + "7820": { + "op": "SWAP1" + }, + "7821": { + "op": "SWAP3" + }, + "7822": { + "op": "SUB" + }, + "7823": { + "op": "SWAP2" + }, + "7824": { + "op": "POP" + }, + "7825": { + "op": "JUMP" + } + }, + "sha1": "53b4d60ed236763be15a4a4ffd6586f2d948babf", + "source": "// SPDX-License-Identifier: Apache-2.0.\npragma solidity ^0.6.12;\n\nimport \"contracts/common-contracts/src/libraries/NamedStorage.sol\";\nimport \"contracts/starkware/contracts/tokens/ERC20/IERC20.sol\";\nimport \"contracts/starkware/starknet/apps/token/solidity/StarknetTokenBridge.sol\";\nimport \"contracts/starkware/starknet/apps/token/solidity/Transfers.sol\";\n\ncontract StarknetERC20Bridge is StarknetTokenBridge {\n function deposit(uint256 amount, uint256 l2Recipient) external {\n require(\n IERC20(bridgedToken()).balanceOf(address(this)) + amount <= maxTotalBalance(),\n \"MAX_BALANCE_EXCEEDED\"\n );\n Transfers.transferIn(bridgedToken(), msg.sender, amount);\n sendMessage(amount, l2Recipient);\n }\n\n function withdraw(uint256 amount, address recipient) public override {\n consumeMessage(amount, recipient);\n Transfers.transferOut(bridgedToken(), recipient, amount);\n }\n}\n", + "sourceMap": "355:583:26:-:0;;;;;;;;;;;;;711:12:5;747:4;753:15;770:9;736:44;;;;;;-1:-1:-1;;;;;736:44:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;726:55;;;;;;711:70;;815:4;791:28;;;;;;865:2;859:4;852:16;838:40;355:583:26;;;;;;;;;", + "sourcePath": "contracts/starkware/starknet/apps/token/solidity/StarknetERC20Bridge.sol", + "type": "contract" +} diff --git a/src/contracts/StarknetEthBridge/StarknetEthBridge.js b/src/contracts/StarknetEthBridge/StarknetEthBridge.js new file mode 100644 index 00000000..8a953c59 --- /dev/null +++ b/src/contracts/StarknetEthBridge/StarknetEthBridge.js @@ -0,0 +1,6 @@ +import {web3} from '../../web3'; +import {abi} from './StarknetEthBridge.json'; + +const address = ''; + +export const starkNetEthBridge = new web3.eth.Contract(abi, address); diff --git a/src/contracts/StarknetEthBridge/StarknetEthBridge.json b/src/contracts/StarknetEthBridge/StarknetEthBridge.json new file mode 100644 index 00000000..60ba13ba --- /dev/null +++ b/src/contracts/StarknetEthBridge/StarknetEthBridge.json @@ -0,0 +1,26116 @@ +{ + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + } + ], + "name": "LogDeposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "acceptedGovernor", + "type": "address" + } + ], + "name": "LogNewGovernorAccepted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "nominatedGovernor", + "type": "address" + } + ], + "name": "LogNominatedGovernor", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "LogNominationCancelled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "removedGovernor", + "type": "address" + } + ], + "name": "LogRemovedGovernor", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "LogSetL2TokenContract", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "LogSetMaxDeposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "LogSetMaxTotalBalance", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "LogWithdrawal", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "isFrozen", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "l2TokenContract_", + "type": "uint256" + } + ], + "name": "setL2TokenContract", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "maxDeposit_", + "type": "uint256" + } + ], + "name": "setMaxDeposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "maxTotalBalance_", + "type": "uint256" + } + ], + "name": "setMaxTotalBalance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "starknetAcceptGovernance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "starknetCancelNomination", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "testGovernor", + "type": "address" + } + ], + "name": "starknetIsGovernor", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newGovernor", + "type": "address" + } + ], + "name": "starknetNominateNewGovernor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "governorForRemoval", + "type": "address" + } + ], + "name": "starknetRemoveGovernor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "allSourcePaths": { + "0": "contracts/common-contracts/src/libraries/NamedStorage.sol", + "1": "contracts/scalable-dex/contracts/src/components/Governance.sol", + "10": "contracts/scalable-dex/contracts/src/interfaces/ProxySupport.sol", + "11": "contracts/scalable-dex/contracts/src/libraries/Common.sol", + "16": "contracts/starkware/cairo/eth/CairoConstants.sol", + "27": "contracts/starkware/starknet/apps/token/solidity/StarknetEthBridge.sol", + "28": "contracts/starkware/starknet/apps/token/solidity/StarknetTokenBridge.sol", + "29": "contracts/starkware/starknet/apps/token/solidity/StarknetTokenStorage.sol", + "31": "contracts/starkware/starknet/eth/IStarknetMessaging.sol", + "34": "contracts/starkware/starknet/eth/StarknetGovernance.sol", + "5": "contracts/scalable-dex/contracts/src/interfaces/BlockDirectCall.sol", + "6": "contracts/scalable-dex/contracts/src/interfaces/ContractInitializer.sol", + "8": "contracts/scalable-dex/contracts/src/interfaces/MGovernance.sol" + }, + "ast": { + "absolutePath": "contracts/starkware/starknet/apps/token/solidity/StarknetEthBridge.sol", + "exportedSymbols": { + "StarknetEthBridge": [2833] + }, + "id": 2834, + "license": "Apache-2.0.", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 2771, + "literals": ["solidity", "^", "0.6", ".12"], + "nodeType": "PragmaDirective", + "src": "40:24:27" + }, + { + "absolutePath": "contracts/scalable-dex/contracts/src/libraries/Common.sol", + "file": "contracts/scalable-dex/contracts/src/libraries/Common.sol", + "id": 2772, + "nodeType": "ImportDirective", + "scope": 2834, + "sourceUnit": 1096, + "src": "66:67:27", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/starkware/starknet/apps/token/solidity/StarknetTokenBridge.sol", + "file": "contracts/starkware/starknet/apps/token/solidity/StarknetTokenBridge.sol", + "id": 2773, + "nodeType": "ImportDirective", + "scope": 2834, + "sourceUnit": 3211, + "src": "134:82:27", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 2774, + "name": "StarknetTokenBridge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3210, + "src": "248:19:27", + "typeDescriptions": { + "typeIdentifier": "t_contract$_StarknetTokenBridge_$3210", + "typeString": "contract StarknetTokenBridge" + } + }, + "id": 2775, + "nodeType": "InheritanceSpecifier", + "src": "248:19:27" + } + ], + "contractDependencies": [446, 627, 656, 699, 917, 3210, 3355, 4350], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 2833, + "linearizedBaseContracts": [2833, 3210, 917, 656, 627, 4350, 446, 699, 3355], + "name": "StarknetEthBridge", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 2778, + "libraryName": { + "contractScope": null, + "id": 2776, + "name": "Addresses", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1086, + "src": "280:9:27", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Addresses_$1086", + "typeString": "library Addresses" + } + }, + "nodeType": "UsingForDirective", + "src": "274:28:27", + "typeName": { + "id": 2777, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "294:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + }, + { + "body": { + "id": 2801, + "nodeType": "Block", + "src": "363:220:27", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2791, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2786, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "472:4:27", + "typeDescriptions": { + "typeIdentifier": "t_contract$_StarknetEthBridge_$2833", + "typeString": "contract StarknetEthBridge" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_StarknetEthBridge_$2833", + "typeString": "contract StarknetEthBridge" + } + ], + "id": 2785, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "464:7:27", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 2784, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "464:7:27", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 2787, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "464:13:27", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 2788, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "balance", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "464:21:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 2789, + "name": "maxTotalBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [3273, 3338], + "referencedDeclaration": 3273, + "src": "489:15:27", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 2790, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "489:17:27", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "464:42:27", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4d41585f42414c414e43455f4558434545444544", + "id": 2792, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "508:22:27", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d24ec41da52cc3754d98b259a05ea7ee3bf5b2f335e623d989d33ec6a80b1e79", + "typeString": "literal_string \"MAX_BALANCE_EXCEEDED\"" + }, + "value": "MAX_BALANCE_EXCEEDED" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_d24ec41da52cc3754d98b259a05ea7ee3bf5b2f335e623d989d33ec6a80b1e79", + "typeString": "literal_string \"MAX_BALANCE_EXCEEDED\"" + } + ], + "id": 2783, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [-18, -18], + "referencedDeclaration": -18, + "src": "456:7:27", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 2793, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "456:75:27", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2794, + "nodeType": "ExpressionStatement", + "src": "456:75:27" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2796, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "553:3:27", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2797, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "value", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "553:9:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 2798, + "name": "l2Recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2780, + "src": "564:11:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2795, + "name": "sendMessage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3127, + "src": "541:11:27", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256)" + } + }, + "id": 2799, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "541:35:27", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2800, + "nodeType": "ExpressionStatement", + "src": "541:35:27" + } + ] + }, + "documentation": null, + "functionSelector": "b6b55f25", + "id": 2802, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "deposit", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 2781, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2780, + "mutability": "mutable", + "name": "l2Recipient", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2802, + "src": "325:19:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2779, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "325:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "324:21:27" + }, + "returnParameters": { + "id": 2782, + "nodeType": "ParameterList", + "parameters": [], + "src": "363:0:27" + }, + "scope": 2833, + "src": "308:275:27", + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [3197], + "body": { + "id": 2831, + "nodeType": "Block", + "src": "658:216:27", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2811, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2804, + "src": "683:6:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 2812, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2806, + "src": "691:9:27", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 2810, + "name": "consumeMessage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3190, + "src": "668:14:27", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (uint256,address)" + } + }, + "id": 2813, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "668:33:27", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2814, + "nodeType": "ExpressionStatement", + "src": "668:33:27" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 2821, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2816, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2806, + "src": "774:9:27", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "307830", + "id": 2819, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "795:3:27", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0x0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 2818, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "787:7:27", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 2817, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "787:7:27", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 2820, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "787:12:27", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "774:25:27", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "494e56414c49445f524543495049454e54", + "id": 2822, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "801:19:27", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_5e7bf34c5f9e77c6f415365fc02ea1195419ccebda18d14265f0c098f3687483", + "typeString": "literal_string \"INVALID_RECIPIENT\"" + }, + "value": "INVALID_RECIPIENT" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_5e7bf34c5f9e77c6f415365fc02ea1195419ccebda18d14265f0c098f3687483", + "typeString": "literal_string \"INVALID_RECIPIENT\"" + } + ], + "id": 2815, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [-18, -18], + "referencedDeclaration": -18, + "src": "766:7:27", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 2823, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "766:55:27", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2824, + "nodeType": "ExpressionStatement", + "src": "766:55:27" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2828, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2804, + "src": "860:6:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 2825, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2806, + "src": "831:9:27", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 2827, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "performEthTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 957, + "src": "831:28:27", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$bound_to$_t_address_$", + "typeString": "function (address,uint256)" + } + }, + "id": 2829, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "831:36:27", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2830, + "nodeType": "ExpressionStatement", + "src": "831:36:27" + } + ] + }, + "documentation": null, + "functionSelector": "00f714ce", + "id": 2832, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "withdraw", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 2808, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "649:8:27" + }, + "parameters": { + "id": 2807, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2804, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2832, + "src": "607:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2803, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "607:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2806, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2832, + "src": "623:17:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2805, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "623:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "606:35:27" + }, + "returnParameters": { + "id": 2809, + "nodeType": "ParameterList", + "parameters": [], + "src": "658:0:27" + }, + "scope": 2833, + "src": "589:285:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + } + ], + "scope": 2834, + "src": "218:658:27" + } + ], + "src": "40:837:27" + }, + "bytecode": "60a060405234801561001057600080fd5b50600030425a60405160200180846001600160a01b0316815260200183815260200182815260200193505050506040516020818303038152906040528051906020012090508060808181525050602a815550608051611a9b61007c600039806103c45250611a9b6000f3fe6080604052600436106100c15760003560e01c8063894ecf041161007f578063a90e32b811610059578063a90e32b8146102a9578063b6b55f25146102d3578063bb371fdd146102f0578063e37fec251461031a576100c1565b8063894ecf041461023757806391a66a2614610261578063946be3ed14610294576100c1565b8062f714ce146100c657806301a01590146101015780632e1a7d4d1461014857806333eeb14714610172578063439fab911461018757806384f921cd14610204575b600080fd5b3480156100d257600080fd5b506100ff600480360360408110156100e957600080fd5b50803590602001356001600160a01b031661032f565b005b34801561010d57600080fd5b506101346004803603602081101561012457600080fd5b50356001600160a01b031661039f565b604080519115158252519081900360200190f35b34801561015457600080fd5b506100ff6004803603602081101561016b57600080fd5b50356103b0565b34801561017e57600080fd5b506101346103bd565b34801561019357600080fd5b506100ff600480360360208110156101aa57600080fd5b8101906020810181356401000000008111156101c557600080fd5b8201836020820111156101d757600080fd5b803590602001918460018302840111640100000000831117156101f957600080fd5b5090925090506103c2565b34801561021057600080fd5b506100ff6004803603602081101561022757600080fd5b50356001600160a01b0316610595565b34801561024357600080fd5b506100ff6004803603602081101561025a57600080fd5b503561059e565b34801561026d57600080fd5b506100ff6004803603602081101561028457600080fd5b50356001600160a01b0316610626565b3480156102a057600080fd5b506100ff61062f565b3480156102b557600080fd5b506100ff600480360360208110156102cc57600080fd5b5035610639565b6100ff600480360360208110156102e957600080fd5b50356107c4565b3480156102fc57600080fd5b506100ff6004803603602081101561031357600080fd5b5035610821565b34801561032657600080fd5b506100ff6108a9565b61033982826108b1565b6001600160a01b038116610388576040805162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b604482015290519081900360640190fd5b61039b6001600160a01b03821683610a5f565b5050565b60006103aa82610b00565b92915050565b6103ba813361032f565b50565b600090565b7f00000000000000000000000000000000000000000000000000000000000000008054908115610432576040805162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b604482015290519081900360640190fd5b5050600061043e6103bd565b60209081029150810180831015610492576040805162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b604482015290519081900360640190fd5b60006104a082848688611959565b60208110156104ae57600080fd5b50356001600160a01b031690503660006104ca8582888a611959565b915091506104d8828261039b565b3660006104e78887818c611959565b90925090506001600160a01b0385161561051257610506858383610b2f565b5050505050505061039b565b61051a610d86565b1561056e578015610569576040805162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b604482015290519081900360640190fd5b61058a565b6105788282610da1565b6105828282610dea565b61058a610e2d565b505050505050505050565b6103ba81610eaf565b6105a733610b00565b6105ea576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517fa9aec19ec61c04ae0a4a1498ab6ce04cbd68b3d54c47888a45eb2bd37caf06bc9181900360200190a16103ba81610ffc565b6103ba8161101e565b61063761111b565b565b6106416111e8565b15610693576040805162461bcd60e51b815260206004820152601d60248201527f4c325f544f4b454e5f434f4e54524143545f414c52454144595f534554000000604482015290519081900360640190fd5b80806106e0576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b600167080000000000001160c01b01811061073c576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b61074533610b00565b610788576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805183815290517f49774a785afe45b60857497c0aff8733f202ca7e75329ad6408073564efea6df9181900360200190a161039b82611210565b6107cc611232565b471115610817576040805162461bcd60e51b815260206004820152601460248201527313505617d09053105390d157d15610d15151115160621b604482015290519081900360640190fd5b6103ba3482611255565b61082a33610b00565b61086d576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517faf474b5afcf11bd99dc9fc7f499e6ab368d650bf7ef23993f0d61bd9ad7626519181900360200190a16103ba81611543565b610637611565565b604080516001600160a01b03831681526020810184905281517fb4214c8c54fc7442f36d3682f59aebaf09358a4431835b30efb29d52cf9e1e91929181900390910190a160408051600480825260a082019092526060916020820160808036833701905050905060008160008151811061092757fe5b602002602001018181525050816001600160a01b03168160018151811061094a57fe5b6020908102919091010152600160801b83068160028151811061096957fe5b6020908102919091010152600160801b83048160038151811061098857fe5b60200260200101818152505061099c6115fc565b6001600160a01b0316632c9dd5c06109b26111e8565b836040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015610a085781810151838201526020016109f0565b505050509050019350505050602060405180830381600087803b158015610a2e57600080fd5b505af1158015610a42573d6000803e3d6000fd5b505050506040513d6020811015610a5857600080fd5b5050505050565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114610aaa576040519150601f19603f3d011682016040523d82523d6000602084013e610aaf565b606091505b5050905080610afb576040805162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b604482015290519081900360640190fd5b505050565b600080610b0b61161f565b6001600160a01b039390931660009081526020939093525050604090205460ff1690565b610b41836001600160a01b03166116ce565b610b87576040805162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b604482015290519081900360640190fd5b60006060846001600160a01b031663439fab9160e01b85856040516024018080602001828103825284848281815260200192508082843760008382015260408051601f909201601f1990811690940182810390940182529283526020810180516001600160e01b03166001600160e01b0319909916989098178852915182519297909650869550935090915081905083835b60208310610c385780518252601f199092019160209182019101610c19565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610c98576040519150601f19603f3d011682016040523d82523d6000602084013e610c9d565b606091505b5091509150818190610d2d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610cf2578181015183820152602001610cda565b50505050905090810190601f168015610d1f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508051819015610d7e5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610cf2578181015183820152602001610cda565b505050505050565b600080610d916115fc565b6001600160a01b03161415905090565b6040811461039b576040805162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b604482015290519081900360640190fd5b60008083836040811015610dfd57600080fd5b506001600160a01b03813581169350602090910135169050610e1e826116d4565b610e27816116f6565b50505050565b6000610e3761161f565b6001810154909150600160a01b900460ff1615610e91576040805162461bcd60e51b81526020600482015260136024820152721053149150511657d253925512505312569151606a1b604482015290519081900360640190fd5b60018101805460ff60a01b1916600160a01b1790556103ba33611718565b610eb833610b00565b610efb576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b336001600160a01b0382161415610f50576040805162461bcd60e51b8152602060048201526014602482015273474f5645524e4f525f53454c465f52454d4f564560601b604482015290519081900360640190fd5b6000610f5a61161f565b9050610f6582610b00565b610fa5576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa3a7ab22a92727a960a11b604482015290519081900360640190fd5b6001600160a01b03821660008181526020838152604091829020805460ff19169055815192835290517fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a295999281900390910190a15050565b6103ba6040518060600160405280602781526020016119f56027913982611798565b61102733610b00565b61106a576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b600061107461161f565b905061107f82610b00565b156110c4576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b6001810180546001600160a01b0384166001600160a01b0319909116811790915560408051918252517f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a69181900360200190a15050565b600061112561161f565b60018101549091506001600160a01b03163314611189576040805162461bcd60e51b815260206004820152601760248201527f4f4e4c595f43414e4449444154455f474f5645524e4f52000000000000000000604482015290519081900360640190fd5b60018101546111a0906001600160a01b0316611718565b6001810180546001600160a01b03191690556040805133815290517fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d29181900360200190a150565b600061120b6040518060600160405280602781526020016119ce60279139611812565b905090565b6103ba6040518060600160405280602781526020016119ce602791398261188f565b600061120b6040518060600160405280602781526020016119f560279139611812565b61125d6111e8565b6112ae576040805162461bcd60e51b815260206004820152601960248201527f4c325f544f4b454e5f434f4e54524143545f4e4f545f53455400000000000000604482015290519081900360640190fd5b80806112fb576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b600167080000000000001160c01b018110611357576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b61135f6118e2565b83111561139d5760405162461bcd60e51b81526004018080602001828103825260248152602001806119aa6024913960400191505060405180910390fd5b604080513381526020810185905280820184905290517f9dbb0e7dda3e09710ce75b801addc87cf9d9c6c581641b3275fca409ad086c629181900360600190a160408051600380825260808201909252606091602082018380368337019050509050828160008151811061140d57fe5b6020908102919091010152600160801b84068160018151811061142c57fe5b6020908102919091010152600160801b84048160028151811061144b57fe5b60200260200101818152505061145f6115fc565b6001600160a01b0316633e3aa6c56114756111e8565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5846040518463ffffffff1660e01b81526004018084815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156114f25781810151838201526020016114da565b50505050905001945050505050602060405180830381600087803b15801561151957600080fd5b505af115801561152d573d6000803e3d6000fd5b505050506040513d6020811015610d7e57600080fd5b6103ba604051806060016040528060218152602001611a1c6021913982611798565b61156e33610b00565b6115b1576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b60006115bb61161f565b6001810180546001600160a01b03191690556040519091507f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f590600090a150565b600061120b60405180606001604052806028815260200161198260289139611812565b6000806040518060400160405280601c81526020017f535441524b4e45545f312e305f474f5645524e414e43455f494e464f000000008152506040516020018082805190602001908083835b6020831061168a5780518252601f19909201916020918201910161166b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508091505090565b3b151590565b6103ba604051806060016040528060298152602001611a3d6029913982611905565b6103ba6040518060600160405280602881526020016119826028913982611905565b61172181610b00565b15611766576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b600061177061161f565b6001600160a01b0390921660009081526020929092525060409020805460ff19166001179055565b6000826040516020018082805190602001908083835b602083106117cd5780518252601f1990920191602091820191016117ae565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050818155505050565b600080826040516020018082805190602001908083835b602083106118485780518252601f199092019160209182019101611829565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508054915050919050565b61189882611812565b156118d8576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b61039b8282611798565b600061120b604051806060016040528060218152602001611a1c60219139611812565b600061191083611812565b6001600160a01b0316146118d8576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b60008085851115611968578182fd5b83861115611974578182fd5b505082019391909203915056fe535441524b4e45545f544f4b454e5f4252494447455f4d4553534147494e475f434f4e54524143545452414e534645525f544f5f535441524b4e45545f414d4f554e545f4558434545444544535441524b4e45545f544f4b454e5f4252494447455f4c325f544f4b454e5f434f4e5452414354535441524b4e45545f544f4b454e5f4252494447455f4d41585f544f54414c5f42414c414e4345535441524b4e45545f544f4b454e5f4252494447455f4d41585f4445504f534954535441524b4e45545f45524332305f544f4b454e5f4252494447455f544f4b454e5f41444452455353a26469706673582212209959fc54e8a44b980bf871fb9dea17ddd1c7307656ec3058927e288962d49aec64736f6c634300060c0033", + "bytecodeSha1": "8e413971359aefbd513923ad46960eec06a03904", + "compiler": { + "evm_version": "istanbul", + "optimizer": { + "enabled": true, + "runs": 200 + }, + "version": "0.6.12+commit.27d51765" + }, + "contractName": "StarknetEthBridge", + "coverageMap": { + "branches": { + "0": { + "NamedStorage.setAddressValueOnce": { + "89": [2262, 2299, true] + }, + "NamedStorage.setUintValueOnce": { + "88": [1665, 1688, true] + } + }, + "1": { + "Governance.acceptGovernance": { + "85": [3393, 3428, true] + }, + "Governance.addGovernor": { + "86": [3019, 3043, true] + }, + "Governance.initGovernance": { + "81": [1646, 1662, true] + }, + "Governance.nominateNewGovernor": { + "84": [2488, 2512, true] + }, + "Governance.removeGovernor": { + "82": [3841, 3873, true], + "83": [3980, 4010, true] + } + }, + "10": { + "ProxySupport.callExternalInitializer": { + "94": [2645, 2681, true], + "95": [2961, 2968, true], + "96": [3007, 3029, true] + }, + "ProxySupport.initialize": { + "90": [1674, 1705, true], + "91": [2095, 2121, false], + "92": [2227, 2242, false], + "93": [2266, 2286, true] + } + }, + "11": { + "Addresses.performEthTransfer": { + "79": [537, 544, true] + } + }, + "16": {}, + "27": { + "StarknetEthBridge.deposit": { + "78": [464, 506, true] + }, + "StarknetEthBridge.withdraw": { + "77": [774, 799, true] + } + }, + "28": { + "StarknetTokenBridge.sendMessage": { + "98": [3454, 3476, true] + }, + "StarknetTokenBridge.validateInitData": { + "97": [1297, 1314, true] + } + }, + "29": {}, + "31": {}, + "34": {}, + "5": { + "ProxySupport.initialize": { + "80": [1178, 1197, true] + } + }, + "6": {}, + "8": { + "Governance.cancelNomination": { + "87": [434, 456, true] + } + } + }, + "statements": { + "0": { + "NamedStorage.setAddressValueOnce": { + "76": [2254, 2315] + }, + "NamedStorage.setUintValueOnce": { + "73": [1657, 1704], + "74": [1714, 1739] + } + }, + "1": { + "Governance.acceptGovernance": { + "51": [3385, 3456], + "52": [3492, 3526], + "53": [3536, 3572], + "54": [3644, 3683] + }, + "Governance.addGovernor": { + "71": [3011, 3064], + "72": [3138, 3180] + }, + "Governance.cancelNomination": { + "65": [2244, 2280], + "66": [2290, 2319] + }, + "Governance.initGovernance": { + "40": [1638, 1686], + "41": [1696, 1718], + "42": [1804, 1827] + }, + "Governance.isGovernor": { + "32": [1994, 2037] + }, + "Governance.nominateNewGovernor": { + "48": [2480, 2533], + "49": [2543, 2578], + "50": [2588, 2626] + }, + "Governance.removeGovernor": { + "43": [3833, 3898], + "44": [3972, 4027], + "45": [4037, 4087], + "46": [4097, 4140] + } + }, + "10": { + "ProxySupport.callExternalInitializer": { + "33": [2637, 2704], + "34": [2953, 2989], + "35": [2999, 3050] + }, + "ProxySupport.initialize": { + "5": [1666, 1729], + "6": [1891, 1940], + "7": [2137, 2182], + "8": [2196, 2203], + "9": [2258, 2311], + "10": [2391, 2417], + "11": [2431, 2464], + "12": [2478, 2494] + } + }, + "11": { + "Addresses.isContract": { + "68": [329, 344] + }, + "Addresses.performEthTransfer": { + "31": [529, 568] + } + }, + "16": {}, + "27": { + "StarknetEthBridge.deposit": { + "20": [456, 531], + "21": [541, 576] + }, + "StarknetEthBridge.withdraw": { + "0": [668, 701], + "1": [766, 821], + "2": [831, 867] + } + }, + "28": { + "StarknetTokenBridge.consumeMessage": { + "25": [3935, 3972], + "26": [4036, 4071], + "27": [4081, 4112], + "28": [4122, 4161], + "29": [4171, 4210], + "30": [4221, 4289] + }, + "StarknetTokenBridge.initializeContractState": { + "38": [1843, 1870], + "39": [1880, 1917] + }, + "StarknetTokenBridge.isInitialized": { + "36": [1044, 1095] + }, + "StarknetTokenBridge.sendMessage": { + "58": [3446, 3517], + "59": [3527, 3575], + "60": [3639, 3663], + "61": [3673, 3712], + "62": [3722, 3761], + "63": [3771, 3844] + }, + "StarknetTokenBridge.setL2TokenContract": { + "18": [2846, 2890], + "19": [2900, 2933] + }, + "StarknetTokenBridge.setMaxDeposit": { + "22": [3212, 3246], + "23": [3256, 3279] + }, + "StarknetTokenBridge.setMaxTotalBalance": { + "14": [3034, 3078], + "15": [3088, 3121] + }, + "StarknetTokenBridge.validateInitData": { + "37": [1289, 1336] + }, + "StarknetTokenBridge.withdraw": { + "4": [4429, 4457] + } + }, + "29": { + "StarknetTokenStorage.bridgedToken": { + "69": [1545, 1607] + }, + "StarknetTokenStorage.l2TokenContract": { + "55": [965, 1011], + "56": [1679, 1729] + }, + "StarknetTokenStorage.maxDeposit": { + "64": [1796, 1845], + "75": [1088, 1137] + }, + "StarknetTokenStorage.maxTotalBalance": { + "47": [1917, 1972], + "57": [1219, 1274] + }, + "StarknetTokenStorage.messagingContract": { + "67": [1369, 1448], + "70": [2061, 2137] + } + }, + "31": {}, + "34": { + "StarknetGovernance.starknetAcceptGovernance": { + "17": [1053, 1071] + }, + "StarknetGovernance.starknetCancelNomination": { + "24": [1139, 1157] + }, + "StarknetGovernance.starknetIsGovernor": { + "3": [706, 737] + }, + "StarknetGovernance.starknetNominateNewGovernor": { + "16": [827, 859] + }, + "StarknetGovernance.starknetRemoveGovernor": { + "13": [951, 985] + } + }, + "5": {}, + "6": {}, + "8": {} + } + }, + "dependencies": [ + "Addresses", + "BlockDirectCall", + "CairoConstants", + "ContractInitializer", + "Governance", + "IStarknetMessaging", + "MGovernance", + "NamedStorage", + "ProxySupport", + "StarknetGovernance", + "StarknetTokenBridge", + "StarknetTokenStorage" + ], + "deployedBytecode": "6080604052600436106100c15760003560e01c8063894ecf041161007f578063a90e32b811610059578063a90e32b8146102a9578063b6b55f25146102d3578063bb371fdd146102f0578063e37fec251461031a576100c1565b8063894ecf041461023757806391a66a2614610261578063946be3ed14610294576100c1565b8062f714ce146100c657806301a01590146101015780632e1a7d4d1461014857806333eeb14714610172578063439fab911461018757806384f921cd14610204575b600080fd5b3480156100d257600080fd5b506100ff600480360360408110156100e957600080fd5b50803590602001356001600160a01b031661032f565b005b34801561010d57600080fd5b506101346004803603602081101561012457600080fd5b50356001600160a01b031661039f565b604080519115158252519081900360200190f35b34801561015457600080fd5b506100ff6004803603602081101561016b57600080fd5b50356103b0565b34801561017e57600080fd5b506101346103bd565b34801561019357600080fd5b506100ff600480360360208110156101aa57600080fd5b8101906020810181356401000000008111156101c557600080fd5b8201836020820111156101d757600080fd5b803590602001918460018302840111640100000000831117156101f957600080fd5b5090925090506103c2565b34801561021057600080fd5b506100ff6004803603602081101561022757600080fd5b50356001600160a01b0316610595565b34801561024357600080fd5b506100ff6004803603602081101561025a57600080fd5b503561059e565b34801561026d57600080fd5b506100ff6004803603602081101561028457600080fd5b50356001600160a01b0316610626565b3480156102a057600080fd5b506100ff61062f565b3480156102b557600080fd5b506100ff600480360360208110156102cc57600080fd5b5035610639565b6100ff600480360360208110156102e957600080fd5b50356107c4565b3480156102fc57600080fd5b506100ff6004803603602081101561031357600080fd5b5035610821565b34801561032657600080fd5b506100ff6108a9565b61033982826108b1565b6001600160a01b038116610388576040805162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b604482015290519081900360640190fd5b61039b6001600160a01b03821683610a5f565b5050565b60006103aa82610b00565b92915050565b6103ba813361032f565b50565b600090565b7f00000000000000000000000000000000000000000000000000000000000000008054908115610432576040805162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b604482015290519081900360640190fd5b5050600061043e6103bd565b60209081029150810180831015610492576040805162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b604482015290519081900360640190fd5b60006104a082848688611959565b60208110156104ae57600080fd5b50356001600160a01b031690503660006104ca8582888a611959565b915091506104d8828261039b565b3660006104e78887818c611959565b90925090506001600160a01b0385161561051257610506858383610b2f565b5050505050505061039b565b61051a610d86565b1561056e578015610569576040805162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b604482015290519081900360640190fd5b61058a565b6105788282610da1565b6105828282610dea565b61058a610e2d565b505050505050505050565b6103ba81610eaf565b6105a733610b00565b6105ea576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517fa9aec19ec61c04ae0a4a1498ab6ce04cbd68b3d54c47888a45eb2bd37caf06bc9181900360200190a16103ba81610ffc565b6103ba8161101e565b61063761111b565b565b6106416111e8565b15610693576040805162461bcd60e51b815260206004820152601d60248201527f4c325f544f4b454e5f434f4e54524143545f414c52454144595f534554000000604482015290519081900360640190fd5b80806106e0576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b600167080000000000001160c01b01811061073c576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b61074533610b00565b610788576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805183815290517f49774a785afe45b60857497c0aff8733f202ca7e75329ad6408073564efea6df9181900360200190a161039b82611210565b6107cc611232565b471115610817576040805162461bcd60e51b815260206004820152601460248201527313505617d09053105390d157d15610d15151115160621b604482015290519081900360640190fd5b6103ba3482611255565b61082a33610b00565b61086d576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517faf474b5afcf11bd99dc9fc7f499e6ab368d650bf7ef23993f0d61bd9ad7626519181900360200190a16103ba81611543565b610637611565565b604080516001600160a01b03831681526020810184905281517fb4214c8c54fc7442f36d3682f59aebaf09358a4431835b30efb29d52cf9e1e91929181900390910190a160408051600480825260a082019092526060916020820160808036833701905050905060008160008151811061092757fe5b602002602001018181525050816001600160a01b03168160018151811061094a57fe5b6020908102919091010152600160801b83068160028151811061096957fe5b6020908102919091010152600160801b83048160038151811061098857fe5b60200260200101818152505061099c6115fc565b6001600160a01b0316632c9dd5c06109b26111e8565b836040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015610a085781810151838201526020016109f0565b505050509050019350505050602060405180830381600087803b158015610a2e57600080fd5b505af1158015610a42573d6000803e3d6000fd5b505050506040513d6020811015610a5857600080fd5b5050505050565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114610aaa576040519150601f19603f3d011682016040523d82523d6000602084013e610aaf565b606091505b5050905080610afb576040805162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b604482015290519081900360640190fd5b505050565b600080610b0b61161f565b6001600160a01b039390931660009081526020939093525050604090205460ff1690565b610b41836001600160a01b03166116ce565b610b87576040805162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b604482015290519081900360640190fd5b60006060846001600160a01b031663439fab9160e01b85856040516024018080602001828103825284848281815260200192508082843760008382015260408051601f909201601f1990811690940182810390940182529283526020810180516001600160e01b03166001600160e01b0319909916989098178852915182519297909650869550935090915081905083835b60208310610c385780518252601f199092019160209182019101610c19565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610c98576040519150601f19603f3d011682016040523d82523d6000602084013e610c9d565b606091505b5091509150818190610d2d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610cf2578181015183820152602001610cda565b50505050905090810190601f168015610d1f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508051819015610d7e5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610cf2578181015183820152602001610cda565b505050505050565b600080610d916115fc565b6001600160a01b03161415905090565b6040811461039b576040805162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b604482015290519081900360640190fd5b60008083836040811015610dfd57600080fd5b506001600160a01b03813581169350602090910135169050610e1e826116d4565b610e27816116f6565b50505050565b6000610e3761161f565b6001810154909150600160a01b900460ff1615610e91576040805162461bcd60e51b81526020600482015260136024820152721053149150511657d253925512505312569151606a1b604482015290519081900360640190fd5b60018101805460ff60a01b1916600160a01b1790556103ba33611718565b610eb833610b00565b610efb576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b336001600160a01b0382161415610f50576040805162461bcd60e51b8152602060048201526014602482015273474f5645524e4f525f53454c465f52454d4f564560601b604482015290519081900360640190fd5b6000610f5a61161f565b9050610f6582610b00565b610fa5576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa3a7ab22a92727a960a11b604482015290519081900360640190fd5b6001600160a01b03821660008181526020838152604091829020805460ff19169055815192835290517fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a295999281900390910190a15050565b6103ba6040518060600160405280602781526020016119f56027913982611798565b61102733610b00565b61106a576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b600061107461161f565b905061107f82610b00565b156110c4576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b6001810180546001600160a01b0384166001600160a01b0319909116811790915560408051918252517f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a69181900360200190a15050565b600061112561161f565b60018101549091506001600160a01b03163314611189576040805162461bcd60e51b815260206004820152601760248201527f4f4e4c595f43414e4449444154455f474f5645524e4f52000000000000000000604482015290519081900360640190fd5b60018101546111a0906001600160a01b0316611718565b6001810180546001600160a01b03191690556040805133815290517fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d29181900360200190a150565b600061120b6040518060600160405280602781526020016119ce60279139611812565b905090565b6103ba6040518060600160405280602781526020016119ce602791398261188f565b600061120b6040518060600160405280602781526020016119f560279139611812565b61125d6111e8565b6112ae576040805162461bcd60e51b815260206004820152601960248201527f4c325f544f4b454e5f434f4e54524143545f4e4f545f53455400000000000000604482015290519081900360640190fd5b80806112fb576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b600167080000000000001160c01b018110611357576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b61135f6118e2565b83111561139d5760405162461bcd60e51b81526004018080602001828103825260248152602001806119aa6024913960400191505060405180910390fd5b604080513381526020810185905280820184905290517f9dbb0e7dda3e09710ce75b801addc87cf9d9c6c581641b3275fca409ad086c629181900360600190a160408051600380825260808201909252606091602082018380368337019050509050828160008151811061140d57fe5b6020908102919091010152600160801b84068160018151811061142c57fe5b6020908102919091010152600160801b84048160028151811061144b57fe5b60200260200101818152505061145f6115fc565b6001600160a01b0316633e3aa6c56114756111e8565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5846040518463ffffffff1660e01b81526004018084815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156114f25781810151838201526020016114da565b50505050905001945050505050602060405180830381600087803b15801561151957600080fd5b505af115801561152d573d6000803e3d6000fd5b505050506040513d6020811015610d7e57600080fd5b6103ba604051806060016040528060218152602001611a1c6021913982611798565b61156e33610b00565b6115b1576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b60006115bb61161f565b6001810180546001600160a01b03191690556040519091507f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f590600090a150565b600061120b60405180606001604052806028815260200161198260289139611812565b6000806040518060400160405280601c81526020017f535441524b4e45545f312e305f474f5645524e414e43455f494e464f000000008152506040516020018082805190602001908083835b6020831061168a5780518252601f19909201916020918201910161166b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508091505090565b3b151590565b6103ba604051806060016040528060298152602001611a3d6029913982611905565b6103ba6040518060600160405280602881526020016119826028913982611905565b61172181610b00565b15611766576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b600061177061161f565b6001600160a01b0390921660009081526020929092525060409020805460ff19166001179055565b6000826040516020018082805190602001908083835b602083106117cd5780518252601f1990920191602091820191016117ae565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050818155505050565b600080826040516020018082805190602001908083835b602083106118485780518252601f199092019160209182019101611829565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508054915050919050565b61189882611812565b156118d8576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b61039b8282611798565b600061120b604051806060016040528060218152602001611a1c60219139611812565b600061191083611812565b6001600160a01b0316146118d8576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b60008085851115611968578182fd5b83861115611974578182fd5b505082019391909203915056fe535441524b4e45545f544f4b454e5f4252494447455f4d4553534147494e475f434f4e54524143545452414e534645525f544f5f535441524b4e45545f414d4f554e545f4558434545444544535441524b4e45545f544f4b454e5f4252494447455f4c325f544f4b454e5f434f4e5452414354535441524b4e45545f544f4b454e5f4252494447455f4d41585f544f54414c5f42414c414e4345535441524b4e45545f544f4b454e5f4252494447455f4d41585f4445504f534954535441524b4e45545f45524332305f544f4b454e5f4252494447455f544f4b454e5f41444452455353a26469706673582212209959fc54e8a44b980bf871fb9dea17ddd1c7307656ec3058927e288962d49aec64736f6c634300060c0033", + "deployedSourceMap": "218:658:27:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;589:285;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;589:285:27;;;;;;-1:-1:-1;;;;;589:285:27;;:::i;:::-;;617:127:34;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;617:127:34;-1:-1:-1;;;;;617:127:34;;:::i;:::-;;;;;;;;;;;;;;;;;;4376:88:28;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4376:88:28;;:::i;775:86:10:-;;;;;;;;;;;;;:::i;1483:1028::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1483:1028:10;;-1:-1:-1;1483:1028:10;-1:-1:-1;1483:1028:10;:::i;872:120:34:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;872:120:34;-1:-1:-1;;;;;872:120:34;;:::i;2946:182:28:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2946:182:28;;:::i;750:116:34:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;750:116:34;-1:-1:-1;;;;;750:116:34;;:::i;998:80::-;;;;;;;;;;;;;:::i;2665:275:28:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2665:275:28;;:::i;308::27:-;;;;;;;;;;;;;;;;-1:-1:-1;308:275:27;;:::i;3134:152:28:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3134:152:28;;:::i;1084:80:34:-;;;;;;;;;;;;;:::i;589:285:27:-;668:33;683:6;691:9;668:14;:33::i;:::-;-1:-1:-1;;;;;774:25:27;;766:55;;;;;-1:-1:-1;;;766:55:27;;;;;;;;;;;;-1:-1:-1;;;766:55:27;;;;;;;;;;;;;;;831:36;-1:-1:-1;;;;;831:28:27;;860:6;831:28;:36::i;:::-;589:285;;:::o;617:127:34:-;690:4;713:24;724:12;713:10;:24::i;:::-;706:31;617:127;-1:-1:-1;;617:127:34:o;4376:88:28:-;4429:28;4438:6;4446:10;4429:8;:28::i;:::-;4376:88;:::o;775:86:10:-;826:4;775:86;:::o;1483:1028::-;1052:21:5;1132:11;;;1178:19;;1170:54;;;;;-1:-1:-1;;;1170:54:5;;;;;;;;;;;;-1:-1:-1;;;1170:54:5;;;;;;;;;;;;;;;1483:1028:10;;1561:17:::1;1586:19;:17;:19::i;:::-;1581:2;:24:::0;;::::1;::::0;-1:-1:-1;1642:14:10;::::1;1674:31:::0;;::::1;;1666:63;;;::::0;;-1:-1:-1;;;1666:63:10;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;1666:63:10;;;;;;;;;;;;;::::1;;1739:18;1771:32;1786:16:::0;1776:9;1771:4;;:32:::1;:::i;:::-;1760:55;;;;;;;::::0;::::1;;-1:-1:-1::0;1760:55:10::1;-1:-1:-1::0;;;;;1760:55:10::1;::::0;-1:-1:-1;1826:35:10::1;;1864:16;1870:9:::0;1826:35;1864:4;;:16:::1;:::i;:::-;1826:54;;;;1891:49;1919:20;;1891:27;:49::i;:::-;1951:23;;1977;:4:::0;1982:16;1977:4;;:23:::1;:::i;:::-;1951:49:::0;;-1:-1:-1;1951:49:10;-1:-1:-1;;;;;;2095:26:10;::::1;::::0;2091:122:::1;;2137:45;2161:10;2173:8;;2137:23;:45::i;:::-;2196:7;;;;;;;;;2091:122;2227:15;:13;:15::i;:::-;2223:282;;;2266:20:::0;;2258:53:::1;;;::::0;;-1:-1:-1;;;2258:53:10;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2258:53:10;;;;;;;;;;;;;::::1;;2223:282;;;2391:26;2408:8;;2391:16;:26::i;:::-;2431:33;2455:8;;2431:23;:33::i;:::-;2478:16;:14;:16::i;:::-;1244:1:5;;;;;;;1483:1028:10::0;;:::o;872:120:34:-;951:34;966:18;951:14;:34::i;2946:182:28:-;434:22:8;445:10;434;:22::i;:::-;426:50;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;;;;3039:39:28::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;3088:33;3104:16;3088:15;:33::i;750:116:34:-:0;827:32;847:11;827:19;:32::i;998:80::-;1053:18;:16;:18::i;:::-;998:80::o;2665:275:28:-;2461:17;:15;:17::i;:::-;:22;2453:64;;;;;-1:-1:-1;;;2453:64:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;2791:16;2260:14;2252:50:::1;;;::::0;;-1:-1:-1;;;2252:50:28;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2252:50:28;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;2320:9:28::1;:38;2312:74;;;::::0;;-1:-1:-1;;;2312:74:28;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2312:74:28;;;;;;;;;;;;;::::1;;434:22:8::2;445:10;434;:22::i;:::-;426:50;;;::::0;;-1:-1:-1;;;426:50:8;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;;::::2;;2851:39:28::3;::::0;;;;;;;::::3;::::0;;;;::::3;::::0;;::::3;2900:33;2916:16;2900:15;:33::i;308:275:27:-:0;489:17;:15;:17::i;:::-;464:21;:42;;456:75;;;;;-1:-1:-1;;;456:75:27;;;;;;;;;;;;-1:-1:-1;;;456:75:27;;;;;;;;;;;;;;;541:35;553:9;564:11;541;:35::i;3134:152:28:-;434:22:8;445:10;434;:22::i;:::-;426:50;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;;;;3217:29:28::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;3256:23;3267:11;3256:10;:23::i;1084:80:34:-:0;1139:18;:16;:18::i;3857:439:28:-;3940:32;;;-1:-1:-1;;;;;3940:32:28;;;;;;;;;;;;;;;;;;;;;;;4010:16;;;4024:1;4010:16;;;;;;;;;3983:24;;4010:16;;;;;;;;;;-1:-1:-1;4010:16:28;3983:43;;2140:1;4036:7;4044:1;4036:10;;;;;;;;;;;;;:35;;;;;4102:9;-1:-1:-1;;;;;4094:18:28;4081:7;4089:1;4081:10;;;;;;;;;;;;;;;;;:31;-1:-1:-1;;;4135:6:28;:26;4122:7;4130:1;4122:10;;;;;;;;;;;;;;;;;:39;-1:-1:-1;;;4184:6:28;:26;4171:7;4179:1;4171:10;;;;;;;;;;;;;:39;;;;;4221:19;:17;:19::i;:::-;-1:-1:-1;;;;;4221:40:28;;4262:17;:15;:17::i;:::-;4281:7;4221:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3857:439:28:o;357:218:11:-;458:33;;440:12;;-1:-1:-1;;;;;458:14:11;;;480:6;;440:12;458:33;440:12;458:33;480:6;458:14;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;439:52;;;537:7;529:39;;;;;-1:-1:-1;;;529:39:11;;;;;;;;;;;;-1:-1:-1;;;529:39:11;;;;;;;;;;;;;;;357:218;;;:::o;1840:204:1:-;1914:4;1930:32;1965:19;:17;:19::i;:::-;-1:-1:-1;;;;;2001:36:1;;;;:22;:36;;;;;;;;-1:-1:-1;;2001:36:1;;;;;;;1840:204::o;2517:540:10:-;2645:36;:23;-1:-1:-1;;;;;2645:34:10;;:36::i;:::-;2637:67;;;;;-1:-1:-1;;;2637:67:10;;;;;;;;;;;;-1:-1:-1;;;2637:67:10;;;;;;;;;;;;;;;2785:12;2799:23;2826;-1:-1:-1;;;;;2826:36:10;2899:24;;;2925:7;;2876:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2876:57:10;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2876:57:10;-1:-1:-1;;;;;;2876:57:10;;;;;;;;;2826:117;;;;2876:57;;2826:117;;-1:-1:-1;2826:117:10;;-1:-1:-1;2876:57:10;-1:-1:-1;2826:117:10;;-1:-1:-1;2826:117:10;;-1:-1:-1;2826:117:10;2876:57;2826:117;;;;;;;;;;-1:-1:-1;;2826:117:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2784:159;;;;2961:7;2977:10;2953:36;;;;;-1:-1:-1;;;2953:36:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3007:17:10;;:10;;:22;2999:51;;;;-1:-1:-1;;;2999:51:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2517:540;;;;;:::o;971:131:28:-;1028:4;;1051:19;:17;:19::i;:::-;-1:-1:-1;;;;;1051:44:28;;;1044:51;;971:131;:::o;1209:134::-;1312:2;1297:17;;1289:47;;;;;-1:-1:-1;;;1289:47:28;;;;;;;;;;;;-1:-1:-1;;;1289:47:28;;;;;;;;;;;;;;1605:319;1688:21;1711:37;1776:4;;1752:81;;;;;;;;;;-1:-1:-1;;;;;;1752:81:28;;;;;-1:-1:-1;1752:81:28;;;;;;;-1:-1:-1;1843:27:28;1752:81;1843:12;:27::i;:::-;1880:37;1898:18;1880:17;:37::i;:::-;1605:319;;;;:::o;1529:305:1:-;1574:32;1609:19;:17;:19::i;:::-;1647:15;;;;;;-1:-1:-1;;;;1647:15:1;;;;1646:16;1638:48;;;;;-1:-1:-1;;;1638:48:1;;;;;;;;;;;;-1:-1:-1;;;1638:48:1;;;;;;;;;;;;;;;1714:4;1696:15;;:22;;-1:-1:-1;;;;1696:22:1;-1:-1:-1;;;1696:22:1;;;1804:23;1816:10;1804:11;:23::i;3747:400::-;434:22:8;445:10;434;:22::i;:::-;426:50;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;;;;3841:10:1::1;-1:-1:-1::0;;;;;3841:32:1;::::1;;;3833:65;;;::::0;;-1:-1:-1;;;3833:65:1;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;3833:65:1;;;;;;;;;;;;;::::1;;3908:32;3943:19;:17;:19::i;:::-;3908:54;;3980:30;3991:18;3980:10;:30::i;:::-;3972:55;;;::::0;;-1:-1:-1;;;3972:55:1;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;3972:55:1;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;4037:42:1;::::1;4082:5;4037:42:::0;;;::::1;::::0;;;;;;;;:50;;-1:-1:-1;;4037:50:1::1;::::0;;4102:38;;;;;;;::::1;::::0;;;;;;;;::::1;486:1:8;3747:400:1::0;:::o;1858:121:29:-;1917:55;1943:21;;;;;;;;;;;;;;;;;1966:5;1917:25;:55::i;2332:301:1:-;434:22:8;445:10;434;:22::i;:::-;426:50;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;;;;2416:32:1::1;2451:19;:17;:19::i;:::-;2416:54;;2489:23;2500:11;2489:10;:23::i;:::-;2488:24;2480:53;;;::::0;;-1:-1:-1;;;2480:53:1;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2480:53:1;;;;;;;;;;;;;::::1;;2543:21;::::0;::::1;:35:::0;;-1:-1:-1;;;;;2543:35:1;::::1;-1:-1:-1::0;;;;;;2543:35:1;;::::1;::::0;::::1;::::0;;;2593:33:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;486:1:8;2332:301:1::0;:::o;3193:497::-;3321:32;3356:19;:17;:19::i;:::-;3407:21;;;;;;-1:-1:-1;;;;;;3407:21:1;3393:10;:35;3385:71;;;;;-1:-1:-1;;;3385:71:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;3504:21;;;;3492:34;;-1:-1:-1;;;;;3504:21:1;3492:11;:34::i;:::-;3536:21;;;:36;;-1:-1:-1;;;;;;3536:36:1;;;3649:34;;;3672:10;3649:34;;;;;;;;;;;;;3193:497;:::o;896:122:29:-;946:7;972:39;998:12;;;;;;;;;;;;;;;;;972:25;:39::i;:::-;965:46;;896:122;:::o;1620:116::-;1679:50;1709:12;;;;;;;;;;;;;;;;;1723:5;1679:29;:50::i;1150:131::-;1200:7;1226:48;1252:21;;;;;;;;;;;;;;;;;1226:25;:48::i;3292:559:28:-;2589:17;:15;:17::i;:::-;2581:60;;;;;-1:-1:-1;;;2581:60:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;3419:11;2260:14;2252:50:::1;;;::::0;;-1:-1:-1;;;2252:50:28;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2252:50:28;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;2320:9:28::1;:38;2312:74;;;::::0;;-1:-1:-1;;;2312:74:28;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2312:74:28;;;;;;;;;;;;;::::1;;3464:12:::2;:10;:12::i;:::-;3454:6;:22;;3446:71;;;;-1:-1:-1::0;;;3446:71:28::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3532:43;::::0;;3543:10:::2;3532:43:::0;;::::2;::::0;::::2;::::0;;;;;;;;;;;::::2;::::0;;;;;;;::::2;3613:16;::::0;;3627:1:::2;3613:16:::0;;;;;::::2;::::0;;;3586:24:::2;::::0;3613:16:::2;::::0;::::2;3586:24:::0;;3613:16:::2;::::0;::::2;;::::0;-1:-1:-1;3613:16:28::2;3586:43;;3652:11;3639:7;3647:1;3639:10;;;;;;;;;::::0;;::::2;::::0;;;;;:24;-1:-1:-1;;;3686:6:28;:26:::2;3673:7;3681:1;3673:10;;;;;;;;;::::0;;::::2;::::0;;;;;:39;-1:-1:-1;;;3735:6:28;:26:::2;3722:7;3730:1;3722:10;;;;;;;;;;;;;:39;;;::::0;::::2;3771:19;:17;:19::i;:::-;-1:-1:-1::0;;;;;3771:35:28::2;;3807:17;:15;:17::i;:::-;2016:76;3836:7;3771:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;1742:110:29::0;1796:49;1822:15;;;;;;;;;;;;;;;;;1839:5;1796:25;:49::i;2118:208:1:-;434:22:8;445:10;434;:22::i;:::-;426:50;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;;;;2180:32:1::1;2215:19;:17;:19::i;:::-;2244:21;::::0;::::1;:36:::0;;-1:-1:-1;;;;;;2244:36:1::1;::::0;;2295:24:::1;::::0;2180:54;;-1:-1:-1;2295:24:1::1;::::0;2276:3:::1;::::0;2295:24:::1;486:1:8;2118:208:1:o:0;1287:168:29:-;1339:18;1395:52;1424:22;;;;;;;;;;;;;;;;;1395:28;:52::i;361:250:34:-;422:32;466:16;512:28;;;;;;;;;;;;;;;;;495:46;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;495:46:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;485:57;;;;;;466:76;;587:8;575:20;;561:44;;:::o;161:190:11:-;290:20;336:8;;;161:190::o;1485:129:29:-;1545:62;1578:17;;;;;;;;;;;;;;;;;1597:9;1545:32;:62::i;1985:159::-;2061:76;2094:22;;;;;;;;;;;;;;;;;2126:9;2061:32;:76::i;2951:236:1:-;3020:23;3031:11;3020:10;:23::i;:::-;3019:24;3011:53;;;;;-1:-1:-1;;;3011:53:1;;;;;;;;;;;;-1:-1:-1;;;3011:53:1;;;;;;;;;;;;;;;3074:32;3109:19;:17;:19::i;:::-;-1:-1:-1;;;;;3138:35:1;;;:22;:35;;;;;;;;-1:-1:-1;3138:35:1;;;:42;;-1:-1:-1;;3138:42:1;3176:4;3138:42;;;2951:236::o;1379:192:0:-;1455:12;1497:4;1480:22;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1480:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1470:33;;;;;;1455:48;;1549:5;1543:4;1536:19;1522:43;;;:::o;1164:209::-;1229:14;1255:12;1297:4;1280:22;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1280:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1270:33;;;;;;1255:48;;1352:4;1346:11;1336:21;;1322:45;;;;:::o;1577:169::-;1665:18;1678:4;1665:12;:18::i;:::-;:23;1657:47;;;;;-1:-1:-1;;;1657:47:0;;;;;;;;;;;;-1:-1:-1;;;1657:47:0;;;;;;;;;;;;;;;1714:25;1727:4;1733:5;1714:12;:25::i;1024:120:29:-;1069:7;1095:42;1121:15;;;;;;;;;;;;;;;;;1095:25;:42::i;2171:189:0:-;2295:3;2262:21;2278:4;2262:15;:21::i;:::-;-1:-1:-1;;;;;2262:37:0;;2254:61;;;;;-1:-1:-1;;;2254:61:0;;;;;;;;;;;;-1:-1:-1;;;2254:61:0;;;;;;;;;;;;;;5:318:-1;;;155:8;143:10;140:24;137:2;;;-1:-1;;167:12;137:2;202:6;192:8;189:20;186:2;;;-1:-1;;212:12;186:2;-1:-1;;244:31;;;293:25;;;;;-1:-1;131:192::o", + "language": "Solidity", + "natspec": { + "kind": "dev", + "methods": {}, + "version": 1 + }, + "offset": [218, 876], + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC1 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x894ECF04 GT PUSH2 0x7F JUMPI DUP1 PUSH4 0xA90E32B8 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xA90E32B8 EQ PUSH2 0x2A9 JUMPI DUP1 PUSH4 0xB6B55F25 EQ PUSH2 0x2D3 JUMPI DUP1 PUSH4 0xBB371FDD EQ PUSH2 0x2F0 JUMPI DUP1 PUSH4 0xE37FEC25 EQ PUSH2 0x31A JUMPI PUSH2 0xC1 JUMP JUMPDEST DUP1 PUSH4 0x894ECF04 EQ PUSH2 0x237 JUMPI DUP1 PUSH4 0x91A66A26 EQ PUSH2 0x261 JUMPI DUP1 PUSH4 0x946BE3ED EQ PUSH2 0x294 JUMPI PUSH2 0xC1 JUMP JUMPDEST DUP1 PUSH3 0xF714CE EQ PUSH2 0xC6 JUMPI DUP1 PUSH4 0x1A01590 EQ PUSH2 0x101 JUMPI DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x148 JUMPI DUP1 PUSH4 0x33EEB147 EQ PUSH2 0x172 JUMPI DUP1 PUSH4 0x439FAB91 EQ PUSH2 0x187 JUMPI DUP1 PUSH4 0x84F921CD EQ PUSH2 0x204 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x32F JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x134 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x124 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x39F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x154 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x16B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x3B0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x17E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x134 PUSH2 0x3BD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x193 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x3C2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x210 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x227 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x595 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x243 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x25A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x59E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x284 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x626 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0x62F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x639 JUMP JUMPDEST PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x7C4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x313 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x821 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x326 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0x8A9 JUMP JUMPDEST PUSH2 0x339 DUP3 DUP3 PUSH2 0x8B1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x388 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x1253959053125117D49150D25412515395 PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x39B PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP4 PUSH2 0xA5F JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3AA DUP3 PUSH2 0xB00 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x3BA DUP2 CALLER PUSH2 0x32F JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 DUP1 SLOAD SWAP1 DUP2 ISZERO PUSH2 0x432 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x1112549150D517D0D0531317D11254D0531313D5D151 PUSH1 0x52 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x0 PUSH2 0x43E PUSH2 0x3BD JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 POP DUP2 ADD DUP1 DUP4 LT ISZERO PUSH2 0x492 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x1253925517D110551057D513D3D7D4D3505313 PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x4A0 DUP3 DUP5 DUP7 DUP9 PUSH2 0x1959 JUMP JUMPDEST PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP CALLDATASIZE PUSH1 0x0 PUSH2 0x4CA DUP6 DUP3 DUP9 DUP11 PUSH2 0x1959 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x4D8 DUP3 DUP3 PUSH2 0x39B JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 PUSH2 0x4E7 DUP9 DUP8 DUP2 DUP13 PUSH2 0x1959 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND ISZERO PUSH2 0x512 JUMPI PUSH2 0x506 DUP6 DUP4 DUP4 PUSH2 0xB2F JUMP JUMPDEST POP POP POP POP POP POP POP PUSH2 0x39B JUMP JUMPDEST PUSH2 0x51A PUSH2 0xD86 JUMP JUMPDEST ISZERO PUSH2 0x56E JUMPI DUP1 ISZERO PUSH2 0x569 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x554E45585045435445445F494E49545F44415441 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x58A JUMP JUMPDEST PUSH2 0x578 DUP3 DUP3 PUSH2 0xDA1 JUMP JUMPDEST PUSH2 0x582 DUP3 DUP3 PUSH2 0xDEA JUMP JUMPDEST PUSH2 0x58A PUSH2 0xE2D JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3BA DUP2 PUSH2 0xEAF JUMP JUMPDEST PUSH2 0x5A7 CALLER PUSH2 0xB00 JUMP JUMPDEST PUSH2 0x5EA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4F4E4C595F474F5645524E414E4345 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xA9AEC19EC61C04AE0A4A1498AB6CE04CBD68B3D54C47888A45EB2BD37CAF06BC SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 PUSH2 0x3BA DUP2 PUSH2 0xFFC JUMP JUMPDEST PUSH2 0x3BA DUP2 PUSH2 0x101E JUMP JUMPDEST PUSH2 0x637 PUSH2 0x111B JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x641 PUSH2 0x11E8 JUMP JUMPDEST ISZERO PUSH2 0x693 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C325F544F4B454E5F434F4E54524143545F414C52454144595F534554000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP1 PUSH2 0x6E0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x4C325F414444524553535F4F55545F4F465F52414E4745 PUSH1 0x48 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH8 0x800000000000011 PUSH1 0xC0 SHL ADD DUP2 LT PUSH2 0x73C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x4C325F414444524553535F4F55545F4F465F52414E4745 PUSH1 0x48 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x745 CALLER PUSH2 0xB00 JUMP JUMPDEST PUSH2 0x788 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4F4E4C595F474F5645524E414E4345 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x49774A785AFE45B60857497C0AFF8733F202CA7E75329AD6408073564EFEA6DF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 PUSH2 0x39B DUP3 PUSH2 0x1210 JUMP JUMPDEST PUSH2 0x7CC PUSH2 0x1232 JUMP JUMPDEST SELFBALANCE GT ISZERO PUSH2 0x817 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x13505617D09053105390D157D15610D151511151 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3BA CALLVALUE DUP3 PUSH2 0x1255 JUMP JUMPDEST PUSH2 0x82A CALLER PUSH2 0xB00 JUMP JUMPDEST PUSH2 0x86D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4F4E4C595F474F5645524E414E4345 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xAF474B5AFCF11BD99DC9FC7F499E6AB368D650BF7EF23993F0D61BD9AD762651 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 PUSH2 0x3BA DUP2 PUSH2 0x1543 JUMP JUMPDEST PUSH2 0x637 PUSH2 0x1565 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE DUP2 MLOAD PUSH32 0xB4214C8C54FC7442F36D3682F59AEBAF09358A4431835B30EFB29D52CF9E1E91 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 PUSH1 0x40 DUP1 MLOAD PUSH1 0x4 DUP1 DUP3 MSTORE PUSH1 0xA0 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 PUSH1 0x20 DUP3 ADD PUSH1 0x80 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x927 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x94A JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 PUSH1 0x80 SHL DUP4 MOD DUP2 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x969 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 PUSH1 0x80 SHL DUP4 DIV DUP2 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x988 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x99C PUSH2 0x15FC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2C9DD5C0 PUSH2 0x9B2 PUSH2 0x11E8 JUMP JUMPDEST DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xA08 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x9F0 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA42 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP4 SWAP1 DUP4 DUP2 DUP2 DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xAAA JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xAAF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0xAFB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x11551217D514905394D1915497D19052531151 PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xB0B PUSH2 0x161F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP4 SWAP1 SWAP4 MSTORE POP POP PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0xB41 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x16CE JUMP JUMPDEST PUSH2 0xB87 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x115250D7D393D517D057D0D3D395149050D5 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x439FAB91 PUSH1 0xE0 SHL DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F SWAP1 SWAP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND SWAP1 SWAP5 ADD DUP3 DUP2 SUB SWAP1 SWAP5 ADD DUP3 MSTORE SWAP3 DUP4 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP10 AND SWAP9 SWAP1 SWAP9 OR DUP9 MSTORE SWAP2 MLOAD DUP3 MLOAD SWAP3 SWAP8 SWAP1 SWAP7 POP DUP7 SWAP6 POP SWAP4 POP SWAP1 SWAP2 POP DUP2 SWAP1 POP DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xC38 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xC19 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xC98 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xC9D JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP2 SWAP1 PUSH2 0xD2D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xCF2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xCDA JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xD1F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP1 MLOAD DUP2 SWAP1 ISZERO PUSH2 0xD7E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0xCF2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xCDA JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xD91 PUSH2 0x15FC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP2 EQ PUSH2 0x39B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x494C4C4547414C5F444154415F53495A45 PUSH1 0x78 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 DUP4 PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xDFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP4 POP PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD AND SWAP1 POP PUSH2 0xE1E DUP3 PUSH2 0x16D4 JUMP JUMPDEST PUSH2 0xE27 DUP2 PUSH2 0x16F6 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE37 PUSH2 0x161F JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xE91 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x1053149150511657D253925512505312569151 PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 ADD DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE PUSH2 0x3BA CALLER PUSH2 0x1718 JUMP JUMPDEST PUSH2 0xEB8 CALLER PUSH2 0xB00 JUMP JUMPDEST PUSH2 0xEFB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4F4E4C595F474F5645524E414E4345 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ ISZERO PUSH2 0xF50 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x474F5645524E4F525F53454C465F52454D4F5645 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xF5A PUSH2 0x161F JUMP JUMPDEST SWAP1 POP PUSH2 0xF65 DUP3 PUSH2 0xB00 JUMP JUMPDEST PUSH2 0xFA5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x2727AA2FA3A7AB22A92727A9 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP4 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP2 MLOAD SWAP3 DUP4 MSTORE SWAP1 MLOAD PUSH32 0xD75F94825E770B8B512BE8E74759E252AD00E102E38F50CCE2F7C6F868A29599 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH2 0x3BA PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19F5 PUSH1 0x27 SWAP2 CODECOPY DUP3 PUSH2 0x1798 JUMP JUMPDEST PUSH2 0x1027 CALLER PUSH2 0xB00 JUMP JUMPDEST PUSH2 0x106A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4F4E4C595F474F5645524E414E4345 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1074 PUSH2 0x161F JUMP JUMPDEST SWAP1 POP PUSH2 0x107F DUP3 PUSH2 0xB00 JUMP JUMPDEST ISZERO PUSH2 0x10C4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x20A62922A0A22CAFA3A7AB22A92727A9 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0x6166272C8D3F5F579082F2827532732F97195007983BB5B83AC12C56700B01A6 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1125 PUSH2 0x161F JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1189 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F43414E4449444154455F474F5645524E4F52000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD PUSH2 0x11A0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1718 JUMP JUMPDEST PUSH1 0x1 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE SWAP1 MLOAD PUSH32 0xCFB473E6C03F9A29DDAF990E736FA3DE5188A0BD85D684F5B6E164EBFBFFF5D2 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x120B PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19CE PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x1812 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x3BA PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19CE PUSH1 0x27 SWAP2 CODECOPY DUP3 PUSH2 0x188F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x120B PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19F5 PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x1812 JUMP JUMPDEST PUSH2 0x125D PUSH2 0x11E8 JUMP JUMPDEST PUSH2 0x12AE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C325F544F4B454E5F434F4E54524143545F4E4F545F53455400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP1 PUSH2 0x12FB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x4C325F414444524553535F4F55545F4F465F52414E4745 PUSH1 0x48 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH8 0x800000000000011 PUSH1 0xC0 SHL ADD DUP2 LT PUSH2 0x1357 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x4C325F414444524553535F4F55545F4F465F52414E4745 PUSH1 0x48 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x135F PUSH2 0x18E2 JUMP JUMPDEST DUP4 GT ISZERO PUSH2 0x139D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x19AA PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD DUP5 SWAP1 MSTORE SWAP1 MLOAD PUSH32 0x9DBB0E7DDA3E09710CE75B801ADDC87CF9D9C6C581641B3275FCA409AD086C62 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 PUSH1 0x40 DUP1 MLOAD PUSH1 0x3 DUP1 DUP3 MSTORE PUSH1 0x80 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 PUSH1 0x20 DUP3 ADD DUP4 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP3 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x140D JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 PUSH1 0x80 SHL DUP5 MOD DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x142C JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 PUSH1 0x80 SHL DUP5 DIV DUP2 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x144B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x145F PUSH2 0x15FC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3E3AA6C5 PUSH2 0x1475 PUSH2 0x11E8 JUMP JUMPDEST PUSH32 0x2D757788A8D8D6F21D1CD40BCE38A8222D70654214E96FF95D8086E684FBEE5 DUP5 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x14F2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x14DA JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1519 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x152D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xD7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3BA PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1A1C PUSH1 0x21 SWAP2 CODECOPY DUP3 PUSH2 0x1798 JUMP JUMPDEST PUSH2 0x156E CALLER PUSH2 0xB00 JUMP JUMPDEST PUSH2 0x15B1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4F4E4C595F474F5645524E414E4345 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x15BB PUSH2 0x161F JUMP JUMPDEST PUSH1 0x1 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 POP PUSH32 0x7A8DC7DD7FFFB43C4807438FA62729225156941E641FD877938F4EDADE3429F5 SWAP1 PUSH1 0x0 SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x120B PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1982 PUSH1 0x28 SWAP2 CODECOPY PUSH2 0x1812 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1C DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x535441524B4E45545F312E305F474F5645524E414E43455F494E464F00000000 DUP2 MSTORE POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x168A JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x166B JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP1 SWAP2 POP POP SWAP1 JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x3BA PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1A3D PUSH1 0x29 SWAP2 CODECOPY DUP3 PUSH2 0x1905 JUMP JUMPDEST PUSH2 0x3BA PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1982 PUSH1 0x28 SWAP2 CODECOPY DUP3 PUSH2 0x1905 JUMP JUMPDEST PUSH2 0x1721 DUP2 PUSH2 0xB00 JUMP JUMPDEST ISZERO PUSH2 0x1766 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x20A62922A0A22CAFA3A7AB22A92727A9 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1770 PUSH2 0x161F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP3 SWAP1 SWAP3 MSTORE POP PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x17CD JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x17AE JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP2 DUP2 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1848 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1829 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP1 SLOAD SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1898 DUP3 PUSH2 0x1812 JUMP JUMPDEST ISZERO PUSH2 0x18D8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x1053149150511657D4D155 PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x39B DUP3 DUP3 PUSH2 0x1798 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x120B PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1A1C PUSH1 0x21 SWAP2 CODECOPY PUSH2 0x1812 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1910 DUP4 PUSH2 0x1812 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x18D8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x1053149150511657D4D155 PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP6 GT ISZERO PUSH2 0x1968 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP4 DUP7 GT ISZERO PUSH2 0x1974 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP3 ADD SWAP4 SWAP2 SWAP1 SWAP3 SUB SWAP2 POP JUMP INVALID MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F SLOAD 0x4F 0x4B GASLIMIT 0x4E 0x5F TIMESTAMP MSTORE 0x49 DIFFICULTY SELFBALANCE GASLIMIT 0x5F 0x4D GASLIMIT MSTORE8 MSTORE8 COINBASE SELFBALANCE 0x49 0x4E SELFBALANCE 0x5F NUMBER 0x4F 0x4E SLOAD MSTORE COINBASE NUMBER SLOAD SLOAD MSTORE COINBASE 0x4E MSTORE8 CHAINID GASLIMIT MSTORE 0x5F SLOAD 0x4F 0x5F MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F COINBASE 0x4D 0x4F SSTORE 0x4E SLOAD 0x5F GASLIMIT PC NUMBER GASLIMIT GASLIMIT DIFFICULTY GASLIMIT DIFFICULTY MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F SLOAD 0x4F 0x4B GASLIMIT 0x4E 0x5F TIMESTAMP MSTORE 0x49 DIFFICULTY SELFBALANCE GASLIMIT 0x5F 0x4C ORIGIN 0x5F SLOAD 0x4F 0x4B GASLIMIT 0x4E 0x5F NUMBER 0x4F 0x4E SLOAD MSTORE COINBASE NUMBER SLOAD MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F SLOAD 0x4F 0x4B GASLIMIT 0x4E 0x5F TIMESTAMP MSTORE 0x49 DIFFICULTY SELFBALANCE GASLIMIT 0x5F 0x4D COINBASE PC 0x5F SLOAD 0x4F SLOAD COINBASE 0x4C 0x5F TIMESTAMP COINBASE 0x4C COINBASE 0x4E NUMBER GASLIMIT MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F SLOAD 0x4F 0x4B GASLIMIT 0x4E 0x5F TIMESTAMP MSTORE 0x49 DIFFICULTY SELFBALANCE GASLIMIT 0x5F 0x4D COINBASE PC 0x5F DIFFICULTY GASLIMIT POP 0x4F MSTORE8 0x49 SLOAD MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F GASLIMIT MSTORE NUMBER ORIGIN ADDRESS 0x5F SLOAD 0x4F 0x4B GASLIMIT 0x4E 0x5F TIMESTAMP MSTORE 0x49 DIFFICULTY SELFBALANCE GASLIMIT 0x5F SLOAD 0x4F 0x4B GASLIMIT 0x4E 0x5F COINBASE DIFFICULTY DIFFICULTY MSTORE GASLIMIT MSTORE8 MSTORE8 LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP10 MSIZE 0xFC SLOAD 0xE8 LOG4 0x4B SWAP9 SIGNEXTEND 0xF8 PUSH18 0xFB9DEA17DDD1C7307656EC3058927E288962 0xD4 SWAP11 0xEC PUSH5 0x736F6C6343 STOP MOD 0xC STOP CALLER ", + "pcMap": { + "0": { + "offset": [218, 876], + "op": "PUSH1", + "path": "27", + "value": "0x80" + }, + "2": { + "fn": null, + "offset": [218, 876], + "op": "PUSH1", + "path": "27", + "value": "0x40" + }, + "4": { + "fn": null, + "offset": [218, 876], + "op": "MSTORE", + "path": "27" + }, + "5": { + "fn": null, + "offset": [218, 876], + "op": "PUSH1", + "path": "27", + "value": "0x4" + }, + "7": { + "fn": null, + "offset": [218, 876], + "op": "CALLDATASIZE", + "path": "27" + }, + "8": { + "fn": null, + "offset": [218, 876], + "op": "LT", + "path": "27" + }, + "9": { + "fn": null, + "offset": [218, 876], + "op": "PUSH2", + "path": "27", + "value": "0xC1" + }, + "12": { + "fn": null, + "offset": [218, 876], + "op": "JUMPI", + "path": "27" + }, + "13": { + "fn": null, + "offset": [218, 876], + "op": "PUSH1", + "path": "27", + "value": "0x0" + }, + "15": { + "fn": null, + "offset": [218, 876], + "op": "CALLDATALOAD", + "path": "27" + }, + "16": { + "fn": null, + "offset": [218, 876], + "op": "PUSH1", + "path": "27", + "value": "0xE0" + }, + "18": { + "fn": null, + "offset": [218, 876], + "op": "SHR", + "path": "27" + }, + "19": { + "fn": null, + "offset": [218, 876], + "op": "DUP1", + "path": "27" + }, + "20": { + "fn": null, + "offset": [218, 876], + "op": "PUSH4", + "path": "27", + "value": "0x894ECF04" + }, + "25": { + "fn": null, + "offset": [218, 876], + "op": "GT", + "path": "27" + }, + "26": { + "fn": null, + "offset": [218, 876], + "op": "PUSH2", + "path": "27", + "value": "0x7F" + }, + "29": { + "fn": null, + "offset": [218, 876], + "op": "JUMPI", + "path": "27" + }, + "30": { + "fn": null, + "offset": [218, 876], + "op": "DUP1", + "path": "27" + }, + "31": { + "fn": null, + "offset": [218, 876], + "op": "PUSH4", + "path": "27", + "value": "0xA90E32B8" + }, + "36": { + "fn": null, + "offset": [218, 876], + "op": "GT", + "path": "27" + }, + "37": { + "fn": null, + "offset": [218, 876], + "op": "PUSH2", + "path": "27", + "value": "0x59" + }, + "40": { + "fn": null, + "offset": [218, 876], + "op": "JUMPI", + "path": "27" + }, + "41": { + "fn": null, + "offset": [218, 876], + "op": "DUP1", + "path": "27" + }, + "42": { + "fn": null, + "offset": [218, 876], + "op": "PUSH4", + "path": "27", + "value": "0xA90E32B8" + }, + "47": { + "fn": null, + "offset": [218, 876], + "op": "EQ", + "path": "27" + }, + "48": { + "fn": null, + "offset": [218, 876], + "op": "PUSH2", + "path": "27", + "value": "0x2A9" + }, + "51": { + "fn": null, + "offset": [218, 876], + "op": "JUMPI", + "path": "27" + }, + "52": { + "fn": null, + "offset": [218, 876], + "op": "DUP1", + "path": "27" + }, + "53": { + "fn": null, + "offset": [218, 876], + "op": "PUSH4", + "path": "27", + "value": "0xB6B55F25" + }, + "58": { + "fn": null, + "offset": [218, 876], + "op": "EQ", + "path": "27" + }, + "59": { + "fn": null, + "offset": [218, 876], + "op": "PUSH2", + "path": "27", + "value": "0x2D3" + }, + "62": { + "fn": null, + "offset": [218, 876], + "op": "JUMPI", + "path": "27" + }, + "63": { + "fn": null, + "offset": [218, 876], + "op": "DUP1", + "path": "27" + }, + "64": { + "fn": null, + "offset": [218, 876], + "op": "PUSH4", + "path": "27", + "value": "0xBB371FDD" + }, + "69": { + "fn": null, + "offset": [218, 876], + "op": "EQ", + "path": "27" + }, + "70": { + "fn": null, + "offset": [218, 876], + "op": "PUSH2", + "path": "27", + "value": "0x2F0" + }, + "73": { + "fn": null, + "offset": [218, 876], + "op": "JUMPI", + "path": "27" + }, + "74": { + "fn": null, + "offset": [218, 876], + "op": "DUP1", + "path": "27" + }, + "75": { + "fn": null, + "offset": [218, 876], + "op": "PUSH4", + "path": "27", + "value": "0xE37FEC25" + }, + "80": { + "fn": null, + "offset": [218, 876], + "op": "EQ", + "path": "27" + }, + "81": { + "fn": null, + "offset": [218, 876], + "op": "PUSH2", + "path": "27", + "value": "0x31A" + }, + "84": { + "fn": null, + "offset": [218, 876], + "op": "JUMPI", + "path": "27" + }, + "85": { + "fn": null, + "offset": [218, 876], + "op": "PUSH2", + "path": "27", + "value": "0xC1" + }, + "88": { + "fn": null, + "offset": [218, 876], + "op": "JUMP", + "path": "27" + }, + "89": { + "fn": null, + "offset": [218, 876], + "op": "JUMPDEST", + "path": "27" + }, + "90": { + "fn": null, + "offset": [218, 876], + "op": "DUP1", + "path": "27" + }, + "91": { + "fn": null, + "offset": [218, 876], + "op": "PUSH4", + "path": "27", + "value": "0x894ECF04" + }, + "96": { + "fn": null, + "offset": [218, 876], + "op": "EQ", + "path": "27" + }, + "97": { + "fn": null, + "offset": [218, 876], + "op": "PUSH2", + "path": "27", + "value": "0x237" + }, + "100": { + "fn": null, + "offset": [218, 876], + "op": "JUMPI", + "path": "27" + }, + "101": { + "fn": null, + "offset": [218, 876], + "op": "DUP1", + "path": "27" + }, + "102": { + "fn": null, + "offset": [218, 876], + "op": "PUSH4", + "path": "27", + "value": "0x91A66A26" + }, + "107": { + "fn": null, + "offset": [218, 876], + "op": "EQ", + "path": "27" + }, + "108": { + "fn": null, + "offset": [218, 876], + "op": "PUSH2", + "path": "27", + "value": "0x261" + }, + "111": { + "fn": null, + "offset": [218, 876], + "op": "JUMPI", + "path": "27" + }, + "112": { + "fn": null, + "offset": [218, 876], + "op": "DUP1", + "path": "27" + }, + "113": { + "fn": null, + "offset": [218, 876], + "op": "PUSH4", + "path": "27", + "value": "0x946BE3ED" + }, + "118": { + "fn": null, + "offset": [218, 876], + "op": "EQ", + "path": "27" + }, + "119": { + "fn": null, + "offset": [218, 876], + "op": "PUSH2", + "path": "27", + "value": "0x294" + }, + "122": { + "fn": null, + "offset": [218, 876], + "op": "JUMPI", + "path": "27" + }, + "123": { + "fn": null, + "offset": [218, 876], + "op": "PUSH2", + "path": "27", + "value": "0xC1" + }, + "126": { + "fn": null, + "offset": [218, 876], + "op": "JUMP", + "path": "27" + }, + "127": { + "fn": null, + "offset": [218, 876], + "op": "JUMPDEST", + "path": "27" + }, + "128": { + "fn": null, + "offset": [218, 876], + "op": "DUP1", + "path": "27" + }, + "129": { + "fn": null, + "offset": [218, 876], + "op": "PUSH3", + "path": "27", + "value": "0xF714CE" + }, + "133": { + "fn": null, + "offset": [218, 876], + "op": "EQ", + "path": "27" + }, + "134": { + "fn": null, + "offset": [218, 876], + "op": "PUSH2", + "path": "27", + "value": "0xC6" + }, + "137": { + "fn": null, + "offset": [218, 876], + "op": "JUMPI", + "path": "27" + }, + "138": { + "fn": null, + "offset": [218, 876], + "op": "DUP1", + "path": "27" + }, + "139": { + "fn": null, + "offset": [218, 876], + "op": "PUSH4", + "path": "27", + "value": "0x1A01590" + }, + "144": { + "fn": null, + "offset": [218, 876], + "op": "EQ", + "path": "27" + }, + "145": { + "fn": null, + "offset": [218, 876], + "op": "PUSH2", + "path": "27", + "value": "0x101" + }, + "148": { + "fn": null, + "offset": [218, 876], + "op": "JUMPI", + "path": "27" + }, + "149": { + "fn": null, + "offset": [218, 876], + "op": "DUP1", + "path": "27" + }, + "150": { + "fn": null, + "offset": [218, 876], + "op": "PUSH4", + "path": "27", + "value": "0x2E1A7D4D" + }, + "155": { + "fn": null, + "offset": [218, 876], + "op": "EQ", + "path": "27" + }, + "156": { + "fn": null, + "offset": [218, 876], + "op": "PUSH2", + "path": "27", + "value": "0x148" + }, + "159": { + "fn": null, + "offset": [218, 876], + "op": "JUMPI", + "path": "27" + }, + "160": { + "fn": null, + "offset": [218, 876], + "op": "DUP1", + "path": "27" + }, + "161": { + "fn": null, + "offset": [218, 876], + "op": "PUSH4", + "path": "27", + "value": "0x33EEB147" + }, + "166": { + "fn": null, + "offset": [218, 876], + "op": "EQ", + "path": "27" + }, + "167": { + "fn": null, + "offset": [218, 876], + "op": "PUSH2", + "path": "27", + "value": "0x172" + }, + "170": { + "fn": null, + "offset": [218, 876], + "op": "JUMPI", + "path": "27" + }, + "171": { + "fn": null, + "offset": [218, 876], + "op": "DUP1", + "path": "27" + }, + "172": { + "fn": null, + "offset": [218, 876], + "op": "PUSH4", + "path": "27", + "value": "0x439FAB91" + }, + "177": { + "fn": null, + "offset": [218, 876], + "op": "EQ", + "path": "27" + }, + "178": { + "fn": null, + "offset": [218, 876], + "op": "PUSH2", + "path": "27", + "value": "0x187" + }, + "181": { + "fn": null, + "offset": [218, 876], + "op": "JUMPI", + "path": "27" + }, + "182": { + "fn": null, + "offset": [218, 876], + "op": "DUP1", + "path": "27" + }, + "183": { + "fn": null, + "offset": [218, 876], + "op": "PUSH4", + "path": "27", + "value": "0x84F921CD" + }, + "188": { + "fn": null, + "offset": [218, 876], + "op": "EQ", + "path": "27" + }, + "189": { + "fn": null, + "offset": [218, 876], + "op": "PUSH2", + "path": "27", + "value": "0x204" + }, + "192": { + "fn": null, + "offset": [218, 876], + "op": "JUMPI", + "path": "27" + }, + "193": { + "fn": null, + "offset": [218, 876], + "op": "JUMPDEST", + "path": "27" + }, + "194": { + "fn": null, + "offset": [218, 876], + "op": "PUSH1", + "path": "27", + "value": "0x0" + }, + "196": { + "fn": null, + "offset": [218, 876], + "op": "DUP1", + "path": "27" + }, + "197": { + "first_revert": true, + "fn": null, + "offset": [218, 876], + "op": "REVERT", + "path": "27" + }, + "198": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "JUMPDEST", + "path": "27" + }, + "199": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "CALLVALUE", + "path": "27" + }, + "200": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "DUP1", + "path": "27" + }, + "201": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "ISZERO", + "path": "27" + }, + "202": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "PUSH2", + "path": "27", + "value": "0xD2" + }, + "205": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "JUMPI", + "path": "27" + }, + "206": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "PUSH1", + "path": "27", + "value": "0x0" + }, + "208": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "DUP1", + "path": "27" + }, + "209": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "REVERT", + "path": "27" + }, + "210": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "JUMPDEST", + "path": "27" + }, + "211": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "POP", + "path": "27" + }, + "212": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "PUSH2", + "path": "27", + "value": "0xFF" + }, + "215": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "PUSH1", + "path": "27", + "value": "0x4" + }, + "217": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "DUP1", + "path": "27" + }, + "218": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "CALLDATASIZE", + "path": "27" + }, + "219": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "SUB", + "path": "27" + }, + "220": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "PUSH1", + "path": "27", + "value": "0x40" + }, + "222": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "DUP2", + "path": "27" + }, + "223": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "LT", + "path": "27" + }, + "224": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "ISZERO", + "path": "27" + }, + "225": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "PUSH2", + "path": "27", + "value": "0xE9" + }, + "228": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "JUMPI", + "path": "27" + }, + "229": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "PUSH1", + "path": "27", + "value": "0x0" + }, + "231": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "DUP1", + "path": "27" + }, + "232": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "REVERT", + "path": "27" + }, + "233": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "JUMPDEST", + "path": "27" + }, + "234": { + "op": "POP" + }, + "235": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "DUP1", + "path": "27" + }, + "236": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "CALLDATALOAD", + "path": "27" + }, + "237": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "SWAP1", + "path": "27" + }, + "238": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "PUSH1", + "path": "27", + "value": "0x20" + }, + "240": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "ADD", + "path": "27" + }, + "241": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "CALLDATALOAD", + "path": "27" + }, + "242": { + "op": "PUSH1", + "value": "0x1" + }, + "244": { + "op": "PUSH1", + "value": "0x1" + }, + "246": { + "op": "PUSH1", + "value": "0xA0" + }, + "248": { + "op": "SHL" + }, + "249": { + "op": "SUB" + }, + "250": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "AND", + "path": "27" + }, + "251": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "PUSH2", + "path": "27", + "value": "0x32F" + }, + "254": { + "fn": "StarknetEthBridge.withdraw", + "jump": "i", + "offset": [589, 874], + "op": "JUMP", + "path": "27" + }, + "255": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "JUMPDEST", + "path": "27" + }, + "256": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "STOP", + "path": "27" + }, + "257": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "JUMPDEST", + "path": "34" + }, + "258": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "CALLVALUE", + "path": "34" + }, + "259": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "DUP1", + "path": "34" + }, + "260": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "ISZERO", + "path": "34" + }, + "261": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "PUSH2", + "path": "34", + "value": "0x10D" + }, + "264": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "JUMPI", + "path": "34" + }, + "265": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "PUSH1", + "path": "34", + "value": "0x0" + }, + "267": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "DUP1", + "path": "34" + }, + "268": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "REVERT", + "path": "34" + }, + "269": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "JUMPDEST", + "path": "34" + }, + "270": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "POP", + "path": "34" + }, + "271": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "PUSH2", + "path": "34", + "value": "0x134" + }, + "274": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "PUSH1", + "path": "34", + "value": "0x4" + }, + "276": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "DUP1", + "path": "34" + }, + "277": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "CALLDATASIZE", + "path": "34" + }, + "278": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "SUB", + "path": "34" + }, + "279": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "PUSH1", + "path": "34", + "value": "0x20" + }, + "281": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "DUP2", + "path": "34" + }, + "282": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "LT", + "path": "34" + }, + "283": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "ISZERO", + "path": "34" + }, + "284": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "PUSH2", + "path": "34", + "value": "0x124" + }, + "287": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "JUMPI", + "path": "34" + }, + "288": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "PUSH1", + "path": "34", + "value": "0x0" + }, + "290": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "DUP1", + "path": "34" + }, + "291": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "REVERT", + "path": "34" + }, + "292": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "JUMPDEST", + "path": "34" + }, + "293": { + "op": "POP" + }, + "294": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "CALLDATALOAD", + "path": "34" + }, + "295": { + "op": "PUSH1", + "value": "0x1" + }, + "297": { + "op": "PUSH1", + "value": "0x1" + }, + "299": { + "op": "PUSH1", + "value": "0xA0" + }, + "301": { + "op": "SHL" + }, + "302": { + "op": "SUB" + }, + "303": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "AND", + "path": "34" + }, + "304": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "PUSH2", + "path": "34", + "value": "0x39F" + }, + "307": { + "fn": "StarknetGovernance.starknetIsGovernor", + "jump": "i", + "offset": [617, 744], + "op": "JUMP", + "path": "34" + }, + "308": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "JUMPDEST", + "path": "34" + }, + "309": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "PUSH1", + "path": "34", + "value": "0x40" + }, + "311": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "DUP1", + "path": "34" + }, + "312": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "MLOAD", + "path": "34" + }, + "313": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "SWAP2", + "path": "34" + }, + "314": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "ISZERO", + "path": "34" + }, + "315": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "ISZERO", + "path": "34" + }, + "316": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "DUP3", + "path": "34" + }, + "317": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "MSTORE", + "path": "34" + }, + "318": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "MLOAD", + "path": "34" + }, + "319": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "SWAP1", + "path": "34" + }, + "320": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "DUP2", + "path": "34" + }, + "321": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "SWAP1", + "path": "34" + }, + "322": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "SUB", + "path": "34" + }, + "323": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "PUSH1", + "path": "34", + "value": "0x20" + }, + "325": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "ADD", + "path": "34" + }, + "326": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "SWAP1", + "path": "34" + }, + "327": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "RETURN", + "path": "34" + }, + "328": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "JUMPDEST", + "path": "28" + }, + "329": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "CALLVALUE", + "path": "28" + }, + "330": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "DUP1", + "path": "28" + }, + "331": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "ISZERO", + "path": "28" + }, + "332": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "PUSH2", + "path": "28", + "value": "0x154" + }, + "335": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "JUMPI", + "path": "28" + }, + "336": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "338": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "DUP1", + "path": "28" + }, + "339": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "REVERT", + "path": "28" + }, + "340": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "JUMPDEST", + "path": "28" + }, + "341": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "POP", + "path": "28" + }, + "342": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "PUSH2", + "path": "28", + "value": "0xFF" + }, + "345": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "347": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "DUP1", + "path": "28" + }, + "348": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "CALLDATASIZE", + "path": "28" + }, + "349": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "SUB", + "path": "28" + }, + "350": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "352": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "DUP2", + "path": "28" + }, + "353": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "LT", + "path": "28" + }, + "354": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "ISZERO", + "path": "28" + }, + "355": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "PUSH2", + "path": "28", + "value": "0x16B" + }, + "358": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "JUMPI", + "path": "28" + }, + "359": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "361": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "DUP1", + "path": "28" + }, + "362": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "REVERT", + "path": "28" + }, + "363": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "JUMPDEST", + "path": "28" + }, + "364": { + "op": "POP" + }, + "365": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "CALLDATALOAD", + "path": "28" + }, + "366": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "PUSH2", + "path": "28", + "value": "0x3B0" + }, + "369": { + "fn": "StarknetTokenBridge.withdraw", + "jump": "i", + "offset": [4376, 4464], + "op": "JUMP", + "path": "28" + }, + "370": { + "fn": "ProxySupport.isFrozen", + "offset": [775, 861], + "op": "JUMPDEST", + "path": "10" + }, + "371": { + "fn": "ProxySupport.isFrozen", + "offset": [775, 861], + "op": "CALLVALUE", + "path": "10" + }, + "372": { + "fn": "ProxySupport.isFrozen", + "offset": [775, 861], + "op": "DUP1", + "path": "10" + }, + "373": { + "fn": "ProxySupport.isFrozen", + "offset": [775, 861], + "op": "ISZERO", + "path": "10" + }, + "374": { + "fn": "ProxySupport.isFrozen", + "offset": [775, 861], + "op": "PUSH2", + "path": "10", + "value": "0x17E" + }, + "377": { + "fn": "ProxySupport.isFrozen", + "offset": [775, 861], + "op": "JUMPI", + "path": "10" + }, + "378": { + "fn": "ProxySupport.isFrozen", + "offset": [775, 861], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "380": { + "fn": "ProxySupport.isFrozen", + "offset": [775, 861], + "op": "DUP1", + "path": "10" + }, + "381": { + "fn": "ProxySupport.isFrozen", + "offset": [775, 861], + "op": "REVERT", + "path": "10" + }, + "382": { + "fn": "ProxySupport.isFrozen", + "offset": [775, 861], + "op": "JUMPDEST", + "path": "10" + }, + "383": { + "fn": "ProxySupport.isFrozen", + "offset": [775, 861], + "op": "POP", + "path": "10" + }, + "384": { + "fn": "ProxySupport.isFrozen", + "offset": [775, 861], + "op": "PUSH2", + "path": "10", + "value": "0x134" + }, + "387": { + "fn": "ProxySupport.isFrozen", + "offset": [775, 861], + "op": "PUSH2", + "path": "10", + "value": "0x3BD" + }, + "390": { + "fn": "ProxySupport.isFrozen", + "jump": "i", + "offset": [775, 861], + "op": "JUMP", + "path": "10" + }, + "391": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "JUMPDEST", + "path": "10" + }, + "392": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "CALLVALUE", + "path": "10" + }, + "393": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP1", + "path": "10" + }, + "394": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "ISZERO", + "path": "10" + }, + "395": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH2", + "path": "10", + "value": "0x193" + }, + "398": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "JUMPI", + "path": "10" + }, + "399": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "401": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP1", + "path": "10" + }, + "402": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "REVERT", + "path": "10" + }, + "403": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "JUMPDEST", + "path": "10" + }, + "404": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "POP", + "path": "10" + }, + "405": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH2", + "path": "10", + "value": "0xFF" + }, + "408": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH1", + "path": "10", + "value": "0x4" + }, + "410": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP1", + "path": "10" + }, + "411": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "CALLDATASIZE", + "path": "10" + }, + "412": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "SUB", + "path": "10" + }, + "413": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "415": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP2", + "path": "10" + }, + "416": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "LT", + "path": "10" + }, + "417": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "ISZERO", + "path": "10" + }, + "418": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH2", + "path": "10", + "value": "0x1AA" + }, + "421": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "JUMPI", + "path": "10" + }, + "422": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "424": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP1", + "path": "10" + }, + "425": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "REVERT", + "path": "10" + }, + "426": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "JUMPDEST", + "path": "10" + }, + "427": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP2", + "path": "10" + }, + "428": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "ADD", + "path": "10" + }, + "429": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "SWAP1", + "path": "10" + }, + "430": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "432": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP2", + "path": "10" + }, + "433": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "ADD", + "path": "10" + }, + "434": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP2", + "path": "10" + }, + "435": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "CALLDATALOAD", + "path": "10" + }, + "436": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH5", + "path": "10", + "value": "0x100000000" + }, + "442": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP2", + "path": "10" + }, + "443": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "GT", + "path": "10" + }, + "444": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "ISZERO", + "path": "10" + }, + "445": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH2", + "path": "10", + "value": "0x1C5" + }, + "448": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "JUMPI", + "path": "10" + }, + "449": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "451": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP1", + "path": "10" + }, + "452": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "REVERT", + "path": "10" + }, + "453": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "JUMPDEST", + "path": "10" + }, + "454": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP3", + "path": "10" + }, + "455": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "ADD", + "path": "10" + }, + "456": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP4", + "path": "10" + }, + "457": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "459": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP3", + "path": "10" + }, + "460": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "ADD", + "path": "10" + }, + "461": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "GT", + "path": "10" + }, + "462": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "ISZERO", + "path": "10" + }, + "463": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH2", + "path": "10", + "value": "0x1D7" + }, + "466": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "JUMPI", + "path": "10" + }, + "467": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "469": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP1", + "path": "10" + }, + "470": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "REVERT", + "path": "10" + }, + "471": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "JUMPDEST", + "path": "10" + }, + "472": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP1", + "path": "10" + }, + "473": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "CALLDATALOAD", + "path": "10" + }, + "474": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "SWAP1", + "path": "10" + }, + "475": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "477": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "ADD", + "path": "10" + }, + "478": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "SWAP2", + "path": "10" + }, + "479": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP5", + "path": "10" + }, + "480": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH1", + "path": "10", + "value": "0x1" + }, + "482": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP4", + "path": "10" + }, + "483": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "MUL", + "path": "10" + }, + "484": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP5", + "path": "10" + }, + "485": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "ADD", + "path": "10" + }, + "486": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "GT", + "path": "10" + }, + "487": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH5", + "path": "10", + "value": "0x100000000" + }, + "493": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP4", + "path": "10" + }, + "494": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "GT", + "path": "10" + }, + "495": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "OR", + "path": "10" + }, + "496": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "ISZERO", + "path": "10" + }, + "497": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH2", + "path": "10", + "value": "0x1F9" + }, + "500": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "JUMPI", + "path": "10" + }, + "501": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "503": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "DUP1", + "path": "10" + }, + "504": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "REVERT", + "path": "10" + }, + "505": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "JUMPDEST", + "path": "10" + }, + "506": { + "op": "POP" + }, + "507": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "SWAP1", + "path": "10" + }, + "508": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "SWAP3", + "path": "10" + }, + "509": { + "op": "POP" + }, + "510": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "SWAP1", + "path": "10" + }, + "511": { + "op": "POP" + }, + "512": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "PUSH2", + "path": "10", + "value": "0x3C2" + }, + "515": { + "fn": "ProxySupport.initialize", + "jump": "i", + "offset": [1483, 2511], + "op": "JUMP", + "path": "10" + }, + "516": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "JUMPDEST", + "path": "34" + }, + "517": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "CALLVALUE", + "path": "34" + }, + "518": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "DUP1", + "path": "34" + }, + "519": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "ISZERO", + "path": "34" + }, + "520": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "PUSH2", + "path": "34", + "value": "0x210" + }, + "523": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "JUMPI", + "path": "34" + }, + "524": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "PUSH1", + "path": "34", + "value": "0x0" + }, + "526": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "DUP1", + "path": "34" + }, + "527": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "REVERT", + "path": "34" + }, + "528": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "JUMPDEST", + "path": "34" + }, + "529": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "POP", + "path": "34" + }, + "530": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "PUSH2", + "path": "34", + "value": "0xFF" + }, + "533": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "PUSH1", + "path": "34", + "value": "0x4" + }, + "535": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "DUP1", + "path": "34" + }, + "536": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "CALLDATASIZE", + "path": "34" + }, + "537": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "SUB", + "path": "34" + }, + "538": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "PUSH1", + "path": "34", + "value": "0x20" + }, + "540": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "DUP2", + "path": "34" + }, + "541": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "LT", + "path": "34" + }, + "542": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "ISZERO", + "path": "34" + }, + "543": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "PUSH2", + "path": "34", + "value": "0x227" + }, + "546": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "JUMPI", + "path": "34" + }, + "547": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "PUSH1", + "path": "34", + "value": "0x0" + }, + "549": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "DUP1", + "path": "34" + }, + "550": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "REVERT", + "path": "34" + }, + "551": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "JUMPDEST", + "path": "34" + }, + "552": { + "op": "POP" + }, + "553": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "CALLDATALOAD", + "path": "34" + }, + "554": { + "op": "PUSH1", + "value": "0x1" + }, + "556": { + "op": "PUSH1", + "value": "0x1" + }, + "558": { + "op": "PUSH1", + "value": "0xA0" + }, + "560": { + "op": "SHL" + }, + "561": { + "op": "SUB" + }, + "562": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "AND", + "path": "34" + }, + "563": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "PUSH2", + "path": "34", + "value": "0x595" + }, + "566": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "jump": "i", + "offset": [872, 992], + "op": "JUMP", + "path": "34" + }, + "567": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "JUMPDEST", + "path": "28" + }, + "568": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "CALLVALUE", + "path": "28" + }, + "569": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "DUP1", + "path": "28" + }, + "570": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "ISZERO", + "path": "28" + }, + "571": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "PUSH2", + "path": "28", + "value": "0x243" + }, + "574": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "JUMPI", + "path": "28" + }, + "575": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "577": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "DUP1", + "path": "28" + }, + "578": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "REVERT", + "path": "28" + }, + "579": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "JUMPDEST", + "path": "28" + }, + "580": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "POP", + "path": "28" + }, + "581": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "PUSH2", + "path": "28", + "value": "0xFF" + }, + "584": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "586": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "DUP1", + "path": "28" + }, + "587": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "CALLDATASIZE", + "path": "28" + }, + "588": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "SUB", + "path": "28" + }, + "589": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "591": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "DUP2", + "path": "28" + }, + "592": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "LT", + "path": "28" + }, + "593": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "ISZERO", + "path": "28" + }, + "594": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "PUSH2", + "path": "28", + "value": "0x25A" + }, + "597": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "JUMPI", + "path": "28" + }, + "598": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "600": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "DUP1", + "path": "28" + }, + "601": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "REVERT", + "path": "28" + }, + "602": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "JUMPDEST", + "path": "28" + }, + "603": { + "op": "POP" + }, + "604": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "CALLDATALOAD", + "path": "28" + }, + "605": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "PUSH2", + "path": "28", + "value": "0x59E" + }, + "608": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "jump": "i", + "offset": [2946, 3128], + "op": "JUMP", + "path": "28" + }, + "609": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "JUMPDEST", + "path": "34" + }, + "610": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "CALLVALUE", + "path": "34" + }, + "611": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "DUP1", + "path": "34" + }, + "612": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "ISZERO", + "path": "34" + }, + "613": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "PUSH2", + "path": "34", + "value": "0x26D" + }, + "616": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "JUMPI", + "path": "34" + }, + "617": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "PUSH1", + "path": "34", + "value": "0x0" + }, + "619": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "DUP1", + "path": "34" + }, + "620": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "REVERT", + "path": "34" + }, + "621": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "JUMPDEST", + "path": "34" + }, + "622": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "POP", + "path": "34" + }, + "623": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "PUSH2", + "path": "34", + "value": "0xFF" + }, + "626": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "PUSH1", + "path": "34", + "value": "0x4" + }, + "628": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "DUP1", + "path": "34" + }, + "629": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "CALLDATASIZE", + "path": "34" + }, + "630": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "SUB", + "path": "34" + }, + "631": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "PUSH1", + "path": "34", + "value": "0x20" + }, + "633": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "DUP2", + "path": "34" + }, + "634": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "LT", + "path": "34" + }, + "635": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "ISZERO", + "path": "34" + }, + "636": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "PUSH2", + "path": "34", + "value": "0x284" + }, + "639": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "JUMPI", + "path": "34" + }, + "640": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "PUSH1", + "path": "34", + "value": "0x0" + }, + "642": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "DUP1", + "path": "34" + }, + "643": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "REVERT", + "path": "34" + }, + "644": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "JUMPDEST", + "path": "34" + }, + "645": { + "op": "POP" + }, + "646": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "CALLDATALOAD", + "path": "34" + }, + "647": { + "op": "PUSH1", + "value": "0x1" + }, + "649": { + "op": "PUSH1", + "value": "0x1" + }, + "651": { + "op": "PUSH1", + "value": "0xA0" + }, + "653": { + "op": "SHL" + }, + "654": { + "op": "SUB" + }, + "655": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "AND", + "path": "34" + }, + "656": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "PUSH2", + "path": "34", + "value": "0x626" + }, + "659": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "jump": "i", + "offset": [750, 866], + "op": "JUMP", + "path": "34" + }, + "660": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "offset": [998, 1078], + "op": "JUMPDEST", + "path": "34" + }, + "661": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "offset": [998, 1078], + "op": "CALLVALUE", + "path": "34" + }, + "662": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "offset": [998, 1078], + "op": "DUP1", + "path": "34" + }, + "663": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "offset": [998, 1078], + "op": "ISZERO", + "path": "34" + }, + "664": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "offset": [998, 1078], + "op": "PUSH2", + "path": "34", + "value": "0x2A0" + }, + "667": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "offset": [998, 1078], + "op": "JUMPI", + "path": "34" + }, + "668": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "offset": [998, 1078], + "op": "PUSH1", + "path": "34", + "value": "0x0" + }, + "670": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "offset": [998, 1078], + "op": "DUP1", + "path": "34" + }, + "671": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "offset": [998, 1078], + "op": "REVERT", + "path": "34" + }, + "672": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "offset": [998, 1078], + "op": "JUMPDEST", + "path": "34" + }, + "673": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "offset": [998, 1078], + "op": "POP", + "path": "34" + }, + "674": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "offset": [998, 1078], + "op": "PUSH2", + "path": "34", + "value": "0xFF" + }, + "677": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "offset": [998, 1078], + "op": "PUSH2", + "path": "34", + "value": "0x62F" + }, + "680": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "jump": "i", + "offset": [998, 1078], + "op": "JUMP", + "path": "34" + }, + "681": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "JUMPDEST", + "path": "28" + }, + "682": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "CALLVALUE", + "path": "28" + }, + "683": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "DUP1", + "path": "28" + }, + "684": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "ISZERO", + "path": "28" + }, + "685": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "PUSH2", + "path": "28", + "value": "0x2B5" + }, + "688": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "JUMPI", + "path": "28" + }, + "689": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "691": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "DUP1", + "path": "28" + }, + "692": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "REVERT", + "path": "28" + }, + "693": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "JUMPDEST", + "path": "28" + }, + "694": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "POP", + "path": "28" + }, + "695": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "PUSH2", + "path": "28", + "value": "0xFF" + }, + "698": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "700": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "DUP1", + "path": "28" + }, + "701": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "CALLDATASIZE", + "path": "28" + }, + "702": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "SUB", + "path": "28" + }, + "703": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "705": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "DUP2", + "path": "28" + }, + "706": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "LT", + "path": "28" + }, + "707": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "ISZERO", + "path": "28" + }, + "708": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "PUSH2", + "path": "28", + "value": "0x2CC" + }, + "711": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "JUMPI", + "path": "28" + }, + "712": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "714": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "DUP1", + "path": "28" + }, + "715": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "REVERT", + "path": "28" + }, + "716": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "JUMPDEST", + "path": "28" + }, + "717": { + "op": "POP" + }, + "718": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "CALLDATALOAD", + "path": "28" + }, + "719": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "PUSH2", + "path": "28", + "value": "0x639" + }, + "722": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "jump": "i", + "offset": [2665, 2940], + "op": "JUMP", + "path": "28" + }, + "723": { + "fn": "StarknetEthBridge.deposit", + "offset": [308, 583], + "op": "JUMPDEST", + "path": "27" + }, + "724": { + "fn": "StarknetEthBridge.deposit", + "offset": [308, 583], + "op": "PUSH2", + "path": "27", + "value": "0xFF" + }, + "727": { + "fn": "StarknetEthBridge.deposit", + "offset": [308, 583], + "op": "PUSH1", + "path": "27", + "value": "0x4" + }, + "729": { + "fn": "StarknetEthBridge.deposit", + "offset": [308, 583], + "op": "DUP1", + "path": "27" + }, + "730": { + "fn": "StarknetEthBridge.deposit", + "offset": [308, 583], + "op": "CALLDATASIZE", + "path": "27" + }, + "731": { + "fn": "StarknetEthBridge.deposit", + "offset": [308, 583], + "op": "SUB", + "path": "27" + }, + "732": { + "fn": "StarknetEthBridge.deposit", + "offset": [308, 583], + "op": "PUSH1", + "path": "27", + "value": "0x20" + }, + "734": { + "fn": "StarknetEthBridge.deposit", + "offset": [308, 583], + "op": "DUP2", + "path": "27" + }, + "735": { + "fn": "StarknetEthBridge.deposit", + "offset": [308, 583], + "op": "LT", + "path": "27" + }, + "736": { + "fn": "StarknetEthBridge.deposit", + "offset": [308, 583], + "op": "ISZERO", + "path": "27" + }, + "737": { + "fn": "StarknetEthBridge.deposit", + "offset": [308, 583], + "op": "PUSH2", + "path": "27", + "value": "0x2E9" + }, + "740": { + "fn": "StarknetEthBridge.deposit", + "offset": [308, 583], + "op": "JUMPI", + "path": "27" + }, + "741": { + "fn": "StarknetEthBridge.deposit", + "offset": [308, 583], + "op": "PUSH1", + "path": "27", + "value": "0x0" + }, + "743": { + "fn": "StarknetEthBridge.deposit", + "offset": [308, 583], + "op": "DUP1", + "path": "27" + }, + "744": { + "fn": "StarknetEthBridge.deposit", + "offset": [308, 583], + "op": "REVERT", + "path": "27" + }, + "745": { + "fn": "StarknetEthBridge.deposit", + "offset": [308, 583], + "op": "JUMPDEST", + "path": "27" + }, + "746": { + "op": "POP" + }, + "747": { + "fn": "StarknetEthBridge.deposit", + "offset": [308, 583], + "op": "CALLDATALOAD", + "path": "27" + }, + "748": { + "fn": "StarknetEthBridge.deposit", + "offset": [308, 583], + "op": "PUSH2", + "path": "27", + "value": "0x7C4" + }, + "751": { + "fn": "StarknetEthBridge.deposit", + "jump": "i", + "offset": [308, 583], + "op": "JUMP", + "path": "27" + }, + "752": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "JUMPDEST", + "path": "28" + }, + "753": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "CALLVALUE", + "path": "28" + }, + "754": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "DUP1", + "path": "28" + }, + "755": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "ISZERO", + "path": "28" + }, + "756": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "PUSH2", + "path": "28", + "value": "0x2FC" + }, + "759": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "JUMPI", + "path": "28" + }, + "760": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "762": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "DUP1", + "path": "28" + }, + "763": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "REVERT", + "path": "28" + }, + "764": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "JUMPDEST", + "path": "28" + }, + "765": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "POP", + "path": "28" + }, + "766": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "PUSH2", + "path": "28", + "value": "0xFF" + }, + "769": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "771": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "DUP1", + "path": "28" + }, + "772": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "CALLDATASIZE", + "path": "28" + }, + "773": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "SUB", + "path": "28" + }, + "774": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "776": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "DUP2", + "path": "28" + }, + "777": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "LT", + "path": "28" + }, + "778": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "ISZERO", + "path": "28" + }, + "779": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "PUSH2", + "path": "28", + "value": "0x313" + }, + "782": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "JUMPI", + "path": "28" + }, + "783": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "785": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "DUP1", + "path": "28" + }, + "786": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "REVERT", + "path": "28" + }, + "787": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "JUMPDEST", + "path": "28" + }, + "788": { + "op": "POP" + }, + "789": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "CALLDATALOAD", + "path": "28" + }, + "790": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "PUSH2", + "path": "28", + "value": "0x821" + }, + "793": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "jump": "i", + "offset": [3134, 3286], + "op": "JUMP", + "path": "28" + }, + "794": { + "fn": "StarknetGovernance.starknetCancelNomination", + "offset": [1084, 1164], + "op": "JUMPDEST", + "path": "34" + }, + "795": { + "fn": "StarknetGovernance.starknetCancelNomination", + "offset": [1084, 1164], + "op": "CALLVALUE", + "path": "34" + }, + "796": { + "fn": "StarknetGovernance.starknetCancelNomination", + "offset": [1084, 1164], + "op": "DUP1", + "path": "34" + }, + "797": { + "fn": "StarknetGovernance.starknetCancelNomination", + "offset": [1084, 1164], + "op": "ISZERO", + "path": "34" + }, + "798": { + "fn": "StarknetGovernance.starknetCancelNomination", + "offset": [1084, 1164], + "op": "PUSH2", + "path": "34", + "value": "0x326" + }, + "801": { + "fn": "StarknetGovernance.starknetCancelNomination", + "offset": [1084, 1164], + "op": "JUMPI", + "path": "34" + }, + "802": { + "fn": "StarknetGovernance.starknetCancelNomination", + "offset": [1084, 1164], + "op": "PUSH1", + "path": "34", + "value": "0x0" + }, + "804": { + "fn": "StarknetGovernance.starknetCancelNomination", + "offset": [1084, 1164], + "op": "DUP1", + "path": "34" + }, + "805": { + "fn": "StarknetGovernance.starknetCancelNomination", + "offset": [1084, 1164], + "op": "REVERT", + "path": "34" + }, + "806": { + "fn": "StarknetGovernance.starknetCancelNomination", + "offset": [1084, 1164], + "op": "JUMPDEST", + "path": "34" + }, + "807": { + "fn": "StarknetGovernance.starknetCancelNomination", + "offset": [1084, 1164], + "op": "POP", + "path": "34" + }, + "808": { + "fn": "StarknetGovernance.starknetCancelNomination", + "offset": [1084, 1164], + "op": "PUSH2", + "path": "34", + "value": "0xFF" + }, + "811": { + "fn": "StarknetGovernance.starknetCancelNomination", + "offset": [1084, 1164], + "op": "PUSH2", + "path": "34", + "value": "0x8A9" + }, + "814": { + "fn": "StarknetGovernance.starknetCancelNomination", + "jump": "i", + "offset": [1084, 1164], + "op": "JUMP", + "path": "34" + }, + "815": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "JUMPDEST", + "path": "27" + }, + "816": { + "fn": "StarknetEthBridge.withdraw", + "offset": [668, 701], + "op": "PUSH2", + "path": "27", + "statement": 0, + "value": "0x339" + }, + "819": { + "fn": "StarknetEthBridge.withdraw", + "offset": [683, 689], + "op": "DUP3", + "path": "27" + }, + "820": { + "fn": "StarknetEthBridge.withdraw", + "offset": [691, 700], + "op": "DUP3", + "path": "27" + }, + "821": { + "fn": "StarknetEthBridge.withdraw", + "offset": [668, 682], + "op": "PUSH2", + "path": "27", + "value": "0x8B1" + }, + "824": { + "fn": "StarknetEthBridge.withdraw", + "jump": "i", + "offset": [668, 701], + "op": "JUMP", + "path": "27" + }, + "825": { + "fn": "StarknetEthBridge.withdraw", + "offset": [668, 701], + "op": "JUMPDEST", + "path": "27" + }, + "826": { + "op": "PUSH1", + "value": "0x1" + }, + "828": { + "op": "PUSH1", + "value": "0x1" + }, + "830": { + "op": "PUSH1", + "value": "0xA0" + }, + "832": { + "op": "SHL" + }, + "833": { + "op": "SUB" + }, + "834": { + "fn": "StarknetEthBridge.withdraw", + "offset": [774, 799], + "op": "DUP2", + "path": "27", + "statement": 1 + }, + "835": { + "branch": 77, + "fn": "StarknetEthBridge.withdraw", + "offset": [774, 799], + "op": "AND", + "path": "27" + }, + "836": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "PUSH2", + "path": "27", + "value": "0x388" + }, + "839": { + "branch": 77, + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "JUMPI", + "path": "27" + }, + "840": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "PUSH1", + "path": "27", + "value": "0x40" + }, + "842": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "DUP1", + "path": "27" + }, + "843": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "MLOAD", + "path": "27" + }, + "844": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "848": { + "op": "PUSH1", + "value": "0xE5" + }, + "850": { + "op": "SHL" + }, + "851": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "DUP2", + "path": "27" + }, + "852": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "MSTORE", + "path": "27" + }, + "853": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "PUSH1", + "path": "27", + "value": "0x20" + }, + "855": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "PUSH1", + "path": "27", + "value": "0x4" + }, + "857": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "DUP3", + "path": "27" + }, + "858": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "ADD", + "path": "27" + }, + "859": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "MSTORE", + "path": "27" + }, + "860": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "PUSH1", + "path": "27", + "value": "0x11" + }, + "862": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "PUSH1", + "path": "27", + "value": "0x24" + }, + "864": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "DUP3", + "path": "27" + }, + "865": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "ADD", + "path": "27" + }, + "866": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "MSTORE", + "path": "27" + }, + "867": { + "op": "PUSH17", + "value": "0x1253959053125117D49150D25412515395" + }, + "885": { + "op": "PUSH1", + "value": "0x7A" + }, + "887": { + "op": "SHL" + }, + "888": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "PUSH1", + "path": "27", + "value": "0x44" + }, + "890": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "DUP3", + "path": "27" + }, + "891": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "ADD", + "path": "27" + }, + "892": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "MSTORE", + "path": "27" + }, + "893": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "SWAP1", + "path": "27" + }, + "894": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "MLOAD", + "path": "27" + }, + "895": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "SWAP1", + "path": "27" + }, + "896": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "DUP2", + "path": "27" + }, + "897": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "SWAP1", + "path": "27" + }, + "898": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "SUB", + "path": "27" + }, + "899": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "PUSH1", + "path": "27", + "value": "0x64" + }, + "901": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "ADD", + "path": "27" + }, + "902": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "SWAP1", + "path": "27" + }, + "903": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "REVERT", + "path": "27" + }, + "904": { + "fn": "StarknetEthBridge.withdraw", + "offset": [766, 821], + "op": "JUMPDEST", + "path": "27" + }, + "905": { + "fn": "StarknetEthBridge.withdraw", + "offset": [831, 867], + "op": "PUSH2", + "path": "27", + "statement": 2, + "value": "0x39B" + }, + "908": { + "op": "PUSH1", + "value": "0x1" + }, + "910": { + "op": "PUSH1", + "value": "0x1" + }, + "912": { + "op": "PUSH1", + "value": "0xA0" + }, + "914": { + "op": "SHL" + }, + "915": { + "op": "SUB" + }, + "916": { + "fn": "StarknetEthBridge.withdraw", + "offset": [831, 859], + "op": "DUP3", + "path": "27" + }, + "917": { + "fn": "StarknetEthBridge.withdraw", + "offset": [831, 859], + "op": "AND", + "path": "27" + }, + "918": { + "fn": "StarknetEthBridge.withdraw", + "offset": [860, 866], + "op": "DUP4", + "path": "27" + }, + "919": { + "fn": "StarknetEthBridge.withdraw", + "offset": [831, 859], + "op": "PUSH2", + "path": "27", + "value": "0xA5F" + }, + "922": { + "fn": "StarknetEthBridge.withdraw", + "jump": "i", + "offset": [831, 867], + "op": "JUMP", + "path": "27" + }, + "923": { + "fn": "StarknetEthBridge.withdraw", + "offset": [831, 867], + "op": "JUMPDEST", + "path": "27" + }, + "924": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "POP", + "path": "27" + }, + "925": { + "fn": "StarknetEthBridge.withdraw", + "offset": [589, 874], + "op": "POP", + "path": "27" + }, + "926": { + "fn": "StarknetEthBridge.withdraw", + "jump": "o", + "offset": [589, 874], + "op": "JUMP", + "path": "27" + }, + "927": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "JUMPDEST", + "path": "34" + }, + "928": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [690, 694], + "op": "PUSH1", + "path": "34", + "value": "0x0" + }, + "930": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [713, 737], + "op": "PUSH2", + "path": "34", + "statement": 3, + "value": "0x3AA" + }, + "933": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [724, 736], + "op": "DUP3", + "path": "34" + }, + "934": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [713, 723], + "op": "PUSH2", + "path": "34", + "value": "0xB00" + }, + "937": { + "fn": "StarknetGovernance.starknetIsGovernor", + "jump": "i", + "offset": [713, 737], + "op": "JUMP", + "path": "34" + }, + "938": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [713, 737], + "op": "JUMPDEST", + "path": "34" + }, + "939": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [706, 737], + "op": "SWAP3", + "path": "34" + }, + "940": { + "fn": "StarknetGovernance.starknetIsGovernor", + "offset": [617, 744], + "op": "SWAP2", + "path": "34" + }, + "941": { + "op": "POP" + }, + "942": { + "op": "POP" + }, + "943": { + "fn": "StarknetGovernance.starknetIsGovernor", + "jump": "o", + "offset": [617, 744], + "op": "JUMP", + "path": "34" + }, + "944": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "JUMPDEST", + "path": "28" + }, + "945": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4429, 4457], + "op": "PUSH2", + "path": "28", + "statement": 4, + "value": "0x3BA" + }, + "948": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4438, 4444], + "op": "DUP2", + "path": "28" + }, + "949": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4446, 4456], + "op": "CALLER", + "path": "28" + }, + "950": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4429, 4437], + "op": "PUSH2", + "path": "28", + "value": "0x32F" + }, + "953": { + "fn": "StarknetTokenBridge.withdraw", + "jump": "i", + "offset": [4429, 4457], + "op": "JUMP", + "path": "28" + }, + "954": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4429, 4457], + "op": "JUMPDEST", + "path": "28" + }, + "955": { + "fn": "StarknetTokenBridge.withdraw", + "offset": [4376, 4464], + "op": "POP", + "path": "28" + }, + "956": { + "fn": "StarknetTokenBridge.withdraw", + "jump": "o", + "offset": [4376, 4464], + "op": "JUMP", + "path": "28" + }, + "957": { + "fn": "ProxySupport.isFrozen", + "offset": [775, 861], + "op": "JUMPDEST", + "path": "10" + }, + "958": { + "fn": "ProxySupport.isFrozen", + "offset": [826, 830], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "960": { + "fn": "ProxySupport.isFrozen", + "offset": [775, 861], + "op": "SWAP1", + "path": "10" + }, + "961": { + "fn": "ProxySupport.isFrozen", + "jump": "o", + "offset": [775, 861], + "op": "JUMP", + "path": "10" + }, + "962": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "JUMPDEST", + "path": "10" + }, + "963": { + "offset": [1052, 1073], + "op": "PUSH32", + "path": "5", + "value": "0x0" + }, + "996": { + "offset": [1132, 1143], + "op": "DUP1", + "path": "5" + }, + "997": { + "fn": "ProxySupport.initialize", + "offset": [1132, 1143], + "op": "SLOAD", + "path": "5" + }, + "998": { + "fn": "ProxySupport.initialize", + "offset": [1132, 1143], + "op": "SWAP1", + "path": "5" + }, + "999": { + "offset": [1178, 1197], + "op": "DUP2", + "path": "5" + }, + "1000": { + "branch": 80, + "fn": "ProxySupport.initialize", + "offset": [1178, 1197], + "op": "ISZERO", + "path": "5" + }, + "1001": { + "offset": [1170, 1224], + "op": "PUSH2", + "path": "5", + "value": "0x432" + }, + "1004": { + "branch": 80, + "offset": [1170, 1224], + "op": "JUMPI", + "path": "5" + }, + "1005": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "PUSH1", + "path": "5", + "value": "0x40" + }, + "1007": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "DUP1", + "path": "5" + }, + "1008": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "MLOAD", + "path": "5" + }, + "1009": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "1013": { + "op": "PUSH1", + "value": "0xE5" + }, + "1015": { + "op": "SHL" + }, + "1016": { + "offset": [1170, 1224], + "op": "DUP2", + "path": "5" + }, + "1017": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "MSTORE", + "path": "5" + }, + "1018": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "PUSH1", + "path": "5", + "value": "0x20" + }, + "1020": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "PUSH1", + "path": "5", + "value": "0x4" + }, + "1022": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "DUP3", + "path": "5" + }, + "1023": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "ADD", + "path": "5" + }, + "1024": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "MSTORE", + "path": "5" + }, + "1025": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "PUSH1", + "path": "5", + "value": "0x16" + }, + "1027": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "PUSH1", + "path": "5", + "value": "0x24" + }, + "1029": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "DUP3", + "path": "5" + }, + "1030": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "ADD", + "path": "5" + }, + "1031": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "MSTORE", + "path": "5" + }, + "1032": { + "op": "PUSH22", + "value": "0x1112549150D517D0D0531317D11254D0531313D5D151" + }, + "1055": { + "op": "PUSH1", + "value": "0x52" + }, + "1057": { + "op": "SHL" + }, + "1058": { + "offset": [1170, 1224], + "op": "PUSH1", + "path": "5", + "value": "0x44" + }, + "1060": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "DUP3", + "path": "5" + }, + "1061": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "ADD", + "path": "5" + }, + "1062": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "MSTORE", + "path": "5" + }, + "1063": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "SWAP1", + "path": "5" + }, + "1064": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "MLOAD", + "path": "5" + }, + "1065": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "SWAP1", + "path": "5" + }, + "1066": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "DUP2", + "path": "5" + }, + "1067": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "SWAP1", + "path": "5" + }, + "1068": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "SUB", + "path": "5" + }, + "1069": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "PUSH1", + "path": "5", + "value": "0x64" + }, + "1071": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "ADD", + "path": "5" + }, + "1072": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "SWAP1", + "path": "5" + }, + "1073": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "REVERT", + "path": "5" + }, + "1074": { + "fn": "ProxySupport.initialize", + "offset": [1170, 1224], + "op": "JUMPDEST", + "path": "5" + }, + "1075": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "POP", + "path": "10" + }, + "1076": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "POP", + "path": "10" + }, + "1077": { + "fn": "ProxySupport.initialize", + "offset": [1561, 1578], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "1079": { + "fn": "ProxySupport.initialize", + "offset": [1586, 1605], + "op": "PUSH2", + "path": "10", + "value": "0x43E" + }, + "1082": { + "fn": "ProxySupport.initialize", + "offset": [1586, 1603], + "op": "PUSH2", + "path": "10", + "value": "0x3BD" + }, + "1085": { + "fn": "ProxySupport.initialize", + "jump": "i", + "offset": [1586, 1605], + "op": "JUMP", + "path": "10" + }, + "1086": { + "fn": "ProxySupport.initialize", + "offset": [1586, 1605], + "op": "JUMPDEST", + "path": "10" + }, + "1087": { + "fn": "ProxySupport.initialize", + "offset": [1581, 1583], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "1089": { + "fn": "ProxySupport.initialize", + "offset": [1581, 1605], + "op": "SWAP1", + "path": "10" + }, + "1090": { + "fn": "ProxySupport.initialize", + "offset": [1581, 1605], + "op": "DUP2", + "path": "10" + }, + "1091": { + "fn": "ProxySupport.initialize", + "offset": [1581, 1605], + "op": "MUL", + "path": "10" + }, + "1092": { + "fn": "ProxySupport.initialize", + "offset": [1581, 1605], + "op": "SWAP2", + "path": "10" + }, + "1093": { + "op": "POP" + }, + "1094": { + "fn": "ProxySupport.initialize", + "offset": [1642, 1656], + "op": "DUP2", + "path": "10" + }, + "1095": { + "fn": "ProxySupport.initialize", + "offset": [1642, 1656], + "op": "ADD", + "path": "10" + }, + "1096": { + "fn": "ProxySupport.initialize", + "offset": [1674, 1705], + "op": "DUP1", + "path": "10", + "statement": 5 + }, + "1097": { + "fn": "ProxySupport.initialize", + "offset": [1674, 1705], + "op": "DUP4", + "path": "10" + }, + "1098": { + "fn": "ProxySupport.initialize", + "offset": [1674, 1705], + "op": "LT", + "path": "10" + }, + "1099": { + "branch": 90, + "fn": "ProxySupport.initialize", + "offset": [1674, 1705], + "op": "ISZERO", + "path": "10" + }, + "1100": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "PUSH2", + "path": "10", + "value": "0x492" + }, + "1103": { + "branch": 90, + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "JUMPI", + "path": "10" + }, + "1104": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "PUSH1", + "path": "10", + "value": "0x40" + }, + "1106": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "DUP1", + "path": "10" + }, + "1107": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "MLOAD", + "path": "10" + }, + "1108": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "1112": { + "op": "PUSH1", + "value": "0xE5" + }, + "1114": { + "op": "SHL" + }, + "1115": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "DUP2", + "path": "10" + }, + "1116": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "MSTORE", + "path": "10" + }, + "1117": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "1119": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "PUSH1", + "path": "10", + "value": "0x4" + }, + "1121": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "DUP3", + "path": "10" + }, + "1122": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "ADD", + "path": "10" + }, + "1123": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "MSTORE", + "path": "10" + }, + "1124": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "PUSH1", + "path": "10", + "value": "0x13" + }, + "1126": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "PUSH1", + "path": "10", + "value": "0x24" + }, + "1128": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "DUP3", + "path": "10" + }, + "1129": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "ADD", + "path": "10" + }, + "1130": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "MSTORE", + "path": "10" + }, + "1131": { + "op": "PUSH19", + "value": "0x1253925517D110551057D513D3D7D4D3505313" + }, + "1151": { + "op": "PUSH1", + "value": "0x6A" + }, + "1153": { + "op": "SHL" + }, + "1154": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "PUSH1", + "path": "10", + "value": "0x44" + }, + "1156": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "DUP3", + "path": "10" + }, + "1157": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "ADD", + "path": "10" + }, + "1158": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "MSTORE", + "path": "10" + }, + "1159": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "SWAP1", + "path": "10" + }, + "1160": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "MLOAD", + "path": "10" + }, + "1161": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "SWAP1", + "path": "10" + }, + "1162": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "DUP2", + "path": "10" + }, + "1163": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "SWAP1", + "path": "10" + }, + "1164": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "SUB", + "path": "10" + }, + "1165": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "PUSH1", + "path": "10", + "value": "0x64" + }, + "1167": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "ADD", + "path": "10" + }, + "1168": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "SWAP1", + "path": "10" + }, + "1169": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "REVERT", + "path": "10" + }, + "1170": { + "fn": "ProxySupport.initialize", + "offset": [1666, 1729], + "op": "JUMPDEST", + "path": "10" + }, + "1171": { + "fn": "ProxySupport.initialize", + "offset": [1739, 1757], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "1173": { + "fn": "ProxySupport.initialize", + "offset": [1771, 1803], + "op": "PUSH2", + "path": "10", + "value": "0x4A0" + }, + "1176": { + "fn": "ProxySupport.initialize", + "offset": [1786, 1802], + "op": "DUP3", + "path": "10" + }, + "1177": { + "fn": "ProxySupport.initialize", + "offset": [1776, 1785], + "op": "DUP5", + "path": "10" + }, + "1178": { + "fn": "ProxySupport.initialize", + "offset": [1771, 1775], + "op": "DUP7", + "path": "10" + }, + "1179": { + "fn": "ProxySupport.initialize", + "offset": [1771, 1775], + "op": "DUP9", + "path": "10" + }, + "1180": { + "fn": "ProxySupport.initialize", + "offset": [1771, 1803], + "op": "PUSH2", + "path": "10", + "value": "0x1959" + }, + "1183": { + "fn": "ProxySupport.initialize", + "jump": "i", + "offset": [1771, 1803], + "op": "JUMP", + "path": "10" + }, + "1184": { + "fn": "ProxySupport.initialize", + "offset": [1771, 1803], + "op": "JUMPDEST", + "path": "10" + }, + "1185": { + "fn": "ProxySupport.initialize", + "offset": [1760, 1815], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "1187": { + "fn": "ProxySupport.initialize", + "offset": [1760, 1815], + "op": "DUP2", + "path": "10" + }, + "1188": { + "fn": "ProxySupport.initialize", + "offset": [1760, 1815], + "op": "LT", + "path": "10" + }, + "1189": { + "fn": "ProxySupport.initialize", + "offset": [1760, 1815], + "op": "ISZERO", + "path": "10" + }, + "1190": { + "fn": "ProxySupport.initialize", + "offset": [1760, 1815], + "op": "PUSH2", + "path": "10", + "value": "0x4AE" + }, + "1193": { + "fn": "ProxySupport.initialize", + "offset": [1760, 1815], + "op": "JUMPI", + "path": "10" + }, + "1194": { + "fn": "ProxySupport.initialize", + "offset": [1760, 1815], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "1196": { + "fn": "ProxySupport.initialize", + "offset": [1760, 1815], + "op": "DUP1", + "path": "10" + }, + "1197": { + "fn": "ProxySupport.initialize", + "offset": [1760, 1815], + "op": "REVERT", + "path": "10" + }, + "1198": { + "fn": "ProxySupport.initialize", + "offset": [1760, 1815], + "op": "JUMPDEST", + "path": "10" + }, + "1199": { + "op": "POP" + }, + "1200": { + "fn": "ProxySupport.initialize", + "offset": [1760, 1815], + "op": "CALLDATALOAD", + "path": "10" + }, + "1201": { + "op": "PUSH1", + "value": "0x1" + }, + "1203": { + "op": "PUSH1", + "value": "0x1" + }, + "1205": { + "op": "PUSH1", + "value": "0xA0" + }, + "1207": { + "op": "SHL" + }, + "1208": { + "op": "SUB" + }, + "1209": { + "fn": "ProxySupport.initialize", + "offset": [1760, 1815], + "op": "AND", + "path": "10" + }, + "1210": { + "fn": "ProxySupport.initialize", + "offset": [1760, 1815], + "op": "SWAP1", + "path": "10" + }, + "1211": { + "op": "POP" + }, + "1212": { + "fn": "ProxySupport.initialize", + "offset": [1826, 1861], + "op": "CALLDATASIZE", + "path": "10" + }, + "1213": { + "fn": "ProxySupport.initialize", + "offset": [1826, 1861], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "1215": { + "fn": "ProxySupport.initialize", + "offset": [1864, 1880], + "op": "PUSH2", + "path": "10", + "value": "0x4CA" + }, + "1218": { + "fn": "ProxySupport.initialize", + "offset": [1870, 1879], + "op": "DUP6", + "path": "10" + }, + "1219": { + "fn": "ProxySupport.initialize", + "offset": [1826, 1861], + "op": "DUP3", + "path": "10" + }, + "1220": { + "fn": "ProxySupport.initialize", + "offset": [1864, 1868], + "op": "DUP9", + "path": "10" + }, + "1221": { + "fn": "ProxySupport.initialize", + "offset": [1864, 1868], + "op": "DUP11", + "path": "10" + }, + "1222": { + "fn": "ProxySupport.initialize", + "offset": [1864, 1880], + "op": "PUSH2", + "path": "10", + "value": "0x1959" + }, + "1225": { + "fn": "ProxySupport.initialize", + "jump": "i", + "offset": [1864, 1880], + "op": "JUMP", + "path": "10" + }, + "1226": { + "fn": "ProxySupport.initialize", + "offset": [1864, 1880], + "op": "JUMPDEST", + "path": "10" + }, + "1227": { + "fn": "ProxySupport.initialize", + "offset": [1826, 1880], + "op": "SWAP2", + "path": "10" + }, + "1228": { + "fn": "ProxySupport.initialize", + "offset": [1826, 1880], + "op": "POP", + "path": "10" + }, + "1229": { + "fn": "ProxySupport.initialize", + "offset": [1826, 1880], + "op": "SWAP2", + "path": "10" + }, + "1230": { + "fn": "ProxySupport.initialize", + "offset": [1826, 1880], + "op": "POP", + "path": "10" + }, + "1231": { + "fn": "ProxySupport.initialize", + "offset": [1891, 1940], + "op": "PUSH2", + "path": "10", + "statement": 6, + "value": "0x4D8" + }, + "1234": { + "fn": "ProxySupport.initialize", + "offset": [1919, 1939], + "op": "DUP3", + "path": "10" + }, + "1235": { + "fn": "ProxySupport.initialize", + "offset": [1919, 1939], + "op": "DUP3", + "path": "10" + }, + "1236": { + "fn": "ProxySupport.initialize", + "offset": [1891, 1918], + "op": "PUSH2", + "path": "10", + "value": "0x39B" + }, + "1239": { + "fn": "ProxySupport.initialize", + "jump": "i", + "offset": [1891, 1940], + "op": "JUMP", + "path": "10" + }, + "1240": { + "fn": "ProxySupport.initialize", + "offset": [1891, 1940], + "op": "JUMPDEST", + "path": "10" + }, + "1241": { + "fn": "ProxySupport.initialize", + "offset": [1951, 1974], + "op": "CALLDATASIZE", + "path": "10" + }, + "1242": { + "fn": "ProxySupport.initialize", + "offset": [1951, 1974], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "1244": { + "fn": "ProxySupport.initialize", + "offset": [1977, 2000], + "op": "PUSH2", + "path": "10", + "value": "0x4E7" + }, + "1247": { + "fn": "ProxySupport.initialize", + "offset": [1977, 1981], + "op": "DUP9", + "path": "10" + }, + "1248": { + "fn": "ProxySupport.initialize", + "offset": [1982, 1998], + "op": "DUP8", + "path": "10" + }, + "1249": { + "fn": "ProxySupport.initialize", + "offset": [1977, 1981], + "op": "DUP2", + "path": "10" + }, + "1250": { + "fn": "ProxySupport.initialize", + "offset": [1977, 1981], + "op": "DUP13", + "path": "10" + }, + "1251": { + "fn": "ProxySupport.initialize", + "offset": [1977, 2000], + "op": "PUSH2", + "path": "10", + "value": "0x1959" + }, + "1254": { + "fn": "ProxySupport.initialize", + "jump": "i", + "offset": [1977, 2000], + "op": "JUMP", + "path": "10" + }, + "1255": { + "fn": "ProxySupport.initialize", + "offset": [1977, 2000], + "op": "JUMPDEST", + "path": "10" + }, + "1256": { + "fn": "ProxySupport.initialize", + "offset": [1951, 2000], + "op": "SWAP1", + "path": "10" + }, + "1257": { + "fn": "ProxySupport.initialize", + "offset": [1951, 2000], + "op": "SWAP3", + "path": "10" + }, + "1258": { + "op": "POP" + }, + "1259": { + "fn": "ProxySupport.initialize", + "offset": [1951, 2000], + "op": "SWAP1", + "path": "10" + }, + "1260": { + "op": "POP" + }, + "1261": { + "op": "PUSH1", + "value": "0x1" + }, + "1263": { + "op": "PUSH1", + "value": "0x1" + }, + "1265": { + "op": "PUSH1", + "value": "0xA0" + }, + "1267": { + "op": "SHL" + }, + "1268": { + "op": "SUB" + }, + "1269": { + "fn": "ProxySupport.initialize", + "offset": [2095, 2121], + "op": "DUP6", + "path": "10" + }, + "1270": { + "fn": "ProxySupport.initialize", + "offset": [2095, 2121], + "op": "AND", + "path": "10" + }, + "1271": { + "branch": 91, + "fn": "ProxySupport.initialize", + "offset": [2095, 2121], + "op": "ISZERO", + "path": "10" + }, + "1272": { + "fn": "ProxySupport.initialize", + "offset": [2091, 2213], + "op": "PUSH2", + "path": "10", + "value": "0x512" + }, + "1275": { + "branch": 91, + "fn": "ProxySupport.initialize", + "offset": [2091, 2213], + "op": "JUMPI", + "path": "10" + }, + "1276": { + "fn": "ProxySupport.initialize", + "offset": [2137, 2182], + "op": "PUSH2", + "path": "10", + "statement": 7, + "value": "0x506" + }, + "1279": { + "fn": "ProxySupport.initialize", + "offset": [2161, 2171], + "op": "DUP6", + "path": "10" + }, + "1280": { + "fn": "ProxySupport.initialize", + "offset": [2173, 2181], + "op": "DUP4", + "path": "10" + }, + "1281": { + "fn": "ProxySupport.initialize", + "offset": [2173, 2181], + "op": "DUP4", + "path": "10" + }, + "1282": { + "fn": "ProxySupport.initialize", + "offset": [2137, 2160], + "op": "PUSH2", + "path": "10", + "value": "0xB2F" + }, + "1285": { + "fn": "ProxySupport.initialize", + "jump": "i", + "offset": [2137, 2182], + "op": "JUMP", + "path": "10" + }, + "1286": { + "fn": "ProxySupport.initialize", + "offset": [2137, 2182], + "op": "JUMPDEST", + "path": "10" + }, + "1287": { + "fn": "ProxySupport.initialize", + "offset": [2196, 2203], + "op": "POP", + "path": "10", + "statement": 8 + }, + "1288": { + "fn": "ProxySupport.initialize", + "offset": [2196, 2203], + "op": "POP", + "path": "10" + }, + "1289": { + "fn": "ProxySupport.initialize", + "offset": [2196, 2203], + "op": "POP", + "path": "10" + }, + "1290": { + "fn": "ProxySupport.initialize", + "offset": [2196, 2203], + "op": "POP", + "path": "10" + }, + "1291": { + "fn": "ProxySupport.initialize", + "offset": [2196, 2203], + "op": "POP", + "path": "10" + }, + "1292": { + "fn": "ProxySupport.initialize", + "offset": [2196, 2203], + "op": "POP", + "path": "10" + }, + "1293": { + "fn": "ProxySupport.initialize", + "offset": [2196, 2203], + "op": "POP", + "path": "10" + }, + "1294": { + "fn": "ProxySupport.initialize", + "offset": [2196, 2203], + "op": "PUSH2", + "path": "10", + "value": "0x39B" + }, + "1297": { + "fn": "ProxySupport.initialize", + "offset": [2196, 2203], + "op": "JUMP", + "path": "10" + }, + "1298": { + "fn": "ProxySupport.initialize", + "offset": [2091, 2213], + "op": "JUMPDEST", + "path": "10" + }, + "1299": { + "fn": "ProxySupport.initialize", + "offset": [2227, 2242], + "op": "PUSH2", + "path": "10", + "value": "0x51A" + }, + "1302": { + "fn": "ProxySupport.initialize", + "offset": [2227, 2240], + "op": "PUSH2", + "path": "10", + "value": "0xD86" + }, + "1305": { + "fn": "ProxySupport.initialize", + "jump": "i", + "offset": [2227, 2242], + "op": "JUMP", + "path": "10" + }, + "1306": { + "branch": 92, + "fn": "ProxySupport.initialize", + "offset": [2227, 2242], + "op": "JUMPDEST", + "path": "10" + }, + "1307": { + "fn": "ProxySupport.initialize", + "offset": [2223, 2505], + "op": "ISZERO", + "path": "10" + }, + "1308": { + "fn": "ProxySupport.initialize", + "offset": [2223, 2505], + "op": "PUSH2", + "path": "10", + "value": "0x56E" + }, + "1311": { + "branch": 92, + "fn": "ProxySupport.initialize", + "offset": [2223, 2505], + "op": "JUMPI", + "path": "10" + }, + "1312": { + "fn": "ProxySupport.initialize", + "offset": [2266, 2286], + "op": "DUP1", + "path": "10", + "statement": 9 + }, + "1313": { + "branch": 93, + "fn": "ProxySupport.initialize", + "offset": [2266, 2286], + "op": "ISZERO", + "path": "10" + }, + "1314": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "PUSH2", + "path": "10", + "value": "0x569" + }, + "1317": { + "branch": 93, + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "JUMPI", + "path": "10" + }, + "1318": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "PUSH1", + "path": "10", + "value": "0x40" + }, + "1320": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "DUP1", + "path": "10" + }, + "1321": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "MLOAD", + "path": "10" + }, + "1322": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "1326": { + "op": "PUSH1", + "value": "0xE5" + }, + "1328": { + "op": "SHL" + }, + "1329": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "DUP2", + "path": "10" + }, + "1330": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "MSTORE", + "path": "10" + }, + "1331": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "1333": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "PUSH1", + "path": "10", + "value": "0x4" + }, + "1335": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "DUP3", + "path": "10" + }, + "1336": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "ADD", + "path": "10" + }, + "1337": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "MSTORE", + "path": "10" + }, + "1338": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "PUSH1", + "path": "10", + "value": "0x14" + }, + "1340": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "PUSH1", + "path": "10", + "value": "0x24" + }, + "1342": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "DUP3", + "path": "10" + }, + "1343": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "ADD", + "path": "10" + }, + "1344": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "MSTORE", + "path": "10" + }, + "1345": { + "op": "PUSH20", + "value": "0x554E45585045435445445F494E49545F44415441" + }, + "1366": { + "op": "PUSH1", + "value": "0x60" + }, + "1368": { + "op": "SHL" + }, + "1369": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "PUSH1", + "path": "10", + "value": "0x44" + }, + "1371": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "DUP3", + "path": "10" + }, + "1372": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "ADD", + "path": "10" + }, + "1373": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "MSTORE", + "path": "10" + }, + "1374": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "SWAP1", + "path": "10" + }, + "1375": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "MLOAD", + "path": "10" + }, + "1376": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "SWAP1", + "path": "10" + }, + "1377": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "DUP2", + "path": "10" + }, + "1378": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "SWAP1", + "path": "10" + }, + "1379": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "SUB", + "path": "10" + }, + "1380": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "PUSH1", + "path": "10", + "value": "0x64" + }, + "1382": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "ADD", + "path": "10" + }, + "1383": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "SWAP1", + "path": "10" + }, + "1384": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "REVERT", + "path": "10" + }, + "1385": { + "fn": "ProxySupport.initialize", + "offset": [2258, 2311], + "op": "JUMPDEST", + "path": "10" + }, + "1386": { + "fn": "ProxySupport.initialize", + "offset": [2223, 2505], + "op": "PUSH2", + "path": "10", + "value": "0x58A" + }, + "1389": { + "fn": "ProxySupport.initialize", + "offset": [2223, 2505], + "op": "JUMP", + "path": "10" + }, + "1390": { + "fn": "ProxySupport.initialize", + "offset": [2223, 2505], + "op": "JUMPDEST", + "path": "10" + }, + "1391": { + "fn": "ProxySupport.initialize", + "offset": [2391, 2417], + "op": "PUSH2", + "path": "10", + "statement": 10, + "value": "0x578" + }, + "1394": { + "fn": "ProxySupport.initialize", + "offset": [2408, 2416], + "op": "DUP3", + "path": "10" + }, + "1395": { + "fn": "ProxySupport.initialize", + "offset": [2408, 2416], + "op": "DUP3", + "path": "10" + }, + "1396": { + "fn": "ProxySupport.initialize", + "offset": [2391, 2407], + "op": "PUSH2", + "path": "10", + "value": "0xDA1" + }, + "1399": { + "fn": "ProxySupport.initialize", + "jump": "i", + "offset": [2391, 2417], + "op": "JUMP", + "path": "10" + }, + "1400": { + "fn": "ProxySupport.initialize", + "offset": [2391, 2417], + "op": "JUMPDEST", + "path": "10" + }, + "1401": { + "fn": "ProxySupport.initialize", + "offset": [2431, 2464], + "op": "PUSH2", + "path": "10", + "statement": 11, + "value": "0x582" + }, + "1404": { + "fn": "ProxySupport.initialize", + "offset": [2455, 2463], + "op": "DUP3", + "path": "10" + }, + "1405": { + "fn": "ProxySupport.initialize", + "offset": [2455, 2463], + "op": "DUP3", + "path": "10" + }, + "1406": { + "fn": "ProxySupport.initialize", + "offset": [2431, 2454], + "op": "PUSH2", + "path": "10", + "value": "0xDEA" + }, + "1409": { + "fn": "ProxySupport.initialize", + "jump": "i", + "offset": [2431, 2464], + "op": "JUMP", + "path": "10" + }, + "1410": { + "fn": "ProxySupport.initialize", + "offset": [2431, 2464], + "op": "JUMPDEST", + "path": "10" + }, + "1411": { + "fn": "ProxySupport.initialize", + "offset": [2478, 2494], + "op": "PUSH2", + "path": "10", + "statement": 12, + "value": "0x58A" + }, + "1414": { + "fn": "ProxySupport.initialize", + "offset": [2478, 2492], + "op": "PUSH2", + "path": "10", + "value": "0xE2D" + }, + "1417": { + "fn": "ProxySupport.initialize", + "jump": "i", + "offset": [2478, 2494], + "op": "JUMP", + "path": "10" + }, + "1418": { + "fn": "ProxySupport.initialize", + "offset": [2478, 2494], + "op": "JUMPDEST", + "path": "10" + }, + "1419": { + "offset": [1244, 1245], + "op": "POP", + "path": "5" + }, + "1420": { + "fn": "ProxySupport.initialize", + "offset": [1244, 1245], + "op": "POP", + "path": "5" + }, + "1421": { + "fn": "ProxySupport.initialize", + "offset": [1244, 1245], + "op": "POP", + "path": "5" + }, + "1422": { + "fn": "ProxySupport.initialize", + "offset": [1244, 1245], + "op": "POP", + "path": "5" + }, + "1423": { + "fn": "ProxySupport.initialize", + "offset": [1244, 1245], + "op": "POP", + "path": "5" + }, + "1424": { + "fn": "ProxySupport.initialize", + "offset": [1244, 1245], + "op": "POP", + "path": "5" + }, + "1425": { + "fn": "ProxySupport.initialize", + "offset": [1244, 1245], + "op": "POP", + "path": "5" + }, + "1426": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "POP", + "path": "10" + }, + "1427": { + "fn": "ProxySupport.initialize", + "offset": [1483, 2511], + "op": "POP", + "path": "10" + }, + "1428": { + "fn": "ProxySupport.initialize", + "jump": "o", + "offset": [1483, 2511], + "op": "JUMP", + "path": "10" + }, + "1429": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [872, 992], + "op": "JUMPDEST", + "path": "34" + }, + "1430": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [951, 985], + "op": "PUSH2", + "path": "34", + "statement": 13, + "value": "0x3BA" + }, + "1433": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [966, 984], + "op": "DUP2", + "path": "34" + }, + "1434": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "offset": [951, 965], + "op": "PUSH2", + "path": "34", + "value": "0xEAF" + }, + "1437": { + "fn": "StarknetGovernance.starknetRemoveGovernor", + "jump": "i", + "offset": [951, 985], + "op": "JUMP", + "path": "34" + }, + "1438": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [2946, 3128], + "op": "JUMPDEST", + "path": "28" + }, + "1439": { + "offset": [434, 456], + "op": "PUSH2", + "path": "8", + "value": "0x5A7" + }, + "1442": { + "offset": [445, 455], + "op": "CALLER", + "path": "8" + }, + "1443": { + "offset": [434, 444], + "op": "PUSH2", + "path": "8", + "value": "0xB00" + }, + "1446": { + "jump": "i", + "offset": [434, 456], + "op": "JUMP", + "path": "8" + }, + "1447": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [434, 456], + "op": "JUMPDEST", + "path": "8" + }, + "1448": { + "offset": [426, 476], + "op": "PUSH2", + "path": "8", + "value": "0x5EA" + }, + "1451": { + "offset": [426, 476], + "op": "JUMPI", + "path": "8" + }, + "1452": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x40" + }, + "1454": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "DUP1", + "path": "8" + }, + "1455": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "MLOAD", + "path": "8" + }, + "1456": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "1460": { + "op": "PUSH1", + "value": "0xE5" + }, + "1462": { + "op": "SHL" + }, + "1463": { + "offset": [426, 476], + "op": "DUP2", + "path": "8" + }, + "1464": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "1465": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x20" + }, + "1467": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x4" + }, + "1469": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "1470": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "1471": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "1472": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0xF" + }, + "1474": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x24" + }, + "1476": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "1477": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "1478": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "1479": { + "op": "PUSH15", + "value": "0x4F4E4C595F474F5645524E414E4345" + }, + "1495": { + "op": "PUSH1", + "value": "0x88" + }, + "1497": { + "op": "SHL" + }, + "1498": { + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x44" + }, + "1500": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "1501": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "1502": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "1503": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "1504": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "MLOAD", + "path": "8" + }, + "1505": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "1506": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "DUP2", + "path": "8" + }, + "1507": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "1508": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "SUB", + "path": "8" + }, + "1509": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x64" + }, + "1511": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "1512": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "1513": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "REVERT", + "path": "8" + }, + "1514": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [426, 476], + "op": "JUMPDEST", + "path": "8" + }, + "1515": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "PUSH1", + "path": "28", + "statement": 14, + "value": "0x40" + }, + "1517": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "DUP1", + "path": "28" + }, + "1518": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "MLOAD", + "path": "28" + }, + "1519": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "DUP3", + "path": "28" + }, + "1520": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "DUP2", + "path": "28" + }, + "1521": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "MSTORE", + "path": "28" + }, + "1522": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "SWAP1", + "path": "28" + }, + "1523": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "MLOAD", + "path": "28" + }, + "1524": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "PUSH32", + "path": "28", + "value": "0xA9AEC19EC61C04AE0A4A1498AB6CE04CBD68B3D54C47888A45EB2BD37CAF06BC" + }, + "1557": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "SWAP2", + "path": "28" + }, + "1558": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "DUP2", + "path": "28" + }, + "1559": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "SWAP1", + "path": "28" + }, + "1560": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "SUB", + "path": "28" + }, + "1561": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "1563": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "ADD", + "path": "28" + }, + "1564": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "SWAP1", + "path": "28" + }, + "1565": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3039, 3078], + "op": "LOG1", + "path": "28" + }, + "1566": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3088, 3121], + "op": "PUSH2", + "path": "28", + "statement": 15, + "value": "0x3BA" + }, + "1569": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3104, 3120], + "op": "DUP2", + "path": "28" + }, + "1570": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "offset": [3088, 3103], + "op": "PUSH2", + "path": "28", + "value": "0xFFC" + }, + "1573": { + "fn": "StarknetTokenBridge.setMaxTotalBalance", + "jump": "i", + "offset": [3088, 3121], + "op": "JUMP", + "path": "28" + }, + "1574": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [750, 866], + "op": "JUMPDEST", + "path": "34" + }, + "1575": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [827, 859], + "op": "PUSH2", + "path": "34", + "statement": 16, + "value": "0x3BA" + }, + "1578": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [847, 858], + "op": "DUP2", + "path": "34" + }, + "1579": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "offset": [827, 846], + "op": "PUSH2", + "path": "34", + "value": "0x101E" + }, + "1582": { + "fn": "StarknetGovernance.starknetNominateNewGovernor", + "jump": "i", + "offset": [827, 859], + "op": "JUMP", + "path": "34" + }, + "1583": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "offset": [998, 1078], + "op": "JUMPDEST", + "path": "34" + }, + "1584": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "offset": [1053, 1071], + "op": "PUSH2", + "path": "34", + "statement": 17, + "value": "0x637" + }, + "1587": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "offset": [1053, 1069], + "op": "PUSH2", + "path": "34", + "value": "0x111B" + }, + "1590": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "jump": "i", + "offset": [1053, 1071], + "op": "JUMP", + "path": "34" + }, + "1591": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "offset": [1053, 1071], + "op": "JUMPDEST", + "path": "34" + }, + "1592": { + "fn": "StarknetGovernance.starknetAcceptGovernance", + "jump": "o", + "offset": [998, 1078], + "op": "JUMP", + "path": "34" + }, + "1593": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2665, 2940], + "op": "JUMPDEST", + "path": "28" + }, + "1594": { + "offset": [2461, 2478], + "op": "PUSH2", + "path": "28", + "value": "0x641" + }, + "1597": { + "offset": [2461, 2476], + "op": "PUSH2", + "path": "28", + "value": "0x11E8" + }, + "1600": { + "jump": "i", + "offset": [2461, 2478], + "op": "JUMP", + "path": "28" + }, + "1601": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2461, 2478], + "op": "JUMPDEST", + "path": "28" + }, + "1602": { + "offset": [2461, 2483], + "op": "ISZERO", + "path": "28" + }, + "1603": { + "offset": [2453, 2517], + "op": "PUSH2", + "path": "28", + "value": "0x693" + }, + "1606": { + "offset": [2453, 2517], + "op": "JUMPI", + "path": "28" + }, + "1607": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "1609": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "DUP1", + "path": "28" + }, + "1610": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "MLOAD", + "path": "28" + }, + "1611": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "1615": { + "op": "PUSH1", + "value": "0xE5" + }, + "1617": { + "op": "SHL" + }, + "1618": { + "offset": [2453, 2517], + "op": "DUP2", + "path": "28" + }, + "1619": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "MSTORE", + "path": "28" + }, + "1620": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "1622": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "1624": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "DUP3", + "path": "28" + }, + "1625": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "ADD", + "path": "28" + }, + "1626": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "MSTORE", + "path": "28" + }, + "1627": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "PUSH1", + "path": "28", + "value": "0x1D" + }, + "1629": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "PUSH1", + "path": "28", + "value": "0x24" + }, + "1631": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "DUP3", + "path": "28" + }, + "1632": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "ADD", + "path": "28" + }, + "1633": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "MSTORE", + "path": "28" + }, + "1634": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "PUSH32", + "path": "28", + "value": "0x4C325F544F4B454E5F434F4E54524143545F414C52454144595F534554000000" + }, + "1667": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "PUSH1", + "path": "28", + "value": "0x44" + }, + "1669": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "DUP3", + "path": "28" + }, + "1670": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "ADD", + "path": "28" + }, + "1671": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "MSTORE", + "path": "28" + }, + "1672": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "SWAP1", + "path": "28" + }, + "1673": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "MLOAD", + "path": "28" + }, + "1674": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "SWAP1", + "path": "28" + }, + "1675": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "DUP2", + "path": "28" + }, + "1676": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "SWAP1", + "path": "28" + }, + "1677": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "SUB", + "path": "28" + }, + "1678": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "PUSH1", + "path": "28", + "value": "0x64" + }, + "1680": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "ADD", + "path": "28" + }, + "1681": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "SWAP1", + "path": "28" + }, + "1682": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "REVERT", + "path": "28" + }, + "1683": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2453, 2517], + "op": "JUMPDEST", + "path": "28" + }, + "1684": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2791, 2807], + "op": "DUP1", + "path": "28" + }, + "1685": { + "offset": [2260, 2274], + "op": "DUP1", + "path": "28" + }, + "1686": { + "offset": [2252, 2302], + "op": "PUSH2", + "path": "28", + "value": "0x6E0" + }, + "1689": { + "offset": [2252, 2302], + "op": "JUMPI", + "path": "28" + }, + "1690": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "1692": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "DUP1", + "path": "28" + }, + "1693": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "MLOAD", + "path": "28" + }, + "1694": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "1698": { + "op": "PUSH1", + "value": "0xE5" + }, + "1700": { + "op": "SHL" + }, + "1701": { + "offset": [2252, 2302], + "op": "DUP2", + "path": "28" + }, + "1702": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "MSTORE", + "path": "28" + }, + "1703": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "1705": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "1707": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "DUP3", + "path": "28" + }, + "1708": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "ADD", + "path": "28" + }, + "1709": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "MSTORE", + "path": "28" + }, + "1710": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "PUSH1", + "path": "28", + "value": "0x17" + }, + "1712": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "PUSH1", + "path": "28", + "value": "0x24" + }, + "1714": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "DUP3", + "path": "28" + }, + "1715": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "ADD", + "path": "28" + }, + "1716": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "MSTORE", + "path": "28" + }, + "1717": { + "op": "PUSH23", + "value": "0x4C325F414444524553535F4F55545F4F465F52414E4745" + }, + "1741": { + "op": "PUSH1", + "value": "0x48" + }, + "1743": { + "op": "SHL" + }, + "1744": { + "offset": [2252, 2302], + "op": "PUSH1", + "path": "28", + "value": "0x44" + }, + "1746": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "DUP3", + "path": "28" + }, + "1747": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "ADD", + "path": "28" + }, + "1748": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "MSTORE", + "path": "28" + }, + "1749": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "SWAP1", + "path": "28" + }, + "1750": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "MLOAD", + "path": "28" + }, + "1751": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "SWAP1", + "path": "28" + }, + "1752": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "DUP2", + "path": "28" + }, + "1753": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "SWAP1", + "path": "28" + }, + "1754": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "SUB", + "path": "28" + }, + "1755": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "PUSH1", + "path": "28", + "value": "0x64" + }, + "1757": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "ADD", + "path": "28" + }, + "1758": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "SWAP1", + "path": "28" + }, + "1759": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "REVERT", + "path": "28" + }, + "1760": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2252, 2302], + "op": "JUMPDEST", + "path": "28" + }, + "1761": { + "op": "PUSH1", + "value": "0x1" + }, + "1763": { + "op": "PUSH8", + "value": "0x800000000000011" + }, + "1772": { + "op": "PUSH1", + "value": "0xC0" + }, + "1774": { + "op": "SHL" + }, + "1775": { + "op": "ADD" + }, + "1776": { + "offset": [2320, 2329], + "op": "DUP2", + "path": "28" + }, + "1777": { + "offset": [2320, 2358], + "op": "LT", + "path": "28" + }, + "1778": { + "offset": [2312, 2386], + "op": "PUSH2", + "path": "28", + "value": "0x73C" + }, + "1781": { + "offset": [2312, 2386], + "op": "JUMPI", + "path": "28" + }, + "1782": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "1784": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "DUP1", + "path": "28" + }, + "1785": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "MLOAD", + "path": "28" + }, + "1786": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "1790": { + "op": "PUSH1", + "value": "0xE5" + }, + "1792": { + "op": "SHL" + }, + "1793": { + "offset": [2312, 2386], + "op": "DUP2", + "path": "28" + }, + "1794": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "MSTORE", + "path": "28" + }, + "1795": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "1797": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "1799": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "DUP3", + "path": "28" + }, + "1800": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "ADD", + "path": "28" + }, + "1801": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "MSTORE", + "path": "28" + }, + "1802": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "PUSH1", + "path": "28", + "value": "0x17" + }, + "1804": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "PUSH1", + "path": "28", + "value": "0x24" + }, + "1806": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "DUP3", + "path": "28" + }, + "1807": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "ADD", + "path": "28" + }, + "1808": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "MSTORE", + "path": "28" + }, + "1809": { + "op": "PUSH23", + "value": "0x4C325F414444524553535F4F55545F4F465F52414E4745" + }, + "1833": { + "op": "PUSH1", + "value": "0x48" + }, + "1835": { + "op": "SHL" + }, + "1836": { + "offset": [2312, 2386], + "op": "PUSH1", + "path": "28", + "value": "0x44" + }, + "1838": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "DUP3", + "path": "28" + }, + "1839": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "ADD", + "path": "28" + }, + "1840": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "MSTORE", + "path": "28" + }, + "1841": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "SWAP1", + "path": "28" + }, + "1842": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "MLOAD", + "path": "28" + }, + "1843": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "SWAP1", + "path": "28" + }, + "1844": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "DUP2", + "path": "28" + }, + "1845": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "SWAP1", + "path": "28" + }, + "1846": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "SUB", + "path": "28" + }, + "1847": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "PUSH1", + "path": "28", + "value": "0x64" + }, + "1849": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "ADD", + "path": "28" + }, + "1850": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "SWAP1", + "path": "28" + }, + "1851": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "REVERT", + "path": "28" + }, + "1852": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2312, 2386], + "op": "JUMPDEST", + "path": "28" + }, + "1853": { + "offset": [434, 456], + "op": "PUSH2", + "path": "8", + "value": "0x745" + }, + "1856": { + "offset": [445, 455], + "op": "CALLER", + "path": "8" + }, + "1857": { + "offset": [434, 444], + "op": "PUSH2", + "path": "8", + "value": "0xB00" + }, + "1860": { + "jump": "i", + "offset": [434, 456], + "op": "JUMP", + "path": "8" + }, + "1861": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [434, 456], + "op": "JUMPDEST", + "path": "8" + }, + "1862": { + "offset": [426, 476], + "op": "PUSH2", + "path": "8", + "value": "0x788" + }, + "1865": { + "offset": [426, 476], + "op": "JUMPI", + "path": "8" + }, + "1866": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x40" + }, + "1868": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "DUP1", + "path": "8" + }, + "1869": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "MLOAD", + "path": "8" + }, + "1870": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "1874": { + "op": "PUSH1", + "value": "0xE5" + }, + "1876": { + "op": "SHL" + }, + "1877": { + "offset": [426, 476], + "op": "DUP2", + "path": "8" + }, + "1878": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "1879": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x20" + }, + "1881": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x4" + }, + "1883": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "1884": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "1885": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "1886": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0xF" + }, + "1888": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x24" + }, + "1890": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "1891": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "1892": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "1893": { + "op": "PUSH15", + "value": "0x4F4E4C595F474F5645524E414E4345" + }, + "1909": { + "op": "PUSH1", + "value": "0x88" + }, + "1911": { + "op": "SHL" + }, + "1912": { + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x44" + }, + "1914": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "1915": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "1916": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "1917": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "1918": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "MLOAD", + "path": "8" + }, + "1919": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "1920": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "DUP2", + "path": "8" + }, + "1921": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "1922": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "SUB", + "path": "8" + }, + "1923": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x64" + }, + "1925": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "1926": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "1927": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "REVERT", + "path": "8" + }, + "1928": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [426, 476], + "op": "JUMPDEST", + "path": "8" + }, + "1929": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "PUSH1", + "path": "28", + "statement": 18, + "value": "0x40" + }, + "1931": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "DUP1", + "path": "28" + }, + "1932": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "MLOAD", + "path": "28" + }, + "1933": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "DUP4", + "path": "28" + }, + "1934": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "DUP2", + "path": "28" + }, + "1935": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "MSTORE", + "path": "28" + }, + "1936": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "SWAP1", + "path": "28" + }, + "1937": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "MLOAD", + "path": "28" + }, + "1938": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "PUSH32", + "path": "28", + "value": "0x49774A785AFE45B60857497C0AFF8733F202CA7E75329AD6408073564EFEA6DF" + }, + "1971": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "SWAP2", + "path": "28" + }, + "1972": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "DUP2", + "path": "28" + }, + "1973": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "SWAP1", + "path": "28" + }, + "1974": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "SUB", + "path": "28" + }, + "1975": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "1977": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "ADD", + "path": "28" + }, + "1978": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "SWAP1", + "path": "28" + }, + "1979": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2851, 2890], + "op": "LOG1", + "path": "28" + }, + "1980": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2900, 2933], + "op": "PUSH2", + "path": "28", + "statement": 19, + "value": "0x39B" + }, + "1983": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2916, 2932], + "op": "DUP3", + "path": "28" + }, + "1984": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "offset": [2900, 2915], + "op": "PUSH2", + "path": "28", + "value": "0x1210" + }, + "1987": { + "fn": "StarknetTokenBridge.setL2TokenContract", + "jump": "i", + "offset": [2900, 2933], + "op": "JUMP", + "path": "28" + }, + "1988": { + "fn": "StarknetEthBridge.deposit", + "offset": [308, 583], + "op": "JUMPDEST", + "path": "27" + }, + "1989": { + "fn": "StarknetEthBridge.deposit", + "offset": [489, 506], + "op": "PUSH2", + "path": "27", + "statement": 20, + "value": "0x7CC" + }, + "1992": { + "fn": "StarknetEthBridge.deposit", + "offset": [489, 504], + "op": "PUSH2", + "path": "27", + "value": "0x1232" + }, + "1995": { + "fn": "StarknetEthBridge.deposit", + "jump": "i", + "offset": [489, 506], + "op": "JUMP", + "path": "27" + }, + "1996": { + "fn": "StarknetEthBridge.deposit", + "offset": [489, 506], + "op": "JUMPDEST", + "path": "27" + }, + "1997": { + "fn": "StarknetEthBridge.deposit", + "offset": [464, 485], + "op": "SELFBALANCE", + "path": "27" + }, + "1998": { + "fn": "StarknetEthBridge.deposit", + "offset": [464, 506], + "op": "GT", + "path": "27" + }, + "1999": { + "branch": 78, + "fn": "StarknetEthBridge.deposit", + "offset": [464, 506], + "op": "ISZERO", + "path": "27" + }, + "2000": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "PUSH2", + "path": "27", + "value": "0x817" + }, + "2003": { + "branch": 78, + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "JUMPI", + "path": "27" + }, + "2004": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "PUSH1", + "path": "27", + "value": "0x40" + }, + "2006": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "DUP1", + "path": "27" + }, + "2007": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "MLOAD", + "path": "27" + }, + "2008": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "2012": { + "op": "PUSH1", + "value": "0xE5" + }, + "2014": { + "op": "SHL" + }, + "2015": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "DUP2", + "path": "27" + }, + "2016": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "MSTORE", + "path": "27" + }, + "2017": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "PUSH1", + "path": "27", + "value": "0x20" + }, + "2019": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "PUSH1", + "path": "27", + "value": "0x4" + }, + "2021": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "DUP3", + "path": "27" + }, + "2022": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "ADD", + "path": "27" + }, + "2023": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "MSTORE", + "path": "27" + }, + "2024": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "PUSH1", + "path": "27", + "value": "0x14" + }, + "2026": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "PUSH1", + "path": "27", + "value": "0x24" + }, + "2028": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "DUP3", + "path": "27" + }, + "2029": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "ADD", + "path": "27" + }, + "2030": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "MSTORE", + "path": "27" + }, + "2031": { + "op": "PUSH20", + "value": "0x13505617D09053105390D157D15610D151511151" + }, + "2052": { + "op": "PUSH1", + "value": "0x62" + }, + "2054": { + "op": "SHL" + }, + "2055": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "PUSH1", + "path": "27", + "value": "0x44" + }, + "2057": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "DUP3", + "path": "27" + }, + "2058": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "ADD", + "path": "27" + }, + "2059": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "MSTORE", + "path": "27" + }, + "2060": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "SWAP1", + "path": "27" + }, + "2061": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "MLOAD", + "path": "27" + }, + "2062": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "SWAP1", + "path": "27" + }, + "2063": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "DUP2", + "path": "27" + }, + "2064": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "SWAP1", + "path": "27" + }, + "2065": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "SUB", + "path": "27" + }, + "2066": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "PUSH1", + "path": "27", + "value": "0x64" + }, + "2068": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "ADD", + "path": "27" + }, + "2069": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "SWAP1", + "path": "27" + }, + "2070": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "REVERT", + "path": "27" + }, + "2071": { + "fn": "StarknetEthBridge.deposit", + "offset": [456, 531], + "op": "JUMPDEST", + "path": "27" + }, + "2072": { + "fn": "StarknetEthBridge.deposit", + "offset": [541, 576], + "op": "PUSH2", + "path": "27", + "statement": 21, + "value": "0x3BA" + }, + "2075": { + "fn": "StarknetEthBridge.deposit", + "offset": [553, 562], + "op": "CALLVALUE", + "path": "27" + }, + "2076": { + "fn": "StarknetEthBridge.deposit", + "offset": [564, 575], + "op": "DUP3", + "path": "27" + }, + "2077": { + "fn": "StarknetEthBridge.deposit", + "offset": [541, 552], + "op": "PUSH2", + "path": "27", + "value": "0x1255" + }, + "2080": { + "fn": "StarknetEthBridge.deposit", + "jump": "i", + "offset": [541, 576], + "op": "JUMP", + "path": "27" + }, + "2081": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3134, 3286], + "op": "JUMPDEST", + "path": "28" + }, + "2082": { + "offset": [434, 456], + "op": "PUSH2", + "path": "8", + "value": "0x82A" + }, + "2085": { + "offset": [445, 455], + "op": "CALLER", + "path": "8" + }, + "2086": { + "offset": [434, 444], + "op": "PUSH2", + "path": "8", + "value": "0xB00" + }, + "2089": { + "jump": "i", + "offset": [434, 456], + "op": "JUMP", + "path": "8" + }, + "2090": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [434, 456], + "op": "JUMPDEST", + "path": "8" + }, + "2091": { + "offset": [426, 476], + "op": "PUSH2", + "path": "8", + "value": "0x86D" + }, + "2094": { + "offset": [426, 476], + "op": "JUMPI", + "path": "8" + }, + "2095": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x40" + }, + "2097": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "DUP1", + "path": "8" + }, + "2098": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "MLOAD", + "path": "8" + }, + "2099": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "2103": { + "op": "PUSH1", + "value": "0xE5" + }, + "2105": { + "op": "SHL" + }, + "2106": { + "offset": [426, 476], + "op": "DUP2", + "path": "8" + }, + "2107": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "2108": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x20" + }, + "2110": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x4" + }, + "2112": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "2113": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "2114": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "2115": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0xF" + }, + "2117": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x24" + }, + "2119": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "2120": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "2121": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "2122": { + "op": "PUSH15", + "value": "0x4F4E4C595F474F5645524E414E4345" + }, + "2138": { + "op": "PUSH1", + "value": "0x88" + }, + "2140": { + "op": "SHL" + }, + "2141": { + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x44" + }, + "2143": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "2144": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "2145": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "2146": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "2147": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "MLOAD", + "path": "8" + }, + "2148": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "2149": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "DUP2", + "path": "8" + }, + "2150": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "2151": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "SUB", + "path": "8" + }, + "2152": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x64" + }, + "2154": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "2155": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "2156": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "REVERT", + "path": "8" + }, + "2157": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [426, 476], + "op": "JUMPDEST", + "path": "8" + }, + "2158": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "PUSH1", + "path": "28", + "statement": 22, + "value": "0x40" + }, + "2160": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "DUP1", + "path": "28" + }, + "2161": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "MLOAD", + "path": "28" + }, + "2162": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "DUP3", + "path": "28" + }, + "2163": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "DUP2", + "path": "28" + }, + "2164": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "MSTORE", + "path": "28" + }, + "2165": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "SWAP1", + "path": "28" + }, + "2166": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "MLOAD", + "path": "28" + }, + "2167": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "PUSH32", + "path": "28", + "value": "0xAF474B5AFCF11BD99DC9FC7F499E6AB368D650BF7EF23993F0D61BD9AD762651" + }, + "2200": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "SWAP2", + "path": "28" + }, + "2201": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "DUP2", + "path": "28" + }, + "2202": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "SWAP1", + "path": "28" + }, + "2203": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "SUB", + "path": "28" + }, + "2204": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2206": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "ADD", + "path": "28" + }, + "2207": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "SWAP1", + "path": "28" + }, + "2208": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3217, 3246], + "op": "LOG1", + "path": "28" + }, + "2209": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3256, 3279], + "op": "PUSH2", + "path": "28", + "statement": 23, + "value": "0x3BA" + }, + "2212": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3267, 3278], + "op": "DUP2", + "path": "28" + }, + "2213": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "offset": [3256, 3266], + "op": "PUSH2", + "path": "28", + "value": "0x1543" + }, + "2216": { + "fn": "StarknetTokenBridge.setMaxDeposit", + "jump": "i", + "offset": [3256, 3279], + "op": "JUMP", + "path": "28" + }, + "2217": { + "fn": "StarknetGovernance.starknetCancelNomination", + "offset": [1084, 1164], + "op": "JUMPDEST", + "path": "34" + }, + "2218": { + "fn": "StarknetGovernance.starknetCancelNomination", + "offset": [1139, 1157], + "op": "PUSH2", + "path": "34", + "statement": 24, + "value": "0x637" + }, + "2221": { + "fn": "StarknetGovernance.starknetCancelNomination", + "offset": [1139, 1155], + "op": "PUSH2", + "path": "34", + "value": "0x1565" + }, + "2224": { + "fn": "StarknetGovernance.starknetCancelNomination", + "jump": "i", + "offset": [1139, 1157], + "op": "JUMP", + "path": "34" + }, + "2225": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3857, 4296], + "op": "JUMPDEST", + "path": "28" + }, + "2226": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "PUSH1", + "path": "28", + "statement": 25, + "value": "0x40" + }, + "2228": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "DUP1", + "path": "28" + }, + "2229": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "MLOAD", + "path": "28" + }, + "2230": { + "op": "PUSH1", + "value": "0x1" + }, + "2232": { + "op": "PUSH1", + "value": "0x1" + }, + "2234": { + "op": "PUSH1", + "value": "0xA0" + }, + "2236": { + "op": "SHL" + }, + "2237": { + "op": "SUB" + }, + "2238": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "DUP4", + "path": "28" + }, + "2239": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "AND", + "path": "28" + }, + "2240": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "DUP2", + "path": "28" + }, + "2241": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "MSTORE", + "path": "28" + }, + "2242": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2244": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "DUP2", + "path": "28" + }, + "2245": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "ADD", + "path": "28" + }, + "2246": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "DUP5", + "path": "28" + }, + "2247": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "SWAP1", + "path": "28" + }, + "2248": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "MSTORE", + "path": "28" + }, + "2249": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "DUP2", + "path": "28" + }, + "2250": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "MLOAD", + "path": "28" + }, + "2251": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "PUSH32", + "path": "28", + "value": "0xB4214C8C54FC7442F36D3682F59AEBAF09358A4431835B30EFB29D52CF9E1E91" + }, + "2284": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "SWAP3", + "path": "28" + }, + "2285": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "SWAP2", + "path": "28" + }, + "2286": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "DUP2", + "path": "28" + }, + "2287": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "SWAP1", + "path": "28" + }, + "2288": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "SUB", + "path": "28" + }, + "2289": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "SWAP1", + "path": "28" + }, + "2290": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "SWAP2", + "path": "28" + }, + "2291": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "ADD", + "path": "28" + }, + "2292": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "SWAP1", + "path": "28" + }, + "2293": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3940, 3972], + "op": "LOG1", + "path": "28" + }, + "2294": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "2296": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "DUP1", + "path": "28" + }, + "2297": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "MLOAD", + "path": "28" + }, + "2298": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4024, 4025], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "2300": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "DUP1", + "path": "28" + }, + "2301": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "DUP3", + "path": "28" + }, + "2302": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "MSTORE", + "path": "28" + }, + "2303": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "PUSH1", + "path": "28", + "value": "0xA0" + }, + "2305": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "DUP3", + "path": "28" + }, + "2306": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "ADD", + "path": "28" + }, + "2307": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "SWAP1", + "path": "28" + }, + "2308": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "SWAP3", + "path": "28" + }, + "2309": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "MSTORE", + "path": "28" + }, + "2310": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3983, 4007], + "op": "PUSH1", + "path": "28", + "value": "0x60" + }, + "2312": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3983, 4007], + "op": "SWAP2", + "path": "28" + }, + "2313": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2315": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "DUP3", + "path": "28" + }, + "2316": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "ADD", + "path": "28" + }, + "2317": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "PUSH1", + "path": "28", + "value": "0x80" + }, + "2319": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "DUP1", + "path": "28" + }, + "2320": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "CALLDATASIZE", + "path": "28" + }, + "2321": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "DUP4", + "path": "28" + }, + "2322": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "CALLDATACOPY", + "path": "28" + }, + "2323": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "ADD", + "path": "28" + }, + "2324": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "SWAP1", + "path": "28" + }, + "2325": { + "op": "POP" + }, + "2326": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4010, 4026], + "op": "POP", + "path": "28" + }, + "2327": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3983, 4026], + "op": "SWAP1", + "path": "28" + }, + "2328": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [3983, 4026], + "op": "POP", + "path": "28" + }, + "2329": { + "offset": [2140, 2141], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "2331": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4043], + "op": "DUP2", + "path": "28", + "statement": 26 + }, + "2332": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4044, 4045], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "2334": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4046], + "op": "DUP2", + "path": "28" + }, + "2335": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4046], + "op": "MLOAD", + "path": "28" + }, + "2336": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4046], + "op": "DUP2", + "path": "28" + }, + "2337": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4046], + "op": "LT", + "path": "28" + }, + "2338": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4046], + "op": "PUSH2", + "path": "28", + "value": "0x927" + }, + "2341": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4046], + "op": "JUMPI", + "path": "28" + }, + "2342": { + "dev": "Index out of range", + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4046], + "op": "INVALID", + "path": "28" + }, + "2343": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4046], + "op": "JUMPDEST", + "path": "28" + }, + "2344": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4046], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2346": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4046], + "op": "MUL", + "path": "28" + }, + "2347": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4046], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2349": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4046], + "op": "ADD", + "path": "28" + }, + "2350": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4046], + "op": "ADD", + "path": "28" + }, + "2351": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4071], + "op": "DUP2", + "path": "28" + }, + "2352": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4071], + "op": "DUP2", + "path": "28" + }, + "2353": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4071], + "op": "MSTORE", + "path": "28" + }, + "2354": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4071], + "op": "POP", + "path": "28" + }, + "2355": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4036, 4071], + "op": "POP", + "path": "28" + }, + "2356": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4102, 4111], + "op": "DUP2", + "path": "28", + "statement": 27 + }, + "2357": { + "op": "PUSH1", + "value": "0x1" + }, + "2359": { + "op": "PUSH1", + "value": "0x1" + }, + "2361": { + "op": "PUSH1", + "value": "0xA0" + }, + "2363": { + "op": "SHL" + }, + "2364": { + "op": "SUB" + }, + "2365": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4094, 4112], + "op": "AND", + "path": "28" + }, + "2366": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4088], + "op": "DUP2", + "path": "28" + }, + "2367": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4089, 4090], + "op": "PUSH1", + "path": "28", + "value": "0x1" + }, + "2369": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "DUP2", + "path": "28" + }, + "2370": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "MLOAD", + "path": "28" + }, + "2371": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "DUP2", + "path": "28" + }, + "2372": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "LT", + "path": "28" + }, + "2373": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "PUSH2", + "path": "28", + "value": "0x94A" + }, + "2376": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "JUMPI", + "path": "28" + }, + "2377": { + "dev": "Index out of range", + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "INVALID", + "path": "28" + }, + "2378": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "JUMPDEST", + "path": "28" + }, + "2379": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2381": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "SWAP1", + "path": "28" + }, + "2382": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "DUP2", + "path": "28" + }, + "2383": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "MUL", + "path": "28" + }, + "2384": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "SWAP2", + "path": "28" + }, + "2385": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "SWAP1", + "path": "28" + }, + "2386": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "SWAP2", + "path": "28" + }, + "2387": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "ADD", + "path": "28" + }, + "2388": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4091], + "op": "ADD", + "path": "28" + }, + "2389": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4081, 4112], + "op": "MSTORE", + "path": "28" + }, + "2390": { + "op": "PUSH1", + "value": "0x1" + }, + "2392": { + "op": "PUSH1", + "value": "0x80" + }, + "2394": { + "op": "SHL" + }, + "2395": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4135, 4141], + "op": "DUP4", + "path": "28", + "statement": 28 + }, + "2396": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4135, 4161], + "op": "MOD", + "path": "28" + }, + "2397": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4129], + "op": "DUP2", + "path": "28" + }, + "2398": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4130, 4131], + "op": "PUSH1", + "path": "28", + "value": "0x2" + }, + "2400": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "DUP2", + "path": "28" + }, + "2401": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "MLOAD", + "path": "28" + }, + "2402": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "DUP2", + "path": "28" + }, + "2403": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "LT", + "path": "28" + }, + "2404": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "PUSH2", + "path": "28", + "value": "0x969" + }, + "2407": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "JUMPI", + "path": "28" + }, + "2408": { + "dev": "Index out of range", + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "INVALID", + "path": "28" + }, + "2409": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "JUMPDEST", + "path": "28" + }, + "2410": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2412": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "SWAP1", + "path": "28" + }, + "2413": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "DUP2", + "path": "28" + }, + "2414": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "MUL", + "path": "28" + }, + "2415": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "SWAP2", + "path": "28" + }, + "2416": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "SWAP1", + "path": "28" + }, + "2417": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "SWAP2", + "path": "28" + }, + "2418": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "ADD", + "path": "28" + }, + "2419": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4132], + "op": "ADD", + "path": "28" + }, + "2420": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4122, 4161], + "op": "MSTORE", + "path": "28" + }, + "2421": { + "op": "PUSH1", + "value": "0x1" + }, + "2423": { + "op": "PUSH1", + "value": "0x80" + }, + "2425": { + "op": "SHL" + }, + "2426": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4184, 4190], + "op": "DUP4", + "path": "28", + "statement": 29 + }, + "2427": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4184, 4210], + "op": "DIV", + "path": "28" + }, + "2428": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4178], + "op": "DUP2", + "path": "28" + }, + "2429": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4179, 4180], + "op": "PUSH1", + "path": "28", + "value": "0x3" + }, + "2431": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4181], + "op": "DUP2", + "path": "28" + }, + "2432": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4181], + "op": "MLOAD", + "path": "28" + }, + "2433": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4181], + "op": "DUP2", + "path": "28" + }, + "2434": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4181], + "op": "LT", + "path": "28" + }, + "2435": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4181], + "op": "PUSH2", + "path": "28", + "value": "0x988" + }, + "2438": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4181], + "op": "JUMPI", + "path": "28" + }, + "2439": { + "dev": "Index out of range", + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4181], + "op": "INVALID", + "path": "28" + }, + "2440": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4181], + "op": "JUMPDEST", + "path": "28" + }, + "2441": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4181], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2443": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4181], + "op": "MUL", + "path": "28" + }, + "2444": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4181], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2446": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4181], + "op": "ADD", + "path": "28" + }, + "2447": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4181], + "op": "ADD", + "path": "28" + }, + "2448": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4210], + "op": "DUP2", + "path": "28" + }, + "2449": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4210], + "op": "DUP2", + "path": "28" + }, + "2450": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4210], + "op": "MSTORE", + "path": "28" + }, + "2451": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4210], + "op": "POP", + "path": "28" + }, + "2452": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4171, 4210], + "op": "POP", + "path": "28" + }, + "2453": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4240], + "op": "PUSH2", + "path": "28", + "statement": 30, + "value": "0x99C" + }, + "2456": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4238], + "op": "PUSH2", + "path": "28", + "value": "0x15FC" + }, + "2459": { + "fn": "StarknetTokenBridge.consumeMessage", + "jump": "i", + "offset": [4221, 4240], + "op": "JUMP", + "path": "28" + }, + "2460": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4240], + "op": "JUMPDEST", + "path": "28" + }, + "2461": { + "op": "PUSH1", + "value": "0x1" + }, + "2463": { + "op": "PUSH1", + "value": "0x1" + }, + "2465": { + "op": "PUSH1", + "value": "0xA0" + }, + "2467": { + "op": "SHL" + }, + "2468": { + "op": "SUB" + }, + "2469": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4261], + "op": "AND", + "path": "28" + }, + "2470": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4261], + "op": "PUSH4", + "path": "28", + "value": "0x2C9DD5C0" + }, + "2475": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4262, 4279], + "op": "PUSH2", + "path": "28", + "value": "0x9B2" + }, + "2478": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4262, 4277], + "op": "PUSH2", + "path": "28", + "value": "0x11E8" + }, + "2481": { + "fn": "StarknetTokenBridge.consumeMessage", + "jump": "i", + "offset": [4262, 4279], + "op": "JUMP", + "path": "28" + }, + "2482": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4262, 4279], + "op": "JUMPDEST", + "path": "28" + }, + "2483": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4281, 4288], + "op": "DUP4", + "path": "28" + }, + "2484": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "2486": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "MLOAD", + "path": "28" + }, + "2487": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP4", + "path": "28" + }, + "2488": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH4", + "path": "28", + "value": "0xFFFFFFFF" + }, + "2493": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "AND", + "path": "28" + }, + "2494": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0xE0" + }, + "2496": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "SHL", + "path": "28" + }, + "2497": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP2", + "path": "28" + }, + "2498": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "MSTORE", + "path": "28" + }, + "2499": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "2501": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ADD", + "path": "28" + }, + "2502": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP1", + "path": "28" + }, + "2503": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP4", + "path": "28" + }, + "2504": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP2", + "path": "28" + }, + "2505": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "MSTORE", + "path": "28" + }, + "2506": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2508": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ADD", + "path": "28" + }, + "2509": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP1", + "path": "28" + }, + "2510": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2512": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ADD", + "path": "28" + }, + "2513": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP3", + "path": "28" + }, + "2514": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP2", + "path": "28" + }, + "2515": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "SUB", + "path": "28" + }, + "2516": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP3", + "path": "28" + }, + "2517": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "MSTORE", + "path": "28" + }, + "2518": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP4", + "path": "28" + }, + "2519": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP2", + "path": "28" + }, + "2520": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP2", + "path": "28" + }, + "2521": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "MLOAD", + "path": "28" + }, + "2522": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP2", + "path": "28" + }, + "2523": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "MSTORE", + "path": "28" + }, + "2524": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2526": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ADD", + "path": "28" + }, + "2527": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "SWAP2", + "path": "28" + }, + "2528": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2529": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP1", + "path": "28" + }, + "2530": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "MLOAD", + "path": "28" + }, + "2531": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "SWAP1", + "path": "28" + }, + "2532": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2534": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ADD", + "path": "28" + }, + "2535": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "SWAP1", + "path": "28" + }, + "2536": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2538": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "MUL", + "path": "28" + }, + "2539": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP1", + "path": "28" + }, + "2540": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP4", + "path": "28" + }, + "2541": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP4", + "path": "28" + }, + "2542": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "2544": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "JUMPDEST", + "path": "28" + }, + "2545": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP4", + "path": "28" + }, + "2546": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP2", + "path": "28" + }, + "2547": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "LT", + "path": "28" + }, + "2548": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ISZERO", + "path": "28" + }, + "2549": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH2", + "path": "28", + "value": "0xA08" + }, + "2552": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "JUMPI", + "path": "28" + }, + "2553": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP2", + "path": "28" + }, + "2554": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP2", + "path": "28" + }, + "2555": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ADD", + "path": "28" + }, + "2556": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "MLOAD", + "path": "28" + }, + "2557": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP4", + "path": "28" + }, + "2558": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP3", + "path": "28" + }, + "2559": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ADD", + "path": "28" + }, + "2560": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "MSTORE", + "path": "28" + }, + "2561": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2563": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ADD", + "path": "28" + }, + "2564": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH2", + "path": "28", + "value": "0x9F0" + }, + "2567": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "JUMP", + "path": "28" + }, + "2568": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "JUMPDEST", + "path": "28" + }, + "2569": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2570": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2571": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2572": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2573": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "SWAP1", + "path": "28" + }, + "2574": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2575": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ADD", + "path": "28" + }, + "2576": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "SWAP4", + "path": "28" + }, + "2577": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2578": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2579": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2580": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2581": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2583": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "2585": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "MLOAD", + "path": "28" + }, + "2586": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP1", + "path": "28" + }, + "2587": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP4", + "path": "28" + }, + "2588": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "SUB", + "path": "28" + }, + "2589": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP2", + "path": "28" + }, + "2590": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "2592": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP8", + "path": "28" + }, + "2593": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP1", + "path": "28" + }, + "2594": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "EXTCODESIZE", + "path": "28" + }, + "2595": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ISZERO", + "path": "28" + }, + "2596": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP1", + "path": "28" + }, + "2597": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ISZERO", + "path": "28" + }, + "2598": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH2", + "path": "28", + "value": "0xA2E" + }, + "2601": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "JUMPI", + "path": "28" + }, + "2602": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "2604": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP1", + "path": "28" + }, + "2605": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "REVERT", + "path": "28" + }, + "2606": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "JUMPDEST", + "path": "28" + }, + "2607": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2608": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "GAS", + "path": "28" + }, + "2609": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "CALL", + "path": "28" + }, + "2610": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ISZERO", + "path": "28" + }, + "2611": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP1", + "path": "28" + }, + "2612": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ISZERO", + "path": "28" + }, + "2613": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH2", + "path": "28", + "value": "0xA42" + }, + "2616": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "JUMPI", + "path": "28" + }, + "2617": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "RETURNDATASIZE", + "path": "28" + }, + "2618": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "2620": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP1", + "path": "28" + }, + "2621": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "RETURNDATACOPY", + "path": "28" + }, + "2622": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "RETURNDATASIZE", + "path": "28" + }, + "2623": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "2625": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "REVERT", + "path": "28" + }, + "2626": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "JUMPDEST", + "path": "28" + }, + "2627": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2628": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2629": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2630": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "POP", + "path": "28" + }, + "2631": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "2633": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "MLOAD", + "path": "28" + }, + "2634": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "RETURNDATASIZE", + "path": "28" + }, + "2635": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "2637": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP2", + "path": "28" + }, + "2638": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "LT", + "path": "28" + }, + "2639": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "ISZERO", + "path": "28" + }, + "2640": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH2", + "path": "28", + "value": "0xA58" + }, + "2643": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "JUMPI", + "path": "28" + }, + "2644": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "2646": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "DUP1", + "path": "28" + }, + "2647": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "REVERT", + "path": "28" + }, + "2648": { + "fn": "StarknetTokenBridge.consumeMessage", + "offset": [4221, 4289], + "op": "JUMPDEST", + "path": "28" + }, + "2649": { + "op": "POP" + }, + "2650": { + "op": "POP" + }, + "2651": { + "op": "POP" + }, + "2652": { + "op": "POP" + }, + "2653": { + "op": "POP" + }, + "2654": { + "fn": "StarknetTokenBridge.consumeMessage", + "jump": "o", + "offset": [3857, 4296], + "op": "JUMP", + "path": "28" + }, + "2655": { + "fn": "Addresses.performEthTransfer", + "offset": [357, 575], + "op": "JUMPDEST", + "path": "11" + }, + "2656": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "PUSH1", + "path": "11", + "value": "0x40" + }, + "2658": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "MLOAD", + "path": "11" + }, + "2659": { + "fn": "Addresses.performEthTransfer", + "offset": [440, 452], + "op": "PUSH1", + "path": "11", + "value": "0x0" + }, + "2661": { + "fn": "Addresses.performEthTransfer", + "offset": [440, 452], + "op": "SWAP1", + "path": "11" + }, + "2662": { + "op": "PUSH1", + "value": "0x1" + }, + "2664": { + "op": "PUSH1", + "value": "0x1" + }, + "2666": { + "op": "PUSH1", + "value": "0xA0" + }, + "2668": { + "op": "SHL" + }, + "2669": { + "op": "SUB" + }, + "2670": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 472], + "op": "DUP5", + "path": "11" + }, + "2671": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 472], + "op": "AND", + "path": "11" + }, + "2672": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 472], + "op": "SWAP1", + "path": "11" + }, + "2673": { + "fn": "Addresses.performEthTransfer", + "offset": [480, 486], + "op": "DUP4", + "path": "11" + }, + "2674": { + "fn": "Addresses.performEthTransfer", + "offset": [480, 486], + "op": "SWAP1", + "path": "11" + }, + "2675": { + "fn": "Addresses.performEthTransfer", + "offset": [440, 452], + "op": "DUP4", + "path": "11" + }, + "2676": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "DUP2", + "path": "11" + }, + "2677": { + "fn": "Addresses.performEthTransfer", + "offset": [440, 452], + "op": "DUP2", + "path": "11" + }, + "2678": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "DUP2", + "path": "11" + }, + "2679": { + "fn": "Addresses.performEthTransfer", + "offset": [480, 486], + "op": "DUP6", + "path": "11" + }, + "2680": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 472], + "op": "DUP8", + "path": "11" + }, + "2681": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "GAS", + "path": "11" + }, + "2682": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "CALL", + "path": "11" + }, + "2683": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "SWAP3", + "path": "11" + }, + "2684": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "POP", + "path": "11" + }, + "2685": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "POP", + "path": "11" + }, + "2686": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "POP", + "path": "11" + }, + "2687": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "RETURNDATASIZE", + "path": "11" + }, + "2688": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "DUP1", + "path": "11" + }, + "2689": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "PUSH1", + "path": "11", + "value": "0x0" + }, + "2691": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "DUP2", + "path": "11" + }, + "2692": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "EQ", + "path": "11" + }, + "2693": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "PUSH2", + "path": "11", + "value": "0xAAA" + }, + "2696": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "JUMPI", + "path": "11" + }, + "2697": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "PUSH1", + "path": "11", + "value": "0x40" + }, + "2699": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "MLOAD", + "path": "11" + }, + "2700": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "SWAP2", + "path": "11" + }, + "2701": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "POP", + "path": "11" + }, + "2702": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "PUSH1", + "path": "11", + "value": "0x1F" + }, + "2704": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "NOT", + "path": "11" + }, + "2705": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "PUSH1", + "path": "11", + "value": "0x3F" + }, + "2707": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "RETURNDATASIZE", + "path": "11" + }, + "2708": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "ADD", + "path": "11" + }, + "2709": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "AND", + "path": "11" + }, + "2710": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "DUP3", + "path": "11" + }, + "2711": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "ADD", + "path": "11" + }, + "2712": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "PUSH1", + "path": "11", + "value": "0x40" + }, + "2714": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "MSTORE", + "path": "11" + }, + "2715": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "RETURNDATASIZE", + "path": "11" + }, + "2716": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "DUP3", + "path": "11" + }, + "2717": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "MSTORE", + "path": "11" + }, + "2718": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "RETURNDATASIZE", + "path": "11" + }, + "2719": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "PUSH1", + "path": "11", + "value": "0x0" + }, + "2721": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "PUSH1", + "path": "11", + "value": "0x20" + }, + "2723": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "DUP5", + "path": "11" + }, + "2724": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "ADD", + "path": "11" + }, + "2725": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "RETURNDATACOPY", + "path": "11" + }, + "2726": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "PUSH2", + "path": "11", + "value": "0xAAF" + }, + "2729": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "JUMP", + "path": "11" + }, + "2730": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "JUMPDEST", + "path": "11" + }, + "2731": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "PUSH1", + "path": "11", + "value": "0x60" + }, + "2733": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "SWAP2", + "path": "11" + }, + "2734": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "POP", + "path": "11" + }, + "2735": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "JUMPDEST", + "path": "11" + }, + "2736": { + "fn": "Addresses.performEthTransfer", + "offset": [458, 491], + "op": "POP", + "path": "11" + }, + "2737": { + "fn": "Addresses.performEthTransfer", + "offset": [439, 491], + "op": "POP", + "path": "11" + }, + "2738": { + "fn": "Addresses.performEthTransfer", + "offset": [439, 491], + "op": "SWAP1", + "path": "11" + }, + "2739": { + "fn": "Addresses.performEthTransfer", + "offset": [439, 491], + "op": "POP", + "path": "11" + }, + "2740": { + "branch": 79, + "fn": "Addresses.performEthTransfer", + "offset": [537, 544], + "op": "DUP1", + "path": "11", + "statement": 31 + }, + "2741": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "PUSH2", + "path": "11", + "value": "0xAFB" + }, + "2744": { + "branch": 79, + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "JUMPI", + "path": "11" + }, + "2745": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "PUSH1", + "path": "11", + "value": "0x40" + }, + "2747": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "DUP1", + "path": "11" + }, + "2748": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "MLOAD", + "path": "11" + }, + "2749": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "2753": { + "op": "PUSH1", + "value": "0xE5" + }, + "2755": { + "op": "SHL" + }, + "2756": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "DUP2", + "path": "11" + }, + "2757": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "MSTORE", + "path": "11" + }, + "2758": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "PUSH1", + "path": "11", + "value": "0x20" + }, + "2760": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "PUSH1", + "path": "11", + "value": "0x4" + }, + "2762": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "DUP3", + "path": "11" + }, + "2763": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "ADD", + "path": "11" + }, + "2764": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "MSTORE", + "path": "11" + }, + "2765": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "PUSH1", + "path": "11", + "value": "0x13" + }, + "2767": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "PUSH1", + "path": "11", + "value": "0x24" + }, + "2769": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "DUP3", + "path": "11" + }, + "2770": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "ADD", + "path": "11" + }, + "2771": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "MSTORE", + "path": "11" + }, + "2772": { + "op": "PUSH19", + "value": "0x11551217D514905394D1915497D19052531151" + }, + "2792": { + "op": "PUSH1", + "value": "0x6A" + }, + "2794": { + "op": "SHL" + }, + "2795": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "PUSH1", + "path": "11", + "value": "0x44" + }, + "2797": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "DUP3", + "path": "11" + }, + "2798": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "ADD", + "path": "11" + }, + "2799": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "MSTORE", + "path": "11" + }, + "2800": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "SWAP1", + "path": "11" + }, + "2801": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "MLOAD", + "path": "11" + }, + "2802": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "SWAP1", + "path": "11" + }, + "2803": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "DUP2", + "path": "11" + }, + "2804": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "SWAP1", + "path": "11" + }, + "2805": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "SUB", + "path": "11" + }, + "2806": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "PUSH1", + "path": "11", + "value": "0x64" + }, + "2808": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "ADD", + "path": "11" + }, + "2809": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "SWAP1", + "path": "11" + }, + "2810": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "REVERT", + "path": "11" + }, + "2811": { + "fn": "Addresses.performEthTransfer", + "offset": [529, 568], + "op": "JUMPDEST", + "path": "11" + }, + "2812": { + "fn": "Addresses.performEthTransfer", + "offset": [357, 575], + "op": "POP", + "path": "11" + }, + "2813": { + "fn": "Addresses.performEthTransfer", + "offset": [357, 575], + "op": "POP", + "path": "11" + }, + "2814": { + "fn": "Addresses.performEthTransfer", + "offset": [357, 575], + "op": "POP", + "path": "11" + }, + "2815": { + "fn": "Addresses.performEthTransfer", + "jump": "o", + "offset": [357, 575], + "op": "JUMP", + "path": "11" + }, + "2816": { + "fn": "Governance.isGovernor", + "offset": [1840, 2044], + "op": "JUMPDEST", + "path": "1" + }, + "2817": { + "fn": "Governance.isGovernor", + "offset": [1914, 1918], + "op": "PUSH1", + "path": "1", + "value": "0x0" + }, + "2819": { + "fn": "Governance.isGovernor", + "offset": [1930, 1962], + "op": "DUP1", + "path": "1" + }, + "2820": { + "fn": "Governance.isGovernor", + "offset": [1965, 1984], + "op": "PUSH2", + "path": "1", + "value": "0xB0B" + }, + "2823": { + "fn": "Governance.isGovernor", + "offset": [1965, 1982], + "op": "PUSH2", + "path": "1", + "value": "0x161F" + }, + "2826": { + "fn": "Governance.isGovernor", + "jump": "i", + "offset": [1965, 1984], + "op": "JUMP", + "path": "1" + }, + "2827": { + "fn": "Governance.isGovernor", + "offset": [1965, 1984], + "op": "JUMPDEST", + "path": "1" + }, + "2828": { + "op": "PUSH1", + "value": "0x1" + }, + "2830": { + "op": "PUSH1", + "value": "0x1" + }, + "2832": { + "op": "PUSH1", + "value": "0xA0" + }, + "2834": { + "op": "SHL" + }, + "2835": { + "op": "SUB" + }, + "2836": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "SWAP4", + "path": "1", + "statement": 32 + }, + "2837": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "SWAP1", + "path": "1" + }, + "2838": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "SWAP4", + "path": "1" + }, + "2839": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "AND", + "path": "1" + }, + "2840": { + "fn": "Governance.isGovernor", + "offset": [2001, 2023], + "op": "PUSH1", + "path": "1", + "value": "0x0" + }, + "2842": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "SWAP1", + "path": "1" + }, + "2843": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "DUP2", + "path": "1" + }, + "2844": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "MSTORE", + "path": "1" + }, + "2845": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "PUSH1", + "path": "1", + "value": "0x20" + }, + "2847": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "SWAP4", + "path": "1" + }, + "2848": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "SWAP1", + "path": "1" + }, + "2849": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "SWAP4", + "path": "1" + }, + "2850": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "MSTORE", + "path": "1" + }, + "2851": { + "op": "POP" + }, + "2852": { + "op": "POP" + }, + "2853": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "PUSH1", + "path": "1", + "value": "0x40" + }, + "2855": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "SWAP1", + "path": "1" + }, + "2856": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "KECCAK256", + "path": "1" + }, + "2857": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "SLOAD", + "path": "1" + }, + "2858": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "PUSH1", + "path": "1", + "value": "0xFF" + }, + "2860": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "AND", + "path": "1" + }, + "2861": { + "fn": "Governance.isGovernor", + "offset": [2001, 2037], + "op": "SWAP1", + "path": "1" + }, + "2862": { + "fn": "Governance.isGovernor", + "jump": "o", + "offset": [1840, 2044], + "op": "JUMP", + "path": "1" + }, + "2863": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2517, 3057], + "op": "JUMPDEST", + "path": "10" + }, + "2864": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2645, 2681], + "op": "PUSH2", + "path": "10", + "statement": 33, + "value": "0xB41" + }, + "2867": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2645, 2668], + "op": "DUP4", + "path": "10" + }, + "2868": { + "op": "PUSH1", + "value": "0x1" + }, + "2870": { + "op": "PUSH1", + "value": "0x1" + }, + "2872": { + "op": "PUSH1", + "value": "0xA0" + }, + "2874": { + "op": "SHL" + }, + "2875": { + "op": "SUB" + }, + "2876": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2645, 2679], + "op": "AND", + "path": "10" + }, + "2877": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2645, 2679], + "op": "PUSH2", + "path": "10", + "value": "0x16CE" + }, + "2880": { + "fn": "ProxySupport.callExternalInitializer", + "jump": "i", + "offset": [2645, 2681], + "op": "JUMP", + "path": "10" + }, + "2881": { + "branch": 94, + "fn": "ProxySupport.callExternalInitializer", + "offset": [2645, 2681], + "op": "JUMPDEST", + "path": "10" + }, + "2882": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "PUSH2", + "path": "10", + "value": "0xB87" + }, + "2885": { + "branch": 94, + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "JUMPI", + "path": "10" + }, + "2886": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "PUSH1", + "path": "10", + "value": "0x40" + }, + "2888": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "DUP1", + "path": "10" + }, + "2889": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "MLOAD", + "path": "10" + }, + "2890": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "2894": { + "op": "PUSH1", + "value": "0xE5" + }, + "2896": { + "op": "SHL" + }, + "2897": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "DUP2", + "path": "10" + }, + "2898": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "MSTORE", + "path": "10" + }, + "2899": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "2901": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "PUSH1", + "path": "10", + "value": "0x4" + }, + "2903": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "DUP3", + "path": "10" + }, + "2904": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "ADD", + "path": "10" + }, + "2905": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "MSTORE", + "path": "10" + }, + "2906": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "PUSH1", + "path": "10", + "value": "0x12" + }, + "2908": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "PUSH1", + "path": "10", + "value": "0x24" + }, + "2910": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "DUP3", + "path": "10" + }, + "2911": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "ADD", + "path": "10" + }, + "2912": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "MSTORE", + "path": "10" + }, + "2913": { + "op": "PUSH18", + "value": "0x115250D7D393D517D057D0D3D395149050D5" + }, + "2932": { + "op": "PUSH1", + "value": "0x72" + }, + "2934": { + "op": "SHL" + }, + "2935": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "PUSH1", + "path": "10", + "value": "0x44" + }, + "2937": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "DUP3", + "path": "10" + }, + "2938": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "ADD", + "path": "10" + }, + "2939": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "MSTORE", + "path": "10" + }, + "2940": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "SWAP1", + "path": "10" + }, + "2941": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "MLOAD", + "path": "10" + }, + "2942": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "SWAP1", + "path": "10" + }, + "2943": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "DUP2", + "path": "10" + }, + "2944": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "SWAP1", + "path": "10" + }, + "2945": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "SUB", + "path": "10" + }, + "2946": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "PUSH1", + "path": "10", + "value": "0x64" + }, + "2948": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "ADD", + "path": "10" + }, + "2949": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "SWAP1", + "path": "10" + }, + "2950": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "REVERT", + "path": "10" + }, + "2951": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2637, 2704], + "op": "JUMPDEST", + "path": "10" + }, + "2952": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2785, 2797], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "2954": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2799, 2822], + "op": "PUSH1", + "path": "10", + "value": "0x60" + }, + "2956": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2849], + "op": "DUP5", + "path": "10" + }, + "2957": { + "op": "PUSH1", + "value": "0x1" + }, + "2959": { + "op": "PUSH1", + "value": "0x1" + }, + "2961": { + "op": "PUSH1", + "value": "0xA0" + }, + "2963": { + "op": "SHL" + }, + "2964": { + "op": "SUB" + }, + "2965": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2862], + "op": "AND", + "path": "10" + }, + "2966": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2899, 2923], + "op": "PUSH4", + "path": "10", + "value": "0x439FAB91" + }, + "2971": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2899, 2923], + "op": "PUSH1", + "path": "10", + "value": "0xE0" + }, + "2973": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2899, 2923], + "op": "SHL", + "path": "10" + }, + "2974": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2925, 2932], + "op": "DUP6", + "path": "10" + }, + "2975": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2925, 2932], + "op": "DUP6", + "path": "10" + }, + "2976": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "PUSH1", + "path": "10", + "value": "0x40" + }, + "2978": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "MLOAD", + "path": "10" + }, + "2979": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "PUSH1", + "path": "10", + "value": "0x24" + }, + "2981": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "ADD", + "path": "10" + }, + "2982": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP1", + "path": "10" + }, + "2983": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP1", + "path": "10" + }, + "2984": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "2986": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "ADD", + "path": "10" + }, + "2987": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP3", + "path": "10" + }, + "2988": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP2", + "path": "10" + }, + "2989": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SUB", + "path": "10" + }, + "2990": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP3", + "path": "10" + }, + "2991": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "MSTORE", + "path": "10" + }, + "2992": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP5", + "path": "10" + }, + "2993": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP5", + "path": "10" + }, + "2994": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP3", + "path": "10" + }, + "2995": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP2", + "path": "10" + }, + "2996": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP2", + "path": "10" + }, + "2997": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "MSTORE", + "path": "10" + }, + "2998": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3000": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "ADD", + "path": "10" + }, + "3001": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP3", + "path": "10" + }, + "3002": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "POP", + "path": "10" + }, + "3003": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP1", + "path": "10" + }, + "3004": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP3", + "path": "10" + }, + "3005": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP5", + "path": "10" + }, + "3006": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "CALLDATACOPY", + "path": "10" + }, + "3007": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "3009": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP4", + "path": "10" + }, + "3010": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP3", + "path": "10" + }, + "3011": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "ADD", + "path": "10" + }, + "3012": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "MSTORE", + "path": "10" + }, + "3013": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "PUSH1", + "path": "10", + "value": "0x40" + }, + "3015": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP1", + "path": "10" + }, + "3016": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "MLOAD", + "path": "10" + }, + "3017": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "PUSH1", + "path": "10", + "value": "0x1F" + }, + "3019": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP1", + "path": "10" + }, + "3020": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP3", + "path": "10" + }, + "3021": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "ADD", + "path": "10" + }, + "3022": { + "op": "PUSH1", + "value": "0x1F" + }, + "3024": { + "op": "NOT" + }, + "3025": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP1", + "path": "10" + }, + "3026": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP2", + "path": "10" + }, + "3027": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "AND", + "path": "10" + }, + "3028": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP1", + "path": "10" + }, + "3029": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP5", + "path": "10" + }, + "3030": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "ADD", + "path": "10" + }, + "3031": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP3", + "path": "10" + }, + "3032": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP2", + "path": "10" + }, + "3033": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SUB", + "path": "10" + }, + "3034": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP1", + "path": "10" + }, + "3035": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP5", + "path": "10" + }, + "3036": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "ADD", + "path": "10" + }, + "3037": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP3", + "path": "10" + }, + "3038": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "MSTORE", + "path": "10" + }, + "3039": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP3", + "path": "10" + }, + "3040": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP4", + "path": "10" + }, + "3041": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "MSTORE", + "path": "10" + }, + "3042": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3044": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP2", + "path": "10" + }, + "3045": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "ADD", + "path": "10" + }, + "3046": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP1", + "path": "10" + }, + "3047": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "MLOAD", + "path": "10" + }, + "3048": { + "op": "PUSH1", + "value": "0x1" + }, + "3050": { + "op": "PUSH1", + "value": "0x1" + }, + "3052": { + "op": "PUSH1", + "value": "0xE0" + }, + "3054": { + "op": "SHL" + }, + "3055": { + "op": "SUB" + }, + "3056": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "AND", + "path": "10" + }, + "3057": { + "op": "PUSH1", + "value": "0x1" + }, + "3059": { + "op": "PUSH1", + "value": "0x1" + }, + "3061": { + "op": "PUSH1", + "value": "0xE0" + }, + "3063": { + "op": "SHL" + }, + "3064": { + "op": "SUB" + }, + "3065": { + "op": "NOT" + }, + "3066": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP1", + "path": "10" + }, + "3067": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP10", + "path": "10" + }, + "3068": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "AND", + "path": "10" + }, + "3069": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP9", + "path": "10" + }, + "3070": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP1", + "path": "10" + }, + "3071": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP9", + "path": "10" + }, + "3072": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "OR", + "path": "10" + }, + "3073": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP9", + "path": "10" + }, + "3074": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "MSTORE", + "path": "10" + }, + "3075": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP2", + "path": "10" + }, + "3076": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "MLOAD", + "path": "10" + }, + "3077": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP3", + "path": "10" + }, + "3078": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "MLOAD", + "path": "10" + }, + "3079": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP3", + "path": "10" + }, + "3080": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP8", + "path": "10" + }, + "3081": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP1", + "path": "10" + }, + "3082": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP7", + "path": "10" + }, + "3083": { + "op": "POP" + }, + "3084": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP7", + "path": "10" + }, + "3085": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP6", + "path": "10" + }, + "3086": { + "op": "POP" + }, + "3087": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "SWAP4", + "path": "10" + }, + "3088": { + "op": "POP" + }, + "3089": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP1", + "path": "10" + }, + "3090": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP2", + "path": "10" + }, + "3091": { + "op": "POP" + }, + "3092": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP2", + "path": "10" + }, + "3093": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP1", + "path": "10" + }, + "3094": { + "op": "POP" + }, + "3095": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP4", + "path": "10" + }, + "3096": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2876, 2933], + "op": "DUP4", + "path": "10" + }, + "3097": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "JUMPDEST", + "path": "10" + }, + "3098": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3100": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP4", + "path": "10" + }, + "3101": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "LT", + "path": "10" + }, + "3102": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH2", + "path": "10", + "value": "0xC38" + }, + "3105": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "JUMPI", + "path": "10" + }, + "3106": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP1", + "path": "10" + }, + "3107": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "MLOAD", + "path": "10" + }, + "3108": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP3", + "path": "10" + }, + "3109": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "MSTORE", + "path": "10" + }, + "3110": { + "op": "PUSH1", + "value": "0x1F" + }, + "3112": { + "op": "NOT" + }, + "3113": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP1", + "path": "10" + }, + "3114": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP3", + "path": "10" + }, + "3115": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "ADD", + "path": "10" + }, + "3116": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP2", + "path": "10" + }, + "3117": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3119": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP2", + "path": "10" + }, + "3120": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP3", + "path": "10" + }, + "3121": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "ADD", + "path": "10" + }, + "3122": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP2", + "path": "10" + }, + "3123": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "ADD", + "path": "10" + }, + "3124": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH2", + "path": "10", + "value": "0xC19" + }, + "3127": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "JUMP", + "path": "10" + }, + "3128": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "JUMPDEST", + "path": "10" + }, + "3129": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH1", + "path": "10", + "value": "0x1" + }, + "3131": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP4", + "path": "10" + }, + "3132": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3134": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SUB", + "path": "10" + }, + "3135": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH2", + "path": "10", + "value": "0x100" + }, + "3138": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "EXP", + "path": "10" + }, + "3139": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SUB", + "path": "10" + }, + "3140": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP1", + "path": "10" + }, + "3141": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "NOT", + "path": "10" + }, + "3142": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP3", + "path": "10" + }, + "3143": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "MLOAD", + "path": "10" + }, + "3144": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "AND", + "path": "10" + }, + "3145": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP2", + "path": "10" + }, + "3146": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP5", + "path": "10" + }, + "3147": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "MLOAD", + "path": "10" + }, + "3148": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "AND", + "path": "10" + }, + "3149": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP1", + "path": "10" + }, + "3150": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP3", + "path": "10" + }, + "3151": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "OR", + "path": "10" + }, + "3152": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP6", + "path": "10" + }, + "3153": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "MSTORE", + "path": "10" + }, + "3154": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "POP", + "path": "10" + }, + "3155": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "POP", + "path": "10" + }, + "3156": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "POP", + "path": "10" + }, + "3157": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "POP", + "path": "10" + }, + "3158": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "POP", + "path": "10" + }, + "3159": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "POP", + "path": "10" + }, + "3160": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP1", + "path": "10" + }, + "3161": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "POP", + "path": "10" + }, + "3162": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "ADD", + "path": "10" + }, + "3163": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP2", + "path": "10" + }, + "3164": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "POP", + "path": "10" + }, + "3165": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "POP", + "path": "10" + }, + "3166": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "3168": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH1", + "path": "10", + "value": "0x40" + }, + "3170": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "MLOAD", + "path": "10" + }, + "3171": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP1", + "path": "10" + }, + "3172": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP4", + "path": "10" + }, + "3173": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SUB", + "path": "10" + }, + "3174": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP2", + "path": "10" + }, + "3175": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP6", + "path": "10" + }, + "3176": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "GAS", + "path": "10" + }, + "3177": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DELEGATECALL", + "path": "10" + }, + "3178": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP2", + "path": "10" + }, + "3179": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "POP", + "path": "10" + }, + "3180": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "POP", + "path": "10" + }, + "3181": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "RETURNDATASIZE", + "path": "10" + }, + "3182": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP1", + "path": "10" + }, + "3183": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "3185": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP2", + "path": "10" + }, + "3186": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "EQ", + "path": "10" + }, + "3187": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH2", + "path": "10", + "value": "0xC98" + }, + "3190": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "JUMPI", + "path": "10" + }, + "3191": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH1", + "path": "10", + "value": "0x40" + }, + "3193": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "MLOAD", + "path": "10" + }, + "3194": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP2", + "path": "10" + }, + "3195": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "POP", + "path": "10" + }, + "3196": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH1", + "path": "10", + "value": "0x1F" + }, + "3198": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "NOT", + "path": "10" + }, + "3199": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH1", + "path": "10", + "value": "0x3F" + }, + "3201": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "RETURNDATASIZE", + "path": "10" + }, + "3202": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "ADD", + "path": "10" + }, + "3203": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "AND", + "path": "10" + }, + "3204": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP3", + "path": "10" + }, + "3205": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "ADD", + "path": "10" + }, + "3206": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH1", + "path": "10", + "value": "0x40" + }, + "3208": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "MSTORE", + "path": "10" + }, + "3209": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "RETURNDATASIZE", + "path": "10" + }, + "3210": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP3", + "path": "10" + }, + "3211": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "MSTORE", + "path": "10" + }, + "3212": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "RETURNDATASIZE", + "path": "10" + }, + "3213": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "3215": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3217": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "DUP5", + "path": "10" + }, + "3218": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "ADD", + "path": "10" + }, + "3219": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "RETURNDATACOPY", + "path": "10" + }, + "3220": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH2", + "path": "10", + "value": "0xC9D" + }, + "3223": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "JUMP", + "path": "10" + }, + "3224": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "JUMPDEST", + "path": "10" + }, + "3225": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "PUSH1", + "path": "10", + "value": "0x60" + }, + "3227": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "SWAP2", + "path": "10" + }, + "3228": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "POP", + "path": "10" + }, + "3229": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "JUMPDEST", + "path": "10" + }, + "3230": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2826, 2943], + "op": "POP", + "path": "10" + }, + "3231": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2784, 2943], + "op": "SWAP2", + "path": "10" + }, + "3232": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2784, 2943], + "op": "POP", + "path": "10" + }, + "3233": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2784, 2943], + "op": "SWAP2", + "path": "10" + }, + "3234": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2784, 2943], + "op": "POP", + "path": "10" + }, + "3235": { + "branch": 95, + "fn": "ProxySupport.callExternalInitializer", + "offset": [2961, 2968], + "op": "DUP2", + "path": "10", + "statement": 34 + }, + "3236": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2977, 2987], + "op": "DUP2", + "path": "10" + }, + "3237": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SWAP1", + "path": "10" + }, + "3238": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH2", + "path": "10", + "value": "0xD2D" + }, + "3241": { + "branch": 95, + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "JUMPI", + "path": "10" + }, + "3242": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH1", + "path": "10", + "value": "0x40" + }, + "3244": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "MLOAD", + "path": "10" + }, + "3245": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "3249": { + "op": "PUSH1", + "value": "0xE5" + }, + "3251": { + "op": "SHL" + }, + "3252": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP2", + "path": "10" + }, + "3253": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "MSTORE", + "path": "10" + }, + "3254": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH1", + "path": "10", + "value": "0x4" + }, + "3256": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "ADD", + "path": "10" + }, + "3257": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP1", + "path": "10" + }, + "3258": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP1", + "path": "10" + }, + "3259": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3261": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "ADD", + "path": "10" + }, + "3262": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP3", + "path": "10" + }, + "3263": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP2", + "path": "10" + }, + "3264": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SUB", + "path": "10" + }, + "3265": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP3", + "path": "10" + }, + "3266": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "MSTORE", + "path": "10" + }, + "3267": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP4", + "path": "10" + }, + "3268": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP2", + "path": "10" + }, + "3269": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP2", + "path": "10" + }, + "3270": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "MLOAD", + "path": "10" + }, + "3271": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP2", + "path": "10" + }, + "3272": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "MSTORE", + "path": "10" + }, + "3273": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3275": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "ADD", + "path": "10" + }, + "3276": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SWAP2", + "path": "10" + }, + "3277": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "POP", + "path": "10" + }, + "3278": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP1", + "path": "10" + }, + "3279": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "MLOAD", + "path": "10" + }, + "3280": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SWAP1", + "path": "10" + }, + "3281": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3283": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "ADD", + "path": "10" + }, + "3284": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SWAP1", + "path": "10" + }, + "3285": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP1", + "path": "10" + }, + "3286": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP4", + "path": "10" + }, + "3287": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP4", + "path": "10" + }, + "3288": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "3290": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "JUMPDEST", + "path": "10" + }, + "3291": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP4", + "path": "10" + }, + "3292": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP2", + "path": "10" + }, + "3293": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "LT", + "path": "10" + }, + "3294": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "ISZERO", + "path": "10" + }, + "3295": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH2", + "path": "10", + "value": "0xCF2" + }, + "3298": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "JUMPI", + "path": "10" + }, + "3299": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP2", + "path": "10" + }, + "3300": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP2", + "path": "10" + }, + "3301": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "ADD", + "path": "10" + }, + "3302": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "MLOAD", + "path": "10" + }, + "3303": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP4", + "path": "10" + }, + "3304": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP3", + "path": "10" + }, + "3305": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "ADD", + "path": "10" + }, + "3306": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "MSTORE", + "path": "10" + }, + "3307": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3309": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "ADD", + "path": "10" + }, + "3310": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH2", + "path": "10", + "value": "0xCDA" + }, + "3313": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "JUMP", + "path": "10" + }, + "3314": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "JUMPDEST", + "path": "10" + }, + "3315": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "POP", + "path": "10" + }, + "3316": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "POP", + "path": "10" + }, + "3317": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "POP", + "path": "10" + }, + "3318": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "POP", + "path": "10" + }, + "3319": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SWAP1", + "path": "10" + }, + "3320": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "POP", + "path": "10" + }, + "3321": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SWAP1", + "path": "10" + }, + "3322": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP2", + "path": "10" + }, + "3323": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "ADD", + "path": "10" + }, + "3324": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SWAP1", + "path": "10" + }, + "3325": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH1", + "path": "10", + "value": "0x1F" + }, + "3327": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "AND", + "path": "10" + }, + "3328": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP1", + "path": "10" + }, + "3329": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "ISZERO", + "path": "10" + }, + "3330": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH2", + "path": "10", + "value": "0xD1F" + }, + "3333": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "JUMPI", + "path": "10" + }, + "3334": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP1", + "path": "10" + }, + "3335": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP3", + "path": "10" + }, + "3336": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SUB", + "path": "10" + }, + "3337": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP1", + "path": "10" + }, + "3338": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "MLOAD", + "path": "10" + }, + "3339": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH1", + "path": "10", + "value": "0x1" + }, + "3341": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP4", + "path": "10" + }, + "3342": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3344": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SUB", + "path": "10" + }, + "3345": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH2", + "path": "10", + "value": "0x100" + }, + "3348": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "EXP", + "path": "10" + }, + "3349": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SUB", + "path": "10" + }, + "3350": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "NOT", + "path": "10" + }, + "3351": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "AND", + "path": "10" + }, + "3352": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP2", + "path": "10" + }, + "3353": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "MSTORE", + "path": "10" + }, + "3354": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3356": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "ADD", + "path": "10" + }, + "3357": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SWAP2", + "path": "10" + }, + "3358": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "POP", + "path": "10" + }, + "3359": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "JUMPDEST", + "path": "10" + }, + "3360": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "POP", + "path": "10" + }, + "3361": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SWAP3", + "path": "10" + }, + "3362": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "POP", + "path": "10" + }, + "3363": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "POP", + "path": "10" + }, + "3364": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "POP", + "path": "10" + }, + "3365": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "PUSH1", + "path": "10", + "value": "0x40" + }, + "3367": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "MLOAD", + "path": "10" + }, + "3368": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "DUP1", + "path": "10" + }, + "3369": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SWAP2", + "path": "10" + }, + "3370": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SUB", + "path": "10" + }, + "3371": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "SWAP1", + "path": "10" + }, + "3372": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "REVERT", + "path": "10" + }, + "3373": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2953, 2989], + "op": "JUMPDEST", + "path": "10" + }, + "3374": { + "op": "POP" + }, + "3375": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [3007, 3024], + "op": "DUP1", + "path": "10", + "statement": 35 + }, + "3376": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [3007, 3024], + "op": "MLOAD", + "path": "10" + }, + "3377": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [3007, 3017], + "op": "DUP2", + "path": "10" + }, + "3378": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [3007, 3017], + "op": "SWAP1", + "path": "10" + }, + "3379": { + "branch": 96, + "fn": "ProxySupport.callExternalInitializer", + "offset": [3007, 3029], + "op": "ISZERO", + "path": "10" + }, + "3380": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "PUSH2", + "path": "10", + "value": "0xD7E" + }, + "3383": { + "branch": 96, + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "JUMPI", + "path": "10" + }, + "3384": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "PUSH1", + "path": "10", + "value": "0x40" + }, + "3386": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "MLOAD", + "path": "10" + }, + "3387": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "3391": { + "op": "PUSH1", + "value": "0xE5" + }, + "3393": { + "op": "SHL" + }, + "3394": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP2", + "path": "10" + }, + "3395": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "MSTORE", + "path": "10" + }, + "3396": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3398": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "PUSH1", + "path": "10", + "value": "0x4" + }, + "3400": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP3", + "path": "10" + }, + "3401": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "ADD", + "path": "10" + }, + "3402": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP2", + "path": "10" + }, + "3403": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP2", + "path": "10" + }, + "3404": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "MSTORE", + "path": "10" + }, + "3405": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP4", + "path": "10" + }, + "3406": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "MLOAD", + "path": "10" + }, + "3407": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "PUSH1", + "path": "10", + "value": "0x24" + }, + "3409": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP5", + "path": "10" + }, + "3410": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "ADD", + "path": "10" + }, + "3411": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "MSTORE", + "path": "10" + }, + "3412": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP4", + "path": "10" + }, + "3413": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "MLOAD", + "path": "10" + }, + "3414": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "SWAP1", + "path": "10" + }, + "3415": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "SWAP3", + "path": "10" + }, + "3416": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP4", + "path": "10" + }, + "3417": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "SWAP3", + "path": "10" + }, + "3418": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "PUSH1", + "path": "10", + "value": "0x44" + }, + "3420": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "SWAP1", + "path": "10" + }, + "3421": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "SWAP2", + "path": "10" + }, + "3422": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "ADD", + "path": "10" + }, + "3423": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "SWAP2", + "path": "10" + }, + "3424": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "SWAP1", + "path": "10" + }, + "3425": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP6", + "path": "10" + }, + "3426": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "ADD", + "path": "10" + }, + "3427": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "SWAP1", + "path": "10" + }, + "3428": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP1", + "path": "10" + }, + "3429": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP4", + "path": "10" + }, + "3430": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP4", + "path": "10" + }, + "3431": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "PUSH1", + "path": "10", + "value": "0x0" + }, + "3433": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP4", + "path": "10" + }, + "3434": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "ISZERO", + "path": "10" + }, + "3435": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "PUSH2", + "path": "10", + "value": "0xCF2" + }, + "3438": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "JUMPI", + "path": "10" + }, + "3439": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP2", + "path": "10" + }, + "3440": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP2", + "path": "10" + }, + "3441": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "ADD", + "path": "10" + }, + "3442": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "MLOAD", + "path": "10" + }, + "3443": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP4", + "path": "10" + }, + "3444": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "DUP3", + "path": "10" + }, + "3445": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "ADD", + "path": "10" + }, + "3446": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "MSTORE", + "path": "10" + }, + "3447": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "PUSH1", + "path": "10", + "value": "0x20" + }, + "3449": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "ADD", + "path": "10" + }, + "3450": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "PUSH2", + "path": "10", + "value": "0xCDA" + }, + "3453": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "JUMP", + "path": "10" + }, + "3454": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "JUMPDEST", + "path": "10" + }, + "3455": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2999, 3050], + "op": "POP", + "path": "10" + }, + "3456": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2517, 3057], + "op": "POP", + "path": "10" + }, + "3457": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2517, 3057], + "op": "POP", + "path": "10" + }, + "3458": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2517, 3057], + "op": "POP", + "path": "10" + }, + "3459": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2517, 3057], + "op": "POP", + "path": "10" + }, + "3460": { + "fn": "ProxySupport.callExternalInitializer", + "offset": [2517, 3057], + "op": "POP", + "path": "10" + }, + "3461": { + "fn": "ProxySupport.callExternalInitializer", + "jump": "o", + "offset": [2517, 3057], + "op": "JUMP", + "path": "10" + }, + "3462": { + "fn": "StarknetTokenBridge.isInitialized", + "offset": [971, 1102], + "op": "JUMPDEST", + "path": "28" + }, + "3463": { + "fn": "StarknetTokenBridge.isInitialized", + "offset": [1028, 1032], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "3465": { + "fn": "StarknetTokenBridge.isInitialized", + "offset": [1028, 1032], + "op": "DUP1", + "path": "28" + }, + "3466": { + "fn": "StarknetTokenBridge.isInitialized", + "offset": [1051, 1070], + "op": "PUSH2", + "path": "28", + "statement": 36, + "value": "0xD91" + }, + "3469": { + "fn": "StarknetTokenBridge.isInitialized", + "offset": [1051, 1068], + "op": "PUSH2", + "path": "28", + "value": "0x15FC" + }, + "3472": { + "fn": "StarknetTokenBridge.isInitialized", + "jump": "i", + "offset": [1051, 1070], + "op": "JUMP", + "path": "28" + }, + "3473": { + "fn": "StarknetTokenBridge.isInitialized", + "offset": [1051, 1070], + "op": "JUMPDEST", + "path": "28" + }, + "3474": { + "op": "PUSH1", + "value": "0x1" + }, + "3476": { + "op": "PUSH1", + "value": "0x1" + }, + "3478": { + "op": "PUSH1", + "value": "0xA0" + }, + "3480": { + "op": "SHL" + }, + "3481": { + "op": "SUB" + }, + "3482": { + "fn": "StarknetTokenBridge.isInitialized", + "offset": [1051, 1095], + "op": "AND", + "path": "28" + }, + "3483": { + "fn": "StarknetTokenBridge.isInitialized", + "offset": [1051, 1095], + "op": "EQ", + "path": "28" + }, + "3484": { + "fn": "StarknetTokenBridge.isInitialized", + "offset": [1051, 1095], + "op": "ISZERO", + "path": "28" + }, + "3485": { + "fn": "StarknetTokenBridge.isInitialized", + "offset": [1044, 1095], + "op": "SWAP1", + "path": "28" + }, + "3486": { + "fn": "StarknetTokenBridge.isInitialized", + "offset": [1044, 1095], + "op": "POP", + "path": "28" + }, + "3487": { + "fn": "StarknetTokenBridge.isInitialized", + "offset": [971, 1102], + "op": "SWAP1", + "path": "28" + }, + "3488": { + "fn": "StarknetTokenBridge.isInitialized", + "jump": "o", + "offset": [971, 1102], + "op": "JUMP", + "path": "28" + }, + "3489": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1209, 1343], + "op": "JUMPDEST", + "path": "28" + }, + "3490": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1312, 1314], + "op": "PUSH1", + "path": "28", + "statement": 37, + "value": "0x40" + }, + "3492": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1297, 1314], + "op": "DUP2", + "path": "28" + }, + "3493": { + "branch": 97, + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1297, 1314], + "op": "EQ", + "path": "28" + }, + "3494": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "PUSH2", + "path": "28", + "value": "0x39B" + }, + "3497": { + "branch": 97, + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "JUMPI", + "path": "28" + }, + "3498": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "3500": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "DUP1", + "path": "28" + }, + "3501": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "MLOAD", + "path": "28" + }, + "3502": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "3506": { + "op": "PUSH1", + "value": "0xE5" + }, + "3508": { + "op": "SHL" + }, + "3509": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "DUP2", + "path": "28" + }, + "3510": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "MSTORE", + "path": "28" + }, + "3511": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "3513": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "3515": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "DUP3", + "path": "28" + }, + "3516": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "ADD", + "path": "28" + }, + "3517": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "MSTORE", + "path": "28" + }, + "3518": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "PUSH1", + "path": "28", + "value": "0x11" + }, + "3520": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "PUSH1", + "path": "28", + "value": "0x24" + }, + "3522": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "DUP3", + "path": "28" + }, + "3523": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "ADD", + "path": "28" + }, + "3524": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "MSTORE", + "path": "28" + }, + "3525": { + "op": "PUSH17", + "value": "0x494C4C4547414C5F444154415F53495A45" + }, + "3543": { + "op": "PUSH1", + "value": "0x78" + }, + "3545": { + "op": "SHL" + }, + "3546": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "PUSH1", + "path": "28", + "value": "0x44" + }, + "3548": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "DUP3", + "path": "28" + }, + "3549": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "ADD", + "path": "28" + }, + "3550": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "MSTORE", + "path": "28" + }, + "3551": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "SWAP1", + "path": "28" + }, + "3552": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "MLOAD", + "path": "28" + }, + "3553": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "SWAP1", + "path": "28" + }, + "3554": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "DUP2", + "path": "28" + }, + "3555": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "SWAP1", + "path": "28" + }, + "3556": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "SUB", + "path": "28" + }, + "3557": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "PUSH1", + "path": "28", + "value": "0x64" + }, + "3559": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "ADD", + "path": "28" + }, + "3560": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "SWAP1", + "path": "28" + }, + "3561": { + "fn": "StarknetTokenBridge.validateInitData", + "offset": [1289, 1336], + "op": "REVERT", + "path": "28" + }, + "3562": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1605, 1924], + "op": "JUMPDEST", + "path": "28" + }, + "3563": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1688, 1709], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "3565": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1711, 1748], + "op": "DUP1", + "path": "28" + }, + "3566": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1776, 1780], + "op": "DUP4", + "path": "28" + }, + "3567": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1776, 1780], + "op": "DUP4", + "path": "28" + }, + "3568": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "3570": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "DUP2", + "path": "28" + }, + "3571": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "LT", + "path": "28" + }, + "3572": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "ISZERO", + "path": "28" + }, + "3573": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "PUSH2", + "path": "28", + "value": "0xDFD" + }, + "3576": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "JUMPI", + "path": "28" + }, + "3577": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "3579": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "DUP1", + "path": "28" + }, + "3580": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "REVERT", + "path": "28" + }, + "3581": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "JUMPDEST", + "path": "28" + }, + "3582": { + "op": "POP" + }, + "3583": { + "op": "PUSH1", + "value": "0x1" + }, + "3585": { + "op": "PUSH1", + "value": "0x1" + }, + "3587": { + "op": "PUSH1", + "value": "0xA0" + }, + "3589": { + "op": "SHL" + }, + "3590": { + "op": "SUB" + }, + "3591": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "DUP2", + "path": "28" + }, + "3592": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "CALLDATALOAD", + "path": "28" + }, + "3593": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "DUP2", + "path": "28" + }, + "3594": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "AND", + "path": "28" + }, + "3595": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "SWAP4", + "path": "28" + }, + "3596": { + "op": "POP" + }, + "3597": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "3599": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "SWAP1", + "path": "28" + }, + "3600": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "SWAP2", + "path": "28" + }, + "3601": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "ADD", + "path": "28" + }, + "3602": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "CALLDATALOAD", + "path": "28" + }, + "3603": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "AND", + "path": "28" + }, + "3604": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "SWAP1", + "path": "28" + }, + "3605": { + "op": "POP" + }, + "3606": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1843, 1870], + "op": "PUSH2", + "path": "28", + "statement": 38, + "value": "0xE1E" + }, + "3609": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1752, 1833], + "op": "DUP3", + "path": "28" + }, + "3610": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1843, 1855], + "op": "PUSH2", + "path": "28", + "value": "0x16D4" + }, + "3613": { + "fn": "StarknetTokenBridge.initializeContractState", + "jump": "i", + "offset": [1843, 1870], + "op": "JUMP", + "path": "28" + }, + "3614": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1843, 1870], + "op": "JUMPDEST", + "path": "28" + }, + "3615": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1880, 1917], + "op": "PUSH2", + "path": "28", + "statement": 39, + "value": "0xE27" + }, + "3618": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1898, 1916], + "op": "DUP2", + "path": "28" + }, + "3619": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1880, 1897], + "op": "PUSH2", + "path": "28", + "value": "0x16F6" + }, + "3622": { + "fn": "StarknetTokenBridge.initializeContractState", + "jump": "i", + "offset": [1880, 1917], + "op": "JUMP", + "path": "28" + }, + "3623": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1880, 1917], + "op": "JUMPDEST", + "path": "28" + }, + "3624": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1605, 1924], + "op": "POP", + "path": "28" + }, + "3625": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1605, 1924], + "op": "POP", + "path": "28" + }, + "3626": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1605, 1924], + "op": "POP", + "path": "28" + }, + "3627": { + "fn": "StarknetTokenBridge.initializeContractState", + "offset": [1605, 1924], + "op": "POP", + "path": "28" + }, + "3628": { + "fn": "StarknetTokenBridge.initializeContractState", + "jump": "o", + "offset": [1605, 1924], + "op": "JUMP", + "path": "28" + }, + "3629": { + "fn": "Governance.initGovernance", + "offset": [1529, 1834], + "op": "JUMPDEST", + "path": "1" + }, + "3630": { + "fn": "Governance.initGovernance", + "offset": [1574, 1606], + "op": "PUSH1", + "path": "1", + "value": "0x0" + }, + "3632": { + "fn": "Governance.initGovernance", + "offset": [1609, 1628], + "op": "PUSH2", + "path": "1", + "value": "0xE37" + }, + "3635": { + "fn": "Governance.initGovernance", + "offset": [1609, 1626], + "op": "PUSH2", + "path": "1", + "value": "0x161F" + }, + "3638": { + "fn": "Governance.initGovernance", + "jump": "i", + "offset": [1609, 1628], + "op": "JUMP", + "path": "1" + }, + "3639": { + "fn": "Governance.initGovernance", + "offset": [1609, 1628], + "op": "JUMPDEST", + "path": "1" + }, + "3640": { + "fn": "Governance.initGovernance", + "offset": [1647, 1662], + "op": "PUSH1", + "path": "1", + "statement": 40, + "value": "0x1" + }, + "3642": { + "fn": "Governance.initGovernance", + "offset": [1647, 1662], + "op": "DUP2", + "path": "1" + }, + "3643": { + "fn": "Governance.initGovernance", + "offset": [1647, 1662], + "op": "ADD", + "path": "1" + }, + "3644": { + "fn": "Governance.initGovernance", + "offset": [1647, 1662], + "op": "SLOAD", + "path": "1" + }, + "3645": { + "fn": "Governance.initGovernance", + "offset": [1647, 1662], + "op": "SWAP1", + "path": "1" + }, + "3646": { + "fn": "Governance.initGovernance", + "offset": [1647, 1662], + "op": "SWAP2", + "path": "1" + }, + "3647": { + "op": "POP" + }, + "3648": { + "op": "PUSH1", + "value": "0x1" + }, + "3650": { + "op": "PUSH1", + "value": "0xA0" + }, + "3652": { + "op": "SHL" + }, + "3653": { + "fn": "Governance.initGovernance", + "offset": [1647, 1662], + "op": "SWAP1", + "path": "1" + }, + "3654": { + "fn": "Governance.initGovernance", + "offset": [1647, 1662], + "op": "DIV", + "path": "1" + }, + "3655": { + "fn": "Governance.initGovernance", + "offset": [1647, 1662], + "op": "PUSH1", + "path": "1", + "value": "0xFF" + }, + "3657": { + "fn": "Governance.initGovernance", + "offset": [1647, 1662], + "op": "AND", + "path": "1" + }, + "3658": { + "branch": 81, + "fn": "Governance.initGovernance", + "offset": [1646, 1662], + "op": "ISZERO", + "path": "1" + }, + "3659": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "PUSH2", + "path": "1", + "value": "0xE91" + }, + "3662": { + "branch": 81, + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "JUMPI", + "path": "1" + }, + "3663": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "PUSH1", + "path": "1", + "value": "0x40" + }, + "3665": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "DUP1", + "path": "1" + }, + "3666": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "MLOAD", + "path": "1" + }, + "3667": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "3671": { + "op": "PUSH1", + "value": "0xE5" + }, + "3673": { + "op": "SHL" + }, + "3674": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "DUP2", + "path": "1" + }, + "3675": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "MSTORE", + "path": "1" + }, + "3676": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "PUSH1", + "path": "1", + "value": "0x20" + }, + "3678": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "PUSH1", + "path": "1", + "value": "0x4" + }, + "3680": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "DUP3", + "path": "1" + }, + "3681": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "ADD", + "path": "1" + }, + "3682": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "MSTORE", + "path": "1" + }, + "3683": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "PUSH1", + "path": "1", + "value": "0x13" + }, + "3685": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "PUSH1", + "path": "1", + "value": "0x24" + }, + "3687": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "DUP3", + "path": "1" + }, + "3688": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "ADD", + "path": "1" + }, + "3689": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "MSTORE", + "path": "1" + }, + "3690": { + "op": "PUSH19", + "value": "0x1053149150511657D253925512505312569151" + }, + "3710": { + "op": "PUSH1", + "value": "0x6A" + }, + "3712": { + "op": "SHL" + }, + "3713": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "PUSH1", + "path": "1", + "value": "0x44" + }, + "3715": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "DUP3", + "path": "1" + }, + "3716": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "ADD", + "path": "1" + }, + "3717": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "MSTORE", + "path": "1" + }, + "3718": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "SWAP1", + "path": "1" + }, + "3719": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "MLOAD", + "path": "1" + }, + "3720": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "SWAP1", + "path": "1" + }, + "3721": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "DUP2", + "path": "1" + }, + "3722": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "SWAP1", + "path": "1" + }, + "3723": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "SUB", + "path": "1" + }, + "3724": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "PUSH1", + "path": "1", + "value": "0x64" + }, + "3726": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "ADD", + "path": "1" + }, + "3727": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "SWAP1", + "path": "1" + }, + "3728": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "REVERT", + "path": "1" + }, + "3729": { + "fn": "Governance.initGovernance", + "offset": [1638, 1686], + "op": "JUMPDEST", + "path": "1" + }, + "3730": { + "fn": "Governance.initGovernance", + "offset": [1714, 1718], + "op": "PUSH1", + "path": "1", + "statement": 41, + "value": "0x1" + }, + "3732": { + "fn": "Governance.initGovernance", + "offset": [1696, 1711], + "op": "DUP2", + "path": "1" + }, + "3733": { + "fn": "Governance.initGovernance", + "offset": [1696, 1711], + "op": "ADD", + "path": "1" + }, + "3734": { + "fn": "Governance.initGovernance", + "offset": [1696, 1718], + "op": "DUP1", + "path": "1" + }, + "3735": { + "fn": "Governance.initGovernance", + "offset": [1696, 1718], + "op": "SLOAD", + "path": "1" + }, + "3736": { + "op": "PUSH1", + "value": "0xFF" + }, + "3738": { + "op": "PUSH1", + "value": "0xA0" + }, + "3740": { + "op": "SHL" + }, + "3741": { + "op": "NOT" + }, + "3742": { + "fn": "Governance.initGovernance", + "offset": [1696, 1718], + "op": "AND", + "path": "1" + }, + "3743": { + "op": "PUSH1", + "value": "0x1" + }, + "3745": { + "op": "PUSH1", + "value": "0xA0" + }, + "3747": { + "op": "SHL" + }, + "3748": { + "fn": "Governance.initGovernance", + "offset": [1696, 1718], + "op": "OR", + "path": "1" + }, + "3749": { + "fn": "Governance.initGovernance", + "offset": [1696, 1718], + "op": "SWAP1", + "path": "1" + }, + "3750": { + "fn": "Governance.initGovernance", + "offset": [1696, 1718], + "op": "SSTORE", + "path": "1" + }, + "3751": { + "fn": "Governance.initGovernance", + "offset": [1804, 1827], + "op": "PUSH2", + "path": "1", + "statement": 42, + "value": "0x3BA" + }, + "3754": { + "fn": "Governance.initGovernance", + "offset": [1816, 1826], + "op": "CALLER", + "path": "1" + }, + "3755": { + "fn": "Governance.initGovernance", + "offset": [1804, 1815], + "op": "PUSH2", + "path": "1", + "value": "0x1718" + }, + "3758": { + "fn": "Governance.initGovernance", + "jump": "i", + "offset": [1804, 1827], + "op": "JUMP", + "path": "1" + }, + "3759": { + "fn": "Governance.removeGovernor", + "offset": [3747, 4147], + "op": "JUMPDEST", + "path": "1" + }, + "3760": { + "offset": [434, 456], + "op": "PUSH2", + "path": "8", + "value": "0xEB8" + }, + "3763": { + "offset": [445, 455], + "op": "CALLER", + "path": "8" + }, + "3764": { + "offset": [434, 444], + "op": "PUSH2", + "path": "8", + "value": "0xB00" + }, + "3767": { + "jump": "i", + "offset": [434, 456], + "op": "JUMP", + "path": "8" + }, + "3768": { + "fn": "Governance.removeGovernor", + "offset": [434, 456], + "op": "JUMPDEST", + "path": "8" + }, + "3769": { + "offset": [426, 476], + "op": "PUSH2", + "path": "8", + "value": "0xEFB" + }, + "3772": { + "offset": [426, 476], + "op": "JUMPI", + "path": "8" + }, + "3773": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x40" + }, + "3775": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "DUP1", + "path": "8" + }, + "3776": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "MLOAD", + "path": "8" + }, + "3777": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "3781": { + "op": "PUSH1", + "value": "0xE5" + }, + "3783": { + "op": "SHL" + }, + "3784": { + "offset": [426, 476], + "op": "DUP2", + "path": "8" + }, + "3785": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "3786": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x20" + }, + "3788": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x4" + }, + "3790": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "3791": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "3792": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "3793": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0xF" + }, + "3795": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x24" + }, + "3797": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "3798": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "3799": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "3800": { + "op": "PUSH15", + "value": "0x4F4E4C595F474F5645524E414E4345" + }, + "3816": { + "op": "PUSH1", + "value": "0x88" + }, + "3818": { + "op": "SHL" + }, + "3819": { + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x44" + }, + "3821": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "3822": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "3823": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "3824": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "3825": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "MLOAD", + "path": "8" + }, + "3826": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "3827": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "DUP2", + "path": "8" + }, + "3828": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "3829": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "SUB", + "path": "8" + }, + "3830": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x64" + }, + "3832": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "3833": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "3834": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "REVERT", + "path": "8" + }, + "3835": { + "fn": "Governance.removeGovernor", + "offset": [426, 476], + "op": "JUMPDEST", + "path": "8" + }, + "3836": { + "fn": "Governance.removeGovernor", + "offset": [3841, 3851], + "op": "CALLER", + "path": "1", + "statement": 43 + }, + "3837": { + "op": "PUSH1", + "value": "0x1" + }, + "3839": { + "op": "PUSH1", + "value": "0x1" + }, + "3841": { + "op": "PUSH1", + "value": "0xA0" + }, + "3843": { + "op": "SHL" + }, + "3844": { + "op": "SUB" + }, + "3845": { + "fn": "Governance.removeGovernor", + "offset": [3841, 3873], + "op": "DUP3", + "path": "1" + }, + "3846": { + "fn": "Governance.removeGovernor", + "offset": [3841, 3873], + "op": "AND", + "path": "1" + }, + "3847": { + "fn": "Governance.removeGovernor", + "offset": [3841, 3873], + "op": "EQ", + "path": "1" + }, + "3848": { + "branch": 82, + "fn": "Governance.removeGovernor", + "offset": [3841, 3873], + "op": "ISZERO", + "path": "1" + }, + "3849": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "PUSH2", + "path": "1", + "value": "0xF50" + }, + "3852": { + "branch": 82, + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "JUMPI", + "path": "1" + }, + "3853": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "PUSH1", + "path": "1", + "value": "0x40" + }, + "3855": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "DUP1", + "path": "1" + }, + "3856": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "MLOAD", + "path": "1" + }, + "3857": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "3861": { + "op": "PUSH1", + "value": "0xE5" + }, + "3863": { + "op": "SHL" + }, + "3864": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "DUP2", + "path": "1" + }, + "3865": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "MSTORE", + "path": "1" + }, + "3866": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "PUSH1", + "path": "1", + "value": "0x20" + }, + "3868": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "PUSH1", + "path": "1", + "value": "0x4" + }, + "3870": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "DUP3", + "path": "1" + }, + "3871": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "ADD", + "path": "1" + }, + "3872": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "MSTORE", + "path": "1" + }, + "3873": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "PUSH1", + "path": "1", + "value": "0x14" + }, + "3875": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "PUSH1", + "path": "1", + "value": "0x24" + }, + "3877": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "DUP3", + "path": "1" + }, + "3878": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "ADD", + "path": "1" + }, + "3879": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "MSTORE", + "path": "1" + }, + "3880": { + "op": "PUSH20", + "value": "0x474F5645524E4F525F53454C465F52454D4F5645" + }, + "3901": { + "op": "PUSH1", + "value": "0x60" + }, + "3903": { + "op": "SHL" + }, + "3904": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "PUSH1", + "path": "1", + "value": "0x44" + }, + "3906": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "DUP3", + "path": "1" + }, + "3907": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "ADD", + "path": "1" + }, + "3908": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "MSTORE", + "path": "1" + }, + "3909": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "SWAP1", + "path": "1" + }, + "3910": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "MLOAD", + "path": "1" + }, + "3911": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "SWAP1", + "path": "1" + }, + "3912": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "DUP2", + "path": "1" + }, + "3913": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "SWAP1", + "path": "1" + }, + "3914": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "SUB", + "path": "1" + }, + "3915": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "PUSH1", + "path": "1", + "value": "0x64" + }, + "3917": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "ADD", + "path": "1" + }, + "3918": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "SWAP1", + "path": "1" + }, + "3919": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "REVERT", + "path": "1" + }, + "3920": { + "fn": "Governance.removeGovernor", + "offset": [3833, 3898], + "op": "JUMPDEST", + "path": "1" + }, + "3921": { + "fn": "Governance.removeGovernor", + "offset": [3908, 3940], + "op": "PUSH1", + "path": "1", + "value": "0x0" + }, + "3923": { + "fn": "Governance.removeGovernor", + "offset": [3943, 3962], + "op": "PUSH2", + "path": "1", + "value": "0xF5A" + }, + "3926": { + "fn": "Governance.removeGovernor", + "offset": [3943, 3960], + "op": "PUSH2", + "path": "1", + "value": "0x161F" + }, + "3929": { + "fn": "Governance.removeGovernor", + "jump": "i", + "offset": [3943, 3962], + "op": "JUMP", + "path": "1" + }, + "3930": { + "fn": "Governance.removeGovernor", + "offset": [3943, 3962], + "op": "JUMPDEST", + "path": "1" + }, + "3931": { + "fn": "Governance.removeGovernor", + "offset": [3908, 3962], + "op": "SWAP1", + "path": "1" + }, + "3932": { + "fn": "Governance.removeGovernor", + "offset": [3908, 3962], + "op": "POP", + "path": "1" + }, + "3933": { + "fn": "Governance.removeGovernor", + "offset": [3980, 4010], + "op": "PUSH2", + "path": "1", + "statement": 44, + "value": "0xF65" + }, + "3936": { + "fn": "Governance.removeGovernor", + "offset": [3991, 4009], + "op": "DUP3", + "path": "1" + }, + "3937": { + "fn": "Governance.removeGovernor", + "offset": [3980, 3990], + "op": "PUSH2", + "path": "1", + "value": "0xB00" + }, + "3940": { + "fn": "Governance.removeGovernor", + "jump": "i", + "offset": [3980, 4010], + "op": "JUMP", + "path": "1" + }, + "3941": { + "branch": 83, + "fn": "Governance.removeGovernor", + "offset": [3980, 4010], + "op": "JUMPDEST", + "path": "1" + }, + "3942": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "PUSH2", + "path": "1", + "value": "0xFA5" + }, + "3945": { + "branch": 83, + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "JUMPI", + "path": "1" + }, + "3946": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "PUSH1", + "path": "1", + "value": "0x40" + }, + "3948": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "DUP1", + "path": "1" + }, + "3949": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "MLOAD", + "path": "1" + }, + "3950": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "3954": { + "op": "PUSH1", + "value": "0xE5" + }, + "3956": { + "op": "SHL" + }, + "3957": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "DUP2", + "path": "1" + }, + "3958": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "MSTORE", + "path": "1" + }, + "3959": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "PUSH1", + "path": "1", + "value": "0x20" + }, + "3961": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "PUSH1", + "path": "1", + "value": "0x4" + }, + "3963": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "DUP3", + "path": "1" + }, + "3964": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "ADD", + "path": "1" + }, + "3965": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "MSTORE", + "path": "1" + }, + "3966": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "PUSH1", + "path": "1", + "value": "0xC" + }, + "3968": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "PUSH1", + "path": "1", + "value": "0x24" + }, + "3970": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "DUP3", + "path": "1" + }, + "3971": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "ADD", + "path": "1" + }, + "3972": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "MSTORE", + "path": "1" + }, + "3973": { + "op": "PUSH12", + "value": "0x2727AA2FA3A7AB22A92727A9" + }, + "3986": { + "op": "PUSH1", + "value": "0xA1" + }, + "3988": { + "op": "SHL" + }, + "3989": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "PUSH1", + "path": "1", + "value": "0x44" + }, + "3991": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "DUP3", + "path": "1" + }, + "3992": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "ADD", + "path": "1" + }, + "3993": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "MSTORE", + "path": "1" + }, + "3994": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "SWAP1", + "path": "1" + }, + "3995": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "MLOAD", + "path": "1" + }, + "3996": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "SWAP1", + "path": "1" + }, + "3997": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "DUP2", + "path": "1" + }, + "3998": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "SWAP1", + "path": "1" + }, + "3999": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "SUB", + "path": "1" + }, + "4000": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "PUSH1", + "path": "1", + "value": "0x64" + }, + "4002": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "ADD", + "path": "1" + }, + "4003": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "SWAP1", + "path": "1" + }, + "4004": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "REVERT", + "path": "1" + }, + "4005": { + "fn": "Governance.removeGovernor", + "offset": [3972, 4027], + "op": "JUMPDEST", + "path": "1" + }, + "4006": { + "op": "PUSH1", + "value": "0x1" + }, + "4008": { + "op": "PUSH1", + "value": "0x1" + }, + "4010": { + "op": "PUSH1", + "value": "0xA0" + }, + "4012": { + "op": "SHL" + }, + "4013": { + "op": "SUB" + }, + "4014": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4079], + "op": "DUP3", + "path": "1", + "statement": 45 + }, + "4015": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4079], + "op": "AND", + "path": "1" + }, + "4016": { + "fn": "Governance.removeGovernor", + "offset": [4082, 4087], + "op": "PUSH1", + "path": "1", + "value": "0x0" + }, + "4018": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4079], + "op": "DUP2", + "path": "1" + }, + "4019": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4079], + "op": "DUP2", + "path": "1" + }, + "4020": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4079], + "op": "MSTORE", + "path": "1" + }, + "4021": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4079], + "op": "PUSH1", + "path": "1", + "value": "0x20" + }, + "4023": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4079], + "op": "DUP4", + "path": "1" + }, + "4024": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4079], + "op": "DUP2", + "path": "1" + }, + "4025": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4079], + "op": "MSTORE", + "path": "1" + }, + "4026": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4079], + "op": "PUSH1", + "path": "1", + "value": "0x40" + }, + "4028": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4079], + "op": "SWAP2", + "path": "1" + }, + "4029": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4079], + "op": "DUP3", + "path": "1" + }, + "4030": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4079], + "op": "SWAP1", + "path": "1" + }, + "4031": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4079], + "op": "KECCAK256", + "path": "1" + }, + "4032": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4087], + "op": "DUP1", + "path": "1" + }, + "4033": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4087], + "op": "SLOAD", + "path": "1" + }, + "4034": { + "op": "PUSH1", + "value": "0xFF" + }, + "4036": { + "op": "NOT" + }, + "4037": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4087], + "op": "AND", + "path": "1" + }, + "4038": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4087], + "op": "SWAP1", + "path": "1" + }, + "4039": { + "fn": "Governance.removeGovernor", + "offset": [4037, 4087], + "op": "SSTORE", + "path": "1" + }, + "4040": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "DUP2", + "path": "1", + "statement": 46 + }, + "4041": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "MLOAD", + "path": "1" + }, + "4042": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "SWAP3", + "path": "1" + }, + "4043": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "DUP4", + "path": "1" + }, + "4044": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "MSTORE", + "path": "1" + }, + "4045": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "SWAP1", + "path": "1" + }, + "4046": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "MLOAD", + "path": "1" + }, + "4047": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "PUSH32", + "path": "1", + "value": "0xD75F94825E770B8B512BE8E74759E252AD00E102E38F50CCE2F7C6F868A29599" + }, + "4080": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "SWAP3", + "path": "1" + }, + "4081": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "DUP2", + "path": "1" + }, + "4082": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "SWAP1", + "path": "1" + }, + "4083": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "SUB", + "path": "1" + }, + "4084": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "SWAP1", + "path": "1" + }, + "4085": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "SWAP2", + "path": "1" + }, + "4086": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "ADD", + "path": "1" + }, + "4087": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "SWAP1", + "path": "1" + }, + "4088": { + "fn": "Governance.removeGovernor", + "offset": [4102, 4140], + "op": "LOG1", + "path": "1" + }, + "4089": { + "offset": [486, 487], + "op": "POP", + "path": "8" + }, + "4090": { + "fn": "Governance.removeGovernor", + "offset": [3747, 4147], + "op": "POP", + "path": "1" + }, + "4091": { + "fn": "Governance.removeGovernor", + "jump": "o", + "offset": [3747, 4147], + "op": "JUMP", + "path": "1" + }, + "4092": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1858, 1979], + "op": "JUMPDEST", + "path": "29" + }, + "4093": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1917, 1972], + "op": "PUSH2", + "path": "29", + "statement": 47, + "value": "0x3BA" + }, + "4096": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "4098": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "MLOAD", + "path": "29" + }, + "4099": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "DUP1", + "path": "29" + }, + "4100": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "PUSH1", + "path": "29", + "value": "0x60" + }, + "4102": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "ADD", + "path": "29" + }, + "4103": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "4105": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "MSTORE", + "path": "29" + }, + "4106": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "DUP1", + "path": "29" + }, + "4107": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "PUSH1", + "path": "29", + "value": "0x27" + }, + "4109": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "DUP2", + "path": "29" + }, + "4110": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "MSTORE", + "path": "29" + }, + "4111": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "PUSH1", + "path": "29", + "value": "0x20" + }, + "4113": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "ADD", + "path": "29" + }, + "4114": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "PUSH2", + "path": "29", + "value": "0x19F5" + }, + "4117": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "PUSH1", + "path": "29", + "value": "0x27" + }, + "4119": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "SWAP2", + "path": "29" + }, + "4120": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1943, 1964], + "op": "CODECOPY", + "path": "29" + }, + "4121": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1966, 1971], + "op": "DUP3", + "path": "29" + }, + "4122": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1917, 1942], + "op": "PUSH2", + "path": "29", + "value": "0x1798" + }, + "4125": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "jump": "i", + "offset": [1917, 1972], + "op": "JUMP", + "path": "29" + }, + "4126": { + "fn": "Governance.nominateNewGovernor", + "offset": [2332, 2633], + "op": "JUMPDEST", + "path": "1" + }, + "4127": { + "offset": [434, 456], + "op": "PUSH2", + "path": "8", + "value": "0x1027" + }, + "4130": { + "offset": [445, 455], + "op": "CALLER", + "path": "8" + }, + "4131": { + "offset": [434, 444], + "op": "PUSH2", + "path": "8", + "value": "0xB00" + }, + "4134": { + "jump": "i", + "offset": [434, 456], + "op": "JUMP", + "path": "8" + }, + "4135": { + "fn": "Governance.nominateNewGovernor", + "offset": [434, 456], + "op": "JUMPDEST", + "path": "8" + }, + "4136": { + "offset": [426, 476], + "op": "PUSH2", + "path": "8", + "value": "0x106A" + }, + "4139": { + "offset": [426, 476], + "op": "JUMPI", + "path": "8" + }, + "4140": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x40" + }, + "4142": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "DUP1", + "path": "8" + }, + "4143": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "MLOAD", + "path": "8" + }, + "4144": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "4148": { + "op": "PUSH1", + "value": "0xE5" + }, + "4150": { + "op": "SHL" + }, + "4151": { + "offset": [426, 476], + "op": "DUP2", + "path": "8" + }, + "4152": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "4153": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x20" + }, + "4155": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x4" + }, + "4157": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "4158": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "4159": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "4160": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0xF" + }, + "4162": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x24" + }, + "4164": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "4165": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "4166": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "4167": { + "op": "PUSH15", + "value": "0x4F4E4C595F474F5645524E414E4345" + }, + "4183": { + "op": "PUSH1", + "value": "0x88" + }, + "4185": { + "op": "SHL" + }, + "4186": { + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x44" + }, + "4188": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "4189": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "4190": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "4191": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "4192": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "MLOAD", + "path": "8" + }, + "4193": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "4194": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "DUP2", + "path": "8" + }, + "4195": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "4196": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "SUB", + "path": "8" + }, + "4197": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x64" + }, + "4199": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "4200": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "4201": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "REVERT", + "path": "8" + }, + "4202": { + "fn": "Governance.nominateNewGovernor", + "offset": [426, 476], + "op": "JUMPDEST", + "path": "8" + }, + "4203": { + "fn": "Governance.nominateNewGovernor", + "offset": [2416, 2448], + "op": "PUSH1", + "path": "1", + "value": "0x0" + }, + "4205": { + "fn": "Governance.nominateNewGovernor", + "offset": [2451, 2470], + "op": "PUSH2", + "path": "1", + "value": "0x1074" + }, + "4208": { + "fn": "Governance.nominateNewGovernor", + "offset": [2451, 2468], + "op": "PUSH2", + "path": "1", + "value": "0x161F" + }, + "4211": { + "fn": "Governance.nominateNewGovernor", + "jump": "i", + "offset": [2451, 2470], + "op": "JUMP", + "path": "1" + }, + "4212": { + "fn": "Governance.nominateNewGovernor", + "offset": [2451, 2470], + "op": "JUMPDEST", + "path": "1" + }, + "4213": { + "fn": "Governance.nominateNewGovernor", + "offset": [2416, 2470], + "op": "SWAP1", + "path": "1" + }, + "4214": { + "fn": "Governance.nominateNewGovernor", + "offset": [2416, 2470], + "op": "POP", + "path": "1" + }, + "4215": { + "fn": "Governance.nominateNewGovernor", + "offset": [2489, 2512], + "op": "PUSH2", + "path": "1", + "statement": 48, + "value": "0x107F" + }, + "4218": { + "fn": "Governance.nominateNewGovernor", + "offset": [2500, 2511], + "op": "DUP3", + "path": "1" + }, + "4219": { + "fn": "Governance.nominateNewGovernor", + "offset": [2489, 2499], + "op": "PUSH2", + "path": "1", + "value": "0xB00" + }, + "4222": { + "fn": "Governance.nominateNewGovernor", + "jump": "i", + "offset": [2489, 2512], + "op": "JUMP", + "path": "1" + }, + "4223": { + "fn": "Governance.nominateNewGovernor", + "offset": [2489, 2512], + "op": "JUMPDEST", + "path": "1" + }, + "4224": { + "branch": 84, + "fn": "Governance.nominateNewGovernor", + "offset": [2488, 2512], + "op": "ISZERO", + "path": "1" + }, + "4225": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "PUSH2", + "path": "1", + "value": "0x10C4" + }, + "4228": { + "branch": 84, + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "JUMPI", + "path": "1" + }, + "4229": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "PUSH1", + "path": "1", + "value": "0x40" + }, + "4231": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "DUP1", + "path": "1" + }, + "4232": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "MLOAD", + "path": "1" + }, + "4233": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "4237": { + "op": "PUSH1", + "value": "0xE5" + }, + "4239": { + "op": "SHL" + }, + "4240": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "DUP2", + "path": "1" + }, + "4241": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "MSTORE", + "path": "1" + }, + "4242": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "PUSH1", + "path": "1", + "value": "0x20" + }, + "4244": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "PUSH1", + "path": "1", + "value": "0x4" + }, + "4246": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "DUP3", + "path": "1" + }, + "4247": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "ADD", + "path": "1" + }, + "4248": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "MSTORE", + "path": "1" + }, + "4249": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "PUSH1", + "path": "1", + "value": "0x10" + }, + "4251": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "PUSH1", + "path": "1", + "value": "0x24" + }, + "4253": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "DUP3", + "path": "1" + }, + "4254": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "ADD", + "path": "1" + }, + "4255": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "MSTORE", + "path": "1" + }, + "4256": { + "op": "PUSH16", + "value": "0x20A62922A0A22CAFA3A7AB22A92727A9" + }, + "4273": { + "op": "PUSH1", + "value": "0x81" + }, + "4275": { + "op": "SHL" + }, + "4276": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "PUSH1", + "path": "1", + "value": "0x44" + }, + "4278": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "DUP3", + "path": "1" + }, + "4279": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "ADD", + "path": "1" + }, + "4280": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "MSTORE", + "path": "1" + }, + "4281": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "SWAP1", + "path": "1" + }, + "4282": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "MLOAD", + "path": "1" + }, + "4283": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "SWAP1", + "path": "1" + }, + "4284": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "DUP2", + "path": "1" + }, + "4285": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "SWAP1", + "path": "1" + }, + "4286": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "SUB", + "path": "1" + }, + "4287": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "PUSH1", + "path": "1", + "value": "0x64" + }, + "4289": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "ADD", + "path": "1" + }, + "4290": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "SWAP1", + "path": "1" + }, + "4291": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "REVERT", + "path": "1" + }, + "4292": { + "fn": "Governance.nominateNewGovernor", + "offset": [2480, 2533], + "op": "JUMPDEST", + "path": "1" + }, + "4293": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2564], + "op": "PUSH1", + "path": "1", + "statement": 49, + "value": "0x1" + }, + "4295": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2564], + "op": "DUP2", + "path": "1" + }, + "4296": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2564], + "op": "ADD", + "path": "1" + }, + "4297": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2578], + "op": "DUP1", + "path": "1" + }, + "4298": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2578], + "op": "SLOAD", + "path": "1" + }, + "4299": { + "op": "PUSH1", + "value": "0x1" + }, + "4301": { + "op": "PUSH1", + "value": "0x1" + }, + "4303": { + "op": "PUSH1", + "value": "0xA0" + }, + "4305": { + "op": "SHL" + }, + "4306": { + "op": "SUB" + }, + "4307": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2578], + "op": "DUP5", + "path": "1" + }, + "4308": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2578], + "op": "AND", + "path": "1" + }, + "4309": { + "op": "PUSH1", + "value": "0x1" + }, + "4311": { + "op": "PUSH1", + "value": "0x1" + }, + "4313": { + "op": "PUSH1", + "value": "0xA0" + }, + "4315": { + "op": "SHL" + }, + "4316": { + "op": "SUB" + }, + "4317": { + "op": "NOT" + }, + "4318": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2578], + "op": "SWAP1", + "path": "1" + }, + "4319": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2578], + "op": "SWAP2", + "path": "1" + }, + "4320": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2578], + "op": "AND", + "path": "1" + }, + "4321": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2578], + "op": "DUP2", + "path": "1" + }, + "4322": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2578], + "op": "OR", + "path": "1" + }, + "4323": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2578], + "op": "SWAP1", + "path": "1" + }, + "4324": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2578], + "op": "SWAP2", + "path": "1" + }, + "4325": { + "fn": "Governance.nominateNewGovernor", + "offset": [2543, 2578], + "op": "SSTORE", + "path": "1" + }, + "4326": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "PUSH1", + "path": "1", + "statement": 50, + "value": "0x40" + }, + "4328": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "DUP1", + "path": "1" + }, + "4329": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "MLOAD", + "path": "1" + }, + "4330": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "SWAP2", + "path": "1" + }, + "4331": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "DUP3", + "path": "1" + }, + "4332": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "MSTORE", + "path": "1" + }, + "4333": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "MLOAD", + "path": "1" + }, + "4334": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "PUSH32", + "path": "1", + "value": "0x6166272C8D3F5F579082F2827532732F97195007983BB5B83AC12C56700B01A6" + }, + "4367": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "SWAP2", + "path": "1" + }, + "4368": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "DUP2", + "path": "1" + }, + "4369": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "SWAP1", + "path": "1" + }, + "4370": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "SUB", + "path": "1" + }, + "4371": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "PUSH1", + "path": "1", + "value": "0x20" + }, + "4373": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "ADD", + "path": "1" + }, + "4374": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "SWAP1", + "path": "1" + }, + "4375": { + "fn": "Governance.nominateNewGovernor", + "offset": [2593, 2626], + "op": "LOG1", + "path": "1" + }, + "4376": { + "offset": [486, 487], + "op": "POP", + "path": "8" + }, + "4377": { + "fn": "Governance.nominateNewGovernor", + "offset": [2332, 2633], + "op": "POP", + "path": "1" + }, + "4378": { + "fn": "Governance.nominateNewGovernor", + "jump": "o", + "offset": [2332, 2633], + "op": "JUMP", + "path": "1" + }, + "4379": { + "fn": "Governance.acceptGovernance", + "offset": [3193, 3690], + "op": "JUMPDEST", + "path": "1" + }, + "4380": { + "fn": "Governance.acceptGovernance", + "offset": [3321, 3353], + "op": "PUSH1", + "path": "1", + "value": "0x0" + }, + "4382": { + "fn": "Governance.acceptGovernance", + "offset": [3356, 3375], + "op": "PUSH2", + "path": "1", + "value": "0x1125" + }, + "4385": { + "fn": "Governance.acceptGovernance", + "offset": [3356, 3373], + "op": "PUSH2", + "path": "1", + "value": "0x161F" + }, + "4388": { + "fn": "Governance.acceptGovernance", + "jump": "i", + "offset": [3356, 3375], + "op": "JUMP", + "path": "1" + }, + "4389": { + "fn": "Governance.acceptGovernance", + "offset": [3356, 3375], + "op": "JUMPDEST", + "path": "1" + }, + "4390": { + "fn": "Governance.acceptGovernance", + "offset": [3407, 3428], + "op": "PUSH1", + "path": "1", + "statement": 51, + "value": "0x1" + }, + "4392": { + "fn": "Governance.acceptGovernance", + "offset": [3407, 3428], + "op": "DUP2", + "path": "1" + }, + "4393": { + "fn": "Governance.acceptGovernance", + "offset": [3407, 3428], + "op": "ADD", + "path": "1" + }, + "4394": { + "fn": "Governance.acceptGovernance", + "offset": [3407, 3428], + "op": "SLOAD", + "path": "1" + }, + "4395": { + "fn": "Governance.acceptGovernance", + "offset": [3407, 3428], + "op": "SWAP1", + "path": "1" + }, + "4396": { + "fn": "Governance.acceptGovernance", + "offset": [3407, 3428], + "op": "SWAP2", + "path": "1" + }, + "4397": { + "op": "POP" + }, + "4398": { + "op": "PUSH1", + "value": "0x1" + }, + "4400": { + "op": "PUSH1", + "value": "0x1" + }, + "4402": { + "op": "PUSH1", + "value": "0xA0" + }, + "4404": { + "op": "SHL" + }, + "4405": { + "op": "SUB" + }, + "4406": { + "fn": "Governance.acceptGovernance", + "offset": [3407, 3428], + "op": "AND", + "path": "1" + }, + "4407": { + "fn": "Governance.acceptGovernance", + "offset": [3393, 3403], + "op": "CALLER", + "path": "1" + }, + "4408": { + "branch": 85, + "fn": "Governance.acceptGovernance", + "offset": [3393, 3428], + "op": "EQ", + "path": "1" + }, + "4409": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "PUSH2", + "path": "1", + "value": "0x1189" + }, + "4412": { + "branch": 85, + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "JUMPI", + "path": "1" + }, + "4413": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "PUSH1", + "path": "1", + "value": "0x40" + }, + "4415": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "DUP1", + "path": "1" + }, + "4416": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "MLOAD", + "path": "1" + }, + "4417": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "4421": { + "op": "PUSH1", + "value": "0xE5" + }, + "4423": { + "op": "SHL" + }, + "4424": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "DUP2", + "path": "1" + }, + "4425": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "MSTORE", + "path": "1" + }, + "4426": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "PUSH1", + "path": "1", + "value": "0x20" + }, + "4428": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "PUSH1", + "path": "1", + "value": "0x4" + }, + "4430": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "DUP3", + "path": "1" + }, + "4431": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "ADD", + "path": "1" + }, + "4432": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "MSTORE", + "path": "1" + }, + "4433": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "PUSH1", + "path": "1", + "value": "0x17" + }, + "4435": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "PUSH1", + "path": "1", + "value": "0x24" + }, + "4437": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "DUP3", + "path": "1" + }, + "4438": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "ADD", + "path": "1" + }, + "4439": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "MSTORE", + "path": "1" + }, + "4440": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "PUSH32", + "path": "1", + "value": "0x4F4E4C595F43414E4449444154455F474F5645524E4F52000000000000000000" + }, + "4473": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "PUSH1", + "path": "1", + "value": "0x44" + }, + "4475": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "DUP3", + "path": "1" + }, + "4476": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "ADD", + "path": "1" + }, + "4477": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "MSTORE", + "path": "1" + }, + "4478": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "SWAP1", + "path": "1" + }, + "4479": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "MLOAD", + "path": "1" + }, + "4480": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "SWAP1", + "path": "1" + }, + "4481": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "DUP2", + "path": "1" + }, + "4482": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "SWAP1", + "path": "1" + }, + "4483": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "SUB", + "path": "1" + }, + "4484": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "PUSH1", + "path": "1", + "value": "0x64" + }, + "4486": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "ADD", + "path": "1" + }, + "4487": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "SWAP1", + "path": "1" + }, + "4488": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "REVERT", + "path": "1" + }, + "4489": { + "fn": "Governance.acceptGovernance", + "offset": [3385, 3456], + "op": "JUMPDEST", + "path": "1" + }, + "4490": { + "fn": "Governance.acceptGovernance", + "offset": [3504, 3525], + "op": "PUSH1", + "path": "1", + "statement": 52, + "value": "0x1" + }, + "4492": { + "fn": "Governance.acceptGovernance", + "offset": [3504, 3525], + "op": "DUP2", + "path": "1" + }, + "4493": { + "fn": "Governance.acceptGovernance", + "offset": [3504, 3525], + "op": "ADD", + "path": "1" + }, + "4494": { + "fn": "Governance.acceptGovernance", + "offset": [3504, 3525], + "op": "SLOAD", + "path": "1" + }, + "4495": { + "fn": "Governance.acceptGovernance", + "offset": [3492, 3526], + "op": "PUSH2", + "path": "1", + "value": "0x11A0" + }, + "4498": { + "fn": "Governance.acceptGovernance", + "offset": [3492, 3526], + "op": "SWAP1", + "path": "1" + }, + "4499": { + "op": "PUSH1", + "value": "0x1" + }, + "4501": { + "op": "PUSH1", + "value": "0x1" + }, + "4503": { + "op": "PUSH1", + "value": "0xA0" + }, + "4505": { + "op": "SHL" + }, + "4506": { + "op": "SUB" + }, + "4507": { + "fn": "Governance.acceptGovernance", + "offset": [3504, 3525], + "op": "AND", + "path": "1" + }, + "4508": { + "fn": "Governance.acceptGovernance", + "offset": [3492, 3503], + "op": "PUSH2", + "path": "1", + "value": "0x1718" + }, + "4511": { + "fn": "Governance.acceptGovernance", + "jump": "i", + "offset": [3492, 3526], + "op": "JUMP", + "path": "1" + }, + "4512": { + "fn": "Governance.acceptGovernance", + "offset": [3492, 3526], + "op": "JUMPDEST", + "path": "1" + }, + "4513": { + "fn": "Governance.acceptGovernance", + "offset": [3536, 3557], + "op": "PUSH1", + "path": "1", + "statement": 53, + "value": "0x1" + }, + "4515": { + "fn": "Governance.acceptGovernance", + "offset": [3536, 3557], + "op": "DUP2", + "path": "1" + }, + "4516": { + "fn": "Governance.acceptGovernance", + "offset": [3536, 3557], + "op": "ADD", + "path": "1" + }, + "4517": { + "fn": "Governance.acceptGovernance", + "offset": [3536, 3572], + "op": "DUP1", + "path": "1" + }, + "4518": { + "fn": "Governance.acceptGovernance", + "offset": [3536, 3572], + "op": "SLOAD", + "path": "1" + }, + "4519": { + "op": "PUSH1", + "value": "0x1" + }, + "4521": { + "op": "PUSH1", + "value": "0x1" + }, + "4523": { + "op": "PUSH1", + "value": "0xA0" + }, + "4525": { + "op": "SHL" + }, + "4526": { + "op": "SUB" + }, + "4527": { + "op": "NOT" + }, + "4528": { + "fn": "Governance.acceptGovernance", + "offset": [3536, 3572], + "op": "AND", + "path": "1" + }, + "4529": { + "fn": "Governance.acceptGovernance", + "offset": [3536, 3572], + "op": "SWAP1", + "path": "1" + }, + "4530": { + "fn": "Governance.acceptGovernance", + "offset": [3536, 3572], + "op": "SSTORE", + "path": "1" + }, + "4531": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "PUSH1", + "path": "1", + "statement": 54, + "value": "0x40" + }, + "4533": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "DUP1", + "path": "1" + }, + "4534": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "MLOAD", + "path": "1" + }, + "4535": { + "fn": "Governance.acceptGovernance", + "offset": [3672, 3682], + "op": "CALLER", + "path": "1" + }, + "4536": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "DUP2", + "path": "1" + }, + "4537": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "MSTORE", + "path": "1" + }, + "4538": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "SWAP1", + "path": "1" + }, + "4539": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "MLOAD", + "path": "1" + }, + "4540": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "PUSH32", + "path": "1", + "value": "0xCFB473E6C03F9A29DDAF990E736FA3DE5188A0BD85D684F5B6E164EBFBFFF5D2" + }, + "4573": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "SWAP2", + "path": "1" + }, + "4574": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "DUP2", + "path": "1" + }, + "4575": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "SWAP1", + "path": "1" + }, + "4576": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "SUB", + "path": "1" + }, + "4577": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "PUSH1", + "path": "1", + "value": "0x20" + }, + "4579": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "ADD", + "path": "1" + }, + "4580": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "SWAP1", + "path": "1" + }, + "4581": { + "fn": "Governance.acceptGovernance", + "offset": [3649, 3683], + "op": "LOG1", + "path": "1" + }, + "4582": { + "fn": "Governance.acceptGovernance", + "offset": [3193, 3690], + "op": "POP", + "path": "1" + }, + "4583": { + "fn": "Governance.acceptGovernance", + "jump": "o", + "offset": [3193, 3690], + "op": "JUMP", + "path": "1" + }, + "4584": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [896, 1018], + "op": "JUMPDEST", + "path": "29" + }, + "4585": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [946, 953], + "op": "PUSH1", + "path": "29", + "value": "0x0" + }, + "4587": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [972, 1011], + "op": "PUSH2", + "path": "29", + "statement": 55, + "value": "0x120B" + }, + "4590": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "4592": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "MLOAD", + "path": "29" + }, + "4593": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "DUP1", + "path": "29" + }, + "4594": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "PUSH1", + "path": "29", + "value": "0x60" + }, + "4596": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "ADD", + "path": "29" + }, + "4597": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "4599": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "MSTORE", + "path": "29" + }, + "4600": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "DUP1", + "path": "29" + }, + "4601": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "PUSH1", + "path": "29", + "value": "0x27" + }, + "4603": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "DUP2", + "path": "29" + }, + "4604": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "MSTORE", + "path": "29" + }, + "4605": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "PUSH1", + "path": "29", + "value": "0x20" + }, + "4607": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "ADD", + "path": "29" + }, + "4608": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "PUSH2", + "path": "29", + "value": "0x19CE" + }, + "4611": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "PUSH1", + "path": "29", + "value": "0x27" + }, + "4613": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "SWAP2", + "path": "29" + }, + "4614": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [998, 1010], + "op": "CODECOPY", + "path": "29" + }, + "4615": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [972, 997], + "op": "PUSH2", + "path": "29", + "value": "0x1812" + }, + "4618": { + "fn": "StarknetTokenStorage.l2TokenContract", + "jump": "i", + "offset": [972, 1011], + "op": "JUMP", + "path": "29" + }, + "4619": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [972, 1011], + "op": "JUMPDEST", + "path": "29" + }, + "4620": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [965, 1011], + "op": "SWAP1", + "path": "29" + }, + "4621": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [965, 1011], + "op": "POP", + "path": "29" + }, + "4622": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [896, 1018], + "op": "SWAP1", + "path": "29" + }, + "4623": { + "fn": "StarknetTokenStorage.l2TokenContract", + "jump": "o", + "offset": [896, 1018], + "op": "JUMP", + "path": "29" + }, + "4624": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1620, 1736], + "op": "JUMPDEST", + "path": "29" + }, + "4625": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1679, 1729], + "op": "PUSH2", + "path": "29", + "statement": 56, + "value": "0x3BA" + }, + "4628": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "4630": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "MLOAD", + "path": "29" + }, + "4631": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "DUP1", + "path": "29" + }, + "4632": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "PUSH1", + "path": "29", + "value": "0x60" + }, + "4634": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "ADD", + "path": "29" + }, + "4635": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "4637": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "MSTORE", + "path": "29" + }, + "4638": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "DUP1", + "path": "29" + }, + "4639": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "PUSH1", + "path": "29", + "value": "0x27" + }, + "4641": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "DUP2", + "path": "29" + }, + "4642": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "MSTORE", + "path": "29" + }, + "4643": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "PUSH1", + "path": "29", + "value": "0x20" + }, + "4645": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "ADD", + "path": "29" + }, + "4646": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "PUSH2", + "path": "29", + "value": "0x19CE" + }, + "4649": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "PUSH1", + "path": "29", + "value": "0x27" + }, + "4651": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "SWAP2", + "path": "29" + }, + "4652": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1709, 1721], + "op": "CODECOPY", + "path": "29" + }, + "4653": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1723, 1728], + "op": "DUP3", + "path": "29" + }, + "4654": { + "fn": "StarknetTokenStorage.l2TokenContract", + "offset": [1679, 1708], + "op": "PUSH2", + "path": "29", + "value": "0x188F" + }, + "4657": { + "fn": "StarknetTokenStorage.l2TokenContract", + "jump": "i", + "offset": [1679, 1729], + "op": "JUMP", + "path": "29" + }, + "4658": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1150, 1281], + "op": "JUMPDEST", + "path": "29" + }, + "4659": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1200, 1207], + "op": "PUSH1", + "path": "29", + "value": "0x0" + }, + "4661": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1226, 1274], + "op": "PUSH2", + "path": "29", + "statement": 57, + "value": "0x120B" + }, + "4664": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "4666": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "MLOAD", + "path": "29" + }, + "4667": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "DUP1", + "path": "29" + }, + "4668": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "PUSH1", + "path": "29", + "value": "0x60" + }, + "4670": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "ADD", + "path": "29" + }, + "4671": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "4673": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "MSTORE", + "path": "29" + }, + "4674": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "DUP1", + "path": "29" + }, + "4675": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "PUSH1", + "path": "29", + "value": "0x27" + }, + "4677": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "DUP2", + "path": "29" + }, + "4678": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "MSTORE", + "path": "29" + }, + "4679": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "PUSH1", + "path": "29", + "value": "0x20" + }, + "4681": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "ADD", + "path": "29" + }, + "4682": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "PUSH2", + "path": "29", + "value": "0x19F5" + }, + "4685": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "PUSH1", + "path": "29", + "value": "0x27" + }, + "4687": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "SWAP2", + "path": "29" + }, + "4688": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1252, 1273], + "op": "CODECOPY", + "path": "29" + }, + "4689": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "offset": [1226, 1251], + "op": "PUSH2", + "path": "29", + "value": "0x1812" + }, + "4692": { + "fn": "StarknetTokenStorage.maxTotalBalance", + "jump": "i", + "offset": [1226, 1274], + "op": "JUMP", + "path": "29" + }, + "4693": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3292, 3851], + "op": "JUMPDEST", + "path": "28" + }, + "4694": { + "offset": [2589, 2606], + "op": "PUSH2", + "path": "28", + "value": "0x125D" + }, + "4697": { + "offset": [2589, 2604], + "op": "PUSH2", + "path": "28", + "value": "0x11E8" + }, + "4700": { + "jump": "i", + "offset": [2589, 2606], + "op": "JUMP", + "path": "28" + }, + "4701": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2589, 2606], + "op": "JUMPDEST", + "path": "28" + }, + "4702": { + "offset": [2581, 2641], + "op": "PUSH2", + "path": "28", + "value": "0x12AE" + }, + "4705": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "JUMPI", + "path": "28" + }, + "4706": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "4708": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "DUP1", + "path": "28" + }, + "4709": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "MLOAD", + "path": "28" + }, + "4710": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "4714": { + "op": "PUSH1", + "value": "0xE5" + }, + "4716": { + "op": "SHL" + }, + "4717": { + "offset": [2581, 2641], + "op": "DUP2", + "path": "28" + }, + "4718": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "MSTORE", + "path": "28" + }, + "4719": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "4721": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "4723": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "DUP3", + "path": "28" + }, + "4724": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "ADD", + "path": "28" + }, + "4725": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "MSTORE", + "path": "28" + }, + "4726": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "PUSH1", + "path": "28", + "value": "0x19" + }, + "4728": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "PUSH1", + "path": "28", + "value": "0x24" + }, + "4730": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "DUP3", + "path": "28" + }, + "4731": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "ADD", + "path": "28" + }, + "4732": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "MSTORE", + "path": "28" + }, + "4733": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "PUSH32", + "path": "28", + "value": "0x4C325F544F4B454E5F434F4E54524143545F4E4F545F53455400000000000000" + }, + "4766": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "PUSH1", + "path": "28", + "value": "0x44" + }, + "4768": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "DUP3", + "path": "28" + }, + "4769": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "ADD", + "path": "28" + }, + "4770": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "MSTORE", + "path": "28" + }, + "4771": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "SWAP1", + "path": "28" + }, + "4772": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "MLOAD", + "path": "28" + }, + "4773": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "SWAP1", + "path": "28" + }, + "4774": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "DUP2", + "path": "28" + }, + "4775": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "SWAP1", + "path": "28" + }, + "4776": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "SUB", + "path": "28" + }, + "4777": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "PUSH1", + "path": "28", + "value": "0x64" + }, + "4779": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "ADD", + "path": "28" + }, + "4780": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "SWAP1", + "path": "28" + }, + "4781": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "REVERT", + "path": "28" + }, + "4782": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2581, 2641], + "op": "JUMPDEST", + "path": "28" + }, + "4783": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3419, 3430], + "op": "DUP1", + "path": "28" + }, + "4784": { + "offset": [2260, 2274], + "op": "DUP1", + "path": "28" + }, + "4785": { + "offset": [2252, 2302], + "op": "PUSH2", + "path": "28", + "value": "0x12FB" + }, + "4788": { + "offset": [2252, 2302], + "op": "JUMPI", + "path": "28" + }, + "4789": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "4791": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "DUP1", + "path": "28" + }, + "4792": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "MLOAD", + "path": "28" + }, + "4793": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "4797": { + "op": "PUSH1", + "value": "0xE5" + }, + "4799": { + "op": "SHL" + }, + "4800": { + "offset": [2252, 2302], + "op": "DUP2", + "path": "28" + }, + "4801": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "MSTORE", + "path": "28" + }, + "4802": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "4804": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "4806": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "DUP3", + "path": "28" + }, + "4807": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "ADD", + "path": "28" + }, + "4808": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "MSTORE", + "path": "28" + }, + "4809": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "PUSH1", + "path": "28", + "value": "0x17" + }, + "4811": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "PUSH1", + "path": "28", + "value": "0x24" + }, + "4813": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "DUP3", + "path": "28" + }, + "4814": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "ADD", + "path": "28" + }, + "4815": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "MSTORE", + "path": "28" + }, + "4816": { + "op": "PUSH23", + "value": "0x4C325F414444524553535F4F55545F4F465F52414E4745" + }, + "4840": { + "op": "PUSH1", + "value": "0x48" + }, + "4842": { + "op": "SHL" + }, + "4843": { + "offset": [2252, 2302], + "op": "PUSH1", + "path": "28", + "value": "0x44" + }, + "4845": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "DUP3", + "path": "28" + }, + "4846": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "ADD", + "path": "28" + }, + "4847": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "MSTORE", + "path": "28" + }, + "4848": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "SWAP1", + "path": "28" + }, + "4849": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "MLOAD", + "path": "28" + }, + "4850": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "SWAP1", + "path": "28" + }, + "4851": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "DUP2", + "path": "28" + }, + "4852": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "SWAP1", + "path": "28" + }, + "4853": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "SUB", + "path": "28" + }, + "4854": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "PUSH1", + "path": "28", + "value": "0x64" + }, + "4856": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "ADD", + "path": "28" + }, + "4857": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "SWAP1", + "path": "28" + }, + "4858": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "REVERT", + "path": "28" + }, + "4859": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2252, 2302], + "op": "JUMPDEST", + "path": "28" + }, + "4860": { + "op": "PUSH1", + "value": "0x1" + }, + "4862": { + "op": "PUSH8", + "value": "0x800000000000011" + }, + "4871": { + "op": "PUSH1", + "value": "0xC0" + }, + "4873": { + "op": "SHL" + }, + "4874": { + "op": "ADD" + }, + "4875": { + "offset": [2320, 2329], + "op": "DUP2", + "path": "28" + }, + "4876": { + "offset": [2320, 2358], + "op": "LT", + "path": "28" + }, + "4877": { + "offset": [2312, 2386], + "op": "PUSH2", + "path": "28", + "value": "0x1357" + }, + "4880": { + "offset": [2312, 2386], + "op": "JUMPI", + "path": "28" + }, + "4881": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "4883": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "DUP1", + "path": "28" + }, + "4884": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "MLOAD", + "path": "28" + }, + "4885": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "4889": { + "op": "PUSH1", + "value": "0xE5" + }, + "4891": { + "op": "SHL" + }, + "4892": { + "offset": [2312, 2386], + "op": "DUP2", + "path": "28" + }, + "4893": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "MSTORE", + "path": "28" + }, + "4894": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "4896": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "4898": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "DUP3", + "path": "28" + }, + "4899": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "ADD", + "path": "28" + }, + "4900": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "MSTORE", + "path": "28" + }, + "4901": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "PUSH1", + "path": "28", + "value": "0x17" + }, + "4903": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "PUSH1", + "path": "28", + "value": "0x24" + }, + "4905": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "DUP3", + "path": "28" + }, + "4906": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "ADD", + "path": "28" + }, + "4907": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "MSTORE", + "path": "28" + }, + "4908": { + "op": "PUSH23", + "value": "0x4C325F414444524553535F4F55545F4F465F52414E4745" + }, + "4932": { + "op": "PUSH1", + "value": "0x48" + }, + "4934": { + "op": "SHL" + }, + "4935": { + "offset": [2312, 2386], + "op": "PUSH1", + "path": "28", + "value": "0x44" + }, + "4937": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "DUP3", + "path": "28" + }, + "4938": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "ADD", + "path": "28" + }, + "4939": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "MSTORE", + "path": "28" + }, + "4940": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "SWAP1", + "path": "28" + }, + "4941": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "MLOAD", + "path": "28" + }, + "4942": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "SWAP1", + "path": "28" + }, + "4943": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "DUP2", + "path": "28" + }, + "4944": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "SWAP1", + "path": "28" + }, + "4945": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "SUB", + "path": "28" + }, + "4946": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "PUSH1", + "path": "28", + "value": "0x64" + }, + "4948": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "ADD", + "path": "28" + }, + "4949": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "SWAP1", + "path": "28" + }, + "4950": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "REVERT", + "path": "28" + }, + "4951": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [2312, 2386], + "op": "JUMPDEST", + "path": "28" + }, + "4952": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3464, 3476], + "op": "PUSH2", + "path": "28", + "statement": 58, + "value": "0x135F" + }, + "4955": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3464, 3474], + "op": "PUSH2", + "path": "28", + "value": "0x18E2" + }, + "4958": { + "fn": "StarknetTokenBridge.sendMessage", + "jump": "i", + "offset": [3464, 3476], + "op": "JUMP", + "path": "28" + }, + "4959": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3464, 3476], + "op": "JUMPDEST", + "path": "28" + }, + "4960": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3454, 3460], + "op": "DUP4", + "path": "28" + }, + "4961": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3454, 3476], + "op": "GT", + "path": "28" + }, + "4962": { + "branch": 98, + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3454, 3476], + "op": "ISZERO", + "path": "28" + }, + "4963": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "PUSH2", + "path": "28", + "value": "0x139D" + }, + "4966": { + "branch": 98, + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "JUMPI", + "path": "28" + }, + "4967": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "4969": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "MLOAD", + "path": "28" + }, + "4970": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "4974": { + "op": "PUSH1", + "value": "0xE5" + }, + "4976": { + "op": "SHL" + }, + "4977": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "DUP2", + "path": "28" + }, + "4978": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "MSTORE", + "path": "28" + }, + "4979": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "4981": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "ADD", + "path": "28" + }, + "4982": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "DUP1", + "path": "28" + }, + "4983": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "DUP1", + "path": "28" + }, + "4984": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "4986": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "ADD", + "path": "28" + }, + "4987": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "DUP3", + "path": "28" + }, + "4988": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "DUP2", + "path": "28" + }, + "4989": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "SUB", + "path": "28" + }, + "4990": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "DUP3", + "path": "28" + }, + "4991": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "MSTORE", + "path": "28" + }, + "4992": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "PUSH1", + "path": "28", + "value": "0x24" + }, + "4994": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "DUP2", + "path": "28" + }, + "4995": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "MSTORE", + "path": "28" + }, + "4996": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "4998": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "ADD", + "path": "28" + }, + "4999": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "DUP1", + "path": "28" + }, + "5000": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "PUSH2", + "path": "28", + "value": "0x19AA" + }, + "5003": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "PUSH1", + "path": "28", + "value": "0x24" + }, + "5005": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "SWAP2", + "path": "28" + }, + "5006": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "CODECOPY", + "path": "28" + }, + "5007": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "5009": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "ADD", + "path": "28" + }, + "5010": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "SWAP2", + "path": "28" + }, + "5011": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "POP", + "path": "28" + }, + "5012": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "POP", + "path": "28" + }, + "5013": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "5015": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "MLOAD", + "path": "28" + }, + "5016": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "DUP1", + "path": "28" + }, + "5017": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "SWAP2", + "path": "28" + }, + "5018": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "SUB", + "path": "28" + }, + "5019": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "SWAP1", + "path": "28" + }, + "5020": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "REVERT", + "path": "28" + }, + "5021": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3446, 3517], + "op": "JUMPDEST", + "path": "28" + }, + "5022": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "PUSH1", + "path": "28", + "statement": 59, + "value": "0x40" + }, + "5024": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "DUP1", + "path": "28" + }, + "5025": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "MLOAD", + "path": "28" + }, + "5026": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3543, 3553], + "op": "CALLER", + "path": "28" + }, + "5027": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "DUP2", + "path": "28" + }, + "5028": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "MSTORE", + "path": "28" + }, + "5029": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "5031": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "DUP2", + "path": "28" + }, + "5032": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "ADD", + "path": "28" + }, + "5033": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "DUP6", + "path": "28" + }, + "5034": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "SWAP1", + "path": "28" + }, + "5035": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "MSTORE", + "path": "28" + }, + "5036": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "DUP1", + "path": "28" + }, + "5037": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "DUP3", + "path": "28" + }, + "5038": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "ADD", + "path": "28" + }, + "5039": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "DUP5", + "path": "28" + }, + "5040": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "SWAP1", + "path": "28" + }, + "5041": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "MSTORE", + "path": "28" + }, + "5042": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "SWAP1", + "path": "28" + }, + "5043": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "MLOAD", + "path": "28" + }, + "5044": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "PUSH32", + "path": "28", + "value": "0x9DBB0E7DDA3E09710CE75B801ADDC87CF9D9C6C581641B3275FCA409AD086C62" + }, + "5077": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "SWAP2", + "path": "28" + }, + "5078": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "DUP2", + "path": "28" + }, + "5079": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "SWAP1", + "path": "28" + }, + "5080": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "SUB", + "path": "28" + }, + "5081": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "PUSH1", + "path": "28", + "value": "0x60" + }, + "5083": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "ADD", + "path": "28" + }, + "5084": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "SWAP1", + "path": "28" + }, + "5085": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3532, 3575], + "op": "LOG1", + "path": "28" + }, + "5086": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "5088": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "DUP1", + "path": "28" + }, + "5089": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "MLOAD", + "path": "28" + }, + "5090": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3627, 3628], + "op": "PUSH1", + "path": "28", + "value": "0x3" + }, + "5092": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "DUP1", + "path": "28" + }, + "5093": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "DUP3", + "path": "28" + }, + "5094": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "MSTORE", + "path": "28" + }, + "5095": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "PUSH1", + "path": "28", + "value": "0x80" + }, + "5097": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "DUP3", + "path": "28" + }, + "5098": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "ADD", + "path": "28" + }, + "5099": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "SWAP1", + "path": "28" + }, + "5100": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "SWAP3", + "path": "28" + }, + "5101": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "MSTORE", + "path": "28" + }, + "5102": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3586, 3610], + "op": "PUSH1", + "path": "28", + "value": "0x60" + }, + "5104": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3586, 3610], + "op": "SWAP2", + "path": "28" + }, + "5105": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "5107": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "DUP3", + "path": "28" + }, + "5108": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "ADD", + "path": "28" + }, + "5109": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3586, 3610], + "op": "DUP4", + "path": "28" + }, + "5110": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3586, 3610], + "op": "DUP1", + "path": "28" + }, + "5111": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "CALLDATASIZE", + "path": "28" + }, + "5112": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "DUP4", + "path": "28" + }, + "5113": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "CALLDATACOPY", + "path": "28" + }, + "5114": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "ADD", + "path": "28" + }, + "5115": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "SWAP1", + "path": "28" + }, + "5116": { + "op": "POP" + }, + "5117": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3613, 3629], + "op": "POP", + "path": "28" + }, + "5118": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3586, 3629], + "op": "SWAP1", + "path": "28" + }, + "5119": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3586, 3629], + "op": "POP", + "path": "28" + }, + "5120": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3652, 3663], + "op": "DUP3", + "path": "28", + "statement": 60 + }, + "5121": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3646], + "op": "DUP2", + "path": "28" + }, + "5122": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3647, 3648], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "5124": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "DUP2", + "path": "28" + }, + "5125": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "MLOAD", + "path": "28" + }, + "5126": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "DUP2", + "path": "28" + }, + "5127": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "LT", + "path": "28" + }, + "5128": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "PUSH2", + "path": "28", + "value": "0x140D" + }, + "5131": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "JUMPI", + "path": "28" + }, + "5132": { + "dev": "Index out of range", + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "INVALID", + "path": "28" + }, + "5133": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "JUMPDEST", + "path": "28" + }, + "5134": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "5136": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "SWAP1", + "path": "28" + }, + "5137": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "DUP2", + "path": "28" + }, + "5138": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "MUL", + "path": "28" + }, + "5139": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "SWAP2", + "path": "28" + }, + "5140": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "SWAP1", + "path": "28" + }, + "5141": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "SWAP2", + "path": "28" + }, + "5142": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "ADD", + "path": "28" + }, + "5143": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3649], + "op": "ADD", + "path": "28" + }, + "5144": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3639, 3663], + "op": "MSTORE", + "path": "28" + }, + "5145": { + "op": "PUSH1", + "value": "0x1" + }, + "5147": { + "op": "PUSH1", + "value": "0x80" + }, + "5149": { + "op": "SHL" + }, + "5150": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3686, 3692], + "op": "DUP5", + "path": "28", + "statement": 61 + }, + "5151": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3686, 3712], + "op": "MOD", + "path": "28" + }, + "5152": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3680], + "op": "DUP2", + "path": "28" + }, + "5153": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3681, 3682], + "op": "PUSH1", + "path": "28", + "value": "0x1" + }, + "5155": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "DUP2", + "path": "28" + }, + "5156": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "MLOAD", + "path": "28" + }, + "5157": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "DUP2", + "path": "28" + }, + "5158": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "LT", + "path": "28" + }, + "5159": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "PUSH2", + "path": "28", + "value": "0x142C" + }, + "5162": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "JUMPI", + "path": "28" + }, + "5163": { + "dev": "Index out of range", + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "INVALID", + "path": "28" + }, + "5164": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "JUMPDEST", + "path": "28" + }, + "5165": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "5167": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "SWAP1", + "path": "28" + }, + "5168": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "DUP2", + "path": "28" + }, + "5169": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "MUL", + "path": "28" + }, + "5170": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "SWAP2", + "path": "28" + }, + "5171": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "SWAP1", + "path": "28" + }, + "5172": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "SWAP2", + "path": "28" + }, + "5173": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "ADD", + "path": "28" + }, + "5174": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3683], + "op": "ADD", + "path": "28" + }, + "5175": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3673, 3712], + "op": "MSTORE", + "path": "28" + }, + "5176": { + "op": "PUSH1", + "value": "0x1" + }, + "5178": { + "op": "PUSH1", + "value": "0x80" + }, + "5180": { + "op": "SHL" + }, + "5181": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3735, 3741], + "op": "DUP5", + "path": "28", + "statement": 62 + }, + "5182": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3735, 3761], + "op": "DIV", + "path": "28" + }, + "5183": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3729], + "op": "DUP2", + "path": "28" + }, + "5184": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3730, 3731], + "op": "PUSH1", + "path": "28", + "value": "0x2" + }, + "5186": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3732], + "op": "DUP2", + "path": "28" + }, + "5187": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3732], + "op": "MLOAD", + "path": "28" + }, + "5188": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3732], + "op": "DUP2", + "path": "28" + }, + "5189": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3732], + "op": "LT", + "path": "28" + }, + "5190": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3732], + "op": "PUSH2", + "path": "28", + "value": "0x144B" + }, + "5193": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3732], + "op": "JUMPI", + "path": "28" + }, + "5194": { + "dev": "Index out of range", + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3732], + "op": "INVALID", + "path": "28" + }, + "5195": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3732], + "op": "JUMPDEST", + "path": "28" + }, + "5196": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3732], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "5198": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3732], + "op": "MUL", + "path": "28" + }, + "5199": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3732], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "5201": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3732], + "op": "ADD", + "path": "28" + }, + "5202": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3732], + "op": "ADD", + "path": "28" + }, + "5203": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3761], + "op": "DUP2", + "path": "28" + }, + "5204": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3761], + "op": "DUP2", + "path": "28" + }, + "5205": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3761], + "op": "MSTORE", + "path": "28" + }, + "5206": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3761], + "op": "POP", + "path": "28" + }, + "5207": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3722, 3761], + "op": "POP", + "path": "28" + }, + "5208": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3790], + "op": "PUSH2", + "path": "28", + "statement": 63, + "value": "0x145F" + }, + "5211": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3788], + "op": "PUSH2", + "path": "28", + "value": "0x15FC" + }, + "5214": { + "fn": "StarknetTokenBridge.sendMessage", + "jump": "i", + "offset": [3771, 3790], + "op": "JUMP", + "path": "28" + }, + "5215": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3790], + "op": "JUMPDEST", + "path": "28" + }, + "5216": { + "op": "PUSH1", + "value": "0x1" + }, + "5218": { + "op": "PUSH1", + "value": "0x1" + }, + "5220": { + "op": "PUSH1", + "value": "0xA0" + }, + "5222": { + "op": "SHL" + }, + "5223": { + "op": "SUB" + }, + "5224": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3806], + "op": "AND", + "path": "28" + }, + "5225": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3806], + "op": "PUSH4", + "path": "28", + "value": "0x3E3AA6C5" + }, + "5230": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3807, 3824], + "op": "PUSH2", + "path": "28", + "value": "0x1475" + }, + "5233": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3807, 3822], + "op": "PUSH2", + "path": "28", + "value": "0x11E8" + }, + "5236": { + "fn": "StarknetTokenBridge.sendMessage", + "jump": "i", + "offset": [3807, 3824], + "op": "JUMP", + "path": "28" + }, + "5237": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3807, 3824], + "op": "JUMPDEST", + "path": "28" + }, + "5238": { + "offset": [2016, 2092], + "op": "PUSH32", + "path": "28", + "value": "0x2D757788A8D8D6F21D1CD40BCE38A8222D70654214E96FF95D8086E684FBEE5" + }, + "5271": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3836, 3843], + "op": "DUP5", + "path": "28" + }, + "5272": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "5274": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "MLOAD", + "path": "28" + }, + "5275": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP5", + "path": "28" + }, + "5276": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH4", + "path": "28", + "value": "0xFFFFFFFF" + }, + "5281": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "AND", + "path": "28" + }, + "5282": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0xE0" + }, + "5284": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "SHL", + "path": "28" + }, + "5285": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP2", + "path": "28" + }, + "5286": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "MSTORE", + "path": "28" + }, + "5287": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x4" + }, + "5289": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ADD", + "path": "28" + }, + "5290": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP1", + "path": "28" + }, + "5291": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP5", + "path": "28" + }, + "5292": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP2", + "path": "28" + }, + "5293": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "MSTORE", + "path": "28" + }, + "5294": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "5296": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ADD", + "path": "28" + }, + "5297": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP4", + "path": "28" + }, + "5298": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP2", + "path": "28" + }, + "5299": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "MSTORE", + "path": "28" + }, + "5300": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "5302": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ADD", + "path": "28" + }, + "5303": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP1", + "path": "28" + }, + "5304": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "5306": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ADD", + "path": "28" + }, + "5307": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP3", + "path": "28" + }, + "5308": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP2", + "path": "28" + }, + "5309": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "SUB", + "path": "28" + }, + "5310": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP3", + "path": "28" + }, + "5311": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "MSTORE", + "path": "28" + }, + "5312": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP4", + "path": "28" + }, + "5313": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP2", + "path": "28" + }, + "5314": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP2", + "path": "28" + }, + "5315": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "MLOAD", + "path": "28" + }, + "5316": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP2", + "path": "28" + }, + "5317": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "MSTORE", + "path": "28" + }, + "5318": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "5320": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ADD", + "path": "28" + }, + "5321": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "SWAP2", + "path": "28" + }, + "5322": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "5323": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP1", + "path": "28" + }, + "5324": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "MLOAD", + "path": "28" + }, + "5325": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "SWAP1", + "path": "28" + }, + "5326": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "5328": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ADD", + "path": "28" + }, + "5329": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "SWAP1", + "path": "28" + }, + "5330": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "5332": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "MUL", + "path": "28" + }, + "5333": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP1", + "path": "28" + }, + "5334": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP4", + "path": "28" + }, + "5335": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP4", + "path": "28" + }, + "5336": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "5338": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "JUMPDEST", + "path": "28" + }, + "5339": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP4", + "path": "28" + }, + "5340": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP2", + "path": "28" + }, + "5341": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "LT", + "path": "28" + }, + "5342": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ISZERO", + "path": "28" + }, + "5343": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH2", + "path": "28", + "value": "0x14F2" + }, + "5346": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "JUMPI", + "path": "28" + }, + "5347": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP2", + "path": "28" + }, + "5348": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP2", + "path": "28" + }, + "5349": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ADD", + "path": "28" + }, + "5350": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "MLOAD", + "path": "28" + }, + "5351": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP4", + "path": "28" + }, + "5352": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP3", + "path": "28" + }, + "5353": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ADD", + "path": "28" + }, + "5354": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "MSTORE", + "path": "28" + }, + "5355": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "5357": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ADD", + "path": "28" + }, + "5358": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH2", + "path": "28", + "value": "0x14DA" + }, + "5361": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "JUMP", + "path": "28" + }, + "5362": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "JUMPDEST", + "path": "28" + }, + "5363": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "5364": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "5365": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "5366": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "5367": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "SWAP1", + "path": "28" + }, + "5368": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "5369": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ADD", + "path": "28" + }, + "5370": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "SWAP5", + "path": "28" + }, + "5371": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "5372": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "5373": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "5374": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "5375": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "5376": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "5378": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "5380": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "MLOAD", + "path": "28" + }, + "5381": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP1", + "path": "28" + }, + "5382": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP4", + "path": "28" + }, + "5383": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "SUB", + "path": "28" + }, + "5384": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP2", + "path": "28" + }, + "5385": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "5387": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP8", + "path": "28" + }, + "5388": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP1", + "path": "28" + }, + "5389": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "EXTCODESIZE", + "path": "28" + }, + "5390": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ISZERO", + "path": "28" + }, + "5391": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP1", + "path": "28" + }, + "5392": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ISZERO", + "path": "28" + }, + "5393": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH2", + "path": "28", + "value": "0x1519" + }, + "5396": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "JUMPI", + "path": "28" + }, + "5397": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "5399": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP1", + "path": "28" + }, + "5400": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "REVERT", + "path": "28" + }, + "5401": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "JUMPDEST", + "path": "28" + }, + "5402": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "5403": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "GAS", + "path": "28" + }, + "5404": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "CALL", + "path": "28" + }, + "5405": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ISZERO", + "path": "28" + }, + "5406": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP1", + "path": "28" + }, + "5407": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ISZERO", + "path": "28" + }, + "5408": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH2", + "path": "28", + "value": "0x152D" + }, + "5411": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "JUMPI", + "path": "28" + }, + "5412": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "RETURNDATASIZE", + "path": "28" + }, + "5413": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "5415": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP1", + "path": "28" + }, + "5416": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "RETURNDATACOPY", + "path": "28" + }, + "5417": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "RETURNDATASIZE", + "path": "28" + }, + "5418": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "5420": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "REVERT", + "path": "28" + }, + "5421": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "JUMPDEST", + "path": "28" + }, + "5422": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "5423": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "5424": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "5425": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "POP", + "path": "28" + }, + "5426": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x40" + }, + "5428": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "MLOAD", + "path": "28" + }, + "5429": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "RETURNDATASIZE", + "path": "28" + }, + "5430": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x20" + }, + "5432": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP2", + "path": "28" + }, + "5433": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "LT", + "path": "28" + }, + "5434": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "ISZERO", + "path": "28" + }, + "5435": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH2", + "path": "28", + "value": "0xD7E" + }, + "5438": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "JUMPI", + "path": "28" + }, + "5439": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "PUSH1", + "path": "28", + "value": "0x0" + }, + "5441": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "DUP1", + "path": "28" + }, + "5442": { + "fn": "StarknetTokenBridge.sendMessage", + "offset": [3771, 3844], + "op": "REVERT", + "path": "28" + }, + "5443": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1742, 1852], + "op": "JUMPDEST", + "path": "29" + }, + "5444": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1796, 1845], + "op": "PUSH2", + "path": "29", + "statement": 64, + "value": "0x3BA" + }, + "5447": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "5449": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "MLOAD", + "path": "29" + }, + "5450": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "DUP1", + "path": "29" + }, + "5451": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "PUSH1", + "path": "29", + "value": "0x60" + }, + "5453": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "ADD", + "path": "29" + }, + "5454": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "5456": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "MSTORE", + "path": "29" + }, + "5457": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "DUP1", + "path": "29" + }, + "5458": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "PUSH1", + "path": "29", + "value": "0x21" + }, + "5460": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "DUP2", + "path": "29" + }, + "5461": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "MSTORE", + "path": "29" + }, + "5462": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "PUSH1", + "path": "29", + "value": "0x20" + }, + "5464": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "ADD", + "path": "29" + }, + "5465": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "PUSH2", + "path": "29", + "value": "0x1A1C" + }, + "5468": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "PUSH1", + "path": "29", + "value": "0x21" + }, + "5470": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "SWAP2", + "path": "29" + }, + "5471": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1822, 1837], + "op": "CODECOPY", + "path": "29" + }, + "5472": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1839, 1844], + "op": "DUP3", + "path": "29" + }, + "5473": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1796, 1821], + "op": "PUSH2", + "path": "29", + "value": "0x1798" + }, + "5476": { + "fn": "StarknetTokenStorage.maxDeposit", + "jump": "i", + "offset": [1796, 1845], + "op": "JUMP", + "path": "29" + }, + "5477": { + "fn": "Governance.cancelNomination", + "offset": [2118, 2326], + "op": "JUMPDEST", + "path": "1" + }, + "5478": { + "offset": [434, 456], + "op": "PUSH2", + "path": "8", + "value": "0x156E" + }, + "5481": { + "offset": [445, 455], + "op": "CALLER", + "path": "8" + }, + "5482": { + "offset": [434, 444], + "op": "PUSH2", + "path": "8", + "value": "0xB00" + }, + "5485": { + "jump": "i", + "offset": [434, 456], + "op": "JUMP", + "path": "8" + }, + "5486": { + "branch": 87, + "fn": "Governance.cancelNomination", + "offset": [434, 456], + "op": "JUMPDEST", + "path": "8" + }, + "5487": { + "offset": [426, 476], + "op": "PUSH2", + "path": "8", + "value": "0x15B1" + }, + "5490": { + "branch": 87, + "offset": [426, 476], + "op": "JUMPI", + "path": "8" + }, + "5491": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x40" + }, + "5493": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "DUP1", + "path": "8" + }, + "5494": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "MLOAD", + "path": "8" + }, + "5495": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "5499": { + "op": "PUSH1", + "value": "0xE5" + }, + "5501": { + "op": "SHL" + }, + "5502": { + "offset": [426, 476], + "op": "DUP2", + "path": "8" + }, + "5503": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "5504": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x20" + }, + "5506": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x4" + }, + "5508": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "5509": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "5510": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "5511": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0xF" + }, + "5513": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x24" + }, + "5515": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "5516": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "5517": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "5518": { + "op": "PUSH15", + "value": "0x4F4E4C595F474F5645524E414E4345" + }, + "5534": { + "op": "PUSH1", + "value": "0x88" + }, + "5536": { + "op": "SHL" + }, + "5537": { + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x44" + }, + "5539": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "DUP3", + "path": "8" + }, + "5540": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "5541": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "MSTORE", + "path": "8" + }, + "5542": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "5543": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "MLOAD", + "path": "8" + }, + "5544": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "5545": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "DUP2", + "path": "8" + }, + "5546": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "5547": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "SUB", + "path": "8" + }, + "5548": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "PUSH1", + "path": "8", + "value": "0x64" + }, + "5550": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "ADD", + "path": "8" + }, + "5551": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "SWAP1", + "path": "8" + }, + "5552": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "REVERT", + "path": "8" + }, + "5553": { + "fn": "Governance.cancelNomination", + "offset": [426, 476], + "op": "JUMPDEST", + "path": "8" + }, + "5554": { + "fn": "Governance.cancelNomination", + "offset": [2180, 2212], + "op": "PUSH1", + "path": "1", + "value": "0x0" + }, + "5556": { + "fn": "Governance.cancelNomination", + "offset": [2215, 2234], + "op": "PUSH2", + "path": "1", + "value": "0x15BB" + }, + "5559": { + "fn": "Governance.cancelNomination", + "offset": [2215, 2232], + "op": "PUSH2", + "path": "1", + "value": "0x161F" + }, + "5562": { + "fn": "Governance.cancelNomination", + "jump": "i", + "offset": [2215, 2234], + "op": "JUMP", + "path": "1" + }, + "5563": { + "fn": "Governance.cancelNomination", + "offset": [2215, 2234], + "op": "JUMPDEST", + "path": "1" + }, + "5564": { + "fn": "Governance.cancelNomination", + "offset": [2244, 2265], + "op": "PUSH1", + "path": "1", + "statement": 65, + "value": "0x1" + }, + "5566": { + "fn": "Governance.cancelNomination", + "offset": [2244, 2265], + "op": "DUP2", + "path": "1" + }, + "5567": { + "fn": "Governance.cancelNomination", + "offset": [2244, 2265], + "op": "ADD", + "path": "1" + }, + "5568": { + "fn": "Governance.cancelNomination", + "offset": [2244, 2280], + "op": "DUP1", + "path": "1" + }, + "5569": { + "fn": "Governance.cancelNomination", + "offset": [2244, 2280], + "op": "SLOAD", + "path": "1" + }, + "5570": { + "op": "PUSH1", + "value": "0x1" + }, + "5572": { + "op": "PUSH1", + "value": "0x1" + }, + "5574": { + "op": "PUSH1", + "value": "0xA0" + }, + "5576": { + "op": "SHL" + }, + "5577": { + "op": "SUB" + }, + "5578": { + "op": "NOT" + }, + "5579": { + "fn": "Governance.cancelNomination", + "offset": [2244, 2280], + "op": "AND", + "path": "1" + }, + "5580": { + "fn": "Governance.cancelNomination", + "offset": [2244, 2280], + "op": "SWAP1", + "path": "1" + }, + "5581": { + "fn": "Governance.cancelNomination", + "offset": [2244, 2280], + "op": "SSTORE", + "path": "1" + }, + "5582": { + "fn": "Governance.cancelNomination", + "offset": [2295, 2319], + "op": "PUSH1", + "path": "1", + "statement": 66, + "value": "0x40" + }, + "5584": { + "fn": "Governance.cancelNomination", + "offset": [2295, 2319], + "op": "MLOAD", + "path": "1" + }, + "5585": { + "fn": "Governance.cancelNomination", + "offset": [2180, 2234], + "op": "SWAP1", + "path": "1" + }, + "5586": { + "fn": "Governance.cancelNomination", + "offset": [2180, 2234], + "op": "SWAP2", + "path": "1" + }, + "5587": { + "op": "POP" + }, + "5588": { + "fn": "Governance.cancelNomination", + "offset": [2295, 2319], + "op": "PUSH32", + "path": "1", + "value": "0x7A8DC7DD7FFFB43C4807438FA62729225156941E641FD877938F4EDADE3429F5" + }, + "5621": { + "fn": "Governance.cancelNomination", + "offset": [2295, 2319], + "op": "SWAP1", + "path": "1" + }, + "5622": { + "fn": "Governance.cancelNomination", + "offset": [2276, 2279], + "op": "PUSH1", + "path": "1", + "value": "0x0" + }, + "5624": { + "fn": "Governance.cancelNomination", + "offset": [2276, 2279], + "op": "SWAP1", + "path": "1" + }, + "5625": { + "fn": "Governance.cancelNomination", + "offset": [2295, 2319], + "op": "LOG1", + "path": "1" + }, + "5626": { + "offset": [486, 487], + "op": "POP", + "path": "8" + }, + "5627": { + "fn": "Governance.cancelNomination", + "jump": "o", + "offset": [2118, 2326], + "op": "JUMP", + "path": "1" + }, + "5628": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1287, 1455], + "op": "JUMPDEST", + "path": "29" + }, + "5629": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1339, 1357], + "op": "PUSH1", + "path": "29", + "value": "0x0" + }, + "5631": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1395, 1447], + "op": "PUSH2", + "path": "29", + "statement": 67, + "value": "0x120B" + }, + "5634": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "5636": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "MLOAD", + "path": "29" + }, + "5637": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "DUP1", + "path": "29" + }, + "5638": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "PUSH1", + "path": "29", + "value": "0x60" + }, + "5640": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "ADD", + "path": "29" + }, + "5641": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "5643": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "MSTORE", + "path": "29" + }, + "5644": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "DUP1", + "path": "29" + }, + "5645": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "PUSH1", + "path": "29", + "value": "0x28" + }, + "5647": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "DUP2", + "path": "29" + }, + "5648": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "MSTORE", + "path": "29" + }, + "5649": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "PUSH1", + "path": "29", + "value": "0x20" + }, + "5651": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "ADD", + "path": "29" + }, + "5652": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "PUSH2", + "path": "29", + "value": "0x1982" + }, + "5655": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "PUSH1", + "path": "29", + "value": "0x28" + }, + "5657": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "SWAP2", + "path": "29" + }, + "5658": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1424, 1446], + "op": "CODECOPY", + "path": "29" + }, + "5659": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1395, 1423], + "op": "PUSH2", + "path": "29", + "value": "0x1812" + }, + "5662": { + "fn": "StarknetTokenStorage.messagingContract", + "jump": "i", + "offset": [1395, 1447], + "op": "JUMP", + "path": "29" + }, + "5663": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [361, 611], + "op": "JUMPDEST", + "path": "34" + }, + "5664": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [422, 454], + "op": "PUSH1", + "path": "34", + "value": "0x0" + }, + "5666": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [466, 482], + "op": "DUP1", + "path": "34" + }, + "5667": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "PUSH1", + "path": "34", + "value": "0x40" + }, + "5669": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "MLOAD", + "path": "34" + }, + "5670": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "DUP1", + "path": "34" + }, + "5671": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "PUSH1", + "path": "34", + "value": "0x40" + }, + "5673": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "ADD", + "path": "34" + }, + "5674": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "PUSH1", + "path": "34", + "value": "0x40" + }, + "5676": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "MSTORE", + "path": "34" + }, + "5677": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "DUP1", + "path": "34" + }, + "5678": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "PUSH1", + "path": "34", + "value": "0x1C" + }, + "5680": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "DUP2", + "path": "34" + }, + "5681": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "MSTORE", + "path": "34" + }, + "5682": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "PUSH1", + "path": "34", + "value": "0x20" + }, + "5684": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "ADD", + "path": "34" + }, + "5685": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "PUSH32", + "path": "34", + "value": "0x535441524B4E45545F312E305F474F5645524E414E43455F494E464F00000000" + }, + "5718": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "DUP2", + "path": "34" + }, + "5719": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "MSTORE", + "path": "34" + }, + "5720": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [512, 540], + "op": "POP", + "path": "34" + }, + "5721": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "PUSH1", + "path": "34", + "value": "0x40" + }, + "5723": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "MLOAD", + "path": "34" + }, + "5724": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "PUSH1", + "path": "34", + "value": "0x20" + }, + "5726": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "ADD", + "path": "34" + }, + "5727": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP1", + "path": "34" + }, + "5728": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP3", + "path": "34" + }, + "5729": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP1", + "path": "34" + }, + "5730": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "MLOAD", + "path": "34" + }, + "5731": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "SWAP1", + "path": "34" + }, + "5732": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "PUSH1", + "path": "34", + "value": "0x20" + }, + "5734": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "ADD", + "path": "34" + }, + "5735": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "SWAP1", + "path": "34" + }, + "5736": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP1", + "path": "34" + }, + "5737": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP4", + "path": "34" + }, + "5738": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP4", + "path": "34" + }, + "5739": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "JUMPDEST", + "path": "34" + }, + "5740": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "PUSH1", + "path": "34", + "value": "0x20" + }, + "5742": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP4", + "path": "34" + }, + "5743": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "LT", + "path": "34" + }, + "5744": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "PUSH2", + "path": "34", + "value": "0x168A" + }, + "5747": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "JUMPI", + "path": "34" + }, + "5748": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP1", + "path": "34" + }, + "5749": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "MLOAD", + "path": "34" + }, + "5750": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP3", + "path": "34" + }, + "5751": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "MSTORE", + "path": "34" + }, + "5752": { + "op": "PUSH1", + "value": "0x1F" + }, + "5754": { + "op": "NOT" + }, + "5755": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "SWAP1", + "path": "34" + }, + "5756": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "SWAP3", + "path": "34" + }, + "5757": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "ADD", + "path": "34" + }, + "5758": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "SWAP2", + "path": "34" + }, + "5759": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "PUSH1", + "path": "34", + "value": "0x20" + }, + "5761": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "SWAP2", + "path": "34" + }, + "5762": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP3", + "path": "34" + }, + "5763": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "ADD", + "path": "34" + }, + "5764": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "SWAP2", + "path": "34" + }, + "5765": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "ADD", + "path": "34" + }, + "5766": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "PUSH2", + "path": "34", + "value": "0x166B" + }, + "5769": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "JUMP", + "path": "34" + }, + "5770": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "JUMPDEST", + "path": "34" + }, + "5771": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "PUSH1", + "path": "34", + "value": "0x1" + }, + "5773": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP4", + "path": "34" + }, + "5774": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "PUSH1", + "path": "34", + "value": "0x20" + }, + "5776": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "SUB", + "path": "34" + }, + "5777": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "PUSH2", + "path": "34", + "value": "0x100" + }, + "5780": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "EXP", + "path": "34" + }, + "5781": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "SUB", + "path": "34" + }, + "5782": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP1", + "path": "34" + }, + "5783": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "NOT", + "path": "34" + }, + "5784": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP3", + "path": "34" + }, + "5785": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "MLOAD", + "path": "34" + }, + "5786": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "AND", + "path": "34" + }, + "5787": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP2", + "path": "34" + }, + "5788": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP5", + "path": "34" + }, + "5789": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "MLOAD", + "path": "34" + }, + "5790": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "AND", + "path": "34" + }, + "5791": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP1", + "path": "34" + }, + "5792": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP3", + "path": "34" + }, + "5793": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "OR", + "path": "34" + }, + "5794": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP6", + "path": "34" + }, + "5795": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "MSTORE", + "path": "34" + }, + "5796": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "POP", + "path": "34" + }, + "5797": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "POP", + "path": "34" + }, + "5798": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "POP", + "path": "34" + }, + "5799": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "POP", + "path": "34" + }, + "5800": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "POP", + "path": "34" + }, + "5801": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "POP", + "path": "34" + }, + "5802": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "SWAP1", + "path": "34" + }, + "5803": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "POP", + "path": "34" + }, + "5804": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "ADD", + "path": "34" + }, + "5805": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "SWAP2", + "path": "34" + }, + "5806": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "POP", + "path": "34" + }, + "5807": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "POP", + "path": "34" + }, + "5808": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "PUSH1", + "path": "34", + "value": "0x40" + }, + "5810": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "MLOAD", + "path": "34" + }, + "5811": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "PUSH1", + "path": "34", + "value": "0x20" + }, + "5813": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP2", + "path": "34" + }, + "5814": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP4", + "path": "34" + }, + "5815": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "SUB", + "path": "34" + }, + "5816": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "SUB", + "path": "34" + }, + "5817": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "DUP2", + "path": "34" + }, + "5818": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "MSTORE", + "path": "34" + }, + "5819": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "SWAP1", + "path": "34" + }, + "5820": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "PUSH1", + "path": "34", + "value": "0x40" + }, + "5822": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [495, 541], + "op": "MSTORE", + "path": "34" + }, + "5823": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [485, 542], + "op": "DUP1", + "path": "34" + }, + "5824": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [485, 542], + "op": "MLOAD", + "path": "34" + }, + "5825": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [485, 542], + "op": "SWAP1", + "path": "34" + }, + "5826": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [485, 542], + "op": "PUSH1", + "path": "34", + "value": "0x20" + }, + "5828": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [485, 542], + "op": "ADD", + "path": "34" + }, + "5829": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [485, 542], + "op": "KECCAK256", + "path": "34" + }, + "5830": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [466, 542], + "op": "SWAP1", + "path": "34" + }, + "5831": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [466, 542], + "op": "POP", + "path": "34" + }, + "5832": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [587, 595], + "op": "DUP1", + "path": "34" + }, + "5833": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [575, 595], + "op": "SWAP2", + "path": "34" + }, + "5834": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [575, 595], + "op": "POP", + "path": "34" + }, + "5835": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [561, 605], + "op": "POP", + "path": "34" + }, + "5836": { + "fn": "StarknetGovernance.getGovernanceInfo", + "offset": [561, 605], + "op": "SWAP1", + "path": "34" + }, + "5837": { + "fn": "StarknetGovernance.getGovernanceInfo", + "jump": "o", + "offset": [561, 605], + "op": "JUMP", + "path": "34" + }, + "5838": { + "fn": "Addresses.isContract", + "offset": [161, 351], + "op": "JUMPDEST", + "path": "11" + }, + "5839": { + "fn": "Addresses.isContract", + "offset": [290, 310], + "op": "EXTCODESIZE", + "path": "11" + }, + "5840": { + "fn": "Addresses.isContract", + "offset": [336, 344], + "op": "ISZERO", + "path": "11", + "statement": 68 + }, + "5841": { + "fn": "Addresses.isContract", + "offset": [336, 344], + "op": "ISZERO", + "path": "11" + }, + "5842": { + "fn": "Addresses.isContract", + "offset": [336, 344], + "op": "SWAP1", + "path": "11" + }, + "5843": { + "fn": "Addresses.isContract", + "jump": "o", + "offset": [161, 351], + "op": "JUMP", + "path": "11" + }, + "5844": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1485, 1614], + "op": "JUMPDEST", + "path": "29" + }, + "5845": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1545, 1607], + "op": "PUSH2", + "path": "29", + "statement": 69, + "value": "0x3BA" + }, + "5848": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "5850": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "MLOAD", + "path": "29" + }, + "5851": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "DUP1", + "path": "29" + }, + "5852": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "PUSH1", + "path": "29", + "value": "0x60" + }, + "5854": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "ADD", + "path": "29" + }, + "5855": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "5857": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "MSTORE", + "path": "29" + }, + "5858": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "DUP1", + "path": "29" + }, + "5859": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "PUSH1", + "path": "29", + "value": "0x29" + }, + "5861": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "DUP2", + "path": "29" + }, + "5862": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "MSTORE", + "path": "29" + }, + "5863": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "PUSH1", + "path": "29", + "value": "0x20" + }, + "5865": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "ADD", + "path": "29" + }, + "5866": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "PUSH2", + "path": "29", + "value": "0x1A3D" + }, + "5869": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "PUSH1", + "path": "29", + "value": "0x29" + }, + "5871": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "SWAP2", + "path": "29" + }, + "5872": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1578, 1595], + "op": "CODECOPY", + "path": "29" + }, + "5873": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1597, 1606], + "op": "DUP3", + "path": "29" + }, + "5874": { + "fn": "StarknetTokenStorage.bridgedToken", + "offset": [1545, 1577], + "op": "PUSH2", + "path": "29", + "value": "0x1905" + }, + "5877": { + "fn": "StarknetTokenStorage.bridgedToken", + "jump": "i", + "offset": [1545, 1607], + "op": "JUMP", + "path": "29" + }, + "5878": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [1985, 2144], + "op": "JUMPDEST", + "path": "29" + }, + "5879": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2061, 2137], + "op": "PUSH2", + "path": "29", + "statement": 70, + "value": "0x3BA" + }, + "5882": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "5884": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "MLOAD", + "path": "29" + }, + "5885": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "DUP1", + "path": "29" + }, + "5886": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "PUSH1", + "path": "29", + "value": "0x60" + }, + "5888": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "ADD", + "path": "29" + }, + "5889": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "5891": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "MSTORE", + "path": "29" + }, + "5892": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "DUP1", + "path": "29" + }, + "5893": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "PUSH1", + "path": "29", + "value": "0x28" + }, + "5895": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "DUP2", + "path": "29" + }, + "5896": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "MSTORE", + "path": "29" + }, + "5897": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "PUSH1", + "path": "29", + "value": "0x20" + }, + "5899": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "ADD", + "path": "29" + }, + "5900": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "PUSH2", + "path": "29", + "value": "0x1982" + }, + "5903": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "PUSH1", + "path": "29", + "value": "0x28" + }, + "5905": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "SWAP2", + "path": "29" + }, + "5906": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2094, 2116], + "op": "CODECOPY", + "path": "29" + }, + "5907": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2126, 2135], + "op": "DUP3", + "path": "29" + }, + "5908": { + "fn": "StarknetTokenStorage.messagingContract", + "offset": [2061, 2093], + "op": "PUSH2", + "path": "29", + "value": "0x1905" + }, + "5911": { + "fn": "StarknetTokenStorage.messagingContract", + "jump": "i", + "offset": [2061, 2137], + "op": "JUMP", + "path": "29" + }, + "5912": { + "fn": "Governance.addGovernor", + "offset": [2951, 3187], + "op": "JUMPDEST", + "path": "1" + }, + "5913": { + "fn": "Governance.addGovernor", + "offset": [3020, 3043], + "op": "PUSH2", + "path": "1", + "statement": 71, + "value": "0x1721" + }, + "5916": { + "fn": "Governance.addGovernor", + "offset": [3031, 3042], + "op": "DUP2", + "path": "1" + }, + "5917": { + "fn": "Governance.addGovernor", + "offset": [3020, 3030], + "op": "PUSH2", + "path": "1", + "value": "0xB00" + }, + "5920": { + "fn": "Governance.addGovernor", + "jump": "i", + "offset": [3020, 3043], + "op": "JUMP", + "path": "1" + }, + "5921": { + "fn": "Governance.addGovernor", + "offset": [3020, 3043], + "op": "JUMPDEST", + "path": "1" + }, + "5922": { + "branch": 86, + "fn": "Governance.addGovernor", + "offset": [3019, 3043], + "op": "ISZERO", + "path": "1" + }, + "5923": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "PUSH2", + "path": "1", + "value": "0x1766" + }, + "5926": { + "branch": 86, + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "JUMPI", + "path": "1" + }, + "5927": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "PUSH1", + "path": "1", + "value": "0x40" + }, + "5929": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "DUP1", + "path": "1" + }, + "5930": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "MLOAD", + "path": "1" + }, + "5931": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "5935": { + "op": "PUSH1", + "value": "0xE5" + }, + "5937": { + "op": "SHL" + }, + "5938": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "DUP2", + "path": "1" + }, + "5939": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "MSTORE", + "path": "1" + }, + "5940": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "PUSH1", + "path": "1", + "value": "0x20" + }, + "5942": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "PUSH1", + "path": "1", + "value": "0x4" + }, + "5944": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "DUP3", + "path": "1" + }, + "5945": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "ADD", + "path": "1" + }, + "5946": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "MSTORE", + "path": "1" + }, + "5947": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "PUSH1", + "path": "1", + "value": "0x10" + }, + "5949": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "PUSH1", + "path": "1", + "value": "0x24" + }, + "5951": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "DUP3", + "path": "1" + }, + "5952": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "ADD", + "path": "1" + }, + "5953": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "MSTORE", + "path": "1" + }, + "5954": { + "op": "PUSH16", + "value": "0x20A62922A0A22CAFA3A7AB22A92727A9" + }, + "5971": { + "op": "PUSH1", + "value": "0x81" + }, + "5973": { + "op": "SHL" + }, + "5974": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "PUSH1", + "path": "1", + "value": "0x44" + }, + "5976": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "DUP3", + "path": "1" + }, + "5977": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "ADD", + "path": "1" + }, + "5978": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "MSTORE", + "path": "1" + }, + "5979": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "SWAP1", + "path": "1" + }, + "5980": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "MLOAD", + "path": "1" + }, + "5981": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "SWAP1", + "path": "1" + }, + "5982": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "DUP2", + "path": "1" + }, + "5983": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "SWAP1", + "path": "1" + }, + "5984": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "SUB", + "path": "1" + }, + "5985": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "PUSH1", + "path": "1", + "value": "0x64" + }, + "5987": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "ADD", + "path": "1" + }, + "5988": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "SWAP1", + "path": "1" + }, + "5989": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "REVERT", + "path": "1" + }, + "5990": { + "fn": "Governance.addGovernor", + "offset": [3011, 3064], + "op": "JUMPDEST", + "path": "1" + }, + "5991": { + "fn": "Governance.addGovernor", + "offset": [3074, 3106], + "op": "PUSH1", + "path": "1", + "value": "0x0" + }, + "5993": { + "fn": "Governance.addGovernor", + "offset": [3109, 3128], + "op": "PUSH2", + "path": "1", + "value": "0x1770" + }, + "5996": { + "fn": "Governance.addGovernor", + "offset": [3109, 3126], + "op": "PUSH2", + "path": "1", + "value": "0x161F" + }, + "5999": { + "fn": "Governance.addGovernor", + "jump": "i", + "offset": [3109, 3128], + "op": "JUMP", + "path": "1" + }, + "6000": { + "fn": "Governance.addGovernor", + "offset": [3109, 3128], + "op": "JUMPDEST", + "path": "1" + }, + "6001": { + "op": "PUSH1", + "value": "0x1" + }, + "6003": { + "op": "PUSH1", + "value": "0x1" + }, + "6005": { + "op": "PUSH1", + "value": "0xA0" + }, + "6007": { + "op": "SHL" + }, + "6008": { + "op": "SUB" + }, + "6009": { + "fn": "Governance.addGovernor", + "offset": [3138, 3173], + "op": "SWAP1", + "path": "1", + "statement": 72 + }, + "6010": { + "fn": "Governance.addGovernor", + "offset": [3138, 3173], + "op": "SWAP3", + "path": "1" + }, + "6011": { + "fn": "Governance.addGovernor", + "offset": [3138, 3173], + "op": "AND", + "path": "1" + }, + "6012": { + "fn": "Governance.addGovernor", + "offset": [3138, 3160], + "op": "PUSH1", + "path": "1", + "value": "0x0" + }, + "6014": { + "fn": "Governance.addGovernor", + "offset": [3138, 3173], + "op": "SWAP1", + "path": "1" + }, + "6015": { + "fn": "Governance.addGovernor", + "offset": [3138, 3173], + "op": "DUP2", + "path": "1" + }, + "6016": { + "fn": "Governance.addGovernor", + "offset": [3138, 3173], + "op": "MSTORE", + "path": "1" + }, + "6017": { + "fn": "Governance.addGovernor", + "offset": [3138, 3173], + "op": "PUSH1", + "path": "1", + "value": "0x20" + }, + "6019": { + "fn": "Governance.addGovernor", + "offset": [3138, 3173], + "op": "SWAP3", + "path": "1" + }, + "6020": { + "fn": "Governance.addGovernor", + "offset": [3138, 3173], + "op": "SWAP1", + "path": "1" + }, + "6021": { + "fn": "Governance.addGovernor", + "offset": [3138, 3173], + "op": "SWAP3", + "path": "1" + }, + "6022": { + "fn": "Governance.addGovernor", + "offset": [3138, 3173], + "op": "MSTORE", + "path": "1" + }, + "6023": { + "op": "POP" + }, + "6024": { + "fn": "Governance.addGovernor", + "offset": [3138, 3173], + "op": "PUSH1", + "path": "1", + "value": "0x40" + }, + "6026": { + "fn": "Governance.addGovernor", + "offset": [3138, 3173], + "op": "SWAP1", + "path": "1" + }, + "6027": { + "fn": "Governance.addGovernor", + "offset": [3138, 3173], + "op": "KECCAK256", + "path": "1" + }, + "6028": { + "fn": "Governance.addGovernor", + "offset": [3138, 3180], + "op": "DUP1", + "path": "1" + }, + "6029": { + "fn": "Governance.addGovernor", + "offset": [3138, 3180], + "op": "SLOAD", + "path": "1" + }, + "6030": { + "op": "PUSH1", + "value": "0xFF" + }, + "6032": { + "op": "NOT" + }, + "6033": { + "fn": "Governance.addGovernor", + "offset": [3138, 3180], + "op": "AND", + "path": "1" + }, + "6034": { + "fn": "Governance.addGovernor", + "offset": [3176, 3180], + "op": "PUSH1", + "path": "1", + "value": "0x1" + }, + "6036": { + "fn": "Governance.addGovernor", + "offset": [3138, 3180], + "op": "OR", + "path": "1" + }, + "6037": { + "fn": "Governance.addGovernor", + "offset": [3138, 3180], + "op": "SWAP1", + "path": "1" + }, + "6038": { + "fn": "Governance.addGovernor", + "offset": [3138, 3180], + "op": "SSTORE", + "path": "1" + }, + "6039": { + "fn": "Governance.addGovernor", + "jump": "o", + "offset": [2951, 3187], + "op": "JUMP", + "path": "1" + }, + "6040": { + "fn": "NamedStorage.setUintValue", + "offset": [1379, 1571], + "op": "JUMPDEST", + "path": "0" + }, + "6041": { + "fn": "NamedStorage.setUintValue", + "offset": [1455, 1467], + "op": "PUSH1", + "path": "0", + "value": "0x0" + }, + "6043": { + "fn": "NamedStorage.setUintValue", + "offset": [1497, 1501], + "op": "DUP3", + "path": "0" + }, + "6044": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "PUSH1", + "path": "0", + "value": "0x40" + }, + "6046": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "MLOAD", + "path": "0" + }, + "6047": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "6049": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "ADD", + "path": "0" + }, + "6050": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP1", + "path": "0" + }, + "6051": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP3", + "path": "0" + }, + "6052": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP1", + "path": "0" + }, + "6053": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "MLOAD", + "path": "0" + }, + "6054": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "SWAP1", + "path": "0" + }, + "6055": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "6057": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "ADD", + "path": "0" + }, + "6058": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "SWAP1", + "path": "0" + }, + "6059": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP1", + "path": "0" + }, + "6060": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP4", + "path": "0" + }, + "6061": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP4", + "path": "0" + }, + "6062": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "JUMPDEST", + "path": "0" + }, + "6063": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "6065": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP4", + "path": "0" + }, + "6066": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "LT", + "path": "0" + }, + "6067": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "PUSH2", + "path": "0", + "value": "0x17CD" + }, + "6070": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "JUMPI", + "path": "0" + }, + "6071": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP1", + "path": "0" + }, + "6072": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "MLOAD", + "path": "0" + }, + "6073": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP3", + "path": "0" + }, + "6074": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "MSTORE", + "path": "0" + }, + "6075": { + "op": "PUSH1", + "value": "0x1F" + }, + "6077": { + "op": "NOT" + }, + "6078": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "SWAP1", + "path": "0" + }, + "6079": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "SWAP3", + "path": "0" + }, + "6080": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "ADD", + "path": "0" + }, + "6081": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "SWAP2", + "path": "0" + }, + "6082": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "6084": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "SWAP2", + "path": "0" + }, + "6085": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP3", + "path": "0" + }, + "6086": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "ADD", + "path": "0" + }, + "6087": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "SWAP2", + "path": "0" + }, + "6088": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "ADD", + "path": "0" + }, + "6089": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "PUSH2", + "path": "0", + "value": "0x17AE" + }, + "6092": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "JUMP", + "path": "0" + }, + "6093": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "JUMPDEST", + "path": "0" + }, + "6094": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "PUSH1", + "path": "0", + "value": "0x1" + }, + "6096": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP4", + "path": "0" + }, + "6097": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "6099": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "SUB", + "path": "0" + }, + "6100": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "PUSH2", + "path": "0", + "value": "0x100" + }, + "6103": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "EXP", + "path": "0" + }, + "6104": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "SUB", + "path": "0" + }, + "6105": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP1", + "path": "0" + }, + "6106": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "NOT", + "path": "0" + }, + "6107": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP3", + "path": "0" + }, + "6108": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "MLOAD", + "path": "0" + }, + "6109": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "AND", + "path": "0" + }, + "6110": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP2", + "path": "0" + }, + "6111": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP5", + "path": "0" + }, + "6112": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "MLOAD", + "path": "0" + }, + "6113": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "AND", + "path": "0" + }, + "6114": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP1", + "path": "0" + }, + "6115": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP3", + "path": "0" + }, + "6116": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "OR", + "path": "0" + }, + "6117": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP6", + "path": "0" + }, + "6118": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "MSTORE", + "path": "0" + }, + "6119": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "POP", + "path": "0" + }, + "6120": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "POP", + "path": "0" + }, + "6121": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "POP", + "path": "0" + }, + "6122": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "POP", + "path": "0" + }, + "6123": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "POP", + "path": "0" + }, + "6124": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "POP", + "path": "0" + }, + "6125": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "SWAP1", + "path": "0" + }, + "6126": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "POP", + "path": "0" + }, + "6127": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "ADD", + "path": "0" + }, + "6128": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "SWAP2", + "path": "0" + }, + "6129": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "POP", + "path": "0" + }, + "6130": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "POP", + "path": "0" + }, + "6131": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "PUSH1", + "path": "0", + "value": "0x40" + }, + "6133": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "MLOAD", + "path": "0" + }, + "6134": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "6136": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP2", + "path": "0" + }, + "6137": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP4", + "path": "0" + }, + "6138": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "SUB", + "path": "0" + }, + "6139": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "SUB", + "path": "0" + }, + "6140": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "DUP2", + "path": "0" + }, + "6141": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "MSTORE", + "path": "0" + }, + "6142": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "SWAP1", + "path": "0" + }, + "6143": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "PUSH1", + "path": "0", + "value": "0x40" + }, + "6145": { + "fn": "NamedStorage.setUintValue", + "offset": [1480, 1502], + "op": "MSTORE", + "path": "0" + }, + "6146": { + "fn": "NamedStorage.setUintValue", + "offset": [1470, 1503], + "op": "DUP1", + "path": "0" + }, + "6147": { + "fn": "NamedStorage.setUintValue", + "offset": [1470, 1503], + "op": "MLOAD", + "path": "0" + }, + "6148": { + "fn": "NamedStorage.setUintValue", + "offset": [1470, 1503], + "op": "SWAP1", + "path": "0" + }, + "6149": { + "fn": "NamedStorage.setUintValue", + "offset": [1470, 1503], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "6151": { + "fn": "NamedStorage.setUintValue", + "offset": [1470, 1503], + "op": "ADD", + "path": "0" + }, + "6152": { + "fn": "NamedStorage.setUintValue", + "offset": [1470, 1503], + "op": "KECCAK256", + "path": "0" + }, + "6153": { + "fn": "NamedStorage.setUintValue", + "offset": [1455, 1503], + "op": "SWAP1", + "path": "0" + }, + "6154": { + "fn": "NamedStorage.setUintValue", + "offset": [1455, 1503], + "op": "POP", + "path": "0" + }, + "6155": { + "fn": "NamedStorage.setUintValue", + "offset": [1549, 1554], + "op": "DUP2", + "path": "0" + }, + "6156": { + "fn": "NamedStorage.setUintValue", + "offset": [1543, 1547], + "op": "DUP2", + "path": "0" + }, + "6157": { + "fn": "NamedStorage.setUintValue", + "offset": [1536, 1555], + "op": "SSTORE", + "path": "0" + }, + "6158": { + "fn": "NamedStorage.setUintValue", + "offset": [1522, 1565], + "op": "POP", + "path": "0" + }, + "6159": { + "fn": "NamedStorage.setUintValue", + "offset": [1522, 1565], + "op": "POP", + "path": "0" + }, + "6160": { + "fn": "NamedStorage.setUintValue", + "offset": [1522, 1565], + "op": "POP", + "path": "0" + }, + "6161": { + "fn": "NamedStorage.setUintValue", + "jump": "o", + "offset": [1522, 1565], + "op": "JUMP", + "path": "0" + }, + "6162": { + "fn": "NamedStorage.getUintValue", + "offset": [1164, 1373], + "op": "JUMPDEST", + "path": "0" + }, + "6163": { + "fn": "NamedStorage.getUintValue", + "offset": [1229, 1243], + "op": "PUSH1", + "path": "0", + "value": "0x0" + }, + "6165": { + "fn": "NamedStorage.getUintValue", + "offset": [1255, 1267], + "op": "DUP1", + "path": "0" + }, + "6166": { + "fn": "NamedStorage.getUintValue", + "offset": [1297, 1301], + "op": "DUP3", + "path": "0" + }, + "6167": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "PUSH1", + "path": "0", + "value": "0x40" + }, + "6169": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "MLOAD", + "path": "0" + }, + "6170": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "6172": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "ADD", + "path": "0" + }, + "6173": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "DUP1", + "path": "0" + }, + "6174": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "DUP3", + "path": "0" + }, + "6175": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "DUP1", + "path": "0" + }, + "6176": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "MLOAD", + "path": "0" + }, + "6177": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "SWAP1", + "path": "0" + }, + "6178": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "6180": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "ADD", + "path": "0" + }, + "6181": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "SWAP1", + "path": "0" + }, + "6182": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "DUP1", + "path": "0" + }, + "6183": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "DUP4", + "path": "0" + }, + "6184": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "DUP4", + "path": "0" + }, + "6185": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "JUMPDEST", + "path": "0" + }, + "6186": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "6188": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "DUP4", + "path": "0" + }, + "6189": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "LT", + "path": "0" + }, + "6190": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "PUSH2", + "path": "0", + "value": "0x1848" + }, + "6193": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "JUMPI", + "path": "0" + }, + "6194": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "DUP1", + "path": "0" + }, + "6195": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "MLOAD", + "path": "0" + }, + "6196": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "DUP3", + "path": "0" + }, + "6197": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "MSTORE", + "path": "0" + }, + "6198": { + "op": "PUSH1", + "value": "0x1F" + }, + "6200": { + "op": "NOT" + }, + "6201": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "SWAP1", + "path": "0" + }, + "6202": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "SWAP3", + "path": "0" + }, + "6203": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "ADD", + "path": "0" + }, + "6204": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "SWAP2", + "path": "0" + }, + "6205": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "6207": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "SWAP2", + "path": "0" + }, + "6208": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "DUP3", + "path": "0" + }, + "6209": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "ADD", + "path": "0" + }, + "6210": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "SWAP2", + "path": "0" + }, + "6211": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "ADD", + "path": "0" + }, + "6212": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "PUSH2", + "path": "0", + "value": "0x1829" + }, + "6215": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "JUMP", + "path": "0" + }, + "6216": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "JUMPDEST", + "path": "0" + }, + "6217": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "PUSH1", + "path": "0", + "value": "0x1" + }, + "6219": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "DUP4", + "path": "0" + }, + "6220": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "6222": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "SUB", + "path": "0" + }, + "6223": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "PUSH2", + "path": "0", + "value": "0x100" + }, + "6226": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "EXP", + "path": "0" + }, + "6227": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "SUB", + "path": "0" + }, + "6228": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "DUP1", + "path": "0" + }, + "6229": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "NOT", + "path": "0" + }, + "6230": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "DUP3", + "path": "0" + }, + "6231": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "MLOAD", + "path": "0" + }, + "6232": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "AND", + "path": "0" + }, + "6233": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "DUP2", + "path": "0" + }, + "6234": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "DUP5", + "path": "0" + }, + "6235": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "MLOAD", + "path": "0" + }, + "6236": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "AND", + "path": "0" + }, + "6237": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "DUP1", + "path": "0" + }, + "6238": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "DUP3", + "path": "0" + }, + "6239": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "OR", + "path": "0" + }, + "6240": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "DUP6", + "path": "0" + }, + "6241": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "MSTORE", + "path": "0" + }, + "6242": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "POP", + "path": "0" + }, + "6243": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "POP", + "path": "0" + }, + "6244": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "POP", + "path": "0" + }, + "6245": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "POP", + "path": "0" + }, + "6246": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "POP", + "path": "0" + }, + "6247": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "POP", + "path": "0" + }, + "6248": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "SWAP1", + "path": "0" + }, + "6249": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "POP", + "path": "0" + }, + "6250": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "ADD", + "path": "0" + }, + "6251": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "SWAP2", + "path": "0" + }, + "6252": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "POP", + "path": "0" + }, + "6253": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "POP", + "path": "0" + }, + "6254": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "PUSH1", + "path": "0", + "value": "0x40" + }, + "6256": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "MLOAD", + "path": "0" + }, + "6257": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "6259": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "DUP2", + "path": "0" + }, + "6260": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "DUP4", + "path": "0" + }, + "6261": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "SUB", + "path": "0" + }, + "6262": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "SUB", + "path": "0" + }, + "6263": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "DUP2", + "path": "0" + }, + "6264": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "MSTORE", + "path": "0" + }, + "6265": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "SWAP1", + "path": "0" + }, + "6266": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "PUSH1", + "path": "0", + "value": "0x40" + }, + "6268": { + "fn": "NamedStorage.getUintValue", + "offset": [1280, 1302], + "op": "MSTORE", + "path": "0" + }, + "6269": { + "fn": "NamedStorage.getUintValue", + "offset": [1270, 1303], + "op": "DUP1", + "path": "0" + }, + "6270": { + "fn": "NamedStorage.getUintValue", + "offset": [1270, 1303], + "op": "MLOAD", + "path": "0" + }, + "6271": { + "fn": "NamedStorage.getUintValue", + "offset": [1270, 1303], + "op": "SWAP1", + "path": "0" + }, + "6272": { + "fn": "NamedStorage.getUintValue", + "offset": [1270, 1303], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "6274": { + "fn": "NamedStorage.getUintValue", + "offset": [1270, 1303], + "op": "ADD", + "path": "0" + }, + "6275": { + "fn": "NamedStorage.getUintValue", + "offset": [1270, 1303], + "op": "KECCAK256", + "path": "0" + }, + "6276": { + "fn": "NamedStorage.getUintValue", + "offset": [1255, 1303], + "op": "SWAP1", + "path": "0" + }, + "6277": { + "fn": "NamedStorage.getUintValue", + "offset": [1255, 1303], + "op": "POP", + "path": "0" + }, + "6278": { + "fn": "NamedStorage.getUintValue", + "offset": [1352, 1356], + "op": "DUP1", + "path": "0" + }, + "6279": { + "fn": "NamedStorage.getUintValue", + "offset": [1346, 1357], + "op": "SLOAD", + "path": "0" + }, + "6280": { + "fn": "NamedStorage.getUintValue", + "offset": [1336, 1357], + "op": "SWAP2", + "path": "0" + }, + "6281": { + "fn": "NamedStorage.getUintValue", + "offset": [1336, 1357], + "op": "POP", + "path": "0" + }, + "6282": { + "fn": "NamedStorage.getUintValue", + "offset": [1322, 1367], + "op": "POP", + "path": "0" + }, + "6283": { + "fn": "NamedStorage.getUintValue", + "offset": [1322, 1367], + "op": "SWAP2", + "path": "0" + }, + "6284": { + "fn": "NamedStorage.getUintValue", + "offset": [1322, 1367], + "op": "SWAP1", + "path": "0" + }, + "6285": { + "fn": "NamedStorage.getUintValue", + "offset": [1322, 1367], + "op": "POP", + "path": "0" + }, + "6286": { + "fn": "NamedStorage.getUintValue", + "jump": "o", + "offset": [1322, 1367], + "op": "JUMP", + "path": "0" + }, + "6287": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1577, 1746], + "op": "JUMPDEST", + "path": "0" + }, + "6288": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1665, 1683], + "op": "PUSH2", + "path": "0", + "statement": 73, + "value": "0x1898" + }, + "6291": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1678, 1682], + "op": "DUP3", + "path": "0" + }, + "6292": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1665, 1677], + "op": "PUSH2", + "path": "0", + "value": "0x1812" + }, + "6295": { + "fn": "NamedStorage.setUintValueOnce", + "jump": "i", + "offset": [1665, 1683], + "op": "JUMP", + "path": "0" + }, + "6296": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1665, 1683], + "op": "JUMPDEST", + "path": "0" + }, + "6297": { + "branch": 88, + "fn": "NamedStorage.setUintValueOnce", + "offset": [1665, 1688], + "op": "ISZERO", + "path": "0" + }, + "6298": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "PUSH2", + "path": "0", + "value": "0x18D8" + }, + "6301": { + "branch": 88, + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "JUMPI", + "path": "0" + }, + "6302": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "PUSH1", + "path": "0", + "value": "0x40" + }, + "6304": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "DUP1", + "path": "0" + }, + "6305": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "MLOAD", + "path": "0" + }, + "6306": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "6310": { + "op": "PUSH1", + "value": "0xE5" + }, + "6312": { + "op": "SHL" + }, + "6313": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "DUP2", + "path": "0" + }, + "6314": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "MSTORE", + "path": "0" + }, + "6315": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "6317": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "PUSH1", + "path": "0", + "value": "0x4" + }, + "6319": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "DUP3", + "path": "0" + }, + "6320": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "ADD", + "path": "0" + }, + "6321": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "MSTORE", + "path": "0" + }, + "6322": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "PUSH1", + "path": "0", + "value": "0xB" + }, + "6324": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "PUSH1", + "path": "0", + "value": "0x24" + }, + "6326": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "DUP3", + "path": "0" + }, + "6327": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "ADD", + "path": "0" + }, + "6328": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "MSTORE", + "path": "0" + }, + "6329": { + "op": "PUSH11", + "value": "0x1053149150511657D4D155" + }, + "6341": { + "op": "PUSH1", + "value": "0xAA" + }, + "6343": { + "op": "SHL" + }, + "6344": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "PUSH1", + "path": "0", + "value": "0x44" + }, + "6346": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "DUP3", + "path": "0" + }, + "6347": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "ADD", + "path": "0" + }, + "6348": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "MSTORE", + "path": "0" + }, + "6349": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "SWAP1", + "path": "0" + }, + "6350": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "MLOAD", + "path": "0" + }, + "6351": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "SWAP1", + "path": "0" + }, + "6352": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "DUP2", + "path": "0" + }, + "6353": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "SWAP1", + "path": "0" + }, + "6354": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "SUB", + "path": "0" + }, + "6355": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "PUSH1", + "path": "0", + "value": "0x64" + }, + "6357": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "ADD", + "path": "0" + }, + "6358": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "SWAP1", + "path": "0" + }, + "6359": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "REVERT", + "path": "0" + }, + "6360": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1657, 1704], + "op": "JUMPDEST", + "path": "0" + }, + "6361": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1714, 1739], + "op": "PUSH2", + "path": "0", + "statement": 74, + "value": "0x39B" + }, + "6364": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1727, 1731], + "op": "DUP3", + "path": "0" + }, + "6365": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1733, 1738], + "op": "DUP3", + "path": "0" + }, + "6366": { + "fn": "NamedStorage.setUintValueOnce", + "offset": [1714, 1726], + "op": "PUSH2", + "path": "0", + "value": "0x1798" + }, + "6369": { + "fn": "NamedStorage.setUintValueOnce", + "jump": "i", + "offset": [1714, 1739], + "op": "JUMP", + "path": "0" + }, + "6370": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1024, 1144], + "op": "JUMPDEST", + "path": "29" + }, + "6371": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1069, 1076], + "op": "PUSH1", + "path": "29", + "value": "0x0" + }, + "6373": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1095, 1137], + "op": "PUSH2", + "path": "29", + "statement": 75, + "value": "0x120B" + }, + "6376": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "6378": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "MLOAD", + "path": "29" + }, + "6379": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "DUP1", + "path": "29" + }, + "6380": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "PUSH1", + "path": "29", + "value": "0x60" + }, + "6382": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "ADD", + "path": "29" + }, + "6383": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "PUSH1", + "path": "29", + "value": "0x40" + }, + "6385": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "MSTORE", + "path": "29" + }, + "6386": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "DUP1", + "path": "29" + }, + "6387": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "PUSH1", + "path": "29", + "value": "0x21" + }, + "6389": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "DUP2", + "path": "29" + }, + "6390": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "MSTORE", + "path": "29" + }, + "6391": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "PUSH1", + "path": "29", + "value": "0x20" + }, + "6393": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "ADD", + "path": "29" + }, + "6394": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "PUSH2", + "path": "29", + "value": "0x1A1C" + }, + "6397": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "PUSH1", + "path": "29", + "value": "0x21" + }, + "6399": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "SWAP2", + "path": "29" + }, + "6400": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1121, 1136], + "op": "CODECOPY", + "path": "29" + }, + "6401": { + "fn": "StarknetTokenStorage.maxDeposit", + "offset": [1095, 1120], + "op": "PUSH2", + "path": "29", + "value": "0x1812" + }, + "6404": { + "fn": "StarknetTokenStorage.maxDeposit", + "jump": "i", + "offset": [1095, 1137], + "op": "JUMP", + "path": "29" + }, + "6405": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2171, 2360], + "op": "JUMPDEST", + "path": "0" + }, + "6406": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2295, 2298], + "op": "PUSH1", + "path": "0", + "statement": 76, + "value": "0x0" + }, + "6408": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2262, 2283], + "op": "PUSH2", + "path": "0", + "value": "0x1910" + }, + "6411": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2278, 2282], + "op": "DUP4", + "path": "0" + }, + "6412": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2262, 2277], + "op": "PUSH2", + "path": "0", + "value": "0x1812" + }, + "6415": { + "fn": "NamedStorage.setAddressValueOnce", + "jump": "i", + "offset": [2262, 2283], + "op": "JUMP", + "path": "0" + }, + "6416": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2262, 2283], + "op": "JUMPDEST", + "path": "0" + }, + "6417": { + "op": "PUSH1", + "value": "0x1" + }, + "6419": { + "op": "PUSH1", + "value": "0x1" + }, + "6421": { + "op": "PUSH1", + "value": "0xA0" + }, + "6423": { + "op": "SHL" + }, + "6424": { + "op": "SUB" + }, + "6425": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2262, 2299], + "op": "AND", + "path": "0" + }, + "6426": { + "branch": 89, + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2262, 2299], + "op": "EQ", + "path": "0" + }, + "6427": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "PUSH2", + "path": "0", + "value": "0x18D8" + }, + "6430": { + "branch": 89, + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "JUMPI", + "path": "0" + }, + "6431": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "PUSH1", + "path": "0", + "value": "0x40" + }, + "6433": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "DUP1", + "path": "0" + }, + "6434": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "MLOAD", + "path": "0" + }, + "6435": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "6439": { + "op": "PUSH1", + "value": "0xE5" + }, + "6441": { + "op": "SHL" + }, + "6442": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "DUP2", + "path": "0" + }, + "6443": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "MSTORE", + "path": "0" + }, + "6444": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "6446": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "PUSH1", + "path": "0", + "value": "0x4" + }, + "6448": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "DUP3", + "path": "0" + }, + "6449": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "ADD", + "path": "0" + }, + "6450": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "MSTORE", + "path": "0" + }, + "6451": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "PUSH1", + "path": "0", + "value": "0xB" + }, + "6453": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "PUSH1", + "path": "0", + "value": "0x24" + }, + "6455": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "DUP3", + "path": "0" + }, + "6456": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "ADD", + "path": "0" + }, + "6457": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "MSTORE", + "path": "0" + }, + "6458": { + "op": "PUSH11", + "value": "0x1053149150511657D4D155" + }, + "6470": { + "op": "PUSH1", + "value": "0xAA" + }, + "6472": { + "op": "SHL" + }, + "6473": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "PUSH1", + "path": "0", + "value": "0x44" + }, + "6475": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "DUP3", + "path": "0" + }, + "6476": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "ADD", + "path": "0" + }, + "6477": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "MSTORE", + "path": "0" + }, + "6478": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "SWAP1", + "path": "0" + }, + "6479": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "MLOAD", + "path": "0" + }, + "6480": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "SWAP1", + "path": "0" + }, + "6481": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "DUP2", + "path": "0" + }, + "6482": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "SWAP1", + "path": "0" + }, + "6483": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "SUB", + "path": "0" + }, + "6484": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "PUSH1", + "path": "0", + "value": "0x64" + }, + "6486": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "ADD", + "path": "0" + }, + "6487": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "SWAP1", + "path": "0" + }, + "6488": { + "fn": "NamedStorage.setAddressValueOnce", + "offset": [2254, 2315], + "op": "REVERT", + "path": "0" + }, + "6489": { + "op": "JUMPDEST" + }, + "6490": { + "op": "PUSH1", + "value": "0x0" + }, + "6492": { + "op": "DUP1" + }, + "6493": { + "op": "DUP6" + }, + "6494": { + "op": "DUP6" + }, + "6495": { + "op": "GT" + }, + "6496": { + "op": "ISZERO" + }, + "6497": { + "op": "PUSH2", + "value": "0x1968" + }, + "6500": { + "op": "JUMPI" + }, + "6501": { + "op": "DUP2" + }, + "6502": { + "op": "DUP3" + }, + "6503": { + "op": "REVERT" + }, + "6504": { + "op": "JUMPDEST" + }, + "6505": { + "op": "DUP4" + }, + "6506": { + "op": "DUP7" + }, + "6507": { + "op": "GT" + }, + "6508": { + "op": "ISZERO" + }, + "6509": { + "op": "PUSH2", + "value": "0x1974" + }, + "6512": { + "op": "JUMPI" + }, + "6513": { + "op": "DUP2" + }, + "6514": { + "op": "DUP3" + }, + "6515": { + "op": "REVERT" + }, + "6516": { + "op": "JUMPDEST" + }, + "6517": { + "op": "POP" + }, + "6518": { + "op": "POP" + }, + "6519": { + "op": "DUP3" + }, + "6520": { + "op": "ADD" + }, + "6521": { + "op": "SWAP4" + }, + "6522": { + "op": "SWAP2" + }, + "6523": { + "op": "SWAP1" + }, + "6524": { + "op": "SWAP3" + }, + "6525": { + "op": "SUB" + }, + "6526": { + "op": "SWAP2" + }, + "6527": { + "op": "POP" + }, + "6528": { + "op": "JUMP" + } + }, + "sha1": "ac499d2dcd4852bd750ce503eb657bdf09c7ec01", + "source": "// SPDX-License-Identifier: Apache-2.0.\npragma solidity ^0.6.12;\n\nimport \"contracts/scalable-dex/contracts/src/libraries/Common.sol\";\nimport \"contracts/starkware/starknet/apps/token/solidity/StarknetTokenBridge.sol\";\n\ncontract StarknetEthBridge is StarknetTokenBridge {\n using Addresses for address;\n\n function deposit(uint256 l2Recipient) external payable {\n // The msg.value in this transaction was already credited to the contract.\n require(address(this).balance <= maxTotalBalance(), \"MAX_BALANCE_EXCEEDED\");\n sendMessage(msg.value, l2Recipient);\n }\n\n function withdraw(uint256 amount, address recipient) public override {\n consumeMessage(amount, recipient);\n // Make sure we don't accidentally burn funds.\n require(recipient != address(0x0), \"INVALID_RECIPIENT\");\n recipient.performEthTransfer(amount);\n }\n}\n", + "sourceMap": "218:658:27:-:0;;;;;;;;;;;;;711:12:5;747:4;753:15;770:9;736:44;;;;;;-1:-1:-1;;;;;736:44:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;726:55;;;;;;711:70;;815:4;791:28;;;;;;865:2;859:4;852:16;838:40;218:658:27;;;;;;;;;", + "sourcePath": "contracts/starkware/starknet/apps/token/solidity/StarknetEthBridge.sol", + "type": "contract" +} diff --git a/src/contracts/StarknetMessaging/StarknetMessaging.js b/src/contracts/StarknetMessaging/StarknetMessaging.js new file mode 100644 index 00000000..03021b42 --- /dev/null +++ b/src/contracts/StarknetMessaging/StarknetMessaging.js @@ -0,0 +1,6 @@ +import {web3} from '../../web3'; +import {abi} from './StarknetMessaging.json'; + +const address = ''; + +export const starkNetMessaging = new web3.eth.Contract(abi, address); diff --git a/src/contracts/StarknetMessaging/StarknetMessaging.json b/src/contracts/StarknetMessaging/StarknetMessaging.json new file mode 100644 index 00000000..7825fee2 --- /dev/null +++ b/src/contracts/StarknetMessaging/StarknetMessaging.json @@ -0,0 +1,7911 @@ +{ + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "from_address", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "to_address", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "payload", + "type": "uint256[]" + } + ], + "name": "ConsumedMessageToL1", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from_address", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "to_address", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "selector", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "payload", + "type": "uint256[]" + } + ], + "name": "ConsumedMessageToL2", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "from_address", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "to_address", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "payload", + "type": "uint256[]" + } + ], + "name": "LogMessageToL1", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from_address", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "to_address", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "selector", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "payload", + "type": "uint256[]" + } + ], + "name": "LogMessageToL2", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "from_address", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "payload", + "type": "uint256[]" + } + ], + "name": "consumeMessageFromL2", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "msgHash", + "type": "bytes32" + } + ], + "name": "l1ToL2Messages", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "msgHash", + "type": "bytes32" + } + ], + "name": "l2ToL1Messages", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "to_address", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "selector", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "payload", + "type": "uint256[]" + } + ], + "name": "sendMessageToL2", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "allSourcePaths": { + "0": "contracts/common-contracts/src/libraries/NamedStorage.sol", + "31": "contracts/starkware/starknet/eth/IStarknetMessaging.sol", + "35": "contracts/starkware/starknet/eth/StarknetMessaging.sol" + }, + "ast": { + "absolutePath": "contracts/starkware/starknet/eth/StarknetMessaging.sol", + "exportedSymbols": { + "StarknetMessaging": [4525] + }, + "id": 4526, + "license": "Apache-2.0.", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4352, + "literals": ["solidity", "^", "0.6", ".12"], + "nodeType": "PragmaDirective", + "src": "40:24:35" + }, + { + "absolutePath": "contracts/starkware/starknet/eth/IStarknetMessaging.sol", + "file": "./IStarknetMessaging.sol", + "id": 4353, + "nodeType": "ImportDirective", + "scope": 4526, + "sourceUnit": 3587, + "src": "66:34:35", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/common-contracts/src/libraries/NamedStorage.sol", + "file": "contracts/common-contracts/src/libraries/NamedStorage.sol", + "id": 4354, + "nodeType": "ImportDirective", + "scope": 4526, + "sourceUnit": 218, + "src": "101:67:35", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 4356, + "name": "IStarknetMessaging", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3586, + "src": "450:18:35", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IStarknetMessaging_$3586", + "typeString": "contract IStarknetMessaging" + } + }, + "id": 4357, + "nodeType": "InheritanceSpecifier", + "src": "450:18:35" + } + ], + "contractDependencies": [3586], + "contractKind": "contract", + "documentation": { + "id": 4355, + "nodeType": "StructuredDocumentation", + "src": "170:249:35", + "text": "Implements sending messages to L2 by adding them to a pipe and consuming messages from L2 by\nremoving them from a different pipe. A deriving contract can handle the former pipe and add items\nto the latter pipe while interacting with L2." + }, + "fullyImplemented": true, + "id": 4525, + "linearizedBaseContracts": [4525, 3586], + "name": "StarknetMessaging", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": true, + "documentation": { + "id": 4358, + "nodeType": "StructuredDocumentation", + "src": "475:60:35", + "text": "Random slot storage elements and accessors." + }, + "id": 4361, + "mutability": "constant", + "name": "L1L2_MESSAGE_MAP_TAG", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 4525, + "src": "540:76:35", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 4359, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "540:6:35", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": { + "argumentTypes": null, + "hexValue": "535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4d41505050494e47", + "id": 4360, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "579:37:35", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_56df6e8156d8c5dcfab61a3ec93019fb35c5c27047a05e80b01ba1b74d449411", + "typeString": "literal_string \"STARKNET_1.0_MSGING_L1TOL2_MAPPPING\"" + }, + "value": "STARKNET_1.0_MSGING_L1TOL2_MAPPPING" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 4364, + "mutability": "constant", + "name": "L2L1_MESSAGE_MAP_TAG", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 4525, + "src": "622:76:35", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 4362, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "622:6:35", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": { + "argumentTypes": null, + "hexValue": "535441524b4e45545f312e305f4d5347494e475f4c32544f4c315f4d41505050494e47", + "id": 4363, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "661:37:35", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_cbc7abc335240960b5bc2cd0381440eb03dc62f362591b8f8e40b047737c8c1a", + "typeString": "literal_string \"STARKNET_1.0_MSGING_L2TOL1_MAPPPING\"" + }, + "value": "STARKNET_1.0_MSGING_L2TOL1_MAPPPING" + }, + "visibility": "internal" + }, + { + "body": { + "id": 4376, + "nodeType": "Block", + "src": "778:49:35", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4371, + "name": "l1ToL2Messages", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4403, + "src": "795:14:35", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_mapping$_t_bytes32_$_t_uint256_$_$", + "typeString": "function () pure returns (mapping(bytes32 => uint256))" + } + }, + "id": 4372, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "795:16:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 4374, + "indexExpression": { + "argumentTypes": null, + "id": 4373, + "name": "msgHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4366, + "src": "812:7:35", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "795:25:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4370, + "id": 4375, + "nodeType": "Return", + "src": "788:32:35" + } + ] + }, + "documentation": null, + "functionSelector": "77c7d7a9", + "id": 4377, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "l1ToL2Messages", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 4367, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4366, + "mutability": "mutable", + "name": "msgHash", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 4377, + "src": "729:15:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4365, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "729:7:35", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "728:17:35" + }, + "returnParameters": { + "id": 4370, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4369, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 4377, + "src": "769:7:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4368, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "769:7:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "768:9:35" + }, + "scope": 4525, + "src": "705:122:35", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 4389, + "nodeType": "Block", + "src": "906:49:35", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4384, + "name": "l2ToL1Messages", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4416, + "src": "923:14:35", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_mapping$_t_bytes32_$_t_uint256_$_$", + "typeString": "function () pure returns (mapping(bytes32 => uint256))" + } + }, + "id": 4385, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "923:16:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 4387, + "indexExpression": { + "argumentTypes": null, + "id": 4386, + "name": "msgHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4379, + "src": "940:7:35", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "923:25:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4383, + "id": 4388, + "nodeType": "Return", + "src": "916:32:35" + } + ] + }, + "documentation": null, + "functionSelector": "a46efaf3", + "id": 4390, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "l2ToL1Messages", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 4380, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4379, + "mutability": "mutable", + "name": "msgHash", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 4390, + "src": "857:15:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4378, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "857:7:35", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "856:17:35" + }, + "returnParameters": { + "id": 4383, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4382, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 4390, + "src": "897:7:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4381, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "897:7:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "896:9:35" + }, + "scope": 4525, + "src": "833:122:35", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 4402, + "nodeType": "Block", + "src": "1047:82:35", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4399, + "name": "L1L2_MESSAGE_MAP_TAG", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4361, + "src": "1101:20:35", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 4397, + "name": "NamedStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 217, + "src": "1064:12:35", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_NamedStorage_$217_$", + "typeString": "type(library NamedStorage)" + } + }, + "id": 4398, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "bytes32ToUint256Mapping", + "nodeType": "MemberAccess", + "referencedDeclaration": 21, + "src": "1064:36:35", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_mapping$_t_bytes32_$_t_uint256_$_$", + "typeString": "function (string memory) pure returns (mapping(bytes32 => uint256))" + } + }, + "id": 4400, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1064:58:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "functionReturnParameters": 4396, + "id": 4401, + "nodeType": "Return", + "src": "1057:65:35" + } + ] + }, + "documentation": null, + "id": 4403, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "l1ToL2Messages", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 4391, + "nodeType": "ParameterList", + "parameters": [], + "src": "984:2:35" + }, + "returnParameters": { + "id": 4396, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4395, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 4403, + "src": "1010:35:35", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + }, + "typeName": { + "id": 4394, + "keyType": { + "id": 4392, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1018:7:35", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "1010:27:35", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + }, + "valueType": { + "id": 4393, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1029:7:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1009:37:35" + }, + "scope": 4525, + "src": "961:168:35", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4415, + "nodeType": "Block", + "src": "1221:82:35", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4412, + "name": "L2L1_MESSAGE_MAP_TAG", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4364, + "src": "1275:20:35", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 4410, + "name": "NamedStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 217, + "src": "1238:12:35", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_NamedStorage_$217_$", + "typeString": "type(library NamedStorage)" + } + }, + "id": 4411, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "bytes32ToUint256Mapping", + "nodeType": "MemberAccess", + "referencedDeclaration": 21, + "src": "1238:36:35", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_mapping$_t_bytes32_$_t_uint256_$_$", + "typeString": "function (string memory) pure returns (mapping(bytes32 => uint256))" + } + }, + "id": 4413, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1238:58:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "functionReturnParameters": 4409, + "id": 4414, + "nodeType": "Return", + "src": "1231:65:35" + } + ] + }, + "documentation": null, + "id": 4416, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "l2ToL1Messages", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 4404, + "nodeType": "ParameterList", + "parameters": [], + "src": "1158:2:35" + }, + "returnParameters": { + "id": 4409, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4408, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 4416, + "src": "1184:35:35", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + }, + "typeName": { + "id": 4407, + "keyType": { + "id": 4405, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1192:7:35", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "1184:27:35", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + }, + "valueType": { + "id": 4406, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1203:7:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1183:37:35" + }, + "scope": 4525, + "src": "1135:168:35", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [3574], + "body": { + "id": 4467, + "nodeType": "Block", + "src": "1522:374:35", + "statements": [ + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4431, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "1552:3:35", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4432, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1552:10:35", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 4433, + "name": "to_address", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4419, + "src": "1564:10:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 4434, + "name": "selector", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4421, + "src": "1576:8:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 4435, + "name": "payload", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4424, + "src": "1586:7:35", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + ], + "id": 4430, + "name": "LogMessageToL2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3541, + "src": "1537:14:35", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$", + "typeString": "function (address,uint256,uint256,uint256[] memory)" + } + }, + "id": 4436, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1537:57:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4437, + "nodeType": "EmitStatement", + "src": "1532:62:35" + }, + { + "assignments": [4439], + "declarations": [ + { + "constant": false, + "id": 4439, + "mutability": "mutable", + "name": "msgHash", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 4467, + "src": "1686:15:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4438, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1686:7:35", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 4457, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4445, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "1752:3:35", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4446, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1752:10:35", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 4444, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1744:7:35", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 4443, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1744:7:35", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 4447, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1744:19:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 4448, + "name": "to_address", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4419, + "src": "1765:10:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4452, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "hexValue": "31", + "id": 4449, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1777:1:35", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4450, + "name": "payload", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4424, + "src": "1781:7:35", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + "id": 4451, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1781:14:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1777:18:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 4453, + "name": "selector", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4421, + "src": "1797:8:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 4454, + "name": "payload", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4424, + "src": "1807:7:35", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + ], + "expression": { + "argumentTypes": null, + "id": 4441, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "1727:3:35", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 4442, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encodePacked", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1727:16:35", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 4455, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1727:88:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 4440, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "1704:9:35", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 4456, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1704:121:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1686:139:35" + }, + { + "expression": { + "argumentTypes": null, + "id": 4463, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4458, + "name": "l1ToL2Messages", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4403, + "src": "1835:14:35", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_mapping$_t_bytes32_$_t_uint256_$_$", + "typeString": "function () pure returns (mapping(bytes32 => uint256))" + } + }, + "id": 4459, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1835:16:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 4461, + "indexExpression": { + "argumentTypes": null, + "id": 4460, + "name": "msgHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4439, + "src": "1852:7:35", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1835:25:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "31", + "id": 4462, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1864:1:35", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "1835:30:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4464, + "nodeType": "ExpressionStatement", + "src": "1835:30:35" + }, + { + "expression": { + "argumentTypes": null, + "id": 4465, + "name": "msgHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4439, + "src": "1882:7:35", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 4429, + "id": 4466, + "nodeType": "Return", + "src": "1875:14:35" + } + ] + }, + "documentation": { + "id": 4417, + "nodeType": "StructuredDocumentation", + "src": "1309:51:35", + "text": "Sends a message to an L2 contract." + }, + "functionSelector": "3e3aa6c5", + "id": 4468, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "sendMessageToL2", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 4426, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1495:8:35" + }, + "parameters": { + "id": 4425, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4419, + "mutability": "mutable", + "name": "to_address", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 4468, + "src": "1399:18:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4418, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1399:7:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4421, + "mutability": "mutable", + "name": "selector", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 4468, + "src": "1427:16:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4420, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1427:7:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4424, + "mutability": "mutable", + "name": "payload", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 4468, + "src": "1453:26:35", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 4422, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1453:7:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4423, + "length": null, + "nodeType": "ArrayTypeName", + "src": "1453:9:35", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1389:96:35" + }, + "returnParameters": { + "id": 4429, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4428, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 4468, + "src": "1513:7:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4427, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1513:7:35", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1512:9:35" + }, + "scope": 4525, + "src": "1365:531:35", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [3585], + "body": { + "id": 4523, + "nodeType": "Block", + "src": "2161:356:35", + "statements": [ + { + "assignments": [4481], + "declarations": [ + { + "constant": false, + "id": 4481, + "mutability": "mutable", + "name": "msgHash", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 4523, + "src": "2171:15:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4480, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2171:7:35", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 4496, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4485, + "name": "from_address", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4471, + "src": "2229:12:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4488, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "2251:3:35", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4489, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2251:10:35", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 4487, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2243:7:35", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 4486, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2243:7:35", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 4490, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2243:19:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4491, + "name": "payload", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4474, + "src": "2264:7:35", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + "id": 4492, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2264:14:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 4493, + "name": "payload", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4474, + "src": "2280:7:35", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + ], + "expression": { + "argumentTypes": null, + "id": 4483, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "2212:3:35", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 4484, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encodePacked", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2212:16:35", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 4494, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2212:76:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 4482, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "2189:9:35", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 4495, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2189:109:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2171:127:35" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4503, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4498, + "name": "l2ToL1Messages", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4416, + "src": "2317:14:35", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_mapping$_t_bytes32_$_t_uint256_$_$", + "typeString": "function () pure returns (mapping(bytes32 => uint256))" + } + }, + "id": 4499, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2317:16:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 4501, + "indexExpression": { + "argumentTypes": null, + "id": 4500, + "name": "msgHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4481, + "src": "2334:7:35", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2317:25:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 4502, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2345:1:35", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2317:29:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "494e56414c49445f4d4553534147455f544f5f434f4e53554d45", + "id": 4504, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2348:28:35", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c033f391b5e4a8a647eb9e27dd2cb79e7636b1247d32add7af730d1fb34669d3", + "typeString": "literal_string \"INVALID_MESSAGE_TO_CONSUME\"" + }, + "value": "INVALID_MESSAGE_TO_CONSUME" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_c033f391b5e4a8a647eb9e27dd2cb79e7636b1247d32add7af730d1fb34669d3", + "typeString": "literal_string \"INVALID_MESSAGE_TO_CONSUME\"" + } + ], + "id": 4497, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [-18, -18], + "referencedDeclaration": -18, + "src": "2309:7:35", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4505, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2309:68:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4506, + "nodeType": "ExpressionStatement", + "src": "2309:68:35" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 4508, + "name": "from_address", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4471, + "src": "2412:12:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 4509, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "2426:3:35", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4510, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2426:10:35", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 4511, + "name": "payload", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4474, + "src": "2438:7:35", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + ], + "id": 4507, + "name": "ConsumedMessageToL1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3550, + "src": "2392:19:35", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$", + "typeString": "function (uint256,address,uint256[] memory)" + } + }, + "id": 4512, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2392:54:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4513, + "nodeType": "EmitStatement", + "src": "2387:59:35" + }, + { + "expression": { + "argumentTypes": null, + "id": 4519, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4514, + "name": "l2ToL1Messages", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4416, + "src": "2456:14:35", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_mapping$_t_bytes32_$_t_uint256_$_$", + "typeString": "function () pure returns (mapping(bytes32 => uint256))" + } + }, + "id": 4515, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2456:16:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 4517, + "indexExpression": { + "argumentTypes": null, + "id": 4516, + "name": "msgHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4481, + "src": "2473:7:35", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2456:25:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "-=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "31", + "id": 4518, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2485:1:35", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "2456:30:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4520, + "nodeType": "ExpressionStatement", + "src": "2456:30:35" + }, + { + "expression": { + "argumentTypes": null, + "id": 4521, + "name": "msgHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4481, + "src": "2503:7:35", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 4479, + "id": 4522, + "nodeType": "Return", + "src": "2496:14:35" + } + ] + }, + "documentation": { + "id": 4469, + "nodeType": "StructuredDocumentation", + "src": "1902:110:35", + "text": "Consumes a message that was sent from an L2 contract.\nReturns the hash of the message." + }, + "functionSelector": "2c9dd5c0", + "id": 4524, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "consumeMessageFromL2", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 4476, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2122:8:35" + }, + "parameters": { + "id": 4475, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4471, + "mutability": "mutable", + "name": "from_address", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 4524, + "src": "2047:20:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4470, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2047:7:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 4474, + "mutability": "mutable", + "name": "payload", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 4524, + "src": "2069:26:35", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 4472, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2069:7:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4473, + "length": null, + "nodeType": "ArrayTypeName", + "src": "2069:9:35", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2046:50:35" + }, + "returnParameters": { + "id": 4479, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4478, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 4524, + "src": "2148:7:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4477, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2148:7:35", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2147:9:35" + }, + "scope": 4525, + "src": "2017:500:35", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 4526, + "src": "420:2099:35" + } + ], + "src": "40:2480:35" + }, + "bytecode": "608060405234801561001057600080fd5b50610550806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80632c9dd5c0146100515780633e3aa6c5146100da57806377c7d7a914610156578063a46efaf314610173575b600080fd5b6100c86004803603604081101561006757600080fd5b8135919081019060408101602082013564010000000081111561008957600080fd5b82018360208201111561009b57600080fd5b803590602001918460208302840111640100000000831117156100bd57600080fd5b509092509050610190565b60408051918252519081900360200190f35b6100c8600480360360608110156100f057600080fd5b81359160208101359181019060608101604082013564010000000081111561011757600080fd5b82018360208201111561012957600080fd5b8035906020019184602083028401116401000000008311171561014b57600080fd5b5090925090506102ef565b6100c86004803603602081101561016c57600080fd5b50356103f0565b6100c86004803603602081101561018957600080fd5b503561040b565b60008084336001600160a01b031685859050868660405160200180868152602001858152602001848152602001838360200280828437808301925050509550505050505060405160208183030381529060405280519060200120905060006101f6610411565b6000838152602091909152604090205411610258576040805162461bcd60e51b815260206004820152601a60248201527f494e56414c49445f4d4553534147455f544f5f434f4e53554d45000000000000604482015290519081900360640190fd5b336001600160a01b0316857f7a06c571aa77f34d9706c51e5d8122b5595aebeaa34233bfe866f22befb973b1868660405180806020018281038252848482818152602001925060200280828437600083820152604051601f909101601f19169092018290039550909350505050a360016102d0610411565b6000838152602091909152604090208054919091039055949350505050565b60008385336001600160a01b03167f474d2456b41fc1146ae05ba36e794e448efd2f172a9128ca1c8c6dbdb22b62f7868660405180806020018281038252848482818152602001925060200280828437600083820152604051601f909101601f19169092018290039550909350505050a46000336001600160a01b031686858590506001018787876040516020018087815260200186815260200185815260200184815260200183836020028082843780830192505050965050505050505060405160208183030381529060405280519060200120905060016103d0610439565b600083815260209190915260409020805490910190559050949350505050565b60006103fa610439565b600092835260205250604090205490565b60006103fa5b60006104346040518060600160405280602381526020016104f860239139610458565b905090565b60006104346040518060600160405280602381526020016104d5602391395b600080826040516020018082805190602001908083835b6020831061048e5780518252601f19909201916020918201910161046f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508091505091905056fe535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4d41505050494e47535441524b4e45545f312e305f4d5347494e475f4c32544f4c315f4d41505050494e47a26469706673582212202f1939c4fb2205d451cdf55dedd0d692abbbadb3f765bb5962c7e04f5297e2b464736f6c634300060c0033", + "bytecodeSha1": "35a273b05fa7f64547bfb941071f659d7a018a85", + "compiler": { + "evm_version": "istanbul", + "optimizer": { + "enabled": true, + "runs": 200 + }, + "version": "0.6.12+commit.27d51765" + }, + "contractName": "StarknetMessaging", + "coverageMap": { + "branches": { + "0": {}, + "31": {}, + "35": { + "StarknetMessaging.consumeMessageFromL2": { + "9": [2317, 2346, true] + } + } + }, + "statements": { + "0": {}, + "31": {}, + "35": { + "StarknetMessaging.consumeMessageFromL2": { + "0": [2309, 2377], + "1": [2387, 2446], + "2": [2456, 2486] + }, + "StarknetMessaging.l1ToL2Messages": { + "5": [788, 820], + "8": [1057, 1122] + }, + "StarknetMessaging.l2ToL1Messages": { + "6": [916, 948], + "7": [1231, 1296] + }, + "StarknetMessaging.sendMessageToL2": { + "3": [1532, 1594], + "4": [1835, 1865] + } + } + } + }, + "dependencies": ["IStarknetMessaging", "NamedStorage"], + "deployedBytecode": "608060405234801561001057600080fd5b506004361061004c5760003560e01c80632c9dd5c0146100515780633e3aa6c5146100da57806377c7d7a914610156578063a46efaf314610173575b600080fd5b6100c86004803603604081101561006757600080fd5b8135919081019060408101602082013564010000000081111561008957600080fd5b82018360208201111561009b57600080fd5b803590602001918460208302840111640100000000831117156100bd57600080fd5b509092509050610190565b60408051918252519081900360200190f35b6100c8600480360360608110156100f057600080fd5b81359160208101359181019060608101604082013564010000000081111561011757600080fd5b82018360208201111561012957600080fd5b8035906020019184602083028401116401000000008311171561014b57600080fd5b5090925090506102ef565b6100c86004803603602081101561016c57600080fd5b50356103f0565b6100c86004803603602081101561018957600080fd5b503561040b565b60008084336001600160a01b031685859050868660405160200180868152602001858152602001848152602001838360200280828437808301925050509550505050505060405160208183030381529060405280519060200120905060006101f6610411565b6000838152602091909152604090205411610258576040805162461bcd60e51b815260206004820152601a60248201527f494e56414c49445f4d4553534147455f544f5f434f4e53554d45000000000000604482015290519081900360640190fd5b336001600160a01b0316857f7a06c571aa77f34d9706c51e5d8122b5595aebeaa34233bfe866f22befb973b1868660405180806020018281038252848482818152602001925060200280828437600083820152604051601f909101601f19169092018290039550909350505050a360016102d0610411565b6000838152602091909152604090208054919091039055949350505050565b60008385336001600160a01b03167f474d2456b41fc1146ae05ba36e794e448efd2f172a9128ca1c8c6dbdb22b62f7868660405180806020018281038252848482818152602001925060200280828437600083820152604051601f909101601f19169092018290039550909350505050a46000336001600160a01b031686858590506001018787876040516020018087815260200186815260200185815260200184815260200183836020028082843780830192505050965050505050505060405160208183030381529060405280519060200120905060016103d0610439565b600083815260209190915260409020805490910190559050949350505050565b60006103fa610439565b600092835260205250604090205490565b60006103fa5b60006104346040518060600160405280602381526020016104f860239139610458565b905090565b60006104346040518060600160405280602381526020016104d5602391395b600080826040516020018082805190602001908083835b6020831061048e5780518252601f19909201916020918201910161046f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508091505091905056fe535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4d41505050494e47535441524b4e45545f312e305f4d5347494e475f4c32544f4c315f4d41505050494e47a26469706673582212202f1939c4fb2205d451cdf55dedd0d692abbbadb3f765bb5962c7e04f5297e2b464736f6c634300060c0033", + "deployedSourceMap": "420:2099:35:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2017:500;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2017:500:35;;-1:-1:-1;2017:500:35;-1:-1:-1;2017:500:35;:::i;:::-;;;;;;;;;;;;;;;;1365:531;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1365:531:35;;-1:-1:-1;1365:531:35;-1:-1:-1;1365:531:35;:::i;705:122::-;;;;;;;;;;;;;;;;-1:-1:-1;705:122:35;;:::i;833:::-;;;;;;;;;;;;;;;;-1:-1:-1;833:122:35;;:::i;2017:500::-;2148:7;2171:15;2229:12;2251:10;-1:-1:-1;;;;;2243:19:35;2264:7;;:14;;2280:7;;2212:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2189:109;;;;;;2171:127;;2345:1;2317:16;:14;:16::i;:::-;:25;;;;;;;;;;;;;:29;2309:68;;;;;-1:-1:-1;;;2309:68:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;2426:10;-1:-1:-1;;;;;2392:54:35;2412:12;2392:54;2438:7;;2392:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2392:54:35;;;;;;;;-1:-1:-1;2392:54:35;;-1:-1:-1;;;;2392:54:35;2485:1;2456:16;:14;:16::i;:::-;:25;;;;;;;;;;;;:30;;;;;;;;:25;2017:500;-1:-1:-1;;;;2017:500:35:o;1365:531::-;1513:7;1576:8;1564:10;1552;-1:-1:-1;;;;;1537:57:35;;1586:7;;1537:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1537:57:35;;;;;;;;-1:-1:-1;1537:57:35;;-1:-1:-1;;;;1537:57:35;1686:15;1752:10;-1:-1:-1;;;;;1744:19:35;1765:10;1781:7;;:14;;1777:1;:18;1797:8;1807:7;;1727:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1704:121;;;;;;1686:139;;1864:1;1835:16;:14;:16::i;:::-;:25;;;;;;;;;;;;:30;;;;;;;1852:7;-1:-1:-1;1365:531:35;;;;;;:::o;705:122::-;769:7;795:16;:14;:16::i;:::-;:25;;;;;;-1:-1:-1;795:25:35;;;;;705:122::o;833:::-;897:7;923:16;1135:168;1184:35;1238:58;1275:20;;;;;;;;;;;;;;;;;1238:36;:58::i;:::-;1231:65;;1135:168;:::o;961:::-;1010:35;1064:58;1101:20;;;;;;;;;;;;;;;;;258:298:0;358:50;424:16;470:4;453:22;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;453:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;443:33;;;;;;424:52;;532:8;509:31;;495:55;;;;:::o", + "language": "Solidity", + "natspec": { + "kind": "dev", + "methods": { + "consumeMessageFromL2(uint256,uint256[])": { + "notice": "Consumes a message that was sent from an L2 contract. Returns the hash of the message." + }, + "sendMessageToL2(uint256,uint256,uint256[])": { + "notice": "Sends a message to an L2 contract." + } + }, + "notice": "Implements sending messages to L2 by adding them to a pipe and consuming messages from L2 by removing them from a different pipe. A deriving contract can handle the former pipe and add items to the latter pipe while interacting with L2.", + "version": 1 + }, + "offset": [420, 2519], + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2C9DD5C0 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x3E3AA6C5 EQ PUSH2 0xDA JUMPI DUP1 PUSH4 0x77C7D7A9 EQ PUSH2 0x156 JUMPI DUP1 PUSH4 0xA46EFAF3 EQ PUSH2 0x173 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xBD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x190 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xC8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0x60 DUP2 ADD PUSH1 0x40 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x117 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x129 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x14B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x2EF JUMP JUMPDEST PUSH2 0xC8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x16C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x3F0 JUMP JUMPDEST PUSH2 0xC8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x189 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x40B JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP6 SWAP1 POP DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY DUP1 DUP4 ADD SWAP3 POP POP POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0x1F6 PUSH2 0x411 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD GT PUSH2 0x258 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F4D4553534147455F544F5F434F4E53554D45000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH32 0x7A06C571AA77F34D9706C51E5D8122B5595AEBEAA34233BFE866F22BEFB973B1 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP3 ADD DUP3 SWAP1 SUB SWAP6 POP SWAP1 SWAP4 POP POP POP POP LOG3 PUSH1 0x1 PUSH2 0x2D0 PUSH2 0x411 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD SWAP2 SWAP1 SWAP2 SUB SWAP1 SSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 DUP6 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x474D2456B41FC1146AE05BA36E794E448EFD2F172A9128CA1C8C6DBDB22B62F7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP3 ADD DUP3 SWAP1 SUB SWAP6 POP SWAP1 SWAP4 POP POP POP POP LOG4 PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 DUP6 DUP6 SWAP1 POP PUSH1 0x1 ADD DUP8 DUP8 DUP8 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY DUP1 DUP4 ADD SWAP3 POP POP POP SWAP7 POP POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x1 PUSH2 0x3D0 PUSH2 0x439 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 ADD SWAP1 SSTORE SWAP1 POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FA PUSH2 0x439 JUMP JUMPDEST PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x20 MSTORE POP PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FA JUMPDEST PUSH1 0x0 PUSH2 0x434 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x4F8 PUSH1 0x23 SWAP2 CODECOPY PUSH2 0x458 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x434 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x4D5 PUSH1 0x23 SWAP2 CODECOPY JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x48E JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x46F JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP1 SWAP2 POP POP SWAP2 SWAP1 POP JUMP INVALID MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F BALANCE 0x2E ADDRESS 0x5F 0x4D MSTORE8 SELFBALANCE 0x49 0x4E SELFBALANCE 0x5F 0x4C BALANCE SLOAD 0x4F 0x4C ORIGIN 0x5F 0x4D COINBASE POP POP POP 0x49 0x4E SELFBALANCE MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F BALANCE 0x2E ADDRESS 0x5F 0x4D MSTORE8 SELFBALANCE 0x49 0x4E SELFBALANCE 0x5F 0x4C ORIGIN SLOAD 0x4F 0x4C BALANCE 0x5F 0x4D COINBASE POP POP POP 0x49 0x4E SELFBALANCE LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2F NOT CODECOPY 0xC4 0xFB 0x22 SDIV 0xD4 MLOAD 0xCD CREATE2 0x5D 0xED 0xD0 0xD6 SWAP3 0xAB 0xBB 0xAD 0xB3 0xF7 PUSH6 0xBB5962C7E04F MSTORE SWAP8 0xE2 0xB4 PUSH5 0x736F6C6343 STOP MOD 0xC STOP CALLER ", + "pcMap": { + "0": { + "offset": [420, 2519], + "op": "PUSH1", + "path": "35", + "value": "0x80" + }, + "2": { + "fn": null, + "offset": [420, 2519], + "op": "PUSH1", + "path": "35", + "value": "0x40" + }, + "4": { + "fn": null, + "offset": [420, 2519], + "op": "MSTORE", + "path": "35" + }, + "5": { + "fn": null, + "offset": [420, 2519], + "op": "CALLVALUE", + "path": "35" + }, + "6": { + "fn": null, + "offset": [420, 2519], + "op": "DUP1", + "path": "35" + }, + "7": { + "fn": null, + "offset": [420, 2519], + "op": "ISZERO", + "path": "35" + }, + "8": { + "fn": null, + "offset": [420, 2519], + "op": "PUSH2", + "path": "35", + "value": "0x10" + }, + "11": { + "fn": null, + "offset": [420, 2519], + "op": "JUMPI", + "path": "35" + }, + "12": { + "fn": null, + "offset": [420, 2519], + "op": "PUSH1", + "path": "35", + "value": "0x0" + }, + "14": { + "fn": null, + "offset": [420, 2519], + "op": "DUP1", + "path": "35" + }, + "15": { + "dev": "Cannot send ether to nonpayable function", + "fn": null, + "offset": [420, 2519], + "op": "REVERT", + "path": "35" + }, + "16": { + "fn": null, + "offset": [420, 2519], + "op": "JUMPDEST", + "path": "35" + }, + "17": { + "fn": null, + "offset": [420, 2519], + "op": "POP", + "path": "35" + }, + "18": { + "fn": null, + "offset": [420, 2519], + "op": "PUSH1", + "path": "35", + "value": "0x4" + }, + "20": { + "fn": null, + "offset": [420, 2519], + "op": "CALLDATASIZE", + "path": "35" + }, + "21": { + "fn": null, + "offset": [420, 2519], + "op": "LT", + "path": "35" + }, + "22": { + "fn": null, + "offset": [420, 2519], + "op": "PUSH2", + "path": "35", + "value": "0x4C" + }, + "25": { + "fn": null, + "offset": [420, 2519], + "op": "JUMPI", + "path": "35" + }, + "26": { + "fn": null, + "offset": [420, 2519], + "op": "PUSH1", + "path": "35", + "value": "0x0" + }, + "28": { + "fn": null, + "offset": [420, 2519], + "op": "CALLDATALOAD", + "path": "35" + }, + "29": { + "fn": null, + "offset": [420, 2519], + "op": "PUSH1", + "path": "35", + "value": "0xE0" + }, + "31": { + "fn": null, + "offset": [420, 2519], + "op": "SHR", + "path": "35" + }, + "32": { + "fn": null, + "offset": [420, 2519], + "op": "DUP1", + "path": "35" + }, + "33": { + "fn": null, + "offset": [420, 2519], + "op": "PUSH4", + "path": "35", + "value": "0x2C9DD5C0" + }, + "38": { + "fn": null, + "offset": [420, 2519], + "op": "EQ", + "path": "35" + }, + "39": { + "fn": null, + "offset": [420, 2519], + "op": "PUSH2", + "path": "35", + "value": "0x51" + }, + "42": { + "fn": null, + "offset": [420, 2519], + "op": "JUMPI", + "path": "35" + }, + "43": { + "fn": null, + "offset": [420, 2519], + "op": "DUP1", + "path": "35" + }, + "44": { + "fn": null, + "offset": [420, 2519], + "op": "PUSH4", + "path": "35", + "value": "0x3E3AA6C5" + }, + "49": { + "fn": null, + "offset": [420, 2519], + "op": "EQ", + "path": "35" + }, + "50": { + "fn": null, + "offset": [420, 2519], + "op": "PUSH2", + "path": "35", + "value": "0xDA" + }, + "53": { + "fn": null, + "offset": [420, 2519], + "op": "JUMPI", + "path": "35" + }, + "54": { + "fn": null, + "offset": [420, 2519], + "op": "DUP1", + "path": "35" + }, + "55": { + "fn": null, + "offset": [420, 2519], + "op": "PUSH4", + "path": "35", + "value": "0x77C7D7A9" + }, + "60": { + "fn": null, + "offset": [420, 2519], + "op": "EQ", + "path": "35" + }, + "61": { + "fn": null, + "offset": [420, 2519], + "op": "PUSH2", + "path": "35", + "value": "0x156" + }, + "64": { + "fn": null, + "offset": [420, 2519], + "op": "JUMPI", + "path": "35" + }, + "65": { + "fn": null, + "offset": [420, 2519], + "op": "DUP1", + "path": "35" + }, + "66": { + "fn": null, + "offset": [420, 2519], + "op": "PUSH4", + "path": "35", + "value": "0xA46EFAF3" + }, + "71": { + "fn": null, + "offset": [420, 2519], + "op": "EQ", + "path": "35" + }, + "72": { + "fn": null, + "offset": [420, 2519], + "op": "PUSH2", + "path": "35", + "value": "0x173" + }, + "75": { + "fn": null, + "offset": [420, 2519], + "op": "JUMPI", + "path": "35" + }, + "76": { + "fn": null, + "offset": [420, 2519], + "op": "JUMPDEST", + "path": "35" + }, + "77": { + "fn": null, + "offset": [420, 2519], + "op": "PUSH1", + "path": "35", + "value": "0x0" + }, + "79": { + "fn": null, + "offset": [420, 2519], + "op": "DUP1", + "path": "35" + }, + "80": { + "first_revert": true, + "fn": null, + "offset": [420, 2519], + "op": "REVERT", + "path": "35" + }, + "81": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "JUMPDEST", + "path": "35" + }, + "82": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "PUSH2", + "path": "35", + "value": "0xC8" + }, + "85": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "PUSH1", + "path": "35", + "value": "0x4" + }, + "87": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "DUP1", + "path": "35" + }, + "88": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "CALLDATASIZE", + "path": "35" + }, + "89": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "SUB", + "path": "35" + }, + "90": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "PUSH1", + "path": "35", + "value": "0x40" + }, + "92": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "DUP2", + "path": "35" + }, + "93": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "LT", + "path": "35" + }, + "94": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "ISZERO", + "path": "35" + }, + "95": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "PUSH2", + "path": "35", + "value": "0x67" + }, + "98": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "JUMPI", + "path": "35" + }, + "99": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "PUSH1", + "path": "35", + "value": "0x0" + }, + "101": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "DUP1", + "path": "35" + }, + "102": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "REVERT", + "path": "35" + }, + "103": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "JUMPDEST", + "path": "35" + }, + "104": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "DUP2", + "path": "35" + }, + "105": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "CALLDATALOAD", + "path": "35" + }, + "106": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "SWAP2", + "path": "35" + }, + "107": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "SWAP1", + "path": "35" + }, + "108": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "DUP2", + "path": "35" + }, + "109": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "ADD", + "path": "35" + }, + "110": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "SWAP1", + "path": "35" + }, + "111": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "PUSH1", + "path": "35", + "value": "0x40" + }, + "113": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "DUP2", + "path": "35" + }, + "114": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "ADD", + "path": "35" + }, + "115": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "117": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "DUP3", + "path": "35" + }, + "118": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "ADD", + "path": "35" + }, + "119": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "CALLDATALOAD", + "path": "35" + }, + "120": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "PUSH5", + "path": "35", + "value": "0x100000000" + }, + "126": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "DUP2", + "path": "35" + }, + "127": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "GT", + "path": "35" + }, + "128": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "ISZERO", + "path": "35" + }, + "129": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "PUSH2", + "path": "35", + "value": "0x89" + }, + "132": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "JUMPI", + "path": "35" + }, + "133": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "PUSH1", + "path": "35", + "value": "0x0" + }, + "135": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "DUP1", + "path": "35" + }, + "136": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "REVERT", + "path": "35" + }, + "137": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "JUMPDEST", + "path": "35" + }, + "138": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "DUP3", + "path": "35" + }, + "139": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "ADD", + "path": "35" + }, + "140": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "DUP4", + "path": "35" + }, + "141": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "143": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "DUP3", + "path": "35" + }, + "144": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "ADD", + "path": "35" + }, + "145": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "GT", + "path": "35" + }, + "146": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "ISZERO", + "path": "35" + }, + "147": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "PUSH2", + "path": "35", + "value": "0x9B" + }, + "150": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "JUMPI", + "path": "35" + }, + "151": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "PUSH1", + "path": "35", + "value": "0x0" + }, + "153": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "DUP1", + "path": "35" + }, + "154": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "REVERT", + "path": "35" + }, + "155": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "JUMPDEST", + "path": "35" + }, + "156": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "DUP1", + "path": "35" + }, + "157": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "CALLDATALOAD", + "path": "35" + }, + "158": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "SWAP1", + "path": "35" + }, + "159": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "161": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "ADD", + "path": "35" + }, + "162": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "SWAP2", + "path": "35" + }, + "163": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "DUP5", + "path": "35" + }, + "164": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "166": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "DUP4", + "path": "35" + }, + "167": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "MUL", + "path": "35" + }, + "168": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "DUP5", + "path": "35" + }, + "169": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "ADD", + "path": "35" + }, + "170": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "GT", + "path": "35" + }, + "171": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "PUSH5", + "path": "35", + "value": "0x100000000" + }, + "177": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "DUP4", + "path": "35" + }, + "178": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "GT", + "path": "35" + }, + "179": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "OR", + "path": "35" + }, + "180": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "ISZERO", + "path": "35" + }, + "181": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "PUSH2", + "path": "35", + "value": "0xBD" + }, + "184": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "JUMPI", + "path": "35" + }, + "185": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "PUSH1", + "path": "35", + "value": "0x0" + }, + "187": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "DUP1", + "path": "35" + }, + "188": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "REVERT", + "path": "35" + }, + "189": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "JUMPDEST", + "path": "35" + }, + "190": { + "op": "POP" + }, + "191": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "SWAP1", + "path": "35" + }, + "192": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "SWAP3", + "path": "35" + }, + "193": { + "op": "POP" + }, + "194": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "SWAP1", + "path": "35" + }, + "195": { + "op": "POP" + }, + "196": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "PUSH2", + "path": "35", + "value": "0x190" + }, + "199": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "jump": "i", + "offset": [2017, 2517], + "op": "JUMP", + "path": "35" + }, + "200": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "JUMPDEST", + "path": "35" + }, + "201": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "PUSH1", + "path": "35", + "value": "0x40" + }, + "203": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "DUP1", + "path": "35" + }, + "204": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "MLOAD", + "path": "35" + }, + "205": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "SWAP2", + "path": "35" + }, + "206": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "DUP3", + "path": "35" + }, + "207": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "MSTORE", + "path": "35" + }, + "208": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "MLOAD", + "path": "35" + }, + "209": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "SWAP1", + "path": "35" + }, + "210": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "DUP2", + "path": "35" + }, + "211": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "SWAP1", + "path": "35" + }, + "212": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "SUB", + "path": "35" + }, + "213": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "215": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "ADD", + "path": "35" + }, + "216": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "SWAP1", + "path": "35" + }, + "217": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "RETURN", + "path": "35" + }, + "218": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "JUMPDEST", + "path": "35" + }, + "219": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "PUSH2", + "path": "35", + "value": "0xC8" + }, + "222": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "PUSH1", + "path": "35", + "value": "0x4" + }, + "224": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "DUP1", + "path": "35" + }, + "225": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "CALLDATASIZE", + "path": "35" + }, + "226": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "SUB", + "path": "35" + }, + "227": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "PUSH1", + "path": "35", + "value": "0x60" + }, + "229": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "DUP2", + "path": "35" + }, + "230": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "LT", + "path": "35" + }, + "231": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "ISZERO", + "path": "35" + }, + "232": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "PUSH2", + "path": "35", + "value": "0xF0" + }, + "235": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "JUMPI", + "path": "35" + }, + "236": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "PUSH1", + "path": "35", + "value": "0x0" + }, + "238": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "DUP1", + "path": "35" + }, + "239": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "REVERT", + "path": "35" + }, + "240": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "JUMPDEST", + "path": "35" + }, + "241": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "DUP2", + "path": "35" + }, + "242": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "CALLDATALOAD", + "path": "35" + }, + "243": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "SWAP2", + "path": "35" + }, + "244": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "246": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "DUP2", + "path": "35" + }, + "247": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "ADD", + "path": "35" + }, + "248": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "CALLDATALOAD", + "path": "35" + }, + "249": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "SWAP2", + "path": "35" + }, + "250": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "DUP2", + "path": "35" + }, + "251": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "ADD", + "path": "35" + }, + "252": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "SWAP1", + "path": "35" + }, + "253": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "PUSH1", + "path": "35", + "value": "0x60" + }, + "255": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "DUP2", + "path": "35" + }, + "256": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "ADD", + "path": "35" + }, + "257": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "PUSH1", + "path": "35", + "value": "0x40" + }, + "259": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "DUP3", + "path": "35" + }, + "260": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "ADD", + "path": "35" + }, + "261": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "CALLDATALOAD", + "path": "35" + }, + "262": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "PUSH5", + "path": "35", + "value": "0x100000000" + }, + "268": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "DUP2", + "path": "35" + }, + "269": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "GT", + "path": "35" + }, + "270": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "ISZERO", + "path": "35" + }, + "271": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "PUSH2", + "path": "35", + "value": "0x117" + }, + "274": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "JUMPI", + "path": "35" + }, + "275": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "PUSH1", + "path": "35", + "value": "0x0" + }, + "277": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "DUP1", + "path": "35" + }, + "278": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "REVERT", + "path": "35" + }, + "279": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "JUMPDEST", + "path": "35" + }, + "280": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "DUP3", + "path": "35" + }, + "281": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "ADD", + "path": "35" + }, + "282": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "DUP4", + "path": "35" + }, + "283": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "285": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "DUP3", + "path": "35" + }, + "286": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "ADD", + "path": "35" + }, + "287": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "GT", + "path": "35" + }, + "288": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "ISZERO", + "path": "35" + }, + "289": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "PUSH2", + "path": "35", + "value": "0x129" + }, + "292": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "JUMPI", + "path": "35" + }, + "293": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "PUSH1", + "path": "35", + "value": "0x0" + }, + "295": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "DUP1", + "path": "35" + }, + "296": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "REVERT", + "path": "35" + }, + "297": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "JUMPDEST", + "path": "35" + }, + "298": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "DUP1", + "path": "35" + }, + "299": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "CALLDATALOAD", + "path": "35" + }, + "300": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "SWAP1", + "path": "35" + }, + "301": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "303": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "ADD", + "path": "35" + }, + "304": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "SWAP2", + "path": "35" + }, + "305": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "DUP5", + "path": "35" + }, + "306": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "308": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "DUP4", + "path": "35" + }, + "309": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "MUL", + "path": "35" + }, + "310": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "DUP5", + "path": "35" + }, + "311": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "ADD", + "path": "35" + }, + "312": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "GT", + "path": "35" + }, + "313": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "PUSH5", + "path": "35", + "value": "0x100000000" + }, + "319": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "DUP4", + "path": "35" + }, + "320": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "GT", + "path": "35" + }, + "321": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "OR", + "path": "35" + }, + "322": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "ISZERO", + "path": "35" + }, + "323": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "PUSH2", + "path": "35", + "value": "0x14B" + }, + "326": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "JUMPI", + "path": "35" + }, + "327": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "PUSH1", + "path": "35", + "value": "0x0" + }, + "329": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "DUP1", + "path": "35" + }, + "330": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "REVERT", + "path": "35" + }, + "331": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "JUMPDEST", + "path": "35" + }, + "332": { + "op": "POP" + }, + "333": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "SWAP1", + "path": "35" + }, + "334": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "SWAP3", + "path": "35" + }, + "335": { + "op": "POP" + }, + "336": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "SWAP1", + "path": "35" + }, + "337": { + "op": "POP" + }, + "338": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "PUSH2", + "path": "35", + "value": "0x2EF" + }, + "341": { + "fn": "StarknetMessaging.sendMessageToL2", + "jump": "i", + "offset": [1365, 1896], + "op": "JUMP", + "path": "35" + }, + "342": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [705, 827], + "op": "JUMPDEST", + "path": "35" + }, + "343": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [705, 827], + "op": "PUSH2", + "path": "35", + "value": "0xC8" + }, + "346": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [705, 827], + "op": "PUSH1", + "path": "35", + "value": "0x4" + }, + "348": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [705, 827], + "op": "DUP1", + "path": "35" + }, + "349": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [705, 827], + "op": "CALLDATASIZE", + "path": "35" + }, + "350": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [705, 827], + "op": "SUB", + "path": "35" + }, + "351": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [705, 827], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "353": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [705, 827], + "op": "DUP2", + "path": "35" + }, + "354": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [705, 827], + "op": "LT", + "path": "35" + }, + "355": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [705, 827], + "op": "ISZERO", + "path": "35" + }, + "356": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [705, 827], + "op": "PUSH2", + "path": "35", + "value": "0x16C" + }, + "359": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [705, 827], + "op": "JUMPI", + "path": "35" + }, + "360": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [705, 827], + "op": "PUSH1", + "path": "35", + "value": "0x0" + }, + "362": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [705, 827], + "op": "DUP1", + "path": "35" + }, + "363": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [705, 827], + "op": "REVERT", + "path": "35" + }, + "364": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [705, 827], + "op": "JUMPDEST", + "path": "35" + }, + "365": { + "op": "POP" + }, + "366": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [705, 827], + "op": "CALLDATALOAD", + "path": "35" + }, + "367": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [705, 827], + "op": "PUSH2", + "path": "35", + "value": "0x3F0" + }, + "370": { + "fn": "StarknetMessaging.l1ToL2Messages", + "jump": "i", + "offset": [705, 827], + "op": "JUMP", + "path": "35" + }, + "371": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [833, 955], + "op": "JUMPDEST", + "path": "35" + }, + "372": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [833, 955], + "op": "PUSH2", + "path": "35", + "value": "0xC8" + }, + "375": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [833, 955], + "op": "PUSH1", + "path": "35", + "value": "0x4" + }, + "377": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [833, 955], + "op": "DUP1", + "path": "35" + }, + "378": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [833, 955], + "op": "CALLDATASIZE", + "path": "35" + }, + "379": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [833, 955], + "op": "SUB", + "path": "35" + }, + "380": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [833, 955], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "382": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [833, 955], + "op": "DUP2", + "path": "35" + }, + "383": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [833, 955], + "op": "LT", + "path": "35" + }, + "384": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [833, 955], + "op": "ISZERO", + "path": "35" + }, + "385": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [833, 955], + "op": "PUSH2", + "path": "35", + "value": "0x189" + }, + "388": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [833, 955], + "op": "JUMPI", + "path": "35" + }, + "389": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [833, 955], + "op": "PUSH1", + "path": "35", + "value": "0x0" + }, + "391": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [833, 955], + "op": "DUP1", + "path": "35" + }, + "392": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [833, 955], + "op": "REVERT", + "path": "35" + }, + "393": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [833, 955], + "op": "JUMPDEST", + "path": "35" + }, + "394": { + "op": "POP" + }, + "395": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [833, 955], + "op": "CALLDATALOAD", + "path": "35" + }, + "396": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [833, 955], + "op": "PUSH2", + "path": "35", + "value": "0x40B" + }, + "399": { + "fn": "StarknetMessaging.l2ToL1Messages", + "jump": "i", + "offset": [833, 955], + "op": "JUMP", + "path": "35" + }, + "400": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "JUMPDEST", + "path": "35" + }, + "401": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2148, 2155], + "op": "PUSH1", + "path": "35", + "value": "0x0" + }, + "403": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2171, 2186], + "op": "DUP1", + "path": "35" + }, + "404": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2229, 2241], + "op": "DUP5", + "path": "35" + }, + "405": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2251, 2261], + "op": "CALLER", + "path": "35" + }, + "406": { + "op": "PUSH1", + "value": "0x1" + }, + "408": { + "op": "PUSH1", + "value": "0x1" + }, + "410": { + "op": "PUSH1", + "value": "0xA0" + }, + "412": { + "op": "SHL" + }, + "413": { + "op": "SUB" + }, + "414": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2243, 2262], + "op": "AND", + "path": "35" + }, + "415": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2264, 2271], + "op": "DUP6", + "path": "35" + }, + "416": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2264, 2271], + "op": "DUP6", + "path": "35" + }, + "417": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2264, 2278], + "op": "SWAP1", + "path": "35" + }, + "418": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2264, 2278], + "op": "POP", + "path": "35" + }, + "419": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2280, 2287], + "op": "DUP7", + "path": "35" + }, + "420": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2280, 2287], + "op": "DUP7", + "path": "35" + }, + "421": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "PUSH1", + "path": "35", + "value": "0x40" + }, + "423": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "MLOAD", + "path": "35" + }, + "424": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "426": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "ADD", + "path": "35" + }, + "427": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "DUP1", + "path": "35" + }, + "428": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "DUP7", + "path": "35" + }, + "429": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "DUP2", + "path": "35" + }, + "430": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "MSTORE", + "path": "35" + }, + "431": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "433": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "ADD", + "path": "35" + }, + "434": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "DUP6", + "path": "35" + }, + "435": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "DUP2", + "path": "35" + }, + "436": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "MSTORE", + "path": "35" + }, + "437": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "439": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "ADD", + "path": "35" + }, + "440": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "DUP5", + "path": "35" + }, + "441": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "DUP2", + "path": "35" + }, + "442": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "MSTORE", + "path": "35" + }, + "443": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "445": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "ADD", + "path": "35" + }, + "446": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "DUP4", + "path": "35" + }, + "447": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "DUP4", + "path": "35" + }, + "448": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "450": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "MUL", + "path": "35" + }, + "451": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "DUP1", + "path": "35" + }, + "452": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "DUP3", + "path": "35" + }, + "453": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "DUP5", + "path": "35" + }, + "454": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "CALLDATACOPY", + "path": "35" + }, + "455": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "DUP1", + "path": "35" + }, + "456": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "DUP4", + "path": "35" + }, + "457": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "ADD", + "path": "35" + }, + "458": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "SWAP3", + "path": "35" + }, + "459": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "POP", + "path": "35" + }, + "460": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "POP", + "path": "35" + }, + "461": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "POP", + "path": "35" + }, + "462": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "SWAP6", + "path": "35" + }, + "463": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "POP", + "path": "35" + }, + "464": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "POP", + "path": "35" + }, + "465": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "POP", + "path": "35" + }, + "466": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "POP", + "path": "35" + }, + "467": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "POP", + "path": "35" + }, + "468": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "POP", + "path": "35" + }, + "469": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "PUSH1", + "path": "35", + "value": "0x40" + }, + "471": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "MLOAD", + "path": "35" + }, + "472": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "474": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "DUP2", + "path": "35" + }, + "475": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "DUP4", + "path": "35" + }, + "476": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "SUB", + "path": "35" + }, + "477": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "SUB", + "path": "35" + }, + "478": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "DUP2", + "path": "35" + }, + "479": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "MSTORE", + "path": "35" + }, + "480": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "SWAP1", + "path": "35" + }, + "481": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "PUSH1", + "path": "35", + "value": "0x40" + }, + "483": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2212, 2288], + "op": "MSTORE", + "path": "35" + }, + "484": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2189, 2298], + "op": "DUP1", + "path": "35" + }, + "485": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2189, 2298], + "op": "MLOAD", + "path": "35" + }, + "486": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2189, 2298], + "op": "SWAP1", + "path": "35" + }, + "487": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2189, 2298], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "489": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2189, 2298], + "op": "ADD", + "path": "35" + }, + "490": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2189, 2298], + "op": "KECCAK256", + "path": "35" + }, + "491": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2171, 2298], + "op": "SWAP1", + "path": "35" + }, + "492": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2171, 2298], + "op": "POP", + "path": "35" + }, + "493": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2345, 2346], + "op": "PUSH1", + "path": "35", + "statement": 0, + "value": "0x0" + }, + "495": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2317, 2333], + "op": "PUSH2", + "path": "35", + "value": "0x1F6" + }, + "498": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2317, 2331], + "op": "PUSH2", + "path": "35", + "value": "0x411" + }, + "501": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "jump": "i", + "offset": [2317, 2333], + "op": "JUMP", + "path": "35" + }, + "502": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2317, 2333], + "op": "JUMPDEST", + "path": "35" + }, + "503": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2317, 2342], + "op": "PUSH1", + "path": "35", + "value": "0x0" + }, + "505": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2317, 2342], + "op": "DUP4", + "path": "35" + }, + "506": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2317, 2342], + "op": "DUP2", + "path": "35" + }, + "507": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2317, 2342], + "op": "MSTORE", + "path": "35" + }, + "508": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2317, 2342], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "510": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2317, 2342], + "op": "SWAP2", + "path": "35" + }, + "511": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2317, 2342], + "op": "SWAP1", + "path": "35" + }, + "512": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2317, 2342], + "op": "SWAP2", + "path": "35" + }, + "513": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2317, 2342], + "op": "MSTORE", + "path": "35" + }, + "514": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2317, 2342], + "op": "PUSH1", + "path": "35", + "value": "0x40" + }, + "516": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2317, 2342], + "op": "SWAP1", + "path": "35" + }, + "517": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2317, 2342], + "op": "KECCAK256", + "path": "35" + }, + "518": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2317, 2342], + "op": "SLOAD", + "path": "35" + }, + "519": { + "branch": 9, + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2317, 2346], + "op": "GT", + "path": "35" + }, + "520": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "PUSH2", + "path": "35", + "value": "0x258" + }, + "523": { + "branch": 9, + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "JUMPI", + "path": "35" + }, + "524": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "PUSH1", + "path": "35", + "value": "0x40" + }, + "526": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "DUP1", + "path": "35" + }, + "527": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "MLOAD", + "path": "35" + }, + "528": { + "op": "PUSH3", + "value": "0x461BCD" + }, + "532": { + "op": "PUSH1", + "value": "0xE5" + }, + "534": { + "op": "SHL" + }, + "535": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "DUP2", + "path": "35" + }, + "536": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "MSTORE", + "path": "35" + }, + "537": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "539": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "PUSH1", + "path": "35", + "value": "0x4" + }, + "541": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "DUP3", + "path": "35" + }, + "542": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "ADD", + "path": "35" + }, + "543": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "MSTORE", + "path": "35" + }, + "544": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "PUSH1", + "path": "35", + "value": "0x1A" + }, + "546": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "PUSH1", + "path": "35", + "value": "0x24" + }, + "548": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "DUP3", + "path": "35" + }, + "549": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "ADD", + "path": "35" + }, + "550": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "MSTORE", + "path": "35" + }, + "551": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "PUSH32", + "path": "35", + "value": "0x494E56414C49445F4D4553534147455F544F5F434F4E53554D45000000000000" + }, + "584": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "PUSH1", + "path": "35", + "value": "0x44" + }, + "586": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "DUP3", + "path": "35" + }, + "587": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "ADD", + "path": "35" + }, + "588": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "MSTORE", + "path": "35" + }, + "589": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "SWAP1", + "path": "35" + }, + "590": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "MLOAD", + "path": "35" + }, + "591": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "SWAP1", + "path": "35" + }, + "592": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "DUP2", + "path": "35" + }, + "593": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "SWAP1", + "path": "35" + }, + "594": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "SUB", + "path": "35" + }, + "595": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "PUSH1", + "path": "35", + "value": "0x64" + }, + "597": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "ADD", + "path": "35" + }, + "598": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "SWAP1", + "path": "35" + }, + "599": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "REVERT", + "path": "35" + }, + "600": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2309, 2377], + "op": "JUMPDEST", + "path": "35" + }, + "601": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2426, 2436], + "op": "CALLER", + "path": "35", + "statement": 1 + }, + "602": { + "op": "PUSH1", + "value": "0x1" + }, + "604": { + "op": "PUSH1", + "value": "0x1" + }, + "606": { + "op": "PUSH1", + "value": "0xA0" + }, + "608": { + "op": "SHL" + }, + "609": { + "op": "SUB" + }, + "610": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "AND", + "path": "35" + }, + "611": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2412, 2424], + "op": "DUP6", + "path": "35" + }, + "612": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "PUSH32", + "path": "35", + "value": "0x7A06C571AA77F34D9706C51E5D8122B5595AEBEAA34233BFE866F22BEFB973B1" + }, + "645": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2438, 2445], + "op": "DUP7", + "path": "35" + }, + "646": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2438, 2445], + "op": "DUP7", + "path": "35" + }, + "647": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "PUSH1", + "path": "35", + "value": "0x40" + }, + "649": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "MLOAD", + "path": "35" + }, + "650": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "DUP1", + "path": "35" + }, + "651": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "DUP1", + "path": "35" + }, + "652": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "654": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "ADD", + "path": "35" + }, + "655": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "DUP3", + "path": "35" + }, + "656": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "DUP2", + "path": "35" + }, + "657": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "SUB", + "path": "35" + }, + "658": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "DUP3", + "path": "35" + }, + "659": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "MSTORE", + "path": "35" + }, + "660": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "DUP5", + "path": "35" + }, + "661": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "DUP5", + "path": "35" + }, + "662": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "DUP3", + "path": "35" + }, + "663": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "DUP2", + "path": "35" + }, + "664": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "DUP2", + "path": "35" + }, + "665": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "MSTORE", + "path": "35" + }, + "666": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "668": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "ADD", + "path": "35" + }, + "669": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "SWAP3", + "path": "35" + }, + "670": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "POP", + "path": "35" + }, + "671": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "673": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "MUL", + "path": "35" + }, + "674": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "DUP1", + "path": "35" + }, + "675": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "DUP3", + "path": "35" + }, + "676": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "DUP5", + "path": "35" + }, + "677": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "CALLDATACOPY", + "path": "35" + }, + "678": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "PUSH1", + "path": "35", + "value": "0x0" + }, + "680": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "DUP4", + "path": "35" + }, + "681": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "DUP3", + "path": "35" + }, + "682": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "ADD", + "path": "35" + }, + "683": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "MSTORE", + "path": "35" + }, + "684": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "PUSH1", + "path": "35", + "value": "0x40" + }, + "686": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "MLOAD", + "path": "35" + }, + "687": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "PUSH1", + "path": "35", + "value": "0x1F" + }, + "689": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "SWAP1", + "path": "35" + }, + "690": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "SWAP2", + "path": "35" + }, + "691": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "ADD", + "path": "35" + }, + "692": { + "op": "PUSH1", + "value": "0x1F" + }, + "694": { + "op": "NOT" + }, + "695": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "AND", + "path": "35" + }, + "696": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "SWAP1", + "path": "35" + }, + "697": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "SWAP3", + "path": "35" + }, + "698": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "ADD", + "path": "35" + }, + "699": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "DUP3", + "path": "35" + }, + "700": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "SWAP1", + "path": "35" + }, + "701": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "SUB", + "path": "35" + }, + "702": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "SWAP6", + "path": "35" + }, + "703": { + "op": "POP" + }, + "704": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "SWAP1", + "path": "35" + }, + "705": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "SWAP4", + "path": "35" + }, + "706": { + "op": "POP" + }, + "707": { + "op": "POP" + }, + "708": { + "op": "POP" + }, + "709": { + "op": "POP" + }, + "710": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2392, 2446], + "op": "LOG3", + "path": "35" + }, + "711": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2485, 2486], + "op": "PUSH1", + "path": "35", + "statement": 2, + "value": "0x1" + }, + "713": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2456, 2472], + "op": "PUSH2", + "path": "35", + "value": "0x2D0" + }, + "716": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2456, 2470], + "op": "PUSH2", + "path": "35", + "value": "0x411" + }, + "719": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "jump": "i", + "offset": [2456, 2472], + "op": "JUMP", + "path": "35" + }, + "720": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2456, 2472], + "op": "JUMPDEST", + "path": "35" + }, + "721": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2456, 2481], + "op": "PUSH1", + "path": "35", + "value": "0x0" + }, + "723": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2456, 2481], + "op": "DUP4", + "path": "35" + }, + "724": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2456, 2481], + "op": "DUP2", + "path": "35" + }, + "725": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2456, 2481], + "op": "MSTORE", + "path": "35" + }, + "726": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2456, 2481], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "728": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2456, 2481], + "op": "SWAP2", + "path": "35" + }, + "729": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2456, 2481], + "op": "SWAP1", + "path": "35" + }, + "730": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2456, 2481], + "op": "SWAP2", + "path": "35" + }, + "731": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2456, 2481], + "op": "MSTORE", + "path": "35" + }, + "732": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2456, 2481], + "op": "PUSH1", + "path": "35", + "value": "0x40" + }, + "734": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2456, 2481], + "op": "SWAP1", + "path": "35" + }, + "735": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2456, 2481], + "op": "KECCAK256", + "path": "35" + }, + "736": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2456, 2486], + "op": "DUP1", + "path": "35" + }, + "737": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2456, 2486], + "op": "SLOAD", + "path": "35" + }, + "738": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2456, 2486], + "op": "SWAP2", + "path": "35" + }, + "739": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2456, 2486], + "op": "SWAP1", + "path": "35" + }, + "740": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2456, 2486], + "op": "SWAP2", + "path": "35" + }, + "741": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2456, 2486], + "op": "SUB", + "path": "35" + }, + "742": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2456, 2486], + "op": "SWAP1", + "path": "35" + }, + "743": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2456, 2486], + "op": "SSTORE", + "path": "35" + }, + "744": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2456, 2481], + "op": "SWAP5", + "path": "35" + }, + "745": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "offset": [2017, 2517], + "op": "SWAP4", + "path": "35" + }, + "746": { + "op": "POP" + }, + "747": { + "op": "POP" + }, + "748": { + "op": "POP" + }, + "749": { + "op": "POP" + }, + "750": { + "fn": "StarknetMessaging.consumeMessageFromL2", + "jump": "o", + "offset": [2017, 2517], + "op": "JUMP", + "path": "35" + }, + "751": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "JUMPDEST", + "path": "35" + }, + "752": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1513, 1520], + "op": "PUSH1", + "path": "35", + "value": "0x0" + }, + "754": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1576, 1584], + "op": "DUP4", + "path": "35", + "statement": 3 + }, + "755": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1564, 1574], + "op": "DUP6", + "path": "35" + }, + "756": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1552, 1562], + "op": "CALLER", + "path": "35" + }, + "757": { + "op": "PUSH1", + "value": "0x1" + }, + "759": { + "op": "PUSH1", + "value": "0x1" + }, + "761": { + "op": "PUSH1", + "value": "0xA0" + }, + "763": { + "op": "SHL" + }, + "764": { + "op": "SUB" + }, + "765": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "AND", + "path": "35" + }, + "766": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "PUSH32", + "path": "35", + "value": "0x474D2456B41FC1146AE05BA36E794E448EFD2F172A9128CA1C8C6DBDB22B62F7" + }, + "799": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1586, 1593], + "op": "DUP7", + "path": "35" + }, + "800": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1586, 1593], + "op": "DUP7", + "path": "35" + }, + "801": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "PUSH1", + "path": "35", + "value": "0x40" + }, + "803": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "MLOAD", + "path": "35" + }, + "804": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "DUP1", + "path": "35" + }, + "805": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "DUP1", + "path": "35" + }, + "806": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "808": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "ADD", + "path": "35" + }, + "809": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "DUP3", + "path": "35" + }, + "810": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "DUP2", + "path": "35" + }, + "811": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "SUB", + "path": "35" + }, + "812": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "DUP3", + "path": "35" + }, + "813": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "MSTORE", + "path": "35" + }, + "814": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "DUP5", + "path": "35" + }, + "815": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "DUP5", + "path": "35" + }, + "816": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "DUP3", + "path": "35" + }, + "817": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "DUP2", + "path": "35" + }, + "818": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "DUP2", + "path": "35" + }, + "819": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "MSTORE", + "path": "35" + }, + "820": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "822": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "ADD", + "path": "35" + }, + "823": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "SWAP3", + "path": "35" + }, + "824": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "POP", + "path": "35" + }, + "825": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "827": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "MUL", + "path": "35" + }, + "828": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "DUP1", + "path": "35" + }, + "829": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "DUP3", + "path": "35" + }, + "830": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "DUP5", + "path": "35" + }, + "831": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "CALLDATACOPY", + "path": "35" + }, + "832": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "PUSH1", + "path": "35", + "value": "0x0" + }, + "834": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "DUP4", + "path": "35" + }, + "835": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "DUP3", + "path": "35" + }, + "836": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "ADD", + "path": "35" + }, + "837": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "MSTORE", + "path": "35" + }, + "838": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "PUSH1", + "path": "35", + "value": "0x40" + }, + "840": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "MLOAD", + "path": "35" + }, + "841": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "PUSH1", + "path": "35", + "value": "0x1F" + }, + "843": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "SWAP1", + "path": "35" + }, + "844": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "SWAP2", + "path": "35" + }, + "845": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "ADD", + "path": "35" + }, + "846": { + "op": "PUSH1", + "value": "0x1F" + }, + "848": { + "op": "NOT" + }, + "849": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "AND", + "path": "35" + }, + "850": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "SWAP1", + "path": "35" + }, + "851": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "SWAP3", + "path": "35" + }, + "852": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "ADD", + "path": "35" + }, + "853": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "DUP3", + "path": "35" + }, + "854": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "SWAP1", + "path": "35" + }, + "855": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "SUB", + "path": "35" + }, + "856": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "SWAP6", + "path": "35" + }, + "857": { + "op": "POP" + }, + "858": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "SWAP1", + "path": "35" + }, + "859": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "SWAP4", + "path": "35" + }, + "860": { + "op": "POP" + }, + "861": { + "op": "POP" + }, + "862": { + "op": "POP" + }, + "863": { + "op": "POP" + }, + "864": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1537, 1594], + "op": "LOG4", + "path": "35" + }, + "865": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1686, 1701], + "op": "PUSH1", + "path": "35", + "value": "0x0" + }, + "867": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1752, 1762], + "op": "CALLER", + "path": "35" + }, + "868": { + "op": "PUSH1", + "value": "0x1" + }, + "870": { + "op": "PUSH1", + "value": "0x1" + }, + "872": { + "op": "PUSH1", + "value": "0xA0" + }, + "874": { + "op": "SHL" + }, + "875": { + "op": "SUB" + }, + "876": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1744, 1763], + "op": "AND", + "path": "35" + }, + "877": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1765, 1775], + "op": "DUP7", + "path": "35" + }, + "878": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1781, 1788], + "op": "DUP6", + "path": "35" + }, + "879": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1781, 1788], + "op": "DUP6", + "path": "35" + }, + "880": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1781, 1795], + "op": "SWAP1", + "path": "35" + }, + "881": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1781, 1795], + "op": "POP", + "path": "35" + }, + "882": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1777, 1778], + "op": "PUSH1", + "path": "35", + "value": "0x1" + }, + "884": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1777, 1795], + "op": "ADD", + "path": "35" + }, + "885": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1797, 1805], + "op": "DUP8", + "path": "35" + }, + "886": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1807, 1814], + "op": "DUP8", + "path": "35" + }, + "887": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1807, 1814], + "op": "DUP8", + "path": "35" + }, + "888": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "PUSH1", + "path": "35", + "value": "0x40" + }, + "890": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "MLOAD", + "path": "35" + }, + "891": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "893": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "ADD", + "path": "35" + }, + "894": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "DUP1", + "path": "35" + }, + "895": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "DUP8", + "path": "35" + }, + "896": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "DUP2", + "path": "35" + }, + "897": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "MSTORE", + "path": "35" + }, + "898": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "900": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "ADD", + "path": "35" + }, + "901": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "DUP7", + "path": "35" + }, + "902": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "DUP2", + "path": "35" + }, + "903": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "MSTORE", + "path": "35" + }, + "904": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "906": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "ADD", + "path": "35" + }, + "907": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "DUP6", + "path": "35" + }, + "908": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "DUP2", + "path": "35" + }, + "909": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "MSTORE", + "path": "35" + }, + "910": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "912": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "ADD", + "path": "35" + }, + "913": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "DUP5", + "path": "35" + }, + "914": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "DUP2", + "path": "35" + }, + "915": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "MSTORE", + "path": "35" + }, + "916": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "918": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "ADD", + "path": "35" + }, + "919": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "DUP4", + "path": "35" + }, + "920": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "DUP4", + "path": "35" + }, + "921": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "923": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "MUL", + "path": "35" + }, + "924": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "DUP1", + "path": "35" + }, + "925": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "DUP3", + "path": "35" + }, + "926": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "DUP5", + "path": "35" + }, + "927": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "CALLDATACOPY", + "path": "35" + }, + "928": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "DUP1", + "path": "35" + }, + "929": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "DUP4", + "path": "35" + }, + "930": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "ADD", + "path": "35" + }, + "931": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "SWAP3", + "path": "35" + }, + "932": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "POP", + "path": "35" + }, + "933": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "POP", + "path": "35" + }, + "934": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "POP", + "path": "35" + }, + "935": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "SWAP7", + "path": "35" + }, + "936": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "POP", + "path": "35" + }, + "937": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "POP", + "path": "35" + }, + "938": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "POP", + "path": "35" + }, + "939": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "POP", + "path": "35" + }, + "940": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "POP", + "path": "35" + }, + "941": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "POP", + "path": "35" + }, + "942": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "POP", + "path": "35" + }, + "943": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "PUSH1", + "path": "35", + "value": "0x40" + }, + "945": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "MLOAD", + "path": "35" + }, + "946": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "948": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "DUP2", + "path": "35" + }, + "949": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "DUP4", + "path": "35" + }, + "950": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "SUB", + "path": "35" + }, + "951": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "SUB", + "path": "35" + }, + "952": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "DUP2", + "path": "35" + }, + "953": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "MSTORE", + "path": "35" + }, + "954": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "SWAP1", + "path": "35" + }, + "955": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "PUSH1", + "path": "35", + "value": "0x40" + }, + "957": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1727, 1815], + "op": "MSTORE", + "path": "35" + }, + "958": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1704, 1825], + "op": "DUP1", + "path": "35" + }, + "959": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1704, 1825], + "op": "MLOAD", + "path": "35" + }, + "960": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1704, 1825], + "op": "SWAP1", + "path": "35" + }, + "961": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1704, 1825], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "963": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1704, 1825], + "op": "ADD", + "path": "35" + }, + "964": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1704, 1825], + "op": "KECCAK256", + "path": "35" + }, + "965": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1686, 1825], + "op": "SWAP1", + "path": "35" + }, + "966": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1686, 1825], + "op": "POP", + "path": "35" + }, + "967": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1864, 1865], + "op": "PUSH1", + "path": "35", + "statement": 4, + "value": "0x1" + }, + "969": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1835, 1851], + "op": "PUSH2", + "path": "35", + "value": "0x3D0" + }, + "972": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1835, 1849], + "op": "PUSH2", + "path": "35", + "value": "0x439" + }, + "975": { + "fn": "StarknetMessaging.sendMessageToL2", + "jump": "i", + "offset": [1835, 1851], + "op": "JUMP", + "path": "35" + }, + "976": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1835, 1851], + "op": "JUMPDEST", + "path": "35" + }, + "977": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1835, 1860], + "op": "PUSH1", + "path": "35", + "value": "0x0" + }, + "979": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1835, 1860], + "op": "DUP4", + "path": "35" + }, + "980": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1835, 1860], + "op": "DUP2", + "path": "35" + }, + "981": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1835, 1860], + "op": "MSTORE", + "path": "35" + }, + "982": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1835, 1860], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "984": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1835, 1860], + "op": "SWAP2", + "path": "35" + }, + "985": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1835, 1860], + "op": "SWAP1", + "path": "35" + }, + "986": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1835, 1860], + "op": "SWAP2", + "path": "35" + }, + "987": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1835, 1860], + "op": "MSTORE", + "path": "35" + }, + "988": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1835, 1860], + "op": "PUSH1", + "path": "35", + "value": "0x40" + }, + "990": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1835, 1860], + "op": "SWAP1", + "path": "35" + }, + "991": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1835, 1860], + "op": "KECCAK256", + "path": "35" + }, + "992": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1835, 1865], + "op": "DUP1", + "path": "35" + }, + "993": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1835, 1865], + "op": "SLOAD", + "path": "35" + }, + "994": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1835, 1865], + "op": "SWAP1", + "path": "35" + }, + "995": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1835, 1865], + "op": "SWAP2", + "path": "35" + }, + "996": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1835, 1865], + "op": "ADD", + "path": "35" + }, + "997": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1835, 1865], + "op": "SWAP1", + "path": "35" + }, + "998": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1835, 1865], + "op": "SSTORE", + "path": "35" + }, + "999": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1852, 1859], + "op": "SWAP1", + "path": "35" + }, + "1000": { + "op": "POP" + }, + "1001": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "SWAP5", + "path": "35" + }, + "1002": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "SWAP4", + "path": "35" + }, + "1003": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "POP", + "path": "35" + }, + "1004": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "POP", + "path": "35" + }, + "1005": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "POP", + "path": "35" + }, + "1006": { + "fn": "StarknetMessaging.sendMessageToL2", + "offset": [1365, 1896], + "op": "POP", + "path": "35" + }, + "1007": { + "fn": "StarknetMessaging.sendMessageToL2", + "jump": "o", + "offset": [1365, 1896], + "op": "JUMP", + "path": "35" + }, + "1008": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [705, 827], + "op": "JUMPDEST", + "path": "35" + }, + "1009": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [769, 776], + "op": "PUSH1", + "path": "35", + "value": "0x0" + }, + "1011": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [795, 811], + "op": "PUSH2", + "path": "35", + "statement": 5, + "value": "0x3FA" + }, + "1014": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [795, 809], + "op": "PUSH2", + "path": "35", + "value": "0x439" + }, + "1017": { + "fn": "StarknetMessaging.l1ToL2Messages", + "jump": "i", + "offset": [795, 811], + "op": "JUMP", + "path": "35" + }, + "1018": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [795, 811], + "op": "JUMPDEST", + "path": "35" + }, + "1019": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [795, 820], + "op": "PUSH1", + "path": "35", + "value": "0x0" + }, + "1021": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [795, 820], + "op": "SWAP3", + "path": "35" + }, + "1022": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [795, 820], + "op": "DUP4", + "path": "35" + }, + "1023": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [795, 820], + "op": "MSTORE", + "path": "35" + }, + "1024": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [795, 820], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "1026": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [795, 820], + "op": "MSTORE", + "path": "35" + }, + "1027": { + "op": "POP" + }, + "1028": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [795, 820], + "op": "PUSH1", + "path": "35", + "value": "0x40" + }, + "1030": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [795, 820], + "op": "SWAP1", + "path": "35" + }, + "1031": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [795, 820], + "op": "KECCAK256", + "path": "35" + }, + "1032": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [795, 820], + "op": "SLOAD", + "path": "35" + }, + "1033": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [795, 820], + "op": "SWAP1", + "path": "35" + }, + "1034": { + "fn": "StarknetMessaging.l1ToL2Messages", + "jump": "o", + "offset": [705, 827], + "op": "JUMP", + "path": "35" + }, + "1035": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [833, 955], + "op": "JUMPDEST", + "path": "35" + }, + "1036": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [897, 904], + "op": "PUSH1", + "path": "35", + "value": "0x0" + }, + "1038": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [923, 939], + "op": "PUSH2", + "path": "35", + "statement": 6, + "value": "0x3FA" + }, + "1041": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [1135, 1303], + "op": "JUMPDEST", + "path": "35" + }, + "1042": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [1184, 1219], + "op": "PUSH1", + "path": "35", + "value": "0x0" + }, + "1044": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [1238, 1296], + "op": "PUSH2", + "path": "35", + "statement": 7, + "value": "0x434" + }, + "1047": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [1275, 1295], + "op": "PUSH1", + "path": "35", + "value": "0x40" + }, + "1049": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [1275, 1295], + "op": "MLOAD", + "path": "35" + }, + "1050": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [1275, 1295], + "op": "DUP1", + "path": "35" + }, + "1051": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [1275, 1295], + "op": "PUSH1", + "path": "35", + "value": "0x60" + }, + "1053": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [1275, 1295], + "op": "ADD", + "path": "35" + }, + "1054": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [1275, 1295], + "op": "PUSH1", + "path": "35", + "value": "0x40" + }, + "1056": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [1275, 1295], + "op": "MSTORE", + "path": "35" + }, + "1057": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [1275, 1295], + "op": "DUP1", + "path": "35" + }, + "1058": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [1275, 1295], + "op": "PUSH1", + "path": "35", + "value": "0x23" + }, + "1060": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [1275, 1295], + "op": "DUP2", + "path": "35" + }, + "1061": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [1275, 1295], + "op": "MSTORE", + "path": "35" + }, + "1062": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [1275, 1295], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "1064": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [1275, 1295], + "op": "ADD", + "path": "35" + }, + "1065": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [1275, 1295], + "op": "PUSH2", + "path": "35", + "value": "0x4F8" + }, + "1068": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [1275, 1295], + "op": "PUSH1", + "path": "35", + "value": "0x23" + }, + "1070": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [1275, 1295], + "op": "SWAP2", + "path": "35" + }, + "1071": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [1275, 1295], + "op": "CODECOPY", + "path": "35" + }, + "1072": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [1238, 1274], + "op": "PUSH2", + "path": "35", + "value": "0x458" + }, + "1075": { + "fn": "StarknetMessaging.l2ToL1Messages", + "jump": "i", + "offset": [1238, 1296], + "op": "JUMP", + "path": "35" + }, + "1076": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [1238, 1296], + "op": "JUMPDEST", + "path": "35" + }, + "1077": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [1231, 1296], + "op": "SWAP1", + "path": "35" + }, + "1078": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [1231, 1296], + "op": "POP", + "path": "35" + }, + "1079": { + "fn": "StarknetMessaging.l2ToL1Messages", + "offset": [1135, 1303], + "op": "SWAP1", + "path": "35" + }, + "1080": { + "fn": "StarknetMessaging.l2ToL1Messages", + "jump": "o", + "offset": [1135, 1303], + "op": "JUMP", + "path": "35" + }, + "1081": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [961, 1129], + "op": "JUMPDEST", + "path": "35" + }, + "1082": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [1010, 1045], + "op": "PUSH1", + "path": "35", + "value": "0x0" + }, + "1084": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [1064, 1122], + "op": "PUSH2", + "path": "35", + "statement": 8, + "value": "0x434" + }, + "1087": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [1101, 1121], + "op": "PUSH1", + "path": "35", + "value": "0x40" + }, + "1089": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [1101, 1121], + "op": "MLOAD", + "path": "35" + }, + "1090": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [1101, 1121], + "op": "DUP1", + "path": "35" + }, + "1091": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [1101, 1121], + "op": "PUSH1", + "path": "35", + "value": "0x60" + }, + "1093": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [1101, 1121], + "op": "ADD", + "path": "35" + }, + "1094": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [1101, 1121], + "op": "PUSH1", + "path": "35", + "value": "0x40" + }, + "1096": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [1101, 1121], + "op": "MSTORE", + "path": "35" + }, + "1097": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [1101, 1121], + "op": "DUP1", + "path": "35" + }, + "1098": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [1101, 1121], + "op": "PUSH1", + "path": "35", + "value": "0x23" + }, + "1100": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [1101, 1121], + "op": "DUP2", + "path": "35" + }, + "1101": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [1101, 1121], + "op": "MSTORE", + "path": "35" + }, + "1102": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [1101, 1121], + "op": "PUSH1", + "path": "35", + "value": "0x20" + }, + "1104": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [1101, 1121], + "op": "ADD", + "path": "35" + }, + "1105": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [1101, 1121], + "op": "PUSH2", + "path": "35", + "value": "0x4D5" + }, + "1108": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [1101, 1121], + "op": "PUSH1", + "path": "35", + "value": "0x23" + }, + "1110": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [1101, 1121], + "op": "SWAP2", + "path": "35" + }, + "1111": { + "fn": "StarknetMessaging.l1ToL2Messages", + "offset": [1101, 1121], + "op": "CODECOPY", + "path": "35" + }, + "1112": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [258, 556], + "op": "JUMPDEST", + "path": "0" + }, + "1113": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [358, 408], + "op": "PUSH1", + "path": "0", + "value": "0x0" + }, + "1115": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [424, 440], + "op": "DUP1", + "path": "0" + }, + "1116": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [470, 474], + "op": "DUP3", + "path": "0" + }, + "1117": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "PUSH1", + "path": "0", + "value": "0x40" + }, + "1119": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "MLOAD", + "path": "0" + }, + "1120": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "1122": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "ADD", + "path": "0" + }, + "1123": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "DUP1", + "path": "0" + }, + "1124": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "DUP3", + "path": "0" + }, + "1125": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "DUP1", + "path": "0" + }, + "1126": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "MLOAD", + "path": "0" + }, + "1127": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "SWAP1", + "path": "0" + }, + "1128": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "1130": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "ADD", + "path": "0" + }, + "1131": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "SWAP1", + "path": "0" + }, + "1132": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "DUP1", + "path": "0" + }, + "1133": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "DUP4", + "path": "0" + }, + "1134": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "DUP4", + "path": "0" + }, + "1135": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "JUMPDEST", + "path": "0" + }, + "1136": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "1138": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "DUP4", + "path": "0" + }, + "1139": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "LT", + "path": "0" + }, + "1140": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "PUSH2", + "path": "0", + "value": "0x48E" + }, + "1143": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "JUMPI", + "path": "0" + }, + "1144": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "DUP1", + "path": "0" + }, + "1145": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "MLOAD", + "path": "0" + }, + "1146": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "DUP3", + "path": "0" + }, + "1147": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "MSTORE", + "path": "0" + }, + "1148": { + "op": "PUSH1", + "value": "0x1F" + }, + "1150": { + "op": "NOT" + }, + "1151": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "SWAP1", + "path": "0" + }, + "1152": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "SWAP3", + "path": "0" + }, + "1153": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "ADD", + "path": "0" + }, + "1154": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "SWAP2", + "path": "0" + }, + "1155": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "1157": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "SWAP2", + "path": "0" + }, + "1158": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "DUP3", + "path": "0" + }, + "1159": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "ADD", + "path": "0" + }, + "1160": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "SWAP2", + "path": "0" + }, + "1161": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "ADD", + "path": "0" + }, + "1162": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "PUSH2", + "path": "0", + "value": "0x46F" + }, + "1165": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "JUMP", + "path": "0" + }, + "1166": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "JUMPDEST", + "path": "0" + }, + "1167": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "PUSH1", + "path": "0", + "value": "0x1" + }, + "1169": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "DUP4", + "path": "0" + }, + "1170": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "1172": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "SUB", + "path": "0" + }, + "1173": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "PUSH2", + "path": "0", + "value": "0x100" + }, + "1176": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "EXP", + "path": "0" + }, + "1177": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "SUB", + "path": "0" + }, + "1178": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "DUP1", + "path": "0" + }, + "1179": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "NOT", + "path": "0" + }, + "1180": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "DUP3", + "path": "0" + }, + "1181": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "MLOAD", + "path": "0" + }, + "1182": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "AND", + "path": "0" + }, + "1183": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "DUP2", + "path": "0" + }, + "1184": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "DUP5", + "path": "0" + }, + "1185": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "MLOAD", + "path": "0" + }, + "1186": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "AND", + "path": "0" + }, + "1187": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "DUP1", + "path": "0" + }, + "1188": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "DUP3", + "path": "0" + }, + "1189": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "OR", + "path": "0" + }, + "1190": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "DUP6", + "path": "0" + }, + "1191": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "MSTORE", + "path": "0" + }, + "1192": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "POP", + "path": "0" + }, + "1193": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "POP", + "path": "0" + }, + "1194": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "POP", + "path": "0" + }, + "1195": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "POP", + "path": "0" + }, + "1196": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "POP", + "path": "0" + }, + "1197": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "POP", + "path": "0" + }, + "1198": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "SWAP1", + "path": "0" + }, + "1199": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "POP", + "path": "0" + }, + "1200": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "ADD", + "path": "0" + }, + "1201": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "SWAP2", + "path": "0" + }, + "1202": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "POP", + "path": "0" + }, + "1203": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "POP", + "path": "0" + }, + "1204": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "PUSH1", + "path": "0", + "value": "0x40" + }, + "1206": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "MLOAD", + "path": "0" + }, + "1207": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "1209": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "DUP2", + "path": "0" + }, + "1210": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "DUP4", + "path": "0" + }, + "1211": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "SUB", + "path": "0" + }, + "1212": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "SUB", + "path": "0" + }, + "1213": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "DUP2", + "path": "0" + }, + "1214": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "MSTORE", + "path": "0" + }, + "1215": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "SWAP1", + "path": "0" + }, + "1216": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "PUSH1", + "path": "0", + "value": "0x40" + }, + "1218": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [453, 475], + "op": "MSTORE", + "path": "0" + }, + "1219": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [443, 476], + "op": "DUP1", + "path": "0" + }, + "1220": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [443, 476], + "op": "MLOAD", + "path": "0" + }, + "1221": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [443, 476], + "op": "SWAP1", + "path": "0" + }, + "1222": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [443, 476], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "1224": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [443, 476], + "op": "ADD", + "path": "0" + }, + "1225": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [443, 476], + "op": "KECCAK256", + "path": "0" + }, + "1226": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [424, 476], + "op": "SWAP1", + "path": "0" + }, + "1227": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [424, 476], + "op": "POP", + "path": "0" + }, + "1228": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [532, 540], + "op": "DUP1", + "path": "0" + }, + "1229": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [509, 540], + "op": "SWAP2", + "path": "0" + }, + "1230": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [509, 540], + "op": "POP", + "path": "0" + }, + "1231": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [495, 550], + "op": "POP", + "path": "0" + }, + "1232": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [495, 550], + "op": "SWAP2", + "path": "0" + }, + "1233": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [495, 550], + "op": "SWAP1", + "path": "0" + }, + "1234": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "offset": [495, 550], + "op": "POP", + "path": "0" + }, + "1235": { + "fn": "NamedStorage.bytes32ToUint256Mapping", + "jump": "o", + "offset": [495, 550], + "op": "JUMP", + "path": "0" + } + }, + "sha1": "38417e6940d7e638497154b57e8e6209ddc76fc3", + "source": "// SPDX-License-Identifier: Apache-2.0.\npragma solidity ^0.6.12;\n\nimport \"./IStarknetMessaging.sol\";\nimport \"contracts/common-contracts/src/libraries/NamedStorage.sol\";\n\n/**\n Implements sending messages to L2 by adding them to a pipe and consuming messages from L2 by\n removing them from a different pipe. A deriving contract can handle the former pipe and add items\n to the latter pipe while interacting with L2.\n*/\ncontract StarknetMessaging is IStarknetMessaging {\n /**\n Random slot storage elements and accessors.\n */\n string constant L1L2_MESSAGE_MAP_TAG = \"STARKNET_1.0_MSGING_L1TOL2_MAPPPING\";\n string constant L2L1_MESSAGE_MAP_TAG = \"STARKNET_1.0_MSGING_L2TOL1_MAPPPING\";\n\n function l1ToL2Messages(bytes32 msgHash) external view returns (uint256) {\n return l1ToL2Messages()[msgHash];\n }\n\n function l2ToL1Messages(bytes32 msgHash) external view returns (uint256) {\n return l2ToL1Messages()[msgHash];\n }\n\n function l1ToL2Messages() internal pure returns (mapping(bytes32 => uint256) storage) {\n return NamedStorage.bytes32ToUint256Mapping(L1L2_MESSAGE_MAP_TAG);\n }\n\n function l2ToL1Messages() internal pure returns (mapping(bytes32 => uint256) storage) {\n return NamedStorage.bytes32ToUint256Mapping(L2L1_MESSAGE_MAP_TAG);\n }\n\n /**\n Sends a message to an L2 contract.\n */\n function sendMessageToL2(\n uint256 to_address,\n uint256 selector,\n uint256[] calldata payload\n ) external override returns (bytes32) {\n emit LogMessageToL2(msg.sender, to_address, selector, payload);\n // Note that the selector (a single integer) is prepended to the payload.\n bytes32 msgHash = keccak256(\n abi.encodePacked(uint256(msg.sender), to_address, 1 + payload.length, selector, payload)\n );\n l1ToL2Messages()[msgHash] += 1;\n return msgHash;\n }\n\n /**\n Consumes a message that was sent from an L2 contract.\n\n Returns the hash of the message.\n */\n function consumeMessageFromL2(uint256 from_address, uint256[] calldata payload)\n external\n override\n returns (bytes32)\n {\n bytes32 msgHash = keccak256(\n abi.encodePacked(from_address, uint256(msg.sender), payload.length, payload)\n );\n\n require(l2ToL1Messages()[msgHash] > 0, \"INVALID_MESSAGE_TO_CONSUME\");\n emit ConsumedMessageToL1(from_address, msg.sender, payload);\n l2ToL1Messages()[msgHash] -= 1;\n return msgHash;\n }\n}\n", + "sourceMap": "420:2099:35:-:0;;;;;;;;;;;;;;;;;;;", + "sourcePath": "contracts/starkware/starknet/eth/StarknetMessaging.sol", + "type": "contract" +} diff --git a/src/contracts/index.js b/src/contracts/index.js new file mode 100644 index 00000000..4788ba19 --- /dev/null +++ b/src/contracts/index.js @@ -0,0 +1,4 @@ +export * from './ERC20/ERC20'; +export * from './StarknetMessaging/StarknetMessaging'; +export * from './StarknetERC20Bridge/StarknetERC20Bridge'; +export * from './StarknetEthBridge/StarknetEthBridge'; diff --git a/src/enums/ActionType.js b/src/enums/ActionType.js new file mode 100644 index 00000000..363f8a67 --- /dev/null +++ b/src/enums/ActionType.js @@ -0,0 +1,4 @@ +export const ActionType = { + TRANSFER_TO_STARKNET: 1, + TRANSFER_FROM_STARKNET: 2 +}; diff --git a/src/enums/ChainType.js b/src/enums/ChainType.js new file mode 100644 index 00000000..f414f05a --- /dev/null +++ b/src/enums/ChainType.js @@ -0,0 +1,31 @@ +export const ChainType = { + MAIN: { + id: 1, + name: 'main' + }, + MORDEN: { + id: 2, + name: 'morden' + }, + ROPSTEN: { + id: 3, + name: 'ropsten' + }, + RINKEBY: { + id: 4, + name: 'rinkeby' + }, + GOERLI: { + id: 5, + name: 'goerli' + }, + KOVAN: { + id: 42, + name: 'kovan' + } +}; + +export const toChainName = id => { + const key = Object.keys(ChainType).find(key => ChainType[key].id === id); + return key && ChainType[key].name; +}; diff --git a/src/enums/MenuType.js b/src/enums/MenuType.js new file mode 100644 index 00000000..05550fc9 --- /dev/null +++ b/src/enums/MenuType.js @@ -0,0 +1,5 @@ +export const MenuType = { + TRANSFER: 0, + SELECT_TOKEN: 1, + ACCOUNT: 2 +}; diff --git a/src/enums/NetworkType.js b/src/enums/NetworkType.js new file mode 100644 index 00000000..2439af96 --- /dev/null +++ b/src/enums/NetworkType.js @@ -0,0 +1,10 @@ +export const NetworkType = { + ETHEREUM: { + name: 'Ethereum', + symbol: 'ETH' + }, + STARKNET: { + name: 'StarkNet', + symbol: 'STARKNET' + } +}; diff --git a/src/enums/WalletType.js b/src/enums/WalletType.js new file mode 100644 index 00000000..469a151a --- /dev/null +++ b/src/enums/WalletType.js @@ -0,0 +1,4 @@ +export const WalletType = { + L1: 1, + L2: 2 +}; diff --git a/src/enums/index.js b/src/enums/index.js new file mode 100644 index 00000000..c2c8eb9f --- /dev/null +++ b/src/enums/index.js @@ -0,0 +1,5 @@ +export * from './ChainType'; +export * from './MenuType'; +export * from './ActionType'; +export * from './NetworkType'; +export * from './WalletType'; diff --git a/src/hooks/index.js b/src/hooks/index.js new file mode 100644 index 00000000..d4271a4f --- /dev/null +++ b/src/hooks/index.js @@ -0,0 +1,6 @@ +export * from './useAnimation'; +export * from './useIsLoading'; +export * from './useWindowSize'; +export * from './useVars'; +export * from './useColors'; +export * from './useWalletHandlerProvider'; diff --git a/src/hooks/useAnimation.js b/src/hooks/useAnimation.js new file mode 100644 index 00000000..1519ade2 --- /dev/null +++ b/src/hooks/useAnimation.js @@ -0,0 +1,16 @@ +import {useState} from 'react'; + +export const useAnimation = interval => { + const [isAnimate, setIsAnimate] = useState(false); + const [timeoutId, setTimeoutId] = useState(null); + + const startAnimation = () => { + if (typeof timeoutId === 'number') { + clearTimeout(timeoutId); + } + setIsAnimate(true); + setTimeoutId(setTimeout(() => setIsAnimate(false), interval)); + }; + + return [isAnimate, startAnimation]; +}; diff --git a/src/hooks/useColors.js b/src/hooks/useColors.js new file mode 100644 index 00000000..1d00d1bf --- /dev/null +++ b/src/hooks/useColors.js @@ -0,0 +1,3 @@ +import colors from '../styles/colors.module.scss'; + +export const useColors = () => colors; diff --git a/src/hooks/useIsLoading.js b/src/hooks/useIsLoading.js new file mode 100644 index 00000000..366cccc5 --- /dev/null +++ b/src/hooks/useIsLoading.js @@ -0,0 +1,19 @@ +import {useEffect, useState} from 'react'; +import {useWallet} from 'use-wallet'; + +export const useIsLoading = deps => { + const [isLoading, setIsLoading] = useState(true); + const {isConnected, status} = useWallet(); + + useEffect(() => { + if (!isConnected()) { + setIsLoading(false); + } else if (deps) { + setIsLoading(false); + } else { + setIsLoading(true); + } + }, [deps, status]); + + return isLoading; +}; diff --git a/src/hooks/useVars.js b/src/hooks/useVars.js new file mode 100644 index 00000000..bde237ad --- /dev/null +++ b/src/hooks/useVars.js @@ -0,0 +1,3 @@ +import vars from '../styles/variables.module.scss'; + +export const useVars = () => vars; diff --git a/src/hooks/useWalletHandlerProvider.js b/src/hooks/useWalletHandlerProvider.js new file mode 100644 index 00000000..3241ae5f --- /dev/null +++ b/src/hooks/useWalletHandlerProvider.js @@ -0,0 +1,33 @@ +import {useEffect, useState} from 'react'; + +import wallets from '../config/wallets.json'; +import {ArgentHandler, MetaMaskHandler} from '../services'; + +const SUPPORTED_HANDLERS_REGISTRY = { + metamask: MetaMaskHandler, + argent: ArgentHandler +}; + +export const useWalletHandlerProvider = () => { + const [handlers, setHandlers] = useState([]); + + useEffect(() => { + const walletHandlers = []; + wallets.forEach(walletConfig => { + const {id} = walletConfig; + const WalletHandler = SUPPORTED_HANDLERS_REGISTRY[id]; + if (WalletHandler) { + walletHandlers.push(new WalletHandler(walletConfig)); + } + }); + setHandlers(walletHandlers); + }, []); + + const getWalletHandlers = type => { + return type ? handlers.filter(walletHandler => walletHandler.config.type === type) : handlers; + }; + + return { + getWalletHandlers + }; +}; diff --git a/src/hooks/useWindowSize.js b/src/hooks/useWindowSize.js new file mode 100644 index 00000000..b0b9c2db --- /dev/null +++ b/src/hooks/useWindowSize.js @@ -0,0 +1,21 @@ +import {useEffect, useState} from 'react'; + +export const useWindowSize = () => { + const [windowSize, setWindowSize] = useState({ + width: undefined, + height: undefined + }); + useEffect(() => { + function handleResize() { + setWindowSize({ + width: window.innerWidth, + height: window.innerHeight + }); + } + + window.addEventListener('resize', handleResize); + handleResize(); + return () => window.removeEventListener('resize', handleResize); + }, []); // Empty array ensures that effect is only run on mount + return windowSize; +}; diff --git a/src/index.js b/src/index.js new file mode 100644 index 00000000..a90c4163 --- /dev/null +++ b/src/index.js @@ -0,0 +1,32 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import {Provider} from 'react-redux'; +import {UseWalletProvider} from 'use-wallet'; + +import {App} from './App'; +import {ModalProvider} from './components/Features'; +import {WalletsProvider} from './components/Features/Wallet/WalletsProvider'; +import supportedChains from './config/supported-chains.json'; +import './index.scss'; +import {store} from './store/store'; + +ReactDOM.render( + <Provider store={store}> + <UseWalletProvider + autoConnect={false} + connectors={{ + injected: { + chainId: supportedChains + } + }} + pollBalanceInterval={2000} + pollBlockNumberInterval={5000} + > + <WalletsProvider> + <App /> + <ModalProvider /> + </WalletsProvider> + </UseWalletProvider> + </Provider>, + document.getElementById('root') +); diff --git a/src/index.scss b/src/index.scss new file mode 100644 index 00000000..b388a3c9 --- /dev/null +++ b/src/index.scss @@ -0,0 +1,63 @@ +@import './styles/variables.module'; +@import './styles/colors.module'; +@import './styles/fonts.module'; + +@font-face { + font-family: 'Inter'; + font-weight: 400; + font-style: normal; + src: url('assets/fonts/Inter/Inter-Regular.ttf') format('truetype'); +} + +html, +body { + padding: 0; + margin: 0; + height: 100%; + width: 100%; + font-family: $--primary-font; + background-color: $--color-alpha-3; + background-image: url('assets/img/light-accent.png'); + background-size: cover; + background-repeat: no-repeat; + background-position: center center; + transition: 0.3s; +} + +header, +footer { + display: flex; + align-items: center; + justify-content: space-between; +} + +.center { + top: 50%; + left: 50%; + position: absolute; + transform: translate(-50%, -50%); +} + +.row { + display: flex; + align-items: center; +} + +::-webkit-scrollbar-track { + border-radius: 7px; + box-shadow: inset 0 0 30px $--color-alpha; +} + +::-webkit-scrollbar-thumb { + border-radius: 7px; + background: $--color-alpha-6; +} + +::-webkit-scrollbar-corner { + background: transparent; +} + +::-webkit-scrollbar { + max-width: 7px; + max-height: 7px; +} diff --git a/src/services/index.js b/src/services/index.js new file mode 100644 index 00000000..22a624ad --- /dev/null +++ b/src/services/index.js @@ -0,0 +1,3 @@ +export * from './wallet-handlers'; +export * from './storage-manager'; +export * from './logger'; diff --git a/src/services/logger.js b/src/services/logger.js new file mode 100644 index 00000000..df5cf1b8 --- /dev/null +++ b/src/services/logger.js @@ -0,0 +1,20 @@ +import jsLogger from 'js-logger'; + +jsLogger.useDefaults({defaultLevel: jsLogger.ERROR}); + +const getLogger = name => { + if (!name) { + return jsLogger; + } + return jsLogger.get(name); +}; + +const getLogLevel = name => { + return getLogger(name).getLevel(); +}; + +const setLogLevel = (level, name) => { + getLogger(name).setLevel(level); +}; + +export {getLogger, getLogLevel, setLogLevel}; diff --git a/src/services/storage-manager.js b/src/services/storage-manager.js new file mode 100644 index 00000000..e28c0991 --- /dev/null +++ b/src/services/storage-manager.js @@ -0,0 +1,26 @@ +export const StorageManager = { + setItem: (key, item) => { + if (localStorage) { + localStorage.setItem(key, JSON.stringify(item)); + return true; + } + return false; + }, + getItem: key => { + if (localStorage) { + const item = localStorage.getItem(key); + if (item) { + try { + return JSON.parse(item); + } catch (e) { + return item; + } + } + } + }, + removeItem: key => { + if (localStorage) { + localStorage.removeItem(key); + } + } +}; diff --git a/src/services/wallet-handlers/argent-handler.js b/src/services/wallet-handlers/argent-handler.js new file mode 100644 index 00000000..366e7698 --- /dev/null +++ b/src/services/wallet-handlers/argent-handler.js @@ -0,0 +1,15 @@ +import {getStarknet} from '@argent/get-starknet'; + +export class ArgentHandler { + constructor(config) { + this.config = config; + } + + isInstalled() { + return Boolean(window.starknet); + } + + install() { + return getStarknet({showModal: true}); + } +} diff --git a/src/services/wallet-handlers/index.js b/src/services/wallet-handlers/index.js new file mode 100644 index 00000000..e0475038 --- /dev/null +++ b/src/services/wallet-handlers/index.js @@ -0,0 +1,2 @@ +export * from './argent-handler'; +export * from './metamask-handler'; diff --git a/src/services/wallet-handlers/metamask-handler.js b/src/services/wallet-handlers/metamask-handler.js new file mode 100644 index 00000000..a8e7d3a1 --- /dev/null +++ b/src/services/wallet-handlers/metamask-handler.js @@ -0,0 +1,16 @@ +import MetaMaskOnboarding from '@metamask/onboarding'; + +export class MetaMaskHandler { + constructor(config) { + this.config = config; + this.onboarding = new MetaMaskOnboarding(); + } + + isInstalled() { + return Boolean(window.ethereum && window.ethereum.isMetaMask); + } + + install() { + return this.onboarding.startOnboarding(); + } +} diff --git a/src/store/store.js b/src/store/store.js new file mode 100644 index 00000000..46f8bc03 --- /dev/null +++ b/src/store/store.js @@ -0,0 +1,13 @@ +import {configureStore} from '@reduxjs/toolkit'; + +import bridge from '../components/Features/Bridge/Bridge.slice'; +import modal from '../components/Features/ModalProvider/ModalProvider.slice'; +import transfer from '../components/Features/Transfer/Transfer.slice'; + +export const store = configureStore({ + reducer: { + bridge, + modal, + transfer + } +}); diff --git a/src/styles/colors.module.scss b/src/styles/colors.module.scss new file mode 100644 index 00000000..09e8a6d6 --- /dev/null +++ b/src/styles/colors.module.scss @@ -0,0 +1,25 @@ +$--color-white: #ffffff; +$--color-white-1: #eaf2ff; +$--color-black: #000000; +$--color-alpha: #15174e; +$--color-alpha-1: #1c1e52; +$--color-alpha-2: #23255b; +$--color-alpha-3: #292c6c; +$--color-alpha-4: rgba(59, 62, 118, 0.56); +$--color-alpha-5: #3e4080; +$--color-alpha-5-hover: #494a81; +$--color-alpha-6: #8b8dc2; +$--color-alpha-6-hover: #999bc5; +$--color-beta: #f6643c; +$--color-gamma: #69b7f9; +$--color-gamma-1: #1595ff; +$--color-omega: #5f666c; +$--color-success: #039855; +$--color-error: #da4646; + +:export { + colorBlack: $--color-black; + colorWhite: $--color-white; + colorBeta: $--color-beta; + colorAlpha5: $--color-alpha-5; +} diff --git a/src/styles/fonts.module.scss b/src/styles/fonts.module.scss new file mode 100644 index 00000000..eee9da1b --- /dev/null +++ b/src/styles/fonts.module.scss @@ -0,0 +1,5 @@ +$--primary-font: 'Inter'; + +:export { + primaryFont: $--primary-font; +} diff --git a/src/styles/variables.module.scss b/src/styles/variables.module.scss new file mode 100644 index 00000000..14d39b78 --- /dev/null +++ b/src/styles/variables.module.scss @@ -0,0 +1,7 @@ +$--header-height: 70; +$--footer-height: 50; +$--main-offset: $--header-height + $--footer-height + 2; + +:export { + mainOffset: $--main-offset; +} diff --git a/src/utils/browser.js b/src/utils/browser.js new file mode 100644 index 00000000..1a6d8843 --- /dev/null +++ b/src/utils/browser.js @@ -0,0 +1,3 @@ +export const openInNewTab = url => { + window.open(url, '_blank').focus(); +}; diff --git a/src/utils/index.js b/src/utils/index.js new file mode 100644 index 00000000..8780ac87 --- /dev/null +++ b/src/utils/index.js @@ -0,0 +1,3 @@ +export * from './wallet'; +export * from './browser'; +export * from './string'; diff --git a/src/utils/string.js b/src/utils/string.js new file mode 100644 index 00000000..591f3cee --- /dev/null +++ b/src/utils/string.js @@ -0,0 +1,24 @@ +export const toClasses = (...classes) => [...classes].join(' '); + +export const evaluate = (template, model) => { + try { + let reg, + res = template; + for (let key in model) { + let value = model[key] !== undefined && model[key] !== null ? model[key] : ''; + if (typeof value === 'string' && value.indexOf('"') > -1) { + value = value.replace(/"/g, '\\"'); + } + reg = new RegExp('{{' + key + '}}', 'g'); + res = res.replace(reg, value); + } + return res; + } catch (e) { + return ''; + } +}; + +export const capitalize = s => { + if (typeof s !== 'string') return ''; + return s.charAt(0).toUpperCase() + s.slice(1); +}; diff --git a/src/utils/wallet.js b/src/utils/wallet.js new file mode 100644 index 00000000..031146e7 --- /dev/null +++ b/src/utils/wallet.js @@ -0,0 +1,10 @@ +export const formatBalance = balance => { + return !Math.ceil(balance) ? 0 : balance.toFixed(5); +}; + +export const formatAddress = account => { + if (account) { + return `${account.substring(0, 5)}...${account.substring(account.length - 3)}`; + } + return ''; +}; diff --git a/src/web3.js b/src/web3.js new file mode 100644 index 00000000..7b01ddee --- /dev/null +++ b/src/web3.js @@ -0,0 +1,10 @@ +import Web3 from 'web3'; + +let web3; +if (typeof window.ethereum !== 'undefined' || typeof window.web3 !== 'undefined') { + web3 = new Web3(window.ethereum || window.web3.currentProvider); +} else { + web3 = new Web3(); +} + +export {web3}; diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..5b79e974 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,17813 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@0x/assert@^2.1.6": + version "2.1.6" + resolved "https://registry.yarnpkg.com/@0x/assert/-/assert-2.1.6.tgz#61c5854b555bca1f1f0503754f2fd0169bee0ef1" + integrity sha512-Gu8eBnFdEuIAH2GubWYOSVz/BIoRccKof68AziduYDHxh4nSPM6NUH52xtfUGk4nXljiOXU1XHZJhcjTObI+8Q== + dependencies: + "@0x/json-schemas" "^4.0.2" + "@0x/typescript-typings" "^4.3.0" + "@0x/utils" "^4.5.2" + lodash "^4.17.11" + valid-url "^1.0.9" + +"@0x/json-schemas@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@0x/json-schemas/-/json-schemas-4.0.2.tgz#6f7c1dcde04d3acc3e8ca2f24177b9705c10e772" + integrity sha512-JHOwESZeWKAzT5Z42ZNvOvQUQ5vuRIFQWS0FNjYwV8Cv4/dRlLHd7kwxxsvlm9NxgXnOW0ddEDBbVGxhVSYNIg== + dependencies: + "@0x/typescript-typings" "^4.3.0" + "@types/node" "*" + jsonschema "^1.2.0" + lodash.values "^4.3.0" + +"@0x/subproviders@^5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@0x/subproviders/-/subproviders-5.0.4.tgz#e4b165634ef6a50c4bd41baacf0dbd2a9390c2f8" + integrity sha512-1LiGcOXkP5eUOl/0JRqkrqYtCvIL4NJj1GbbLIRq4TvkfqrRbF7zJM2SaayxPo3Z48zVsqk0ZE5+RrNAdK/Rrg== + dependencies: + "@0x/assert" "^2.1.6" + "@0x/types" "^2.4.3" + "@0x/typescript-typings" "^4.3.0" + "@0x/utils" "^4.5.2" + "@0x/web3-wrapper" "^6.0.13" + "@ledgerhq/hw-app-eth" "^4.3.0" + "@ledgerhq/hw-transport-u2f" "4.24.0" + "@types/hdkey" "^0.7.0" + "@types/web3-provider-engine" "^14.0.0" + bip39 "^2.5.0" + bn.js "^4.11.8" + ethereum-types "^2.1.6" + ethereumjs-tx "^1.3.5" + ethereumjs-util "^5.1.1" + ganache-core "^2.6.0" + hdkey "^0.7.1" + json-rpc-error "2.0.0" + lodash "^4.17.11" + semaphore-async-await "^1.5.1" + web3-provider-engine "14.0.6" + optionalDependencies: + "@ledgerhq/hw-transport-node-hid" "^4.3.0" + +"@0x/types@^2.4.3": + version "2.4.3" + resolved "https://registry.yarnpkg.com/@0x/types/-/types-2.4.3.tgz#ea014889789e9013fdf48ce97b79f2c016e10fb3" + integrity sha512-3z4ca9fb9pyTu9lJhTSll5EuEthkA3tLAayyZixCoCnwi4ok6PJ83PnMMsSxlRY2iXr7QGbrQr6nU64YWk2WjA== + dependencies: + "@types/node" "*" + bignumber.js "~8.0.2" + ethereum-types "^2.1.6" + +"@0x/typescript-typings@^4.3.0": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@0x/typescript-typings/-/typescript-typings-4.3.0.tgz#4813a996ac5101841d1c22f4aa1738ab56168857" + integrity sha512-6IH2JyKyl33+40tJ5rEhaMPTS2mVuRvoNmoXlCd/F0GPYSsDHMGObIXOkx+Qsw5SyCmqNs/3CTLeeCCqiSUdaw== + dependencies: + "@types/bn.js" "^4.11.0" + "@types/react" "*" + bignumber.js "~8.0.2" + ethereum-types "^2.1.6" + popper.js "1.14.3" + +"@0x/utils@^4.5.2": + version "4.5.2" + resolved "https://registry.yarnpkg.com/@0x/utils/-/utils-4.5.2.tgz#6cc89f2d0dda341e0fb4e76049a35abfb67a4ac5" + integrity sha512-NWfNcvyiOhouk662AWxX0ZVe4ednBZJS9WZT/by3DBCY/WvN7WHMpEy9M5rBCxO+JJndLYeB5eBztDp7W+Ytkw== + dependencies: + "@0x/types" "^2.4.3" + "@0x/typescript-typings" "^4.3.0" + "@types/node" "*" + abortcontroller-polyfill "^1.1.9" + bignumber.js "~8.0.2" + chalk "^2.3.0" + detect-node "2.0.3" + ethereum-types "^2.1.6" + ethereumjs-util "^5.1.1" + ethers "~4.0.4" + isomorphic-fetch "2.2.1" + js-sha3 "^0.7.0" + lodash "^4.17.11" + +"@0x/web3-wrapper@^6.0.13": + version "6.0.13" + resolved "https://registry.yarnpkg.com/@0x/web3-wrapper/-/web3-wrapper-6.0.13.tgz#2e666221bd44ceebe02762028214d4aa41ad7247" + integrity sha512-LQjKBCCNdkJuhcJld+/sy+G0+sJu5qp9VDNNwJGLDxWIJpgoshhUpBPi7vUnZ79UY4SYuNcC4yM9yI61cs7ZiA== + dependencies: + "@0x/assert" "^2.1.6" + "@0x/json-schemas" "^4.0.2" + "@0x/typescript-typings" "^4.3.0" + "@0x/utils" "^4.5.2" + ethereum-types "^2.1.6" + ethereumjs-util "^5.1.1" + ethers "~4.0.4" + lodash "^4.17.11" + +"@aragon/provided-connector@^6.0.8": + version "6.0.8" + resolved "https://registry.yarnpkg.com/@aragon/provided-connector/-/provided-connector-6.0.8.tgz#5d22ccb2a0ff599fbe6c23fdf96cb06d59ff2716" + integrity sha512-O7dPXPPwOulkF5Nc04nTEBQPtDmySRPtZW0SYQlX0CwjSAntfdyLjFr6T3bNFFqLCBKfDoW6Hc02fN+rClQGIg== + dependencies: + "@web3-react/abstract-connector" "^6.0.7" + "@web3-react/types" "^6.0.7" + tiny-warning "^1.0.3" + +"@argent/get-starknet@^0.1.1": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@argent/get-starknet/-/get-starknet-0.1.3.tgz#c4f4599f5701c35d7ea1a20c16710f57daa3cd4d" + integrity sha512-OqnklHJlFFYx4vbGH6z9Xqchhw/Ryb7xV9L1XlJ3V+lWSjCmv0FsFgNH9J9WgEePem0gc28fFTk+Vpt5M5Xl7g== + +"@babel/code-frame@7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.5.5": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431" + integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA== + dependencies: + "@babel/highlight" "^7.16.0" + +"@babel/compat-data@^7.12.1", "@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.0", "@babel/compat-data@^7.16.4": + version "7.16.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.4.tgz#081d6bbc336ec5c2435c6346b2ae1fb98b5ac68e" + integrity sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q== + +"@babel/core@7.12.3": + version "7.12.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.3.tgz#1b436884e1e3bff6fb1328dc02b208759de92ad8" + integrity sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.1" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.1" + "@babel/parser" "^7.12.3" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@7.13.10": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.10.tgz#07de050bbd8193fcd8a3c27918c0890613a94559" + integrity sha512-bfIYcT0BdKeAZrovpMqX2Mx5NrgAckGbwT982AkdS5GNfn3KMGiprlBAtmBcFZRUmpaufS6WZFP8trvx8ptFDw== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.13.9" + "@babel/helper-compilation-targets" "^7.13.10" + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helpers" "^7.13.10" + "@babel/parser" "^7.13.10" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + lodash "^4.17.19" + semver "^6.3.0" + source-map "^0.5.0" + +"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.5", "@babel/core@^7.8.4": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.0.tgz#c4ff44046f5fe310525cc9eb4ef5147f0c5374d4" + integrity sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ== + dependencies: + "@babel/code-frame" "^7.16.0" + "@babel/generator" "^7.16.0" + "@babel/helper-compilation-targets" "^7.16.0" + "@babel/helper-module-transforms" "^7.16.0" + "@babel/helpers" "^7.16.0" + "@babel/parser" "^7.16.0" + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.0" + "@babel/types" "^7.16.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + +"@babel/generator@7.13.9": + version "7.13.9" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39" + integrity sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw== + dependencies: + "@babel/types" "^7.13.0" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/generator@^7.12.1", "@babel/generator@^7.13.0", "@babel/generator@^7.13.9", "@babel/generator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.0.tgz#d40f3d1d5075e62d3500bccb67f3daa8a95265b2" + integrity sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew== + dependencies: + "@babel/types" "^7.16.0" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz#9a1f0ebcda53d9a2d00108c4ceace6a5d5f1f08d" + integrity sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz#f1a686b92da794020c26582eb852e9accd0d7882" + integrity sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.16.0" + "@babel/types" "^7.16.0" + +"@babel/helper-compilation-targets@^7.12.1", "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.10", "@babel/helper-compilation-targets@^7.16.0", "@babel/helper-compilation-targets@^7.16.3": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz#5b480cd13f68363df6ec4dc8ac8e2da11363cbf0" + integrity sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA== + dependencies: + "@babel/compat-data" "^7.16.0" + "@babel/helper-validator-option" "^7.14.5" + browserslist "^4.17.5" + semver "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.12.1", "@babel/helper-create-class-features-plugin@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz#090d4d166b342a03a9fec37ef4fd5aeb9c7c6a4b" + integrity sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-member-expression-to-functions" "^7.16.0" + "@babel/helper-optimise-call-expression" "^7.16.0" + "@babel/helper-replace-supers" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" + +"@babel/helper-create-regexp-features-plugin@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz#06b2348ce37fccc4f5e18dcd8d75053f2a7c44ff" + integrity sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.0" + regexpu-core "^4.7.1" + +"@babel/helper-define-polyfill-provider@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz#c5b10cf4b324ff840140bb07e05b8564af2ae971" + integrity sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg== + dependencies: + "@babel/helper-compilation-targets" "^7.13.0" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/traverse" "^7.13.0" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-explode-assignable-expression@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz#753017337a15f46f9c09f674cff10cee9b9d7778" + integrity sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-function-name@^7.12.13", "@babel/helper-function-name@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz#b7dd0797d00bbfee4f07e9c4ea5b0e30c8bb1481" + integrity sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog== + dependencies: + "@babel/helper-get-function-arity" "^7.16.0" + "@babel/template" "^7.16.0" + "@babel/types" "^7.16.0" + +"@babel/helper-get-function-arity@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz#0088c7486b29a9cb5d948b1a1de46db66e089cfa" + integrity sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-hoist-variables@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz#4c9023c2f1def7e28ff46fc1dbcd36a39beaa81a" + integrity sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-member-expression-to-functions@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz#29287040efd197c77636ef75188e81da8bccd5a4" + integrity sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz#90538e60b672ecf1b448f5f4f5433d37e79a3ec3" + integrity sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz#1c82a8dd4cb34577502ebd2909699b194c3e9bb5" + integrity sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA== + dependencies: + "@babel/helper-module-imports" "^7.16.0" + "@babel/helper-replace-supers" "^7.16.0" + "@babel/helper-simple-access" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" + "@babel/helper-validator-identifier" "^7.15.7" + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.0" + "@babel/types" "^7.16.0" + +"@babel/helper-optimise-call-expression@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz#cecdb145d70c54096b1564f8e9f10cd7d193b338" + integrity sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" + integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== + +"@babel/helper-remap-async-to-generator@^7.16.0", "@babel/helper-remap-async-to-generator@^7.16.4": + version "7.16.4" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.4.tgz#5d7902f61349ff6b963e07f06a389ce139fbfe6e" + integrity sha512-vGERmmhR+s7eH5Y/cp8PCVzj4XEjerq8jooMfxFdA5xVtAk9Sh4AQsrWgiErUEBjtGrBtOFKDUcWQFW4/dFwMA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-wrap-function" "^7.16.0" + "@babel/types" "^7.16.0" + +"@babel/helper-replace-supers@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz#73055e8d3cf9bcba8ddb55cad93fedc860f68f17" + integrity sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.16.0" + "@babel/helper-optimise-call-expression" "^7.16.0" + "@babel/traverse" "^7.16.0" + "@babel/types" "^7.16.0" + +"@babel/helper-simple-access@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz#21d6a27620e383e37534cf6c10bba019a6f90517" + integrity sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-skip-transparent-expression-wrappers@^7.12.1", "@babel/helper-skip-transparent-expression-wrappers@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" + integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-split-export-declaration@^7.12.13", "@babel/helper-split-export-declaration@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz#29672f43663e936df370aaeb22beddb3baec7438" + integrity sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-validator-identifier@^7.12.11", "@babel/helper-validator-identifier@^7.15.7": + version "7.15.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" + integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== + +"@babel/helper-validator-option@^7.12.1", "@babel/helper-validator-option@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" + integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== + +"@babel/helper-wrap-function@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz#b3cf318afce774dfe75b86767cd6d68f3482e57c" + integrity sha512-VVMGzYY3vkWgCJML+qVLvGIam902mJW0FvT7Avj1zEe0Gn7D93aWdLblYARTxEw+6DhZmtzhBM2zv0ekE5zg1g== + dependencies: + "@babel/helper-function-name" "^7.16.0" + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.0" + "@babel/types" "^7.16.0" + +"@babel/helpers@^7.12.1", "@babel/helpers@^7.13.10", "@babel/helpers@^7.16.0": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.3.tgz#27fc64f40b996e7074dc73128c3e5c3e7f55c43c" + integrity sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w== + dependencies: + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.3" + "@babel/types" "^7.16.0" + +"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" + integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g== + dependencies: + "@babel/helper-validator-identifier" "^7.15.7" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@7.13.10": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.10.tgz#8f8f9bf7b3afa3eabd061f7a5bcdf4fec3c48409" + integrity sha512-0s7Mlrw9uTWkYua7xWr99Wpk2bnGa0ANleKfksYAES8LpWH4gW1OUr42vqKNf0us5UQNfru2wPqMqRITzq/SIQ== + +"@babel/parser@^7.1.0", "@babel/parser@^7.12.3", "@babel/parser@^7.13.0", "@babel/parser@^7.13.10", "@babel/parser@^7.14.7", "@babel/parser@^7.16.0", "@babel/parser@^7.16.3", "@babel/parser@^7.7.0": + version "7.16.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.4.tgz#d5f92f57cf2c74ffe9b37981c0e72fee7311372e" + integrity sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.2": + version "7.16.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz#2977fca9b212db153c195674e57cfab807733183" + integrity sha512-h37CvpLSf8gb2lIJ2CgC3t+EjFbi0t8qS7LCS1xcJIlEXE4czlofwaW7W1HA8zpgOCzI9C1nmoqNR1zWkk0pQg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz#358972eaab006f5eb0826183b0c93cbcaf13e1e2" + integrity sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.0" + +"@babel/plugin-proposal-async-generator-functions@^7.12.1", "@babel/plugin-proposal-async-generator-functions@^7.16.4": + version "7.16.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.4.tgz#e606eb6015fec6fa5978c940f315eae4e300b081" + integrity sha512-/CUekqaAaZCQHleSK/9HajvcD/zdnJiKRiuUFq8ITE+0HsPzquf53cpFiqAwl/UfmJbR6n5uGPQSPdrmKOvHHg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-remap-async-to-generator" "^7.16.4" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de" + integrity sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-class-properties@^7.12.1", "@babel/plugin-proposal-class-properties@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz#c029618267ddebc7280fa286e0f8ca2a278a2d1a" + integrity sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-proposal-class-static-block@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz#5296942c564d8144c83eea347d0aa8a0b89170e7" + integrity sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-proposal-decorators@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.1.tgz#59271439fed4145456c41067450543aee332d15f" + integrity sha512-knNIuusychgYN8fGJHONL0RbFxLGawhXOJNLBk75TniTsZZeA+wdkDuv6wp4lGwzQEKjZi6/WYtnb3udNPmQmQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-decorators" "^7.12.1" + +"@babel/plugin-proposal-dynamic-import@^7.12.1", "@babel/plugin-proposal-dynamic-import@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.0.tgz#783eca61d50526202f9b296095453977e88659f1" + integrity sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.12.1", "@babel/plugin-proposal-export-namespace-from@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.0.tgz#9c01dee40b9d6b847b656aaf4a3976a71740f222" + integrity sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.12.1", "@babel/plugin-proposal-json-strings@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz#cae35a95ed1d2a7fa29c4dc41540b84a72e9ab25" + integrity sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.12.1", "@babel/plugin-proposal-logical-assignment-operators@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.0.tgz#a711b8ceb3ffddd3ef88d3a49e86dbd3cc7db3fd" + integrity sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c" + integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1", "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz#44e1cce08fe2427482cf446a91bb451528ed0596" + integrity sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz#0e2c6774c4ce48be412119b4d693ac777f7685a6" + integrity sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-numeric-separator@^7.12.1", "@babel/plugin-proposal-numeric-separator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.0.tgz#5d418e4fbbf8b9b7d03125d3a52730433a373734" + integrity sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.12.1", "@babel/plugin-proposal-object-rest-spread@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz#5fb32f6d924d6e6712810362a60e12a2609872e6" + integrity sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg== + dependencies: + "@babel/compat-data" "^7.16.0" + "@babel/helper-compilation-targets" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.16.0" + +"@babel/plugin-proposal-optional-catch-binding@^7.12.1", "@babel/plugin-proposal-optional-catch-binding@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz#5910085811ab4c28b00d6ebffa4ab0274d1e5f16" + integrity sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz#cce122203fc8a32794296fc377c6dedaf4363797" + integrity sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-optional-chaining@^7.12.1", "@babel/plugin-proposal-optional-chaining@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz#56dbc3970825683608e9efb55ea82c2a2d6c8dc0" + integrity sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.12.1", "@babel/plugin-proposal-private-methods@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz#b4dafb9c717e4301c5776b30d080d6383c89aff6" + integrity sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-proposal-private-property-in-object@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.0.tgz#69e935b2c5c79d2488112d886f0c4e2790fee76f" + integrity sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-create-class-features-plugin" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.12.1", "@babel/plugin-proposal-unicode-property-regex@^7.16.0", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz#890482dfc5ea378e42e19a71e709728cabf18612" + integrity sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.1", "@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-decorators@^7.12.1": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.16.0.tgz#eb8d811cdd1060f6ac3c00956bf3f6335505a32f" + integrity sha512-nxnnngZClvlY13nHJAIDow0S7Qzhq64fQ/NlqS+VER3kjW/4F0jLhXjeL8jcwSwz6Ca3rotT5NJD2T9I7lcv7g== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-flow@^7.12.1": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.0.tgz#07427021d093ed77019408221beaf0272bbcfaec" + integrity sha512-dH91yCo0RyqfzWgoM5Ji9ir8fQ+uFbt9KHM3d2x4jZOuHS6wNA+CRmRUP/BWCsHG2bjc7A2Way6AvH1eQk0wig== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.0.tgz#f9624394317365a9a88c82358d3f8471154698f1" + integrity sha512-8zv2+xiPHwly31RK4RmnEYY5zziuF3O7W2kIDW+07ewWDh6Oi0dRq8kwvulRkFgt6DB97RlKs5c1y068iPlCUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.12.1", "@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.0.tgz#2feeb13d9334cc582ea9111d3506f773174179bb" + integrity sha512-Xv6mEXqVdaqCBfJFyeab0fH2DnUoMsDmhamxsSi4j8nLd4Vtw213WMJr55xxqipC/YVWyPY3K0blJncPYji+dQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-arrow-functions@^7.12.1", "@babel/plugin-transform-arrow-functions@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz#951706f8b449c834ed07bd474c0924c944b95a8e" + integrity sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-async-to-generator@^7.12.1", "@babel/plugin-transform-async-to-generator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.0.tgz#df12637f9630ddfa0ef9d7a11bc414d629d38604" + integrity sha512-PbIr7G9kR8tdH6g8Wouir5uVjklETk91GMVSUq+VaOgiinbCkBP6Q7NN/suM/QutZkMJMvcyAriogcYAdhg8Gw== + dependencies: + "@babel/helper-module-imports" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-remap-async-to-generator" "^7.16.0" + +"@babel/plugin-transform-block-scoped-functions@^7.12.1", "@babel/plugin-transform-block-scoped-functions@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz#c618763233ad02847805abcac4c345ce9de7145d" + integrity sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-block-scoping@^7.12.1", "@babel/plugin-transform-block-scoping@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz#bcf433fb482fe8c3d3b4e8a66b1c4a8e77d37c16" + integrity sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz#54cf5ff0b2242c6573d753cd4bfc7077a8b282f5" + integrity sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-optimise-call-expression" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-replace-supers" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.12.1", "@babel/plugin-transform-computed-properties@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz#e0c385507d21e1b0b076d66bed6d5231b85110b7" + integrity sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-destructuring@^7.12.1", "@babel/plugin-transform-destructuring@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz#ad3d7e74584ad5ea4eadb1e6642146c590dee33c" + integrity sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-dotall-regex@^7.12.1", "@babel/plugin-transform-dotall-regex@^7.16.0", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz#50bab00c1084b6162d0a58a818031cf57798e06f" + integrity sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-duplicate-keys@^7.12.1", "@babel/plugin-transform-duplicate-keys@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz#8bc2e21813e3e89e5e5bf3b60aa5fc458575a176" + integrity sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-exponentiation-operator@^7.12.1", "@babel/plugin-transform-exponentiation-operator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz#a180cd2881e3533cef9d3901e48dad0fbeff4be4" + integrity sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-flow-strip-types@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.12.1.tgz#8430decfa7eb2aea5414ed4a3fa6e1652b7d77c4" + integrity sha512-8hAtkmsQb36yMmEtk2JZ9JnVyDSnDOdlB+0nEGzIDLuK4yR3JcEjfuFPYkdEPSh8Id+rAMeBEn+X0iVEyho6Hg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-flow" "^7.12.1" + +"@babel/plugin-transform-for-of@^7.12.1", "@babel/plugin-transform-for-of@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz#f7abaced155260e2461359bbc7c7248aca5e6bd2" + integrity sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-function-name@^7.12.1", "@babel/plugin-transform-function-name@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz#02e3699c284c6262236599f751065c5d5f1f400e" + integrity sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg== + dependencies: + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-literals@^7.12.1", "@babel/plugin-transform-literals@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz#79711e670ffceb31bd298229d50f3621f7980cac" + integrity sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-member-expression-literals@^7.12.1", "@babel/plugin-transform-member-expression-literals@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz#5251b4cce01eaf8314403d21aedb269d79f5e64b" + integrity sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-modules-amd@^7.12.1", "@babel/plugin-transform-modules-amd@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz#09abd41e18dcf4fd479c598c1cef7bd39eb1337e" + integrity sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw== + dependencies: + "@babel/helper-module-transforms" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.12.1", "@babel/plugin-transform-modules-commonjs@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz#add58e638c8ddc4875bd9a9ecb5c594613f6c922" + integrity sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ== + dependencies: + "@babel/helper-module-transforms" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-simple-access" "^7.16.0" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.12.1", "@babel/plugin-transform-modules-systemjs@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz#a92cf240afeb605f4ca16670453024425e421ea4" + integrity sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg== + dependencies: + "@babel/helper-hoist-variables" "^7.16.0" + "@babel/helper-module-transforms" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-identifier" "^7.15.7" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.12.1", "@babel/plugin-transform-modules-umd@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz#195f26c2ad6d6a391b70880effce18ce625e06a7" + integrity sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg== + dependencies: + "@babel/helper-module-transforms" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.12.1", "@babel/plugin-transform-named-capturing-groups-regex@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz#d3db61cc5d5b97986559967cd5ea83e5c32096ca" + integrity sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.0" + +"@babel/plugin-transform-new-target@^7.12.1", "@babel/plugin-transform-new-target@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.0.tgz#af823ab576f752215a49937779a41ca65825ab35" + integrity sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-object-super@^7.12.1", "@babel/plugin-transform-object-super@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz#fb20d5806dc6491a06296ac14ea8e8d6fedda72b" + integrity sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-replace-supers" "^7.16.0" + +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.16.0", "@babel/plugin-transform-parameters@^7.16.3": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.3.tgz#fa9e4c874ee5223f891ee6fa8d737f4766d31d15" + integrity sha512-3MaDpJrOXT1MZ/WCmkOFo7EtmVVC8H4EUZVrHvFOsmwkk4lOjQj8rzv8JKUZV4YoQKeoIgk07GO+acPU9IMu/w== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-property-literals@^7.12.1", "@babel/plugin-transform-property-literals@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz#a95c552189a96a00059f6776dc4e00e3690c78d1" + integrity sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-react-constant-elements@^7.12.1": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.16.0.tgz#1483b894b8e6ef0709d260532fbd4db9fc27a0e6" + integrity sha512-OgtklS+p9t1X37eWA4XdvvbZG/3gqzX569gqmo3q4/Ui6qjfTQmOs5UTSrfdD9nVByHhX6Gbm/Pyc4KbwUXGWA== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-react-display-name@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz#1cbcd0c3b1d6648c55374a22fc9b6b7e5341c00d" + integrity sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-react-display-name@^7.12.1", "@babel/plugin-transform-react-display-name@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.0.tgz#9a0ad8aa8e8790883a7bd2736f66229a58125676" + integrity sha512-FJFdJAqaCpndL+pIf0aeD/qlQwT7QXOvR6Cc8JPvNhKJBi2zc/DPc4g05Y3fbD/0iWAMQFGij4+Xw+4L/BMpTg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-react-jsx-development@^7.12.1", "@babel/plugin-transform-react-jsx-development@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.0.tgz#1cb52874678d23ab11d0d16488d54730807303ef" + integrity sha512-qq65iSqBRq0Hr3wq57YG2AmW0H6wgTnIzpffTphrUWUgLCOK+zf1f7G0vuOiXrp7dU1qq+fQBoqZ3wCDAkhFzw== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.16.0" + +"@babel/plugin-transform-react-jsx-self@^7.12.1": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.16.0.tgz#09202158abbc716a08330f392bfb98d6b9acfa0c" + integrity sha512-97yCFY+2GvniqOThOSjPor8xUoDiQ0STVWAQMl3pjhJoFVe5DuXDLZCRSZxu9clx+oRCbTiXGgKEG/Yoyo6Y+w== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-react-jsx-source@^7.12.1": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.16.0.tgz#d40c959d7803aae38224594585748693e84c0a22" + integrity sha512-8yvbGGrHOeb/oyPc9tzNoe9/lmIjz3HLa9Nc5dMGDyNpGjfFrk8D2KdEq9NRkftZzeoQEW6yPQ29TMZtrLiUUA== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-react-jsx@^7.12.1", "@babel/plugin-transform-react-jsx@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.0.tgz#55b797d4960c3de04e07ad1c0476e2bc6a4889f1" + integrity sha512-rqDgIbukZ44pqq7NIRPGPGNklshPkvlmvqjdx3OZcGPk4zGIenYkxDTvl3LsSL8gqcc3ZzGmXPE6hR/u/voNOw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-module-imports" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-jsx" "^7.16.0" + "@babel/types" "^7.16.0" + +"@babel/plugin-transform-react-pure-annotations@^7.12.1", "@babel/plugin-transform-react-pure-annotations@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.0.tgz#23db6ddf558d8abde41b8ad9d59f48ad5532ccab" + integrity sha512-NC/Bj2MG+t8Ef5Pdpo34Ay74X4Rt804h5y81PwOpfPtmAK3i6CizmQqwyBQzIepz1Yt8wNr2Z2L7Lu3qBMfZMA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-regenerator@^7.12.1", "@babel/plugin-transform-regenerator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz#eaee422c84b0232d03aea7db99c97deeaf6125a4" + integrity sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.12.1", "@babel/plugin-transform-reserved-words@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.0.tgz#fff4b9dcb19e12619394bda172d14f2d04c0379c" + integrity sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-runtime@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz#04b792057eb460389ff6a4198e377614ea1e7ba5" + integrity sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + resolve "^1.8.1" + semver "^5.5.1" + +"@babel/plugin-transform-runtime@^7.5.5": + version "7.16.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.4.tgz#f9ba3c7034d429c581e1bd41b4952f3db3c2c7e8" + integrity sha512-pru6+yHANMTukMtEZGC4fs7XPwg35v8sj5CIEmE+gEkFljFiVJxEWxx/7ZDkTK+iZRYo1bFXBtfIN95+K3cJ5A== + dependencies: + "@babel/helper-module-imports" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + babel-plugin-polyfill-corejs2 "^0.3.0" + babel-plugin-polyfill-corejs3 "^0.4.0" + babel-plugin-polyfill-regenerator "^0.3.0" + semver "^6.3.0" + +"@babel/plugin-transform-shorthand-properties@^7.12.1", "@babel/plugin-transform-shorthand-properties@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz#090372e3141f7cc324ed70b3daf5379df2fa384d" + integrity sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-spread@^7.12.1", "@babel/plugin-transform-spread@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz#d21ca099bbd53ab307a8621e019a7bd0f40cdcfb" + integrity sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + +"@babel/plugin-transform-sticky-regex@^7.12.1", "@babel/plugin-transform-sticky-regex@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz#c35ea31a02d86be485f6aa510184b677a91738fd" + integrity sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-template-literals@^7.12.1", "@babel/plugin-transform-template-literals@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz#a8eced3a8e7b8e2d40ec4ec4548a45912630d302" + integrity sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-typeof-symbol@^7.12.1", "@babel/plugin-transform-typeof-symbol@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz#8b19a244c6f8c9d668dca6a6f754ad6ead1128f2" + integrity sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-typescript@^7.12.1": + version "7.16.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.1.tgz#cc0670b2822b0338355bc1b3d2246a42b8166409" + integrity sha512-NO4XoryBng06jjw/qWEU2LhcLJr1tWkhpMam/H4eas/CDKMX/b2/Ylb6EI256Y7+FVPCawwSM1rrJNOpDiz+Lg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-typescript" "^7.16.0" + +"@babel/plugin-transform-unicode-escapes@^7.12.1", "@babel/plugin-transform-unicode-escapes@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz#1a354064b4c45663a32334f46fa0cf6100b5b1f3" + integrity sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-unicode-regex@^7.12.1", "@babel/plugin-transform-unicode-regex@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz#293b80950177c8c85aede87cef280259fb995402" + integrity sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/preset-env@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.1.tgz#9c7e5ca82a19efc865384bb4989148d2ee5d7ac2" + integrity sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg== + dependencies: + "@babel/compat-data" "^7.12.1" + "@babel/helper-compilation-targets" "^7.12.1" + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-option" "^7.12.1" + "@babel/plugin-proposal-async-generator-functions" "^7.12.1" + "@babel/plugin-proposal-class-properties" "^7.12.1" + "@babel/plugin-proposal-dynamic-import" "^7.12.1" + "@babel/plugin-proposal-export-namespace-from" "^7.12.1" + "@babel/plugin-proposal-json-strings" "^7.12.1" + "@babel/plugin-proposal-logical-assignment-operators" "^7.12.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1" + "@babel/plugin-proposal-numeric-separator" "^7.12.1" + "@babel/plugin-proposal-object-rest-spread" "^7.12.1" + "@babel/plugin-proposal-optional-catch-binding" "^7.12.1" + "@babel/plugin-proposal-optional-chaining" "^7.12.1" + "@babel/plugin-proposal-private-methods" "^7.12.1" + "@babel/plugin-proposal-unicode-property-regex" "^7.12.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.12.1" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.12.1" + "@babel/plugin-transform-arrow-functions" "^7.12.1" + "@babel/plugin-transform-async-to-generator" "^7.12.1" + "@babel/plugin-transform-block-scoped-functions" "^7.12.1" + "@babel/plugin-transform-block-scoping" "^7.12.1" + "@babel/plugin-transform-classes" "^7.12.1" + "@babel/plugin-transform-computed-properties" "^7.12.1" + "@babel/plugin-transform-destructuring" "^7.12.1" + "@babel/plugin-transform-dotall-regex" "^7.12.1" + "@babel/plugin-transform-duplicate-keys" "^7.12.1" + "@babel/plugin-transform-exponentiation-operator" "^7.12.1" + "@babel/plugin-transform-for-of" "^7.12.1" + "@babel/plugin-transform-function-name" "^7.12.1" + "@babel/plugin-transform-literals" "^7.12.1" + "@babel/plugin-transform-member-expression-literals" "^7.12.1" + "@babel/plugin-transform-modules-amd" "^7.12.1" + "@babel/plugin-transform-modules-commonjs" "^7.12.1" + "@babel/plugin-transform-modules-systemjs" "^7.12.1" + "@babel/plugin-transform-modules-umd" "^7.12.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.1" + "@babel/plugin-transform-new-target" "^7.12.1" + "@babel/plugin-transform-object-super" "^7.12.1" + "@babel/plugin-transform-parameters" "^7.12.1" + "@babel/plugin-transform-property-literals" "^7.12.1" + "@babel/plugin-transform-regenerator" "^7.12.1" + "@babel/plugin-transform-reserved-words" "^7.12.1" + "@babel/plugin-transform-shorthand-properties" "^7.12.1" + "@babel/plugin-transform-spread" "^7.12.1" + "@babel/plugin-transform-sticky-regex" "^7.12.1" + "@babel/plugin-transform-template-literals" "^7.12.1" + "@babel/plugin-transform-typeof-symbol" "^7.12.1" + "@babel/plugin-transform-unicode-escapes" "^7.12.1" + "@babel/plugin-transform-unicode-regex" "^7.12.1" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.12.1" + core-js-compat "^3.6.2" + semver "^5.5.0" + +"@babel/preset-env@^7.12.1", "@babel/preset-env@^7.8.4": + version "7.16.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.4.tgz#4f6ec33b2a3fe72d6bfdcdf3859500232563a2e3" + integrity sha512-v0QtNd81v/xKj4gNKeuAerQ/azeNn/G1B1qMLeXOcV8+4TWlD2j3NV1u8q29SDFBXx/NBq5kyEAO+0mpRgacjA== + dependencies: + "@babel/compat-data" "^7.16.4" + "@babel/helper-compilation-targets" "^7.16.3" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.2" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.0" + "@babel/plugin-proposal-async-generator-functions" "^7.16.4" + "@babel/plugin-proposal-class-properties" "^7.16.0" + "@babel/plugin-proposal-class-static-block" "^7.16.0" + "@babel/plugin-proposal-dynamic-import" "^7.16.0" + "@babel/plugin-proposal-export-namespace-from" "^7.16.0" + "@babel/plugin-proposal-json-strings" "^7.16.0" + "@babel/plugin-proposal-logical-assignment-operators" "^7.16.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.0" + "@babel/plugin-proposal-numeric-separator" "^7.16.0" + "@babel/plugin-proposal-object-rest-spread" "^7.16.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.0" + "@babel/plugin-proposal-private-methods" "^7.16.0" + "@babel/plugin-proposal-private-property-in-object" "^7.16.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.16.0" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.16.0" + "@babel/plugin-transform-async-to-generator" "^7.16.0" + "@babel/plugin-transform-block-scoped-functions" "^7.16.0" + "@babel/plugin-transform-block-scoping" "^7.16.0" + "@babel/plugin-transform-classes" "^7.16.0" + "@babel/plugin-transform-computed-properties" "^7.16.0" + "@babel/plugin-transform-destructuring" "^7.16.0" + "@babel/plugin-transform-dotall-regex" "^7.16.0" + "@babel/plugin-transform-duplicate-keys" "^7.16.0" + "@babel/plugin-transform-exponentiation-operator" "^7.16.0" + "@babel/plugin-transform-for-of" "^7.16.0" + "@babel/plugin-transform-function-name" "^7.16.0" + "@babel/plugin-transform-literals" "^7.16.0" + "@babel/plugin-transform-member-expression-literals" "^7.16.0" + "@babel/plugin-transform-modules-amd" "^7.16.0" + "@babel/plugin-transform-modules-commonjs" "^7.16.0" + "@babel/plugin-transform-modules-systemjs" "^7.16.0" + "@babel/plugin-transform-modules-umd" "^7.16.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.0" + "@babel/plugin-transform-new-target" "^7.16.0" + "@babel/plugin-transform-object-super" "^7.16.0" + "@babel/plugin-transform-parameters" "^7.16.3" + "@babel/plugin-transform-property-literals" "^7.16.0" + "@babel/plugin-transform-regenerator" "^7.16.0" + "@babel/plugin-transform-reserved-words" "^7.16.0" + "@babel/plugin-transform-shorthand-properties" "^7.16.0" + "@babel/plugin-transform-spread" "^7.16.0" + "@babel/plugin-transform-sticky-regex" "^7.16.0" + "@babel/plugin-transform-template-literals" "^7.16.0" + "@babel/plugin-transform-typeof-symbol" "^7.16.0" + "@babel/plugin-transform-unicode-escapes" "^7.16.0" + "@babel/plugin-transform-unicode-regex" "^7.16.0" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.16.0" + babel-plugin-polyfill-corejs2 "^0.3.0" + babel-plugin-polyfill-corejs3 "^0.4.0" + babel-plugin-polyfill-regenerator "^0.3.0" + core-js-compat "^3.19.1" + semver "^6.3.0" + +"@babel/preset-modules@^0.1.3", "@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-react@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.1.tgz#7f022b13f55b6dd82f00f16d1c599ae62985358c" + integrity sha512-euCExymHCi0qB9u5fKw7rvlw7AZSjw/NaB9h7EkdTt5+yHRrXdiRTh7fkG3uBPpJg82CqLfp1LHLqWGSCrab+g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-react-display-name" "^7.12.1" + "@babel/plugin-transform-react-jsx" "^7.12.1" + "@babel/plugin-transform-react-jsx-development" "^7.12.1" + "@babel/plugin-transform-react-jsx-self" "^7.12.1" + "@babel/plugin-transform-react-jsx-source" "^7.12.1" + "@babel/plugin-transform-react-pure-annotations" "^7.12.1" + +"@babel/preset-react@^7.12.5": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.16.0.tgz#f71d3e8dff5218478011df037fad52660ee6d82a" + integrity sha512-d31IFW2bLRB28uL1WoElyro8RH5l6531XfxMtCeCmp6RVAF1uTfxxUA0LH1tXl+psZdwfmIbwoG4U5VwgbhtLw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + "@babel/plugin-transform-react-display-name" "^7.16.0" + "@babel/plugin-transform-react-jsx" "^7.16.0" + "@babel/plugin-transform-react-jsx-development" "^7.16.0" + "@babel/plugin-transform-react-pure-annotations" "^7.16.0" + +"@babel/preset-typescript@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.12.1.tgz#86480b483bb97f75036e8864fe404cc782cc311b" + integrity sha512-hNK/DhmoJPsksdHuI/RVrcEws7GN5eamhi28JkO52MqIxU8Z0QpmiSOQxZHWOHV7I3P4UjHV97ay4TcamMA6Kw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-typescript" "^7.12.1" + +"@babel/runtime-corejs3@^7.10.2": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.16.3.tgz#1e25de4fa994c57c18e5fdda6cc810dac70f5590" + integrity sha512-IAdDC7T0+wEB4y2gbIL0uOXEYpiZEeuFUTVbdGq+UwCcF35T/tS8KrmMomEwEc5wBbyfH3PJVpTSUqrhPDXFcQ== + dependencies: + core-js-pure "^3.19.0" + regenerator-runtime "^0.13.4" + +"@babel/runtime@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.1.tgz#b4116a6b6711d010b2dad3b7b6e43bf1b9954740" + integrity sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/runtime@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.3.4.tgz#73d12ba819e365fcf7fd152aed56d6df97d21c83" + integrity sha512-IvfvnMdSaLBateu0jfsYIpZTxAc2cKEXEMiezGGN75QcBcecDUKd3PgLAncT0oOgxKy8dd8hrJKj9MfzgfZd6g== + dependencies: + regenerator-runtime "^0.12.0" + +"@babel/runtime@^7.10.2", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.3.tgz#b86f0db02a04187a3c17caa77de69840165d42d5" + integrity sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.10.4", "@babel/template@^7.12.13", "@babel/template@^7.16.0", "@babel/template@^7.3.3": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6" + integrity sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A== + dependencies: + "@babel/code-frame" "^7.16.0" + "@babel/parser" "^7.16.0" + "@babel/types" "^7.16.0" + +"@babel/traverse@7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.0.tgz#6d95752475f86ee7ded06536de309a65fc8966cc" + integrity sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.13.0" + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/parser" "^7.13.0" + "@babel/types" "^7.13.0" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.0", "@babel/traverse@^7.16.3", "@babel/traverse@^7.7.0": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.3.tgz#f63e8a938cc1b780f66d9ed3c54f532ca2d14787" + integrity sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag== + dependencies: + "@babel/code-frame" "^7.16.0" + "@babel/generator" "^7.16.0" + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-hoist-variables" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" + "@babel/parser" "^7.16.3" + "@babel/types" "^7.16.0" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.0.tgz#74424d2816f0171b4100f0ab34e9a374efdf7f80" + integrity sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.6", "@babel/types@^7.13.0", "@babel/types@^7.16.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba" + integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg== + dependencies: + "@babel/helper-validator-identifier" "^7.15.7" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@cnakazawa/watch@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== + dependencies: + exec-sh "^0.3.2" + minimist "^1.2.0" + +"@csstools/convert-colors@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" + integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== + +"@csstools/normalize.css@^10.1.0": + version "10.1.0" + resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-10.1.0.tgz#f0950bba18819512d42f7197e56c518aa491cf18" + integrity sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg== + +"@eslint/eslintrc@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" + integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^13.9.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + +"@ethereumjs/common@^2.5.0", "@ethereumjs/common@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.0.tgz#feb96fb154da41ee2cc2c5df667621a440f36348" + integrity sha512-Cq2qS0FTu6O2VU1sgg+WyU9Ps0M6j/BEMHN+hRaECXCV/r0aI78u4N6p52QW/BDVhwWZpCdrvG8X7NJdzlpNUA== + dependencies: + crc-32 "^1.2.0" + ethereumjs-util "^7.1.3" + +"@ethereumjs/tx@^3.3.2": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.4.0.tgz#7eb1947eefa55eb9cf05b3ca116fb7a3dbd0bce7" + integrity sha512-WWUwg1PdjHKZZxPPo274ZuPsJCWV3SqATrEKQP1n2DrVYVP1aZIYpo/mFaA0BDoE0tIQmBeimRCEA0Lgil+yYw== + dependencies: + "@ethereumjs/common" "^2.6.0" + ethereumjs-util "^7.1.3" + +"@ethersproject/abi@5.0.0-beta.153": + version "5.0.0-beta.153" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.0-beta.153.tgz#43a37172b33794e4562999f6e2d555b7599a8eee" + integrity sha512-aXweZ1Z7vMNzJdLpR1CZUAIgnwjrZeUSvN9syCwlBaEBUFJmFY+HHnfuTI5vIhVs/mRkfJVrbEyl51JZQqyjAg== + dependencies: + "@ethersproject/address" ">=5.0.0-beta.128" + "@ethersproject/bignumber" ">=5.0.0-beta.130" + "@ethersproject/bytes" ">=5.0.0-beta.129" + "@ethersproject/constants" ">=5.0.0-beta.128" + "@ethersproject/hash" ">=5.0.0-beta.128" + "@ethersproject/keccak256" ">=5.0.0-beta.127" + "@ethersproject/logger" ">=5.0.0-beta.129" + "@ethersproject/properties" ">=5.0.0-beta.131" + "@ethersproject/strings" ">=5.0.0-beta.130" + +"@ethersproject/abi@5.0.7": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.7.tgz#79e52452bd3ca2956d0e1c964207a58ad1a0ee7b" + integrity sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw== + dependencies: + "@ethersproject/address" "^5.0.4" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/constants" "^5.0.4" + "@ethersproject/hash" "^5.0.4" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/strings" "^5.0.4" + +"@ethersproject/abstract-provider@^5.5.0": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.5.1.tgz#2f1f6e8a3ab7d378d8ad0b5718460f85649710c5" + integrity sha512-m+MA/ful6eKbxpr99xUYeRvLkfnlqzrF8SZ46d/xFB1A7ZVknYc/sXJG0RcufF52Qn2jeFj1hhcoQ7IXjNKUqg== + dependencies: + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/networks" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/web" "^5.5.0" + +"@ethersproject/abstract-signer@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.5.0.tgz#590ff6693370c60ae376bf1c7ada59eb2a8dd08d" + integrity sha512-lj//7r250MXVLKI7sVarXAbZXbv9P50lgmJQGr2/is82EwEb8r7HrxsmMqAjTsztMYy7ohrIhGMIml+Gx4D3mA== + dependencies: + "@ethersproject/abstract-provider" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + +"@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.5.0.tgz#bcc6f576a553f21f3dd7ba17248f81b473c9c78f" + integrity sha512-l4Nj0eWlTUh6ro5IbPTgbpT4wRbdH5l8CQf7icF7sb/SI3Nhd9Y9HzhonTSTi6CefI0necIw7LJqQPopPLZyWw== + dependencies: + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/rlp" "^5.5.0" + +"@ethersproject/base64@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.5.0.tgz#881e8544e47ed976930836986e5eb8fab259c090" + integrity sha512-tdayUKhU1ljrlHzEWbStXazDpsx4eg1dBXUSI6+mHlYklOXoXF6lZvw8tnD6oVaWfnMxAgRSKROg3cVKtCcppA== + dependencies: + "@ethersproject/bytes" "^5.5.0" + +"@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.5.0.tgz#875b143f04a216f4f8b96245bde942d42d279527" + integrity sha512-6Xytlwvy6Rn3U3gKEc1vP7nR92frHkv6wtVr95LFR3jREXiCPzdWxKQ1cx4JGQBXxcguAwjA8murlYN2TSiEbg== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + bn.js "^4.11.9" + +"@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.5.0.tgz#cb11c526de657e7b45d2e0f0246fb3b9d29a601c" + integrity sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog== + dependencies: + "@ethersproject/logger" "^5.5.0" + +"@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.5.0.tgz#d2a2cd7d94bd1d58377d1d66c4f53c9be4d0a45e" + integrity sha512-2MsRRVChkvMWR+GyMGY4N1sAX9Mt3J9KykCsgUFd/1mwS0UH1qw+Bv9k1UJb3X3YJYFco9H20pjSlOIfCG5HYQ== + dependencies: + "@ethersproject/bignumber" "^5.5.0" + +"@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.0.4": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.5.0.tgz#7cee76d08f88d1873574c849e0207dcb32380cc9" + integrity sha512-dnGVpK1WtBjmnp3mUT0PlU2MpapnwWI0PibldQEq1408tQBAbZpPidkWoVVuNMOl/lISO3+4hXZWCL3YV7qzfg== + dependencies: + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + +"@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.0.0-beta.130", "@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.5.0.tgz#e4b1f9d7701da87c564ffe336f86dcee82983492" + integrity sha512-5VoFCTjo2rYbBe1l2f4mccaRFN/4VQEYFwwn04aJV2h7qf4ZvI2wFxUE1XOX+snbwCLRzIeikOqtAoPwMza9kg== + dependencies: + "@ethersproject/bytes" "^5.5.0" + js-sha3 "0.8.0" + +"@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.5.0.tgz#0c2caebeff98e10aefa5aef27d7441c7fd18cf5d" + integrity sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg== + +"@ethersproject/networks@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.5.0.tgz#babec47cab892c51f8dd652ce7f2e3e14283981a" + integrity sha512-KWfP3xOnJeF89Uf/FCJdV1a2aDJe5XTN2N52p4fcQ34QhDqQFkgQKZ39VGtiqUgHcLI8DfT0l9azC3KFTunqtA== + dependencies: + "@ethersproject/logger" "^5.5.0" + +"@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.5.0.tgz#61f00f2bb83376d2071baab02245f92070c59995" + integrity sha512-l3zRQg3JkD8EL3CPjNK5g7kMx4qSwiR60/uk5IVjd3oq1MZR5qUg40CNOoEJoX5wc3DyY5bt9EbMk86C7x0DNA== + dependencies: + "@ethersproject/logger" "^5.5.0" + +"@ethersproject/rlp@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.5.0.tgz#530f4f608f9ca9d4f89c24ab95db58ab56ab99a0" + integrity sha512-hLv8XaQ8PTI9g2RHoQGf/WSxBfTB/NudRacbzdxmst5VHAqd1sMibWG7SENzT5Dj3yZ3kJYx+WiRYEcQTAkcYA== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + +"@ethersproject/signing-key@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.5.0.tgz#2aa37169ce7e01e3e80f2c14325f624c29cedbe0" + integrity sha512-5VmseH7qjtNmDdZBswavhotYbWB0bOwKIlOTSlX14rKn5c11QmJwGt4GHeo7NrL/Ycl7uo9AHvEqs5xZgFBTng== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + bn.js "^4.11.9" + elliptic "6.5.4" + hash.js "1.1.7" + +"@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.5.0.tgz#e6784d00ec6c57710755699003bc747e98c5d549" + integrity sha512-9fy3TtF5LrX/wTrBaT8FGE6TDJyVjOvXynXJz5MT5azq+E6D92zuKNx7i29sWW2FjVOaWjAsiZ1ZWznuduTIIQ== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + +"@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.5.0.tgz#7e9bf72e97bcdf69db34fe0d59e2f4203c7a2908" + integrity sha512-9RZYSKX26KfzEd/1eqvv8pLauCKzDTub0Ko4LfIgaERvRuwyaNV78mJs7cpIgZaDl6RJui4o49lHwwCM0526zA== + dependencies: + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/rlp" "^5.5.0" + "@ethersproject/signing-key" "^5.5.0" + +"@ethersproject/web@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.5.0.tgz#0e5bb21a2b58fb4960a705bfc6522a6acf461e28" + integrity sha512-BEgY0eL5oH4mAo37TNYVrFeHsIXLRxggCRG/ksRIxI2X5uj5IsjGmcNiRN/VirQOlBxcUhCgHhaDLG4m6XAVoA== + dependencies: + "@ethersproject/base64" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + +"@gar/promisify@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.2.tgz#30aa825f11d438671d585bd44e7fd564535fc210" + integrity sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw== + +"@hapi/address@2.x.x": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" + integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ== + +"@hapi/bourne@1.x.x": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a" + integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA== + +"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06" + integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow== + +"@hapi/joi@^15.1.0": + version "15.1.1" + resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7" + integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ== + dependencies: + "@hapi/address" "2.x.x" + "@hapi/bourne" "1.x.x" + "@hapi/hoek" "8.x.x" + "@hapi/topo" "3.x.x" + +"@hapi/topo@3.x.x": + version "3.1.6" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29" + integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ== + dependencies: + "@hapi/hoek" "^8.3.0" + +"@humanwhocodes/config-array@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" + integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== + dependencies: + "@humanwhocodes/object-schema" "^1.2.0" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@hutson/parse-repository-url@^3.0.0": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" + integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" + integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^26.6.2" + jest-util "^26.6.2" + slash "^3.0.0" + +"@jest/core@^26.6.0", "@jest/core@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" + integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/reporters" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-changed-files "^26.6.2" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-resolve-dependencies "^26.6.3" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + jest-watcher "^26.6.2" + micromatch "^4.0.2" + p-each-series "^2.1.0" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^26.6.0", "@jest/environment@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" + integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== + dependencies: + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + +"@jest/fake-timers@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" + integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== + dependencies: + "@jest/types" "^26.6.2" + "@sinonjs/fake-timers" "^6.0.1" + "@types/node" "*" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-util "^26.6.2" + +"@jest/globals@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" + integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/types" "^26.6.2" + expect "^26.6.2" + +"@jest/reporters@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" + integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.2.4" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^4.0.3" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + jest-haste-map "^26.6.2" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^7.0.0" + optionalDependencies: + node-notifier "^8.0.0" + +"@jest/source-map@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" + integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.2.4" + source-map "^0.6.0" + +"@jest/test-result@^26.6.0", "@jest/test-result@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" + integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== + dependencies: + "@jest/console" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" + integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== + dependencies: + "@jest/test-result" "^26.6.2" + graceful-fs "^4.2.4" + jest-haste-map "^26.6.2" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + +"@jest/transform@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" + integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^26.6.2" + babel-plugin-istanbul "^6.0.0" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.4" + jest-haste-map "^26.6.2" + jest-regex-util "^26.0.0" + jest-util "^26.6.2" + micromatch "^4.0.2" + pirates "^4.0.1" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + +"@jest/types@^26.6.0", "@jest/types@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" + integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + +"@ledgerhq/devices@^4.78.0": + version "4.78.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-4.78.0.tgz#149b572f0616096e2bd5eb14ce14d0061c432be6" + integrity sha512-tWKS5WM/UU82czihnVjRwz9SXNTQzWjGJ/7+j/xZ70O86nlnGJ1aaFbs5/WTzfrVKpOKgj1ZoZkAswX67i/JTw== + dependencies: + "@ledgerhq/errors" "^4.78.0" + "@ledgerhq/logs" "^4.72.0" + rxjs "^6.5.3" + +"@ledgerhq/errors@^4.78.0": + version "4.78.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-4.78.0.tgz#23daf3af54d03b1bda3e616002b555da1bdb705a" + integrity sha512-FX6zHZeiNtegBvXabK6M5dJ+8OV8kQGGaGtuXDeK/Ss5EmG4Ltxc6Lnhe8hiHpm9pCHtktOsnUVL7IFBdHhYUg== + +"@ledgerhq/hw-app-eth@^4.3.0": + version "4.78.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-eth/-/hw-app-eth-4.78.0.tgz#fbd7ffe7f371d0c32a53f38c5149ab8d13514297" + integrity sha512-m4s4Zhy4lwYJjZB3xPeGV/8mxQcnoui+Eu1KDEl6atsquZHUpbtern/0hZl88+OlFUz0XrX34W3I9cqj61Y6KA== + dependencies: + "@ledgerhq/errors" "^4.78.0" + "@ledgerhq/hw-transport" "^4.78.0" + +"@ledgerhq/hw-transport-node-hid-noevents@^4.78.0": + version "4.78.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-4.78.0.tgz#6f0dbe1bbfad6516b42ad2d6b6b34a8b07e4cd46" + integrity sha512-CJPVR4wksq+apiXH2GnsttguBxmj9zdM2HjqZ3dHZN8SFW/9Xj3k+baS+pYoUISkECVxDrdfaW3Bd5dWv+jPUg== + dependencies: + "@ledgerhq/devices" "^4.78.0" + "@ledgerhq/errors" "^4.78.0" + "@ledgerhq/hw-transport" "^4.78.0" + "@ledgerhq/logs" "^4.72.0" + node-hid "^0.7.9" + +"@ledgerhq/hw-transport-node-hid@^4.3.0": + version "4.78.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-4.78.0.tgz#abd99e0f918b810a61c035e5ab8c2bd8807aff55" + integrity sha512-OMrY2ecfQ1XjMAuuHqu3n3agMPR06HN1s0ENrKc+Twbb5A17jujpv07WzjxfTN2V1G7vgeZpRqrg2ulhowWbdg== + dependencies: + "@ledgerhq/devices" "^4.78.0" + "@ledgerhq/errors" "^4.78.0" + "@ledgerhq/hw-transport" "^4.78.0" + "@ledgerhq/hw-transport-node-hid-noevents" "^4.78.0" + "@ledgerhq/logs" "^4.72.0" + lodash "^4.17.15" + node-hid "^0.7.9" + usb "^1.6.0" + +"@ledgerhq/hw-transport-u2f@4.24.0": + version "4.24.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-u2f/-/hw-transport-u2f-4.24.0.tgz#d67cfc4abf6d9a900ed45f2e2df7fe06dfdff5c7" + integrity sha512-/gFjhkM0sJfZ7iUf8HoIkGufAWgPacrbb1LW0TvWnZwvsATVJ1BZJBtrr90Wo401PKsjVwYtFt3Ce4gOAUv9jQ== + dependencies: + "@ledgerhq/hw-transport" "^4.24.0" + u2f-api "0.2.7" + +"@ledgerhq/hw-transport@^4.24.0", "@ledgerhq/hw-transport@^4.78.0": + version "4.78.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-4.78.0.tgz#714786658e1f2fbc0569e06e2abf8d15d310d931" + integrity sha512-xQu16OMPQjFYLjqCysij+8sXtdWv2YLxPrB6FoLvEWGTlQ7yL1nUBRQyzyQtWIYqZd4THQowQmzm1VjxuN6SZw== + dependencies: + "@ledgerhq/devices" "^4.78.0" + "@ledgerhq/errors" "^4.78.0" + events "^3.0.0" + +"@ledgerhq/logs@^4.72.0": + version "4.72.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-4.72.0.tgz#43df23af013ad1135407e5cf33ca6e4c4c7708d5" + integrity sha512-o+TYF8vBcyySRsb2kqBDv/KMeme8a2nwWoG+lAWzbDmWfb2/MrVWYCVYDYvjXdSoI/Cujqy1i0gIDrkdxa9chA== + +"@metamask/obs-store@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@metamask/obs-store/-/obs-store-7.0.0.tgz#6cae5f28306bb3e83a381bc9ae22682316095bd3" + integrity sha512-Tr61Uu9CGXkCg5CZwOYRMQERd+y6fbtrtLd/PzDTPHO5UJpmSbU+7MPcQK7d1DwZCOCeCIvhmZSUCvYliC8uGw== + dependencies: + "@metamask/safe-event-emitter" "^2.0.0" + through2 "^2.0.3" + +"@metamask/onboarding@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@metamask/onboarding/-/onboarding-1.0.1.tgz#14a36e1e175e2f69f09598e2008ab6dc1b3297e6" + integrity sha512-FqHhAsCI+Vacx2qa5mAFcWNSrTcVGMNjzxVgaX8ECSny/BJ9/vgXP9V7WF/8vb9DltPeQkxr+Fnfmm6GHfmdTQ== + dependencies: + bowser "^2.9.0" + +"@metamask/safe-event-emitter@2.0.0", "@metamask/safe-event-emitter@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz#af577b477c683fad17c619a78208cede06f9605c" + integrity sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@npmcli/fs@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.0.0.tgz#589612cfad3a6ea0feafcb901d29c63fd52db09f" + integrity sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ== + dependencies: + "@gar/promisify" "^1.0.1" + semver "^7.3.5" + +"@npmcli/move-file@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@pmmmwh/react-refresh-webpack-plugin@0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.3.tgz#1eec460596d200c0236bf195b078a5d1df89b766" + integrity sha512-br5Qwvh8D2OQqSXpd1g/xqXKnK0r+Jz6qVKBbWmpUcrbGOxUrf39V5oZ1876084CGn18uMdR5uvPqBv9UqtBjQ== + dependencies: + ansi-html "^0.0.7" + error-stack-parser "^2.0.6" + html-entities "^1.2.1" + native-url "^0.2.6" + schema-utils "^2.6.5" + source-map "^0.7.3" + +"@portis/web3-provider-engine@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@portis/web3-provider-engine/-/web3-provider-engine-1.1.2.tgz#97f383156ea6b70fba69ae93a945fdd94159b1ba" + integrity sha512-NiiF0UPfngf4ulo32ybEDAMaad4i7h44HJaN8ea8HHt/vaFiUcPtINjC2o21jhWaLANerW4ZbOrNs1iCLH4p6A== + dependencies: + async "^2.5.0" + backoff "^2.5.0" + clone "^2.0.0" + cross-fetch "^2.1.0" + eth-block-tracker "^4.2.0" + eth-json-rpc-filters "^4.0.2" + eth-json-rpc-infura "^3.1.0" + eth-json-rpc-middleware "^5.0.2" + eth-sig-util "2.5.3" + ethereumjs-block "^1.2.2" + ethereumjs-tx "^1.2.0" + ethereumjs-util "^5.1.5" + ethereumjs-vm "^2.3.4" + json-rpc-error "^2.0.0" + json-stable-stringify "^1.0.1" + promise-to-callback "^1.0.0" + readable-stream "^2.2.9" + request "^2.85.0" + semaphore "^1.0.3" + ws "^5.1.1" + xhr "^2.2.0" + xtend "^4.0.1" + +"@portis/web3@^2.0.0-beta.54": + version "2.0.0-beta.59" + resolved "https://registry.yarnpkg.com/@portis/web3/-/web3-2.0.0-beta.59.tgz#2e5292d8e1daf6070aa3b4a8cb33c1a9e0315011" + integrity sha512-QdIdrI3uK+TyT+dxRK5bEYOi2PBlUDJ7vszR2uu0bT49wy7O52B9td6fL/5gsfk0VpCsmrYov3x3gEQYwGUyvQ== + dependencies: + "@portis/web3-provider-engine" "1.1.2" + ethereumjs-util "5.2.0" + penpal "3.0.7" + pocket-js-core "0.0.3" + +"@reduxjs/toolkit@^1.6.2": + version "1.6.2" + resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.6.2.tgz#2f2b5365df77dd6697da28fdf44f33501ed9ba37" + integrity sha512-HbfI/hOVrAcMGAYsMWxw3UJyIoAS9JTdwddsjlr5w3S50tXhWb+EMyhIw+IAvCVCLETkzdjgH91RjDSYZekVBA== + dependencies: + immer "^9.0.6" + redux "^4.1.0" + redux-thunk "^2.3.0" + reselect "^4.0.0" + +"@rollup/plugin-node-resolve@^7.1.1": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz#80de384edfbd7bfc9101164910f86078151a3eca" + integrity sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q== + dependencies: + "@rollup/pluginutils" "^3.0.8" + "@types/resolve" "0.0.8" + builtin-modules "^3.1.0" + is-module "^1.0.0" + resolve "^1.14.2" + +"@rollup/plugin-replace@^2.3.1": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a" + integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + magic-string "^0.25.7" + +"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@sinonjs/commons@^1.7.0": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" + integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@surma/rollup-plugin-off-main-thread@^1.1.1": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-1.4.2.tgz#e6786b6af5799f82f7ab3a82e53f6182d2b91a58" + integrity sha512-yBMPqmd1yEJo/280PAMkychuaALyQ9Lkb5q1ck3mjJrFuEobIfhnQ4J3mbvBoISmR3SWMWV+cGB/I0lCQee79A== + dependencies: + ejs "^2.6.1" + magic-string "^0.25.0" + +"@svgr/babel-plugin-add-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906" + integrity sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg== + +"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz#6b2c770c95c874654fd5e1d5ef475b78a0a962ef" + integrity sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg== + +"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz#25621a8915ed7ad70da6cea3d0a6dbc2ea933efd" + integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA== + +"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz#0b221fc57f9fcd10e91fe219e2cd0dd03145a897" + integrity sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ== + +"@svgr/babel-plugin-svg-dynamic-title@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz#139b546dd0c3186b6e5db4fefc26cb0baea729d7" + integrity sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg== + +"@svgr/babel-plugin-svg-em-dimensions@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz#6543f69526632a133ce5cabab965deeaea2234a0" + integrity sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw== + +"@svgr/babel-plugin-transform-react-native-svg@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz#00bf9a7a73f1cad3948cdab1f8dfb774750f8c80" + integrity sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q== + +"@svgr/babel-plugin-transform-svg-component@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz#583a5e2a193e214da2f3afeb0b9e8d3250126b4a" + integrity sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ== + +"@svgr/babel-preset@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz#8af54f3e0a8add7b1e2b0fcd5a882c55393df327" + integrity sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1" + "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0" + "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0" + "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0" + "@svgr/babel-plugin-transform-svg-component" "^5.5.0" + +"@svgr/core@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz#82e826b8715d71083120fe8f2492ec7d7874a579" + integrity sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ== + dependencies: + "@svgr/plugin-jsx" "^5.5.0" + camelcase "^6.2.0" + cosmiconfig "^7.0.0" + +"@svgr/hast-util-to-babel-ast@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz#5ee52a9c2533f73e63f8f22b779f93cd432a5461" + integrity sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ== + dependencies: + "@babel/types" "^7.12.6" + +"@svgr/plugin-jsx@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz#1aa8cd798a1db7173ac043466d7b52236b369000" + integrity sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA== + dependencies: + "@babel/core" "^7.12.3" + "@svgr/babel-preset" "^5.5.0" + "@svgr/hast-util-to-babel-ast" "^5.5.0" + svg-parser "^2.0.2" + +"@svgr/plugin-svgo@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246" + integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ== + dependencies: + cosmiconfig "^7.0.0" + deepmerge "^4.2.2" + svgo "^1.2.2" + +"@svgr/webpack@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.5.0.tgz#aae858ee579f5fa8ce6c3166ef56c6a1b381b640" + integrity sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g== + dependencies: + "@babel/core" "^7.12.3" + "@babel/plugin-transform-react-constant-elements" "^7.12.1" + "@babel/preset-env" "^7.12.1" + "@babel/preset-react" "^7.12.5" + "@svgr/core" "^5.5.0" + "@svgr/plugin-jsx" "^5.5.0" + "@svgr/plugin-svgo" "^5.5.0" + loader-utils "^2.0.0" + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@toruslabs/eccrypto@^1.1.7": + version "1.1.8" + resolved "https://registry.yarnpkg.com/@toruslabs/eccrypto/-/eccrypto-1.1.8.tgz#ce1eac9c3964a091cdc74956a62036b5719a41eb" + integrity sha512-5dIrO2KVqvnAPOPfJ2m6bnjp9vav9GIcCZXiXRW/bJuIDRLVxJhVvRlleF4oaEZPq5yX5piHq5jVHagNNS0jOQ== + dependencies: + acorn "^8.4.1" + elliptic "^6.5.4" + es6-promise "^4.2.8" + nan "^2.14.2" + optionalDependencies: + secp256k1 "^3.8.0" + +"@toruslabs/fetch-node-details@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@toruslabs/fetch-node-details/-/fetch-node-details-4.0.1.tgz#2d178fcfd84fd87afa35782c474a5472e25fb903" + integrity sha512-j+8LnyqZovVBBVvPBb0kvNFV5xkgCafjXLTQUJfQeNSKhOGcrEogU1Wobn4uEIj1nxAqt9AG6xYAooUMkL7E8g== + dependencies: + web3-eth-contract "^1.6.1" + web3-utils "^1.6.1" + +"@toruslabs/http-helpers@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@toruslabs/http-helpers/-/http-helpers-1.4.0.tgz#6d2d4129d1126876b0616b7dffec3f4b339739b5" + integrity sha512-lPRhTWeChQunds2CGV70xvaoFMMebZAqZLpTYZjUJfziumQjT12w9HWLIzlRfGFVKoYUsUiZLpGHl0JEwHCcqg== + dependencies: + deepmerge "^4.2.2" + +"@toruslabs/openlogin-jrpc@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@toruslabs/openlogin-jrpc/-/openlogin-jrpc-1.3.1.tgz#1af5677706aea7d4741087ded699efe81a8aadff" + integrity sha512-yLM5I3AVEhhWqTUbSAcOjLvgwR8ZaOmVq2cw3Lvn3Dte9S04PYF+yKJD9uEz7dG3eJsh47TWiXxciQEKwaHSHQ== + dependencies: + "@toruslabs/openlogin-utils" "^1.3.0" + end-of-stream "^1.4.4" + events "^3.3.0" + fast-safe-stringify "^2.1.1" + once "^1.4.0" + pump "^3.0.0" + readable-stream "^3.6.0" + +"@toruslabs/openlogin-utils@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@toruslabs/openlogin-utils/-/openlogin-utils-1.3.0.tgz#e3b4788d85a6995fe3ece1e337715b5ac0ff4970" + integrity sha512-ugyBWIhNaaGJuGm4EqhNGJ1pjnUNGVwsyvMc6CCtgTEi/C07NdFUUMM9QqKcTGmRG8prdtbIlsVeTricK7EnUQ== + dependencies: + base64url "^3.0.1" + keccak "^3.0.2" + randombytes "^2.1.0" + +"@toruslabs/torus-embed@^1.8.0": + version "1.18.3" + resolved "https://registry.yarnpkg.com/@toruslabs/torus-embed/-/torus-embed-1.18.3.tgz#fe4cf327b04d14bd4a2a6b34214e13cd0b7b9f09" + integrity sha512-T1gwUdvVM7sF6qqh8aUIRSZMV+t/d9UUHZnIXWDC6WZc+r0PbOo43ttScq4fZIPLF6EwLVfU6/m2Hg2lMI5TWg== + dependencies: + "@metamask/obs-store" "^7.0.0" + "@toruslabs/fetch-node-details" "^4.0.1" + "@toruslabs/http-helpers" "^1.4.0" + "@toruslabs/openlogin-jrpc" "^1.3.1" + "@toruslabs/torus.js" "^4.2.0" + create-hash "^1.2.0" + end-of-stream "^1.4.4" + eth-rpc-errors "^4.0.3" + events "^3.3.0" + fast-deep-equal "^3.1.3" + is-stream "^3.0.0" + lodash.merge "^4.6.2" + loglevel "^1.8.0" + once "^1.4.0" + pump "^3.0.0" + +"@toruslabs/torus.js@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@toruslabs/torus.js/-/torus.js-4.2.0.tgz#6d0c81a78fb6f0038f1a7b56cd5bd5d450884696" + integrity sha512-BNx+xv48yMbx6h+Lx4YTrzwGNn1e2D3pcdrqpB6Mgr35JuEcgHFG+DakQHdxwG2cTPZWP3nGHW4kg45mT3nUQg== + dependencies: + "@toruslabs/eccrypto" "^1.1.7" + "@toruslabs/http-helpers" "^1.4.0" + bn.js "^5.2.0" + elliptic "^6.5.4" + json-stable-stringify "^1.0.1" + loglevel "^1.7.1" + web3-utils "^1.6.1" + +"@trivago/prettier-plugin-sort-imports@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-2.0.4.tgz#2e5bbf80bd87e919202f791008a2fbcdbb2a566f" + integrity sha512-SCVUhQdbjn/Z4AY7b9JO00fZCeXxiVuarVxYP0n6cX2ijiQkE5HmGrOk32n0u385OebzQ9bZcrc51lAGLjXnFQ== + dependencies: + "@babel/core" "7.13.10" + "@babel/generator" "7.13.9" + "@babel/parser" "7.13.10" + "@babel/traverse" "7.13.0" + "@babel/types" "7.13.0" + "@types/lodash" "4.14.168" + javascript-natural-sort "0.7.1" + lodash "4.17.21" + +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": + version "7.1.16" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.16.tgz#bc12c74b7d65e82d29876b5d0baf5c625ac58702" + integrity sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.3.tgz#f456b4b2ce79137f768aa130d2423d2f0ccfaba5" + integrity sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" + integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== + dependencies: + "@babel/types" "^7.3.0" + +"@types/bn.js@^4.11.0", "@types/bn.js@^4.11.3", "@types/bn.js@^4.11.5": + version "4.11.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" + integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== + dependencies: + "@types/node" "*" + +"@types/bn.js@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.0.tgz#32c5d271503a12653c62cf4d2b45e6eab8cebc68" + integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA== + dependencies: + "@types/node" "*" + +"@types/eslint@^7.28.2": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.29.0.tgz#e56ddc8e542815272720bb0b4ccc2aff9c3e1c78" + integrity sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*": + version "0.0.50" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" + integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw== + +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + +"@types/ethereum-protocol@*": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/ethereum-protocol/-/ethereum-protocol-1.0.2.tgz#e765d4c6f4b5ebe906932bd20333e307c56a9bc7" + integrity sha512-Ri/hwt4UckZlF7eqhhAQcXsNvcgQmSJOKZteLco1/5NsRcneW/cJuQcrQNILN2Ohs9WUQjeGW3ZRRNqkEVMzuQ== + dependencies: + bignumber.js "7.2.1" + +"@types/glob@^7.1.1": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/graceful-fs@^4.1.2": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + dependencies: + "@types/node" "*" + +"@types/hdkey@^0.7.0": + version "0.7.1" + resolved "https://registry.yarnpkg.com/@types/hdkey/-/hdkey-0.7.1.tgz#9bc63ebbe96b107b277b65ea7a95442a677d0d61" + integrity sha512-4Kkr06hq+R8a9EzVNqXGOY2x1xA7dhY6qlp6OvaZ+IJy1BCca1Cv126RD9X7CMJoXoLo8WvAizy8gQHpqW6K0Q== + dependencies: + "@types/node" "*" + +"@types/hoist-non-react-statics@^3.3.0": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" + integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + +"@types/html-minifier-terser@^5.0.0": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz#693b316ad323ea97eed6b38ed1a3cc02b1672b57" + integrity sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w== + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" + integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8": + version "7.0.9" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" + integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + +"@types/lodash@4.14.168": + version "4.14.168" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.168.tgz#fe24632e79b7ade3f132891afff86caa5e5ce008" + integrity sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q== + +"@types/minimatch@*": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + +"@types/minimist@^1.2.0": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" + integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== + +"@types/node@*": + version "16.11.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.11.tgz#6ea7342dfb379ea1210835bada87b3c512120234" + integrity sha512-KB0sixD67CeecHC33MYn+eYARkqTheIRNuu97y2XMjR7Wu3XibO1vaY6VBV6O/a89SPI81cEUIYT87UqUWlZNw== + +"@types/node@^12.12.6": + version "12.20.37" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.37.tgz#abb38afa9d6e8a2f627a8cb52290b3c80fbe61ed" + integrity sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA== + +"@types/normalize-package-data@^2.4.0": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/pbkdf2@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" + integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== + dependencies: + "@types/node" "*" + +"@types/prettier@^2.0.0": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.2.tgz#4c62fae93eb479660c3bd93f9d24d561597a8281" + integrity sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA== + +"@types/prop-types@*": + version "15.7.4" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" + integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ== + +"@types/q@^1.5.1": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df" + integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== + +"@types/react-redux@^7.1.20": + version "7.1.20" + resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.20.tgz#42f0e61ababb621e12c66c96dda94c58423bd7df" + integrity sha512-q42es4c8iIeTgcnB+yJgRTTzftv3eYYvCZOh1Ckn2eX/3o5TdsQYKUWpLoLuGlcY/p+VAhV9IOEZJcWk/vfkXw== + dependencies: + "@types/hoist-non-react-statics" "^3.3.0" + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + redux "^4.0.0" + +"@types/react@*": + version "17.0.37" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.37.tgz#6884d0aa402605935c397ae689deed115caad959" + integrity sha512-2FS1oTqBGcH/s0E+CjrCCR9+JMpsu9b69RTFO+40ua43ZqP5MmQ4iUde/dMjWR909KxZwmOQIFq6AV6NjEG5xg== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/resolve@0.0.8": + version "0.0.8" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" + integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== + dependencies: + "@types/node" "*" + +"@types/scheduler@*": + version "0.16.2" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" + integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== + +"@types/secp256k1@^4.0.1": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" + integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== + dependencies: + "@types/node" "*" + +"@types/source-list-map@*": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" + integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== + +"@types/stack-utils@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + +"@types/tapable@^1", "@types/tapable@^1.0.5": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.8.tgz#b94a4391c85666c7b73299fd3ad79d4faa435310" + integrity sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ== + +"@types/uglify-js@*": + version "3.13.1" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.1.tgz#5e889e9e81e94245c75b6450600e1c5ea2878aea" + integrity sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ== + dependencies: + source-map "^0.6.1" + +"@types/web3-provider-engine@^14.0.0": + version "14.0.1" + resolved "https://registry.yarnpkg.com/@types/web3-provider-engine/-/web3-provider-engine-14.0.1.tgz#9ceb76af025e9359a28cff1f0fc4c19070c40ab7" + integrity sha512-SaAfLJY/40wKFDsNFwaNfwqFSL6kVhTx9JD18qM+Gaw1qdAXLYF/6E7TIqWEdoG4so6fki/zxURP5NsoCePYJw== + dependencies: + "@types/ethereum-protocol" "*" + +"@types/webpack-sources@*": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-3.2.0.tgz#16d759ba096c289034b26553d2df1bf45248d38b" + integrity sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg== + dependencies: + "@types/node" "*" + "@types/source-list-map" "*" + source-map "^0.7.3" + +"@types/webpack@^4.41.8": + version "4.41.32" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.32.tgz#a7bab03b72904070162b2f169415492209e94212" + integrity sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg== + dependencies: + "@types/node" "*" + "@types/tapable" "^1" + "@types/uglify-js" "*" + "@types/webpack-sources" "*" + anymatch "^3.0.0" + source-map "^0.6.0" + +"@types/yargs-parser@*": + version "20.2.1" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" + integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== + +"@types/yargs@^15.0.0": + version "15.0.14" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06" + integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^4.5.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276" + integrity sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg== + dependencies: + "@typescript-eslint/experimental-utils" "4.33.0" + "@typescript-eslint/scope-manager" "4.33.0" + debug "^4.3.1" + functional-red-black-tree "^1.0.1" + ignore "^5.1.8" + regexpp "^3.1.0" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/experimental-utils@4.33.0", "@typescript-eslint/experimental-utils@^4.0.1": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz#6f2a786a4209fa2222989e9380b5331b2810f7fd" + integrity sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q== + dependencies: + "@types/json-schema" "^7.0.7" + "@typescript-eslint/scope-manager" "4.33.0" + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/typescript-estree" "4.33.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/experimental-utils@^3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz#e179ffc81a80ebcae2ea04e0332f8b251345a686" + integrity sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/types" "3.10.1" + "@typescript-eslint/typescript-estree" "3.10.1" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/parser@^4.1.0", "@typescript-eslint/parser@^4.5.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.33.0.tgz#dfe797570d9694e560528d18eecad86c8c744899" + integrity sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA== + dependencies: + "@typescript-eslint/scope-manager" "4.33.0" + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/typescript-estree" "4.33.0" + debug "^4.3.1" + +"@typescript-eslint/scope-manager@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3" + integrity sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ== + dependencies: + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/visitor-keys" "4.33.0" + +"@typescript-eslint/types@3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727" + integrity sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ== + +"@typescript-eslint/types@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" + integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== + +"@typescript-eslint/typescript-estree@3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz#fd0061cc38add4fad45136d654408569f365b853" + integrity sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w== + dependencies: + "@typescript-eslint/types" "3.10.1" + "@typescript-eslint/visitor-keys" "3.10.1" + debug "^4.1.1" + glob "^7.1.6" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/typescript-estree@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609" + integrity sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA== + dependencies: + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/visitor-keys" "4.33.0" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/visitor-keys@3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz#cd4274773e3eb63b2e870ac602274487ecd1e931" + integrity sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ== + dependencies: + eslint-visitor-keys "^1.1.0" + +"@typescript-eslint/visitor-keys@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd" + integrity sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg== + dependencies: + "@typescript-eslint/types" "4.33.0" + eslint-visitor-keys "^2.0.0" + +"@walletconnect/browser-utils@^1.6.6": + version "1.6.6" + resolved "https://registry.yarnpkg.com/@walletconnect/browser-utils/-/browser-utils-1.6.6.tgz#a985b48c99c65a986a051d66a4910010a10a0c56" + integrity sha512-E29xSHU7Akd4jaPehWVGx7ct+SsUzZbxcGc0fz+Pw6/j4Gh5tlfYZ9XuVixuYI4WPdQ2CmOraj8RrVOu5vba4w== + dependencies: + "@walletconnect/safe-json" "1.0.0" + "@walletconnect/types" "^1.6.6" + "@walletconnect/window-getters" "1.0.0" + "@walletconnect/window-metadata" "1.0.0" + detect-browser "5.2.0" + +"@walletconnect/client@^1.6.6": + version "1.6.6" + resolved "https://registry.yarnpkg.com/@walletconnect/client/-/client-1.6.6.tgz#ec64575b245bfce25cc0d9150a3c2e919a8a2632" + integrity sha512-DDOrxagSmXCciIEr16hTf4gWZ7PG7GXribYTfOOsjtODLtPEODEEYj/AsmEALjh3ZBG4bN35Vj0F/ZA1D+90GQ== + dependencies: + "@walletconnect/core" "^1.6.6" + "@walletconnect/iso-crypto" "^1.6.6" + "@walletconnect/types" "^1.6.6" + "@walletconnect/utils" "^1.6.6" + +"@walletconnect/core@^1.6.6": + version "1.6.6" + resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-1.6.6.tgz#0a35a9b0f91da8958bec27be801a510818f4e142" + integrity sha512-pSftIVPY6mYz2koZPBEYmeFeAjVf2MSnRHOM6+vx+iAsUEcfMZHkgeXX6GtM6Fjza+zSZu1qnmdgURVXpmKwtQ== + dependencies: + "@walletconnect/socket-transport" "^1.6.6" + "@walletconnect/types" "^1.6.6" + "@walletconnect/utils" "^1.6.6" + +"@walletconnect/crypto@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@walletconnect/crypto/-/crypto-1.0.1.tgz#d4c1b1cd5dd1be88fe9a82dfc54cadbbb3f9d325" + integrity sha512-IgUReNrycIFxkGgq8YT9HsosCkhutakWD9Q411PR0aJfxpEa/VKJeaLRtoz6DvJpztWStwhIHnAbBoOVR72a6g== + dependencies: + "@walletconnect/encoding" "^1.0.0" + "@walletconnect/environment" "^1.0.0" + "@walletconnect/randombytes" "^1.0.1" + aes-js "^3.1.2" + hash.js "^1.1.7" + +"@walletconnect/encoding@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/encoding/-/encoding-1.0.0.tgz#e24190cb5e803526f9dfd7191fb0e4dc53c6d864" + integrity sha512-4nkJFnS0QF5JdieG/3VPD1/iEWkLSZ14EBInLZ00RWxmC6EMZrzAeHNAWIgm+xP3NK0lqz+7lEsmWGtcl5gYnQ== + dependencies: + is-typedarray "1.0.0" + typedarray-to-buffer "3.1.5" + +"@walletconnect/environment@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/environment/-/environment-1.0.0.tgz#c4545869fa9c389ec88c364e1a5f8178e8ab5034" + integrity sha512-4BwqyWy6KpSvkocSaV7WR3BlZfrxLbJSLkg+j7Gl6pTDE+U55lLhJvQaMuDVazXYxcjBsG09k7UlH7cGiUI5vQ== + +"@walletconnect/http-connection@^1.6.6": + version "1.6.6" + resolved "https://registry.yarnpkg.com/@walletconnect/http-connection/-/http-connection-1.6.6.tgz#d5030bf175f24e57901e5da3acff493a3e7df556" + integrity sha512-V0UEnvMQPYBpD+8LAbuxN+i0dWVVfZ8XtmJymsBh2KyHLgKyHSsT5RwSCst132JGDV4/JP4HrHCs5t8KqSfEPw== + dependencies: + "@walletconnect/types" "^1.6.6" + "@walletconnect/utils" "^1.6.6" + eventemitter3 "4.0.7" + xhr2-cookies "1.1.0" + +"@walletconnect/iso-crypto@^1.6.6": + version "1.6.6" + resolved "https://registry.yarnpkg.com/@walletconnect/iso-crypto/-/iso-crypto-1.6.6.tgz#19848bdcd54e9945961bab8a996cbca8a00d7cf1" + integrity sha512-wRYgKvd8K3A9FVLn2c0cDh4+9OUHkqibKtwQJTJsz+ibPGgd+n5j1/FjnzDDRGb9T1+TtlwYF3ZswKyys3diVQ== + dependencies: + "@walletconnect/crypto" "^1.0.1" + "@walletconnect/types" "^1.6.6" + "@walletconnect/utils" "^1.6.6" + +"@walletconnect/jsonrpc-types@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.0.tgz#fa75ad5e8f106a2e33287b1e6833e22ed0225055" + integrity sha512-11QXNq5H1PKZk7bP8SxgmCw3HRaDuPOVE+wObqEvmhc7OWYUZqfuaaMb+OXGRSOHL3sbC+XHfdeCxFTMXSFyng== + dependencies: + keyvaluestorage-interface "^1.0.0" + +"@walletconnect/jsonrpc-utils@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.0.tgz#1a2f668d606e8f0b6e7d8fdebae86001bd037a3f" + integrity sha512-qUHbKUK6sHeHn67qtHZoLoYk5hS6x1arTPjKDRkY93/6Fx+ZmNIpdm1owX3l6aYueyegJ7mz43FpvYHUqJ8xcw== + dependencies: + "@walletconnect/environment" "^1.0.0" + "@walletconnect/jsonrpc-types" "^1.0.0" + +"@walletconnect/mobile-registry@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@walletconnect/mobile-registry/-/mobile-registry-1.4.0.tgz#502cf8ab87330841d794819081e748ebdef7aee5" + integrity sha512-ZtKRio4uCZ1JUF7LIdecmZt7FOLnX72RPSY7aUVu7mj7CSfxDwUn6gBuK6WGtH+NZCldBqDl5DenI5fFSvkKYw== + +"@walletconnect/qrcode-modal@^1.6.6": + version "1.6.6" + resolved "https://registry.yarnpkg.com/@walletconnect/qrcode-modal/-/qrcode-modal-1.6.6.tgz#d95d790a4f0eaee4e8bb024b92ed111a0ee716bd" + integrity sha512-wZorjpOIm6OhXKNvyH1YtpxfCUVcnuJxS8YbUeKWckGjS3tDPqUTbXWPlzFdMpNBrpY3j0B2XjLgVVQ2aUDX0w== + dependencies: + "@walletconnect/browser-utils" "^1.6.6" + "@walletconnect/mobile-registry" "^1.4.0" + "@walletconnect/types" "^1.6.6" + copy-to-clipboard "^3.3.1" + preact "10.4.1" + qrcode "1.4.4" + +"@walletconnect/randombytes@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@walletconnect/randombytes/-/randombytes-1.0.1.tgz#87f0f02d9206704ce1c9e23f07d3b28898c48385" + integrity sha512-YJTyq69i0PtxVg7osEpKfvjTaWuAsR49QEcqGKZRKVQWMbGXBZ65fovemK/SRgtiFRv0V8PwsrlKSheqzfPNcg== + dependencies: + "@walletconnect/encoding" "^1.0.0" + "@walletconnect/environment" "^1.0.0" + randombytes "^2.1.0" + +"@walletconnect/safe-json@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/safe-json/-/safe-json-1.0.0.tgz#12eeb11d43795199c045fafde97e3c91646683b2" + integrity sha512-QJzp/S/86sUAgWY6eh5MKYmSfZaRpIlmCJdi5uG4DJlKkZrHEF7ye7gA+VtbVzvTtpM/gRwO2plQuiooIeXjfg== + +"@walletconnect/socket-transport@^1.6.6": + version "1.6.6" + resolved "https://registry.yarnpkg.com/@walletconnect/socket-transport/-/socket-transport-1.6.6.tgz#b80974fe3e2a2f93ba1f6b40df5a0ea492b94086" + integrity sha512-mugCEoeKTx75ogb5ROg/+LA3yGTsuRNcrYgrApceo7WNU9Z4dG8l6ycMPqrrFcODcrasq3NmXVWUYDv/CvrzSw== + dependencies: + "@walletconnect/types" "^1.6.6" + "@walletconnect/utils" "^1.6.6" + ws "7.5.3" + +"@walletconnect/types@^1.6.6": + version "1.6.6" + resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-1.6.6.tgz#8d644e2a390e494e40424c60272e91b4820bf0d4" + integrity sha512-op77cxexOmQQN36XB1sYouNTlBRV0Rup/2NYK8A1ffdwXa3a6HLHHdhBM7I/I9BVmRXoZ4+XoOnPKGGrYtlS3g== + +"@walletconnect/utils@^1.6.6": + version "1.6.6" + resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-1.6.6.tgz#e8e49a5f2c35e4a5f9153b09ad076655f38d8c96" + integrity sha512-s2X/cVXiMDSEoWV6i7HPMbP1obXlzP7KLMrBo9OMabiJKnQEh6HSZ39WLswB2PHnl8Hp1Sr4BdRvhM5kCcYWRw== + dependencies: + "@walletconnect/browser-utils" "^1.6.6" + "@walletconnect/encoding" "^1.0.0" + "@walletconnect/jsonrpc-utils" "^1.0.0" + "@walletconnect/types" "^1.6.6" + bn.js "4.11.8" + js-sha3 "0.8.0" + query-string "6.13.5" + +"@walletconnect/web3-provider@^1.5.0": + version "1.6.6" + resolved "https://registry.yarnpkg.com/@walletconnect/web3-provider/-/web3-provider-1.6.6.tgz#7be7b6d6230d6925f8728cdddc226ef24119e602" + integrity sha512-8z4r9JCE0lKuZmVCPSdYnX114ckQ+oMfr9D8osRBtdyhvN9elwITMloUJfACDRelcuet94yEbXuDobQeBDDkkw== + dependencies: + "@walletconnect/client" "^1.6.6" + "@walletconnect/http-connection" "^1.6.6" + "@walletconnect/qrcode-modal" "^1.6.6" + "@walletconnect/types" "^1.6.6" + "@walletconnect/utils" "^1.6.6" + web3-provider-engine "16.0.1" + +"@walletconnect/window-getters@1.0.0", "@walletconnect/window-getters@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/window-getters/-/window-getters-1.0.0.tgz#1053224f77e725dfd611c83931b5f6c98c32bfc8" + integrity sha512-xB0SQsLaleIYIkSsl43vm8EwETpBzJ2gnzk7e0wMF3ktqiTGS6TFHxcprMl5R44KKh4tCcHCJwolMCaDSwtAaA== + +"@walletconnect/window-metadata@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/window-metadata/-/window-metadata-1.0.0.tgz#93b1cc685e6b9b202f29c26be550fde97800c4e5" + integrity sha512-9eFvmJxIKCC3YWOL97SgRkKhlyGXkrHwamfechmqszbypFspaSk+t2jQXAEU7YClHF6Qjw5eYOmy1//zFi9/GA== + dependencies: + "@walletconnect/window-getters" "^1.0.0" + +"@web3-react/abstract-connector@^6.0.7": + version "6.0.7" + resolved "https://registry.yarnpkg.com/@web3-react/abstract-connector/-/abstract-connector-6.0.7.tgz#401b3c045f1e0fab04256311be49d5144e9badc6" + integrity sha512-RhQasA4Ox8CxUC0OENc1AJJm8UTybu/oOCM61Zjg6y0iF7Z0sqv1Ai1VdhC33hrQpA8qSBgoXN9PaP8jKmtdqg== + dependencies: + "@web3-react/types" "^6.0.7" + +"@web3-react/core@6.1.9": + version "6.1.9" + resolved "https://registry.yarnpkg.com/@web3-react/core/-/core-6.1.9.tgz#5f5daa0545a8ea07770a699580ced552583afc97" + integrity sha512-P877DslsbAkWIlMANpWiK7pCvNwlz0kJC0EGckuVh0wlA23J4UnFxq6xyOaxkxaDCu14rA/tAO0NbwjcXTQgSA== + dependencies: + "@ethersproject/keccak256" "^5.0.0-beta.130" + "@web3-react/abstract-connector" "^6.0.7" + "@web3-react/types" "^6.0.7" + tiny-invariant "^1.0.6" + tiny-warning "^1.0.3" + +"@web3-react/fortmatic-connector@6.1.6": + version "6.1.6" + resolved "https://registry.yarnpkg.com/@web3-react/fortmatic-connector/-/fortmatic-connector-6.1.6.tgz#99836c4ff4428432e34ed859b55c5842b02726a5" + integrity sha512-AKiEVvKlZPpRj5pADXyucl2FBt3ymf7PSsRhraHeI8hJCfCEACQ2+bq7okvJq9sNqaeUKukzwUYJmgBYn0qkYQ== + dependencies: + "@web3-react/abstract-connector" "^6.0.7" + "@web3-react/types" "^6.0.7" + fortmatic "^1.0.0" + tiny-invariant "^1.0.6" + +"@web3-react/frame-connector@6.0.9": + version "6.0.9" + resolved "https://registry.yarnpkg.com/@web3-react/frame-connector/-/frame-connector-6.0.9.tgz#9e7659480a554944e0ecf08f00fe0c946a565d35" + integrity sha512-SyEveo8XckEw+aIhT7A58OFtUgAVWM85PmJegoIaTAWBVTVlvXClTAnOUrDzH2Nu6nCoj2swNKHS2dePnux9Pw== + dependencies: + "@web3-react/abstract-connector" "^6.0.7" + "@web3-react/types" "^6.0.7" + eth-provider "^0.2.5" + tiny-invariant "^1.0.6" + +"@web3-react/injected-connector@6.0.7": + version "6.0.7" + resolved "https://registry.yarnpkg.com/@web3-react/injected-connector/-/injected-connector-6.0.7.tgz#1e0be23f51fa07fe6547fe986768a46b74c3a426" + integrity sha512-Y7aJSz6pg+MWKtvdyuqyy6LWuH+4Tqtph1LWfiyVms9II9ar/9B/de4R8wh4wjg91wmHkU+D75yP09E/Soh2RA== + dependencies: + "@web3-react/abstract-connector" "^6.0.7" + "@web3-react/types" "^6.0.7" + tiny-warning "^1.0.3" + +"@web3-react/ledger-connector@6.1.9": + version "6.1.9" + resolved "https://registry.yarnpkg.com/@web3-react/ledger-connector/-/ledger-connector-6.1.9.tgz#10e522a49e3c0f1cf21dd576d0e498b74818487d" + integrity sha512-hcDif/TWIRhCbTU1kRfsqeSYmECpCx2Z42X1dA4opSx7DqO271HP6xRMEHQomxwEJiqzEy9oMcESU4Sfri+FGg== + dependencies: + "@0x/subproviders" "^5.0.4" + "@web3-react/abstract-connector" "^6.0.7" + "@web3-react/types" "^6.0.7" + +"@web3-react/portis-connector@6.1.6": + version "6.1.6" + resolved "https://registry.yarnpkg.com/@web3-react/portis-connector/-/portis-connector-6.1.6.tgz#e98847864c05a35e06e593e3aea0358749aae162" + integrity sha512-c9qyPoGVG+wLKcIJGzVTDP6oZ/Wn+EbE2cVjeCDTR2opzOO6kJoG7SOZMLXIX1F9v/N6bB8NI6XWlDjROK8zMw== + dependencies: + "@portis/web3" "^2.0.0-beta.54" + "@web3-react/abstract-connector" "^6.0.7" + "@web3-react/types" "^6.0.7" + tiny-invariant "^1.0.6" + +"@web3-react/torus-connector@6.1.7": + version "6.1.7" + resolved "https://registry.yarnpkg.com/@web3-react/torus-connector/-/torus-connector-6.1.7.tgz#5ce7829a5669efdaa2e39abe2989a490b87dad1a" + integrity sha512-zuirHlkcUuwkAyhCz1zBHbxiQ3627Zvw/MJyXGFVX5BSr9ywulFzEi2f+DOyDMMBZAxtSPs3VHB4xMTetUCkOg== + dependencies: + "@toruslabs/torus-embed" "^1.8.0" + "@web3-react/abstract-connector" "^6.0.7" + "@web3-react/types" "^6.0.7" + +"@web3-react/types@^6.0.7": + version "6.0.7" + resolved "https://registry.yarnpkg.com/@web3-react/types/-/types-6.0.7.tgz#34a6204224467eedc6123abaf55fbb6baeb2809f" + integrity sha512-ofGmfDhxmNT1/P/MgVa8IKSkCStFiyvXe+U5tyZurKdrtTDFU+wJ/LxClPDtFerWpczNFPUSrKcuhfPX1sI6+A== + +"@web3-react/walletconnect-connector@6.2.4": + version "6.2.4" + resolved "https://registry.yarnpkg.com/@web3-react/walletconnect-connector/-/walletconnect-connector-6.2.4.tgz#0a128699fc93ddac885935f4aeca32925f6285f0" + integrity sha512-IEVjCXrlcfVa6ggUBEyKtLRaLQuZGtT2lGuzOFtdbJJkN84u1++pzzeDrcsVhKAoS5wq33zyJT9baEbG1Aed8g== + dependencies: + "@walletconnect/web3-provider" "^1.5.0" + "@web3-react/abstract-connector" "^6.0.7" + "@web3-react/types" "^6.0.7" + tiny-invariant "^1.0.6" + +"@web3-react/walletlink-connector@6.2.5": + version "6.2.5" + resolved "https://registry.yarnpkg.com/@web3-react/walletlink-connector/-/walletlink-connector-6.2.5.tgz#103231432555496c73d07019a0ab0bb08c5ccfe8" + integrity sha512-8Wx+4TqMPZw5kGzraxRLbsLA9mUOYxLJk8QvNzuuFQ8/YpHhL58mQGnHx30KReXTJpMG4TZGE4yCLp3Bd+jVfQ== + dependencies: + "@web3-react/abstract-connector" "^6.0.7" + "@web3-react/types" "^6.0.7" + walletlink "^2.1.10" + +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== + dependencies: + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== + +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== + +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== + +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== + +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +"@yarnpkg/lockfile@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + +JSONStream@^1.0.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abab@^2.0.3, abab@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +abortcontroller-polyfill@^1.1.9: + version "1.7.3" + resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz#1b5b487bd6436b5b764fd52a612509702c3144b5" + integrity sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q== + +abstract-leveldown@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-3.0.0.tgz#5cb89f958a44f526779d740d1440e743e0c30a57" + integrity sha512-KUWx9UWGQD12zsmLNj64/pndaz4iJh/Pj7nopgkfDG6RlCcbMZvT6+9l7dchK4idog2Is8VdC/PvNbFuFmalIQ== + dependencies: + xtend "~4.0.0" + +abstract-leveldown@^2.4.1, abstract-leveldown@~2.7.1: + version "2.7.2" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz#87a44d7ebebc341d59665204834c8b7e0932cc93" + integrity sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w== + dependencies: + xtend "~4.0.0" + +abstract-leveldown@^5.0.0, abstract-leveldown@~5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-5.0.0.tgz#f7128e1f86ccabf7d2893077ce5d06d798e386c6" + integrity sha512-5mU5P1gXtsMIXg65/rsYGsi93+MlogXZ9FA8JnwKurHQg64bfXwGYVdVdijNTVNOlAsuIiOwHdvFFD5JqCJQ7A== + dependencies: + xtend "~4.0.0" + +abstract-leveldown@~2.6.0: + version "2.6.3" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz#1c5e8c6a5ef965ae8c35dfb3a8770c476b82c4b8" + integrity sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA== + dependencies: + xtend "~4.0.0" + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + +acorn-jsx@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn@^6.4.1: + version "6.4.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== + +acorn@^7.1.0, acorn@^7.1.1, acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +acorn@^8.2.4, acorn@^8.4.1: + version "8.6.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.6.0.tgz#e3692ba0eb1a0c83eaa4f37f5fa7368dd7142895" + integrity sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw== + +add-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" + integrity sha1-anmQQ3ynNtXhKI25K9MmbV9csqo= + +address@1.1.2, address@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" + integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== + +adjust-sourcemap-loader@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz#5ae12fb5b7b1c585e80bbb5a63ec163a1a45e61e" + integrity sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw== + dependencies: + loader-utils "^2.0.0" + regex-parser "^2.2.11" + +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0= + +aes-js@^3.1.1, aes-js@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.1.2.tgz#db9aabde85d5caabbfc0d4f2a4446960f627146a" + integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.1: + version "8.8.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.8.2.tgz#01b4fef2007a28bf75f0b7fc009f62679de4abbb" + integrity sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +alphanum-sort@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= + +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0, ansi-escapes@^4.3.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-html@0.0.7, ansi-html@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0, ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@^3.0.0, anymatch@^3.0.3, anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aproba@^1.0.3, aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +are-we-there-yet@~1.1.2: + version "1.1.7" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" + integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +aria-query@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" + integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== + dependencies: + "@babel/runtime" "^7.10.2" + "@babel/runtime-corejs3" "^7.10.2" + +arity-n@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/arity-n/-/arity-n-1.0.4.tgz#d9e76b11733e08569c0847ae7b39b2860b30b745" + integrity sha1-2edrEXM+CFacCEeuezmyhgswt0U= + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= + +array-includes@^3.1.3, array-includes@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9" + integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + get-intrinsic "^1.1.1" + is-string "^1.0.7" + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +array.prototype.flat@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz#07e0975d84bbc7c48cd1879d609e682598d33e13" + integrity sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + +array.prototype.flatmap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz#908dc82d8a406930fdf38598d51e7411d18d4446" + integrity sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.19.0" + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + +asap@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-eventemitter@^0.2.2: + version "0.2.4" + resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" + integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== + dependencies: + async "^2.4.0" + +async-foreach@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" + integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI= + +async-limiter@^1.0.0, async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async-mutex@^0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.2.6.tgz#0d7a3deb978bc2b984d5908a2038e1ae2e54ff40" + integrity sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw== + dependencies: + tslib "^2.0.0" + +async@2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" + integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg== + dependencies: + lodash "^4.17.11" + +async@^1.4.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + +async@^2.0.1, async@^2.1.2, async@^2.4.0, async@^2.5.0, async@^2.6.1, async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +autoprefixer@^9.6.1: + version "9.8.8" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.8.tgz#fd4bd4595385fa6f06599de749a4d5f7a474957a" + integrity sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA== + dependencies: + browserslist "^4.12.0" + caniuse-lite "^1.0.30001109" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + picocolors "^0.2.1" + postcss "^7.0.32" + postcss-value-parser "^4.1.0" + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + +axe-core@^4.3.5: + version "4.3.5" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.3.5.tgz#78d6911ba317a8262bfee292aeafcc1e04b49cc5" + integrity sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA== + +axios@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.1.tgz#ff3f0de2e7b5d180e757ad98000f1081b87bcea3" + integrity sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g== + dependencies: + follow-redirects "1.5.10" + is-buffer "^2.0.2" + +axios@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.23.0.tgz#b0fa5d0948a8d1d75e3d5635238b6c4625b05149" + integrity sha512-NmvAE4i0YAv5cKq8zlDoPd1VLKAqX5oLuZKs8xkJa4qi6RGn0uhCYFjWtHHC9EM/MwOwYWOs53W+V0aqEXq1sg== + dependencies: + follow-redirects "^1.14.4" + +axios@^0.24.0: + version "0.24.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.24.0.tgz#804e6fa1e4b9c5288501dd9dff56a7a0940d20d6" + integrity sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA== + dependencies: + follow-redirects "^1.14.4" + +axobject-query@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" + integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== + +babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@^6.0.14, babel-core@^6.26.0: + version "6.26.3" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" + integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.1" + debug "^2.6.9" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.8" + slash "^1.0.0" + source-map "^0.5.7" + +babel-eslint@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" + integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + eslint-visitor-keys "^1.0.0" + resolve "^1.12.0" + +babel-extract-comments@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz#0a2aedf81417ed391b85e18b4614e693a0351a21" + integrity sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ== + dependencies: + babylon "^6.18.0" + +babel-generator@^6.26.0: + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + +babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ= + dependencies: + babel-helper-explode-assignable-expression "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340= + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-define-map@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-explode-assignable-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo= + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk= + dependencies: + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-regex@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI= + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-replace-supers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo= + dependencies: + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-jest@^26.6.0, babel-jest@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" + integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== + dependencies: + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/babel__core" "^7.1.7" + babel-plugin-istanbul "^6.0.0" + babel-preset-jest "^26.6.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + slash "^3.0.0" + +babel-loader@8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" + integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== + dependencies: + find-cache-dir "^2.1.0" + loader-utils "^1.4.0" + mkdirp "^0.5.3" + pify "^4.0.1" + schema-utils "^2.6.5" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-check-es2015-constants@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-istanbul@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" + integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@types/babel__traverse" "^7.0.6" + +babel-plugin-macros@2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" + integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== + dependencies: + "@babel/runtime" "^7.7.2" + cosmiconfig "^6.0.0" + resolve "^1.12.0" + +babel-plugin-named-asset-import@^0.3.7: + version "0.3.7" + resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.7.tgz#156cd55d3f1228a5765774340937afc8398067dd" + integrity sha512-squySRkf+6JGnvjoUtDEjSREJEBirnXi9NqP6rjSYsylxQxqBTz+pkmf395i9E2zsvmYUaI40BHo6SqZUdydlw== + +babel-plugin-polyfill-corejs2@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz#407082d0d355ba565af24126fb6cb8e9115251fd" + integrity sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA== + dependencies: + "@babel/compat-data" "^7.13.11" + "@babel/helper-define-polyfill-provider" "^0.3.0" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz#0b571f4cf3d67f911512f5c04842a7b8e8263087" + integrity sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.0" + core-js-compat "^3.18.0" + +babel-plugin-polyfill-regenerator@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz#9ebbcd7186e1a33e21c5e20cae4e7983949533be" + integrity sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.0" + +babel-plugin-syntax-async-functions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= + +babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= + +babel-plugin-syntax-object-rest-spread@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= + +babel-plugin-syntax-trailing-function-commas@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= + +babel-plugin-transform-async-to-generator@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E= + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.23.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= + dependencies: + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-plugin-transform-es2015-classes@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= + dependencies: + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-computed-properties@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-destructuring@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-for-of@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ= + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.26.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" + integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" + +babel-plugin-transform-es2015-modules-systemjs@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM= + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-umd@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg= + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-object-super@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= + dependencies: + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-shorthand-properties@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-sticky-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-exponentiation-operator@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-object-rest-spread@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" + integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY= + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.26.0" + +babel-plugin-transform-react-remove-prop-types@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" + integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== + +babel-plugin-transform-regenerator@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= + dependencies: + regenerator-transform "^0.10.0" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-env@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" + integrity sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg== + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-to-generator "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.23.0" + babel-plugin-transform-es2015-classes "^6.23.0" + babel-plugin-transform-es2015-computed-properties "^6.22.0" + babel-plugin-transform-es2015-destructuring "^6.23.0" + babel-plugin-transform-es2015-duplicate-keys "^6.22.0" + babel-plugin-transform-es2015-for-of "^6.23.0" + babel-plugin-transform-es2015-function-name "^6.22.0" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.22.0" + babel-plugin-transform-es2015-modules-commonjs "^6.23.0" + babel-plugin-transform-es2015-modules-systemjs "^6.23.0" + babel-plugin-transform-es2015-modules-umd "^6.23.0" + babel-plugin-transform-es2015-object-super "^6.22.0" + babel-plugin-transform-es2015-parameters "^6.23.0" + babel-plugin-transform-es2015-shorthand-properties "^6.22.0" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.22.0" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.23.0" + babel-plugin-transform-es2015-unicode-regex "^6.22.0" + babel-plugin-transform-exponentiation-operator "^6.22.0" + babel-plugin-transform-regenerator "^6.22.0" + browserslist "^3.2.6" + invariant "^2.2.2" + semver "^5.3.0" + +babel-preset-jest@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" + integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== + dependencies: + babel-plugin-jest-hoist "^26.6.2" + babel-preset-current-node-syntax "^1.0.0" + +babel-preset-react-app@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-10.0.0.tgz#689b60edc705f8a70ce87f47ab0e560a317d7045" + integrity sha512-itL2z8v16khpuKutx5IH8UdCdSTuzrOhRFTEdIhveZ2i1iBKDrVE0ATa4sFVy+02GLucZNVBWtoarXBy0Msdpg== + dependencies: + "@babel/core" "7.12.3" + "@babel/plugin-proposal-class-properties" "7.12.1" + "@babel/plugin-proposal-decorators" "7.12.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "7.12.1" + "@babel/plugin-proposal-numeric-separator" "7.12.1" + "@babel/plugin-proposal-optional-chaining" "7.12.1" + "@babel/plugin-transform-flow-strip-types" "7.12.1" + "@babel/plugin-transform-react-display-name" "7.12.1" + "@babel/plugin-transform-runtime" "7.12.1" + "@babel/preset-env" "7.12.1" + "@babel/preset-react" "7.12.1" + "@babel/preset-typescript" "7.12.1" + "@babel/runtime" "7.12.1" + babel-plugin-macros "2.8.0" + babel-plugin-transform-react-remove-prop-types "0.4.24" + +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.24.1, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babelify@^7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/babelify/-/babelify-7.3.0.tgz#aa56aede7067fd7bd549666ee16dc285087e88e5" + integrity sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU= + dependencies: + babel-core "^6.0.14" + object-assign "^4.0.0" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + +backoff@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/backoff/-/backoff-2.5.0.tgz#f616eda9d3e4b66b8ca7fca79f695722c5f8e26f" + integrity sha1-9hbtqdPktmuMp/ynn2lXIsX44m8= + dependencies: + precond "0.2" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.2, base-x@^3.0.8: + version "3.0.9" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" + integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + dependencies: + safe-buffer "^5.0.1" + +base64-js@^1.0.2, base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +base64url@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/base64url/-/base64url-3.0.1.tgz#6399d572e2bc3f90a9a8b22d5dbb0a32d33f788d" + integrity sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +bfj@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/bfj/-/bfj-7.0.2.tgz#1988ce76f3add9ac2913fd8ba47aad9e651bfbb2" + integrity sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw== + dependencies: + bluebird "^3.5.5" + check-types "^11.1.1" + hoopy "^0.1.4" + tryer "^1.0.1" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +bignumber.js@7.2.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f" + integrity sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ== + +bignumber.js@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5" + integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA== + +bignumber.js@~8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-8.0.2.tgz#d8c4e1874359573b1ef03011a2d861214aeef137" + integrity sha512-EiuvFrnbv0jFixEQ9f58jo7X0qI2lNGIr/MxntmVzQc5JUweDSh8y8hbTCAomFtqwUPIOWcLXP0VEOSZTG7FFw== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bind-decorator@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/bind-decorator/-/bind-decorator-1.0.11.tgz#e41bc06a1f65dd9cec476c91c5daf3978488252f" + integrity sha1-5BvAah9l3ZzsR2yRxdrzl4SIJS8= + +bindings@^1.2.1, bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bip39@2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/bip39/-/bip39-2.5.0.tgz#51cbd5179460504a63ea3c000db3f787ca051235" + integrity sha512-xwIx/8JKoT2+IPJpFEfXoWdYwP7UVAoUxxLNfGCfVowaJE7yg1Y5B1BVPqlUNsBq5/nGwmFkwRJ8xDW4sX8OdA== + dependencies: + create-hash "^1.1.0" + pbkdf2 "^3.0.9" + randombytes "^2.0.1" + safe-buffer "^5.0.1" + unorm "^1.3.3" + +bip39@^2.5.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/bip39/-/bip39-2.6.0.tgz#9e3a720b42ec8b3fbe4038f1e445317b6a99321c" + integrity sha512-RrnQRG2EgEoqO24ea+Q/fftuPUZLmrEM3qNhhGsA3PbaXaCW791LTzPuVyx/VprXQcTbPJ3K3UeTna8ZnVl2sg== + dependencies: + create-hash "^1.1.0" + pbkdf2 "^3.0.9" + randombytes "^2.0.1" + safe-buffer "^5.0.1" + unorm "^1.3.3" + +bip66@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/bip66/-/bip66-1.1.5.tgz#01fa8748785ca70955d5011217d1b3139969ca22" + integrity sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI= + dependencies: + safe-buffer "^5.0.1" + +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +blakejs@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.1.tgz#bf313053978b2cd4c444a48795710be05c785702" + integrity sha512-bLG6PHOCZJKNshTjGRBvET0vTciwQE6zFKOKKXPDJfwFBd4Ac0yBfPZqcGvGJap50l7ktvlpFqc2jGVaUgbJgg== + +bluebird@^3.5.0, bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@4.11.6: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + integrity sha1-UzRK2xRhehP26N0s4okF0cC6MhU= + +bn.js@4.11.8: + version "4.11.8" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.10.0, bn.js@^4.11.0, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9, bn.js@^4.8.0: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" + integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== + +body-parser@1.19.0, body-parser@^1.16.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +bowser@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" + integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.1, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1, brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + +browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.0.6, browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== + dependencies: + bn.js "^5.0.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@4.14.2: + version "4.14.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.2.tgz#1b3cec458a1ba87588cc5e9be62f19b6d48813ce" + integrity sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw== + dependencies: + caniuse-lite "^1.0.30001125" + electron-to-chromium "^1.3.564" + escalade "^3.0.2" + node-releases "^1.1.61" + +browserslist@^3.2.6: + version "3.2.8" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" + integrity sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ== + dependencies: + caniuse-lite "^1.0.30000844" + electron-to-chromium "^1.3.47" + +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.17.5, browserslist@^4.18.1, browserslist@^4.6.2, browserslist@^4.6.4: + version "4.18.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.18.1.tgz#60d3920f25b6860eb917c6c7b185576f4d8b017f" + integrity sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ== + dependencies: + caniuse-lite "^1.0.30001280" + electron-to-chromium "^1.3.896" + escalade "^3.1.1" + node-releases "^2.0.1" + picocolors "^1.0.0" + +bs58@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-2.0.1.tgz#55908d58f1982aba2008fa1bed8f91998a29bf8d" + integrity sha1-VZCNWPGYKrogCPob7Y+RmYopv40= + +bs58@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo= + dependencies: + base-x "^3.0.2" + +bs58check@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +btoa@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73" + integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g== + +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= + +buffer-from@^1.0.0, buffer-from@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + +buffer-to-arraybuffer@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" + integrity sha1-YGSkD6dutDxyOrqe+PbhIW0QURo= + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer-xor@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-2.0.2.tgz#34f7c64f04c777a1f8aac5e661273bb9dd320289" + integrity sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ== + dependencies: + safe-buffer "^5.1.1" + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +buffer@^5.0.5, buffer@^5.2.1, buffer@^5.4.3, buffer@^5.5.0, buffer@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +bufferutil@^4.0.1: + version "4.0.5" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.5.tgz#da9ea8166911cc276bf677b8aed2d02d31f59028" + integrity sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A== + dependencies: + node-gyp-build "^4.3.0" + +builtin-modules@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" + integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +bytewise-core@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/bytewise-core/-/bytewise-core-1.2.3.tgz#3fb410c7e91558eb1ab22a82834577aa6bd61d42" + integrity sha1-P7QQx+kVWOsasiqCg0V3qmvWHUI= + dependencies: + typewise-core "^1.2" + +bytewise@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/bytewise/-/bytewise-1.1.0.tgz#1d13cbff717ae7158094aa881b35d081b387253e" + integrity sha1-HRPL/3F65xWAlKqIGzXQgbOHJT4= + dependencies: + bytewise-core "^1.2.2" + typewise "^1.0.3" + +cacache@^12.0.2: + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cacache@^15.0.5: + version "15.3.0" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" + integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== + dependencies: + "@npmcli/fs" "^1.0.0" + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.0.2" + unique-filename "^1.1.1" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +cachedown@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cachedown/-/cachedown-1.0.0.tgz#d43f036e4510696b31246d7db31ebf0f7ac32d15" + integrity sha1-1D8DbkUQaWsxJG19sx6/D3rDLRU= + dependencies: + abstract-leveldown "^2.4.1" + lru-cache "^3.2.0" + +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + +camelcase@5.3.1, camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.0.0, camelcase@^6.1.0, camelcase@^6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.1.tgz#250fd350cfd555d0d2160b1d51510eaf8326e86e" + integrity sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001280: + version "1.0.30001283" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001283.tgz#8573685bdae4d733ef18f78d44ba0ca5fe9e896b" + integrity sha512-9RoKo841j1GQFSJz/nCXOj0sD7tHBtlowjYlrqIUS812x9/emfBLBt6IyMz1zIaYc/eRL8Cs6HPUVi2Hzq4sIg== + +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + dependencies: + rsvp "^4.8.4" + +case-sensitive-paths-webpack-plugin@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz#23ac613cc9a856e4f88ff8bb73bbb5e989825cf7" + integrity sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@2.4.2, chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +check-types@^11.1.1: + version "11.1.2" + resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.1.2.tgz#86a7c12bf5539f6324eb0e70ca8896c0e38f3e2f" + integrity sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ== + +checkpoint-store@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/checkpoint-store/-/checkpoint-store-1.1.0.tgz#04e4cb516b91433893581e6d4601a78e9552ea06" + integrity sha1-BOTLUWuRQziTWB5tRgGnjpVS6gY= + dependencies: + functional-red-black-tree "^1.0.1" + +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chokidar@^3.4.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" + integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chownr@^1.1.1, chownr@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cids@^0.7.1: + version "0.7.5" + resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2" + integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA== + dependencies: + buffer "^5.5.0" + class-is "^1.1.0" + multibase "~0.6.0" + multicodec "^1.0.0" + multihashes "~0.4.15" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +cjs-module-lexer@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" + integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== + +class-is@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" + integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-css@^4.2.3: + version "4.2.4" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.4.tgz#733bf46eba4e607c6891ea57c24a989356831178" + integrity sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A== + dependencies: + source-map "~0.6.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-truncate@2.1.0, cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + +clone@2.1.2, clone@^2.0.0, clone@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + +clsx@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" + integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +coinstring@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/coinstring/-/coinstring-2.3.0.tgz#cdb63363a961502404a25afb82c2e26d5ff627a4" + integrity sha1-zbYzY6lhUCQEolr7gsLibV/2J6Q= + dependencies: + bs58 "^2.0.1" + create-hash "^1.1.1" + +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0, color-convert@^1.9.3: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.6.0: + version "1.8.2" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.8.2.tgz#08bd49fa5f3889c27b0c670052ed746dd7a671de" + integrity sha512-w5ZkKRdLsc5NOYsmnpS2DpyRW71npwZGwbRpLrJTuqjfTs2Bhrba7UiV59IX9siBlCPl2pne5NtiwnVWUzvYFA== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== + dependencies: + color-convert "^1.9.3" + color-string "^1.6.0" + +colorette@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" + integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== + +colorette@^2.0.16: + version "2.0.16" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" + integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== + +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.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== + +commander@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commander@^8.2.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +common-tags@^1.8.0: + version "1.8.2" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" + integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +compare-func@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== + dependencies: + array-ify "^1.0.0" + dot-prop "^5.1.0" + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +compose-function@3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/compose-function/-/compose-function-3.0.3.tgz#9ed675f13cc54501d30950a486ff6a7ba3ab185f" + integrity sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8= + dependencies: + arity-n "^1.0.4" + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0, concat-stream@^1.5.1: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +concat-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" + integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" + +confusing-browser-globals@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz#30d1e7f3d1b882b25ec4933d1d1adac353d20a59" + integrity sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA== + +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-hash@^2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/content-hash/-/content-hash-2.5.2.tgz#bbc2655e7c21f14fd3bfc7b7d4bfe6e454c9e211" + integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== + dependencies: + cids "^0.7.1" + multicodec "^0.5.5" + multihashes "^0.4.15" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +conventional-changelog-angular@^5.0.12: + version "5.0.13" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c" + integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== + dependencies: + compare-func "^2.0.0" + q "^1.5.1" + +conventional-changelog-atom@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz#a759ec61c22d1c1196925fca88fe3ae89fd7d8de" + integrity sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw== + dependencies: + q "^1.5.1" + +conventional-changelog-codemirror@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz#398e9530f08ce34ec4640af98eeaf3022eb1f7dc" + integrity sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw== + dependencies: + q "^1.5.1" + +conventional-changelog-config-spec@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-config-spec/-/conventional-changelog-config-spec-2.1.0.tgz#874a635287ef8b581fd8558532bf655d4fb59f2d" + integrity sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ== + +conventional-changelog-conventionalcommits@4.6.1, conventional-changelog-conventionalcommits@^4.5.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.1.tgz#f4c0921937050674e578dc7875f908351ccf4014" + integrity sha512-lzWJpPZhbM1R0PIzkwzGBCnAkH5RKJzJfFQZcl/D+2lsJxAwGnDKBqn/F4C1RD31GJNn8NuKWQzAZDAVXPp2Mw== + dependencies: + compare-func "^2.0.0" + lodash "^4.17.15" + q "^1.5.1" + +conventional-changelog-core@^4.2.1: + version "4.2.4" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz#e50d047e8ebacf63fac3dc67bf918177001e1e9f" + integrity sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg== + dependencies: + add-stream "^1.0.0" + conventional-changelog-writer "^5.0.0" + conventional-commits-parser "^3.2.0" + dateformat "^3.0.0" + get-pkg-repo "^4.0.0" + git-raw-commits "^2.0.8" + git-remote-origin-url "^2.0.0" + git-semver-tags "^4.1.1" + lodash "^4.17.15" + normalize-package-data "^3.0.0" + q "^1.5.1" + read-pkg "^3.0.0" + read-pkg-up "^3.0.0" + through2 "^4.0.0" + +conventional-changelog-ember@^2.0.9: + version "2.0.9" + resolved "https://registry.yarnpkg.com/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz#619b37ec708be9e74a220f4dcf79212ae1c92962" + integrity sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A== + dependencies: + q "^1.5.1" + +conventional-changelog-eslint@^3.0.9: + version "3.0.9" + resolved "https://registry.yarnpkg.com/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz#689bd0a470e02f7baafe21a495880deea18b7cdb" + integrity sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA== + dependencies: + q "^1.5.1" + +conventional-changelog-express@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz#420c9d92a347b72a91544750bffa9387665a6ee8" + integrity sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ== + dependencies: + q "^1.5.1" + +conventional-changelog-jquery@^3.0.11: + version "3.0.11" + resolved "https://registry.yarnpkg.com/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz#d142207400f51c9e5bb588596598e24bba8994bf" + integrity sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw== + dependencies: + q "^1.5.1" + +conventional-changelog-jshint@^2.0.9: + version "2.0.9" + resolved "https://registry.yarnpkg.com/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz#f2d7f23e6acd4927a238555d92c09b50fe3852ff" + integrity sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA== + dependencies: + compare-func "^2.0.0" + q "^1.5.1" + +conventional-changelog-preset-loader@^2.3.4: + version "2.3.4" + resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c" + integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== + +conventional-changelog-writer@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.0.tgz#c4042f3f1542f2f41d7d2e0d6cad23aba8df8eec" + integrity sha512-HnDh9QHLNWfL6E1uHz6krZEQOgm8hN7z/m7tT16xwd802fwgMN0Wqd7AQYVkhpsjDUx/99oo+nGgvKF657XP5g== + dependencies: + conventional-commits-filter "^2.0.7" + dateformat "^3.0.0" + handlebars "^4.7.6" + json-stringify-safe "^5.0.1" + lodash "^4.17.15" + meow "^8.0.0" + semver "^6.0.0" + split "^1.0.0" + through2 "^4.0.0" + +conventional-changelog@3.1.24: + version "3.1.24" + resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-3.1.24.tgz#ebd180b0fd1b2e1f0095c4b04fd088698348a464" + integrity sha512-ed6k8PO00UVvhExYohroVPXcOJ/K1N0/drJHx/faTH37OIZthlecuLIRX/T6uOp682CAoVoFpu+sSEaeuH6Asg== + dependencies: + conventional-changelog-angular "^5.0.12" + conventional-changelog-atom "^2.0.8" + conventional-changelog-codemirror "^2.0.8" + conventional-changelog-conventionalcommits "^4.5.0" + conventional-changelog-core "^4.2.1" + conventional-changelog-ember "^2.0.9" + conventional-changelog-eslint "^3.0.9" + conventional-changelog-express "^2.0.6" + conventional-changelog-jquery "^3.0.11" + conventional-changelog-jshint "^2.0.9" + conventional-changelog-preset-loader "^2.3.4" + +conventional-commits-filter@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" + integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== + dependencies: + lodash.ismatch "^4.4.0" + modify-values "^1.0.0" + +conventional-commits-parser@^3.2.0: + version "3.2.3" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.3.tgz#fc43704698239451e3ef35fd1d8ed644f46bd86e" + integrity sha512-YyRDR7On9H07ICFpRm/igcdjIqebXbvf4Cff+Pf0BrBys1i1EOzx9iFXNlAbdrLAR8jf7bkUYkDAr8pEy0q4Pw== + dependencies: + JSONStream "^1.0.4" + is-text-path "^1.0.1" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" + +conventional-recommended-bump@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz#cfa623285d1de554012f2ffde70d9c8a22231f55" + integrity sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw== + dependencies: + concat-stream "^2.0.0" + conventional-changelog-preset-loader "^2.3.4" + conventional-commits-filter "^2.0.7" + conventional-commits-parser "^3.2.0" + git-raw-commits "^2.0.8" + git-semver-tags "^4.1.1" + meow "^8.0.0" + q "^1.5.1" + +convert-source-map@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +convert-source-map@^0.3.3: + version "0.3.5" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190" + integrity sha1-8dgClQr33SYxof6+BZZVDIarMZA= + +convert-source-map@^1.4.0, convert-source-map@^1.5.1, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +cookiejar@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc" + integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +copy-to-clipboard@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz#115aa1a9998ffab6196f93076ad6da3b913662ae" + integrity sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw== + dependencies: + toggle-selection "^1.0.6" + +core-js-compat@^3.18.0, core-js-compat@^3.19.1, core-js-compat@^3.6.2: + version "3.19.2" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.19.2.tgz#18066a3404a302433cb0aa8be82dd3d75c76e5c4" + integrity sha512-ObBY1W5vx/LFFMaL1P5Udo4Npib6fu+cMokeziWkA8Tns4FcDemKF5j9JvaI5JhdkW8EQJQGJN1EcrzmEwuAqQ== + dependencies: + browserslist "^4.18.1" + semver "7.0.0" + +core-js-pure@^3.0.1, core-js-pure@^3.19.0: + version "3.19.2" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.19.2.tgz#26b5bfb503178cff6e3e115bc2ba6c6419383680" + integrity sha512-5LkcgQEy8pFeVnd/zomkUBSwnmIxuF1C8E9KrMAbOc8f34IBT9RGvTYeNDdp1PnvMJrrVhvk1hg/yVV5h/znlg== + +core-js@^2.4.0, core-js@^2.5.0: + version "2.6.12" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== + +core-js@^3.6.5: + version "3.19.2" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.19.2.tgz#ae216d7f4f7e924d9a2e3ff1e4b1940220f9157b" + integrity sha512-ciYCResnLIATSsXuXnIOH4CbdfgV+H1Ltg16hJFN7/v6OxqnFr/IFGeLacaZ+fHLAm0TBbXwNK9/DNBzBUrO/g== + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cors@^2.8.1: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +cosmiconfig@^5.0.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + +cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" + integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +crc-32@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208" + integrity sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA== + dependencies: + exit-on-epipe "~1.0.1" + printj "~1.1.0" + +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.1, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-fetch@^2.1.0, cross-fetch@^2.1.1: + version "2.2.5" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-2.2.5.tgz#afaf5729f3b6c78d89c9296115c9f142541a5705" + integrity sha512-xqYAhQb4NhCJSRym03dwxpP1bYXpK3y7UN83Bo2WFi3x1Zmzn0SL/6xGoPr+gpt4WmNrgCCX3HPysvOwFOW36w== + dependencies: + node-fetch "2.6.1" + whatwg-fetch "2.0.4" + +cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-browserify@3.12.0, crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= + +css-blank-pseudo@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz#dfdefd3254bf8a82027993674ccf35483bfcb3c5" + integrity sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w== + dependencies: + postcss "^7.0.5" + +css-color-names@0.0.4, css-color-names@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + +css-declaration-sorter@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" + integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== + dependencies: + postcss "^7.0.1" + timsort "^0.3.0" + +css-has-pseudo@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz#3c642ab34ca242c59c41a125df9105841f6966ee" + integrity sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^5.0.0-rc.4" + +css-loader@4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-4.3.0.tgz#c888af64b2a5b2e85462c72c0f4a85c7e2e0821e" + integrity sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg== + dependencies: + camelcase "^6.0.0" + cssesc "^3.0.0" + icss-utils "^4.1.1" + loader-utils "^2.0.0" + postcss "^7.0.32" + postcss-modules-extract-imports "^2.0.0" + postcss-modules-local-by-default "^3.0.3" + postcss-modules-scope "^2.2.0" + postcss-modules-values "^3.0.0" + postcss-value-parser "^4.1.0" + schema-utils "^2.7.1" + semver "^7.3.2" + +css-prefers-color-scheme@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz#6f830a2714199d4f0d0d0bb8a27916ed65cff1f4" + integrity sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg== + dependencies: + postcss "^7.0.5" + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-select@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.1.3.tgz#a70440f70317f2669118ad74ff105e65849c7067" + integrity sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA== + dependencies: + boolbase "^1.0.0" + css-what "^5.0.0" + domhandler "^4.2.0" + domutils "^2.6.0" + nth-check "^2.0.0" + +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +css-tree@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-what@^3.2.1: + version "3.4.2" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" + integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== + +css-what@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.1.0.tgz#3f7b707aadf633baf62c2ceb8579b545bb40f7fe" + integrity sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw== + +css@^2.0.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" + integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== + dependencies: + inherits "^2.0.3" + source-map "^0.6.1" + source-map-resolve "^0.5.2" + urix "^0.1.0" + +cssdb@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz#3bf2f2a68c10f5c6a08abd92378331ee803cddb0" + integrity sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ== + +cssesc@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" + integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-default@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz#920622b1fc1e95a34e8838203f1397a504f2d3ff" + integrity sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ== + dependencies: + css-declaration-sorter "^4.0.1" + cssnano-util-raw-cache "^4.0.1" + postcss "^7.0.0" + postcss-calc "^7.0.1" + postcss-colormin "^4.0.3" + postcss-convert-values "^4.0.1" + postcss-discard-comments "^4.0.2" + postcss-discard-duplicates "^4.0.2" + postcss-discard-empty "^4.0.1" + postcss-discard-overridden "^4.0.1" + postcss-merge-longhand "^4.0.11" + postcss-merge-rules "^4.0.3" + postcss-minify-font-values "^4.0.2" + postcss-minify-gradients "^4.0.2" + postcss-minify-params "^4.0.2" + postcss-minify-selectors "^4.0.2" + postcss-normalize-charset "^4.0.1" + postcss-normalize-display-values "^4.0.2" + postcss-normalize-positions "^4.0.2" + postcss-normalize-repeat-style "^4.0.2" + postcss-normalize-string "^4.0.2" + postcss-normalize-timing-functions "^4.0.2" + postcss-normalize-unicode "^4.0.1" + postcss-normalize-url "^4.0.1" + postcss-normalize-whitespace "^4.0.2" + postcss-ordered-values "^4.1.2" + postcss-reduce-initial "^4.0.3" + postcss-reduce-transforms "^4.0.2" + postcss-svgo "^4.0.3" + postcss-unique-selectors "^4.0.1" + +cssnano-util-get-arguments@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" + integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= + +cssnano-util-get-match@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" + integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= + +cssnano-util-raw-cache@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" + integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== + dependencies: + postcss "^7.0.0" + +cssnano-util-same-parent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" + integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== + +cssnano@^4.1.10: + version "4.1.11" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.11.tgz#c7b5f5b81da269cb1fd982cb960c1200910c9a99" + integrity sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g== + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.8" + is-resolvable "^1.0.0" + postcss "^7.0.0" + +csso@^4.0.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + dependencies: + css-tree "^1.1.2" + +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + +csstype@^3.0.2: + version "3.0.10" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.10.tgz#2ad3a7bed70f35b965707c092e5f30b327c290e5" + integrity sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA== + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +damerau-levenshtein@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz#64368003512a1a6992593741a09a9d31a836f55d" + integrity sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw== + +dargs@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" + integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + +dateformat@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: + version "4.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== + dependencies: + ms "2.1.2" + +debug@=3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@^3.1.1, debug@^3.2.6, debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +decamelize-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decimal.js@^10.2.1: + version "10.3.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" + integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +decompress-response@^3.2.0, decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + +decompress-response@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" + integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== + dependencies: + mimic-response "^2.0.0" + +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + +deep-equal@^1.0.1, deep-equal@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@^0.1.3, deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +deferred-leveldown@~1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz#3acd2e0b75d1669924bc0a4b642851131173e1eb" + integrity sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA== + dependencies: + abstract-leveldown "~2.6.0" + +deferred-leveldown@~4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-4.0.2.tgz#0b0570087827bf480a23494b398f04c128c19a20" + integrity sha512-5fMC8ek8alH16QiV0lTCis610D1Zt1+LA4MS4d63JgS32lrCjTFDUFz2ao09/j2I4Bqb5jL4FZYwu7Jz0XO1ww== + dependencies: + abstract-leveldown "~5.0.0" + inherits "^2.0.3" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +defined@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= + +del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-browser@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/detect-browser/-/detect-browser-5.2.0.tgz#c9cd5afa96a6a19fda0bbe9e9be48a6b6e1e9c97" + integrity sha512-tr7XntDAu50BVENgQfajMLzacmSe34D+qZc4zjnniz0ZVuw/TZcLcyxHQjYpJTM36sGEkZZlYLnIM1hH7alTMA== + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= + dependencies: + repeating "^2.0.0" + +detect-indent@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" + integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== + +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + +detect-newline@^3.0.0, detect-newline@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +detect-node@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127" + integrity sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc= + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +detect-port-alt@1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" + integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== + dependencies: + address "^1.0.1" + debug "^2.6.0" + +diff-sequences@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" + integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dijkstrajs@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.2.tgz#2e48c0d3b825462afe75ab4ad5e829c8ece36257" + integrity sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.4" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f" + integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-converter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +dom-serializer@^1.0.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" + integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +dom-walk@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +domelementtype@1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" + integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== + +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + +domhandler@^4.0.0, domhandler@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.0.tgz#16c658c626cf966967e306f966b431f77d4a5626" + integrity sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g== + dependencies: + domelementtype "^2.2.0" + +domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^2.5.2, domutils@^2.6.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dot-prop@^5.1.0, dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +dotenv-expand@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" + integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== + +dotenv@8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" + integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== + +dotgitignore@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/dotgitignore/-/dotgitignore-2.1.0.tgz#a4b15a4e4ef3cf383598aaf1dfa4a04bcc089b7b" + integrity sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA== + dependencies: + find-up "^3.0.0" + minimatch "^3.0.4" + +dotignore@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dotignore/-/dotignore-0.1.2.tgz#f942f2200d28c3a76fbdd6f0ee9f3257c8a2e905" + integrity sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw== + dependencies: + minimatch "^3.0.4" + +drbg.js@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/drbg.js/-/drbg.js-1.0.1.tgz#3e36b6c42b37043823cdbc332d58f31e2445480b" + integrity sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs= + dependencies: + browserify-aes "^1.0.6" + create-hash "^1.1.2" + create-hmac "^1.1.4" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + +duplexer@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +ejs@^2.6.1: + version "2.7.4" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" + integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== + +electron-to-chromium@^1.3.47, electron-to-chromium@^1.3.564, electron-to-chromium@^1.3.896: + version "1.4.5" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.5.tgz#912e8fd1645edee2f0f212558f40916eb538b1f9" + integrity sha512-YKaB+t8ul5crdh6OeqT2qXdxJGI0fAYb6/X8pDIyye+c3a7ndOCk5gVeKX+ABwivCGNS56vOAif3TN0qJMpEHw== + +elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emittery@^0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" + integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +encoding-down@5.0.4, encoding-down@~5.0.0: + version "5.0.4" + resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-5.0.4.tgz#1e477da8e9e9d0f7c8293d320044f8b2cd8e9614" + integrity sha512-8CIZLDcSKxgzT+zX8ZVfgNbu8Md2wq/iqa1Y7zyVR18QBEAc0Nmzuvj/N5ykSKpfGzjM8qxbaFntLPwnVoUhZw== + dependencies: + abstract-leveldown "^5.0.0" + inherits "^2.0.3" + level-codec "^9.0.0" + level-errors "^2.0.0" + xtend "^4.0.1" + +encoding@^0.1.11: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1, end-of-stream@^1.4.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^4.3.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" + integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +enquirer@^2.3.5, enquirer@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +errno@^0.1.3, errno@~0.1.1, errno@~0.1.7: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +error-stack-parser@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8" + integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ== + dependencies: + stackframe "^1.1.1" + +es-abstract@^1.17.2, es-abstract@^1.18.5, es-abstract@^1.19.0, es-abstract@^1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" + integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-symbols "^1.0.2" + internal-slot "^1.0.3" + is-callable "^1.2.4" + is-negative-zero "^2.0.1" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.1" + is-string "^1.0.7" + is-weakref "^1.0.1" + object-inspect "^1.11.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es5-ext@^0.10.35, es5-ext@^0.10.50: + version "0.10.53" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.3" + next-tick "~1.0.0" + +es6-iterator@2.0.3, es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-promise@^4.2.8: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-symbol@^3.1.1, es6-symbol@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +escalade@^3.0.2, escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@2.0.0, escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +eslint-config-prettier@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" + integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== + +eslint-config-react-app@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-6.0.0.tgz#ccff9fc8e36b322902844cbd79197982be355a0e" + integrity sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A== + dependencies: + confusing-browser-globals "^1.0.10" + +eslint-import-resolver-node@^0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" + integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== + dependencies: + debug "^3.2.7" + resolve "^1.20.0" + +eslint-module-utils@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz#b435001c9f8dd4ab7f6d0efcae4b9696d4c24b7c" + integrity sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ== + dependencies: + debug "^3.2.7" + find-up "^2.1.0" + pkg-dir "^2.0.0" + +eslint-plugin-flowtype@^5.2.0: + version "5.10.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.10.0.tgz#7764cc63940f215bf3f0bd2d9a1293b2b9b2b4bb" + integrity sha512-vcz32f+7TP+kvTUyMXZmCnNujBQZDNmcqPImw8b9PZ+16w1Qdm6ryRuYZYVaG9xRqqmAPr2Cs9FAX5gN+x/bjw== + dependencies: + lodash "^4.17.15" + string-natural-compare "^3.0.1" + +eslint-plugin-hooks@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-hooks/-/eslint-plugin-hooks-0.4.1.tgz#1426c0061e0b8376a0759393678d17862b22f333" + integrity sha512-nAJkh8xnkM+jGmHc7DysJeUuvYLwbNJ30MezLXeDxNp5vynYQCq1EnYhKjZdwUJx5AUvHwUeO1fu9K4TPMDbAg== + dependencies: + requireindex "~1.2.0" + +eslint-plugin-import@^2.22.1: + version "2.25.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.3.tgz#a554b5f66e08fb4f6dc99221866e57cfff824766" + integrity sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg== + dependencies: + array-includes "^3.1.4" + array.prototype.flat "^1.2.5" + debug "^2.6.9" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.6" + eslint-module-utils "^2.7.1" + has "^1.0.3" + is-core-module "^2.8.0" + is-glob "^4.0.3" + minimatch "^3.0.4" + object.values "^1.1.5" + resolve "^1.20.0" + tsconfig-paths "^3.11.0" + +eslint-plugin-jest@^24.1.0: + version "24.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-24.7.0.tgz#206ac0833841e59e375170b15f8d0955219c4889" + integrity sha512-wUxdF2bAZiYSKBclsUMrYHH6WxiBreNjyDxbRv345TIvPeoCEgPNEn3Sa+ZrSqsf1Dl9SqqSREXMHExlMMu1DA== + dependencies: + "@typescript-eslint/experimental-utils" "^4.0.1" + +eslint-plugin-jsx-a11y@^6.3.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz#cdbf2df901040ca140b6ec14715c988889c2a6d8" + integrity sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g== + dependencies: + "@babel/runtime" "^7.16.3" + aria-query "^4.2.2" + array-includes "^3.1.4" + ast-types-flow "^0.0.7" + axe-core "^4.3.5" + axobject-query "^2.2.0" + damerau-levenshtein "^1.0.7" + emoji-regex "^9.2.2" + has "^1.0.3" + jsx-ast-utils "^3.2.1" + language-tags "^1.0.5" + minimatch "^3.0.4" + +eslint-plugin-prettier@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz#e9ddb200efb6f3d05ffe83b1665a716af4a387e5" + integrity sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-plugin-react-hooks@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz#318dbf312e06fab1c835a4abef00121751ac1172" + integrity sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA== + +eslint-plugin-react@^7.21.5: + version "7.27.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.27.1.tgz#469202442506616f77a854d91babaae1ec174b45" + integrity sha512-meyunDjMMYeWr/4EBLTV1op3iSG3mjT/pz5gti38UzfM4OPpNc2m0t2xvKCOMU5D6FSdd34BIMFOvQbW+i8GAA== + dependencies: + array-includes "^3.1.4" + array.prototype.flatmap "^1.2.5" + doctrine "^2.1.0" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.0.4" + object.entries "^1.1.5" + object.fromentries "^2.0.5" + object.hasown "^1.1.0" + object.values "^1.1.5" + prop-types "^15.7.2" + resolve "^2.0.0-next.3" + semver "^6.3.0" + string.prototype.matchall "^4.0.6" + +eslint-plugin-testing-library@^3.9.2: + version "3.10.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-3.10.2.tgz#609ec2b0369da7cf2e6d9edff5da153cc31d87bd" + integrity sha512-WAmOCt7EbF1XM8XfbCKAEzAPnShkNSwcIsAD2jHdsMUT9mZJPjLCG7pMzbcC8kK366NOuGip8HKLDC+Xk4yIdA== + dependencies: + "@typescript-eslint/experimental-utils" "^3.10.1" + +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^5.0.0, eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^2.0.0, eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-webpack-plugin@^2.5.2: + version "2.6.0" + resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-2.6.0.tgz#3bd4ada4e539cb1f6687d2f619073dbb509361cd" + integrity sha512-V+LPY/T3kur5QO3u+1s34VDTcRxjXWPUGM4hlmTb5DwVD0OQz631yGTxJZf4SpAqAjdbBVe978S8BJeHpAdOhQ== + dependencies: + "@types/eslint" "^7.28.2" + arrify "^2.0.1" + jest-worker "^27.3.1" + micromatch "^4.0.4" + normalize-path "^3.0.0" + schema-utils "^3.1.1" + +eslint@^7.11.0: + version "7.32.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" + integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== + dependencies: + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.3" + "@humanwhocodes/config-array" "^0.5.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + escape-string-regexp "^4.0.0" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.1.2" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.9" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + +esprima@^4.0.0, esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.1.0, esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estree-walker@^0.6.0, estree-walker@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" + integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== + +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eth-block-tracker@4.4.3, eth-block-tracker@^4.2.0, eth-block-tracker@^4.4.2: + version "4.4.3" + resolved "https://registry.yarnpkg.com/eth-block-tracker/-/eth-block-tracker-4.4.3.tgz#766a0a0eb4a52c867a28328e9ae21353812cf626" + integrity sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw== + dependencies: + "@babel/plugin-transform-runtime" "^7.5.5" + "@babel/runtime" "^7.5.5" + eth-query "^2.1.0" + json-rpc-random-id "^1.0.1" + pify "^3.0.0" + safe-event-emitter "^1.0.1" + +eth-block-tracker@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/eth-block-tracker/-/eth-block-tracker-3.0.1.tgz#95cd5e763c7293e0b1b2790a2a39ac2ac188a5e1" + integrity sha512-WUVxWLuhMmsfenfZvFO5sbl1qFY2IqUlw/FPVmjjdElpqLsZtSG+wPe9Dz7W/sB6e80HgFKknOmKk2eNlznHug== + dependencies: + eth-query "^2.1.0" + ethereumjs-tx "^1.3.3" + ethereumjs-util "^5.1.3" + ethjs-util "^0.1.3" + json-rpc-engine "^3.6.0" + pify "^2.3.0" + tape "^4.6.3" + +eth-ens-namehash@2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" + integrity sha1-IprEbsqG1S4MmR58sq74P/D2i88= + dependencies: + idna-uts46-hx "^2.3.1" + js-sha3 "^0.5.7" + +eth-json-rpc-filters@4.2.2, eth-json-rpc-filters@^4.0.2, eth-json-rpc-filters@^4.2.1: + version "4.2.2" + resolved "https://registry.yarnpkg.com/eth-json-rpc-filters/-/eth-json-rpc-filters-4.2.2.tgz#eb35e1dfe9357ace8a8908e7daee80b2cd60a10d" + integrity sha512-DGtqpLU7bBg63wPMWg1sCpkKCf57dJ+hj/k3zF26anXMzkmtSBDExL8IhUu7LUd34f0Zsce3PYNO2vV2GaTzaw== + dependencies: + "@metamask/safe-event-emitter" "^2.0.0" + async-mutex "^0.2.6" + eth-json-rpc-middleware "^6.0.0" + eth-query "^2.1.2" + json-rpc-engine "^6.1.0" + pify "^5.0.0" + +eth-json-rpc-infura@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/eth-json-rpc-infura/-/eth-json-rpc-infura-3.2.1.tgz#26702a821067862b72d979c016fd611502c6057f" + integrity sha512-W7zR4DZvyTn23Bxc0EWsq4XGDdD63+XPUCEhV2zQvQGavDVC4ZpFDK4k99qN7bd7/fjj37+rxmuBOBeIqCA5Mw== + dependencies: + cross-fetch "^2.1.1" + eth-json-rpc-middleware "^1.5.0" + json-rpc-engine "^3.4.0" + json-rpc-error "^2.0.0" + +eth-json-rpc-infura@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/eth-json-rpc-infura/-/eth-json-rpc-infura-5.1.0.tgz#e6da7dc47402ce64c54e7018170d89433c4e8fb6" + integrity sha512-THzLye3PHUSGn1EXMhg6WTLW9uim7LQZKeKaeYsS9+wOBcamRiCQVGHa6D2/4P0oS0vSaxsBnU/J6qvn0MPdow== + dependencies: + eth-json-rpc-middleware "^6.0.0" + eth-rpc-errors "^3.0.0" + json-rpc-engine "^5.3.0" + node-fetch "^2.6.0" + +eth-json-rpc-middleware@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/eth-json-rpc-middleware/-/eth-json-rpc-middleware-1.6.0.tgz#5c9d4c28f745ccb01630f0300ba945f4bef9593f" + integrity sha512-tDVCTlrUvdqHKqivYMjtFZsdD7TtpNLBCfKAcOpaVs7orBMS/A8HWro6dIzNtTZIR05FAbJ3bioFOnZpuCew9Q== + dependencies: + async "^2.5.0" + eth-query "^2.1.2" + eth-tx-summary "^3.1.2" + ethereumjs-block "^1.6.0" + ethereumjs-tx "^1.3.3" + ethereumjs-util "^5.1.2" + ethereumjs-vm "^2.1.0" + fetch-ponyfill "^4.0.0" + json-rpc-engine "^3.6.0" + json-rpc-error "^2.0.0" + json-stable-stringify "^1.0.1" + promise-to-callback "^1.0.0" + tape "^4.6.3" + +eth-json-rpc-middleware@^5.0.2: + version "5.1.0" + resolved "https://registry.yarnpkg.com/eth-json-rpc-middleware/-/eth-json-rpc-middleware-5.1.0.tgz#affc63ddb31205e4b2f2c451571902031dad70fc" + integrity sha512-0uq8nWgHWLKA0sMhVqViue3vSEBVuQXyk2yzjhe8GSo/dGpJUtmYN1DvDF1LQtEhHI4N/G6MKPbiR/aWSRkPmg== + dependencies: + btoa "^1.2.1" + clone "^2.1.1" + eth-query "^2.1.2" + eth-rpc-errors "^3.0.0" + eth-sig-util "^1.4.2" + ethereumjs-block "^1.6.0" + ethereumjs-tx "^1.3.7" + ethereumjs-util "^5.1.2" + ethereumjs-vm "^2.6.0" + json-rpc-engine "^5.3.0" + json-stable-stringify "^1.0.1" + node-fetch "^2.6.1" + pify "^3.0.0" + safe-event-emitter "^1.0.1" + +eth-json-rpc-middleware@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/eth-json-rpc-middleware/-/eth-json-rpc-middleware-6.0.0.tgz#4fe16928b34231a2537856f08a5ebbc3d0c31175" + integrity sha512-qqBfLU2Uq1Ou15Wox1s+NX05S9OcAEL4JZ04VZox2NS0U+RtCMjSxzXhLFWekdShUPZ+P8ax3zCO2xcPrp6XJQ== + dependencies: + btoa "^1.2.1" + clone "^2.1.1" + eth-query "^2.1.2" + eth-rpc-errors "^3.0.0" + eth-sig-util "^1.4.2" + ethereumjs-util "^5.1.2" + json-rpc-engine "^5.3.0" + json-stable-stringify "^1.0.1" + node-fetch "^2.6.1" + pify "^3.0.0" + safe-event-emitter "^1.0.1" + +eth-lib@0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" + integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + xhr-request-promise "^0.1.2" + +eth-lib@^0.1.26: + version "0.1.29" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.1.29.tgz#0c11f5060d42da9f931eab6199084734f4dbd1d9" + integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + nano-json-stream-parser "^0.1.2" + servify "^0.1.12" + ws "^3.0.0" + xhr-request-promise "^0.1.2" + +eth-provider@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/eth-provider/-/eth-provider-0.2.5.tgz#2c06b8c190bb76c83f0f5002773a7d516a9aac68" + integrity sha512-brZFNAYY5Js8yBeyk/ukOJQpClvOXrWFI2A+4HJrBu7rPuUIGHiQ7zmbyhYaRg5Xvkkyi9vw5Fvlt/8I6xvHDQ== + dependencies: + ethereum-provider "0.0.6" + oboe "2.1.4" + uuid "3.3.2" + ws "7.1.2" + xhr2-cookies "1.1.0" + +eth-query@^2.0.2, eth-query@^2.1.0, eth-query@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/eth-query/-/eth-query-2.1.2.tgz#d6741d9000106b51510c72db92d6365456a6da5e" + integrity sha1-1nQdkAAQa1FRDHLbktY2VFam2l4= + dependencies: + json-rpc-random-id "^1.0.0" + xtend "^4.0.1" + +eth-rpc-errors@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/eth-rpc-errors/-/eth-rpc-errors-4.0.2.tgz#11bc164e25237a679061ac05b7da7537b673d3b7" + integrity sha512-n+Re6Gu8XGyfFy1it0AwbD1x0MUzspQs0D5UiPs1fFPCr6WAwZM+vbIhXheBFrpgosqN9bs5PqlB4Q61U/QytQ== + dependencies: + fast-safe-stringify "^2.0.6" + +eth-rpc-errors@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eth-rpc-errors/-/eth-rpc-errors-3.0.0.tgz#d7b22653c70dbf9defd4ef490fd08fe70608ca10" + integrity sha512-iPPNHPrLwUlR9xCSYm7HHQjWBasor3+KZfRvwEWxMz3ca0yqnlBeJrnyphkGIXZ4J7AMAaOLmwy4AWhnxOiLxg== + dependencies: + fast-safe-stringify "^2.0.6" + +eth-rpc-errors@^4.0.2, eth-rpc-errors@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz#6ddb6190a4bf360afda82790bb7d9d5e724f423a" + integrity sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg== + dependencies: + fast-safe-stringify "^2.0.6" + +eth-sig-util@2.5.3: + version "2.5.3" + resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-2.5.3.tgz#6938308b38226e0b3085435474900b03036abcbe" + integrity sha512-KpXbCKmmBUNUTGh9MRKmNkIPietfhzBqqYqysDavLseIiMUGl95k6UcPEkALAZlj41e9E6yioYXc1PC333RKqw== + dependencies: + buffer "^5.2.1" + elliptic "^6.4.0" + ethereumjs-abi "0.6.5" + ethereumjs-util "^5.1.1" + tweetnacl "^1.0.0" + tweetnacl-util "^0.15.0" + +eth-sig-util@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-3.0.0.tgz#75133b3d7c20a5731af0690c385e184ab942b97e" + integrity sha512-4eFkMOhpGbTxBQ3AMzVf0haUX2uTur7DpWiHzWyTURa28BVJJtOkcb9Ok5TV0YvEPG61DODPW7ZUATbJTslioQ== + dependencies: + buffer "^5.2.1" + elliptic "^6.4.0" + ethereumjs-abi "0.6.5" + ethereumjs-util "^5.1.1" + tweetnacl "^1.0.0" + tweetnacl-util "^0.15.0" + +eth-sig-util@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-1.4.2.tgz#8d958202c7edbaae839707fba6f09ff327606210" + integrity sha1-jZWCAsftuq6Dlwf7pvCf8ydgYhA= + dependencies: + ethereumjs-abi "git+https://github.com/ethereumjs/ethereumjs-abi.git" + ethereumjs-util "^5.1.1" + +eth-tx-summary@^3.1.2: + version "3.2.4" + resolved "https://registry.yarnpkg.com/eth-tx-summary/-/eth-tx-summary-3.2.4.tgz#e10eb95eb57cdfe549bf29f97f1e4f1db679035c" + integrity sha512-NtlDnaVZah146Rm8HMRUNMgIwG/ED4jiqk0TME9zFheMl1jOp6jL1m0NKGjJwehXQ6ZKCPr16MTr+qspKpEXNg== + dependencies: + async "^2.1.2" + clone "^2.0.0" + concat-stream "^1.5.1" + end-of-stream "^1.1.0" + eth-query "^2.0.2" + ethereumjs-block "^1.4.1" + ethereumjs-tx "^1.1.1" + ethereumjs-util "^5.0.1" + ethereumjs-vm "^2.6.0" + through2 "^2.0.3" + +ethashjs@~0.0.7: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ethashjs/-/ethashjs-0.0.8.tgz#227442f1bdee409a548fb04136e24c874f3aa6f9" + integrity sha512-/MSbf/r2/Ld8o0l15AymjOTlPqpN8Cr4ByUEA9GtR4x0yAh3TdtDzEg29zMjXCNPI7u6E5fOQdj/Cf9Tc7oVNw== + dependencies: + async "^2.1.2" + buffer-xor "^2.0.1" + ethereumjs-util "^7.0.2" + miller-rabin "^4.0.0" + +ethereum-bloom-filters@^1.0.6: + version "1.0.10" + resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" + integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== + dependencies: + js-sha3 "^0.8.0" + +ethereum-common@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.2.0.tgz#13bf966131cce1eeade62a1b434249bb4cb120ca" + integrity sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA== + +ethereum-common@^0.0.18: + version "0.0.18" + resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.0.18.tgz#2fdc3576f232903358976eb39da783213ff9523f" + integrity sha1-L9w1dvIykDNYl26znaeDIT/5Uj8= + +ethereum-cryptography@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" + integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== + dependencies: + "@types/pbkdf2" "^3.0.0" + "@types/secp256k1" "^4.0.1" + blakejs "^1.1.0" + browserify-aes "^1.2.0" + bs58check "^2.1.2" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + +ethereum-cryptography@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.2.0.tgz#6a163130141abe85e0300646eee95323ae725555" + integrity sha512-6w64pvUvH3InBwNhax5j7brR4aGbdbd9B1R1uRwK9jNMTmyWMd7mSBxcGlMQv23qh+l/n0yjbQp2j0Q/gxhRdw== + dependencies: + micro-base "^0.9.0" + noble-hashes "^0.2.1" + noble-secp256k1 "^1.2.14" + +ethereum-provider@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/ethereum-provider/-/ethereum-provider-0.0.6.tgz#6f5a0427c34872339667d9904a8692e8992e6bf5" + integrity sha512-DqtdXNHGi/QtOjEovNOegVVQTd8/NnH9rP27R5SU3j2LKECZbcLGIZ3Z9Ln1SDaeUC5YJGJFYQCUUjfIi7NNyQ== + +ethereum-types@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/ethereum-types/-/ethereum-types-2.1.6.tgz#57d9d515fad86ab987c0f6962c4203be37da8579" + integrity sha512-xaN5TxLvkdFCGjGfUQ5wV00GHzDHStozP1j+K/YdmUeQXVGiD15cogYPhBVWG3pQJM/aBjtYrpMrjywvKkNC4A== + dependencies: + "@types/node" "*" + bignumber.js "~8.0.2" + +ethereumjs-abi@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.5.tgz#5a637ef16ab43473fa72a29ad90871405b3f5241" + integrity sha1-WmN+8Wq0NHP6cqKa2QhxQFs/UkE= + dependencies: + bn.js "^4.10.0" + ethereumjs-util "^4.3.0" + +ethereumjs-abi@0.6.8: + version "0.6.8" + resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" + integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== + dependencies: + bn.js "^4.11.8" + ethereumjs-util "^6.0.0" + +"ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git": + version "0.6.8" + resolved "git+https://github.com/ethereumjs/ethereumjs-abi.git#ee3994657fa7a427238e6ba92a84d0b529bbcde0" + dependencies: + bn.js "^4.11.8" + ethereumjs-util "^6.0.0" + +ethereumjs-account@3.0.0, ethereumjs-account@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ethereumjs-account/-/ethereumjs-account-3.0.0.tgz#728f060c8e0c6e87f1e987f751d3da25422570a9" + integrity sha512-WP6BdscjiiPkQfF9PVfMcwx/rDvfZTjFKY0Uwc09zSQr9JfIVH87dYIJu0gNhBhpmovV4yq295fdllS925fnBA== + dependencies: + ethereumjs-util "^6.0.0" + rlp "^2.2.1" + safe-buffer "^5.1.1" + +ethereumjs-account@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz#eeafc62de544cb07b0ee44b10f572c9c49e00a84" + integrity sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA== + dependencies: + ethereumjs-util "^5.0.0" + rlp "^2.0.0" + safe-buffer "^5.1.1" + +ethereumjs-block@2.2.2, ethereumjs-block@^2.2.2, ethereumjs-block@~2.2.0, ethereumjs-block@~2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz#c7654be7e22df489fda206139ecd63e2e9c04965" + integrity sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg== + dependencies: + async "^2.0.1" + ethereumjs-common "^1.5.0" + ethereumjs-tx "^2.1.1" + ethereumjs-util "^5.0.0" + merkle-patricia-tree "^2.1.2" + +ethereumjs-block@^1.2.2, ethereumjs-block@^1.4.1, ethereumjs-block@^1.6.0: + version "1.7.1" + resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz#78b88e6cc56de29a6b4884ee75379b6860333c3f" + integrity sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg== + dependencies: + async "^2.0.1" + ethereum-common "0.2.0" + ethereumjs-tx "^1.2.2" + ethereumjs-util "^5.0.0" + merkle-patricia-tree "^2.1.2" + +ethereumjs-blockchain@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/ethereumjs-blockchain/-/ethereumjs-blockchain-4.0.4.tgz#30f2228dc35f6dcf94423692a6902604ae34960f" + integrity sha512-zCxaRMUOzzjvX78DTGiKjA+4h2/sF0OYL1QuPux0DHpyq8XiNoF5GYHtb++GUxVlMsMfZV7AVyzbtgcRdIcEPQ== + dependencies: + async "^2.6.1" + ethashjs "~0.0.7" + ethereumjs-block "~2.2.2" + ethereumjs-common "^1.5.0" + ethereumjs-util "^6.1.0" + flow-stoplight "^1.0.0" + level-mem "^3.0.1" + lru-cache "^5.1.1" + rlp "^2.2.2" + semaphore "^1.1.0" + +ethereumjs-common@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.5.0.tgz#d3e82fc7c47c0cef95047f431a99485abc9bb1cd" + integrity sha512-SZOjgK1356hIY7MRj3/ma5qtfr/4B5BL+G4rP/XSMYr2z1H5el4RX5GReYCKmQmYI/nSBmRnwrZ17IfHuG0viQ== + +ethereumjs-common@^1.1.0, ethereumjs-common@^1.3.2, ethereumjs-common@^1.5.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz#2065dbe9214e850f2e955a80e650cb6999066979" + integrity sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA== + +ethereumjs-tx@2.1.2, ethereumjs-tx@^2.1.1, ethereumjs-tx@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz#5dfe7688bf177b45c9a23f86cf9104d47ea35fed" + integrity sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw== + dependencies: + ethereumjs-common "^1.5.0" + ethereumjs-util "^6.0.0" + +ethereumjs-tx@^1.1.1, ethereumjs-tx@^1.2.0, ethereumjs-tx@^1.2.2, ethereumjs-tx@^1.3.3, ethereumjs-tx@^1.3.5, ethereumjs-tx@^1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz#88323a2d875b10549b8347e09f4862b546f3d89a" + integrity sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA== + dependencies: + ethereum-common "^0.0.18" + ethereumjs-util "^5.0.0" + +ethereumjs-util@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz#3e0c0d1741471acf1036052d048623dee54ad642" + integrity sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA== + dependencies: + bn.js "^4.11.0" + create-hash "^1.1.2" + ethjs-util "^0.1.3" + keccak "^1.0.2" + rlp "^2.0.0" + safe-buffer "^5.1.1" + secp256k1 "^3.0.1" + +ethereumjs-util@6.2.1, ethereumjs-util@^6.0.0, ethereumjs-util@^6.1.0, ethereumjs-util@^6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" + integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.3" + +ethereumjs-util@^4.3.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-4.5.1.tgz#f4bf9b3b515a484e3cc8781d61d9d980f7c83bd0" + integrity sha512-WrckOZ7uBnei4+AKimpuF1B3Fv25OmoRgmYCpGsP7u8PFxXAmAgiJSYT2kRWnt6fVIlKaQlZvuwXp7PIrmn3/w== + dependencies: + bn.js "^4.8.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + rlp "^2.0.0" + +ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumjs-util@^5.1.1, ethereumjs-util@^5.1.2, ethereumjs-util@^5.1.3, ethereumjs-util@^5.1.5, ethereumjs-util@^5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz#a833f0e5fca7e5b361384dc76301a721f537bf65" + integrity sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ== + dependencies: + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "^0.1.3" + rlp "^2.0.0" + safe-buffer "^5.1.1" + +ethereumjs-util@^7.0.10, ethereumjs-util@^7.0.2, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.3.tgz#b55d7b64dde3e3e45749e4c41288238edec32d23" + integrity sha512-y+82tEbyASO0K0X1/SRhbJJoAlfcvq8JbrG4a5cjrOks7HS/36efU/0j2flxCPOUM++HFahk33kr/ZxyC4vNuw== + dependencies: + "@types/bn.js" "^5.1.0" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + rlp "^2.2.4" + +ethereumjs-vm@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/ethereumjs-vm/-/ethereumjs-vm-4.2.0.tgz#e885e861424e373dbc556278f7259ff3fca5edab" + integrity sha512-X6qqZbsY33p5FTuZqCnQ4+lo957iUJMM6Mpa6bL4UW0dxM6WmDSHuI4j/zOp1E2TDKImBGCJA9QPfc08PaNubA== + dependencies: + async "^2.1.2" + async-eventemitter "^0.2.2" + core-js-pure "^3.0.1" + ethereumjs-account "^3.0.0" + ethereumjs-block "^2.2.2" + ethereumjs-blockchain "^4.0.3" + ethereumjs-common "^1.5.0" + ethereumjs-tx "^2.1.2" + ethereumjs-util "^6.2.0" + fake-merkle-patricia-tree "^1.0.1" + functional-red-black-tree "^1.0.1" + merkle-patricia-tree "^2.3.2" + rustbn.js "~0.2.0" + safe-buffer "^5.1.1" + util.promisify "^1.0.0" + +ethereumjs-vm@^2.1.0, ethereumjs-vm@^2.3.4, ethereumjs-vm@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz#76243ed8de031b408793ac33907fb3407fe400c6" + integrity sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw== + dependencies: + async "^2.1.2" + async-eventemitter "^0.2.2" + ethereumjs-account "^2.0.3" + ethereumjs-block "~2.2.0" + ethereumjs-common "^1.1.0" + ethereumjs-util "^6.0.0" + fake-merkle-patricia-tree "^1.0.1" + functional-red-black-tree "^1.0.1" + merkle-patricia-tree "^2.3.2" + rustbn.js "~0.2.0" + safe-buffer "^5.1.1" + +ethereumjs-wallet@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/ethereumjs-wallet/-/ethereumjs-wallet-0.6.5.tgz#685e9091645cee230ad125c007658833991ed474" + integrity sha512-MDwjwB9VQVnpp/Dc1XzA6J1a3wgHQ4hSvA1uWNatdpOrtCbPVuQSKSyRnjLvS0a+KKMw2pvQ9Ybqpb3+eW8oNA== + dependencies: + aes-js "^3.1.1" + bs58check "^2.1.2" + ethereum-cryptography "^0.1.3" + ethereumjs-util "^6.0.0" + randombytes "^2.0.6" + safe-buffer "^5.1.2" + scryptsy "^1.2.1" + utf8 "^3.0.0" + uuid "^3.3.2" + +ethers@~4.0.4: + version "4.0.49" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.49.tgz#0eb0e9161a0c8b4761be547396bbe2fb121a8894" + integrity sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg== + dependencies: + aes-js "3.0.0" + bn.js "^4.11.9" + elliptic "6.5.4" + hash.js "1.1.3" + js-sha3 "0.5.7" + scrypt-js "2.0.4" + setimmediate "1.0.4" + uuid "2.0.1" + xmlhttprequest "1.8.0" + +ethjs-unit@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" + integrity sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk= + dependencies: + bn.js "4.11.6" + number-to-bn "1.7.0" + +ethjs-util@0.1.6, ethjs-util@^0.1.3: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" + integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== + dependencies: + is-hex-prefixed "1.0.0" + strip-hex-prefix "1.0.0" + +eventemitter3@4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" + integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== + +eventemitter3@4.0.7, eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.0.0, events@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +eventsource@^1.0.7: + version "1.1.0" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf" + integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg== + dependencies: + original "^1.0.0" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +exec-sh@^0.3.2: + version "0.3.6" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" + integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +execa@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exit-on-epipe@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" + integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw== + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + +expect@^26.6.0, expect@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" + integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== + dependencies: + "@jest/types" "^26.6.2" + ansi-styles "^4.0.0" + jest-get-type "^26.3.0" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" + +express@^4.14.0, express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +ext@^1.1.2: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.6.0.tgz#3871d50641e874cc172e2b53f919842d19db4c52" + integrity sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg== + dependencies: + type "^2.5.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + +fake-merkle-patricia-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz#4b8c3acfb520afadf9860b1f14cd8ce3402cddd3" + integrity sha1-S4w6z7Ugr635hgsfFM2M40As3dM= + dependencies: + checkpoint-store "^1.1.0" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + +fast-glob@^3.1.1: + version "3.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" + integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fast-safe-stringify@^2.0.6, fast-safe-stringify@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.11.3: + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== + dependencies: + websocket-driver ">=0.5.1" + +fb-watchman@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + +fetch-ponyfill@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz#ae3ce5f732c645eab87e4ae8793414709b239893" + integrity sha1-rjzl9zLGReq4fkroeTQUcJsjmJM= + dependencies: + node-fetch "~1.7.1" + +figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + +figures@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +file-loader@6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.1.1.tgz#a6f29dfb3f5933a1c350b2dbaa20ac5be0539baa" + integrity sha512-Klt8C4BjWSXYQAfhpYYkG4qHNTna4toMHEbWrI5IuVoxbU6uiDKeKAP99R8mmbJi3lvewn/jQBOgU4+NS3tDQw== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +filesize@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.1.0.tgz#e81bdaa780e2451d714d71c0d7a4f3238d37ad00" + integrity sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-cache-dir@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@4.1.0, find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +find-yarn-workspace-root@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz#40eb8e6e7c2502ddfaa2577c176f221422f860db" + integrity sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q== + dependencies: + fs-extra "^4.0.3" + micromatch "^3.1.4" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2" + integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw== + +flatten@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b" + integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== + +flow-stoplight@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/flow-stoplight/-/flow-stoplight-1.0.0.tgz#4a292c5bcff8b39fa6cc0cb1a853d86f27eeff7b" + integrity sha1-SiksW8/4s5+mzAyxqFPYbyfu/3s= + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== + dependencies: + debug "=3.1.0" + +follow-redirects@^1.0.0, follow-redirects@^1.14.4: + version "1.14.5" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.5.tgz#f09a5848981d3c772b5392309778523f8d85c381" + integrity sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA== + +for-each@^0.3.3, for-each@~0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +fork-ts-checker-webpack-plugin@4.1.6: + version "4.1.6" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz#5055c703febcf37fa06405d400c122b905167fc5" + integrity sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw== + dependencies: + "@babel/code-frame" "^7.5.5" + chalk "^2.4.1" + micromatch "^3.1.10" + minimatch "^3.0.4" + semver "^5.6.0" + tapable "^1.0.0" + worker-rpc "^0.1.0" + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +fortmatic@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/fortmatic/-/fortmatic-1.1.3.tgz#eaeb8b65677aaa245a67ff5f1b8b7f79380a9b23" + integrity sha512-70gPiTuwfqEQNg4fFK5MVf3gRAW+mo2tHdiMSEt2OLKcoHWrAn63e/r245dPJAw4Qvz7PhkYF/bTx6ga50zWog== + dependencies: + "@babel/runtime" "7.3.4" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-access@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a" + integrity sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o= + dependencies: + null-check "^1.0.0" + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@^4.0.2, fs-extra@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^7.0.0, fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@^2.1.2, fsevents@^2.1.3, fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1, functional-red-black-tree@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +ganache-core@^2.6.0: + version "2.13.2" + resolved "https://registry.yarnpkg.com/ganache-core/-/ganache-core-2.13.2.tgz#27e6fc5417c10e6e76e2e646671869d7665814a3" + integrity sha512-tIF5cR+ANQz0+3pHWxHjIwHqFXcVo0Mb+kcsNhglNFALcYo49aQpnS9dqHartqPfMFjiHh/qFoD3mYK0d/qGgw== + dependencies: + abstract-leveldown "3.0.0" + async "2.6.2" + bip39 "2.5.0" + cachedown "1.0.0" + clone "2.1.2" + debug "3.2.6" + encoding-down "5.0.4" + eth-sig-util "3.0.0" + ethereumjs-abi "0.6.8" + ethereumjs-account "3.0.0" + ethereumjs-block "2.2.2" + ethereumjs-common "1.5.0" + ethereumjs-tx "2.1.2" + ethereumjs-util "6.2.1" + ethereumjs-vm "4.2.0" + heap "0.2.6" + keccak "3.0.1" + level-sublevel "6.6.4" + levelup "3.1.1" + lodash "4.17.20" + lru-cache "5.1.1" + merkle-patricia-tree "3.0.0" + patch-package "6.2.2" + seedrandom "3.0.1" + source-map-support "0.5.12" + tmp "0.1.0" + web3-provider-engine "14.2.1" + websocket "1.0.32" + optionalDependencies: + ethereumjs-wallet "0.6.5" + web3 "1.2.11" + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +gaze@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" + integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== + dependencies: + globule "^1.0.0" + +gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.1, get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-pkg-repo@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" + integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== + dependencies: + "@hutson/parse-repository-url" "^3.0.0" + hosted-git-info "^4.0.0" + through2 "^2.0.0" + yargs "^16.2.0" + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +get-stream@^4.0.0, get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.0.0, get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +git-raw-commits@^2.0.8: + version "2.0.10" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.10.tgz#e2255ed9563b1c9c3ea6bd05806410290297bbc1" + integrity sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ== + dependencies: + dargs "^7.0.0" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" + +git-remote-origin-url@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" + integrity sha1-UoJlna4hBxRaERJhEq0yFuxfpl8= + dependencies: + gitconfiglocal "^1.0.0" + pify "^2.3.0" + +git-semver-tags@^4.0.0, git-semver-tags@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-4.1.1.tgz#63191bcd809b0ec3e151ba4751c16c444e5b5780" + integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA== + dependencies: + meow "^8.0.0" + semver "^6.0.0" + +gitconfiglocal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" + integrity sha1-QdBF84UaXqiPA/JMocYXgRRGS5s= + dependencies: + ini "^1.3.2" + +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@~7.1.1, glob@~7.1.7: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-modules@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +global@~4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.6.0, globals@^13.9.0: + version "13.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e" + integrity sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg== + dependencies: + type-fest "^0.20.2" + +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== + +globby@11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" + integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + +globby@^11.0.3: + version "11.0.4" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" + integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globule@^1.0.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.3.tgz#811919eeac1ab7344e905f2e3be80a13447973c2" + integrity sha512-mb1aYtDbIjTu4ShMB85m3UzjX9BVKe9WCzsnfMSZk+K5GpIbBOexgg4PPCt5eHDEG5/ZQAUX2Kct02zfiPLsKg== + dependencies: + glob "~7.1.1" + lodash "~4.17.10" + minimatch "~3.0.2" + +got@9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +got@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" + integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw== + dependencies: + decompress-response "^3.2.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-plain-obj "^1.1.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + p-cancelable "^0.3.0" + p-timeout "^1.1.1" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + url-parse-lax "^1.0.0" + url-to-options "^1.0.1" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3, graceful-fs@^4.2.4: + version "4.2.8" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" + integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= + +gzip-size@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" + integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== + dependencies: + duplexer "^0.1.1" + pify "^4.0.1" + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +handlebars@^4.7.6: + version "4.7.7" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" + integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.0" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== + +harmony-reflect@^1.4.6: + version "1.6.2" + resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710" + integrity sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g== + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbol-support-x@^1.4.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" + integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== + +has-symbols@^1.0.1, has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + +has-to-string-tag-x@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" + integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== + dependencies: + has-symbol-support-x "^1.4.1" + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.0, has@^1.0.3, has@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" + integrity sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.0" + +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hdkey@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/hdkey/-/hdkey-0.7.1.tgz#caee4be81aa77921e909b8d228dd0f29acaee632" + integrity sha1-yu5L6BqneSHpCbjSKN0PKayu5jI= + dependencies: + coinstring "^2.0.0" + secp256k1 "^3.0.1" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +heap@0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" + integrity sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw= + +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" + integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +hoopy@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" + integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" + integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== + dependencies: + lru-cache "^6.0.0" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" + integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" + integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= + +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + +html-entities@^1.2.1, html-entities@^1.3.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" + integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +html-minifier-terser@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" + integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== + dependencies: + camel-case "^4.1.1" + clean-css "^4.2.3" + commander "^4.1.1" + he "^1.2.0" + param-case "^3.0.3" + relateurl "^0.2.7" + terser "^4.6.3" + +html-webpack-plugin@4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz#625097650886b97ea5dae331c320e3238f6c121c" + integrity sha512-MouoXEYSjTzCrjIxWwg8gxL5fE2X2WZJLmBYXlaJhQUH5K/b5OrqmV7T4dB7iu0xkmJ6JlUuV6fFVtnqbPopZw== + dependencies: + "@types/html-minifier-terser" "^5.0.0" + "@types/tapable" "^1.0.5" + "@types/webpack" "^4.41.8" + html-minifier-terser "^5.0.1" + loader-utils "^1.2.3" + lodash "^4.17.15" + pretty-error "^2.1.1" + tapable "^1.1.3" + util.promisify "1.0.0" + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-https@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" + integrity sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs= + +http-parser-js@>=0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.5.tgz#d7c30d5d3c90d865b4a2e870181f9d6f22ac7ac5" + integrity sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA== + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +http-proxy-middleware@0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.17.0: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +husky@^7.0.1: + version "7.0.4" + resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.4.tgz#242048245dc49c8fb1bf0cc7cfb98dd722531535" + integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ== + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +icss-utils@^4.0.0, icss-utils@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" + integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== + dependencies: + postcss "^7.0.14" + +identity-obj-proxy@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" + integrity sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ= + dependencies: + harmony-reflect "^1.4.6" + +idna-uts46-hx@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz#a1dc5c4df37eee522bf66d969cc980e00e8711f9" + integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA== + dependencies: + punycode "2.1.0" + +ieee754@^1.1.13, ieee754@^1.1.4: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.1.4, ignore@^5.1.8: + version "5.1.9" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.9.tgz#9ec1a5cbe8e1446ec60d4420060d43aa6e7382fb" + integrity sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ== + +immediate@^3.2.3: + version "3.3.0" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" + integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== + +immediate@~3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c" + integrity sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw= + +immer@8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/immer/-/immer-8.0.1.tgz#9c73db683e2b3975c424fb0572af5889877ae656" + integrity sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA== + +immer@^9.0.6: + version "9.0.7" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.7.tgz#b6156bd7db55db7abc73fd2fdadf4e579a701075" + integrity sha512-KGllzpbamZDvOIxnmJ0jI840g7Oikx58lBPWV0hUh7dtAyZpFqqrBZdKka5GlTwMTZ1Tjc/bKKW4VSFAt6BqMA== + +import-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" + integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= + dependencies: + import-from "^2.1.0" + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-from@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" + integrity sha1-M1238qev/VOqpHHUuAId7ja387E= + dependencies: + resolve-from "^3.0.0" + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +import-local@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.3.tgz#4d51c2c495ca9393da259ec66b62e022920211e0" + integrity sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + +infer-owner@^1.0.3, infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@^1.3.2, ini@^1.3.5, ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + +invariant@^2.2.2: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= + +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arguments@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-buffer@^2.0.2: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-color-stop@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" + integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= + dependencies: + css-color-names "^0.0.4" + hex-color-regex "^1.1.0" + hsl-regex "^1.0.0" + hsla-regex "^1.0.0" + rgb-regex "^1.0.1" + rgba-regex "^1.0.0" + +is-core-module@^2.0.0, is-core-module@^2.2.0, is-core-module@^2.5.0, is-core-module@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" + integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw== + dependencies: + has "^1.0.3" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-docker@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== + +is-fn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fn/-/is-fn-1.0.0.tgz#9543d5de7bcf5b08a22ec8a20bae6e286d510d8c" + integrity sha1-lUPV3nvPWwiiLsiiC65uKG1RDYw= + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-function@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" + integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-generator-function@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hex-prefixed@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" + integrity sha1-fY035q135dEnFIkTxXPggtd39VQ= + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + +is-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + +is-number-object@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" + integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" + integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== + +is-path-cwd@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + +is-regex@^1.0.4, is-regex@^1.1.4, is-regex@~1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= + +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + +is-retry-allowed@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + +is-root@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" + integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== + +is-shared-array-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6" + integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== + +is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-text-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= + dependencies: + text-extensions "^1.0.0" + +is-typed-array@^1.1.3, is-typed-array@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.8.tgz#cbaa6585dc7db43318bc5b89523ea384a6f65e79" + integrity sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-abstract "^1.18.5" + foreach "^2.0.5" + has-tostringtag "^1.0.0" + +is-typedarray@1.0.0, is-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-weakref@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.1.tgz#842dba4ec17fa9ac9850df2d6efbc1737274f2a2" + integrity sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ== + dependencies: + call-bind "^1.0.0" + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +is-wsl@^2.1.1, is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isarray@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isomorphic-fetch@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-instrument@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" + +istanbul-lib-instrument@^5.0.4: + version "5.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a" + integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.0.2: + version "3.0.5" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.5.tgz#a2580107e71279ea6d661ddede929ffc6d693384" + integrity sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +isurl@^1.0.0-alpha5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" + integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== + dependencies: + has-to-string-tag-x "^1.2.0" + is-object "^1.0.1" + +javascript-natural-sort@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz#f9e2303d4507f6d74355a73664d1440fb5a0ef59" + integrity sha1-+eIwPUUH9tdDVac2ZNFED7Wg71k= + +jest-changed-files@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" + integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== + dependencies: + "@jest/types" "^26.6.2" + execa "^4.0.0" + throat "^5.0.0" + +jest-circus@26.6.0: + version "26.6.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-26.6.0.tgz#7d9647b2e7f921181869faae1f90a2629fd70705" + integrity sha512-L2/Y9szN6FJPWFK8kzWXwfp+FOR7xq0cUL4lIsdbIdwz3Vh6P1nrpcqOleSzr28zOtSHQNV9Z7Tl+KkuK7t5Ng== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^26.6.0" + "@jest/test-result" "^26.6.0" + "@jest/types" "^26.6.0" + "@types/babel__traverse" "^7.0.4" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + expect "^26.6.0" + is-generator-fn "^2.0.0" + jest-each "^26.6.0" + jest-matcher-utils "^26.6.0" + jest-message-util "^26.6.0" + jest-runner "^26.6.0" + jest-runtime "^26.6.0" + jest-snapshot "^26.6.0" + jest-util "^26.6.0" + pretty-format "^26.6.0" + stack-utils "^2.0.2" + throat "^5.0.0" + +jest-cli@^26.6.0: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" + integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== + dependencies: + "@jest/core" "^26.6.3" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + import-local "^3.0.2" + is-ci "^2.0.0" + jest-config "^26.6.3" + jest-util "^26.6.2" + jest-validate "^26.6.2" + prompts "^2.0.1" + yargs "^15.4.1" + +jest-config@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" + integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^26.6.3" + "@jest/types" "^26.6.2" + babel-jest "^26.6.3" + chalk "^4.0.0" + deepmerge "^4.2.2" + glob "^7.1.1" + graceful-fs "^4.2.4" + jest-environment-jsdom "^26.6.2" + jest-environment-node "^26.6.2" + jest-get-type "^26.3.0" + jest-jasmine2 "^26.6.3" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + micromatch "^4.0.2" + pretty-format "^26.6.2" + +jest-diff@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" + integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== + dependencies: + chalk "^4.0.0" + diff-sequences "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-docblock@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" + integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== + dependencies: + detect-newline "^3.0.0" + +jest-each@^26.6.0, jest-each@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" + integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== + dependencies: + "@jest/types" "^26.6.2" + chalk "^4.0.0" + jest-get-type "^26.3.0" + jest-util "^26.6.2" + pretty-format "^26.6.2" + +jest-environment-jsdom@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" + integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" + jsdom "^16.4.0" + +jest-environment-node@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" + integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" + +jest-get-type@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" + integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== + +jest-haste-map@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" + integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== + dependencies: + "@jest/types" "^26.6.2" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.4" + jest-regex-util "^26.0.0" + jest-serializer "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + micromatch "^4.0.2" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.1.2" + +jest-jasmine2@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" + integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + expect "^26.6.2" + is-generator-fn "^2.0.0" + jest-each "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + pretty-format "^26.6.2" + throat "^5.0.0" + +jest-leak-detector@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" + integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== + dependencies: + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-matcher-utils@^26.6.0, jest-matcher-utils@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" + integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== + dependencies: + chalk "^4.0.0" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-message-util@^26.6.0, jest-message-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" + integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/types" "^26.6.2" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + micromatch "^4.0.2" + pretty-format "^26.6.2" + slash "^3.0.0" + stack-utils "^2.0.2" + +jest-mock@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" + integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + +jest-regex-util@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" + integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== + +jest-resolve-dependencies@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" + integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== + dependencies: + "@jest/types" "^26.6.2" + jest-regex-util "^26.0.0" + jest-snapshot "^26.6.2" + +jest-resolve@26.6.0: + version "26.6.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.0.tgz#070fe7159af87b03e50f52ea5e17ee95bbee40e1" + integrity sha512-tRAz2bwraHufNp+CCmAD8ciyCpXCs1NQxB5EJAmtCFy6BN81loFEGWKzYu26Y62lAJJe4X4jg36Kf+NsQyiStQ== + dependencies: + "@jest/types" "^26.6.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + jest-pnp-resolver "^1.2.2" + jest-util "^26.6.0" + read-pkg-up "^7.0.1" + resolve "^1.17.0" + slash "^3.0.0" + +jest-resolve@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" + integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== + dependencies: + "@jest/types" "^26.6.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + jest-pnp-resolver "^1.2.2" + jest-util "^26.6.2" + read-pkg-up "^7.0.1" + resolve "^1.18.1" + slash "^3.0.0" + +jest-runner@^26.6.0, jest-runner@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" + integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.7.1" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-config "^26.6.3" + jest-docblock "^26.0.0" + jest-haste-map "^26.6.2" + jest-leak-detector "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + jest-runtime "^26.6.3" + jest-util "^26.6.2" + jest-worker "^26.6.2" + source-map-support "^0.5.6" + throat "^5.0.0" + +jest-runtime@^26.6.0, jest-runtime@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" + integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/globals" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + cjs-module-lexer "^0.6.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.4" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + slash "^3.0.0" + strip-bom "^4.0.0" + yargs "^15.4.1" + +jest-serializer@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" + integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.4" + +jest-snapshot@^26.6.0, jest-snapshot@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" + integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== + dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^26.6.2" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.0.0" + chalk "^4.0.0" + expect "^26.6.2" + graceful-fs "^4.2.4" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + jest-haste-map "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + natural-compare "^1.4.0" + pretty-format "^26.6.2" + semver "^7.3.2" + +jest-util@^26.6.0, jest-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" + integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" + is-ci "^2.0.0" + micromatch "^4.0.2" + +jest-validate@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" + integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== + dependencies: + "@jest/types" "^26.6.2" + camelcase "^6.0.0" + chalk "^4.0.0" + jest-get-type "^26.3.0" + leven "^3.1.0" + pretty-format "^26.6.2" + +jest-watch-typeahead@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-0.6.1.tgz#45221b86bb6710b7e97baaa1640ae24a07785e63" + integrity sha512-ITVnHhj3Jd/QkqQcTqZfRgjfyRhDFM/auzgVo2RKvSwi18YMvh0WvXDJFoFED6c7jd/5jxtu4kSOb9PTu2cPVg== + dependencies: + ansi-escapes "^4.3.1" + chalk "^4.0.0" + jest-regex-util "^26.0.0" + jest-watcher "^26.3.0" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + +jest-watcher@^26.3.0, jest-watcher@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" + integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== + dependencies: + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^26.6.2" + string-length "^4.0.1" + +jest-worker@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" + integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== + dependencies: + merge-stream "^2.0.0" + supports-color "^6.1.0" + +jest-worker@^26.5.0, jest-worker@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jest-worker@^27.3.1: + version "27.4.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.4.2.tgz#0fb123d50955af1a450267787f340a1bf7e12bc4" + integrity sha512-0QMy/zPovLfUPyHuOuuU4E+kGACXXE84nRnq6lBVI9GJg5DCBiA97SATi+ZP8CpiJwEQy1oCPjRBf8AnLjN+Ag== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@26.6.0: + version "26.6.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.0.tgz#546b25a1d8c888569dbbe93cae131748086a4a25" + integrity sha512-jxTmrvuecVISvKFFhOkjsWRZV7sFqdSUAd1ajOKY+/QE/aLBVstsJ/dX8GczLzwiT6ZEwwmZqtCUHLHHQVzcfA== + dependencies: + "@jest/core" "^26.6.0" + import-local "^3.0.2" + jest-cli "^26.6.0" + +js-base64@^2.1.8: + version "2.6.4" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" + integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== + +js-logger@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/js-logger/-/js-logger-1.6.1.tgz#8f09671b515e4a6f31dced8fdb8923432e2c60af" + integrity sha512-yTgMCPXVjhmg28CuUH8CKjU+cIKL/G+zTu4Fn4lQxs8mRFH/03QTNvEFngcxfg/gRDiQAOoyCKmMTOm9ayOzXA== + +js-sha256@0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966" + integrity sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA== + +js-sha3@0.5.7, js-sha3@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" + integrity sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc= + +js-sha3@0.8.0, js-sha3@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +js-sha3@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.7.0.tgz#0a5c57b36f79882573b2d84051f8bb85dd1bd63a" + integrity sha512-Wpks3yBDm0UcL5qlVhwW9Jr9n9i4FfeWBFOOXP5puDS/SiudJGhw7DPyBqn3487qD4F0lsC0q3zxink37f7zeA== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbi@^3.1.4: + version "3.2.5" + resolved "https://registry.yarnpkg.com/jsbi/-/jsbi-3.2.5.tgz#b37bb90e0e5c2814c1c2a1bcd8c729888a2e37d6" + integrity sha512-aBE4n43IPvjaddScbvWRA2YlTzKEynHzu7MqOyTipdHucf/VxS63ViCjxYRg86M8Rxwbt/GfzHl1kKERkt45fQ== + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsdom@^16.4.0: + version "16.7.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" + integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== + dependencies: + abab "^2.0.5" + acorn "^8.2.4" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.3.0" + data-urls "^2.0.0" + decimal.js "^10.2.1" + domexception "^2.0.1" + escodegen "^2.0.0" + form-data "^3.0.0" + html-encoding-sniffer "^2.0.1" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.0" + parse5 "6.0.1" + saxes "^5.0.1" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.5.0" + ws "^7.4.6" + xml-name-validator "^3.0.0" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-bigint@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" + integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== + dependencies: + bignumber.js "^9.0.0" + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-rpc-engine@6.1.0, json-rpc-engine@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/json-rpc-engine/-/json-rpc-engine-6.1.0.tgz#bf5ff7d029e1c1bf20cb6c0e9f348dcd8be5a393" + integrity sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ== + dependencies: + "@metamask/safe-event-emitter" "^2.0.0" + eth-rpc-errors "^4.0.2" + +json-rpc-engine@^3.4.0, json-rpc-engine@^3.6.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/json-rpc-engine/-/json-rpc-engine-3.8.0.tgz#9d4ff447241792e1d0a232f6ef927302bb0c62a9" + integrity sha512-6QNcvm2gFuuK4TKU1uwfH0Qd/cOSb9c1lls0gbnIhciktIUQJwz6NQNAW4B1KiGPenv7IKu97V222Yo1bNhGuA== + dependencies: + async "^2.0.1" + babel-preset-env "^1.7.0" + babelify "^7.3.0" + json-rpc-error "^2.0.0" + promise-to-callback "^1.0.0" + safe-event-emitter "^1.0.1" + +json-rpc-engine@^5.3.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz#75758609d849e1dba1e09021ae473f3ab63161e5" + integrity sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g== + dependencies: + eth-rpc-errors "^3.0.0" + safe-event-emitter "^1.0.1" + +json-rpc-error@2.0.0, json-rpc-error@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/json-rpc-error/-/json-rpc-error-2.0.0.tgz#a7af9c202838b5e905c7250e547f1aff77258a02" + integrity sha1-p6+cICg4tekFxyUOVH8a/3cligI= + dependencies: + inherits "^2.0.1" + +json-rpc-random-id@^1.0.0, json-rpc-random-id@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz#ba49d96aded1444dbb8da3d203748acbbcdec8c8" + integrity sha1-uknZat7RRE27jaPSA3SKy7zeyMg= + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json3@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + +json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + +jsonschema@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" + integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== + +jsprim@^1.2.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz#720b97bfe7d901b927d87c3773637ae8ea48781b" + integrity sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA== + dependencies: + array-includes "^3.1.3" + object.assign "^4.1.2" + +keccak@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.1.tgz#ae30a0e94dbe43414f741375cff6d64c8bea0bff" + integrity sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + +keccak@^1.0.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-1.4.0.tgz#572f8a6dbee8e7b3aa421550f9e6408ca2186f80" + integrity sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw== + dependencies: + bindings "^1.2.1" + inherits "^2.0.3" + nan "^2.2.1" + safe-buffer "^5.1.0" + +keccak@^3.0.0, keccak@^3.0.1, keccak@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" + integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +keyvaluestorage-interface@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/keyvaluestorage-interface/-/keyvaluestorage-interface-1.0.0.tgz#13ebdf71f5284ad54be94bd1ad9ed79adad515ff" + integrity sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g== + +killable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +klaw-sync@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c" + integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ== + dependencies: + graceful-fs "^4.1.11" + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +klona@^2.0.4: + version "2.0.5" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc" + integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== + +language-subtag-registry@~0.3.2: + version "0.3.21" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a" + integrity sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg== + +language-tags@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" + integrity sha1-0yHbxNowuovzAk4ED6XBRmH5GTo= + dependencies: + language-subtag-registry "~0.3.2" + +last-call-webpack-plugin@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555" + integrity sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w== + dependencies: + lodash "^4.17.5" + webpack-sources "^1.1.0" + +level-codec@^9.0.0: + version "9.0.2" + resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.2.tgz#fd60df8c64786a80d44e63423096ffead63d8cbc" + integrity sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ== + dependencies: + buffer "^5.6.0" + +level-codec@~7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-7.0.1.tgz#341f22f907ce0f16763f24bddd681e395a0fb8a7" + integrity sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ== + +level-errors@^1.0.3: + version "1.1.2" + resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.1.2.tgz#4399c2f3d3ab87d0625f7e3676e2d807deff404d" + integrity sha512-Sw/IJwWbPKF5Ai4Wz60B52yj0zYeqzObLh8k1Tk88jVmD51cJSKWSYpRyhVIvFzZdvsPqlH5wfhp/yxdsaQH4w== + dependencies: + errno "~0.1.1" + +level-errors@^2.0.0, level-errors@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-2.0.1.tgz#2132a677bf4e679ce029f517c2f17432800c05c8" + integrity sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw== + dependencies: + errno "~0.1.1" + +level-errors@~1.0.3: + version "1.0.5" + resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.0.5.tgz#83dbfb12f0b8a2516bdc9a31c4876038e227b859" + integrity sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig== + dependencies: + errno "~0.1.1" + +level-iterator-stream@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-2.0.3.tgz#ccfff7c046dcf47955ae9a86f46dfa06a31688b4" + integrity sha512-I6Heg70nfF+e5Y3/qfthJFexhRw/Gi3bIymCoXAlijZdAcLaPuWSJs3KXyTYf23ID6g0o2QF62Yh+grOXY3Rig== + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.5" + xtend "^4.0.0" + +level-iterator-stream@~1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz#e43b78b1a8143e6fa97a4f485eb8ea530352f2ed" + integrity sha1-5Dt4sagUPm+pek9IXrjqUwNS8u0= + dependencies: + inherits "^2.0.1" + level-errors "^1.0.3" + readable-stream "^1.0.33" + xtend "^4.0.0" + +level-iterator-stream@~3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-3.0.1.tgz#2c98a4f8820d87cdacab3132506815419077c730" + integrity sha512-nEIQvxEED9yRThxvOrq8Aqziy4EGzrxSZK+QzEFAVuJvQ8glfyZ96GB6BoI4sBbLfjMXm2w4vu3Tkcm9obcY0g== + dependencies: + inherits "^2.0.1" + readable-stream "^2.3.6" + xtend "^4.0.0" + +level-mem@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-3.0.1.tgz#7ce8cf256eac40f716eb6489654726247f5a89e5" + integrity sha512-LbtfK9+3Ug1UmvvhR2DqLqXiPW1OJ5jEh0a3m9ZgAipiwpSxGj/qaVVy54RG5vAQN1nCuXqjvprCuKSCxcJHBg== + dependencies: + level-packager "~4.0.0" + memdown "~3.0.0" + +level-packager@~4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-4.0.1.tgz#7e7d3016af005be0869bc5fa8de93d2a7f56ffe6" + integrity sha512-svCRKfYLn9/4CoFfi+d8krOtrp6RoX8+xm0Na5cgXMqSyRru0AnDYdLl+YI8u1FyS6gGZ94ILLZDE5dh2but3Q== + dependencies: + encoding-down "~5.0.0" + levelup "^3.0.0" + +level-post@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/level-post/-/level-post-1.0.7.tgz#19ccca9441a7cc527879a0635000f06d5e8f27d0" + integrity sha512-PWYqG4Q00asOrLhX7BejSajByB4EmG2GaKHfj3h5UmmZ2duciXLPGYWIjBzLECFWUGOZWlm5B20h/n3Gs3HKew== + dependencies: + ltgt "^2.1.2" + +level-sublevel@6.6.4: + version "6.6.4" + resolved "https://registry.yarnpkg.com/level-sublevel/-/level-sublevel-6.6.4.tgz#f7844ae893919cd9d69ae19d7159499afd5352ba" + integrity sha512-pcCrTUOiO48+Kp6F1+UAzF/OtWqLcQVTVF39HLdZ3RO8XBoXt+XVPKZO1vVr1aUoxHZA9OtD2e1v7G+3S5KFDA== + dependencies: + bytewise "~1.1.0" + level-codec "^9.0.0" + level-errors "^2.0.0" + level-iterator-stream "^2.0.3" + ltgt "~2.1.1" + pull-defer "^0.2.2" + pull-level "^2.0.3" + pull-stream "^3.6.8" + typewiselite "~1.0.0" + xtend "~4.0.0" + +level-ws@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-0.0.0.tgz#372e512177924a00424b0b43aef2bb42496d228b" + integrity sha1-Ny5RIXeSSgBCSwtDrvK7QkltIos= + dependencies: + readable-stream "~1.0.15" + xtend "~2.1.1" + +level-ws@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-1.0.0.tgz#19a22d2d4ac57b18cc7c6ecc4bd23d899d8f603b" + integrity sha512-RXEfCmkd6WWFlArh3X8ONvQPm8jNpfA0s/36M4QzLqrLEIt1iJE9WBHLZ5vZJK6haMjJPJGJCQWfjMNnRcq/9Q== + dependencies: + inherits "^2.0.3" + readable-stream "^2.2.8" + xtend "^4.0.1" + +levelup@3.1.1, levelup@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/levelup/-/levelup-3.1.1.tgz#c2c0b3be2b4dc316647c53b42e2f559e232d2189" + integrity sha512-9N10xRkUU4dShSRRFTBdNaBxofz+PGaIZO962ckboJZiNmLuhVT6FZ6ZKAsICKfUBO76ySaYU6fJWX/jnj3Lcg== + dependencies: + deferred-leveldown "~4.0.0" + level-errors "~2.0.0" + level-iterator-stream "~3.0.0" + xtend "~4.0.0" + +levelup@^1.2.1: + version "1.3.9" + resolved "https://registry.yarnpkg.com/levelup/-/levelup-1.3.9.tgz#2dbcae845b2bb2b6bea84df334c475533bbd82ab" + integrity sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ== + dependencies: + deferred-leveldown "~1.2.1" + level-codec "~7.0.0" + level-errors "~1.0.3" + level-iterator-stream "~1.3.0" + prr "~1.0.1" + semver "~5.4.1" + xtend "~4.0.0" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +lint-staged@^11.0.1: + version "11.2.6" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-11.2.6.tgz#f477b1af0294db054e5937f171679df63baa4c43" + integrity sha512-Vti55pUnpvPE0J9936lKl0ngVeTdSZpEdTNhASbkaWX7J5R9OEifo1INBGQuGW4zmy6OG+TcWPJ3m5yuy5Q8Tg== + dependencies: + cli-truncate "2.1.0" + colorette "^1.4.0" + commander "^8.2.0" + cosmiconfig "^7.0.1" + debug "^4.3.2" + enquirer "^2.3.6" + execa "^5.1.1" + listr2 "^3.12.2" + micromatch "^4.0.4" + normalize-path "^3.0.0" + please-upgrade-node "^3.2.0" + string-argv "0.3.1" + stringify-object "3.3.0" + supports-color "8.1.1" + +listr2@^3.12.2: + version "3.13.5" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.13.5.tgz#105a813f2eb2329c4aae27373a281d610ee4985f" + integrity sha512-3n8heFQDSk+NcwBn3CgxEibZGaRzx+pC64n3YjpMD1qguV4nWus3Al+Oo3KooqFKTQEJ1v7MmnbnyyNspgx3NA== + dependencies: + cli-truncate "^2.1.0" + colorette "^2.0.16" + log-update "^4.0.0" + p-map "^4.0.0" + rfdc "^1.3.0" + rxjs "^7.4.0" + through "^2.3.8" + wrap-ansi "^7.0.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + +loader-utils@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +loader-utils@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129" + integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + +lodash.ismatch@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" + integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.template@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" + integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.templatesettings "^4.0.0" + +lodash.templatesettings@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" + integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== + dependencies: + lodash._reinterpolate "^3.0.0" + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash.values@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-4.3.0.tgz#a3a6c2b0ebecc5c2cba1c17e6e620fe81b53d347" + integrity sha1-o6bCsOvsxcLLocF+bmIP6BtT00c= + +lodash@4.17.20: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + +lodash@4.17.21, "lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.7.0, lodash@~4.17.10: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== + dependencies: + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" + +loglevel@^1.6.8, loglevel@^1.7.1, loglevel@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.0.tgz#e7ec73a57e1e7b419cb6c6ac06bf050b67356114" + integrity sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA== + +looper@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/looper/-/looper-2.0.0.tgz#66cd0c774af3d4fedac53794f742db56da8f09ec" + integrity sha1-Zs0Md0rz1P7axTeU90LbVtqPCew= + +looper@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/looper/-/looper-3.0.0.tgz#2efa54c3b1cbaba9b94aee2e5914b0be57fbb749" + integrity sha1-LvpUw7HLq6m5Su4uWRSwvlf7t0k= + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@5.1.1, lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-3.2.0.tgz#71789b3b7f5399bec8565dda38aa30d2a097efee" + integrity sha1-cXibO39Tmb7IVl3aOKow0qCX7+4= + dependencies: + pseudomap "^1.0.1" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +ltgt@^2.1.2, ltgt@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" + integrity sha1-81ypHEk/e3PaDgdJUwTxezH4fuU= + +ltgt@~2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.1.3.tgz#10851a06d9964b971178441c23c9e52698eece34" + integrity sha1-EIUaBtmWS5cReEQcI8nlJpjuzjQ= + +magic-string@^0.25.0, magic-string@^0.25.7: + version "0.25.7" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + dependencies: + sourcemap-codec "^1.4.4" + +make-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.0, make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-obj@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" + integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +memdown@^1.0.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/memdown/-/memdown-1.4.1.tgz#b4e4e192174664ffbae41361aa500f3119efe215" + integrity sha1-tOThkhdGZP+65BNhqlAPMRnv4hU= + dependencies: + abstract-leveldown "~2.7.1" + functional-red-black-tree "^1.0.1" + immediate "^3.2.3" + inherits "~2.0.1" + ltgt "~2.2.0" + safe-buffer "~5.1.1" + +memdown@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/memdown/-/memdown-3.0.0.tgz#93aca055d743b20efc37492e9e399784f2958309" + integrity sha512-tbV02LfZMWLcHcq4tw++NuqMO+FZX8tNJEiD2aNRm48ZZusVg5N8NART+dmBkepJVye986oixErf7jfXboMGMA== + dependencies: + abstract-leveldown "~5.0.0" + functional-red-black-tree "~1.0.1" + immediate "~3.2.3" + inherits "~2.0.1" + ltgt "~2.2.0" + safe-buffer "~5.1.1" + +memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +meow@^8.0.0: + version "8.1.2" + resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" + integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + +meow@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-9.0.0.tgz#cd9510bc5cac9dee7d03c73ee1f9ad959f4ea364" + integrity sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize "^1.2.0" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +merkle-patricia-tree@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-3.0.0.tgz#448d85415565df72febc33ca362b8b614f5a58f8" + integrity sha512-soRaMuNf/ILmw3KWbybaCjhx86EYeBbD8ph0edQCTed0JN/rxDt1EBN52Ajre3VyGo+91f8+/rfPIRQnnGMqmQ== + dependencies: + async "^2.6.1" + ethereumjs-util "^5.2.0" + level-mem "^3.0.1" + level-ws "^1.0.0" + readable-stream "^3.0.6" + rlp "^2.0.0" + semaphore ">=1.0.1" + +merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz#982ca1b5a0fde00eed2f6aeed1f9152860b8208a" + integrity sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g== + dependencies: + async "^1.4.2" + ethereumjs-util "^5.0.0" + level-ws "0.0.0" + levelup "^1.2.1" + memdown "^1.0.0" + readable-stream "^2.0.0" + rlp "^2.0.0" + semaphore ">=1.0.1" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +micro-base@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/micro-base/-/micro-base-0.9.0.tgz#09cfe20285bec0ea97f41dc3d10e3fba3d0266ee" + integrity sha512-4+tOMKidYT5nQ6/UNmYrGVO5PMcnJdfuR4NC8HK8s2H61B4itOhA9yrsjBdqGV7ecdtej36x3YSIfPLRmPrspg== + +microevent.ts@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" + integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.2, micromatch@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.51.0, "mime-db@>= 1.43.0 < 2": + version "1.51.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" + integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== + +mime-types@^2.1.12, mime-types@^2.1.16, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.34" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" + integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== + dependencies: + mime-db "1.51.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.4.4: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" + integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= + dependencies: + dom-walk "^0.1.0" + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +mini-css-extract-plugin@0.11.3: + version "0.11.3" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.11.3.tgz#15b0910a7f32e62ffde4a7430cfefbd700724ea6" + integrity sha512-n9BA8LonkOkW1/zn+IbLPQmovsL0wMb9yx75fMJQZf2X1Zoec9yTZtyMePcyu19wPkmFbzZZA6fLTotpFhQsOA== + dependencies: + loader-utils "^1.1.0" + normalize-url "1.9.1" + schema-utils "^1.0.0" + webpack-sources "^1.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@3.0.4, minimatch@^3.0.4, minimatch@~3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@~1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass@^2.6.0, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.1: + version "3.1.5" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.5.tgz#71f6251b0a33a49c01b3cf97ff77eda030dff732" + integrity sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw== + dependencies: + yallist "^4.0.0" + +minizlib@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + +mkdirp-promise@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" + integrity sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE= + dependencies: + mkdirp "*" + +mkdirp@*, mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +mock-fs@^4.1.0: + version "4.14.0" + resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" + integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== + +modify-values@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multibase@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b" + integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multibase@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b" + integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +multicodec@^0.5.5: + version "0.5.7" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-0.5.7.tgz#1fb3f9dd866a10a55d226e194abba2dcc1ee9ffd" + integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA== + dependencies: + varint "^5.0.0" + +multicodec@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-1.0.4.tgz#46ac064657c40380c28367c90304d8ed175a714f" + integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg== + dependencies: + buffer "^5.6.0" + varint "^5.0.0" + +multihashes@^0.4.15, multihashes@~0.4.15: + version "0.4.21" + resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5" + integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw== + dependencies: + buffer "^5.5.0" + multibase "^0.7.0" + varint "^5.0.0" + +nan@^2.12.1, nan@^2.13.2, nan@^2.14.0, nan@^2.14.2, nan@^2.2.1: + version "2.15.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" + integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== + +nano-json-stream-parser@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" + integrity sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18= + +nanoid@^3.1.30: + version "3.1.30" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.30.tgz#63f93cc548d2a113dc5dfbc63bfa09e2b9b64362" + integrity sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +napi-build-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== + +native-url@^0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/native-url/-/native-url-0.2.6.tgz#ca1258f5ace169c716ff44eccbddb674e10399ae" + integrity sha512-k4bDC87WtgrdD362gZz6zoiXQrl40kYlBmpfmSjwRO1VU0V5ccwJTlxuE72F6m3V0vc1xOf6n3UCP9QyerRqmA== + dependencies: + querystring "^0.2.0" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1, neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +next-tick@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +noble-hashes@^0.2.1: + version "0.2.2" + resolved "https://registry.yarnpkg.com/noble-hashes/-/noble-hashes-0.2.2.tgz#f174cc18ba2fd1ee8b416e4da568f6706f00bb34" + integrity sha512-5wKykPleHvJ8y6htmb4+4ecgHA0n1F4n0xtfMdXjkhqoQsZE9QTp+nriQzss9RQKJ86GUWZwXnq0CM4VW8ApSg== + +noble-secp256k1@^1.2.14: + version "1.2.14" + resolved "https://registry.yarnpkg.com/noble-secp256k1/-/noble-secp256k1-1.2.14.tgz#39429c941d51211ca40161569cee03e61d72599e" + integrity sha512-GSCXyoZBUaaPwVWdYncMEmzlSUjF9J/YeEHpklYJCyg8wPuJP3NzDx0BkiwArzINkdX2HJHvUJhL6vVWPOQQcg== + +node-abi@^2.7.0: + version "2.30.1" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.1.tgz#c437d4b1fe0e285aaf290d45b45d4d7afedac4cf" + integrity sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w== + dependencies: + semver "^5.4.1" + +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + +node-addon-api@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.2.0.tgz#117cbb5a959dff0992e1c586ae0393573e4d2a87" + integrity sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q== + +node-fetch@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + +node-fetch@^1.0.1, node-fetch@~1.7.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +node-fetch@^2.6.0, node-fetch@^2.6.1: + version "2.6.6" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.6.tgz#1751a7c01834e8e1697758732e9efb6eeadfaf89" + integrity sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA== + dependencies: + whatwg-url "^5.0.0" + +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== + +node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz#9f256b03e5826150be39c764bf51e993946d71a3" + integrity sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q== + +node-gyp@^7.1.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" + integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.3" + nopt "^5.0.0" + npmlog "^4.1.2" + request "^2.88.2" + rimraf "^3.0.2" + semver "^7.3.2" + tar "^6.0.2" + which "^2.0.2" + +node-hid@^0.7.9: + version "0.7.9" + resolved "https://registry.yarnpkg.com/node-hid/-/node-hid-0.7.9.tgz#cc0cdf1418a286a7667f0b63642b5eeb544ccd05" + integrity sha512-vJnonTqmq3frCyTumJqG4g2IZcny3ynkfmbfDfQ90P3ZhRzcWYS/Um1ux6HFmAxmkaQnrZqIYHcGpL7kdqY8jA== + dependencies: + bindings "^1.5.0" + nan "^2.13.2" + prebuild-install "^5.3.0" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + +node-notifier@^8.0.0: + version "8.0.2" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" + integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== + dependencies: + growly "^1.3.0" + is-wsl "^2.2.0" + semver "^7.3.2" + shellwords "^0.1.1" + uuid "^8.3.0" + which "^2.0.2" + +node-releases@^1.1.61: + version "1.1.77" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.77.tgz#50b0cfede855dd374e7585bf228ff34e57c1c32e" + integrity sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ== + +node-releases@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" + integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== + +node-sass@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-6.0.1.tgz#cad1ccd0ce63e35c7181f545d8b986f3a9a887fe" + integrity sha512-f+Rbqt92Ful9gX0cGtdYwjTrWAaGURgaK5rZCWOgCNyGWusFYHhbqCCBoFBeat+HKETOU02AyTxNhJV0YZf2jQ== + dependencies: + async-foreach "^0.1.3" + chalk "^1.1.1" + cross-spawn "^7.0.3" + gaze "^1.0.0" + get-stdin "^4.0.1" + glob "^7.0.3" + lodash "^4.17.15" + meow "^9.0.0" + nan "^2.13.2" + node-gyp "^7.1.0" + npmlog "^4.0.0" + request "^2.88.0" + sass-graph "2.2.5" + stdout-stream "^1.4.0" + "true-case-path" "^1.0.2" + +noop-logger@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" + integrity sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI= + +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" + integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== + dependencies: + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-url@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +normalize-url@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + +normalize-url@^4.1.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.0, npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npmlog@^4.0.0, npmlog@^4.0.1, npmlog@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +nth-check@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +nth-check@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" + integrity sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w== + dependencies: + boolbase "^1.0.0" + +null-check@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd" + integrity sha1-l33/1xdgErnsMNKjnbXPcqBDnt0= + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +number-to-bn@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" + integrity sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA= + dependencies: + bn.js "4.11.6" + strip-hex-prefix "1.0.0" + +nwsapi@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4, object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.11.0, object-inspect@^1.9.0, object-inspect@~1.11.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" + integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== + +object-is@^1.0.1: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-keys@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" + integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY= + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0, object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.entries@^1.1.0, object.entries@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" + integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +object.fromentries@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251" + integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0, object.getownpropertydescriptors@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e" + integrity sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +object.hasown@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.0.tgz#7232ed266f34d197d15cac5880232f7a4790afe5" + integrity sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.19.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +object.values@^1.1.0, object.values@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" + integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +oboe@2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.4.tgz#20c88cdb0c15371bb04119257d4fdd34b0aa49f6" + integrity sha1-IMiM2wwVNxuwQRklfU/dNLCqSfY= + dependencies: + http-https "^1.0.0" + +oboe@2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" + integrity sha1-VVQoTFQ6ImbXo48X4HOCH73jk80= + dependencies: + http-https "^1.0.0" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^7.0.2: + version "7.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +optimize-css-assets-webpack-plugin@5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.4.tgz#85883c6528aaa02e30bbad9908c92926bb52dc90" + integrity sha512-wqd6FdI2a5/FdoiCNNkEvLeA//lHHfG24Ln2Xm2qqdIk4aOlsR18jwpyOihqQ8849W3qu2DX8fOYxpvTMj+93A== + dependencies: + cssnano "^4.1.10" + last-call-webpack-plugin "^3.0.0" + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +p-cancelable@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" + integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw== + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +p-each-series@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" + integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" + +p-timeout@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" + integrity sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y= + dependencies: + p-finally "^1.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pako@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pako/-/pako-2.0.4.tgz#6cebc4bbb0b6c73b0d5b8d7e8476e2b2fbea576d" + integrity sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg== + +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +param-case@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-headers@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.4.tgz#9eaf2d02bed2d1eff494331ce3df36d7924760bf" + integrity sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw== + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse5@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +patch-package@6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.2.2.tgz#71d170d650c65c26556f0d0fbbb48d92b6cc5f39" + integrity sha512-YqScVYkVcClUY0v8fF0kWOjDYopzIM8e3bj/RU1DPeEF14+dCGm6UeOYm4jvCyxqIEQ5/eJzmbWfDWnUleFNMg== + dependencies: + "@yarnpkg/lockfile" "^1.1.0" + chalk "^2.4.2" + cross-spawn "^6.0.5" + find-yarn-workspace-root "^1.2.1" + fs-extra "^7.0.1" + is-ci "^2.0.0" + klaw-sync "^6.0.0" + minimist "^1.2.0" + rimraf "^2.6.3" + semver "^5.6.0" + slash "^2.0.0" + tmp "^0.0.33" + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pbkdf2@^3.0.17, pbkdf2@^3.0.3, pbkdf2@^3.0.9: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +penpal@3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/penpal/-/penpal-3.0.7.tgz#d252711ed93b30f1d867eb82342785b3a95f5f75" + integrity sha512-WSXiq5HnEvzvY05SHhaXcsviUmCvh4Ze8AiIZzvmdzaaYAAx4rx8c6Xq6+MaVDG/Nfve3VmGD8HyRP3CkPvPbQ== + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picocolors@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" + integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + +pify@^2.0.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" + integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pirates@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== + dependencies: + node-modules-regexp "^1.0.0" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.1.0, pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pkg-up@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + dependencies: + find-up "^3.0.0" + +please-upgrade-node@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" + integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== + dependencies: + semver-compare "^1.0.0" + +pngjs@^3.3.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" + integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== + +pnp-webpack-plugin@1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149" + integrity sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg== + dependencies: + ts-pnp "^1.1.6" + +pocket-js-core@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/pocket-js-core/-/pocket-js-core-0.0.3.tgz#1ab278b9a6a5775e2bdc3c2c2e218057774061e4" + integrity sha512-OUTEvEVutdjLT6YyldvAlSebpBueUUWg2XKxGNt5u3QqrmLpBOOBmdDnGMNJ+lEwXtko+JqgwFq+HTi4g1QDVg== + dependencies: + axios "^0.18.0" + +popper.js@1.14.3: + version "1.14.3" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.14.3.tgz#1438f98d046acf7b4d78cd502bf418ac64d4f095" + integrity sha1-FDj5jQRqz3tNeM1QK/QYrGTU8JU= + +portfinder@^1.0.26: + version "1.0.28" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" + integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.5" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-attribute-case-insensitive@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz#d93e46b504589e94ac7277b0463226c68041a880" + integrity sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^6.0.2" + +postcss-browser-comments@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-browser-comments/-/postcss-browser-comments-3.0.0.tgz#1248d2d935fb72053c8e1f61a84a57292d9f65e9" + integrity sha512-qfVjLfq7HFd2e0HW4s1dvU8X080OZdG46fFbIBFjW7US7YPDcWfRvdElvwMJr2LI6hMmD+7LnH2HcmXTs+uOig== + dependencies: + postcss "^7" + +postcss-calc@^7.0.1: + version "7.0.5" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" + integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg== + dependencies: + postcss "^7.0.27" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.2" + +postcss-color-functional-notation@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz#5efd37a88fbabeb00a2966d1e53d98ced93f74e0" + integrity sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-color-gray@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz#532a31eb909f8da898ceffe296fdc1f864be8547" + integrity sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.5" + postcss-values-parser "^2.0.0" + +postcss-color-hex-alpha@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz#a8d9ca4c39d497c9661e374b9c51899ef0f87388" + integrity sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw== + dependencies: + postcss "^7.0.14" + postcss-values-parser "^2.0.1" + +postcss-color-mod-function@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz#816ba145ac11cc3cb6baa905a75a49f903e4d31d" + integrity sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-color-rebeccapurple@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz#c7a89be872bb74e45b1e3022bfe5748823e6de77" + integrity sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-colormin@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" + integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== + dependencies: + browserslist "^4.0.0" + color "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-convert-values@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" + integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-custom-media@^7.0.8: + version "7.0.8" + resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz#fffd13ffeffad73621be5f387076a28b00294e0c" + integrity sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg== + dependencies: + postcss "^7.0.14" + +postcss-custom-properties@^8.0.11: + version "8.0.11" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz#2d61772d6e92f22f5e0d52602df8fae46fa30d97" + integrity sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA== + dependencies: + postcss "^7.0.17" + postcss-values-parser "^2.0.1" + +postcss-custom-selectors@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz#64858c6eb2ecff2fb41d0b28c9dd7b3db4de7fba" + integrity sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-dir-pseudo-class@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz#6e3a4177d0edb3abcc85fdb6fbb1c26dabaeaba2" + integrity sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-discard-comments@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" + integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== + dependencies: + postcss "^7.0.0" + +postcss-discard-duplicates@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" + integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== + dependencies: + postcss "^7.0.0" + +postcss-discard-empty@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" + integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== + dependencies: + postcss "^7.0.0" + +postcss-discard-overridden@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" + integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== + dependencies: + postcss "^7.0.0" + +postcss-double-position-gradients@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz#fc927d52fddc896cb3a2812ebc5df147e110522e" + integrity sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA== + dependencies: + postcss "^7.0.5" + postcss-values-parser "^2.0.0" + +postcss-env-function@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-2.0.2.tgz#0f3e3d3c57f094a92c2baf4b6241f0b0da5365d7" + integrity sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-flexbugs-fixes@4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz#9218a65249f30897deab1033aced8578562a6690" + integrity sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ== + dependencies: + postcss "^7.0.26" + +postcss-focus-visible@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz#477d107113ade6024b14128317ade2bd1e17046e" + integrity sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g== + dependencies: + postcss "^7.0.2" + +postcss-focus-within@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz#763b8788596cee9b874c999201cdde80659ef680" + integrity sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w== + dependencies: + postcss "^7.0.2" + +postcss-font-variant@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz#42d4c0ab30894f60f98b17561eb5c0321f502641" + integrity sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA== + dependencies: + postcss "^7.0.2" + +postcss-gap-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz#431c192ab3ed96a3c3d09f2ff615960f902c1715" + integrity sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg== + dependencies: + postcss "^7.0.2" + +postcss-image-set-function@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz#28920a2f29945bed4c3198d7df6496d410d3f288" + integrity sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-initial@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-3.0.4.tgz#9d32069a10531fe2ecafa0b6ac750ee0bc7efc53" + integrity sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg== + dependencies: + postcss "^7.0.2" + +postcss-lab-function@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz#bb51a6856cd12289ab4ae20db1e3821ef13d7d2e" + integrity sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-load-config@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" + integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== + dependencies: + cosmiconfig "^5.0.0" + import-cwd "^2.0.0" + +postcss-loader@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" + integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== + dependencies: + loader-utils "^1.1.0" + postcss "^7.0.0" + postcss-load-config "^2.0.0" + schema-utils "^1.0.0" + +postcss-logical@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-3.0.0.tgz#2495d0f8b82e9f262725f75f9401b34e7b45d5b5" + integrity sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA== + dependencies: + postcss "^7.0.2" + +postcss-media-minmax@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz#b75bb6cbc217c8ac49433e12f22048814a4f5ed5" + integrity sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw== + dependencies: + postcss "^7.0.2" + +postcss-merge-longhand@^4.0.11: + version "4.0.11" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" + integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== + dependencies: + css-color-names "0.0.4" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" + +postcss-merge-rules@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" + integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + cssnano-util-same-parent "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + vendors "^1.0.0" + +postcss-minify-font-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" + integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-gradients@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" + integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + is-color-stop "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-params@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" + integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== + dependencies: + alphanum-sort "^1.0.0" + browserslist "^4.0.0" + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + uniqs "^2.0.0" + +postcss-minify-selectors@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" + integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== + dependencies: + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +postcss-modules-extract-imports@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" + integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== + dependencies: + postcss "^7.0.5" + +postcss-modules-local-by-default@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" + integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== + dependencies: + icss-utils "^4.1.1" + postcss "^7.0.32" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" + integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" + +postcss-modules-values@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" + integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== + dependencies: + icss-utils "^4.0.0" + postcss "^7.0.6" + +postcss-nesting@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.1.tgz#b50ad7b7f0173e5b5e3880c3501344703e04c052" + integrity sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg== + dependencies: + postcss "^7.0.2" + +postcss-normalize-charset@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" + integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== + dependencies: + postcss "^7.0.0" + +postcss-normalize-display-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" + integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-positions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" + integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== + dependencies: + cssnano-util-get-arguments "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-repeat-style@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" + integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-string@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" + integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== + dependencies: + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-timing-functions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" + integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-unicode@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" + integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-url@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" + integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-whitespace@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" + integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize@8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize/-/postcss-normalize-8.0.1.tgz#90e80a7763d7fdf2da6f2f0f82be832ce4f66776" + integrity sha512-rt9JMS/m9FHIRroDDBGSMsyW1c0fkvOJPy62ggxSHUldJO7B195TqFMqIf+lY5ezpDcYOV4j86aUp3/XbxzCCQ== + dependencies: + "@csstools/normalize.css" "^10.1.0" + browserslist "^4.6.2" + postcss "^7.0.17" + postcss-browser-comments "^3.0.0" + sanitize.css "^10.0.0" + +postcss-ordered-values@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" + integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== + dependencies: + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-overflow-shorthand@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz#31ecf350e9c6f6ddc250a78f0c3e111f32dd4c30" + integrity sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g== + dependencies: + postcss "^7.0.2" + +postcss-page-break@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-2.0.0.tgz#add52d0e0a528cabe6afee8b46e2abb277df46bf" + integrity sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ== + dependencies: + postcss "^7.0.2" + +postcss-place@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-4.0.1.tgz#e9f39d33d2dc584e46ee1db45adb77ca9d1dcc62" + integrity sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-preset-env@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz#c34ddacf8f902383b35ad1e030f178f4cdf118a5" + integrity sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg== + dependencies: + autoprefixer "^9.6.1" + browserslist "^4.6.4" + caniuse-lite "^1.0.30000981" + css-blank-pseudo "^0.1.4" + css-has-pseudo "^0.10.0" + css-prefers-color-scheme "^3.1.1" + cssdb "^4.4.0" + postcss "^7.0.17" + postcss-attribute-case-insensitive "^4.0.1" + postcss-color-functional-notation "^2.0.1" + postcss-color-gray "^5.0.0" + postcss-color-hex-alpha "^5.0.3" + postcss-color-mod-function "^3.0.3" + postcss-color-rebeccapurple "^4.0.1" + postcss-custom-media "^7.0.8" + postcss-custom-properties "^8.0.11" + postcss-custom-selectors "^5.1.2" + postcss-dir-pseudo-class "^5.0.0" + postcss-double-position-gradients "^1.0.0" + postcss-env-function "^2.0.2" + postcss-focus-visible "^4.0.0" + postcss-focus-within "^3.0.0" + postcss-font-variant "^4.0.0" + postcss-gap-properties "^2.0.0" + postcss-image-set-function "^3.0.1" + postcss-initial "^3.0.0" + postcss-lab-function "^2.0.1" + postcss-logical "^3.0.0" + postcss-media-minmax "^4.0.0" + postcss-nesting "^7.0.0" + postcss-overflow-shorthand "^2.0.0" + postcss-page-break "^2.0.0" + postcss-place "^4.0.1" + postcss-pseudo-class-any-link "^6.0.0" + postcss-replace-overflow-wrap "^3.0.0" + postcss-selector-matches "^4.0.0" + postcss-selector-not "^4.0.0" + +postcss-pseudo-class-any-link@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz#2ed3eed393b3702879dec4a87032b210daeb04d1" + integrity sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-reduce-initial@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" + integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + +postcss-reduce-transforms@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" + integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== + dependencies: + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-replace-overflow-wrap@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz#61b360ffdaedca84c7c918d2b0f0d0ea559ab01c" + integrity sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw== + dependencies: + postcss "^7.0.2" + +postcss-safe-parser@5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-5.0.2.tgz#459dd27df6bc2ba64608824ba39e45dacf5e852d" + integrity sha512-jDUfCPJbKOABhwpUKcqCVbbXiloe/QXMcbJ6Iipf3sDIihEzTqRCeMBfRaOHxhBuTYqtASrI1KJWxzztZU4qUQ== + dependencies: + postcss "^8.1.0" + +postcss-selector-matches@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz#71c8248f917ba2cc93037c9637ee09c64436fcff" + integrity sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww== + dependencies: + balanced-match "^1.0.0" + postcss "^7.0.2" + +postcss-selector-not@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz#263016eef1cf219e0ade9a913780fc1f48204cbf" + integrity sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ== + dependencies: + balanced-match "^1.0.0" + postcss "^7.0.2" + +postcss-selector-parser@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" + integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== + dependencies: + dot-prop "^5.2.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" + integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== + dependencies: + cssesc "^2.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: + version "6.0.6" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea" + integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-svgo@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz#343a2cdbac9505d416243d496f724f38894c941e" + integrity sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + svgo "^1.0.0" + +postcss-unique-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" + integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== + dependencies: + alphanum-sort "^1.0.0" + postcss "^7.0.0" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz#da8b472d901da1e205b47bdc98637b9e9e550e5f" + integrity sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg== + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss@7.0.36: + version "7.0.36" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.36.tgz#056f8cffa939662a8f5905950c07d5285644dfcb" + integrity sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +postcss@^7, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.39" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" + integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== + dependencies: + picocolors "^0.2.1" + source-map "^0.6.1" + +postcss@^8.1.0: + version "8.4.4" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.4.tgz#d53d4ec6a75fd62557a66bb41978bf47ff0c2869" + integrity sha512-joU6fBsN6EIer28Lj6GDFoC/5yOZzLCfn0zHAn/MYXI7aPt4m4hK5KC5ovEZXy+lnCjmYIbQWngvju2ddyEr8Q== + dependencies: + nanoid "^3.1.30" + picocolors "^1.0.0" + source-map-js "^1.0.1" + +preact@10.4.1: + version "10.4.1" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.4.1.tgz#9b3ba020547673a231c6cf16f0fbaef0e8863431" + integrity sha512-WKrRpCSwL2t3tpOOGhf2WfTpcmbpxaWtDbdJdKdjd0aEiTkvOmS4NBkG6kzlaAHI9AkQ3iVqbFWM3Ei7mZ4o1Q== + +preact@^10.5.9: + version "10.6.2" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.6.2.tgz#c849f91df9ad36bfa64d1a5d5880977f767c69e5" + integrity sha512-ppDjurt75nSxyikpyali+uKwRl8CK9N6ntOPovGIEGQagjMLVzEgVqFEsUUyUrqyE9Ch90KE0jmFc9q2QcPLBA== + +prebuild-install@^5.3.0: + version "5.3.6" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.6.tgz#7c225568d864c71d89d07f8796042733a3f54291" + integrity sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg== + dependencies: + detect-libc "^1.0.3" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^1.0.1" + node-abi "^2.7.0" + noop-logger "^0.1.1" + npmlog "^4.0.1" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^3.0.3" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + which-pm-runs "^1.0.0" + +precond@0.2: + version "0.2.3" + resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac" + integrity sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw= + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prepend-http@^1.0.0, prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.0.tgz#a6370e2d4594e093270419d9cc47f7670488f893" + integrity sha512-FM/zAKgWTxj40rH03VxzIPdXmj39SwSjwG0heUcNFwI+EMZJnY93yAiKXM3dObIKAM5TA88werc8T/EwhB45eg== + +pretty-bytes@^5.3.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" + integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== + +pretty-error@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" + integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== + dependencies: + lodash "^4.17.20" + renderkid "^2.0.4" + +pretty-format@^26.6.0, pretty-format@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" + integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== + dependencies: + "@jest/types" "^26.6.2" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^17.0.1" + +printj@~1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222" + integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ== + +private@^0.1.6, private@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +promise-to-callback@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/promise-to-callback/-/promise-to-callback-1.0.0.tgz#5d2a749010bfb67d963598fcd3960746a68feef7" + integrity sha1-XSp0kBC/tn2WNZj805YHRqaP7vc= + dependencies: + is-fn "^1.0.0" + set-immediate-shim "^1.0.1" + +promise@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e" + integrity sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q== + dependencies: + asap "~2.0.6" + +prompts@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" + integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +prop-types@^15.7.2: + version "15.7.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" + integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.8.1" + +proxy-addr@~2.0.5: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +pseudomap@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.28, psl@^1.1.33: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pull-cat@^1.1.9: + version "1.1.11" + resolved "https://registry.yarnpkg.com/pull-cat/-/pull-cat-1.1.11.tgz#b642dd1255da376a706b6db4fa962f5fdb74c31b" + integrity sha1-tkLdElXaN2pwa220+pYvX9t0wxs= + +pull-defer@^0.2.2: + version "0.2.3" + resolved "https://registry.yarnpkg.com/pull-defer/-/pull-defer-0.2.3.tgz#4ee09c6d9e227bede9938db80391c3dac489d113" + integrity sha512-/An3KE7mVjZCqNhZsr22k1Tx8MACnUnHZZNPSJ0S62td8JtYr/AiRG42Vz7Syu31SoTLUzVIe61jtT/pNdjVYA== + +pull-level@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pull-level/-/pull-level-2.0.4.tgz#4822e61757c10bdcc7cf4a03af04c92734c9afac" + integrity sha512-fW6pljDeUThpq5KXwKbRG3X7Ogk3vc75d5OQU/TvXXui65ykm+Bn+fiktg+MOx2jJ85cd+sheufPL+rw9QSVZg== + dependencies: + level-post "^1.0.7" + pull-cat "^1.1.9" + pull-live "^1.0.1" + pull-pushable "^2.0.0" + pull-stream "^3.4.0" + pull-window "^2.1.4" + stream-to-pull-stream "^1.7.1" + +pull-live@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/pull-live/-/pull-live-1.0.1.tgz#a4ecee01e330155e9124bbbcf4761f21b38f51f5" + integrity sha1-pOzuAeMwFV6RJLu89HYfIbOPUfU= + dependencies: + pull-cat "^1.1.9" + pull-stream "^3.4.0" + +pull-pushable@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/pull-pushable/-/pull-pushable-2.2.0.tgz#5f2f3aed47ad86919f01b12a2e99d6f1bd776581" + integrity sha1-Xy867UethpGfAbEqLpnW8b13ZYE= + +pull-stream@^3.2.3, pull-stream@^3.4.0, pull-stream@^3.6.8: + version "3.6.14" + resolved "https://registry.yarnpkg.com/pull-stream/-/pull-stream-3.6.14.tgz#529dbd5b86131f4a5ed636fdf7f6af00781357ee" + integrity sha512-KIqdvpqHHaTUA2mCYcLG1ibEbu/LCKoJZsBWyv9lSYtPkJPBq8m3Hxa103xHi6D2thj5YXa0TqK3L3GUkwgnew== + +pull-window@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/pull-window/-/pull-window-2.1.4.tgz#fc3b86feebd1920c7ae297691e23f705f88552f0" + integrity sha1-/DuG/uvRkgx64pdpHiP3BfiFUvA= + dependencies: + looper "^2.0.0" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + integrity sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0= + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +q@^1.1.2, q@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qrcode@1.4.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.4.4.tgz#f0c43568a7e7510a55efc3b88d9602f71963ea83" + integrity sha512-oLzEC5+NKFou9P0bMj5+v6Z40evexeE29Z9cummZXZ9QXyMr3lphkURzxjXgPJC5azpxcshoDWV1xE46z+/c3Q== + dependencies: + buffer "^5.4.3" + buffer-alloc "^1.2.0" + buffer-from "^1.1.1" + dijkstrajs "^1.0.1" + isarray "^2.0.1" + pngjs "^3.3.0" + yargs "^13.2.4" + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +query-string@6.13.5: + version "6.13.5" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.13.5.tgz#99e95e2fb7021db90a6f373f990c0c814b3812d8" + integrity sha512-svk3xg9qHR39P3JlHuD7g3nRnyay5mHbrPctEBDUxUkHRifPHXJDhBUycdCC0NBjXoDf44Gb+IsOZL1Uwn8M/Q== + dependencies: + decode-uri-component "^0.2.0" + split-on-first "^1.0.0" + strict-uri-encode "^2.0.0" + +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" + integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +querystring@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd" + integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg== + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + +raf@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" + integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== + dependencies: + performance-now "^2.1.0" + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.0.6, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "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.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-app-polyfill@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/react-app-polyfill/-/react-app-polyfill-2.0.0.tgz#a0bea50f078b8a082970a9d853dc34b6dcc6a3cf" + integrity sha512-0sF4ny9v/B7s6aoehwze9vJNWcmCemAUYBVasscVr92+UYiEqDXOxfKjXN685mDaMRNF3WdhHQs76oTODMocFA== + dependencies: + core-js "^3.6.5" + object-assign "^4.1.1" + promise "^8.1.0" + raf "^3.4.1" + regenerator-runtime "^0.13.7" + whatwg-fetch "^3.4.1" + +react-dev-utils@^11.0.3: + version "11.0.4" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-11.0.4.tgz#a7ccb60257a1ca2e0efe7a83e38e6700d17aa37a" + integrity sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A== + dependencies: + "@babel/code-frame" "7.10.4" + address "1.1.2" + browserslist "4.14.2" + chalk "2.4.2" + cross-spawn "7.0.3" + detect-port-alt "1.1.6" + escape-string-regexp "2.0.0" + filesize "6.1.0" + find-up "4.1.0" + fork-ts-checker-webpack-plugin "4.1.6" + global-modules "2.0.0" + globby "11.0.1" + gzip-size "5.1.1" + immer "8.0.1" + is-root "2.1.0" + loader-utils "2.0.0" + open "^7.0.2" + pkg-up "3.1.0" + prompts "2.4.0" + react-error-overlay "^6.0.9" + recursive-readdir "2.2.2" + shell-quote "1.7.2" + strip-ansi "6.0.0" + text-table "0.2.0" + +react-dom@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" + integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + scheduler "^0.20.2" + +react-error-overlay@^6.0.9: + version "6.0.9" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" + integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== + +react-is@^16.7.0, react-is@^16.8.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-is@^17.0.1, react-is@^17.0.2: + version "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-redux@^7.2.6: + version "7.2.6" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.6.tgz#49633a24fe552b5f9caf58feb8a138936ddfe9aa" + integrity sha512-10RPdsz0UUrRL1NZE0ejTkucnclYSgXp5q+tB5SWx2qeG2ZJQJyymgAhwKy73yiL/13btfB6fPr+rgbMAaZIAQ== + dependencies: + "@babel/runtime" "^7.15.4" + "@types/react-redux" "^7.1.20" + hoist-non-react-statics "^3.3.2" + loose-envify "^1.4.0" + prop-types "^15.7.2" + react-is "^17.0.2" + +react-refresh@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f" + integrity sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg== + +react-scripts@4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-4.0.3.tgz#b1cafed7c3fa603e7628ba0f187787964cb5d345" + integrity sha512-S5eO4vjUzUisvkIPB7jVsKtuH2HhWcASREYWHAQ1FP5HyCv3xgn+wpILAEWkmy+A+tTNbSZClhxjT3qz6g4L1A== + dependencies: + "@babel/core" "7.12.3" + "@pmmmwh/react-refresh-webpack-plugin" "0.4.3" + "@svgr/webpack" "5.5.0" + "@typescript-eslint/eslint-plugin" "^4.5.0" + "@typescript-eslint/parser" "^4.5.0" + babel-eslint "^10.1.0" + babel-jest "^26.6.0" + babel-loader "8.1.0" + babel-plugin-named-asset-import "^0.3.7" + babel-preset-react-app "^10.0.0" + bfj "^7.0.2" + camelcase "^6.1.0" + case-sensitive-paths-webpack-plugin "2.3.0" + css-loader "4.3.0" + dotenv "8.2.0" + dotenv-expand "5.1.0" + eslint "^7.11.0" + eslint-config-react-app "^6.0.0" + eslint-plugin-flowtype "^5.2.0" + eslint-plugin-import "^2.22.1" + eslint-plugin-jest "^24.1.0" + eslint-plugin-jsx-a11y "^6.3.1" + eslint-plugin-react "^7.21.5" + eslint-plugin-react-hooks "^4.2.0" + eslint-plugin-testing-library "^3.9.2" + eslint-webpack-plugin "^2.5.2" + file-loader "6.1.1" + fs-extra "^9.0.1" + html-webpack-plugin "4.5.0" + identity-obj-proxy "3.0.0" + jest "26.6.0" + jest-circus "26.6.0" + jest-resolve "26.6.0" + jest-watch-typeahead "0.6.1" + mini-css-extract-plugin "0.11.3" + optimize-css-assets-webpack-plugin "5.0.4" + pnp-webpack-plugin "1.6.4" + postcss-flexbugs-fixes "4.2.1" + postcss-loader "3.0.0" + postcss-normalize "8.0.1" + postcss-preset-env "6.7.0" + postcss-safe-parser "5.0.2" + prompts "2.4.0" + react-app-polyfill "^2.0.0" + react-dev-utils "^11.0.3" + react-refresh "^0.8.3" + resolve "1.18.1" + resolve-url-loader "^3.1.2" + sass-loader "^10.0.5" + semver "7.3.2" + style-loader "1.3.0" + terser-webpack-plugin "4.2.3" + ts-pnp "1.2.0" + url-loader "4.1.1" + webpack "4.44.2" + webpack-dev-server "3.11.1" + webpack-manifest-plugin "2.2.0" + workbox-webpack-plugin "5.1.4" + optionalDependencies: + fsevents "^2.1.3" + +react@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" + integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.8, readable-stream@^2.2.9, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^1.0.33: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@~1.0.15: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +recursive-readdir@2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" + integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== + dependencies: + minimatch "3.0.4" + +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +redux-thunk@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.1.tgz#0dd8042cf47868f4b29699941de03c9301a75714" + integrity sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q== + +redux@^4.0.0, redux@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.1.2.tgz#140f35426d99bb4729af760afcf79eaaac407104" + integrity sha512-SH8PglcebESbd/shgf6mii6EIoRM0zrQyjcuQ+ojmfxjTtE0z9Y8pa62iA/OJ58qjP6j27uyW4kUF4jl/jd6sw== + dependencies: + "@babel/runtime" "^7.9.2" + +regenerate-unicode-properties@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326" + integrity sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.2.1, regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regenerator-runtime@^0.12.0: + version "0.12.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" + integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg== + +regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7: + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + +regenerator-transform@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q== + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + dependencies: + "@babel/runtime" "^7.8.4" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regex-parser@^2.2.11: + version "2.2.11" + resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" + integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== + +regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" + integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +regexpp@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA= + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regexpu-core@^4.7.1: + version "4.8.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.8.0.tgz#e5605ba361b67b1718478501327502f4479a98f0" + integrity sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^9.0.0" + regjsgen "^0.5.2" + regjsparser "^0.7.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= + +regjsgen@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= + dependencies: + jsesc "~0.5.0" + +regjsparser@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.7.0.tgz#a6b667b54c885e18b52554cb4960ef71187e9968" + integrity sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ== + dependencies: + jsesc "~0.5.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +renderkid@^2.0.4: + version "2.0.7" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.7.tgz#464f276a6bdcee606f4a15993f9b29fc74ca8609" + integrity sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ== + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^3.0.1" + +repeat-element@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + +request@^2.67.0, request@^2.79.0, request@^2.85.0, request@^2.88.0, request@^2.88.2: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requireindex@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.2.0.tgz#3463cdb22ee151902635aa6c9535d4de9c2ef1ef" + integrity sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +reselect@^4.0.0: + version "4.1.5" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.5.tgz#852c361247198da6756d07d9296c2b51eddb79f6" + integrity sha512-uVdlz8J7OO+ASpBYoz1Zypgx0KasCY20H+N8JD13oUMtPvSHQuscrHop4KbXrbsBcdB9Ds7lVK7eRkBIfO43vQ== + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-url-loader@^3.1.2: + version "3.1.4" + resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-3.1.4.tgz#3c16caebe0b9faea9c7cc252fa49d2353c412320" + integrity sha512-D3sQ04o0eeQEySLrcz4DsX3saHfsr8/N6tfhblxgZKXxMT2Louargg12oGNfoTRLV09GXhVUe5/qgA5vdgNigg== + dependencies: + adjust-sourcemap-loader "3.0.0" + camelcase "5.3.1" + compose-function "3.0.3" + convert-source-map "1.7.0" + es6-iterator "2.0.3" + loader-utils "1.2.3" + postcss "7.0.36" + rework "1.0.1" + rework-visit "1.0.0" + source-map "0.6.1" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.18.1.tgz#018fcb2c5b207d2a6424aee361c5a266da8f4130" + integrity sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA== + dependencies: + is-core-module "^2.0.0" + path-parse "^1.0.6" + +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.20.0, resolve@^1.3.2, resolve@^1.8.1, resolve@~1.20.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + +resolve@^2.0.0-next.3: + version "2.0.0-next.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" + integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +resumer@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" + integrity sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k= + dependencies: + through "~2.3.4" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rework-visit@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rework-visit/-/rework-visit-1.0.0.tgz#9945b2803f219e2f7aca00adb8bc9f640f842c9a" + integrity sha1-mUWygD8hni96ygCtuLyfZA+ELJo= + +rework@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rework/-/rework-1.0.1.tgz#30806a841342b54510aa4110850cd48534144aa7" + integrity sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc= + dependencies: + convert-source-map "^0.3.3" + css "^2.0.0" + +rfdc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" + integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + +rimraf@^2.5.4, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rlp@^2.0.0, rlp@^2.2.1, rlp@^2.2.2, rlp@^2.2.3, rlp@^2.2.4: + version "2.2.7" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" + integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== + dependencies: + bn.js "^5.2.0" + +rollup-plugin-babel@^4.3.3: + version "4.4.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz#d15bd259466a9d1accbdb2fe2fff17c52d030acb" + integrity sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + rollup-pluginutils "^2.8.1" + +rollup-plugin-image-files@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-image-files/-/rollup-plugin-image-files-1.4.2.tgz#0a329723bace95168a9a6efdacb51370c14fbfe5" + integrity sha512-tlydpQdGFssMWhPdWA9SFh4IGVSCzceNgJarJDID+km151IeIVzjATl8ZERNGS/QwMty25iammQqauxl1VUqDQ== + dependencies: + rollup "0.64.1" + rollup-pluginutils "2.4.1" + +rollup-plugin-terser@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz#8c650062c22a8426c64268548957463bf981b413" + integrity sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w== + dependencies: + "@babel/code-frame" "^7.5.5" + jest-worker "^24.9.0" + rollup-pluginutils "^2.8.2" + serialize-javascript "^4.0.0" + terser "^4.6.2" + +rollup-pluginutils@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.4.1.tgz#de43ab54965bbf47843599a7f3adceb723de38db" + integrity sha512-wesMQ9/172IJDIW/lYWm0vW0LiKe5Ekjws481R7z9WTRtmO59cqyM/2uUlxvf6yzm/fElFmHUobeQOYz46dZJw== + dependencies: + estree-walker "^0.6.0" + micromatch "^3.1.10" + +rollup-pluginutils@^2.8.1, rollup-pluginutils@^2.8.2: + version "2.8.2" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" + integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== + dependencies: + estree-walker "^0.6.1" + +rollup@0.64.1: + version "0.64.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.64.1.tgz#9188ee368e5fcd43ffbc00ec414e72eeb5de87ba" + integrity sha512-+ThdVXrvonJdOTzyybMBipP0uz605Z8AnzWVY3rf+cSGnLO7uNkJBlN+9jXqWOomkvumXfm/esmBpA5d53qm7g== + dependencies: + "@types/estree" "0.0.39" + "@types/node" "*" + +rollup@^1.31.1: + version "1.32.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.32.1.tgz#4480e52d9d9e2ae4b46ba0d9ddeaf3163940f9c4" + integrity sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A== + dependencies: + "@types/estree" "*" + "@types/node" "*" + acorn "^7.1.0" + +rsvp@^4.8.4: + version "4.8.5" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +rustbn.js@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" + integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== + +rxjs@^6.5.3, rxjs@^6.6.3: + version "6.6.7" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== + dependencies: + tslib "^1.9.0" + +rxjs@^7.4.0: + version "7.4.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.4.0.tgz#a12a44d7eebf016f5ff2441b87f28c9a51cebc68" + integrity sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w== + dependencies: + tslib "~2.1.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-event-emitter@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz#5b692ef22329ed8f69fdce607e50ca734f6f20af" + integrity sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg== + dependencies: + events "^3.0.0" + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sane@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== + dependencies: + "@cnakazawa/watch" "^1.0.3" + anymatch "^2.0.0" + capture-exit "^2.0.0" + exec-sh "^0.3.2" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + +sanitize.css@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/sanitize.css/-/sanitize.css-10.0.0.tgz#b5cb2547e96d8629a60947544665243b1dc3657a" + integrity sha512-vTxrZz4dX5W86M6oVWVdOVe72ZiPs41Oi7Z6Km4W5Turyz28mrXSJhhEBZoRtzJWIv3833WKVwLSDWWkEfupMg== + +sass-graph@2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.5.tgz#a981c87446b8319d96dce0671e487879bd24c2e8" + integrity sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag== + dependencies: + glob "^7.0.0" + lodash "^4.0.0" + scss-tokenizer "^0.2.3" + yargs "^13.3.2" + +sass-loader@^10.0.5: + version "10.2.0" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.2.0.tgz#3d64c1590f911013b3fa48a0b22a83d5e1494716" + integrity sha512-kUceLzC1gIHz0zNJPpqRsJyisWatGYNFRmv2CKZK2/ngMJgLqxTbXwe/hJ85luyvZkgqU3VlJ33UVF2T/0g6mw== + dependencies: + klona "^2.0.4" + loader-utils "^2.0.0" + neo-async "^2.6.2" + schema-utils "^3.0.0" + semver "^7.3.2" + +sass-loader@^12.1.0: + version "12.3.0" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-12.3.0.tgz#93278981c189c36a58cbfc37d4b9cef0cdc02871" + integrity sha512-6l9qwhdOb7qSrtOu96QQ81LVl8v6Dp9j1w3akOm0aWHyrTYtagDt5+kS32N4yq4hHk3M+rdqoRMH+lIdqvW6HA== + dependencies: + klona "^2.0.4" + neo-async "^2.6.2" + +sax@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + +scheduler@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" + integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +schema-utils@^2.6.5, schema-utils@^2.7.0, schema-utils@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.0.0, schema-utils@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +scrypt-js@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" + integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw== + +scrypt-js@^3.0.0, scrypt-js@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +scryptsy@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-1.2.1.tgz#a3225fa4b2524f802700761e2855bdf3b2d92163" + integrity sha1-oyJfpLJST4AnAHYeKFW987LZIWM= + dependencies: + pbkdf2 "^3.0.3" + +scss-tokenizer@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" + integrity sha1-jrBtualyMzOCTT9VMGQRSYR85dE= + dependencies: + js-base64 "^2.1.8" + source-map "^0.4.2" + +secp256k1@^3.0.1, secp256k1@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-3.8.0.tgz#28f59f4b01dbee9575f56a47034b7d2e3b3b352d" + integrity sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw== + dependencies: + bindings "^1.5.0" + bip66 "^1.1.5" + bn.js "^4.11.8" + create-hash "^1.2.0" + drbg.js "^1.0.1" + elliptic "^6.5.2" + nan "^2.14.0" + safe-buffer "^5.1.2" + +secp256k1@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.2.tgz#15dd57d0f0b9fdb54ac1fa1694f40e5e9a54f4a1" + integrity sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg== + dependencies: + elliptic "^6.5.2" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + +seedrandom@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.1.tgz#eb3dde015bcf55df05a233514e5df44ef9dce083" + integrity sha512-1/02Y/rUeU1CJBAGLebiC5Lbo5FnB22gQbIFFYTLkwvp1xdABZJH1sn4ZT1MzXmPpzv+Rf/Lu2NcsLJiK4rcDg== + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +selfsigned@^1.10.8: + version "1.10.11" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.11.tgz#24929cd906fe0f44b6d01fb23999a739537acbe9" + integrity sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA== + dependencies: + node-forge "^0.10.0" + +semaphore-async-await@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz#857bef5e3644601ca4b9570b87e9df5ca12974fa" + integrity sha1-hXvvXjZEYBykuVcLh+nfXKEpdPo= + +semaphore@>=1.0.1, semaphore@^1.0.3, semaphore@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa" + integrity sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA== + +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= + +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.1.1, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + +semver@~5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" + integrity sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg== + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + +serialize-javascript@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +servify@^0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/servify/-/servify-0.1.12.tgz#142ab7bee1f1d033b66d0707086085b17c06db95" + integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw== + dependencies: + body-parser "^1.16.0" + cors "^2.8.1" + express "^4.14.0" + request "^2.79.0" + xhr "^2.3.3" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.4.tgz#20e81de622d4a02588ce0c8da8973cbcf1d3138f" + integrity sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48= + +setimmediate@^1.0.4, setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.6" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" + integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^2.7.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.1.tgz#0e22e91d4575d87620620bc91308d57a77f44b5d" + integrity sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw== + dependencies: + decompress-response "^3.3.0" + once "^1.3.1" + simple-concat "^1.0.0" + +simple-get@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3" + integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA== + dependencies: + decompress-response "^4.2.0" + once "^1.3.1" + simple-concat "^1.0.0" + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sockjs-client@^1.5.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.5.2.tgz#4bc48c2da9ce4769f19dc723396b50f5c12330a3" + integrity sha512-ZzRxPBISQE7RpzlH4tKJMQbHM9pabHluk0WBaxAQ+wm/UieeBVBou0p4wVnSQGN9QmpAZygQ0cDIypWuqOFmFQ== + dependencies: + debug "^3.2.6" + eventsource "^1.0.7" + faye-websocket "^0.11.3" + inherits "^2.0.4" + json3 "^3.3.3" + url-parse "^1.5.3" + +sockjs@^0.3.21: + version "0.3.21" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.21.tgz#b34ffb98e796930b60a0cfa11904d6a339a7d417" + integrity sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw== + dependencies: + faye-websocket "^0.11.3" + uuid "^3.4.0" + websocket-driver "^0.7.4" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + dependencies: + is-plain-obj "^1.0.0" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-js@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.1.tgz#a1741c131e3c77d048252adfa24e23b908670caf" + integrity sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA== + +source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@0.5.12: + version "0.5.12" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" + integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== + dependencies: + source-map "^0.5.6" + +source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + +source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + integrity sha1-66T12pwNyZneaAMti092FzZSA2s= + dependencies: + amdefine ">=0.0.4" + +source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.7.3, source-map@~0.7.2: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +sourcemap-codec@^1.4.4: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.11" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" + integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +split-on-first@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" + integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +split2@^3.0.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + +split@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" + integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== + dependencies: + figgy-pudding "^3.5.1" + +ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + dependencies: + minipass "^3.1.1" + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +stack-utils@^2.0.2: + version "2.0.5" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" + integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== + dependencies: + escape-string-regexp "^2.0.0" + +stackframe@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" + integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA== + +standard-version@^9.3.1: + version "9.3.2" + resolved "https://registry.yarnpkg.com/standard-version/-/standard-version-9.3.2.tgz#28db8c1be66fd2d736f28f7c5de7619e64cd6dab" + integrity sha512-u1rfKP4o4ew7Yjbfycv80aNMN2feTiqseAhUhrrx2XtdQGmu7gucpziXe68Z4YfHVqlxVEzo4aUA0Iu3VQOTgQ== + dependencies: + chalk "^2.4.2" + conventional-changelog "3.1.24" + conventional-changelog-config-spec "2.1.0" + conventional-changelog-conventionalcommits "4.6.1" + conventional-recommended-bump "6.1.0" + detect-indent "^6.0.0" + detect-newline "^3.1.0" + dotgitignore "^2.1.0" + figures "^3.1.0" + find-up "^5.0.0" + fs-access "^1.0.1" + git-semver-tags "^4.0.0" + semver "^7.1.1" + stringify-package "^1.0.1" + yargs "^16.0.0" + +starknet@^1.6.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/starknet/-/starknet-1.7.0.tgz#100e53dedab6531f5e000e2f5c2042c0e38f6579" + integrity sha512-qf8l9AC2xff5mNbgkbiOCPqBASjmHASnhrTwS9FNUiJZhBMnYH3OgEOfM4GdXzxh8vINKWnX/Kor7wuQZbUZsw== + dependencies: + axios "^0.23.0" + bn.js "^5.2.0" + elliptic "^6.5.4" + ethereum-cryptography "^0.2.0" + hash.js "^1.1.7" + json-bigint "^1.0.0" + minimalistic-assert "^1.0.1" + pako "^2.0.4" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stdout-stream@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de" + integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA== + dependencies: + readable-stream "^2.0.1" + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-browserify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" + integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA== + dependencies: + inherits "~2.0.4" + readable-stream "^3.5.0" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +stream-to-pull-stream@^1.7.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/stream-to-pull-stream/-/stream-to-pull-stream-1.7.3.tgz#4161aa2d2eb9964de60bfa1af7feaf917e874ece" + integrity sha512-6sNyqJpr5dIOQdgNy/xcDWwDuzAsAwVzhzrWlAPAQ7Lkjx/rv0wgvxEyKwTq6FmNd5rjTrELt/CLmaSw7crMGg== + dependencies: + looper "^3.0.0" + pull-stream "^3.2.3" + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + +strict-uri-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" + integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= + +string-argv@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" + integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-natural-compare@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" + integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"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== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string.prototype.matchall@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz#5abb5dabc94c7b0ea2380f65ba610b3a544b15fa" + integrity sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + get-intrinsic "^1.1.1" + has-symbols "^1.0.2" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.3.1" + side-channel "^1.0.4" + +string.prototype.trim@~1.2.4: + version "1.2.5" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.5.tgz#a587bcc8bfad8cb9829a577f5de30dd170c1682c" + integrity sha512-Lnh17webJVsD6ECeovpVN17RlAKjmz4rF9S+8Y45CkMc/ufVpTkU3vZIyIC7sllQ1FCvObZnnCdNs/HXTUOTlg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-object@3.3.0, stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +stringify-package@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stringify-package/-/stringify-package-1.0.1.tgz#e5aa3643e7f74d0f28628b72f3dad5cecfc3ba85" + integrity sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg== + +strip-ansi@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +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== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-comments@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-1.0.2.tgz#82b9c45e7f05873bee53f37168af930aa368679d" + integrity sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw== + dependencies: + babel-extract-comments "^1.0.0" + babel-plugin-transform-object-rest-spread "^6.26.0" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-hex-prefix@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" + integrity sha1-DF8VX+8RUTczd96du1iNoFUA428= + dependencies: + is-hex-prefixed "1.0.0" + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +style-loader@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.3.0.tgz#828b4a3b3b7e7aa5847ce7bae9e874512114249e" + integrity sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q== + dependencies: + loader-utils "^2.0.0" + schema-utils "^2.7.0" + +stylehacks@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" + integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +supports-color@8.1.1, supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" + integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +svg-parser@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" + integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== + +svgo@^1.0.0, svgo@^1.2.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" + +swarm-js@^0.1.40: + version "0.1.40" + resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.40.tgz#b1bc7b6dcc76061f6c772203e004c11997e06b99" + integrity sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA== + dependencies: + bluebird "^3.5.0" + buffer "^5.0.5" + eth-lib "^0.1.26" + fs-extra "^4.0.2" + got "^7.1.0" + mime-types "^2.1.16" + mkdirp-promise "^5.0.1" + mock-fs "^4.1.0" + setimmediate "^1.0.5" + tar "^4.0.2" + xhr-request "^1.0.1" + +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +table@^6.0.9: + version "6.7.3" + resolved "https://registry.yarnpkg.com/table/-/table-6.7.3.tgz#255388439715a738391bd2ee4cbca89a4d05a9b7" + integrity sha512-5DkIxeA7XERBqMwJq0aHZOdMadBx4e6eDoFRuyT5VR82J0Ycg2DwM6GfA/EQAhJ+toRTaS1lIdSQCqgrmhPnlw== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tape@^4.4.0, tape@^4.6.3: + version "4.14.0" + resolved "https://registry.yarnpkg.com/tape/-/tape-4.14.0.tgz#e4d46097e129817175b90925f2385f6b1bcfa826" + integrity sha512-z0+WrUUJuG6wIdWrl4W3rTte2CR26G6qcPOj3w1hfRdcmhF3kHBhOBW9VHsPVAkz08ZmGzp7phVpDupbLzrYKQ== + dependencies: + call-bind "~1.0.2" + deep-equal "~1.1.1" + defined "~1.0.0" + dotignore "~0.1.2" + for-each "~0.3.3" + glob "~7.1.7" + has "~1.0.3" + inherits "~2.0.4" + is-regex "~1.1.3" + minimist "~1.2.5" + object-inspect "~1.11.0" + resolve "~1.20.0" + resumer "~0.0.0" + string.prototype.trim "~1.2.4" + through "~2.3.8" + +tar-fs@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tar@^4.0.2: + version "4.4.19" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" + integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== + dependencies: + chownr "^1.1.4" + fs-minipass "^1.2.7" + minipass "^2.9.0" + minizlib "^1.3.3" + mkdirp "^0.5.5" + safe-buffer "^5.2.1" + yallist "^3.1.1" + +tar@^6.0.2: + version "6.1.11" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +temp-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= + +tempy@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.3.0.tgz#6f6c5b295695a16130996ad5ab01a8bd726e8bf8" + integrity sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ== + dependencies: + temp-dir "^1.0.0" + type-fest "^0.3.1" + unique-string "^1.0.0" + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +terser-webpack-plugin@4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz#28daef4a83bd17c1db0297070adc07fc8cfc6a9a" + integrity sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ== + dependencies: + cacache "^15.0.5" + find-cache-dir "^3.3.1" + jest-worker "^26.5.0" + p-limit "^3.0.2" + schema-utils "^3.0.0" + serialize-javascript "^5.0.1" + source-map "^0.6.1" + terser "^5.3.4" + webpack-sources "^1.4.3" + +terser-webpack-plugin@^1.4.3: + version "1.4.5" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" + integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^4.0.0" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + +terser@^4.1.2, terser@^4.6.2, terser@^4.6.3: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +terser@^5.3.4: + version "5.10.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.10.0.tgz#b86390809c0389105eb0a0b62397563096ddafcc" + integrity sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA== + dependencies: + commander "^2.20.0" + source-map "~0.7.2" + source-map-support "~0.5.20" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-extensions@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== + +text-table@0.2.0, text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +throat@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" + integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== + +through2@^2.0.0, through2@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through2@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" + integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== + dependencies: + readable-stream "3" + +through@2, "through@>=2.2.7 <3", through@^2.3.8, through@~2.3.4, through@~2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +timed-out@^4.0.0, timed-out@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= + +timers-browserify@^2.0.4: + version "2.0.12" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== + dependencies: + setimmediate "^1.0.4" + +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + +tiny-invariant@^1.0.6: + version "1.2.0" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.2.0.tgz#a1141f86b672a9148c72e978a19a73b9b94a15a9" + integrity sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg== + +tiny-warning@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + +tmp@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877" + integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw== + dependencies: + rimraf "^2.6.3" + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toggle-selection@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" + integrity sha1-bkWxJj8gF/oKzH2J14sVuL932jI= + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +tough-cookie@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" + integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.1.2" + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tr46@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" + integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== + dependencies: + punycode "^2.1.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= + +trim-newlines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" + integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= + +"true-case-path@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d" + integrity sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew== + dependencies: + glob "^7.1.2" + +tryer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" + integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== + +ts-pnp@1.2.0, ts-pnp@^1.1.6: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" + integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== + +tsconfig-paths@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz#19769aca6ee8f6a1a341e38c8fa45dd9fb18899b" + integrity sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + +tslib@^1.8.1, tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.0, tslib@^2.0.3: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== + +tslib@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" + integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== + +tsutils@^3.17.1, tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl-util@^0.15.0: + version "0.15.1" + resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" + integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +tweetnacl@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" + integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" + integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" + integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== + +typedarray-to-buffer@3.1.5, typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +typewise-core@^1.2, typewise-core@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/typewise-core/-/typewise-core-1.2.0.tgz#97eb91805c7f55d2f941748fa50d315d991ef195" + integrity sha1-l+uRgFx/VdL5QXSPpQ0xXZke8ZU= + +typewise@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typewise/-/typewise-1.0.3.tgz#1067936540af97937cc5dcf9922486e9fa284651" + integrity sha1-EGeTZUCvl5N8xdz5kiSG6fooRlE= + dependencies: + typewise-core "^1.2.0" + +typewiselite@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typewiselite/-/typewiselite-1.0.0.tgz#c8882fa1bb1092c06005a97f34ef5c8508e3664e" + integrity sha1-yIgvobsQksBgBal/NO9chQjjZk4= + +u2f-api@0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/u2f-api/-/u2f-api-0.2.7.tgz#17bf196b242f6bf72353d9858e6a7566cc192720" + integrity sha512-fqLNg8vpvLOD5J/z4B6wpPg4Lvowz1nJ9xdHcCzdUPKcFE/qNCceV2gNZxSJd5vhAZemHr/K/hbzVA0zxB5mkg== + +uglify-js@^3.1.4: + version "3.14.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.14.4.tgz#68756f17d1b90b9d289341736cb9a567d6882f90" + integrity sha512-AbiSR44J0GoCeV81+oxcy/jDOElO2Bx3d0MfQCUShq7JRXaM4KtQopZsq2vFv8bCq2yMaGrw1FgygUd03RyRDA== + +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== + +unbox-primitive@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" + +underscore@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" + integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" + integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" + integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +unique-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= + dependencies: + crypto-random-string "^1.0.0" + +universalify@^0.1.0, universalify@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unorm@^1.3.3: + version "1.6.0" + resolved "https://registry.yarnpkg.com/unorm/-/unorm-1.6.0.tgz#029b289661fba714f1a9af439eb51d9b16c205af" + integrity sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1, upath@^1.1.2, upath@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-loader@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" + integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== + dependencies: + loader-utils "^2.0.0" + mime-types "^2.1.27" + schema-utils "^3.0.0" + +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= + dependencies: + prepend-http "^1.0.1" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" + +url-parse@^1.4.3, url-parse@^1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.3.tgz#71c1303d38fb6639ade183c2992c8cc0686df862" + integrity sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url-set-query@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" + integrity sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk= + +url-to-options@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" + integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +usb@^1.6.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/usb/-/usb-1.9.1.tgz#092a12455c8c21e4f0b7f4b3b0d37436f32f0ef7" + integrity sha512-T6DZbJAFNcxhY1FzaYdXhV2oqoRlvLhtSSmnbFAqyCxahUkc+g0BPZVXv7hIeQQxDCAQnr4Ia8bfOk1JlzNzzw== + dependencies: + node-addon-api "^4.2.0" + node-gyp-build "^4.3.0" + +use-wallet@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/use-wallet/-/use-wallet-0.13.1.tgz#5239d5163c235681c0440557ceb238290bc2e757" + integrity sha512-BMjKTOSIdhH/ouPTwNoVIWMIdLHK8rPdn8ERcqpV6ZcUvXni8eC2pvD2Ntk3ym6WPEmCI/xrv9hX849ak+aHug== + dependencies: + "@aragon/provided-connector" "^6.0.8" + "@typescript-eslint/parser" "^4.1.0" + "@web3-react/core" "6.1.9" + "@web3-react/fortmatic-connector" "6.1.6" + "@web3-react/frame-connector" "6.0.9" + "@web3-react/injected-connector" "6.0.7" + "@web3-react/ledger-connector" "6.1.9" + "@web3-react/portis-connector" "6.1.6" + "@web3-react/torus-connector" "6.1.7" + "@web3-react/walletconnect-connector" "6.2.4" + "@web3-react/walletlink-connector" "6.2.5" + jsbi "^3.1.4" + prop-types "^15.7.2" + regenerator-runtime "^0.13.7" + rollup-plugin-image-files "^1.4.2" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +utf-8-validate@^5.0.2: + version "5.0.7" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.7.tgz#c15a19a6af1f7ad9ec7ddc425747ca28c3644922" + integrity sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q== + dependencies: + node-gyp-build "^4.3.0" + +utf8@3.0.0, utf8@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util.promisify@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + +util.promisify@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.1.tgz#77832f57ced2c9478174149cae9b96e9918cd54b" + integrity sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + for-each "^0.3.3" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.1" + +util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +util@^0.12.0: + version "0.12.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253" + integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + safe-buffer "^5.1.2" + which-typed-array "^1.1.2" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.1.tgz#c2a30dedb3e535d72ccf82e343941a50ba8533ac" + integrity sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w= + +uuid@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + +uuid@^3.3.2, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^8.3.0: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +v8-to-istanbul@^7.0.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz#30898d1a7fa0c84d225a2c1434fb958f290883c1" + integrity sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + +valid-url@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200" + integrity sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA= + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +varint@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" + integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +vendors@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" + integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + +walker@^1.0.7, walker@~1.0.5: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +walletlink@^2.1.10: + version "2.2.8" + resolved "https://registry.yarnpkg.com/walletlink/-/walletlink-2.2.8.tgz#79ef55162a9fb41341b8063b0a6194928cd5bd9c" + integrity sha512-aEHMz5CUxO53fhwLD3+kMgtAOMCCSBXfT+sZnS4LikI7F6SBQny669I0jt2Igd7wD9zVlsdEdUmnog7ounDwjQ== + dependencies: + "@metamask/safe-event-emitter" "2.0.0" + bind-decorator "^1.0.11" + bn.js "^5.1.1" + clsx "^1.1.0" + eth-block-tracker "4.4.3" + eth-json-rpc-filters "4.2.2" + eth-rpc-errors "4.0.2" + js-sha256 "0.9.0" + json-rpc-engine "6.1.0" + keccak "^3.0.1" + preact "^10.5.9" + rxjs "^6.6.3" + stream-browserify "^3.0.0" + +watchpack-chokidar2@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" + integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.7.4: + version "1.7.5" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" + integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.1" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +web3-bzz@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.11.tgz#41bc19a77444bd5365744596d778b811880f707f" + integrity sha512-XGpWUEElGypBjeFyUhTkiPXFbDVD6Nr/S5jznE3t8cWUA0FxRf1n3n/NuIZeb0H9RkN2Ctd/jNma/k8XGa3YKg== + dependencies: + "@types/node" "^12.12.6" + got "9.6.0" + swarm-js "^0.1.40" + underscore "1.9.1" + +web3-bzz@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.6.1.tgz#8430eb3cbb69baaee4981d190b840748c37a9ec2" + integrity sha512-JbnFNbRlwwHJZPtVuCxo7rC4U4OTg+mPsyhjgPQJJhS0a6Y54OgVWYk9UA/95HqbmTJwTtX329gJoSsseEfrng== + dependencies: + "@types/node" "^12.12.6" + got "9.6.0" + swarm-js "^0.1.40" + +web3-core-helpers@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.11.tgz#84c681ed0b942c0203f3b324a245a127e8c67a99" + integrity sha512-PEPoAoZd5ME7UfbnCZBdzIerpe74GEvlwT4AjOmHeCVZoIFk7EqvOZDejJHt+feJA6kMVTdd0xzRNN295UhC1A== + dependencies: + underscore "1.9.1" + web3-eth-iban "1.2.11" + web3-utils "1.2.11" + +web3-core-helpers@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.6.1.tgz#cb21047306871f4cf0fedfece7d47ea2aa96141b" + integrity sha512-om2PZvK1uoWcgMq6JfcSx3241LEIVF6qi2JuHz2SLKiKEW5UsBUaVx0mNCmcZaiuYQCyOsLS3r33q5AdM+v8ng== + dependencies: + web3-eth-iban "1.6.1" + web3-utils "1.6.1" + +web3-core-method@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.11.tgz#f880137d1507a0124912bf052534f168b8d8fbb6" + integrity sha512-ff0q76Cde94HAxLDZ6DbdmKniYCQVtvuaYh+rtOUMB6kssa5FX0q3vPmixi7NPooFnbKmmZCM6NvXg4IreTPIw== + dependencies: + "@ethersproject/transactions" "^5.0.0-beta.135" + underscore "1.9.1" + web3-core-helpers "1.2.11" + web3-core-promievent "1.2.11" + web3-core-subscriptions "1.2.11" + web3-utils "1.2.11" + +web3-core-method@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.6.1.tgz#4ae91c639bf1da85ebfd8b99595da6a2235d7b98" + integrity sha512-szH5KyIWIaULQDBdDvevQUCHV9lsExJ/oV0ePqK+w015D2SdMPMuhii0WB+HCePaksWO+rr/GAypvV9g2T3N+w== + dependencies: + "@ethersproject/transactions" "^5.0.0-beta.135" + web3-core-helpers "1.6.1" + web3-core-promievent "1.6.1" + web3-core-subscriptions "1.6.1" + web3-utils "1.6.1" + +web3-core-promievent@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.11.tgz#51fe97ca0ddec2f99bf8c3306a7a8e4b094ea3cf" + integrity sha512-il4McoDa/Ox9Agh4kyfQ8Ak/9ABYpnF8poBLL33R/EnxLsJOGQG2nZhkJa3I067hocrPSjEdlPt/0bHXsln4qA== + dependencies: + eventemitter3 "4.0.4" + +web3-core-promievent@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.6.1.tgz#f650dea9361e2edf02691015b213fcc8ea499992" + integrity sha512-byJ5s2MQxrWdXd27pWFmujfzsTZK4ik8rDgIV1RFDFc+rHZ2nZhq+VWk7t/Nkrj7EaVXncEgTdPEHc18nx+ocQ== + dependencies: + eventemitter3 "4.0.4" + +web3-core-requestmanager@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.11.tgz#fe6eb603fbaee18530293a91f8cf26d8ae28c45a" + integrity sha512-oFhBtLfOiIbmfl6T6gYjjj9igOvtyxJ+fjS+byRxiwFJyJ5BQOz4/9/17gWR1Cq74paTlI7vDGxYfuvfE/mKvA== + dependencies: + underscore "1.9.1" + web3-core-helpers "1.2.11" + web3-providers-http "1.2.11" + web3-providers-ipc "1.2.11" + web3-providers-ws "1.2.11" + +web3-core-requestmanager@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.6.1.tgz#d9c08b0716c9cda546a0c02767b7e08deb04448a" + integrity sha512-4y7etYEUtkfflyYVBfN1oJtCbVFNhNX1omlEYzezhTnPj3/dT7n+dhUXcqvIhx9iKA13unGfpFge80XNFfcB8A== + dependencies: + util "^0.12.0" + web3-core-helpers "1.6.1" + web3-providers-http "1.6.1" + web3-providers-ipc "1.6.1" + web3-providers-ws "1.6.1" + +web3-core-subscriptions@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.11.tgz#beca908fbfcb050c16f45f3f0f4c205e8505accd" + integrity sha512-qEF/OVqkCvQ7MPs1JylIZCZkin0aKK9lDxpAtQ1F8niEDGFqn7DT8E/vzbIa0GsOjL2fZjDhWJsaW+BSoAW1gg== + dependencies: + eventemitter3 "4.0.4" + underscore "1.9.1" + web3-core-helpers "1.2.11" + +web3-core-subscriptions@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.6.1.tgz#4dfc1f74137354d4ac9eaa628aa916c5e2cc8741" + integrity sha512-WZwxsYttIojyGQ5RqxuQcKg0IJdDCFpUe4EncS3QKZwxPqWzGmgyLwE0rm7tP+Ux1waJn5CUaaoSCBxWGSun1g== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.6.1" + +web3-core@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.11.tgz#1043cacc1becb80638453cc5b2a14be9050288a7" + integrity sha512-CN7MEYOY5ryo5iVleIWRE3a3cZqVaLlIbIzDPsvQRUfzYnvzZQRZBm9Mq+ttDi2STOOzc1MKylspz/o3yq/LjQ== + dependencies: + "@types/bn.js" "^4.11.5" + "@types/node" "^12.12.6" + bignumber.js "^9.0.0" + web3-core-helpers "1.2.11" + web3-core-method "1.2.11" + web3-core-requestmanager "1.2.11" + web3-utils "1.2.11" + +web3-core@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.6.1.tgz#b41f08fdc9ea1082d15384a3d6fa93a47c3fc1b4" + integrity sha512-m+b7UfYvU5cQUAh6NRfxRzH/5B3to1AdEQi1HIQt570cDWlObOOmoO9tY6iJnI5w4acxIO19LqjDMqEJGBYyRQ== + dependencies: + "@types/bn.js" "^4.11.5" + "@types/node" "^12.12.6" + bignumber.js "^9.0.0" + web3-core-helpers "1.6.1" + web3-core-method "1.6.1" + web3-core-requestmanager "1.6.1" + web3-utils "1.6.1" + +web3-eth-abi@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.11.tgz#a887494e5d447c2926d557a3834edd66e17af9b0" + integrity sha512-PkRYc0+MjuLSgg03QVWqWlQivJqRwKItKtEpRUaxUAeLE7i/uU39gmzm2keHGcQXo3POXAbOnMqkDvOep89Crg== + dependencies: + "@ethersproject/abi" "5.0.0-beta.153" + underscore "1.9.1" + web3-utils "1.2.11" + +web3-eth-abi@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.6.1.tgz#15b937e3188570754d50bbac51a4bb0578600d1d" + integrity sha512-svhYrAlXP9XQtV7poWKydwDJq2CaNLMtmKydNXoOBLcQec6yGMP+v20pgrxF2H6wyTK+Qy0E3/5ciPOqC/VuoQ== + dependencies: + "@ethersproject/abi" "5.0.7" + web3-utils "1.6.1" + +web3-eth-accounts@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.11.tgz#a9e3044da442d31903a7ce035a86d8fa33f90520" + integrity sha512-6FwPqEpCfKIh3nSSGeo3uBm2iFSnFJDfwL3oS9pyegRBXNsGRVpgiW63yhNzL0796StsvjHWwQnQHsZNxWAkGw== + dependencies: + crypto-browserify "3.12.0" + eth-lib "0.2.8" + ethereumjs-common "^1.3.2" + ethereumjs-tx "^2.1.1" + scrypt-js "^3.0.1" + underscore "1.9.1" + uuid "3.3.2" + web3-core "1.2.11" + web3-core-helpers "1.2.11" + web3-core-method "1.2.11" + web3-utils "1.2.11" + +web3-eth-accounts@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.6.1.tgz#aeb0dfb52c4391773550569732975b471212583f" + integrity sha512-rGn3jwnuOKwaQRu4SiShz0YAQ87aVDBKs4HO43+XTCI1q1Y1jn3NOsG3BW9ZHaOckev4+zEyxze/Bsh2oEk24w== + dependencies: + "@ethereumjs/common" "^2.5.0" + "@ethereumjs/tx" "^3.3.2" + crypto-browserify "3.12.0" + eth-lib "0.2.8" + ethereumjs-util "^7.0.10" + scrypt-js "^3.0.1" + uuid "3.3.2" + web3-core "1.6.1" + web3-core-helpers "1.6.1" + web3-core-method "1.6.1" + web3-utils "1.6.1" + +web3-eth-contract@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.11.tgz#917065902bc27ce89da9a1da26e62ef663663b90" + integrity sha512-MzYuI/Rq2o6gn7vCGcnQgco63isPNK5lMAan2E51AJLknjSLnOxwNY3gM8BcKoy4Z+v5Dv00a03Xuk78JowFow== + dependencies: + "@types/bn.js" "^4.11.5" + underscore "1.9.1" + web3-core "1.2.11" + web3-core-helpers "1.2.11" + web3-core-method "1.2.11" + web3-core-promievent "1.2.11" + web3-core-subscriptions "1.2.11" + web3-eth-abi "1.2.11" + web3-utils "1.2.11" + +web3-eth-contract@1.6.1, web3-eth-contract@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.6.1.tgz#4b0a2c0b37015d70146e54c7cb3f035a58fbeec0" + integrity sha512-GXqTe3mF6kpbOAakiNc7wtJ120/gpuKMTZjuGFKeeY8aobRLfbfgKzM9IpyqVZV2v5RLuGXDuurVN2KPgtu3hQ== + dependencies: + "@types/bn.js" "^4.11.5" + web3-core "1.6.1" + web3-core-helpers "1.6.1" + web3-core-method "1.6.1" + web3-core-promievent "1.6.1" + web3-core-subscriptions "1.6.1" + web3-eth-abi "1.6.1" + web3-utils "1.6.1" + +web3-eth-ens@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.11.tgz#26d4d7f16d6cbcfff918e39832b939edc3162532" + integrity sha512-dbW7dXP6HqT1EAPvnniZVnmw6TmQEKF6/1KgAxbo8iBBYrVTMDGFQUUnZ+C4VETGrwwaqtX4L9d/FrQhZ6SUiA== + dependencies: + content-hash "^2.5.2" + eth-ens-namehash "2.0.8" + underscore "1.9.1" + web3-core "1.2.11" + web3-core-helpers "1.2.11" + web3-core-promievent "1.2.11" + web3-eth-abi "1.2.11" + web3-eth-contract "1.2.11" + web3-utils "1.2.11" + +web3-eth-ens@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.6.1.tgz#801bd5fb5237377ec2ed8517a9fe4634f2269c7a" + integrity sha512-ngprtbnoRgxg8s1wXt9nXpD3h1P+p7XnKXrp/8GdFI9uDmrbSQPRfzBw86jdZgOmy78hAnWmrHI6pBInmgi2qQ== + dependencies: + content-hash "^2.5.2" + eth-ens-namehash "2.0.8" + web3-core "1.6.1" + web3-core-helpers "1.6.1" + web3-core-promievent "1.6.1" + web3-eth-abi "1.6.1" + web3-eth-contract "1.6.1" + web3-utils "1.6.1" + +web3-eth-iban@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.11.tgz#f5f73298305bc7392e2f188bf38a7362b42144ef" + integrity sha512-ozuVlZ5jwFC2hJY4+fH9pIcuH1xP0HEFhtWsR69u9uDIANHLPQQtWYmdj7xQ3p2YT4bQLq/axKhZi7EZVetmxQ== + dependencies: + bn.js "^4.11.9" + web3-utils "1.2.11" + +web3-eth-iban@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.6.1.tgz#20bbed75723e3e9ff98e624979629d26329462b6" + integrity sha512-91H0jXZnWlOoXmc13O9NuQzcjThnWyAHyDn5Yf7u6mmKOhpJSGF/OHlkbpXt1Y4v2eJdEPaVFa+6i8aRyagE7Q== + dependencies: + bn.js "^4.11.9" + web3-utils "1.6.1" + +web3-eth-personal@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.11.tgz#a38b3942a1d87a62070ce0622a941553c3d5aa70" + integrity sha512-42IzUtKq9iHZ8K9VN0vAI50iSU9tOA1V7XU2BhF/tb7We2iKBVdkley2fg26TxlOcKNEHm7o6HRtiiFsVK4Ifw== + dependencies: + "@types/node" "^12.12.6" + web3-core "1.2.11" + web3-core-helpers "1.2.11" + web3-core-method "1.2.11" + web3-net "1.2.11" + web3-utils "1.2.11" + +web3-eth-personal@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.6.1.tgz#9b524fb9f92b51163f46920ee2663d34a4897c8d" + integrity sha512-ItsC89Ln02+irzJjK6ALcLrMZfbVUCqVbmb/ieDKJ+eLW3pNkBNwoUzaydh92d5NzxNZgNxuQWVdlFyYX2hkEw== + dependencies: + "@types/node" "^12.12.6" + web3-core "1.6.1" + web3-core-helpers "1.6.1" + web3-core-method "1.6.1" + web3-net "1.6.1" + web3-utils "1.6.1" + +web3-eth@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.11.tgz#4c81fcb6285b8caf544058fba3ae802968fdc793" + integrity sha512-REvxW1wJ58AgHPcXPJOL49d1K/dPmuw4LjPLBPStOVkQjzDTVmJEIsiLwn2YeuNDd4pfakBwT8L3bz1G1/wVsQ== + dependencies: + underscore "1.9.1" + web3-core "1.2.11" + web3-core-helpers "1.2.11" + web3-core-method "1.2.11" + web3-core-subscriptions "1.2.11" + web3-eth-abi "1.2.11" + web3-eth-accounts "1.2.11" + web3-eth-contract "1.2.11" + web3-eth-ens "1.2.11" + web3-eth-iban "1.2.11" + web3-eth-personal "1.2.11" + web3-net "1.2.11" + web3-utils "1.2.11" + +web3-eth@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.6.1.tgz#a25aba1ac213d872ecf3f81c7b4ab8072ecae224" + integrity sha512-kOV1ZgCKypSo5BQyltRArS7ZC3bRpIKAxSgzl7pUFinUb/MxfbM9KGeNxUXoCfTSErcCQJaDjcS6bSre5EMKuQ== + dependencies: + web3-core "1.6.1" + web3-core-helpers "1.6.1" + web3-core-method "1.6.1" + web3-core-subscriptions "1.6.1" + web3-eth-abi "1.6.1" + web3-eth-accounts "1.6.1" + web3-eth-contract "1.6.1" + web3-eth-ens "1.6.1" + web3-eth-iban "1.6.1" + web3-eth-personal "1.6.1" + web3-net "1.6.1" + web3-utils "1.6.1" + +web3-net@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.11.tgz#eda68ef25e5cdb64c96c39085cdb74669aabbe1b" + integrity sha512-sjrSDj0pTfZouR5BSTItCuZ5K/oZPVdVciPQ6981PPPIwJJkCMeVjD7I4zO3qDPCnBjBSbWvVnLdwqUBPtHxyg== + dependencies: + web3-core "1.2.11" + web3-core-method "1.2.11" + web3-utils "1.2.11" + +web3-net@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.6.1.tgz#7a630a804ec9f81908ae52ccbb4ebbb9530b3906" + integrity sha512-gpnqKEIwfUHh5ik7wsQFlCje1DfcmGv+Sk7LCh1hCqn++HEDQxJ/mZCrMo11ZZpZHCH7c87imdxTg96GJnRxDw== + dependencies: + web3-core "1.6.1" + web3-core-method "1.6.1" + web3-utils "1.6.1" + +web3-provider-engine@14.0.6: + version "14.0.6" + resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-14.0.6.tgz#cbdd66fe20c0136a3a495cbe40d18b6c4160d5f0" + integrity sha512-tr5cGSyxfSC/JqiUpBlJtfZpwQf1yAA8L/zy1C6fDFm0ntR974pobJ4v4676atpZne4Ze5VFy3kPPahHe9gQiQ== + dependencies: + async "^2.5.0" + backoff "^2.5.0" + clone "^2.0.0" + cross-fetch "^2.1.0" + eth-block-tracker "^3.0.0" + eth-json-rpc-infura "^3.1.0" + eth-sig-util "^1.4.2" + ethereumjs-block "^1.2.2" + ethereumjs-tx "^1.2.0" + ethereumjs-util "^5.1.5" + ethereumjs-vm "^2.3.4" + json-rpc-error "^2.0.0" + json-stable-stringify "^1.0.1" + promise-to-callback "^1.0.0" + readable-stream "^2.2.9" + request "^2.67.0" + semaphore "^1.0.3" + tape "^4.4.0" + ws "^5.1.1" + xhr "^2.2.0" + xtend "^4.0.1" + +web3-provider-engine@14.2.1: + version "14.2.1" + resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-14.2.1.tgz#ef351578797bf170e08d529cb5b02f8751329b95" + integrity sha512-iSv31h2qXkr9vrL6UZDm4leZMc32SjWJFGOp/D92JXfcEboCqraZyuExDkpxKw8ziTufXieNM7LSXNHzszYdJw== + dependencies: + async "^2.5.0" + backoff "^2.5.0" + clone "^2.0.0" + cross-fetch "^2.1.0" + eth-block-tracker "^3.0.0" + eth-json-rpc-infura "^3.1.0" + eth-sig-util "^1.4.2" + ethereumjs-block "^1.2.2" + ethereumjs-tx "^1.2.0" + ethereumjs-util "^5.1.5" + ethereumjs-vm "^2.3.4" + json-rpc-error "^2.0.0" + json-stable-stringify "^1.0.1" + promise-to-callback "^1.0.0" + readable-stream "^2.2.9" + request "^2.85.0" + semaphore "^1.0.3" + ws "^5.1.1" + xhr "^2.2.0" + xtend "^4.0.1" + +web3-provider-engine@16.0.1: + version "16.0.1" + resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-16.0.1.tgz#2600a39ede364cdc0a1fc773bf40a94f2177e605" + integrity sha512-/Eglt2aocXMBiDj7Se/lyZnNDaHBaoJlaUfbP5HkLJQC/HlGbR+3/W+dINirlJDhh7b54DzgykqY7ksaU5QgTg== + dependencies: + async "^2.5.0" + backoff "^2.5.0" + clone "^2.0.0" + cross-fetch "^2.1.0" + eth-block-tracker "^4.4.2" + eth-json-rpc-filters "^4.2.1" + eth-json-rpc-infura "^5.1.0" + eth-json-rpc-middleware "^6.0.0" + eth-rpc-errors "^3.0.0" + eth-sig-util "^1.4.2" + ethereumjs-block "^1.2.2" + ethereumjs-tx "^1.2.0" + ethereumjs-util "^5.1.5" + ethereumjs-vm "^2.3.4" + json-stable-stringify "^1.0.1" + promise-to-callback "^1.0.0" + readable-stream "^2.2.9" + request "^2.85.0" + semaphore "^1.0.3" + ws "^5.1.1" + xhr "^2.2.0" + xtend "^4.0.1" + +web3-providers-http@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.11.tgz#1cd03442c61670572d40e4dcdf1faff8bd91e7c6" + integrity sha512-psh4hYGb1+ijWywfwpB2cvvOIMISlR44F/rJtYkRmQ5jMvG4FOCPlQJPiHQZo+2cc3HbktvvSJzIhkWQJdmvrA== + dependencies: + web3-core-helpers "1.2.11" + xhr2-cookies "1.1.0" + +web3-providers-http@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.6.1.tgz#b59b14eefef23b98c327806f5f566303a73bd435" + integrity sha512-xBoKOJxu10+kO3ikamXmBfrWZ/xpQOGy0ocdp7Y81B17En5TXELwlmMXt1UlIgWiyYDhjq4OwlH/VODYqHXy3A== + dependencies: + web3-core-helpers "1.6.1" + xhr2-cookies "1.1.0" + +web3-providers-ipc@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.11.tgz#d16d6c9be1be6e0b4f4536c4acc16b0f4f27ef21" + integrity sha512-yhc7Y/k8hBV/KlELxynWjJDzmgDEDjIjBzXK+e0rHBsYEhdCNdIH5Psa456c+l0qTEU2YzycF8VAjYpWfPnBpQ== + dependencies: + oboe "2.1.4" + underscore "1.9.1" + web3-core-helpers "1.2.11" + +web3-providers-ipc@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.6.1.tgz#7ba460589d46896bb3d124288deed1b6a72d517e" + integrity sha512-anyoIZlpMzwEQI4lwylTzDrHsVp20v0QUtSTp2B5jInBinmQtyCE7vnbX20jEQ4j5uPwfJabKNtoJsk6a3O4WQ== + dependencies: + oboe "2.1.5" + web3-core-helpers "1.6.1" + +web3-providers-ws@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.11.tgz#a1dfd6d9778d840561d9ec13dd453046451a96bb" + integrity sha512-ZxnjIY1Er8Ty+cE4migzr43zA/+72AF1myzsLaU5eVgdsfV7Jqx7Dix1hbevNZDKFlSoEyq/3j/jYalh3So1Zg== + dependencies: + eventemitter3 "4.0.4" + underscore "1.9.1" + web3-core-helpers "1.2.11" + websocket "^1.0.31" + +web3-providers-ws@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.6.1.tgz#f7ee71f158971102b865e99ea7911f483e0507e9" + integrity sha512-FWMEFYb4rYFYRgSFBf/O1Ex4p/YKSlN+JydCtdlJwRimd89qm95CTfs4xGjCskwvXMjV2sarH+f1NPwJXicYpg== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.6.1" + websocket "^1.0.32" + +web3-shh@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.11.tgz#f5d086f9621c9a47e98d438010385b5f059fd88f" + integrity sha512-B3OrO3oG1L+bv3E1sTwCx66injW1A8hhwpknDUbV+sw3fehFazA06z9SGXUefuFI1kVs4q2vRi0n4oCcI4dZDg== + dependencies: + web3-core "1.2.11" + web3-core-method "1.2.11" + web3-core-subscriptions "1.2.11" + web3-net "1.2.11" + +web3-shh@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.6.1.tgz#eebaab2e5e6be80fe2585c6c094fa10a03349ca7" + integrity sha512-oP00HbAtybLCGlLOZUYXOdeB9xq88k2l0TtStvKBtmFqRt+zVk5TxEeuOnVPRxNhcA2Un8RUw6FtvgZlWStu9A== + dependencies: + web3-core "1.6.1" + web3-core-method "1.6.1" + web3-core-subscriptions "1.6.1" + web3-net "1.6.1" + +web3-utils@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.11.tgz#af1942aead3fb166ae851a985bed8ef2c2d95a82" + integrity sha512-3Tq09izhD+ThqHEaWYX4VOT7dNPdZiO+c/1QMA0s5X2lDFKK/xHJb7cyTRRVzN2LvlHbR7baS1tmQhSua51TcQ== + dependencies: + bn.js "^4.11.9" + eth-lib "0.2.8" + ethereum-bloom-filters "^1.0.6" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + underscore "1.9.1" + utf8 "3.0.0" + +web3-utils@1.6.1, web3-utils@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.6.1.tgz#befcb23922b00603ab56d8c5b4158468dc494aca" + integrity sha512-RidGKv5kOkcerI6jQqDFDoTllQQqV+rPhTzZHhmbqtFObbYpU93uc+yG1LHivRTQhA6llIx67iudc/vzisgO+w== + dependencies: + bn.js "^4.11.9" + ethereum-bloom-filters "^1.0.6" + ethereumjs-util "^7.1.0" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" + +web3@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.11.tgz#50f458b2e8b11aa37302071c170ed61cff332975" + integrity sha512-mjQ8HeU41G6hgOYm1pmeH0mRAeNKJGnJEUzDMoerkpw7QUQT4exVREgF1MYPvL/z6vAshOXei25LE/t/Bxl8yQ== + dependencies: + web3-bzz "1.2.11" + web3-core "1.2.11" + web3-eth "1.2.11" + web3-eth-personal "1.2.11" + web3-net "1.2.11" + web3-shh "1.2.11" + web3-utils "1.2.11" + +web3@^1.6.0: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.6.1.tgz#c9e68fe7b3073adddf35393441f950ec69b92735" + integrity sha512-c299lLiyb2/WOcxh7TinwvbATaMmrgNIeAzbLbmOKHI0LcwyfsB1eu2ReOIrfrCYDYRW2KAjYr7J7gHawqDNPQ== + dependencies: + web3-bzz "1.6.1" + web3-core "1.6.1" + web3-eth "1.6.1" + web3-eth-personal "1.6.1" + web3-net "1.6.1" + web3-shh "1.6.1" + web3-utils "1.6.1" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= + +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + +webpack-dev-middleware@^3.7.2: + version "3.7.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" + integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@3.11.1: + version "3.11.1" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.1.tgz#c74028bf5ba8885aaf230e48a20e8936ab8511f0" + integrity sha512-u4R3mRzZkbxQVa+MBWi2uVpB5W59H3ekZAJsQlKUTdl7Elcah2EhygTPLmeFXybQkf9i2+L0kn7ik9SnXa6ihQ== + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.3.1" + http-proxy-middleware "0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + is-absolute-url "^3.0.3" + killable "^1.0.1" + loglevel "^1.6.8" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.26" + schema-utils "^1.0.0" + selfsigned "^1.10.8" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "^0.3.21" + sockjs-client "^1.5.0" + spdy "^4.0.2" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "^13.3.2" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-manifest-plugin@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-2.2.0.tgz#19ca69b435b0baec7e29fbe90fb4015de2de4f16" + integrity sha512-9S6YyKKKh/Oz/eryM1RyLVDVmy3NSPV0JXMRhZ18fJsq+AwGxUY34X54VNwkzYcEmEkDwNxuEOboCZEebJXBAQ== + dependencies: + fs-extra "^7.0.0" + lodash ">=3.5 <5" + object.entries "^1.1.0" + tapable "^1.0.0" + +webpack-sources@^1.1.0, webpack-sources@^1.3.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@4.44.2: + version "4.44.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.2.tgz#6bfe2b0af055c8b2d1e90ed2cd9363f841266b72" + integrity sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.3.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.3" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.7.4" + webpack-sources "^1.4.1" + +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +websocket@1.0.32: + version "1.0.32" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.32.tgz#1f16ddab3a21a2d929dec1687ab21cfdc6d3dbb1" + integrity sha512-i4yhcllSP4wrpoPMU2N0TQ/q0O94LRG/eUQjEAamRltjQ1oT1PFFKOG4i877OlJgCG8rw6LrrowJp+TYCEWF7Q== + dependencies: + bufferutil "^4.0.1" + debug "^2.2.0" + es5-ext "^0.10.50" + typedarray-to-buffer "^3.1.5" + utf-8-validate "^5.0.2" + yaeti "^0.0.6" + +websocket@^1.0.31, websocket@^1.0.32: + version "1.0.34" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" + integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== + dependencies: + bufferutil "^4.0.1" + debug "^2.2.0" + es5-ext "^0.10.50" + typedarray-to-buffer "^3.1.5" + utf-8-validate "^5.0.2" + yaeti "^0.0.6" + +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-fetch@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" + integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng== + +whatwg-fetch@>=0.10.0, whatwg-fetch@^3.4.1: + version "3.6.2" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" + integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +whatwg-url@^8.0.0, whatwg-url@^8.5.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" + integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== + dependencies: + lodash "^4.7.0" + tr46 "^2.1.0" + webidl-conversions "^6.1.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which-pm-runs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" + integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= + +which-typed-array@^1.1.2: + version "1.1.7" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.7.tgz#2761799b9a22d4b8660b3c1b40abaa7739691793" + integrity sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-abstract "^1.18.5" + foreach "^2.0.5" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.7" + +which@^1.2.9, which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +word-wrap@^1.2.3, word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +workbox-background-sync@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-5.1.4.tgz#5ae0bbd455f4e9c319e8d827c055bb86c894fd12" + integrity sha512-AH6x5pYq4vwQvfRDWH+vfOePfPIYQ00nCEB7dJRU1e0n9+9HMRyvI63FlDvtFT2AvXVRsXvUt7DNMEToyJLpSA== + dependencies: + workbox-core "^5.1.4" + +workbox-broadcast-update@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-5.1.4.tgz#0eeb89170ddca7f6914fa3523fb14462891f2cfc" + integrity sha512-HTyTWkqXvHRuqY73XrwvXPud/FN6x3ROzkfFPsRjtw/kGZuZkPzfeH531qdUGfhtwjmtO/ZzXcWErqVzJNdXaA== + dependencies: + workbox-core "^5.1.4" + +workbox-build@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-5.1.4.tgz#23d17ed5c32060c363030c8823b39d0eabf4c8c7" + integrity sha512-xUcZn6SYU8usjOlfLb9Y2/f86Gdo+fy1fXgH8tJHjxgpo53VVsqRX0lUDw8/JuyzNmXuo8vXX14pXX2oIm9Bow== + dependencies: + "@babel/core" "^7.8.4" + "@babel/preset-env" "^7.8.4" + "@babel/runtime" "^7.8.4" + "@hapi/joi" "^15.1.0" + "@rollup/plugin-node-resolve" "^7.1.1" + "@rollup/plugin-replace" "^2.3.1" + "@surma/rollup-plugin-off-main-thread" "^1.1.1" + common-tags "^1.8.0" + fast-json-stable-stringify "^2.1.0" + fs-extra "^8.1.0" + glob "^7.1.6" + lodash.template "^4.5.0" + pretty-bytes "^5.3.0" + rollup "^1.31.1" + rollup-plugin-babel "^4.3.3" + rollup-plugin-terser "^5.3.1" + source-map "^0.7.3" + source-map-url "^0.4.0" + stringify-object "^3.3.0" + strip-comments "^1.0.2" + tempy "^0.3.0" + upath "^1.2.0" + workbox-background-sync "^5.1.4" + workbox-broadcast-update "^5.1.4" + workbox-cacheable-response "^5.1.4" + workbox-core "^5.1.4" + workbox-expiration "^5.1.4" + workbox-google-analytics "^5.1.4" + workbox-navigation-preload "^5.1.4" + workbox-precaching "^5.1.4" + workbox-range-requests "^5.1.4" + workbox-routing "^5.1.4" + workbox-strategies "^5.1.4" + workbox-streams "^5.1.4" + workbox-sw "^5.1.4" + workbox-window "^5.1.4" + +workbox-cacheable-response@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-5.1.4.tgz#9ff26e1366214bdd05cf5a43da9305b274078a54" + integrity sha512-0bfvMZs0Of1S5cdswfQK0BXt6ulU5kVD4lwer2CeI+03czHprXR3V4Y8lPTooamn7eHP8Iywi5QjyAMjw0qauA== + dependencies: + workbox-core "^5.1.4" + +workbox-core@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-5.1.4.tgz#8bbfb2362ecdff30e25d123c82c79ac65d9264f4" + integrity sha512-+4iRQan/1D8I81nR2L5vcbaaFskZC2CL17TLbvWVzQ4qiF/ytOGF6XeV54pVxAvKUtkLANhk8TyIUMtiMw2oDg== + +workbox-expiration@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-5.1.4.tgz#92b5df461e8126114943a3b15c55e4ecb920b163" + integrity sha512-oDO/5iC65h2Eq7jctAv858W2+CeRW5e0jZBMNRXpzp0ZPvuT6GblUiHnAsC5W5lANs1QS9atVOm4ifrBiYY7AQ== + dependencies: + workbox-core "^5.1.4" + +workbox-google-analytics@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-5.1.4.tgz#b3376806b1ac7d7df8418304d379707195fa8517" + integrity sha512-0IFhKoEVrreHpKgcOoddV+oIaVXBFKXUzJVBI+nb0bxmcwYuZMdteBTp8AEDJacENtc9xbR0wa9RDCnYsCDLjA== + dependencies: + workbox-background-sync "^5.1.4" + workbox-core "^5.1.4" + workbox-routing "^5.1.4" + workbox-strategies "^5.1.4" + +workbox-navigation-preload@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-5.1.4.tgz#30d1b720d26a05efc5fa11503e5cc1ed5a78902a" + integrity sha512-Wf03osvK0wTflAfKXba//QmWC5BIaIZARU03JIhAEO2wSB2BDROWI8Q/zmianf54kdV7e1eLaIEZhth4K4MyfQ== + dependencies: + workbox-core "^5.1.4" + +workbox-precaching@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-5.1.4.tgz#874f7ebdd750dd3e04249efae9a1b3f48285fe6b" + integrity sha512-gCIFrBXmVQLFwvAzuGLCmkUYGVhBb7D1k/IL7pUJUO5xacjLcFUaLnnsoVepBGAiKw34HU1y/YuqvTKim9qAZA== + dependencies: + workbox-core "^5.1.4" + +workbox-range-requests@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-5.1.4.tgz#7066a12c121df65bf76fdf2b0868016aa2bab859" + integrity sha512-1HSujLjgTeoxHrMR2muDW2dKdxqCGMc1KbeyGcmjZZAizJTFwu7CWLDmLv6O1ceWYrhfuLFJO+umYMddk2XMhw== + dependencies: + workbox-core "^5.1.4" + +workbox-routing@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-5.1.4.tgz#3e8cd86bd3b6573488d1a2ce7385e547b547e970" + integrity sha512-8ljknRfqE1vEQtnMtzfksL+UXO822jJlHTIR7+BtJuxQ17+WPZfsHqvk1ynR/v0EHik4x2+826Hkwpgh4GKDCw== + dependencies: + workbox-core "^5.1.4" + +workbox-strategies@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-5.1.4.tgz#96b1418ccdfde5354612914964074d466c52d08c" + integrity sha512-VVS57LpaJTdjW3RgZvPwX0NlhNmscR7OQ9bP+N/34cYMDzXLyA6kqWffP6QKXSkca1OFo/v6v7hW7zrrguo6EA== + dependencies: + workbox-core "^5.1.4" + workbox-routing "^5.1.4" + +workbox-streams@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-5.1.4.tgz#05754e5e3667bdc078df2c9315b3f41210d8cac0" + integrity sha512-xU8yuF1hI/XcVhJUAfbQLa1guQUhdLMPQJkdT0kn6HP5CwiPOGiXnSFq80rAG4b1kJUChQQIGPrq439FQUNVrw== + dependencies: + workbox-core "^5.1.4" + workbox-routing "^5.1.4" + +workbox-sw@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-5.1.4.tgz#2bb34c9f7381f90d84cef644816d45150011d3db" + integrity sha512-9xKnKw95aXwSNc8kk8gki4HU0g0W6KXu+xks7wFuC7h0sembFnTrKtckqZxbSod41TDaGh+gWUA5IRXrL0ECRA== + +workbox-webpack-plugin@5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-5.1.4.tgz#7bfe8c16e40fe9ed8937080ac7ae9c8bde01e79c" + integrity sha512-PZafF4HpugZndqISi3rZ4ZK4A4DxO8rAqt2FwRptgsDx7NF8TVKP86/huHquUsRjMGQllsNdn4FNl8CD/UvKmQ== + dependencies: + "@babel/runtime" "^7.5.5" + fast-json-stable-stringify "^2.0.0" + source-map-url "^0.4.0" + upath "^1.1.2" + webpack-sources "^1.3.0" + workbox-build "^5.1.4" + +workbox-window@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-5.1.4.tgz#2740f7dea7f93b99326179a62f1cc0ca2c93c863" + integrity sha512-vXQtgTeMCUq/4pBWMfQX8Ee7N2wVC4Q7XYFqLnfbXJ2hqew/cU1uMTD2KqGEgEpE4/30luxIxgE+LkIa8glBYw== + dependencies: + workbox-core "^5.1.4" + +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + +worker-rpc@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/worker-rpc/-/worker-rpc-0.1.1.tgz#cb565bd6d7071a8f16660686051e969ad32f54d5" + integrity sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg== + dependencies: + microevent.ts "~0.1.1" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + 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== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.1.2.tgz#c672d1629de8bb27a9699eb599be47aeeedd8f73" + integrity sha512-gftXq3XI81cJCgkUiAVixA0raD9IVmXqsylCrjRygw4+UOOGzPoxnQ6r/CnVL9i+mDncJo94tSkyrtuuQVBmrg== + dependencies: + async-limiter "^1.0.0" + +ws@7.5.3: + version "7.5.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" + integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== + +ws@^3.0.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + +ws@^5.1.1: + version "5.2.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.3.tgz#05541053414921bc29c63bee14b8b0dd50b07b3d" + integrity sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA== + dependencies: + async-limiter "~1.0.0" + +ws@^6.2.1: + version "6.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" + integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== + dependencies: + async-limiter "~1.0.0" + +ws@^7.4.6: + version "7.5.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b" + integrity sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA== + +xhr-request-promise@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" + integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg== + dependencies: + xhr-request "^1.1.0" + +xhr-request@^1.0.1, xhr-request@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xhr-request/-/xhr-request-1.1.0.tgz#f4a7c1868b9f198723444d82dcae317643f2e2ed" + integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== + dependencies: + buffer-to-arraybuffer "^0.0.5" + object-assign "^4.1.1" + query-string "^5.0.1" + simple-get "^2.7.0" + timed-out "^4.0.1" + url-set-query "^1.0.0" + xhr "^2.0.4" + +xhr2-cookies@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz#7d77449d0999197f155cb73b23df72505ed89d48" + integrity sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg= + dependencies: + cookiejar "^2.1.1" + +xhr@^2.0.4, xhr@^2.2.0, xhr@^2.3.3: + version "2.6.0" + resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" + integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== + dependencies: + global "~4.4.0" + is-function "^1.0.1" + parse-headers "^2.0.0" + xtend "^4.0.0" + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +xmlhttprequest@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" + integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw= + +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +xtend@~2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" + integrity sha1-bv7MKk2tjmlixJAbM3znuoe10os= + dependencies: + object-keys "~0.4.0" + +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yaeti@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" + integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc= + +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.0, yaml@^1.7.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^20.2.2, yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs@^13.2.4, yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yargs@^15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +yargs@^16.0.0, yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From ec2f16f2d3eca9a99cfa72d70df32701ec59a397 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Sun, 5 Dec 2021 14:45:27 +0200 Subject: [PATCH 002/211] feat(wallet): load L1 tokens and balances [skip ci] (#1) --- .github/workflows/push.yml | 2 +- src/components/Features/Login/Login.js | 2 +- .../Features/SelectToken/SelectToken.js | 10 +-- .../SelectToken/SelectToken.module.scss | 15 +--- .../SelectTokenRow/SelectTokenRow.js | 15 +++- .../SelectTokenRow/SelectTokenRow.module.scss | 3 +- .../Transfer/TokenSelector/TokenSelector.js | 4 +- .../Features/Wallet/WalletsProvider.js | 2 - src/config/config.json | 6 ++ src/config/supported-chains.json | 1 - src/config/tokens/ethereum.goerli.json | 5 ++ src/config/tokens/starknet.goerli.json | 8 +- src/hooks/useTokens.js | 77 +++++++++++++++++++ src/index.js | 15 ++-- src/styles/colors.module.scss | 1 + src/utils/wallet.js | 2 +- 16 files changed, 133 insertions(+), 35 deletions(-) create mode 100644 src/config/config.json delete mode 100644 src/config/supported-chains.json create mode 100644 src/hooks/useTokens.js diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 6b3f100c..19dcbd0d 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -10,7 +10,7 @@ jobs: release-version: name: Releasing a version runs-on: ubuntu-latest - if: ${{ !contains(github.event.head_commit.message, 'chore(release)') }} + if: ${{ !contains(github.event.head_commit.message, 'chore') || github.ref_name == 'master' }} steps: - uses: actions/checkout@v2 with: diff --git a/src/components/Features/Login/Login.js b/src/components/Features/Login/Login.js index d0d7c97a..59c051f8 100644 --- a/src/components/Features/Login/Login.js +++ b/src/components/Features/Login/Login.js @@ -59,7 +59,7 @@ export const Login = () => { } const {config} = walletHandler; setSelectedWalletName(config.name); - return connectWallet(walletHandler); + return connectWallet(config); }; const onDownloadClick = () => { diff --git a/src/components/Features/SelectToken/SelectToken.js b/src/components/Features/SelectToken/SelectToken.js index 1dcbfa71..b89e28f3 100644 --- a/src/components/Features/SelectToken/SelectToken.js +++ b/src/components/Features/SelectToken/SelectToken.js @@ -3,6 +3,7 @@ import React, {useEffect, useState} from 'react'; import EthereumLogo from '../../../assets/svg/tokens/eth.svg'; import StarkNetLogo from '../../../assets/svg/tokens/starknet.svg'; import {useColors} from '../../../hooks'; +import {useTokens} from '../../../hooks/useTokens'; import {BackButton, Loading, Menu, MenuTitle} from '../../UI'; import {LoadingSize} from '../../UI/Loading/Loading.enums'; import {useBridgeActions} from '../Bridge/Bridge.hooks'; @@ -13,8 +14,7 @@ import {TITLE_TXT} from './SelectToken.strings'; import {SelectTokenList} from './SelectTokenList/SelectTokenList'; export const SelectToken = () => { - const isLoading = true; - const tokensData = []; + const {isLoading, tokensData} = useTokens(); const {colorBeta} = useColors(); const {showTransferMenu} = useBridgeActions(); const {isEthereum, fromNetwork} = useTransferData(); @@ -36,9 +36,9 @@ export const SelectToken = () => { <BackButton onClick={showTransferMenu} /> <MenuTitle text={TITLE_TXT} /> <MenuTitle color={colorBeta} text={fromNetwork.name} /> - <div> + <> {isLoading && ( - <div className="center"> + <div className={styles.loadingContainer}> <Loading size={LoadingSize.EXTRA_LARGE} /> </div> )} @@ -51,7 +51,7 @@ export const SelectToken = () => { <SelectTokenList tokens={searchTokens} onClick={onTokenSelect} /> </> )} - </div> + </> <div className={styles.background} style={{ diff --git a/src/components/Features/SelectToken/SelectToken.module.scss b/src/components/Features/SelectToken/SelectToken.module.scss index 15b01277..807c6383 100644 --- a/src/components/Features/SelectToken/SelectToken.module.scss +++ b/src/components/Features/SelectToken/SelectToken.module.scss @@ -6,7 +6,8 @@ $network-color: $--color-beta; .selectToken { padding: 0 20px; position: relative; - min-height: 400px; + display: flex; + flex-direction: column; .background { content: ''; @@ -21,15 +22,7 @@ $network-color: $--color-beta; pointer-events: none; } - .title { - font-size: 26px; - font-weight: bold; - color: $color; - margin: 20px 0; - - span { - color: $network-color; - text-transform: capitalize; - } + .loadingContainer { + margin: 50px auto; } } diff --git a/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js b/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js index 30e96345..25dd0a7d 100644 --- a/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js +++ b/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js @@ -2,8 +2,9 @@ import PropTypes from 'prop-types'; import React from 'react'; import {formatBalance} from '../../../../utils'; -import {CryptoLogo} from '../../../UI'; +import {CryptoLogo, Loading} from '../../../UI'; import {CryptoLogoSize} from '../../../UI/CryptoLogo/CryptoLogo.enums'; +import {LoadingSize} from '../../../UI/Loading/Loading.enums'; import styles from './SelectTokenRow.module.scss'; export const SelectTokenRow = ({name, balance, symbol, onClick}) => { @@ -19,9 +20,15 @@ export const SelectTokenRow = ({name, balance, symbol, onClick}) => { </div> </div> <div className={styles.right}> - <div className={styles.balance}> - {formatBalance(balance)} {symbol} - </div> + <> + {typeof balance === 'number' ? ( + <div className={styles.balance}> + {formatBalance(balance)} {symbol} + </div> + ) : ( + <Loading size={LoadingSize.SMALL} /> + )} + </> </div> </div> </div> diff --git a/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.module.scss b/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.module.scss index 8cdbd882..b918c222 100644 --- a/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.module.scss +++ b/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.module.scss @@ -50,13 +50,14 @@ $balance-color-hover: $--color-white; } .right { + margin: 0 10px; + .balance { float: right; font-size: 18px; color: $balance-color; text-transform: uppercase; transition: 0.4s ease-in-out; - margin: 0 10px; } } } diff --git a/src/components/Features/Transfer/TokenSelector/TokenSelector.js b/src/components/Features/Transfer/TokenSelector/TokenSelector.js index 04685457..7c345599 100644 --- a/src/components/Features/Transfer/TokenSelector/TokenSelector.js +++ b/src/components/Features/Transfer/TokenSelector/TokenSelector.js @@ -9,7 +9,7 @@ import {LoadingSize} from '../../../UI/Loading/Loading.enums'; import styles from './TokenSelector.module.scss'; export const TokenSelector = ({tokenData, onClick}) => { - const {colorAlpha5} = useColors(); + const {colorAlpha3} = useColors(); const isLoading = useIsLoading(tokenData.symbol); return ( @@ -17,7 +17,7 @@ export const TokenSelector = ({tokenData, onClick}) => { {isLoading && <Loading size={LoadingSize.SMALL} />} {!isLoading && ( <> - <CryptoLogo color={colorAlpha5} size={CryptoLogoSize.SMALL} symbol={tokenData?.symbol} /> + <CryptoLogo color={colorAlpha3} size={CryptoLogoSize.SMALL} symbol={tokenData?.symbol} /> {tokenData.symbol} </> )} diff --git a/src/components/Features/Wallet/WalletsProvider.js b/src/components/Features/Wallet/WalletsProvider.js index e01e1bd2..feaa21c7 100644 --- a/src/components/Features/Wallet/WalletsProvider.js +++ b/src/components/Features/Wallet/WalletsProvider.js @@ -135,7 +135,6 @@ export const WalletsProvider = ({children}) => { }; // Dispatchers - const setActiveWallet = walletData => { dispatch({ type: actions.SET_ACTIVE_WALLET_ACTION, @@ -163,7 +162,6 @@ export const WalletsProvider = ({children}) => { }; // context - const context = { ...activeWallet(), connectWallet, diff --git a/src/config/config.json b/src/config/config.json new file mode 100644 index 00000000..510c8f4d --- /dev/null +++ b/src/config/config.json @@ -0,0 +1,6 @@ +{ + "autoConnect": false, + "pollBalanceInterval": 2000, + "pollBlockNumberInterval": 5000, + "supportedChainIds": [1, 5] +} diff --git a/src/config/supported-chains.json b/src/config/supported-chains.json deleted file mode 100644 index 39485404..00000000 --- a/src/config/supported-chains.json +++ /dev/null @@ -1 +0,0 @@ -[1, 5] diff --git a/src/config/tokens/ethereum.goerli.json b/src/config/tokens/ethereum.goerli.json index 7346552d..fa2ba0cd 100644 --- a/src/config/tokens/ethereum.goerli.json +++ b/src/config/tokens/ethereum.goerli.json @@ -8,5 +8,10 @@ "address": "0x0b788e8d159c1959bd8dde838790df79d015ee57", "name": "Dai Stablecoin", "symbol": "DAI" + }, + { + "address": "0xe4C2493C66e068D65Cf1C38a2d7bDa25d9f08980", + "name": "ERC20 StarkNet Token", + "symbol": "E20ST" } ] diff --git a/src/config/tokens/starknet.goerli.json b/src/config/tokens/starknet.goerli.json index fe51488c..347fa9e8 100644 --- a/src/config/tokens/starknet.goerli.json +++ b/src/config/tokens/starknet.goerli.json @@ -1 +1,7 @@ -[] +[ + { + "address": "0x06ebb42ca1b237cd92fcc677d9ff02ffadcc3c66d5748f6ebd795b531c51266c", + "name": "ERC20 StarkNet Token", + "symbol": "E20ST" + } +] diff --git a/src/hooks/useTokens.js b/src/hooks/useTokens.js new file mode 100644 index 00000000..07dbbee6 --- /dev/null +++ b/src/hooks/useTokens.js @@ -0,0 +1,77 @@ +import {useEffect, useState} from 'react'; + +import {useTransferData} from '../components/Features/Transfer/Transfer.hooks'; +import {useWallets} from '../components/Features/Wallet/Wallet.hooks'; +import {createERC20Contract} from '../contracts'; +import {ChainType, NetworkType} from '../enums'; +import {web3} from '../web3'; + +export const useTokens = () => { + const {action, isEthereum} = useTransferData(); + const {account, chainName} = useWallets(); + const [tokensData, setTokensData] = useState([]); + const [isLoading, setIsLoading] = useState(true); + const [error, setError] = useState(null); + + useEffect(async () => { + setIsLoading(true); + setError(null); + try { + let tokens = []; + if (isEthereum) { + tokens = await getL1Tokens(); + readBalances(tokens, getL1TokenBalance); + } else { + // TODO + } + setTokensData(tokens); + } catch (err) { + setError(err); + } finally { + setIsLoading(false); + } + }, [action]); + + const getL1Tokens = async () => { + const fileName = + chainName === ChainType.MAIN.name ? 'ethereum.json' : `ethereum.${chainName}.json`; + return [NetworkType.ETHEREUM, ...(await import(`../config/tokens/${fileName}`)).default]; + }; + + const getL1TokenBalance = async tokens => { + let balance; + const {symbol, address} = tokens; + if (symbol === NetworkType.ETHEREUM.symbol) { + balance = await web3.eth.getBalance(account); + } else { + const contract = createERC20Contract(address); + balance = await contract.methods.balanceOf(account).call(); + } + return formatBalance(balance); + }; + + const formatBalance = balance => Number(web3.utils.fromWei(balance)); + + const readBalances = (tokens, getBalanceHandler) => { + const promises = []; + tokens.forEach(token => promises.push(getBalanceHandler(token))); + waitForBalance(tokens, promises); + }; + + const waitForBalance = (tokens, promises) => { + Promise.all(promises).then(balances => { + const tokensWithBalance = []; + balances.forEach((balance, index) => { + const token = {...tokens[index], balance}; + tokensWithBalance.push(token); + }); + setTokensData(tokensWithBalance); + }); + }; + + return { + error, + isLoading, + tokensData + }; +}; diff --git a/src/index.js b/src/index.js index a90c4163..7c4d3571 100644 --- a/src/index.js +++ b/src/index.js @@ -6,21 +6,26 @@ import {UseWalletProvider} from 'use-wallet'; import {App} from './App'; import {ModalProvider} from './components/Features'; import {WalletsProvider} from './components/Features/Wallet/WalletsProvider'; -import supportedChains from './config/supported-chains.json'; +import { + autoConnect, + pollBalanceInterval, + pollBlockNumberInterval, + supportedChainIds +} from './config/config.json'; import './index.scss'; import {store} from './store/store'; ReactDOM.render( <Provider store={store}> <UseWalletProvider - autoConnect={false} + autoConnect={autoConnect} connectors={{ injected: { - chainId: supportedChains + chainId: supportedChainIds } }} - pollBalanceInterval={2000} - pollBlockNumberInterval={5000} + pollBalanceInterval={pollBalanceInterval} + pollBlockNumberInterval={pollBlockNumberInterval} > <WalletsProvider> <App /> diff --git a/src/styles/colors.module.scss b/src/styles/colors.module.scss index 09e8a6d6..ae78c4c8 100644 --- a/src/styles/colors.module.scss +++ b/src/styles/colors.module.scss @@ -21,5 +21,6 @@ $--color-error: #da4646; colorBlack: $--color-black; colorWhite: $--color-white; colorBeta: $--color-beta; + colorAlpha3: $--color-alpha-3; colorAlpha5: $--color-alpha-5; } diff --git a/src/utils/wallet.js b/src/utils/wallet.js index 031146e7..5dd9e79b 100644 --- a/src/utils/wallet.js +++ b/src/utils/wallet.js @@ -1,5 +1,5 @@ export const formatBalance = balance => { - return !Math.ceil(balance) ? 0 : balance.toFixed(5); + return parseFloat(balance.toFixed(5)); }; export const formatAddress = account => { From dadae598b980860bf2c29d894bf27d6ca9d77a2b Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Sun, 5 Dec 2021 16:47:10 +0200 Subject: [PATCH 003/211] chore: remove unnecessary return statements [skip ci] --- src/App.js | 16 +++---- src/components/Containers/Footer/Footer.js | 16 +++---- .../Account/TransferLog/TransferLog.js | 32 ++++++------- .../Features/Bridge/Bridge.hooks.js | 20 ++++---- .../ModalProvider/ModalProvider.hooks.js | 8 ++-- .../SelectTokenList/SelectTokenList.js | 32 ++++++------- .../SelectTokenRow/SelectTokenRow.js | 46 +++++++++---------- .../Features/Transfer/MaxButton/MaxButton.js | 12 ++--- .../Transfer/NetworkMenu/NetworkMenu.js | 20 ++++---- .../Transfer/NetworkTitle/NetworkTitle.js | 14 +++--- .../Transfer/TokenInput/TokenInput.js | 34 +++++++------- .../Features/Transfer/Transfer.hooks.js | 30 ++++++------ .../TransferMenuTab/TransferMenuTab.js | 15 ++---- .../Features/Wallet/Wallet.hooks.js | 4 +- .../Wallet/WalletLogin/WalletLogin.js | 28 ++++++----- src/components/UI/BackButton/BackButton.js | 12 ++--- src/components/UI/Badge/Badge.js | 4 +- src/components/UI/Circle/Circle.js | 28 ++++++----- src/components/UI/CryptoLogo/CryptoLogo.js | 5 +- src/components/UI/Icon/Icon.js | 26 +++++------ src/components/UI/Input/Input.js | 16 +++---- src/components/UI/MenuTitle/MenuTitle.js | 12 ++--- .../UI/Modal/ModalBody/ModalBody.js | 6 +-- .../UI/Modal/ModalFooter/ModalFooter.js | 4 +- .../UI/Modal/ModalHeader/ModalHeader.js | 6 +-- .../UI/Modal/ModalTitle/ModalTitle.js | 4 +- src/contracts/ERC20/ERC20.js | 4 +- src/services/logger.js | 4 +- src/utils/wallet.js | 4 +- 29 files changed, 201 insertions(+), 261 deletions(-) diff --git a/src/App.js b/src/App.js index 87887f92..908ac5f2 100644 --- a/src/App.js +++ b/src/App.js @@ -3,12 +3,10 @@ import React from 'react'; import styles from './App.module.scss'; import {Footer, Header, Main} from './components/Containers'; -export const App = () => { - return ( - <div className={styles.app}> - <Header /> - <Main /> - <Footer /> - </div> - ); -}; +export const App = () => ( + <div className={styles.app}> + <Header /> + <Main /> + <Footer /> + </div> +); diff --git a/src/components/Containers/Footer/Footer.js b/src/components/Containers/Footer/Footer.js index 94e4d85f..e53865ce 100644 --- a/src/components/Containers/Footer/Footer.js +++ b/src/components/Containers/Footer/Footer.js @@ -5,12 +5,10 @@ import {toClasses} from '../../../utils'; import styles from './Footer.module.scss'; import {FOOTER_TXT} from './Footer.strings'; -export const Footer = () => { - return ( - <footer className={styles.footer}> - <div className={toClasses(styles.copyright, 'row')}> - <StarkWareLogo /> {FOOTER_TXT} - </div> - </footer> - ); -}; +export const Footer = () => ( + <footer className={styles.footer}> + <div className={toClasses(styles.copyright, 'row')}> + <StarkWareLogo /> {FOOTER_TXT} + </div> + </footer> +); diff --git a/src/components/Features/Account/TransferLog/TransferLog.js b/src/components/Features/Account/TransferLog/TransferLog.js index c8b14f7b..854dda6b 100644 --- a/src/components/Features/Account/TransferLog/TransferLog.js +++ b/src/components/Features/Account/TransferLog/TransferLog.js @@ -5,25 +5,23 @@ import {CryptoLogo} from '../../../UI'; import {CryptoLogoSize} from '../../../UI/CryptoLogo/CryptoLogo.enums'; import styles from './TransferLog.module.scss'; -export const TransferLog = ({name, symbol, amount, timestamp}) => { - return ( - <> - <div className={styles.transferLog}> - <div className={styles.left}> - <CryptoLogo size={CryptoLogoSize.SMALL} symbol={symbol} /> - <div> - {name} - <div className={styles.data}>{new Date(timestamp).toLocaleString()}</div> - </div> +export const TransferLog = ({name, symbol, amount, timestamp}) => ( + <> + <div className={styles.transferLog}> + <div className={styles.left}> + <CryptoLogo size={CryptoLogoSize.SMALL} symbol={symbol} /> + <div> + {name} + <div className={styles.data}>{new Date(timestamp).toLocaleString()}</div> </div> - <div className={styles.amount}> - {amount} {symbol.toUpperCase()} - </div> - <hr /> </div> - </> - ); -}; + <div className={styles.amount}> + {amount} {symbol.toUpperCase()} + </div> + <hr /> + </div> + </> +); TransferLog.propTypes = { name: PropTypes.string, diff --git a/src/components/Features/Bridge/Bridge.hooks.js b/src/components/Features/Bridge/Bridge.hooks.js index 80637cf2..cea85df9 100644 --- a/src/components/Features/Bridge/Bridge.hooks.js +++ b/src/components/Features/Bridge/Bridge.hooks.js @@ -5,19 +5,15 @@ import {MenuType} from '../../../enums'; import {selectBridge} from './Bridge.selectors'; import {showMenuAction} from './Bridge.slice'; -export const useBridgeData = () => { - return { - ...useSelector(selectBridge) - }; -}; +export const useBridgeData = () => ({ + ...useSelector(selectBridge) +}); -export const useBridgeActions = () => { - return { - showAccountMenu: useShowBridgeMenu(MenuType.ACCOUNT), - showTransferMenu: useShowBridgeMenu(MenuType.TRANSFER), - showSelectTokenMenu: useShowBridgeMenu(MenuType.SELECT_TOKEN) - }; -}; +export const useBridgeActions = () => ({ + showAccountMenu: useShowBridgeMenu(MenuType.ACCOUNT), + showTransferMenu: useShowBridgeMenu(MenuType.TRANSFER), + showSelectTokenMenu: useShowBridgeMenu(MenuType.SELECT_TOKEN) +}); const useShowBridgeMenu = type => { const dispatch = useDispatch(); diff --git a/src/components/Features/ModalProvider/ModalProvider.hooks.js b/src/components/Features/ModalProvider/ModalProvider.hooks.js index 5a60382c..407a97e2 100644 --- a/src/components/Features/ModalProvider/ModalProvider.hooks.js +++ b/src/components/Features/ModalProvider/ModalProvider.hooks.js @@ -5,11 +5,9 @@ import {ModalType} from '../../UI/Modal/Modal/Modal.constants'; import {selectModal} from './ModalProvider.selectors'; import {hideModalAction, showModalAction} from './ModalProvider.slice'; -export const useModal = () => { - return { - modal: useSelector(selectModal) - }; -}; +export const useModal = () => ({ + modal: useSelector(selectModal) +}); export const useHideModal = () => { const dispatch = useDispatch(); diff --git a/src/components/Features/SelectToken/SelectTokenList/SelectTokenList.js b/src/components/Features/SelectToken/SelectTokenList/SelectTokenList.js index a24f7b3f..ce303e9a 100644 --- a/src/components/Features/SelectToken/SelectTokenList/SelectTokenList.js +++ b/src/components/Features/SelectToken/SelectTokenList/SelectTokenList.js @@ -4,23 +4,21 @@ import React from 'react'; import {SelectTokenRow} from '../SelectTokenRow/SelectTokenRow'; import styles from './SelectTokenList.module.scss'; -export const SelectTokenList = ({tokens, onClick}) => { - return ( - <div className={styles.selectTokenList}> - {tokens.map((tokenData, index) => { - return ( - <SelectTokenRow - key={index} - balance={tokenData.balance} - name={tokenData.name} - symbol={tokenData.symbol} - onClick={() => onClick(tokenData)} - /> - ); - })} - </div> - ); -}; +export const SelectTokenList = ({tokens, onClick}) => ( + <div className={styles.selectTokenList}> + {tokens.map((tokenData, index) => { + return ( + <SelectTokenRow + key={index} + balance={tokenData.balance} + name={tokenData.name} + symbol={tokenData.symbol} + onClick={() => onClick(tokenData)} + /> + ); + })} + </div> +); SelectTokenList.propTypes = { tokens: PropTypes.array, diff --git a/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js b/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js index 25dd0a7d..1c87bed1 100644 --- a/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js +++ b/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js @@ -7,33 +7,31 @@ import {CryptoLogoSize} from '../../../UI/CryptoLogo/CryptoLogo.enums'; import {LoadingSize} from '../../../UI/Loading/Loading.enums'; import styles from './SelectTokenRow.module.scss'; -export const SelectTokenRow = ({name, balance, symbol, onClick}) => { - return ( - <div className={styles.selectTokenRow} onClick={onClick}> - <hr /> - <div className={styles.data}> - <div className={styles.left}> - <CryptoLogo size={CryptoLogoSize.MEDIUM} symbol={symbol} /> - <div> - <div className={styles.symbol}>{symbol}</div> - <div className={styles.name}>{name}</div> - </div> - </div> - <div className={styles.right}> - <> - {typeof balance === 'number' ? ( - <div className={styles.balance}> - {formatBalance(balance)} {symbol} - </div> - ) : ( - <Loading size={LoadingSize.SMALL} /> - )} - </> +export const SelectTokenRow = ({name, balance, symbol, onClick}) => ( + <div className={styles.selectTokenRow} onClick={onClick}> + <hr /> + <div className={styles.data}> + <div className={styles.left}> + <CryptoLogo size={CryptoLogoSize.MEDIUM} symbol={symbol} /> + <div> + <div className={styles.symbol}>{symbol}</div> + <div className={styles.name}>{name}</div> </div> </div> + <div className={styles.right}> + <> + {typeof balance === 'number' ? ( + <div className={styles.balance}> + {formatBalance(balance)} {symbol} + </div> + ) : ( + <Loading size={LoadingSize.SMALL} /> + )} + </> + </div> </div> - ); -}; + </div> +); SelectTokenRow.propTypes = { name: PropTypes.string, diff --git a/src/components/Features/Transfer/MaxButton/MaxButton.js b/src/components/Features/Transfer/MaxButton/MaxButton.js index 41e9c5fe..09249444 100644 --- a/src/components/Features/Transfer/MaxButton/MaxButton.js +++ b/src/components/Features/Transfer/MaxButton/MaxButton.js @@ -4,13 +4,11 @@ import React from 'react'; import styles from './MaxButton.module.scss'; import {BTN_TXT} from './MaxButton.strings'; -export const MaxButton = ({onClick}) => { - return ( - <div className={styles.maxButton} onClick={onClick}> - {BTN_TXT} - </div> - ); -}; +export const MaxButton = ({onClick}) => ( + <div className={styles.maxButton} onClick={onClick}> + {BTN_TXT} + </div> +); MaxButton.propTypes = { onClick: PropTypes.func diff --git a/src/components/Features/Transfer/NetworkMenu/NetworkMenu.js b/src/components/Features/Transfer/NetworkMenu/NetworkMenu.js index 1ad33bfd..cc3da100 100644 --- a/src/components/Features/Transfer/NetworkMenu/NetworkMenu.js +++ b/src/components/Features/Transfer/NetworkMenu/NetworkMenu.js @@ -6,18 +6,16 @@ import {NetworkTitle} from '../NetworkTitle/NetworkTitle'; import {TokenBalance} from '../TokenBalance/TokenBalance'; import styles from './NetworkMenu.module.scss'; -export const NetworkMenu = ({title, networkData, tokenData, children}) => { - return ( - <div className={styles.networkMenu}> - <Badge text={title} /> - <div className={styles.networkContainer}> - <NetworkTitle networkData={networkData} /> - <TokenBalance balance={tokenData.balance} symbol={tokenData.symbol} /> - </div> - {children} +export const NetworkMenu = ({title, networkData, tokenData, children}) => ( + <div className={styles.networkMenu}> + <Badge text={title} /> + <div className={styles.networkContainer}> + <NetworkTitle networkData={networkData} /> + <TokenBalance balance={tokenData.balance} symbol={tokenData.symbol} /> </div> - ); -}; + {children} + </div> +); NetworkMenu.propTypes = { title: PropTypes.string, diff --git a/src/components/Features/Transfer/NetworkTitle/NetworkTitle.js b/src/components/Features/Transfer/NetworkTitle/NetworkTitle.js index baeb9044..0aca071d 100644 --- a/src/components/Features/Transfer/NetworkTitle/NetworkTitle.js +++ b/src/components/Features/Transfer/NetworkTitle/NetworkTitle.js @@ -5,14 +5,12 @@ import {CryptoLogo} from '../../../UI'; import {CryptoLogoSize} from '../../../UI/CryptoLogo/CryptoLogo.enums'; import styles from './NetworkTitle.module.scss'; -export const NetworkTitle = ({networkData}) => { - return ( - <div className={styles.networkTitle}> - <CryptoLogo size={CryptoLogoSize.MEDIUM} symbol={networkData.symbol} /> - {networkData.name} - </div> - ); -}; +export const NetworkTitle = ({networkData}) => ( + <div className={styles.networkTitle}> + <CryptoLogo size={CryptoLogoSize.MEDIUM} symbol={networkData.symbol} /> + {networkData.name} + </div> +); NetworkTitle.propTypes = { networkData: PropTypes.object diff --git a/src/components/Features/Transfer/TokenInput/TokenInput.js b/src/components/Features/Transfer/TokenInput/TokenInput.js index 6b69364d..e16ad297 100644 --- a/src/components/Features/Transfer/TokenInput/TokenInput.js +++ b/src/components/Features/Transfer/TokenInput/TokenInput.js @@ -15,24 +15,22 @@ export const TokenInput = ({ onMaxClick, onTokenSelect, onInputChange -}) => { - return ( - <div className={toClasses(styles.tokenInput, hasError && styles.hasError)}> - <Input - placeholder={INPUT_PLACEHOLDER} - style={{ - fontSize: '24px', - fontWeight: '600' - }} - type="number" - value={value} - onChange={onInputChange} - /> - <MaxButton onClick={onMaxClick} /> - <TokenSelector tokenData={selectedToken} onClick={onTokenSelect} /> - </div> - ); -}; +}) => ( + <div className={toClasses(styles.tokenInput, hasError && styles.hasError)}> + <Input + placeholder={INPUT_PLACEHOLDER} + style={{ + fontSize: '24px', + fontWeight: '600' + }} + type="number" + value={value} + onChange={onInputChange} + /> + <MaxButton onClick={onMaxClick} /> + <TokenSelector tokenData={selectedToken} onClick={onTokenSelect} /> + </div> +); TokenInput.propTypes = { value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), diff --git a/src/components/Features/Transfer/Transfer.hooks.js b/src/components/Features/Transfer/Transfer.hooks.js index 752b3c65..38c35324 100644 --- a/src/components/Features/Transfer/Transfer.hooks.js +++ b/src/components/Features/Transfer/Transfer.hooks.js @@ -12,24 +12,20 @@ import { } from './Transfer.selectors'; import {resetAction, selectTokenAction, setAmountAction, setTransferAction} from './Transfer.slice'; -export const useTransferActions = () => { - return { - setAmount: useSetAmount(), - setActionType: useSetActionType(), - selectToken: useSelectToken(), - resetTransfer: useResetTransfer() - }; -}; +export const useTransferActions = () => ({ + setAmount: useSetAmount(), + setActionType: useSetActionType(), + selectToken: useSelectToken(), + resetTransfer: useResetTransfer() +}); -export const useTransferData = () => { - return { - ...useSelector(selectTransfer), - isEthereum: useSelector(toStarknetSelector), - isStarknet: useSelector(fromStarknetSelector), - fromNetwork: useSelector(fromNetworkSelector), - toNetwork: useSelector(toNetworkSelector) - }; -}; +export const useTransferData = () => ({ + ...useSelector(selectTransfer), + isEthereum: useSelector(toStarknetSelector), + isStarknet: useSelector(fromStarknetSelector), + fromNetwork: useSelector(fromNetworkSelector), + toNetwork: useSelector(toNetworkSelector) +}); export const useAmount = () => { const amount = useSelector(getCurrentAmountSelector); diff --git a/src/components/Features/Transfer/TransferMenuTab/TransferMenuTab.js b/src/components/Features/Transfer/TransferMenuTab/TransferMenuTab.js index 792f1a86..75f37d99 100644 --- a/src/components/Features/Transfer/TransferMenuTab/TransferMenuTab.js +++ b/src/components/Features/Transfer/TransferMenuTab/TransferMenuTab.js @@ -4,16 +4,11 @@ import React from 'react'; import {toClasses} from '../../../../utils'; import styles from './TransferMenuTab.module.scss'; -export const TransferMenuTab = ({text, isActive, onClick}) => { - return ( - <div - className={toClasses(styles.transferMenuTab, isActive && styles.isActive)} - onClick={onClick} - > - {text} - </div> - ); -}; +export const TransferMenuTab = ({text, isActive, onClick}) => ( + <div className={toClasses(styles.transferMenuTab, isActive && styles.isActive)} onClick={onClick}> + {text} + </div> +); TransferMenuTab.propTypes = { text: PropTypes.string, diff --git a/src/components/Features/Wallet/Wallet.hooks.js b/src/components/Features/Wallet/Wallet.hooks.js index 0723b501..db752a5d 100644 --- a/src/components/Features/Wallet/Wallet.hooks.js +++ b/src/components/Features/Wallet/Wallet.hooks.js @@ -2,6 +2,4 @@ import {useContext} from 'react'; import {WalletsContext} from './Wallets.context'; -export const useWallets = () => { - return useContext(WalletsContext); -}; +export const useWallets = () => useContext(WalletsContext); diff --git a/src/components/Features/Wallet/WalletLogin/WalletLogin.js b/src/components/Features/Wallet/WalletLogin/WalletLogin.js index edfb5765..cd97afa1 100644 --- a/src/components/Features/Wallet/WalletLogin/WalletLogin.js +++ b/src/components/Features/Wallet/WalletLogin/WalletLogin.js @@ -6,23 +6,21 @@ import {capitalize} from '../../../../utils'; import {DynamicIcon} from '../../../UI'; import styles from './WalletLogin.module.scss'; -export const WalletLogin = ({name, description, logoPath, onClick}) => { - return ( - <> - <div className={styles.walletLogin} onClick={onClick}> - <div className={styles.left}> - <DynamicIcon path={logoPath} size={41} /> - <div className={styles.text}> - <div className={styles.title}>{capitalize(name)}</div> - <div className={styles.description}>{capitalize(description)}</div> - </div> +export const WalletLogin = ({name, description, logoPath, onClick}) => ( + <> + <div className={styles.walletLogin} onClick={onClick}> + <div className={styles.left}> + <DynamicIcon path={logoPath} size={41} /> + <div className={styles.text}> + <div className={styles.title}>{capitalize(name)}</div> + <div className={styles.description}>{capitalize(description)}</div> </div> - <ForwardIcon /> </div> - <div className={styles.separator} /> - </> - ); -}; + <ForwardIcon /> + </div> + <div className={styles.separator} /> + </> +); WalletLogin.propTypes = { name: PropTypes.string, diff --git a/src/components/UI/BackButton/BackButton.js b/src/components/UI/BackButton/BackButton.js index 5be1350b..49e9608b 100644 --- a/src/components/UI/BackButton/BackButton.js +++ b/src/components/UI/BackButton/BackButton.js @@ -5,13 +5,11 @@ import {ReactComponent as BackIcon} from '../../../assets/svg/icons/back.svg'; import styles from './BackButton.module.scss'; import {BTN_TXT} from './BackButton.strings'; -export const BackButton = ({onClick}) => { - return ( - <div className={styles.backButton} onClick={onClick}> - <BackIcon /> {BTN_TXT} - </div> - ); -}; +export const BackButton = ({onClick}) => ( + <div className={styles.backButton} onClick={onClick}> + <BackIcon /> {BTN_TXT} + </div> +); BackButton.propTypes = { onClick: PropTypes.func diff --git a/src/components/UI/Badge/Badge.js b/src/components/UI/Badge/Badge.js index ccc75675..0b776da0 100644 --- a/src/components/UI/Badge/Badge.js +++ b/src/components/UI/Badge/Badge.js @@ -3,9 +3,7 @@ import React from 'react'; import styles from './Badge.module.scss'; -export const Badge = ({text}) => { - return <div className={styles.badge}>{text}</div>; -}; +export const Badge = ({text}) => <div className={styles.badge}>{text}</div>; Badge.propTypes = { text: PropTypes.string diff --git a/src/components/UI/Circle/Circle.js b/src/components/UI/Circle/Circle.js index 81603322..4e62cebc 100644 --- a/src/components/UI/Circle/Circle.js +++ b/src/components/UI/Circle/Circle.js @@ -3,21 +3,19 @@ import React from 'react'; import styles from './Circle.module.scss'; -export const Circle = ({size, color, style, children}) => { - return ( - <div - className={styles.circle} - style={{ - height: `${size}px`, - width: `${size}px`, - background: color, - ...style - }} - > - {children} - </div> - ); -}; +export const Circle = ({size, color, style, children}) => ( + <div + className={styles.circle} + style={{ + height: `${size}px`, + width: `${size}px`, + background: color, + ...style + }} + > + {children} + </div> +); Circle.propTypes = { size: PropTypes.number, diff --git a/src/components/UI/CryptoLogo/CryptoLogo.js b/src/components/UI/CryptoLogo/CryptoLogo.js index b9bc6d0b..be72544c 100644 --- a/src/components/UI/CryptoLogo/CryptoLogo.js +++ b/src/components/UI/CryptoLogo/CryptoLogo.js @@ -6,8 +6,8 @@ import {DynamicIcon} from '../DynamicIcon/DynamicIcon'; import {CIRCLE_LOGO_SIZE_DIFF} from './CryptoLogo.constants'; import styles from './CryptoLogo.module.scss'; -export const CryptoLogo = ({symbol, color, size}) => { - return symbol ? ( +export const CryptoLogo = ({symbol, color, size}) => + symbol ? ( <Circle color={color} size={size}> <div className={styles.cryptoLogo}> <DynamicIcon @@ -17,7 +17,6 @@ export const CryptoLogo = ({symbol, color, size}) => { </div> </Circle> ) : null; -}; CryptoLogo.propTypes = { symbol: PropTypes.string, diff --git a/src/components/UI/Icon/Icon.js b/src/components/UI/Icon/Icon.js index 81b187f7..78490109 100644 --- a/src/components/UI/Icon/Icon.js +++ b/src/components/UI/Icon/Icon.js @@ -4,20 +4,18 @@ import React from 'react'; import {toClasses} from '../../../utils'; import styles from './Icon.module.scss'; -export const Icon = ({isClickable, onClick, style, className, children}) => { - return ( - <div - className={toClasses(styles.icon, className)} - style={{ - cursor: isClickable ? 'pointer' : 'default', - ...style - }} - onClick={onClick} - > - {children} - </div> - ); -}; +export const Icon = ({isClickable, onClick, style, className, children}) => ( + <div + className={toClasses(styles.icon, className)} + style={{ + cursor: isClickable ? 'pointer' : 'default', + ...style + }} + onClick={onClick} + > + {children} + </div> +); Icon.propTypes = { isClickable: PropTypes.bool, diff --git a/src/components/UI/Input/Input.js b/src/components/UI/Input/Input.js index 897ab9e8..7c08c7bf 100644 --- a/src/components/UI/Input/Input.js +++ b/src/components/UI/Input/Input.js @@ -4,15 +4,13 @@ import React, {forwardRef} from 'react'; import {toClasses} from '../../../utils'; import styles from './Input.Module.scss'; -export const Input = forwardRef(({isDisabled, ...props}, ref) => { - return ( - <input - ref={ref} - className={toClasses(styles.input, isDisabled && styles.isDisabled)} - {...props} - /> - ); -}); +export const Input = forwardRef(({isDisabled, ...props}, ref) => ( + <input + ref={ref} + className={toClasses(styles.input, isDisabled && styles.isDisabled)} + {...props} + /> +)); Input.propTypes = { isDisabled: PropTypes.bool diff --git a/src/components/UI/MenuTitle/MenuTitle.js b/src/components/UI/MenuTitle/MenuTitle.js index 8140d386..0fe131fb 100644 --- a/src/components/UI/MenuTitle/MenuTitle.js +++ b/src/components/UI/MenuTitle/MenuTitle.js @@ -3,13 +3,11 @@ import React from 'react'; import styles from './MenuTitle.module.scss'; -export const MenuTitle = ({text, color}) => { - return ( - <div className={styles.menuTitle} style={{color}}> - {text} - </div> - ); -}; +export const MenuTitle = ({text, color}) => ( + <div className={styles.menuTitle} style={{color}}> + {text} + </div> +); MenuTitle.propTypes = { text: PropTypes.string, diff --git a/src/components/UI/Modal/ModalBody/ModalBody.js b/src/components/UI/Modal/ModalBody/ModalBody.js index 9f8aa329..efac353a 100644 --- a/src/components/UI/Modal/ModalBody/ModalBody.js +++ b/src/components/UI/Modal/ModalBody/ModalBody.js @@ -5,9 +5,9 @@ import {toClasses} from '../../../../utils'; import {ModalType} from '../Modal/Modal.constants'; import styles from './ModalBody.module.scss'; -export const ModalBody = ({type = ModalType.INFO, children}) => { - return <div className={toClasses(styles.modalBody, styles[type])}>{children}</div>; -}; +export const ModalBody = ({type = ModalType.INFO, children}) => ( + <div className={toClasses(styles.modalBody, styles[type])}>{children}</div> +); ModalBody.propTypes = { type: PropTypes.string, diff --git a/src/components/UI/Modal/ModalFooter/ModalFooter.js b/src/components/UI/Modal/ModalFooter/ModalFooter.js index a0039d4d..a4748ef2 100644 --- a/src/components/UI/Modal/ModalFooter/ModalFooter.js +++ b/src/components/UI/Modal/ModalFooter/ModalFooter.js @@ -2,6 +2,4 @@ import React from 'react'; import styles from './ModalFooter.module.scss'; -export const ModalFooter = () => { - return <div className={styles.modalFooter} />; -}; +export const ModalFooter = () => <div className={styles.modalFooter} />; diff --git a/src/components/UI/Modal/ModalHeader/ModalHeader.js b/src/components/UI/Modal/ModalHeader/ModalHeader.js index 7013aba1..b162a859 100644 --- a/src/components/UI/Modal/ModalHeader/ModalHeader.js +++ b/src/components/UI/Modal/ModalHeader/ModalHeader.js @@ -5,9 +5,9 @@ import {toClasses} from '../../../../utils'; import {ModalType} from '../Modal/Modal.constants'; import styles from './ModalHeader.module.scss'; -export const ModalHeader = ({type = ModalType.INFO, children}) => { - return <div className={toClasses(styles.modalHeader, styles[type])}>{children}</div>; -}; +export const ModalHeader = ({type = ModalType.INFO, children}) => ( + <div className={toClasses(styles.modalHeader, styles[type])}>{children}</div> +); ModalHeader.propTypes = { type: PropTypes.string, diff --git a/src/components/UI/Modal/ModalTitle/ModalTitle.js b/src/components/UI/Modal/ModalTitle/ModalTitle.js index 44e812d1..80e9499d 100644 --- a/src/components/UI/Modal/ModalTitle/ModalTitle.js +++ b/src/components/UI/Modal/ModalTitle/ModalTitle.js @@ -3,9 +3,7 @@ import React from 'react'; import styles from './ModalTitle.module.scss'; -export const ModalTitle = ({children}) => { - return <div className={styles.modalTitle}>{children}</div>; -}; +export const ModalTitle = ({children}) => <div className={styles.modalTitle}>{children}</div>; ModalTitle.propTypes = { children: PropTypes.oneOfType([PropTypes.object, PropTypes.array, PropTypes.string]) diff --git a/src/contracts/ERC20/ERC20.js b/src/contracts/ERC20/ERC20.js index 67350073..9dcc7d86 100644 --- a/src/contracts/ERC20/ERC20.js +++ b/src/contracts/ERC20/ERC20.js @@ -1,6 +1,4 @@ import {web3} from '../../web3'; import {abi} from './ERC20.json'; -export const createERC20Contract = address => { - return new web3.eth.Contract(abi, address); -}; +export const createERC20Contract = address => new web3.eth.Contract(abi, address); diff --git a/src/services/logger.js b/src/services/logger.js index df5cf1b8..cae2db30 100644 --- a/src/services/logger.js +++ b/src/services/logger.js @@ -9,9 +9,7 @@ const getLogger = name => { return jsLogger.get(name); }; -const getLogLevel = name => { - return getLogger(name).getLevel(); -}; +const getLogLevel = name => getLogger(name).getLevel(); const setLogLevel = (level, name) => { getLogger(name).setLevel(level); diff --git a/src/utils/wallet.js b/src/utils/wallet.js index 5dd9e79b..4ff426d0 100644 --- a/src/utils/wallet.js +++ b/src/utils/wallet.js @@ -1,6 +1,4 @@ -export const formatBalance = balance => { - return parseFloat(balance.toFixed(5)); -}; +export const formatBalance = balance => parseFloat(balance.toFixed(5)); export const formatAddress = account => { if (account) { From d2403f1038f3851cc0f67865b074bdd52b10ca67 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Mon, 6 Dec 2021 13:46:03 +0200 Subject: [PATCH 004/211] feat(wallet): load L2 tokens and balances [skip ci] --- package.json | 4 +- .../argent/{argent-button.svg => logo.svg} | 0 .../{metamask-button.svg => logo.svg} | 0 .../svg/wallets/metamask/metamask-login.svg | 9 - src/components/Features/Login/Login.js | 4 +- .../Features/Wallet/WalletsProvider.js | 2 +- src/config/tokens/starknet.goerli.json | 5 + src/config/wallets.json | 6 +- src/contracts/ERC20/ERC20_STARKNET.json | 226 ++++++++++++++++++ src/hooks/useTokens.js | 26 +- yarn.lock | 16 +- 11 files changed, 272 insertions(+), 26 deletions(-) rename src/assets/svg/wallets/argent/{argent-button.svg => logo.svg} (100%) rename src/assets/svg/wallets/metamask/{metamask-button.svg => logo.svg} (100%) delete mode 100644 src/assets/svg/wallets/metamask/metamask-login.svg create mode 100644 src/contracts/ERC20/ERC20_STARKNET.json diff --git a/package.json b/package.json index 52e13933..b88f0f2f 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ ] }, "dependencies": { - "@argent/get-starknet": "^0.1.1", + "@argent/get-starknet": "^0.1.3", "@metamask/onboarding": "^1.0.1", "@reduxjs/toolkit": "^1.6.2", "axios": "^0.24.0", @@ -54,7 +54,7 @@ "react-dom": "^17.0.2", "react-redux": "^7.2.6", "react-scripts": "4.0.3", - "starknet": "^1.6.0", + "starknet": "^2.3.1", "use-wallet": "^0.13.1", "web3": "^1.6.0" }, diff --git a/src/assets/svg/wallets/argent/argent-button.svg b/src/assets/svg/wallets/argent/logo.svg similarity index 100% rename from src/assets/svg/wallets/argent/argent-button.svg rename to src/assets/svg/wallets/argent/logo.svg diff --git a/src/assets/svg/wallets/metamask/metamask-button.svg b/src/assets/svg/wallets/metamask/logo.svg similarity index 100% rename from src/assets/svg/wallets/metamask/metamask-button.svg rename to src/assets/svg/wallets/metamask/logo.svg diff --git a/src/assets/svg/wallets/metamask/metamask-login.svg b/src/assets/svg/wallets/metamask/metamask-login.svg deleted file mode 100644 index bd9ccac9..00000000 --- a/src/assets/svg/wallets/metamask/metamask-login.svg +++ /dev/null @@ -1,9 +0,0 @@ -<svg width="41" height="41" viewBox="0 0 41 41" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> -<rect width="41" height="41" rx="6.40625" fill="url(#pattern0)"/> -<defs> -<pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1"> -<use xlink:href="#image0_475_6233" transform="translate(-0.254076) scale(0.00271739)"/> -</pattern> -<image id="image0_475_6233" width="555" height="368" xlink:href="data:image/png;base64,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"/> -</defs> -</svg> diff --git a/src/components/Features/Login/Login.js b/src/components/Features/Login/Login.js index 59c051f8..f05e5dd2 100644 --- a/src/components/Features/Login/Login.js +++ b/src/components/Features/Login/Login.js @@ -97,13 +97,13 @@ export const Login = () => { const renderLoginWallets = () => { return getWalletHandlers(walletType).map(walletHandler => { const { - config: {id, description, name, loginLogoPath} + config: {id, description, name, logoPath} } = walletHandler; return ( <WalletLogin key={id} description={description} - logoPath={loginLogoPath} + logoPath={logoPath} name={name} onClick={() => onWalletConnect(walletHandler)} /> diff --git a/src/components/Features/Wallet/WalletsProvider.js b/src/components/Features/Wallet/WalletsProvider.js index feaa21c7..4098e4ce 100644 --- a/src/components/Features/Wallet/WalletsProvider.js +++ b/src/components/Features/Wallet/WalletsProvider.js @@ -126,7 +126,7 @@ export const WalletsProvider = ({children}) => { const activeWallet = () => { const config = walletConfigMap[state.activeWallet.type]; - const {name, buttonLogoPath: logoPath} = config || {}; + const {name, logoPath} = config || {}; return { ...state.activeWallet, name, diff --git a/src/config/tokens/starknet.goerli.json b/src/config/tokens/starknet.goerli.json index 347fa9e8..b1c6a276 100644 --- a/src/config/tokens/starknet.goerli.json +++ b/src/config/tokens/starknet.goerli.json @@ -3,5 +3,10 @@ "address": "0x06ebb42ca1b237cd92fcc677d9ff02ffadcc3c66d5748f6ebd795b531c51266c", "name": "ERC20 StarkNet Token", "symbol": "E20ST" + }, + { + "address": "0x00a45e3942b7a75983dea7afffda9304d0273773619d1e3d5eaa757d751bfaf3", + "name": "Playground Token", + "symbol": "TEST" } ] diff --git a/src/config/wallets.json b/src/config/wallets.json index 520bf230..65c82e0c 100644 --- a/src/config/wallets.json +++ b/src/config/wallets.json @@ -5,15 +5,13 @@ "connectorId": "injected", "type": 1, "description": "Login using a browser wallet", - "loginLogoPath": "wallets/metamask/metamask-login.svg", - "buttonLogoPath": "wallets/metamask/metamask-button.svg" + "logoPath": "wallets/metamask/logo.svg" }, { "id": "argent", "name": "Argent X", "type": 2, "description": "Login using a browser wallet", - "loginLogoPath": "wallets/argent/argent-button.svg", - "buttonLogoPath": "wallets/argent/argent-button.svg" + "logoPath": "wallets/argent/logo.svg" } ] diff --git a/src/contracts/ERC20/ERC20_STARKNET.json b/src/contracts/ERC20/ERC20_STARKNET.json new file mode 100644 index 00000000..101330e9 --- /dev/null +++ b/src/contracts/ERC20/ERC20_STARKNET.json @@ -0,0 +1,226 @@ +{ + "abi": [ + { + "members": [ + { + "name": "low", + "offset": 0, + "type": "felt" + }, + { + "name": "high", + "offset": 1, + "type": "felt" + } + ], + "name": "Uint256", + "size": 2, + "type": "struct" + }, + { + "inputs": [ + { + "name": "governance_account_address", + "type": "felt" + } + ], + "name": "constructor", + "outputs": [], + "type": "constructor" + }, + { + "inputs": [], + "name": "governance_address", + "outputs": [ + { + "name": "res", + "type": "felt" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "total_supply", + "outputs": [ + { + "name": "res", + "type": "Uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "name": "account", + "type": "felt" + } + ], + "name": "balance_of", + "outputs": [ + { + "name": "balance", + "type": "Uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "name": "owner", + "type": "felt" + }, + { + "name": "spender", + "type": "felt" + } + ], + "name": "allowance", + "outputs": [ + { + "name": "allowance", + "type": "Uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "permitted_minter", + "outputs": [ + { + "name": "res", + "type": "felt" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "name": "minter_address", + "type": "felt" + } + ], + "name": "set_permitted_minter", + "outputs": [], + "type": "function" + }, + { + "inputs": [ + { + "name": "account", + "type": "felt" + }, + { + "name": "amount", + "type": "Uint256" + } + ], + "name": "permissioned_mint", + "outputs": [], + "type": "function" + }, + { + "inputs": [ + { + "name": "account", + "type": "felt" + }, + { + "name": "amount", + "type": "Uint256" + } + ], + "name": "permissioned_burn", + "outputs": [], + "type": "function" + }, + { + "inputs": [ + { + "name": "recipient", + "type": "felt" + }, + { + "name": "amount", + "type": "Uint256" + } + ], + "name": "transfer", + "outputs": [], + "type": "function" + }, + { + "inputs": [ + { + "name": "spender", + "type": "felt" + }, + { + "name": "amount", + "type": "Uint256" + } + ], + "name": "approve", + "outputs": [], + "type": "function" + }, + { + "inputs": [ + { + "name": "sender", + "type": "felt" + }, + { + "name": "recipient", + "type": "felt" + }, + { + "name": "amount", + "type": "Uint256" + } + ], + "name": "transfer_from", + "outputs": [], + "type": "function" + }, + { + "inputs": [ + { + "name": "spender", + "type": "felt" + }, + { + "name": "added_value", + "type": "Uint256" + } + ], + "name": "increase_allowance", + "outputs": [], + "type": "function" + }, + { + "inputs": [ + { + "name": "spender", + "type": "felt" + }, + { + "name": "subtracted_value", + "type": "Uint256" + } + ], + "name": "decrease_allowance", + "outputs": [], + "type": "function" + } + ] +} diff --git a/src/hooks/useTokens.js b/src/hooks/useTokens.js index 07dbbee6..986b7742 100644 --- a/src/hooks/useTokens.js +++ b/src/hooks/useTokens.js @@ -1,8 +1,11 @@ +import {getStarknet} from '@argent/get-starknet'; import {useEffect, useState} from 'react'; +import {Contract, uint256} from 'starknet'; import {useTransferData} from '../components/Features/Transfer/Transfer.hooks'; import {useWallets} from '../components/Features/Wallet/Wallet.hooks'; import {createERC20Contract} from '../contracts'; +import {abi} from '../contracts/ERC20/ERC20_STARKNET.json'; import {ChainType, NetworkType} from '../enums'; import {web3} from '../web3'; @@ -22,7 +25,8 @@ export const useTokens = () => { tokens = await getL1Tokens(); readBalances(tokens, getL1TokenBalance); } else { - // TODO + tokens = await getL2Tokens(); + readBalances(tokens, getL2TokenBalance); } setTokensData(tokens); } catch (err) { @@ -38,9 +42,15 @@ export const useTokens = () => { return [NetworkType.ETHEREUM, ...(await import(`../config/tokens/${fileName}`)).default]; }; - const getL1TokenBalance = async tokens => { + const getL2Tokens = async () => { + const fileName = + chainName === ChainType.MAIN.name ? 'starknet.json' : `starknet.${chainName}.json`; + return [...(await import(`../config/tokens/${fileName}`)).default]; + }; + + const getL1TokenBalance = async token => { let balance; - const {symbol, address} = tokens; + const {symbol, address} = token; if (symbol === NetworkType.ETHEREUM.symbol) { balance = await web3.eth.getBalance(account); } else { @@ -50,6 +60,16 @@ export const useTokens = () => { return formatBalance(balance); }; + const getL2TokenBalance = async token => { + const {address} = token; + const starknet = getStarknet(); + const contract = new Contract(abi, address, starknet.provider); + const response = await contract.call('balance_of', {account}); + const {balance} = response; + const balanceAsBN = uint256.uint256ToBN(balance); + return balanceAsBN.toNumber(); + }; + const formatBalance = balance => Number(web3.utils.fromWei(balance)); const readBalances = (tokens, getBalanceHandler) => { diff --git a/yarn.lock b/yarn.lock index 5b79e974..5417dee1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -113,7 +113,7 @@ "@web3-react/types" "^6.0.7" tiny-warning "^1.0.3" -"@argent/get-starknet@^0.1.1": +"@argent/get-starknet@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@argent/get-starknet/-/get-starknet-0.1.3.tgz#c4f4599f5701c35d7ea1a20c16710f57daa3cd4d" integrity sha512-OqnklHJlFFYx4vbGH6z9Xqchhw/Ryb7xV9L1XlJ3V+lWSjCmv0FsFgNH9J9WgEePem0gc28fFTk+Vpt5M5Xl7g== @@ -15224,10 +15224,10 @@ standard-version@^9.3.1: stringify-package "^1.0.1" yargs "^16.0.0" -starknet@^1.6.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/starknet/-/starknet-1.7.0.tgz#100e53dedab6531f5e000e2f5c2042c0e38f6579" - integrity sha512-qf8l9AC2xff5mNbgkbiOCPqBASjmHASnhrTwS9FNUiJZhBMnYH3OgEOfM4GdXzxh8vINKWnX/Kor7wuQZbUZsw== +starknet@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/starknet/-/starknet-2.3.1.tgz#6c4ff1d74b2f20f8372fbb616587687756debd30" + integrity sha512-A5/POnt1s5gocVTx4NdrJDekhguLLvLQtgALV2w6sVNiCN8/yT2OIcUHjg1F82FB+vfE8usf2X8ccGyMwQteHw== dependencies: axios "^0.23.0" bn.js "^5.2.0" @@ -15237,6 +15237,7 @@ starknet@^1.6.0: json-bigint "^1.0.0" minimalistic-assert "^1.0.1" pako "^2.0.4" + url-join "^4.0.1" static-extend@^0.1.1: version "0.1.2" @@ -16282,6 +16283,11 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= +url-join@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" + integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== + url-loader@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" From 75f1ea7236b1cec46d2c89c9c2e8c872d64f0fcf Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Wed, 8 Dec 2021 11:35:59 +0200 Subject: [PATCH 005/211] fix(SelectToken): disable pointer events when loading balance [skip-ci] --- .../Features/SelectToken/SelectTokenRow/SelectTokenRow.js | 7 +++++-- .../SelectToken/SelectTokenRow/SelectTokenRow.module.scss | 4 ++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js b/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js index 1c87bed1..7cb2a481 100644 --- a/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js +++ b/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js @@ -1,14 +1,17 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {formatBalance} from '../../../../utils'; +import {formatBalance, toClasses} from '../../../../utils'; import {CryptoLogo, Loading} from '../../../UI'; import {CryptoLogoSize} from '../../../UI/CryptoLogo/CryptoLogo.enums'; import {LoadingSize} from '../../../UI/Loading/Loading.enums'; import styles from './SelectTokenRow.module.scss'; export const SelectTokenRow = ({name, balance, symbol, onClick}) => ( - <div className={styles.selectTokenRow} onClick={onClick}> + <div + className={toClasses(styles.selectTokenRow, typeof balance !== 'number' && styles.isLoading)} + onClick={onClick} + > <hr /> <div className={styles.data}> <div className={styles.left}> diff --git a/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.module.scss b/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.module.scss index b918c222..a48afc68 100644 --- a/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.module.scss +++ b/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.module.scss @@ -10,6 +10,10 @@ $balance-color-hover: $--color-white; .selectTokenRow { cursor: pointer; + &.isLoading { + pointer-events: none; + } + &:first-child { hr { display: none; From 067f02e4e07f0e2e8fbbb7f9397835272a9bc8df Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Wed, 8 Dec 2021 23:06:33 +0200 Subject: [PATCH 006/211] feat: combine providers [skip ci] (#2) --- src/components/Containers/Header/Header.js | 12 +- src/components/Containers/Main/Main.js | 6 +- .../{ => Account}/Account.constants.js | 2 +- .../Features/Account/{ => Account}/Account.js | 14 +- .../Account/{ => Account}/Account.module.scss | 0 .../Account/{ => Account}/Account.strings.js | 0 src/components/Features/Account/index.js | 1 + src/components/Features/Bridge/Bridge.js | 6 +- .../Login/Login.constants.js} | 1 - .../Features/Login/{ => Login}/Login.js | 34 +- .../Login/{ => Login}/Login.module.scss | 2 +- .../Login/{ => Login}/Login.strings.js | 2 +- .../WalletLogin/WalletLogin.js | 0 .../WalletLogin/WalletLogin.module.scss | 0 src/components/Features/Login/index.js | 2 + .../ModalProvider.hooks.js | 2 +- .../{ => ModalProvider}/ModalProvider.js | 4 +- .../ModalProvider.selectors.js | 0 .../ModalProvider.slice.js | 0 .../Features/ModalProvider/index.js | 1 + .../{ => SelectToken}/SelectToken.js | 19 +- .../{ => SelectToken}/SelectToken.module.scss | 2 +- .../{ => SelectToken}/SelectToken.strings.js | 0 src/components/Features/SelectToken/index.js | 1 + .../Transfer/{ => Transfer}/Transfer.hooks.js | 2 +- .../Transfer/{ => Transfer}/Transfer.js | 10 +- .../{ => Transfer}/Transfer.module.scss | 2 +- .../{ => Transfer}/Transfer.selectors.js | 2 +- .../Transfer/{ => Transfer}/Transfer.slice.js | 2 +- .../{ => Transfer}/Transfer.strings.js | 0 src/components/Features/Transfer/index.js | 1 + .../Features/Wallet/Wallet.hooks.js | 5 - .../Wallet/WalletButton/WalletButton.js | 32 - .../Features/Wallet/Wallets.context.js | 15 - .../Features/Wallet/Wallets.reducer.js | 55 -- .../Features/Wallet/WalletsProvider.js | 177 ----- src/components/Features/index.js | 9 +- .../UI/WalletButton/WalletButton.constants.js | 1 + .../UI/WalletButton/WalletButton.js | 31 + .../WalletButton/WalletButton.strings.js | 2 +- src/components/UI/index.js | 1 + src/config/wallets.json | 4 +- .../StarknetERC20Bridge_STARKNET.json | 714 ++++++++++++++++++ .../Wallet.enums.js => enums/WalletStatus.js} | 0 src/enums/WalletType.js | 4 +- src/enums/index.js | 1 + src/hooks/index.js | 1 + src/hooks/useTokens.js | 6 +- src/index.js | 32 +- .../CombineWalletsProvider.js | 154 ++++ .../CombineWalletsProvider/context.js | 29 + src/providers/CombineWalletsProvider/hooks.js | 41 + .../CombineWalletsProvider/reducer.js | 68 ++ src/providers/StoreProvider/StoreProvider.js | 11 + .../UseWalletProvider/UseWalletProvider.js | 29 + src/providers/combine-providers.js | 8 + src/providers/index.js | 10 + src/store/store.js | 4 +- 58 files changed, 1190 insertions(+), 384 deletions(-) rename src/components/Features/Account/{ => Account}/Account.constants.js (88%) rename src/components/Features/Account/{ => Account}/Account.js (69%) rename src/components/Features/Account/{ => Account}/Account.module.scss (100%) rename src/components/Features/Account/{ => Account}/Account.strings.js (100%) rename src/components/Features/{Wallet/WalletButton/WalletButton.constants.js => Login/Login/Login.constants.js} (55%) rename src/components/Features/Login/{ => Login}/Login.js (76%) rename src/components/Features/Login/{ => Login}/Login.module.scss (98%) rename src/components/Features/Login/{ => Login}/Login.strings.js (84%) rename src/components/Features/{Wallet => Login}/WalletLogin/WalletLogin.js (100%) rename src/components/Features/{Wallet => Login}/WalletLogin/WalletLogin.module.scss (100%) create mode 100644 src/components/Features/Login/index.js rename src/components/Features/ModalProvider/{ => ModalProvider}/ModalProvider.hooks.js (94%) rename src/components/Features/ModalProvider/{ => ModalProvider}/ModalProvider.js (90%) rename src/components/Features/ModalProvider/{ => ModalProvider}/ModalProvider.selectors.js (100%) rename src/components/Features/ModalProvider/{ => ModalProvider}/ModalProvider.slice.js (100%) rename src/components/Features/SelectToken/{ => SelectToken}/SelectToken.js (72%) rename src/components/Features/SelectToken/{ => SelectToken}/SelectToken.module.scss (93%) rename src/components/Features/SelectToken/{ => SelectToken}/SelectToken.strings.js (100%) rename src/components/Features/Transfer/{ => Transfer}/Transfer.hooks.js (97%) rename src/components/Features/Transfer/{ => Transfer}/Transfer.js (92%) rename src/components/Features/Transfer/{ => Transfer}/Transfer.module.scss (93%) rename src/components/Features/Transfer/{ => Transfer}/Transfer.selectors.js (95%) rename src/components/Features/Transfer/{ => Transfer}/Transfer.slice.js (94%) rename src/components/Features/Transfer/{ => Transfer}/Transfer.strings.js (100%) delete mode 100644 src/components/Features/Wallet/Wallet.hooks.js delete mode 100644 src/components/Features/Wallet/WalletButton/WalletButton.js delete mode 100644 src/components/Features/Wallet/Wallets.context.js delete mode 100644 src/components/Features/Wallet/Wallets.reducer.js delete mode 100644 src/components/Features/Wallet/WalletsProvider.js create mode 100644 src/components/UI/WalletButton/WalletButton.constants.js create mode 100644 src/components/UI/WalletButton/WalletButton.js rename src/components/{Features/Wallet => UI}/WalletButton/WalletButton.strings.js (64%) create mode 100644 src/contracts/StarknetERC20Bridge/StarknetERC20Bridge_STARKNET.json rename src/{components/Features/Wallet/Wallet.enums.js => enums/WalletStatus.js} (100%) create mode 100644 src/providers/CombineWalletsProvider/CombineWalletsProvider.js create mode 100644 src/providers/CombineWalletsProvider/context.js create mode 100644 src/providers/CombineWalletsProvider/hooks.js create mode 100644 src/providers/CombineWalletsProvider/reducer.js create mode 100644 src/providers/StoreProvider/StoreProvider.js create mode 100644 src/providers/UseWalletProvider/UseWalletProvider.js create mode 100644 src/providers/combine-providers.js create mode 100644 src/providers/index.js diff --git a/src/components/Containers/Header/Header.js b/src/components/Containers/Header/Header.js index ef847279..06f67ee6 100644 --- a/src/components/Containers/Header/Header.js +++ b/src/components/Containers/Header/Header.js @@ -2,15 +2,17 @@ import React from 'react'; import StarkNetLogoPath from '../../../assets/img/starknet.png'; import {ChainType} from '../../../enums'; +import {useCombineWallets} from '../../../providers/CombineWalletsProvider/hooks'; import {toClasses} from '../../../utils'; -import {WalletButton} from '../../Features'; -import {useWallets} from '../../Features/Wallet/Wallet.hooks'; +import {useBridgeActions} from '../../Features/Bridge/Bridge.hooks'; +import {WalletButton} from '../../UI'; import {STARKNET_LOGO_SIZE} from './Header.constants'; import styles from './Header.module.scss'; import {CHAIN_TXT} from './Header.strings'; export const Header = () => { - const {chainName} = useWallets(); + const {chainName, account, isConnected, config} = useCombineWallets(); + const {showAccountMenu} = useBridgeActions(); return ( <div className={toClasses(styles.header, 'row')}> @@ -23,7 +25,9 @@ export const Header = () => { )} </div> <div className={toClasses(styles.right, 'row')}> - <WalletButton /> + {isConnected && ( + <WalletButton account={account} logoPath={config?.logoPath} onClick={showAccountMenu} /> + )} </div> </div> ); diff --git a/src/components/Containers/Main/Main.js b/src/components/Containers/Main/Main.js index 53ec8631..4193fea6 100644 --- a/src/components/Containers/Main/Main.js +++ b/src/components/Containers/Main/Main.js @@ -1,15 +1,15 @@ import React, {useEffect, useState} from 'react'; import {useVars, useWindowSize} from '../../../hooks'; +import {useCombineWallets} from '../../../providers/CombineWalletsProvider/hooks'; import {Bridge} from '../../Features'; -import {Login} from '../../Features/Login/Login'; -import {useWallets} from '../../Features/Wallet/Wallet.hooks'; +import {Login} from '../../Features/Login/Login/Login'; import styles from './Main.module.scss'; export const Main = () => { const windowSize = useWindowSize(); const {mainOffset} = useVars(); - const {isConnected} = useWallets(); + const {isConnected} = useCombineWallets(); const [height, setHeight] = useState(null); useEffect(() => { diff --git a/src/components/Features/Account/Account.constants.js b/src/components/Features/Account/Account/Account.constants.js similarity index 88% rename from src/components/Features/Account/Account.constants.js rename to src/components/Features/Account/Account/Account.constants.js index 45e9a7b7..440d765b 100644 --- a/src/components/Features/Account/Account.constants.js +++ b/src/components/Features/Account/Account/Account.constants.js @@ -1,4 +1,4 @@ -import {evaluate} from '../../../utils'; +import {evaluate} from '../../../../utils'; export const LINKS = { ETHERSCAN: { diff --git a/src/components/Features/Account/Account.js b/src/components/Features/Account/Account/Account.js similarity index 69% rename from src/components/Features/Account/Account.js rename to src/components/Features/Account/Account/Account.js index 815ec9a8..fb86cd6a 100644 --- a/src/components/Features/Account/Account.js +++ b/src/components/Features/Account/Account/Account.js @@ -1,18 +1,18 @@ import React from 'react'; -import {AccountAddress, LogoutButton, TransferLogContainer} from '.'; -import {BackButton, Menu, MenuTitle} from '../../UI'; -import {useBridgeActions} from '../Bridge/Bridge.hooks'; -import {useTransferData} from '../Transfer/Transfer.hooks'; -import {useWallets} from '../Wallet/Wallet.hooks'; +import {useCombineWallets} from '../../../../providers/CombineWalletsProvider/hooks'; +import {BackButton, Menu, MenuTitle} from '../../../UI'; +import {useBridgeActions} from '../../Bridge/Bridge.hooks'; +import {useTransferData} from '../../Transfer/Transfer/Transfer.hooks'; +import {LinkButton} from '../LinkButton/LinkButton'; +import {AccountAddress, LogoutButton, TransferLogContainer} from '../index'; import {LINKS} from './Account.constants'; import styles from './Account.module.scss'; import {TITLE_TXT} from './Account.strings'; -import {LinkButton} from './LinkButton/LinkButton'; export const Account = () => { const {showTransferMenu} = useBridgeActions(); - const {account, chainName, resetWallet} = useWallets(); + const {account, chainName, resetWallet} = useCombineWallets(); const {isEthereum, isStarknet} = useTransferData(); return ( diff --git a/src/components/Features/Account/Account.module.scss b/src/components/Features/Account/Account/Account.module.scss similarity index 100% rename from src/components/Features/Account/Account.module.scss rename to src/components/Features/Account/Account/Account.module.scss diff --git a/src/components/Features/Account/Account.strings.js b/src/components/Features/Account/Account/Account.strings.js similarity index 100% rename from src/components/Features/Account/Account.strings.js rename to src/components/Features/Account/Account/Account.strings.js diff --git a/src/components/Features/Account/index.js b/src/components/Features/Account/index.js index 14a3d8bf..069dc3f1 100644 --- a/src/components/Features/Account/index.js +++ b/src/components/Features/Account/index.js @@ -1,3 +1,4 @@ +export * from './Account/Account'; export * from './TransferLog/TransferLog'; export * from './TransferLogContainer/TransferLogContainer'; export * from './LogoutButton/LogoutButton'; diff --git a/src/components/Features/Bridge/Bridge.js b/src/components/Features/Bridge/Bridge.js index 9959d591..6f58e646 100644 --- a/src/components/Features/Bridge/Bridge.js +++ b/src/components/Features/Bridge/Bridge.js @@ -1,9 +1,9 @@ import React from 'react'; import {MenuType} from '../../../enums'; -import {Account} from '../Account/Account'; -import {SelectToken} from '../SelectToken/SelectToken'; -import {Transfer} from '../Transfer/Transfer'; +import {Account} from '../Account/Account/Account'; +import {SelectToken} from '../SelectToken/SelectToken/SelectToken'; +import {Transfer} from '../Transfer/Transfer/Transfer'; import {useBridgeData} from './Bridge.hooks'; import styles from './Bridge.module.scss'; diff --git a/src/components/Features/Wallet/WalletButton/WalletButton.constants.js b/src/components/Features/Login/Login/Login.constants.js similarity index 55% rename from src/components/Features/Wallet/WalletButton/WalletButton.constants.js rename to src/components/Features/Login/Login/Login.constants.js index 83199cde..21a04e58 100644 --- a/src/components/Features/Wallet/WalletButton/WalletButton.constants.js +++ b/src/components/Features/Login/Login/Login.constants.js @@ -1,2 +1 @@ export const MODAL_TIMEOUT_DURATION = 2000; -export const WALLET_LOGO_SIZE = 30; diff --git a/src/components/Features/Login/Login.js b/src/components/Features/Login/Login/Login.js similarity index 76% rename from src/components/Features/Login/Login.js rename to src/components/Features/Login/Login/Login.js index f05e5dd2..9a99f556 100644 --- a/src/components/Features/Login/Login.js +++ b/src/components/Features/Login/Login/Login.js @@ -1,28 +1,32 @@ import React, {useEffect, useRef, useState} from 'react'; import {ChainUnsupportedError} from 'use-wallet'; -import {NetworkType, toChainName, WalletType} from '../../../enums'; -import {useWalletHandlerProvider} from '../../../hooks'; -import {capitalize, toClasses} from '../../../utils'; -import {BackButton, Menu} from '../../UI'; -import {useHideModal, useWalletConnectionModal} from '../ModalProvider/ModalProvider.hooks'; -import {useTransferData} from '../Transfer/Transfer.hooks'; -import {WalletStatus} from '../Wallet/Wallet.enums'; -import {useWallets} from '../Wallet/Wallet.hooks'; -import {MODAL_TIMEOUT_DURATION} from '../Wallet/WalletButton/WalletButton.constants'; -import {WalletLogin} from '../Wallet/WalletLogin/WalletLogin'; +import {NetworkType, toChainName, WalletStatus, WalletType} from '../../../../enums'; +import {useWalletHandlerProvider} from '../../../../hooks'; +import {useCombineWallets} from '../../../../providers/CombineWalletsProvider/hooks'; +import {capitalize, toClasses} from '../../../../utils'; +import {BackButton, Menu} from '../../../UI'; +import { + useHideModal, + useWalletConnectionModal +} from '../../ModalProvider/ModalProvider/ModalProvider.hooks'; +import {useTransferData} from '../../Transfer/Transfer/Transfer.hooks'; +import {WalletLogin} from '../WalletLogin/WalletLogin'; +import {MODAL_TIMEOUT_DURATION} from './Login.constants'; import styles from './Login.module.scss'; import {DOWNLOAD_TEXT, SUBTITLE_TXT, TITLE_TXT} from './Login.strings'; export const Login = () => { const {isEthereum, isStarknet} = useTransferData(); - const [walletType, setWalletType] = useState(isEthereum ? WalletType.L1 : WalletType.L2); + const [walletType, setWalletType] = useState( + isEthereum ? WalletType.ETHEREUM : WalletType.STARKNET + ); const [selectedWalletName, setSelectedWalletName] = useState(''); const [errorMsg, setErrorMsg] = useState(''); const modalTimeoutId = useRef(null); const hideModal = useHideModal(); const showWalletConnectionModal = useWalletConnectionModal(); - const {status, error, connectWallet, swapWallets} = useWallets(); + const {status, error, connectWallet, swapWallets} = useCombineWallets(); const {getWalletHandlers} = useWalletHandlerProvider(); useEffect(() => { @@ -30,7 +34,7 @@ export const Login = () => { }, [error]); useEffect(() => { - setWalletType(isEthereum ? WalletType.L1 : WalletType.L2); + setWalletType(isEthereum ? WalletType.ETHEREUM : WalletType.STARKNET); }, [isEthereum]); useEffect(() => { @@ -119,7 +123,9 @@ export const Login = () => { <div className={styles.title}>{TITLE_TXT}</div> <p> {SUBTITLE_TXT( - walletType === WalletType.L1 ? NetworkType.ETHEREUM.name : NetworkType.STARKNET.name + walletType === WalletType.ETHEREUM + ? NetworkType.ETHEREUM.name + : NetworkType.STARKNET.name )} </p> <div className={styles.container}>{renderLoginWallets()}</div> diff --git a/src/components/Features/Login/Login.module.scss b/src/components/Features/Login/Login/Login.module.scss similarity index 98% rename from src/components/Features/Login/Login.module.scss rename to src/components/Features/Login/Login/Login.module.scss index c1de3017..3049282d 100644 --- a/src/components/Features/Login/Login.module.scss +++ b/src/components/Features/Login/Login/Login.module.scss @@ -1,4 +1,4 @@ -@import '../../../index'; +@import '../../../../index'; $background-color: $--color-alpha; $text-color: $--color-white; diff --git a/src/components/Features/Login/Login.strings.js b/src/components/Features/Login/Login/Login.strings.js similarity index 84% rename from src/components/Features/Login/Login.strings.js rename to src/components/Features/Login/Login/Login.strings.js index af1f5753..2ad03a76 100644 --- a/src/components/Features/Login/Login.strings.js +++ b/src/components/Features/Login/Login/Login.strings.js @@ -1,4 +1,4 @@ -import {evaluate} from '../../../utils'; +import {evaluate} from '../../../../utils'; export const TITLE_TXT = 'Login'; diff --git a/src/components/Features/Wallet/WalletLogin/WalletLogin.js b/src/components/Features/Login/WalletLogin/WalletLogin.js similarity index 100% rename from src/components/Features/Wallet/WalletLogin/WalletLogin.js rename to src/components/Features/Login/WalletLogin/WalletLogin.js diff --git a/src/components/Features/Wallet/WalletLogin/WalletLogin.module.scss b/src/components/Features/Login/WalletLogin/WalletLogin.module.scss similarity index 100% rename from src/components/Features/Wallet/WalletLogin/WalletLogin.module.scss rename to src/components/Features/Login/WalletLogin/WalletLogin.module.scss diff --git a/src/components/Features/Login/index.js b/src/components/Features/Login/index.js new file mode 100644 index 00000000..70f815ea --- /dev/null +++ b/src/components/Features/Login/index.js @@ -0,0 +1,2 @@ +export * from './Login/Login'; +export * from './WalletLogin/WalletLogin'; diff --git a/src/components/Features/ModalProvider/ModalProvider.hooks.js b/src/components/Features/ModalProvider/ModalProvider/ModalProvider.hooks.js similarity index 94% rename from src/components/Features/ModalProvider/ModalProvider.hooks.js rename to src/components/Features/ModalProvider/ModalProvider/ModalProvider.hooks.js index 407a97e2..a0a4d6da 100644 --- a/src/components/Features/ModalProvider/ModalProvider.hooks.js +++ b/src/components/Features/ModalProvider/ModalProvider/ModalProvider.hooks.js @@ -1,7 +1,7 @@ import {useCallback} from 'react'; import {useDispatch, useSelector} from 'react-redux'; -import {ModalType} from '../../UI/Modal/Modal/Modal.constants'; +import {ModalType} from '../../../UI/Modal/Modal/Modal.constants'; import {selectModal} from './ModalProvider.selectors'; import {hideModalAction, showModalAction} from './ModalProvider.slice'; diff --git a/src/components/Features/ModalProvider/ModalProvider.js b/src/components/Features/ModalProvider/ModalProvider/ModalProvider.js similarity index 90% rename from src/components/Features/ModalProvider/ModalProvider.js rename to src/components/Features/ModalProvider/ModalProvider/ModalProvider.js index 9e6fb2ec..688d8230 100644 --- a/src/components/Features/ModalProvider/ModalProvider.js +++ b/src/components/Features/ModalProvider/ModalProvider/ModalProvider.js @@ -1,7 +1,7 @@ import React, {lazy, Suspense} from 'react'; -import {Loading, Modal, ModalBody, ModalFooter, ModalHeader, ModalTitle} from '../../UI'; -import {LoadingSize} from '../../UI/Loading/Loading.enums'; +import {Loading, Modal, ModalBody, ModalFooter, ModalHeader, ModalTitle} from '../../../UI'; +import {LoadingSize} from '../../../UI/Loading/Loading.enums'; import {useHideModal, useModal} from './ModalProvider.hooks'; export const ModalProvider = () => { diff --git a/src/components/Features/ModalProvider/ModalProvider.selectors.js b/src/components/Features/ModalProvider/ModalProvider/ModalProvider.selectors.js similarity index 100% rename from src/components/Features/ModalProvider/ModalProvider.selectors.js rename to src/components/Features/ModalProvider/ModalProvider/ModalProvider.selectors.js diff --git a/src/components/Features/ModalProvider/ModalProvider.slice.js b/src/components/Features/ModalProvider/ModalProvider/ModalProvider.slice.js similarity index 100% rename from src/components/Features/ModalProvider/ModalProvider.slice.js rename to src/components/Features/ModalProvider/ModalProvider/ModalProvider.slice.js diff --git a/src/components/Features/ModalProvider/index.js b/src/components/Features/ModalProvider/index.js index a26780ed..a26824d3 100644 --- a/src/components/Features/ModalProvider/index.js +++ b/src/components/Features/ModalProvider/index.js @@ -1 +1,2 @@ +export * from './ModalProvider/ModalProvider'; export * from './WalletConnectionModal/WalletConnectionModal'; diff --git a/src/components/Features/SelectToken/SelectToken.js b/src/components/Features/SelectToken/SelectToken/SelectToken.js similarity index 72% rename from src/components/Features/SelectToken/SelectToken.js rename to src/components/Features/SelectToken/SelectToken/SelectToken.js index b89e28f3..d7d747d2 100644 --- a/src/components/Features/SelectToken/SelectToken.js +++ b/src/components/Features/SelectToken/SelectToken/SelectToken.js @@ -1,17 +1,16 @@ import React, {useEffect, useState} from 'react'; -import EthereumLogo from '../../../assets/svg/tokens/eth.svg'; -import StarkNetLogo from '../../../assets/svg/tokens/starknet.svg'; -import {useColors} from '../../../hooks'; -import {useTokens} from '../../../hooks/useTokens'; -import {BackButton, Loading, Menu, MenuTitle} from '../../UI'; -import {LoadingSize} from '../../UI/Loading/Loading.enums'; -import {useBridgeActions} from '../Bridge/Bridge.hooks'; -import {useTransferActions, useTransferData} from '../Transfer/Transfer.hooks'; -import {SearchToken} from './SearchToken/SearchToken'; +import EthereumLogo from '../../../../assets/svg/tokens/eth.svg'; +import StarkNetLogo from '../../../../assets/svg/tokens/starknet.svg'; +import {useColors, useTokens} from '../../../../hooks'; +import {BackButton, Loading, Menu, MenuTitle} from '../../../UI'; +import {LoadingSize} from '../../../UI/Loading/Loading.enums'; +import {useBridgeActions} from '../../Bridge/Bridge.hooks'; +import {useTransferActions, useTransferData} from '../../Transfer/Transfer/Transfer.hooks'; +import {SearchToken} from '../SearchToken/SearchToken'; +import {SelectTokenList} from '../SelectTokenList/SelectTokenList'; import styles from './SelectToken.module.scss'; import {TITLE_TXT} from './SelectToken.strings'; -import {SelectTokenList} from './SelectTokenList/SelectTokenList'; export const SelectToken = () => { const {isLoading, tokensData} = useTokens(); diff --git a/src/components/Features/SelectToken/SelectToken.module.scss b/src/components/Features/SelectToken/SelectToken/SelectToken.module.scss similarity index 93% rename from src/components/Features/SelectToken/SelectToken.module.scss rename to src/components/Features/SelectToken/SelectToken/SelectToken.module.scss index 807c6383..a2fbd934 100644 --- a/src/components/Features/SelectToken/SelectToken.module.scss +++ b/src/components/Features/SelectToken/SelectToken/SelectToken.module.scss @@ -1,4 +1,4 @@ -@import '../../../index'; +@import '../../../../index'; $color: $--color-white; $network-color: $--color-beta; diff --git a/src/components/Features/SelectToken/SelectToken.strings.js b/src/components/Features/SelectToken/SelectToken/SelectToken.strings.js similarity index 100% rename from src/components/Features/SelectToken/SelectToken.strings.js rename to src/components/Features/SelectToken/SelectToken/SelectToken.strings.js diff --git a/src/components/Features/SelectToken/index.js b/src/components/Features/SelectToken/index.js index 98f256ce..190de096 100644 --- a/src/components/Features/SelectToken/index.js +++ b/src/components/Features/SelectToken/index.js @@ -1,3 +1,4 @@ +export * from './SelectToken/SelectToken'; export * from './SearchToken/SearchToken'; export * from './SelectTokenList/SelectTokenList'; export * from './SelectTokenRow/SelectTokenRow'; diff --git a/src/components/Features/Transfer/Transfer.hooks.js b/src/components/Features/Transfer/Transfer/Transfer.hooks.js similarity index 97% rename from src/components/Features/Transfer/Transfer.hooks.js rename to src/components/Features/Transfer/Transfer/Transfer.hooks.js index 38c35324..41d7cbdb 100644 --- a/src/components/Features/Transfer/Transfer.hooks.js +++ b/src/components/Features/Transfer/Transfer/Transfer.hooks.js @@ -1,7 +1,7 @@ import {useCallback} from 'react'; import {useDispatch, useSelector} from 'react-redux'; -import {ActionType} from '../../../enums'; +import {ActionType} from '../../../../enums'; import { fromNetworkSelector, fromStarknetSelector, diff --git a/src/components/Features/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer/Transfer.js similarity index 92% rename from src/components/Features/Transfer/Transfer.js rename to src/components/Features/Transfer/Transfer/Transfer.js index ba72d7ff..ed009acf 100644 --- a/src/components/Features/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer/Transfer.js @@ -1,13 +1,13 @@ import React, {useEffect, useState} from 'react'; -import {NetworkMenu, NetworkSwap, TokenInput, TransferButton} from '.'; -import {ActionType, NetworkType} from '../../../enums'; -import {Menu} from '../../UI'; -import {useBridgeActions} from '../Bridge/Bridge.hooks'; +import {ActionType, NetworkType} from '../../../../enums'; +import {Menu} from '../../../UI'; +import {useBridgeActions} from '../../Bridge/Bridge.hooks'; +import {TransferMenuTab} from '../TransferMenuTab/TransferMenuTab'; +import {NetworkMenu, NetworkSwap, TokenInput, TransferButton} from '../index'; import {useAmount, useIsEthereum, useIsStarknet, useTransferData} from './Transfer.hooks'; import styles from './Transfer.module.scss'; import {INSUFFICIENT_BALANCE_ERROR_MSG} from './Transfer.strings.js'; -import {TransferMenuTab} from './TransferMenuTab/TransferMenuTab'; export const Transfer = () => { const [hasError, setHasError] = useState(false); diff --git a/src/components/Features/Transfer/Transfer.module.scss b/src/components/Features/Transfer/Transfer/Transfer.module.scss similarity index 93% rename from src/components/Features/Transfer/Transfer.module.scss rename to src/components/Features/Transfer/Transfer/Transfer.module.scss index 083e9cdb..cdce1dc4 100644 --- a/src/components/Features/Transfer/Transfer.module.scss +++ b/src/components/Features/Transfer/Transfer/Transfer.module.scss @@ -1,4 +1,4 @@ -@import '../../../index'; +@import '../../../../index'; $background-color: $--color-alpha-1; $error-msg-color: $--color-error; diff --git a/src/components/Features/Transfer/Transfer.selectors.js b/src/components/Features/Transfer/Transfer/Transfer.selectors.js similarity index 95% rename from src/components/Features/Transfer/Transfer.selectors.js rename to src/components/Features/Transfer/Transfer/Transfer.selectors.js index 86b09f8a..2f0f27db 100644 --- a/src/components/Features/Transfer/Transfer.selectors.js +++ b/src/components/Features/Transfer/Transfer/Transfer.selectors.js @@ -1,6 +1,6 @@ import {createSelector} from '@reduxjs/toolkit'; -import {ActionType, NetworkType} from '../../../enums'; +import {ActionType, NetworkType} from '../../../../enums'; export const selectTransfer = state => state.transfer; diff --git a/src/components/Features/Transfer/Transfer.slice.js b/src/components/Features/Transfer/Transfer/Transfer.slice.js similarity index 94% rename from src/components/Features/Transfer/Transfer.slice.js rename to src/components/Features/Transfer/Transfer/Transfer.slice.js index 6271c29d..acc936e8 100644 --- a/src/components/Features/Transfer/Transfer.slice.js +++ b/src/components/Features/Transfer/Transfer/Transfer.slice.js @@ -1,6 +1,6 @@ import {createSlice} from '@reduxjs/toolkit'; -import {ActionType, NetworkType} from '../../../enums'; +import {ActionType, NetworkType} from '../../../../enums'; const initialState = { selectedToken: {balance: 0, name: NetworkType.ETHEREUM.name, symbol: NetworkType.ETHEREUM.symbol}, diff --git a/src/components/Features/Transfer/Transfer.strings.js b/src/components/Features/Transfer/Transfer/Transfer.strings.js similarity index 100% rename from src/components/Features/Transfer/Transfer.strings.js rename to src/components/Features/Transfer/Transfer/Transfer.strings.js diff --git a/src/components/Features/Transfer/index.js b/src/components/Features/Transfer/index.js index b259a8fe..8e43f464 100644 --- a/src/components/Features/Transfer/index.js +++ b/src/components/Features/Transfer/index.js @@ -1,3 +1,4 @@ +export * from './Transfer/Transfer'; export * from './MaxButton/MaxButton'; export * from './NetworkMenu/NetworkMenu'; export * from './NetworkSwap/NetworkSwap'; diff --git a/src/components/Features/Wallet/Wallet.hooks.js b/src/components/Features/Wallet/Wallet.hooks.js deleted file mode 100644 index db752a5d..00000000 --- a/src/components/Features/Wallet/Wallet.hooks.js +++ /dev/null @@ -1,5 +0,0 @@ -import {useContext} from 'react'; - -import {WalletsContext} from './Wallets.context'; - -export const useWallets = () => useContext(WalletsContext); diff --git a/src/components/Features/Wallet/WalletButton/WalletButton.js b/src/components/Features/Wallet/WalletButton/WalletButton.js deleted file mode 100644 index e08ba804..00000000 --- a/src/components/Features/Wallet/WalletButton/WalletButton.js +++ /dev/null @@ -1,32 +0,0 @@ -import React from 'react'; - -import {useColors} from '../../../../hooks'; -import {formatAddress} from '../../../../utils'; -import {Button, DynamicIcon} from '../../../UI'; -import {useBridgeActions} from '../../Bridge/Bridge.hooks'; -import {useWallets} from '../Wallet.hooks'; -import {WALLET_LOGO_SIZE} from './WalletButton.constants'; -import {BTN_TXT} from './WalletButton.strings'; - -export const WalletButton = () => { - const {colorBeta, colorWhite} = useColors(); - const {showAccountMenu} = useBridgeActions(); - const {account, isConnected, logoPath} = useWallets(); - - return ( - <> - {isConnected && ( - <Button - colorBackground="transparent" - colorBorder={colorBeta} - colorText={colorWhite} - height={40} - icon={<DynamicIcon path={logoPath} size={WALLET_LOGO_SIZE} />} - style={{borderWidth: '2px'}} - text={BTN_TXT(formatAddress(account))} - onClick={showAccountMenu} - /> - )} - </> - ); -}; diff --git a/src/components/Features/Wallet/Wallets.context.js b/src/components/Features/Wallet/Wallets.context.js deleted file mode 100644 index 51e83009..00000000 --- a/src/components/Features/Wallet/Wallets.context.js +++ /dev/null @@ -1,15 +0,0 @@ -import {createContext} from 'react'; - -import {WalletStatus} from './Wallet.enums'; - -export const WalletsContext = createContext({ - account: '', - isConnected: false, - status: WalletStatus.DISCONNECTED, - chainName: '', - chainId: -1, - error: null, - connectWallet: () => {}, - resetWallet: () => {}, - swapWallets: () => {} -}); diff --git a/src/components/Features/Wallet/Wallets.reducer.js b/src/components/Features/Wallet/Wallets.reducer.js deleted file mode 100644 index e82bc977..00000000 --- a/src/components/Features/Wallet/Wallets.reducer.js +++ /dev/null @@ -1,55 +0,0 @@ -import {WalletStatus} from './Wallet.enums'; - -export const actions = { - SET_ACTIVE_WALLET_ACTION: 'Wallets/SET_ACTIVE_WALLET_ACTION', - RESET_ACTIVE_WALLET_ACTION: 'Wallets/RESET_ACTIVE_WALLET_ACTION', - SET_WALLET_CONFIG_ACTION: 'Wallets/SET_WALLET_CONFIG_ACTION', - RESET_WALLET_CONFIG_ACTION: 'Wallets/RESET_WALLET_CONFIG_ACTION' -}; - -export const initialState = { - activeWallet: { - account: '', - isConnected: false, - status: WalletStatus.DISCONNECTED, - chainName: '', - chainId: -1, - error: null - }, - l1WalletConfig: null, - l2WalletConfig: null -}; - -export const reducer = (state, action) => { - switch (action.type) { - case actions.SET_ACTIVE_WALLET_ACTION: - return { - ...state, - activeWallet: action.payload - }; - - case actions.RESET_ACTIVE_WALLET_ACTION: - return { - ...state, - activeWallet: initialState.activeWallet - }; - - case actions.SET_WALLET_CONFIG_ACTION: { - const walletConfig = action.payload; - return { - ...state, - [`l${walletConfig.type}WalletConfig`]: walletConfig - }; - } - - case actions.RESET_WALLET_CONFIG_ACTION: { - return { - ...state, - [`l${state.activeWallet.type}WalletConfig`]: null - }; - } - - default: - return state; - } -}; diff --git a/src/components/Features/Wallet/WalletsProvider.js b/src/components/Features/Wallet/WalletsProvider.js deleted file mode 100644 index 4098e4ce..00000000 --- a/src/components/Features/Wallet/WalletsProvider.js +++ /dev/null @@ -1,177 +0,0 @@ -import {getStarknet} from '@argent/get-starknet'; -import PropTypes from 'prop-types'; -import React, {useEffect, useReducer, useState} from 'react'; -import {useWallet} from 'use-wallet'; - -import {WalletType} from '../../../enums'; -import {useIsEthereum, useIsStarknet, useTransferData} from '../Transfer/Transfer.hooks'; -import {WalletStatus} from './Wallet.enums'; -import {WalletsContext} from './Wallets.context'; -import {actions, initialState, reducer} from './Wallets.reducer'; - -export const WalletsProvider = ({children}) => { - const [state, dispatch] = useReducer(reducer, initialState); - const [pendingWalletConfig, setPendingWalletConfig] = useState({}); - const {status, connect, reset, isConnected, error, account, chainId, networkName} = useWallet(); - const {selectedAddress, isConnected: isStarknetConnected, enable} = getStarknet(); - const {action} = useTransferData(); - const [isEthereum, setEthereum] = useIsEthereum(); - const [isStarknet, setStarknet] = useIsStarknet(); - const walletConfigMap = { - [WalletType.L1]: state.l1WalletConfig, - [WalletType.L2]: state.l2WalletConfig - }; - - // Handles action change - useEffect(async () => { - if (isEthereum && isConnected()) { - setL1Wallet(); - } else if (isStarknet && isStarknetConnected) { - await setL2Wallet(); - } else { - resetActiveWallet(); - } - }, [action]); - - // Handles L2 wallet changes - useEffect(async () => { - if (isStarknet) { - if (isStarknetConnected && !isWalletConnected(WalletType.L2)) { - setWalletConfig(); - } - await setL2Wallet(); - } - }, [selectedAddress, isStarknetConnected]); - - // Handles L1 wallet changes - useEffect(async () => { - if (isEthereum) { - if (isConnected() && !isWalletConnected(WalletType.L1)) { - setWalletConfig(); - } - setL1Wallet(); - } - }, [status, error, account, chainId, networkName]); - - const connectWallet = async walletConfig => { - setPendingWalletConfig(walletConfig); - if (isEthereum) { - const {connectorId} = walletConfig; - await connect(connectorId); - setL1Wallet(); - } else { - await getStarknet({showModal: true}).enable(); - await setL2Wallet(); - } - }; - - const resetWallet = () => { - resetWalletConfig(); - if (isEthereum) { - return reset(); - } else { - return null; - } - }; - - const swapWallets = async () => { - if (isWalletConnected(WalletType.L1) && !isWalletConnected(WalletType.L2)) { - setEthereum(); - setL1Wallet(); - } else if (isWalletConnected(WalletType.L2) && !isWalletConnected(WalletType.L1)) { - setStarknet(); - await setL2Wallet(); - } - }; - - const setL1Wallet = () => { - // To support serializable object in the store - let serialError = error ? {...error} : null; - setActiveWallet({ - type: WalletType.L1, - account, - status, - chainId, - error: serialError, - chainName: networkName, - isConnected: isConnected() - }); - }; - - const setL2Wallet = async () => { - let status, - error = null; - try { - await enable(); - status = WalletStatus.CONNECTED; - } catch (err) { - error = err; - status = WalletStatus.ERROR; - } finally { - setActiveWallet({ - type: WalletType.L2, - status, - chainId, - error, - isConnected: isStarknetConnected, - account: selectedAddress, - chainName: networkName - }); - } - }; - - const isWalletConnected = walletType => { - return !!walletConfigMap[walletType]; - }; - - const activeWallet = () => { - const config = walletConfigMap[state.activeWallet.type]; - const {name, logoPath} = config || {}; - return { - ...state.activeWallet, - name, - logoPath - }; - }; - - // Dispatchers - const setActiveWallet = walletData => { - dispatch({ - type: actions.SET_ACTIVE_WALLET_ACTION, - payload: walletData - }); - }; - - const resetActiveWallet = () => { - dispatch({ - type: actions.RESET_ACTIVE_WALLET_ACTION - }); - }; - - const setWalletConfig = () => { - dispatch({ - type: actions.SET_WALLET_CONFIG_ACTION, - payload: pendingWalletConfig - }); - }; - - const resetWalletConfig = () => { - dispatch({ - type: actions.RESET_WALLET_CONFIG_ACTION - }); - }; - - // context - const context = { - ...activeWallet(), - connectWallet, - resetWallet, - swapWallets - }; - - return <WalletsContext.Provider value={context}>{children}</WalletsContext.Provider>; -}; - -WalletsProvider.propTypes = { - children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) -}; diff --git a/src/components/Features/index.js b/src/components/Features/index.js index 2fd3422f..7ecfe3c4 100644 --- a/src/components/Features/index.js +++ b/src/components/Features/index.js @@ -1,6 +1,5 @@ -export * from './Account/Account'; +export * from './Account'; +export * from './ModalProvider'; +export * from './SelectToken'; +export * from './Transfer'; export * from './Bridge/Bridge'; -export * from './ModalProvider/ModalProvider'; -export * from './SelectToken/SelectToken'; -export * from './Transfer/Transfer'; -export * from './Wallet/WalletButton/WalletButton'; diff --git a/src/components/UI/WalletButton/WalletButton.constants.js b/src/components/UI/WalletButton/WalletButton.constants.js new file mode 100644 index 00000000..157db522 --- /dev/null +++ b/src/components/UI/WalletButton/WalletButton.constants.js @@ -0,0 +1 @@ +export const WALLET_LOGO_SIZE = 30; diff --git a/src/components/UI/WalletButton/WalletButton.js b/src/components/UI/WalletButton/WalletButton.js new file mode 100644 index 00000000..d54a9050 --- /dev/null +++ b/src/components/UI/WalletButton/WalletButton.js @@ -0,0 +1,31 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {useColors} from '../../../hooks'; +import {formatAddress} from '../../../utils'; +import {Button, DynamicIcon} from '../index'; +import {WALLET_LOGO_SIZE} from './WalletButton.constants'; +import {BTN_TXT} from './WalletButton.strings'; + +export const WalletButton = ({account, logoPath, onClick}) => { + const {colorBeta, colorWhite} = useColors(); + + return ( + <Button + colorBackground="transparent" + colorBorder={colorBeta} + colorText={colorWhite} + height={40} + icon={<DynamicIcon path={logoPath} size={WALLET_LOGO_SIZE} />} + style={{borderWidth: '2px'}} + text={BTN_TXT(formatAddress(account))} + onClick={onClick} + /> + ); +}; + +WalletButton.propTypes = { + account: PropTypes.string, + logoPath: PropTypes.string, + onClick: PropTypes.func +}; diff --git a/src/components/Features/Wallet/WalletButton/WalletButton.strings.js b/src/components/UI/WalletButton/WalletButton.strings.js similarity index 64% rename from src/components/Features/Wallet/WalletButton/WalletButton.strings.js rename to src/components/UI/WalletButton/WalletButton.strings.js index f7e967ad..cb19993b 100644 --- a/src/components/Features/Wallet/WalletButton/WalletButton.strings.js +++ b/src/components/UI/WalletButton/WalletButton.strings.js @@ -1,3 +1,3 @@ -import {evaluate} from '../../../../utils'; +import {evaluate} from '../../../utils'; export const BTN_TXT = address => evaluate('Account | {{address}}', {address}); diff --git a/src/components/UI/index.js b/src/components/UI/index.js index 386a5de1..50eb6ddb 100644 --- a/src/components/UI/index.js +++ b/src/components/UI/index.js @@ -15,3 +15,4 @@ export * from './Modal/ModalBody/ModalBody'; export * from './Modal/ModalTitle/ModalTitle'; export * from './Modal/ModalFooter/ModalFooter'; export * from './Input/Input'; +export * from './WalletButton/WalletButton'; diff --git a/src/config/wallets.json b/src/config/wallets.json index 65c82e0c..f57e8379 100644 --- a/src/config/wallets.json +++ b/src/config/wallets.json @@ -3,14 +3,14 @@ "id": "metamask", "name": "MetaMask", "connectorId": "injected", - "type": 1, + "type": "ethereum", "description": "Login using a browser wallet", "logoPath": "wallets/metamask/logo.svg" }, { "id": "argent", "name": "Argent X", - "type": 2, + "type": "starknet", "description": "Login using a browser wallet", "logoPath": "wallets/argent/logo.svg" } diff --git a/src/contracts/StarknetERC20Bridge/StarknetERC20Bridge_STARKNET.json b/src/contracts/StarknetERC20Bridge/StarknetERC20Bridge_STARKNET.json new file mode 100644 index 00000000..59950f0a --- /dev/null +++ b/src/contracts/StarknetERC20Bridge/StarknetERC20Bridge_STARKNET.json @@ -0,0 +1,714 @@ +{ + "bytecode": [ + "0x40780017fff7fff", + "0x1", + "0x208b7fff7fff7ffe", + "0x20780017fff7ffd", + "0x4", + "0x400780017fff7ffd", + "0x1", + "0x208b7fff7fff7ffe", + "0x400380007ffc7ffd", + "0x482680017ffc8000", + "0x1", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x48297ffc80007ffd", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffffb", + "0x208b7fff7fff7ffe", + "0x480280017ffc8000", + "0x484480017fff8000", + "0x100000000000000000000000000000000", + "0x480280007ffc8000", + "0x40317fff7ffe7ffd", + "0x480280017ffc8000", + "0x482480017fff8000", + "0x800000000000010fffffffffffffffff7ffffffffffffef0000000000000001", + "0x20680017fff7fff", + "0xb", + "0x482680017ffc8000", + "0x2", + "0x480280007ffc8000", + "0x480680017fff8000", + "0x0", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffed", + "0x10780017fff7fff", + "0x9", + "0x482680017ffc8000", + "0x2", + "0x480280017ffc8000", + "0x480680017fff8000", + "0x8000000000000110000000000000000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffe4", + "0x480280017ffc8000", + "0x480280007ffc8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x2", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffe0", + "0x40137ffe7fff8000", + "0x40137fff7fff8001", + "0x48127ffd7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffda", + "0x48317ffe80008000", + "0x20680017fff7fff", + "0x8", + "0x48127ffc7fff8000", + "0x480a80017fff8000", + "0x48127ffc7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffcd", + "0x208b7fff7fff7ffe", + "0x48127ffc7fff8000", + "0x480a80007fff8000", + "0x48127ffb7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffc7", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x43616c6c436f6e7472616374", + "0x400280007ff97fff", + "0x400380017ff97ffa", + "0x400380027ff97ffb", + "0x400380037ff97ffc", + "0x400380047ff97ffd", + "0x482680017ff98000", + "0x7", + "0x480280057ff98000", + "0x480280067ff98000", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x47657443616c6c657241646472657373", + "0x400280007ffd7fff", + "0x482680017ffd8000", + "0x2", + "0x480280017ffd8000", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x53746f7261676552656164", + "0x400280007ffc7fff", + "0x400380017ffc7ffd", + "0x482680017ffc8000", + "0x3", + "0x480280027ffc8000", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x53746f726167655772697465", + "0x400280007ffb7fff", + "0x400380017ffb7ffc", + "0x400380027ffb7ffd", + "0x482680017ffb8000", + "0x3", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x53656e644d657373616765546f4c31", + "0x400280007ffa7fff", + "0x400380017ffa7ffb", + "0x400380027ffa7ffc", + "0x400380037ffa7ffd", + "0x482680017ffa8000", + "0x4", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff8a", + "0x40137fff7fff8000", + "0x4003800080007ffb", + "0x4003800180007ffc", + "0x4003800280007ffd", + "0x4826800180008000", + "0x3", + "0x480a7ff87fff8000", + "0x480a7ffa7fff8000", + "0x480680017fff8000", + "0x1c67057e2995950900dbf33db0f5fc9904f5a18aae4a3768f721c43efe5d288", + "0x4828800080007ffc", + "0x480a80007fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffc5", + "0x48127ffd7fff8000", + "0x480a7ff97fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff75", + "0x40137fff7fff8000", + "0x4003800080007ffb", + "0x4003800180007ffc", + "0x4003800280007ffd", + "0x4826800180008000", + "0x3", + "0x480a7ff87fff8000", + "0x480a7ffa7fff8000", + "0x480680017fff8000", + "0x3a07502a2e0e18ad6178ca530615148b9892d000199dbb29e402c41913c3d1a", + "0x4828800080007ffc", + "0x480a80007fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffb0", + "0x48127ffd7fff8000", + "0x480a7ff97fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x27", + "0x208b7fff7fff7ffe", + "0x482680017ffd8000", + "0x1", + "0x402a7ffd7ffc7fff", + "0x480280007ffb8000", + "0x480280017ffb8000", + "0x480280027ffb8000", + "0x480280007ffd8000", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffff3", + "0x40780017fff7fff", + "0x1", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0xbc9cb2b502047e302f811059d0c846a98f1390e9d19af78fc3873240d05901", + "0x208b7fff7fff7ffe", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffffa", + "0x480a7ffb7fff8000", + "0x48127ffe7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff9a", + "0x48127ffe7fff8000", + "0x48127ff57fff8000", + "0x48127ff57fff8000", + "0x48127ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffed", + "0x480a7ffa7fff8000", + "0x48127ffe7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff94", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffe5", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x4003800080007ffc", + "0x4826800180008000", + "0x1", + "0x480a7ffd7fff8000", + "0x4828800080007ffe", + "0x480a80007fff8000", + "0x208b7fff7fff7ffe", + "0x402b7ffd7ffc7ffd", + "0x480280007ffb8000", + "0x480280017ffb8000", + "0x480280027ffb8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffee", + "0x48127ffe7fff8000", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffff1", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x2d61a080f2e3fa7e5a8158531280f8e56e6d021fe226d23fcf31beda34f3ebd", + "0x208b7fff7fff7ffe", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffffa", + "0x480a7ffb7fff8000", + "0x48127ffe7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff5e", + "0x48127ffe7fff8000", + "0x48127ff57fff8000", + "0x48127ff57fff8000", + "0x48127ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffed", + "0x480a7ffa7fff8000", + "0x48127ffe7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff58", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffe5", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x4003800080007ffc", + "0x4826800180008000", + "0x1", + "0x480a7ffd7fff8000", + "0x4828800080007ffe", + "0x480a80007fff8000", + "0x208b7fff7fff7ffe", + "0x402b7ffd7ffc7ffd", + "0x480280007ffb8000", + "0x480280017ffb8000", + "0x480280027ffb8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffee", + "0x48127ffe7fff8000", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffff1", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0xaada8f27d6c6c67ba06936e4515904e39a0eaa3fbfba588583198087be24fc", + "0x208b7fff7fff7ffe", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffffa", + "0x480a7ffb7fff8000", + "0x48127ffe7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff22", + "0x48127ffe7fff8000", + "0x48127ff57fff8000", + "0x48127ff57fff8000", + "0x48127ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffed", + "0x480a7ffa7fff8000", + "0x48127ffe7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff1c", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffe5", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x4003800080007ffc", + "0x4826800180008000", + "0x1", + "0x480a7ffd7fff8000", + "0x4828800080007ffe", + "0x480a80007fff8000", + "0x208b7fff7fff7ffe", + "0x402b7ffd7ffc7ffd", + "0x480280007ffb8000", + "0x480280017ffb8000", + "0x480280027ffb8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffee", + "0x48127ffe7fff8000", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffff1", + "0x48127ff47fff8000", + "0x48127ff47fff8000", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x3", + "0x480a7ffa7fff8000", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffee7", + "0x48127ffe7fff8000", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff4a", + "0x40137fff7fff8000", + "0x400a80007fff7fe8", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff7f", + "0x40137fff7fff8001", + "0x400780017fff8001", + "0x0", + "0x40137ffc7fff8002", + "0x48127ffe7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x10000000000000000000000000000000000000000", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffeaa", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffe7c", + "0x480a80027fff8000", + "0x48127fbd7fff8000", + "0x48127ffa7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff79", + "0x208b7fff7fff7ffe", + "0x482680017ffd8000", + "0x1", + "0x402a7ffd7ffc7fff", + "0x480280007ffb8000", + "0x480280017ffb8000", + "0x480280027ffb8000", + "0x480280007ffd8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffd5", + "0x40780017fff7fff", + "0x1", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x3", + "0x480a7ffa7fff8000", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffeb0", + "0x48127ffe7fff8000", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff13", + "0x40137fff7fff8000", + "0x400a80007fff7fe8", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff9d", + "0x40137fff7fff8001", + "0x400780017fff8001", + "0x0", + "0x40137ffc7fff8002", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffe4b", + "0x480a80027fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff84", + "0x208b7fff7fff7ffe", + "0x482680017ffd8000", + "0x1", + "0x402a7ffd7ffc7fff", + "0x480280007ffb8000", + "0x480280017ffb8000", + "0x480280027ffb8000", + "0x480280007ffd8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffdb", + "0x40780017fff7fff", + "0x1", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x2", + "0x480a7ff87fff8000", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffe7f", + "0x40137ffe7fff8000", + "0x480a80007fff8000", + "0x480a7ff97fff8000", + "0x480a7ffa7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff72", + "0x40137fff7fff8001", + "0x480a80017fff8000", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffe23", + "0x48127ff97fff8000", + "0x48127ffa7fff8000", + "0x480a80017fff8000", + "0x48127fdd7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffea2", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffe16", + "0x480680017fff8000", + "0x0", + "0x400080007ffe7fff", + "0x400180017ffe7ffb", + "0x400180027ffe7ffc", + "0x400180037ffe7ffd", + "0x48127ffa7fff8000", + "0x48127fdb7fff8000", + "0x48127ff97fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff1d", + "0x48127ffc7fff8000", + "0x48127ffe7fff8000", + "0x480680017fff8000", + "0x4", + "0x48127fdf7fff8000", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffe70", + "0x48127ff57fff8000", + "0x48127ff57fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffd8000", + "0x3", + "0x402a7ffd7ffc7fff", + "0x480280007ffb8000", + "0x480280017ffb8000", + "0x480280027ffb8000", + "0x480280007ffd8000", + "0x480280017ffd8000", + "0x480280027ffd8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffca", + "0x40780017fff7fff", + "0x1", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480a7ff77fff8000", + "0x480a7ff87fff8000", + "0x480a7ff97fff8000", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffef8", + "0x40137fff7fff7ffa", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff2e", + "0x40137fff7fff8000", + "0x480a80007fff8000", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffddf", + "0x48127ff97fff8000", + "0x48127ffa7fff8000", + "0x480a80007fff8000", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffe49", + "0x48127ffe7fff8000", + "0x48127fdf7fff8000", + "0x48127ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x482680017ffd8000", + "0x4", + "0x402a7ffd7ffc7fff", + "0x480280007ffb8000", + "0x480280017ffb8000", + "0x480280027ffb8000", + "0x480280007ffd8000", + "0x480280017ffd8000", + "0x480280027ffd8000", + "0x480280037ffd8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffda", + "0x40780017fff7fff", + "0x1", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe" + ], + "abi": [ + { + "members": [ + { + "name": "low", + "offset": 0, + "type": "felt" + }, + { + "name": "high", + "offset": 1, + "type": "felt" + } + ], + "name": "Uint256", + "size": 2, + "type": "struct" + }, + { + "inputs": [ + { + "name": "governance_account_address", + "type": "felt" + } + ], + "name": "constructor", + "outputs": [], + "type": "constructor" + }, + { + "inputs": [], + "name": "governance_address", + "outputs": [ + { + "name": "res", + "type": "felt" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l1_contract_address", + "outputs": [ + { + "name": "res", + "type": "felt" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2_token_contract_address", + "outputs": [ + { + "name": "res", + "type": "felt" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "name": "l1_contract_address", + "type": "felt" + } + ], + "name": "set_l1_bridge_address", + "outputs": [], + "type": "function" + }, + { + "inputs": [ + { + "name": "l2_token_address", + "type": "felt" + } + ], + "name": "set_l2_token_address", + "outputs": [], + "type": "function" + }, + { + "inputs": [ + { + "name": "l1_recipient", + "type": "felt" + }, + { + "name": "amount", + "type": "Uint256" + } + ], + "name": "initiate_withdraw", + "outputs": [], + "type": "function" + }, + { + "inputs": [ + { + "name": "from_address", + "type": "felt" + }, + { + "name": "account", + "type": "felt" + }, + { + "name": "amount_low", + "type": "felt" + }, + { + "name": "amount_high", + "type": "felt" + } + ], + "name": "handle_deposit", + "outputs": [], + "type": "l1_handler" + } + ] +} diff --git a/src/components/Features/Wallet/Wallet.enums.js b/src/enums/WalletStatus.js similarity index 100% rename from src/components/Features/Wallet/Wallet.enums.js rename to src/enums/WalletStatus.js diff --git a/src/enums/WalletType.js b/src/enums/WalletType.js index 469a151a..b60b12b7 100644 --- a/src/enums/WalletType.js +++ b/src/enums/WalletType.js @@ -1,4 +1,4 @@ export const WalletType = { - L1: 1, - L2: 2 + ETHEREUM: 'ethereum', + STARKNET: 'starknet' }; diff --git a/src/enums/index.js b/src/enums/index.js index c2c8eb9f..f80e9fad 100644 --- a/src/enums/index.js +++ b/src/enums/index.js @@ -3,3 +3,4 @@ export * from './MenuType'; export * from './ActionType'; export * from './NetworkType'; export * from './WalletType'; +export * from './WalletStatus'; diff --git a/src/hooks/index.js b/src/hooks/index.js index d4271a4f..d89aff8b 100644 --- a/src/hooks/index.js +++ b/src/hooks/index.js @@ -3,4 +3,5 @@ export * from './useIsLoading'; export * from './useWindowSize'; export * from './useVars'; export * from './useColors'; +export * from './useTokens'; export * from './useWalletHandlerProvider'; diff --git a/src/hooks/useTokens.js b/src/hooks/useTokens.js index 986b7742..0154af0f 100644 --- a/src/hooks/useTokens.js +++ b/src/hooks/useTokens.js @@ -2,16 +2,16 @@ import {getStarknet} from '@argent/get-starknet'; import {useEffect, useState} from 'react'; import {Contract, uint256} from 'starknet'; -import {useTransferData} from '../components/Features/Transfer/Transfer.hooks'; -import {useWallets} from '../components/Features/Wallet/Wallet.hooks'; +import {useTransferData} from '../components/Features/Transfer/Transfer/Transfer.hooks'; import {createERC20Contract} from '../contracts'; import {abi} from '../contracts/ERC20/ERC20_STARKNET.json'; import {ChainType, NetworkType} from '../enums'; +import {useCombineWallets} from '../providers/CombineWalletsProvider/hooks'; import {web3} from '../web3'; export const useTokens = () => { const {action, isEthereum} = useTransferData(); - const {account, chainName} = useWallets(); + const {account, chainName} = useCombineWallets(); const [tokensData, setTokensData] = useState([]); const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(null); diff --git a/src/index.js b/src/index.js index 7c4d3571..f0f34593 100644 --- a/src/index.js +++ b/src/index.js @@ -1,37 +1,15 @@ import React from 'react'; import ReactDOM from 'react-dom'; -import {Provider} from 'react-redux'; -import {UseWalletProvider} from 'use-wallet'; import {App} from './App'; import {ModalProvider} from './components/Features'; -import {WalletsProvider} from './components/Features/Wallet/WalletsProvider'; -import { - autoConnect, - pollBalanceInterval, - pollBlockNumberInterval, - supportedChainIds -} from './config/config.json'; import './index.scss'; -import {store} from './store/store'; +import {Providers} from './providers'; ReactDOM.render( - <Provider store={store}> - <UseWalletProvider - autoConnect={autoConnect} - connectors={{ - injected: { - chainId: supportedChainIds - } - }} - pollBalanceInterval={pollBalanceInterval} - pollBlockNumberInterval={pollBlockNumberInterval} - > - <WalletsProvider> - <App /> - <ModalProvider /> - </WalletsProvider> - </UseWalletProvider> - </Provider>, + <Providers> + <App /> + <ModalProvider /> + </Providers>, document.getElementById('root') ); diff --git a/src/providers/CombineWalletsProvider/CombineWalletsProvider.js b/src/providers/CombineWalletsProvider/CombineWalletsProvider.js new file mode 100644 index 00000000..e16b21a6 --- /dev/null +++ b/src/providers/CombineWalletsProvider/CombineWalletsProvider.js @@ -0,0 +1,154 @@ +import {getStarknet} from '@argent/get-starknet'; +import PropTypes from 'prop-types'; +import React, {useEffect, useReducer, useState} from 'react'; +import {useWallet} from 'use-wallet'; + +import { + useIsEthereum, + useIsStarknet +} from '../../components/Features/Transfer/Transfer/Transfer.hooks'; +import {WalletStatus} from '../../enums'; +import {CombineWalletsContext} from './context'; +import {actions, initialState, reducer} from './reducer'; + +export const CombineWalletsProvider = ({children}) => { + const [state, dispatch] = useReducer(reducer, initialState); + const [ethereumPendingWalletConfig, setEthereumPendingWalletConfig] = useState({}); + const [starknetPendingWalletConfig, setStarknetPendingWalletConfig] = useState({}); + const {status, connect, reset, isConnected, error, account, chainId, networkName} = useWallet(); + const {selectedAddress, isConnected: isStarknetConnected, enable} = getStarknet(); + const [isEthereum, setEthereum] = useIsEthereum(); + const [isStarknet, setStarknet] = useIsStarknet(); + + // Handles starknet wallet changes + useEffect(async () => { + if (isStarknet) { + if (isStarknetConnected && !state.starknetWallet.config) { + setStarknetWalletConfig(starknetPendingWalletConfig); + } + await maybeUpdateStarknetWallet(); + } + }, [selectedAddress, isStarknetConnected]); + + // Handles ethereum wallet changes + useEffect(async () => { + if (isEthereum) { + if (isConnected() && !state.ethereumWallet.config) { + setEthereumWalletConfig(ethereumPendingWalletConfig); + } + maybeUpdateEthereumWallet(); + } + }, [status, error, account, chainId, networkName]); + + const connectWallet = async walletConfig => { + if (isEthereum) { + setEthereumPendingWalletConfig(walletConfig); + const {connectorId} = walletConfig; + await connect(connectorId); + maybeUpdateEthereumWallet(); + } else { + setStarknetPendingWalletConfig(walletConfig); + await getStarknet({showModal: true}).enable(); + await maybeUpdateStarknetWallet(); + } + }; + + const resetWallet = () => { + if (isEthereum) { + setEthereumWalletConfig(null); + return reset(); + } else { + setStarknetWalletConfig(null); + return null; + } + }; + + const swapWallets = async () => { + if (state.ethereumWallet.config && !state.starknetWallet.config) { + setEthereum(); + maybeUpdateEthereumWallet(); + } else if (state.starknetWallet.config && !state.ethereumWallet.config) { + setStarknet(); + await maybeUpdateStarknetWallet(); + } + }; + + const maybeUpdateEthereumWallet = () => { + // To support serializable object in the store + let serialError = error ? {...error} : null; + updateEthereumWallet({ + account, + status, + chainId, + error: serialError, + chainName: networkName, + isConnected: isConnected() + }); + }; + + const maybeUpdateStarknetWallet = async () => { + let status, + error = null; + try { + await enable(); + status = WalletStatus.CONNECTED; + } catch (err) { + error = err; + status = WalletStatus.ERROR; + } finally { + updateStarknetWallet({ + status, + chainId, + error, + isConnected: isStarknetConnected, + account: selectedAddress, + chainName: networkName + }); + } + }; + + // Dispatchers + const updateEthereumWallet = payload => { + dispatch({ + type: actions.UPDATE_ETHEREUM_WALLET, + payload + }); + }; + + const updateStarknetWallet = payload => { + dispatch({ + type: actions.UPDATE_STARKNET_WALLET, + payload + }); + }; + + const setEthereumWalletConfig = payload => { + dispatch({ + type: actions.SET_ETHEREUM_WALLET_CONFIG, + payload + }); + }; + + const setStarknetWalletConfig = payload => { + dispatch({ + type: actions.SET_STARKNET_WALLET_CONFIG, + payload + }); + }; + + // context + const context = { + ...state, + connectWallet, + resetWallet, + swapWallets + }; + + return ( + <CombineWalletsContext.Provider value={context}>{children}</CombineWalletsContext.Provider> + ); +}; + +CombineWalletsProvider.propTypes = { + children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) +}; diff --git a/src/providers/CombineWalletsProvider/context.js b/src/providers/CombineWalletsProvider/context.js new file mode 100644 index 00000000..a3c21e48 --- /dev/null +++ b/src/providers/CombineWalletsProvider/context.js @@ -0,0 +1,29 @@ +import {createContext} from 'react'; + +import {WalletStatus} from '../../enums'; + +export const CombineWalletsContext = createContext({ + ethereumWallet: { + library: null, + account: '', + isConnected: false, + status: WalletStatus.DISCONNECTED, + chainName: '', + chainId: -1, + error: null, + config: null + }, + starknetWallet: { + library: null, + account: '', + isConnected: false, + status: WalletStatus.DISCONNECTED, + chainName: '', + chainId: -1, + error: null, + config: null + }, + connectWallet: () => {}, + resetWallet: () => {}, + swapWallets: () => {} +}); diff --git a/src/providers/CombineWalletsProvider/hooks.js b/src/providers/CombineWalletsProvider/hooks.js new file mode 100644 index 00000000..9aa4c1ec --- /dev/null +++ b/src/providers/CombineWalletsProvider/hooks.js @@ -0,0 +1,41 @@ +import {useCallback, useContext} from 'react'; + +import {useTransferData} from '../../components/Features/Transfer/Transfer/Transfer.hooks'; +import {CombineWalletsContext} from './context'; + +export const useCombineWallets = () => { + const combineWallets = useContext(CombineWalletsContext); + const {isEthereum} = useTransferData(); + + const getActiveWallet = () => + isEthereum ? combineWallets.ethereumWallet : combineWallets.starknetWallet; + + const connectWallet = useCallback(walletConfig => combineWallets.connectWallet(walletConfig), []); + + const resetWallet = useCallback(() => combineWallets.resetWallet(), []); + + const swapWallets = useCallback(() => combineWallets.swapWallets(), []); + + return { + ...getActiveWallet(), + connectWallet, + resetWallet, + swapWallets + }; +}; + +export const useEthereumWallet = () => { + const combineWallets = useContext(CombineWalletsContext); + + return { + ...combineWallets.ethereumWallet + }; +}; + +export const useStarknetWallet = () => { + const combineWallets = useContext(CombineWalletsContext); + + return { + ...combineWallets.starknetWallet + }; +}; diff --git a/src/providers/CombineWalletsProvider/reducer.js b/src/providers/CombineWalletsProvider/reducer.js new file mode 100644 index 00000000..f4de0951 --- /dev/null +++ b/src/providers/CombineWalletsProvider/reducer.js @@ -0,0 +1,68 @@ +import {WalletStatus} from '../../enums'; + +export const actions = { + UPDATE_ETHEREUM_WALLET: 'CombineWallets/UPDATE_ETHEREUM_WALLET', + UPDATE_STARKNET_WALLET: 'CombineWallets/UPDATE_STARKNET_WALLET', + SET_ETHEREUM_WALLET_CONFIG: 'CombineWallets/SET_ETHEREUM_WALLET_CONFIG', + SET_STARKNET_WALLET_CONFIG: 'CombineWallets/SET_STARKNET_WALLET_CONFIG' +}; + +export const initialState = { + ethereumWallet: { + library: null, + account: '', + isConnected: false, + status: WalletStatus.DISCONNECTED, + chainName: '', + chainId: -1, + error: null, + config: null + }, + starknetWallet: { + library: null, + account: '', + isConnected: false, + status: WalletStatus.DISCONNECTED, + chainName: '', + chainId: -1, + error: null, + config: null + } +}; + +export const reducer = (state, action) => { + switch (action.type) { + case actions.UPDATE_ETHEREUM_WALLET: + return { + ...state, + ethereumWallet: {...state.ethereumWallet, ...action.payload} + }; + + case actions.UPDATE_STARKNET_WALLET: + return { + ...state, + starknetWallet: {...state.starknetWallet, ...action.payload} + }; + + case actions.SET_ETHEREUM_WALLET_CONFIG: + return { + ...state, + ethereumWallet: { + ...state.ethereumWallet, + config: action.payload + } + }; + + case actions.SET_STARKNET_WALLET_CONFIG: + return { + ...state, + starknetWallet: { + ...state.starknetWallet, + config: action.payload + } + }; + + default: + return state; + } +}; diff --git a/src/providers/StoreProvider/StoreProvider.js b/src/providers/StoreProvider/StoreProvider.js new file mode 100644 index 00000000..a28e4cda --- /dev/null +++ b/src/providers/StoreProvider/StoreProvider.js @@ -0,0 +1,11 @@ +import PropTypes from 'prop-types'; +import React from 'react'; +import {Provider} from 'react-redux'; + +import {store} from '../../store/store'; + +export const StoreProvider = ({children}) => <Provider store={store}>{children}</Provider>; + +StoreProvider.propTypes = { + children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) +}; diff --git a/src/providers/UseWalletProvider/UseWalletProvider.js b/src/providers/UseWalletProvider/UseWalletProvider.js new file mode 100644 index 00000000..a31fc24d --- /dev/null +++ b/src/providers/UseWalletProvider/UseWalletProvider.js @@ -0,0 +1,29 @@ +import PropTypes from 'prop-types'; +import React from 'react'; +import {UseWalletProvider as UseWalletProviderWrapper} from 'use-wallet'; + +import { + autoConnect, + pollBalanceInterval, + pollBlockNumberInterval, + supportedChainIds +} from '../../config/config.json'; + +export const UseWalletProvider = ({children}) => ( + <UseWalletProviderWrapper + autoConnect={autoConnect} + connectors={{ + injected: { + chainId: supportedChainIds + } + }} + pollBalanceInterval={pollBalanceInterval} + pollBlockNumberInterval={pollBlockNumberInterval} + > + {children} + </UseWalletProviderWrapper> +); + +UseWalletProvider.propTypes = { + children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) +}; diff --git a/src/providers/combine-providers.js b/src/providers/combine-providers.js new file mode 100644 index 00000000..b5881d18 --- /dev/null +++ b/src/providers/combine-providers.js @@ -0,0 +1,8 @@ +import React from 'react'; + +export const combineProviders = providers => + providers.reduce((Combined, Provider) => ({children}) => ( + <Combined> + <Provider>{children}</Provider> + </Combined> + )); diff --git a/src/providers/index.js b/src/providers/index.js new file mode 100644 index 00000000..9bb6fe35 --- /dev/null +++ b/src/providers/index.js @@ -0,0 +1,10 @@ +import {CombineWalletsProvider} from './CombineWalletsProvider/CombineWalletsProvider'; +import {StoreProvider} from './StoreProvider/StoreProvider'; +import {UseWalletProvider} from './UseWalletProvider/UseWalletProvider'; +import {combineProviders} from './combine-providers'; + +export const Providers = combineProviders([ + StoreProvider, + UseWalletProvider, + CombineWalletsProvider +]); diff --git a/src/store/store.js b/src/store/store.js index 46f8bc03..f5516d80 100644 --- a/src/store/store.js +++ b/src/store/store.js @@ -1,8 +1,8 @@ import {configureStore} from '@reduxjs/toolkit'; import bridge from '../components/Features/Bridge/Bridge.slice'; -import modal from '../components/Features/ModalProvider/ModalProvider.slice'; -import transfer from '../components/Features/Transfer/Transfer.slice'; +import modal from '../components/Features/ModalProvider/ModalProvider/ModalProvider.slice'; +import transfer from '../components/Features/Transfer/Transfer/Transfer.slice'; export const store = configureStore({ reducer: { From b528f5f61137cb279ee48dbdb2979638cb90c910 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Thu, 9 Dec 2021 14:26:45 +0200 Subject: [PATCH 007/211] feat: blockchain hooks (#3) --- src/abis/ethereum/erc20-bridge.json | 303 + src/abis/ethereum/erc20.json | 233 + src/abis/ethereum/eth-bridge.json | 298 + src/abis/ethereum/index.js | 4 + src/abis/ethereum/messaging.json | 205 + src/abis/starknet/erc20-bridge.json | 126 + src/abis/starknet/erc20.json | 224 + src/abis/starknet/index.js | 2 + .../SelectToken/SelectToken/SelectToken.js | 32 +- .../SelectTokenList/SelectTokenList.js | 10 +- .../SelectTokenRow/SelectTokenRow.js | 79 +- src/config/contracts/contracts.ethereum.js | 16 + src/config/contracts/contracts.starknet.js | 11 + src/config/tokens/ethereum.goerli.json | 17 - src/config/tokens/ethereum.json | 12 - src/config/tokens/starknet.goerli.json | 12 - src/config/tokens/starknet.json | 1 - src/config/tokens/tokens.ethereum.js | 28 + src/config/tokens/tokens.starknet.js | 12 + src/config/wallets.js | 19 + src/config/wallets.json | 17 - src/contracts/ERC20/ERC20.js | 4 - src/contracts/ERC20/ERC20.json | 13771 ------- src/contracts/ERC20/ERC20_STARKNET.json | 226 - .../StarknetERC20Bridge.js | 6 - .../StarknetERC20Bridge.json | 31587 ---------------- .../StarknetERC20Bridge_STARKNET.json | 714 - .../StarknetEthBridge/StarknetEthBridge.js | 6 - .../StarknetEthBridge/StarknetEthBridge.json | 26116 ------------- .../StarknetMessaging/StarknetMessaging.js | 6 - .../StarknetMessaging/StarknetMessaging.json | 7911 ---- src/contracts/index.js | 4 - src/hooks/index.js | 1 + src/hooks/useContract.js | 81 + src/hooks/useTokenBalance.js | 24 + src/hooks/useTokens.js | 93 +- src/hooks/useWalletHandlerProvider.js | 4 +- .../CombineWalletsProvider.js | 11 +- src/providers/combine-providers.js | 1 + src/services/storage-manager.js | 2 +- src/utils/contract.js | 33 + src/utils/string.js | 2 +- 42 files changed, 1700 insertions(+), 80564 deletions(-) create mode 100644 src/abis/ethereum/erc20-bridge.json create mode 100644 src/abis/ethereum/erc20.json create mode 100644 src/abis/ethereum/eth-bridge.json create mode 100644 src/abis/ethereum/index.js create mode 100644 src/abis/ethereum/messaging.json create mode 100644 src/abis/starknet/erc20-bridge.json create mode 100644 src/abis/starknet/erc20.json create mode 100644 src/abis/starknet/index.js create mode 100644 src/config/contracts/contracts.ethereum.js create mode 100644 src/config/contracts/contracts.starknet.js delete mode 100644 src/config/tokens/ethereum.goerli.json delete mode 100644 src/config/tokens/ethereum.json delete mode 100644 src/config/tokens/starknet.goerli.json delete mode 100644 src/config/tokens/starknet.json create mode 100644 src/config/tokens/tokens.ethereum.js create mode 100644 src/config/tokens/tokens.starknet.js create mode 100644 src/config/wallets.js delete mode 100644 src/config/wallets.json delete mode 100644 src/contracts/ERC20/ERC20.js delete mode 100644 src/contracts/ERC20/ERC20.json delete mode 100644 src/contracts/ERC20/ERC20_STARKNET.json delete mode 100644 src/contracts/StarknetERC20Bridge/StarknetERC20Bridge.js delete mode 100644 src/contracts/StarknetERC20Bridge/StarknetERC20Bridge.json delete mode 100644 src/contracts/StarknetERC20Bridge/StarknetERC20Bridge_STARKNET.json delete mode 100644 src/contracts/StarknetEthBridge/StarknetEthBridge.js delete mode 100644 src/contracts/StarknetEthBridge/StarknetEthBridge.json delete mode 100644 src/contracts/StarknetMessaging/StarknetMessaging.js delete mode 100644 src/contracts/StarknetMessaging/StarknetMessaging.json delete mode 100644 src/contracts/index.js create mode 100644 src/hooks/useContract.js create mode 100644 src/hooks/useTokenBalance.js create mode 100644 src/utils/contract.js diff --git a/src/abis/ethereum/erc20-bridge.json b/src/abis/ethereum/erc20-bridge.json new file mode 100644 index 00000000..51e3d895 --- /dev/null +++ b/src/abis/ethereum/erc20-bridge.json @@ -0,0 +1,303 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + } + ], + "name": "LogDeposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "acceptedGovernor", + "type": "address" + } + ], + "name": "LogNewGovernorAccepted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "nominatedGovernor", + "type": "address" + } + ], + "name": "LogNominatedGovernor", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "LogNominationCancelled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "removedGovernor", + "type": "address" + } + ], + "name": "LogRemovedGovernor", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "LogSetL2TokenContract", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "LogSetMaxDeposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "LogSetMaxTotalBalance", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "LogWithdrawal", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "isFrozen", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "l2TokenContract_", + "type": "uint256" + } + ], + "name": "setL2TokenContract", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "maxDeposit_", + "type": "uint256" + } + ], + "name": "setMaxDeposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "maxTotalBalance_", + "type": "uint256" + } + ], + "name": "setMaxTotalBalance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "starknetAcceptGovernance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "starknetCancelNomination", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "testGovernor", + "type": "address" + } + ], + "name": "starknetIsGovernor", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newGovernor", + "type": "address" + } + ], + "name": "starknetNominateNewGovernor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "governorForRemoval", + "type": "address" + } + ], + "name": "starknetRemoveGovernor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/src/abis/ethereum/erc20.json b/src/abis/ethereum/erc20.json new file mode 100644 index 00000000..d192cb03 --- /dev/null +++ b/src/abis/ethereum/erc20.json @@ -0,0 +1,233 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/src/abis/ethereum/eth-bridge.json b/src/abis/ethereum/eth-bridge.json new file mode 100644 index 00000000..6d96ed4f --- /dev/null +++ b/src/abis/ethereum/eth-bridge.json @@ -0,0 +1,298 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + } + ], + "name": "LogDeposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "acceptedGovernor", + "type": "address" + } + ], + "name": "LogNewGovernorAccepted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "nominatedGovernor", + "type": "address" + } + ], + "name": "LogNominatedGovernor", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "LogNominationCancelled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "removedGovernor", + "type": "address" + } + ], + "name": "LogRemovedGovernor", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "LogSetL2TokenContract", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "LogSetMaxDeposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "LogSetMaxTotalBalance", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "LogWithdrawal", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "isFrozen", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "l2TokenContract_", + "type": "uint256" + } + ], + "name": "setL2TokenContract", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "maxDeposit_", + "type": "uint256" + } + ], + "name": "setMaxDeposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "maxTotalBalance_", + "type": "uint256" + } + ], + "name": "setMaxTotalBalance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "starknetAcceptGovernance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "starknetCancelNomination", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "testGovernor", + "type": "address" + } + ], + "name": "starknetIsGovernor", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newGovernor", + "type": "address" + } + ], + "name": "starknetNominateNewGovernor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "governorForRemoval", + "type": "address" + } + ], + "name": "starknetRemoveGovernor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/src/abis/ethereum/index.js b/src/abis/ethereum/index.js new file mode 100644 index 00000000..70407d89 --- /dev/null +++ b/src/abis/ethereum/index.js @@ -0,0 +1,4 @@ +export * as ERC20_ABI from './erc20.json'; +export * as ERC20_BRIDGE_ABI from './erc20-bridge.json'; +export * as ETH_BRIDGE_ABI from './eth-bridge.json'; +export * as MESSAGING_ABI from './messaging.json'; diff --git a/src/abis/ethereum/messaging.json b/src/abis/ethereum/messaging.json new file mode 100644 index 00000000..b5f5c71a --- /dev/null +++ b/src/abis/ethereum/messaging.json @@ -0,0 +1,205 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "from_address", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "to_address", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "payload", + "type": "uint256[]" + } + ], + "name": "ConsumedMessageToL1", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from_address", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "to_address", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "selector", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "payload", + "type": "uint256[]" + } + ], + "name": "ConsumedMessageToL2", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "from_address", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "to_address", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "payload", + "type": "uint256[]" + } + ], + "name": "LogMessageToL1", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from_address", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "to_address", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "selector", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "payload", + "type": "uint256[]" + } + ], + "name": "LogMessageToL2", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "from_address", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "payload", + "type": "uint256[]" + } + ], + "name": "consumeMessageFromL2", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "msgHash", + "type": "bytes32" + } + ], + "name": "l1ToL2Messages", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "msgHash", + "type": "bytes32" + } + ], + "name": "l2ToL1Messages", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "to_address", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "selector", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "payload", + "type": "uint256[]" + } + ], + "name": "sendMessageToL2", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/src/abis/starknet/erc20-bridge.json b/src/abis/starknet/erc20-bridge.json new file mode 100644 index 00000000..1c19e58a --- /dev/null +++ b/src/abis/starknet/erc20-bridge.json @@ -0,0 +1,126 @@ +[ + { + "members": [ + { + "name": "low", + "offset": 0, + "type": "felt" + }, + { + "name": "high", + "offset": 1, + "type": "felt" + } + ], + "name": "Uint256", + "size": 2, + "type": "struct" + }, + { + "inputs": [ + { + "name": "governance_account_address", + "type": "felt" + } + ], + "name": "constructor", + "outputs": [], + "type": "constructor" + }, + { + "inputs": [], + "name": "governance_address", + "outputs": [ + { + "name": "res", + "type": "felt" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l1_contract_address", + "outputs": [ + { + "name": "res", + "type": "felt" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2_token_contract_address", + "outputs": [ + { + "name": "res", + "type": "felt" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "name": "l1_contract_address", + "type": "felt" + } + ], + "name": "set_l1_bridge_address", + "outputs": [], + "type": "function" + }, + { + "inputs": [ + { + "name": "l2_token_address", + "type": "felt" + } + ], + "name": "set_l2_token_address", + "outputs": [], + "type": "function" + }, + { + "inputs": [ + { + "name": "l1_recipient", + "type": "felt" + }, + { + "name": "amount", + "type": "Uint256" + } + ], + "name": "initiate_withdraw", + "outputs": [], + "type": "function" + }, + { + "inputs": [ + { + "name": "from_address", + "type": "felt" + }, + { + "name": "account", + "type": "felt" + }, + { + "name": "amount_low", + "type": "felt" + }, + { + "name": "amount_high", + "type": "felt" + } + ], + "name": "handle_deposit", + "outputs": [], + "type": "l1_handler" + } +] diff --git a/src/abis/starknet/erc20.json b/src/abis/starknet/erc20.json new file mode 100644 index 00000000..03bf07af --- /dev/null +++ b/src/abis/starknet/erc20.json @@ -0,0 +1,224 @@ +[ + { + "members": [ + { + "name": "low", + "offset": 0, + "type": "felt" + }, + { + "name": "high", + "offset": 1, + "type": "felt" + } + ], + "name": "Uint256", + "size": 2, + "type": "struct" + }, + { + "inputs": [ + { + "name": "governance_account_address", + "type": "felt" + } + ], + "name": "constructor", + "outputs": [], + "type": "constructor" + }, + { + "inputs": [], + "name": "governance_address", + "outputs": [ + { + "name": "res", + "type": "felt" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "total_supply", + "outputs": [ + { + "name": "res", + "type": "Uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "name": "account", + "type": "felt" + } + ], + "name": "balance_of", + "outputs": [ + { + "name": "balance", + "type": "Uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "name": "owner", + "type": "felt" + }, + { + "name": "spender", + "type": "felt" + } + ], + "name": "allowance", + "outputs": [ + { + "name": "allowance", + "type": "Uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "permitted_minter", + "outputs": [ + { + "name": "res", + "type": "felt" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "name": "minter_address", + "type": "felt" + } + ], + "name": "set_permitted_minter", + "outputs": [], + "type": "function" + }, + { + "inputs": [ + { + "name": "account", + "type": "felt" + }, + { + "name": "amount", + "type": "Uint256" + } + ], + "name": "permissioned_mint", + "outputs": [], + "type": "function" + }, + { + "inputs": [ + { + "name": "account", + "type": "felt" + }, + { + "name": "amount", + "type": "Uint256" + } + ], + "name": "permissioned_burn", + "outputs": [], + "type": "function" + }, + { + "inputs": [ + { + "name": "recipient", + "type": "felt" + }, + { + "name": "amount", + "type": "Uint256" + } + ], + "name": "transfer", + "outputs": [], + "type": "function" + }, + { + "inputs": [ + { + "name": "spender", + "type": "felt" + }, + { + "name": "amount", + "type": "Uint256" + } + ], + "name": "approve", + "outputs": [], + "type": "function" + }, + { + "inputs": [ + { + "name": "sender", + "type": "felt" + }, + { + "name": "recipient", + "type": "felt" + }, + { + "name": "amount", + "type": "Uint256" + } + ], + "name": "transfer_from", + "outputs": [], + "type": "function" + }, + { + "inputs": [ + { + "name": "spender", + "type": "felt" + }, + { + "name": "added_value", + "type": "Uint256" + } + ], + "name": "increase_allowance", + "outputs": [], + "type": "function" + }, + { + "inputs": [ + { + "name": "spender", + "type": "felt" + }, + { + "name": "subtracted_value", + "type": "Uint256" + } + ], + "name": "decrease_allowance", + "outputs": [], + "type": "function" + } +] diff --git a/src/abis/starknet/index.js b/src/abis/starknet/index.js new file mode 100644 index 00000000..e63b29b2 --- /dev/null +++ b/src/abis/starknet/index.js @@ -0,0 +1,2 @@ +export * as STARKNET_ERC20_ABI from './erc20.json'; +export * as STARKNET_ERC20_BRIDGE_ABI from './erc20-bridge.json'; diff --git a/src/components/Features/SelectToken/SelectToken/SelectToken.js b/src/components/Features/SelectToken/SelectToken/SelectToken.js index d7d747d2..7abb077d 100644 --- a/src/components/Features/SelectToken/SelectToken/SelectToken.js +++ b/src/components/Features/SelectToken/SelectToken/SelectToken.js @@ -3,8 +3,7 @@ import React, {useEffect, useState} from 'react'; import EthereumLogo from '../../../../assets/svg/tokens/eth.svg'; import StarkNetLogo from '../../../../assets/svg/tokens/starknet.svg'; import {useColors, useTokens} from '../../../../hooks'; -import {BackButton, Loading, Menu, MenuTitle} from '../../../UI'; -import {LoadingSize} from '../../../UI/Loading/Loading.enums'; +import {BackButton, Menu, MenuTitle} from '../../../UI'; import {useBridgeActions} from '../../Bridge/Bridge.hooks'; import {useTransferActions, useTransferData} from '../../Transfer/Transfer/Transfer.hooks'; import {SearchToken} from '../SearchToken/SearchToken'; @@ -13,16 +12,16 @@ import styles from './SelectToken.module.scss'; import {TITLE_TXT} from './SelectToken.strings'; export const SelectToken = () => { - const {isLoading, tokensData} = useTokens(); + const tokens = useTokens(); const {colorBeta} = useColors(); const {showTransferMenu} = useBridgeActions(); const {isEthereum, fromNetwork} = useTransferData(); const {selectToken} = useTransferActions(); - const [searchTokens, setSearchTokens] = useState(tokensData); + const [searchTokens, setSearchTokens] = useState(tokens); useEffect(() => { - setSearchTokens(tokensData); - }, [tokensData]); + setSearchTokens(tokens); + }, [tokens]); const onTokenSelect = tokenData => { selectToken(tokenData); @@ -35,22 +34,11 @@ export const SelectToken = () => { <BackButton onClick={showTransferMenu} /> <MenuTitle text={TITLE_TXT} /> <MenuTitle color={colorBeta} text={fromNetwork.name} /> - <> - {isLoading && ( - <div className={styles.loadingContainer}> - <Loading size={LoadingSize.EXTRA_LARGE} /> - </div> - )} - {!isLoading && ( - <> - <SearchToken - tokens={tokensData} - onSearchResults={searchResult => setSearchTokens(searchResult)} - /> - <SelectTokenList tokens={searchTokens} onClick={onTokenSelect} /> - </> - )} - </> + <SearchToken + tokens={tokens} + onSearchResults={searchResult => setSearchTokens(searchResult)} + /> + <SelectTokenList tokens={searchTokens} onClick={onTokenSelect} /> <div className={styles.background} style={{ diff --git a/src/components/Features/SelectToken/SelectTokenList/SelectTokenList.js b/src/components/Features/SelectToken/SelectTokenList/SelectTokenList.js index ce303e9a..6629217d 100644 --- a/src/components/Features/SelectToken/SelectTokenList/SelectTokenList.js +++ b/src/components/Features/SelectToken/SelectTokenList/SelectTokenList.js @@ -7,15 +7,7 @@ import styles from './SelectTokenList.module.scss'; export const SelectTokenList = ({tokens, onClick}) => ( <div className={styles.selectTokenList}> {tokens.map((tokenData, index) => { - return ( - <SelectTokenRow - key={index} - balance={tokenData.balance} - name={tokenData.name} - symbol={tokenData.symbol} - onClick={() => onClick(tokenData)} - /> - ); + return <SelectTokenRow key={index} tokenData={tokenData} onClick={onClick} />; })} </div> ); diff --git a/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js b/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js index 7cb2a481..1ef15c7d 100644 --- a/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js +++ b/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js @@ -1,44 +1,67 @@ import PropTypes from 'prop-types'; -import React from 'react'; +import React, {useEffect, useState} from 'react'; +import {useTokenBalance} from '../../../../hooks/useTokenBalance'; +import {useCombineWallets} from '../../../../providers/CombineWalletsProvider/hooks'; import {formatBalance, toClasses} from '../../../../utils'; import {CryptoLogo, Loading} from '../../../UI'; import {CryptoLogoSize} from '../../../UI/CryptoLogo/CryptoLogo.enums'; import {LoadingSize} from '../../../UI/Loading/Loading.enums'; import styles from './SelectTokenRow.module.scss'; -export const SelectTokenRow = ({name, balance, symbol, onClick}) => ( - <div - className={toClasses(styles.selectTokenRow, typeof balance !== 'number' && styles.isLoading)} - onClick={onClick} - > - <hr /> - <div className={styles.data}> - <div className={styles.left}> - <CryptoLogo size={CryptoLogoSize.MEDIUM} symbol={symbol} /> - <div> - <div className={styles.symbol}>{symbol}</div> - <div className={styles.name}>{name}</div> +export const SelectTokenRow = ({tokenData, onClick}) => { + const {name, symbol, address} = tokenData; + const {account} = useCombineWallets(); + const [, setError] = useState(null); + const [isLoading, setIsLoading] = useState(true); + const [balance, setBalance] = useState(null); + const getBalance = useTokenBalance(address); + + useEffect(async () => { + setIsLoading(true); + setError(null); + try { + const bal = await getBalance(account); + setBalance(bal); + } catch (ex) { + setError(ex); + } finally { + setIsLoading(false); + } + }, []); + + return ( + <div + className={toClasses(styles.selectTokenRow, isLoading && styles.isLoading)} + onClick={() => onClick({...tokenData, balance})} + > + <hr /> + <div className={styles.data}> + <div className={styles.left}> + <CryptoLogo size={CryptoLogoSize.MEDIUM} symbol={symbol} /> + <div> + <div className={styles.symbol}>{symbol}</div> + <div className={styles.name}>{name}</div> + </div> + </div> + <div className={styles.right}> + <> + {!isLoading ? ( + <div className={styles.balance}> + {formatBalance(balance)} {symbol} + </div> + ) : ( + <Loading size={LoadingSize.SMALL} /> + )} + </> </div> - </div> - <div className={styles.right}> - <> - {typeof balance === 'number' ? ( - <div className={styles.balance}> - {formatBalance(balance)} {symbol} - </div> - ) : ( - <Loading size={LoadingSize.SMALL} /> - )} - </> </div> </div> - </div> -); + ); +}; SelectTokenRow.propTypes = { name: PropTypes.string, - balance: PropTypes.number, - symbol: PropTypes.string, + tokenData: PropTypes.object, onClick: PropTypes.func }; diff --git a/src/config/contracts/contracts.ethereum.js b/src/config/contracts/contracts.ethereum.js new file mode 100644 index 00000000..0dd78f92 --- /dev/null +++ b/src/config/contracts/contracts.ethereum.js @@ -0,0 +1,16 @@ +import {ChainType} from '../../enums'; + +export const ERC20_BRIDGE_CONTRACT_ADDRESS = { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x70BaacDe3C91b64f00D37a9B07Bf294600655fD2' +}; + +export const ETH_BRIDGE_CONTRACT_ADDRESS = { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '' +}; + +export const MESSAGING_CONTRACT_ADDRESS = { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0xde29d060D45901Fb19ED6C6e959EB22d8626708e' +}; diff --git a/src/config/contracts/contracts.starknet.js b/src/config/contracts/contracts.starknet.js new file mode 100644 index 00000000..6a5a46e8 --- /dev/null +++ b/src/config/contracts/contracts.starknet.js @@ -0,0 +1,11 @@ +import {ChainType} from '../../enums'; + +export const STARKNET_ERC20_BRIDGE_CONTRACT_ADDRESS = { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x06c96d68401b740dbca6fb352262ea7d5026373ad5988b785f06ebc2aa23391f' +}; + +export const STARKNET_ETH_BRIDGE_CONTRACT_ADDRESS = { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '' +}; diff --git a/src/config/tokens/ethereum.goerli.json b/src/config/tokens/ethereum.goerli.json deleted file mode 100644 index fa2ba0cd..00000000 --- a/src/config/tokens/ethereum.goerli.json +++ /dev/null @@ -1,17 +0,0 @@ -[ - { - "address": "0xce87904b5fce1ced9e548c061d0ceb9950401758", - "name": "HEX", - "symbol": "HEX" - }, - { - "address": "0x0b788e8d159c1959bd8dde838790df79d015ee57", - "name": "Dai Stablecoin", - "symbol": "DAI" - }, - { - "address": "0xe4C2493C66e068D65Cf1C38a2d7bDa25d9f08980", - "name": "ERC20 StarkNet Token", - "symbol": "E20ST" - } -] diff --git a/src/config/tokens/ethereum.json b/src/config/tokens/ethereum.json deleted file mode 100644 index eae1fe92..00000000 --- a/src/config/tokens/ethereum.json +++ /dev/null @@ -1,12 +0,0 @@ -[ - { - "address": "0x2b591e99afe9f32eaa6214f7b7629768c40eeb39", - "name": "HEX", - "symbol": "HEX" - }, - { - "address": "0x6b175474e89094c44da98b954eedeac495271d0f", - "name": "Dai Stablecoin", - "symbol": "DAI" - } -] diff --git a/src/config/tokens/starknet.goerli.json b/src/config/tokens/starknet.goerli.json deleted file mode 100644 index b1c6a276..00000000 --- a/src/config/tokens/starknet.goerli.json +++ /dev/null @@ -1,12 +0,0 @@ -[ - { - "address": "0x06ebb42ca1b237cd92fcc677d9ff02ffadcc3c66d5748f6ebd795b531c51266c", - "name": "ERC20 StarkNet Token", - "symbol": "E20ST" - }, - { - "address": "0x00a45e3942b7a75983dea7afffda9304d0273773619d1e3d5eaa757d751bfaf3", - "name": "Playground Token", - "symbol": "TEST" - } -] diff --git a/src/config/tokens/starknet.json b/src/config/tokens/starknet.json deleted file mode 100644 index fe51488c..00000000 --- a/src/config/tokens/starknet.json +++ /dev/null @@ -1 +0,0 @@ -[] diff --git a/src/config/tokens/tokens.ethereum.js b/src/config/tokens/tokens.ethereum.js new file mode 100644 index 00000000..ebc417cd --- /dev/null +++ b/src/config/tokens/tokens.ethereum.js @@ -0,0 +1,28 @@ +import {ChainType} from '../../enums'; + +export default [ + { + address: { + [ChainType.MAIN.id]: '0x2b591e99afe9f32eaa6214f7b7629768c40eeb39', + [ChainType.GOERLI.id]: '0xce87904b5fce1ced9e548c061d0ceb9950401758' + }, + name: 'HEX', + symbol: 'HEX' + }, + { + address: { + [ChainType.MAIN.id]: '0x6b175474e89094c44da98b954eedeac495271d0f', + [ChainType.GOERLI.id]: '0x0b788e8d159c1959bd8dde838790df79d015ee57' + }, + name: 'Dai Stablecoin', + symbol: 'DAI' + }, + { + address: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0xe4C2493C66e068D65Cf1C38a2d7bDa25d9f08980' + }, + name: 'ERC20 StarkNet Token', + symbol: 'E20ST' + } +]; diff --git a/src/config/tokens/tokens.starknet.js b/src/config/tokens/tokens.starknet.js new file mode 100644 index 00000000..44aa4101 --- /dev/null +++ b/src/config/tokens/tokens.starknet.js @@ -0,0 +1,12 @@ +import {ChainType} from '../../enums'; + +export default [ + { + address: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x06ebb42ca1b237cd92fcc677d9ff02ffadcc3c66d5748f6ebd795b531c51266c' + }, + name: 'ERC20 StarkNet Token', + symbol: 'E20ST' + } +]; diff --git a/src/config/wallets.js b/src/config/wallets.js new file mode 100644 index 00000000..4eac68c2 --- /dev/null +++ b/src/config/wallets.js @@ -0,0 +1,19 @@ +import {WalletType} from '../enums'; + +export default [ + { + id: 'metamask', + name: 'MetaMask', + connectorId: 'injected', + type: WalletType.ETHEREUM, + description: 'Login using a browser wallet', + logoPath: 'wallets/metamask/logo.svg' + }, + { + id: 'argent', + name: 'Argent X', + type: WalletType.STARKNET, + description: 'Login using a browser wallet', + logoPath: 'wallets/argent/logo.svg' + } +]; diff --git a/src/config/wallets.json b/src/config/wallets.json deleted file mode 100644 index f57e8379..00000000 --- a/src/config/wallets.json +++ /dev/null @@ -1,17 +0,0 @@ -[ - { - "id": "metamask", - "name": "MetaMask", - "connectorId": "injected", - "type": "ethereum", - "description": "Login using a browser wallet", - "logoPath": "wallets/metamask/logo.svg" - }, - { - "id": "argent", - "name": "Argent X", - "type": "starknet", - "description": "Login using a browser wallet", - "logoPath": "wallets/argent/logo.svg" - } -] diff --git a/src/contracts/ERC20/ERC20.js b/src/contracts/ERC20/ERC20.js deleted file mode 100644 index 9dcc7d86..00000000 --- a/src/contracts/ERC20/ERC20.js +++ /dev/null @@ -1,4 +0,0 @@ -import {web3} from '../../web3'; -import {abi} from './ERC20.json'; - -export const createERC20Contract = address => new web3.eth.Contract(abi, address); diff --git a/src/contracts/ERC20/ERC20.json b/src/contracts/ERC20/ERC20.json deleted file mode 100644 index abee352b..00000000 --- a/src/contracts/ERC20/ERC20.json +++ /dev/null @@ -1,13771 +0,0 @@ -{ - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "allSourcePaths": { - "24": "contracts/starkware/contracts/tokens/ERC20/ERC20.sol", - "25": "contracts/starkware/contracts/tokens/ERC20/IERC20.sol" - }, - "ast": { - "absolutePath": "contracts/starkware/contracts/tokens/ERC20/ERC20.sol", - "exportedSymbols": { - "ERC20": [2626] - }, - "id": 2627, - "license": "Apache-2.0.", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 2143, - "literals": ["solidity", "^", "0.6", ".12"], - "nodeType": "PragmaDirective", - "src": "40:24:24" - }, - { - "absolutePath": "contracts/starkware/contracts/tokens/ERC20/IERC20.sol", - "file": "./IERC20.sol", - "id": 2144, - "nodeType": "ImportDirective", - "scope": 2627, - "sourceUnit": 2696, - "src": "66:22:24", - "symbolAliases": [], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 2145, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2695, - "src": "108:6:24", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$2695", - "typeString": "contract IERC20" - } - }, - "id": 2146, - "nodeType": "InheritanceSpecifier", - "src": "108:6:24" - } - ], - "contractDependencies": [2695], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 2626, - "linearizedBaseContracts": [2626, 2695], - "name": "ERC20", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "id": 2150, - "mutability": "mutable", - "name": "_balances", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2626, - "src": "121:46:24", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "typeName": { - "id": 2149, - "keyType": { - "id": 2147, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "129:7:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "121:27:24", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueType": { - "id": 2148, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "140:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2156, - "mutability": "mutable", - "name": "_allowances", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2626, - "src": "174:68:24", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - }, - "typeName": { - "id": 2155, - "keyType": { - "id": 2151, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "182:7:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "174:47:24", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - }, - "valueType": { - "id": 2154, - "keyType": { - "id": 2152, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "201:7:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "193:27:24", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueType": { - "id": 2153, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "212:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2158, - "mutability": "mutable", - "name": "_totalSupply", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2626, - "src": "249:29:24", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2157, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "249:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "baseFunctions": [2633], - "body": { - "id": 2166, - "nodeType": "Block", - "src": "347:36:24", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 2164, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2158, - "src": "364:12:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 2163, - "id": 2165, - "nodeType": "Return", - "src": "357:19:24" - } - ] - }, - "documentation": null, - "functionSelector": "18160ddd", - "id": 2167, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "totalSupply", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 2160, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "320:8:24" - }, - "parameters": { - "id": 2159, - "nodeType": "ParameterList", - "parameters": [], - "src": "305:2:24" - }, - "returnParameters": { - "id": 2163, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2162, - "mutability": "mutable", - "name": "", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2167, - "src": "338:7:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2161, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "338:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "337:9:24" - }, - "scope": 2626, - "src": "285:98:24", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [2640], - "body": { - "id": 2179, - "nodeType": "Block", - "src": "464:42:24", - "statements": [ - { - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 2175, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2150, - "src": "481:9:24", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 2177, - "indexExpression": { - "argumentTypes": null, - "id": 2176, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2169, - "src": "491:7:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "481:18:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 2174, - "id": 2178, - "nodeType": "Return", - "src": "474:25:24" - } - ] - }, - "documentation": null, - "functionSelector": "70a08231", - "id": 2180, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "balanceOf", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 2171, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "437:8:24" - }, - "parameters": { - "id": 2170, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2169, - "mutability": "mutable", - "name": "account", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2180, - "src": "408:15:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2168, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "408:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "407:17:24" - }, - "returnParameters": { - "id": 2174, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2173, - "mutability": "mutable", - "name": "", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2180, - "src": "455:7:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2172, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "455:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "454:9:24" - }, - "scope": 2626, - "src": "389:117:24", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [2649], - "body": { - "id": 2199, - "nodeType": "Block", - "src": "604:78:24", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 2191, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "624:3:24", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 2192, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "624:10:24", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 2193, - "name": "recipient", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2182, - "src": "636:9:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 2194, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2184, - "src": "647:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2190, - "name": "_transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2439, - "src": "614:9:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 2195, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "614:40:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2196, - "nodeType": "ExpressionStatement", - "src": "614:40:24" - }, - { - "expression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 2197, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "671:4:24", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 2189, - "id": 2198, - "nodeType": "Return", - "src": "664:11:24" - } - ] - }, - "documentation": null, - "functionSelector": "a9059cbb", - "id": 2200, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "transfer", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 2186, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "580:8:24" - }, - "parameters": { - "id": 2185, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2182, - "mutability": "mutable", - "name": "recipient", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2200, - "src": "530:17:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2181, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "530:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2184, - "mutability": "mutable", - "name": "amount", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2200, - "src": "549:14:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2183, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "549:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "529:35:24" - }, - "returnParameters": { - "id": 2189, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2188, - "mutability": "mutable", - "name": "", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2200, - "src": "598:4:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 2187, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "598:4:24", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "597:6:24" - }, - "scope": 2626, - "src": "512:170:24", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "public" - }, - { - "baseFunctions": [2658], - "body": { - "id": 2216, - "nodeType": "Block", - "src": "778:51:24", - "statements": [ - { - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 2210, - "name": "_allowances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2156, - "src": "795:11:24", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 2212, - "indexExpression": { - "argumentTypes": null, - "id": 2211, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2202, - "src": "807:5:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "795:18:24", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 2214, - "indexExpression": { - "argumentTypes": null, - "id": 2213, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2204, - "src": "814:7:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "795:27:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 2209, - "id": 2215, - "nodeType": "Return", - "src": "788:34:24" - } - ] - }, - "documentation": null, - "functionSelector": "dd62ed3e", - "id": 2217, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "allowance", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 2206, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "751:8:24" - }, - "parameters": { - "id": 2205, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2202, - "mutability": "mutable", - "name": "owner", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2217, - "src": "707:13:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2201, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "707:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2204, - "mutability": "mutable", - "name": "spender", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2217, - "src": "722:15:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2203, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "722:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "706:32:24" - }, - "returnParameters": { - "id": 2209, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2208, - "mutability": "mutable", - "name": "", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2217, - "src": "769:7:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2207, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "769:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "768:9:24" - }, - "scope": 2626, - "src": "688:141:24", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [2667], - "body": { - "id": 2236, - "nodeType": "Block", - "src": "915:74:24", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 2228, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "934:3:24", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 2229, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "934:10:24", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 2230, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2219, - "src": "946:7:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 2231, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2221, - "src": "955:5:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2227, - "name": "_approve", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2587, - "src": "925:8:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 2232, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "925:36:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2233, - "nodeType": "ExpressionStatement", - "src": "925:36:24" - }, - { - "expression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 2234, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "978:4:24", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 2226, - "id": 2235, - "nodeType": "Return", - "src": "971:11:24" - } - ] - }, - "documentation": null, - "functionSelector": "095ea7b3", - "id": 2237, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "approve", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 2223, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "891:8:24" - }, - "parameters": { - "id": 2222, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2219, - "mutability": "mutable", - "name": "spender", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2237, - "src": "852:15:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2218, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "852:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2221, - "mutability": "mutable", - "name": "value", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2237, - "src": "869:13:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2220, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "869:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "851:32:24" - }, - "returnParameters": { - "id": 2226, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2225, - "mutability": "mutable", - "name": "", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2237, - "src": "909:4:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 2224, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "909:4:24", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "908:6:24" - }, - "scope": 2626, - "src": "835:154:24", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [2678], - "body": { - "id": 2282, - "nodeType": "Block", - "src": "1137:289:24", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2250, - "name": "sender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2239, - "src": "1157:6:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 2251, - "name": "recipient", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2241, - "src": "1165:9:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 2252, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2243, - "src": "1176:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2249, - "name": "_transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2439, - "src": "1147:9:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 2253, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1147:36:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2254, - "nodeType": "ExpressionStatement", - "src": "1147:36:24" - }, - { - "assignments": [2256], - "declarations": [ - { - "constant": false, - "id": 2256, - "mutability": "mutable", - "name": "sender_allowance", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2282, - "src": "1193:24:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2255, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1193:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2263, - "initialValue": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 2257, - "name": "_allowances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2156, - "src": "1220:11:24", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 2259, - "indexExpression": { - "argumentTypes": null, - "id": 2258, - "name": "sender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2239, - "src": "1232:6:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1220:19:24", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 2262, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 2260, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "1240:3:24", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 2261, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1240:10:24", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1220:31:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1193:58:24" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2267, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2265, - "name": "sender_allowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2256, - "src": "1269:16:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 2266, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2243, - "src": "1289:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1269:26:24", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "45524332303a207472616e73666572206578636565647320616c6c6f77616e6365", - "id": 2268, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1297:35:24", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_292f2b964b628633d11c4b250c2d6c513aac5ad4a05db69ac16d809150823e72", - "typeString": "literal_string \"ERC20: transfer exceeds allowance\"" - }, - "value": "ERC20: transfer exceeds allowance" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_292f2b964b628633d11c4b250c2d6c513aac5ad4a05db69ac16d809150823e72", - "typeString": "literal_string \"ERC20: transfer exceeds allowance\"" - } - ], - "id": 2264, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [-18, -18], - "referencedDeclaration": -18, - "src": "1261:7:24", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2269, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1261:72:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2270, - "nodeType": "ExpressionStatement", - "src": "1261:72:24" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2272, - "name": "sender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2239, - "src": "1352:6:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 2273, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "1360:3:24", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 2274, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1360:10:24", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2277, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2275, - "name": "sender_allowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2256, - "src": "1372:16:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 2276, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2243, - "src": "1391:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1372:25:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2271, - "name": "_approve", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2587, - "src": "1343:8:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 2278, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1343:55:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2279, - "nodeType": "ExpressionStatement", - "src": "1343:55:24" - }, - { - "expression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 2280, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1415:4:24", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 2248, - "id": 2281, - "nodeType": "Return", - "src": "1408:11:24" - } - ] - }, - "documentation": null, - "functionSelector": "23b872dd", - "id": 2283, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "transferFrom", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 2245, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "1113:8:24" - }, - "parameters": { - "id": 2244, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2239, - "mutability": "mutable", - "name": "sender", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2283, - "src": "1026:14:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2238, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1026:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2241, - "mutability": "mutable", - "name": "recipient", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2283, - "src": "1050:17:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2240, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1050:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2243, - "mutability": "mutable", - "name": "amount", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2283, - "src": "1077:14:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2242, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1077:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1016:81:24" - }, - "returnParameters": { - "id": 2248, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2247, - "mutability": "mutable", - "name": "", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2283, - "src": "1131:4:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 2246, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1131:4:24", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1130:6:24" - }, - "scope": 2626, - "src": "995:431:24", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "public" - }, - { - "body": { - "id": 2321, - "nodeType": "Block", - "src": "1518:258:24", - "statements": [ - { - "assignments": [2293], - "declarations": [ - { - "constant": false, - "id": 2293, - "mutability": "mutable", - "name": "spender_allowance", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2321, - "src": "1528:25:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2292, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1528:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2300, - "initialValue": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 2294, - "name": "_allowances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2156, - "src": "1556:11:24", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 2297, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 2295, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "1568:3:24", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 2296, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1568:10:24", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1556:23:24", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 2299, - "indexExpression": { - "argumentTypes": null, - "id": 2298, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2285, - "src": "1580:7:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1556:32:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1528:60:24" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2306, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2304, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2302, - "name": "spender_allowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2293, - "src": "1606:17:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "id": 2303, - "name": "addedValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2287, - "src": "1626:10:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1606:30:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 2305, - "name": "spender_allowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2293, - "src": "1640:17:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1606:51:24", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "45524332303a204f766572666c6f77", - "id": 2307, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1659:17:24", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_26a018b402736bda51ff8c596d3a05c63463387018abe06be1ae020b387256a6", - "typeString": "literal_string \"ERC20: Overflow\"" - }, - "value": "ERC20: Overflow" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_26a018b402736bda51ff8c596d3a05c63463387018abe06be1ae020b387256a6", - "typeString": "literal_string \"ERC20: Overflow\"" - } - ], - "id": 2301, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [-18, -18], - "referencedDeclaration": -18, - "src": "1598:7:24", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2308, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1598:79:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2309, - "nodeType": "ExpressionStatement", - "src": "1598:79:24" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 2311, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "1696:3:24", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 2312, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1696:10:24", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 2313, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2285, - "src": "1708:7:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2316, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2314, - "name": "spender_allowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2293, - "src": "1717:17:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "id": 2315, - "name": "addedValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2287, - "src": "1737:10:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1717:30:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2310, - "name": "_approve", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2587, - "src": "1687:8:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 2317, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1687:61:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2318, - "nodeType": "ExpressionStatement", - "src": "1687:61:24" - }, - { - "expression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 2319, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1765:4:24", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 2291, - "id": 2320, - "nodeType": "Return", - "src": "1758:11:24" - } - ] - }, - "documentation": null, - "functionSelector": "39509351", - "id": 2322, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "increaseAllowance", - "nodeType": "FunctionDefinition", - "overrides": null, - "parameters": { - "id": 2288, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2285, - "mutability": "mutable", - "name": "spender", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2322, - "src": "1459:15:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2284, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1459:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2287, - "mutability": "mutable", - "name": "addedValue", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2322, - "src": "1476:18:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2286, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1476:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1458:37:24" - }, - "returnParameters": { - "id": 2291, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2290, - "mutability": "mutable", - "name": "", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2322, - "src": "1512:4:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 2289, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1512:4:24", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1511:6:24" - }, - "scope": 2626, - "src": "1432:344:24", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "body": { - "id": 2358, - "nodeType": "Block", - "src": "1873:263:24", - "statements": [ - { - "assignments": [2332], - "declarations": [ - { - "constant": false, - "id": 2332, - "mutability": "mutable", - "name": "sender_allowance", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2358, - "src": "1883:24:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2331, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1883:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2339, - "initialValue": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 2333, - "name": "_allowances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2156, - "src": "1910:11:24", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 2336, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 2334, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "1922:3:24", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 2335, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1922:10:24", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1910:23:24", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 2338, - "indexExpression": { - "argumentTypes": null, - "id": 2337, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2324, - "src": "1934:7:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1910:32:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1883:59:24" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2343, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2341, - "name": "sender_allowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2332, - "src": "1960:16:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 2342, - "name": "subtractedValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2326, - "src": "1980:15:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1960:35:24", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "45524332303a207472616e73666572206578636565647320616c6c6f77616e6365", - "id": 2344, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1997:35:24", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_292f2b964b628633d11c4b250c2d6c513aac5ad4a05db69ac16d809150823e72", - "typeString": "literal_string \"ERC20: transfer exceeds allowance\"" - }, - "value": "ERC20: transfer exceeds allowance" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_292f2b964b628633d11c4b250c2d6c513aac5ad4a05db69ac16d809150823e72", - "typeString": "literal_string \"ERC20: transfer exceeds allowance\"" - } - ], - "id": 2340, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [-18, -18], - "referencedDeclaration": -18, - "src": "1952:7:24", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2345, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1952:81:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2346, - "nodeType": "ExpressionStatement", - "src": "1952:81:24" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 2348, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "2052:3:24", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 2349, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2052:10:24", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 2350, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2324, - "src": "2064:7:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2353, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2351, - "name": "sender_allowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2332, - "src": "2073:16:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 2352, - "name": "subtractedValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2326, - "src": "2092:15:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2073:34:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2347, - "name": "_approve", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2587, - "src": "2043:8:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 2354, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2043:65:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2355, - "nodeType": "ExpressionStatement", - "src": "2043:65:24" - }, - { - "expression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 2356, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2125:4:24", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 2330, - "id": 2357, - "nodeType": "Return", - "src": "2118:11:24" - } - ] - }, - "documentation": null, - "functionSelector": "a457c2d7", - "id": 2359, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "decreaseAllowance", - "nodeType": "FunctionDefinition", - "overrides": null, - "parameters": { - "id": 2327, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2324, - "mutability": "mutable", - "name": "spender", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2359, - "src": "1809:15:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2323, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1809:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2326, - "mutability": "mutable", - "name": "subtractedValue", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2359, - "src": "1826:23:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2325, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1826:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1808:42:24" - }, - "returnParameters": { - "id": 2330, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2329, - "mutability": "mutable", - "name": "", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2359, - "src": "1867:4:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 2328, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1867:4:24", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1866:6:24" - }, - "scope": 2626, - "src": "1782:354:24", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "body": { - "id": 2438, - "nodeType": "Block", - "src": "2251:610:24", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 2374, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2369, - "name": "sender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2361, - "src": "2269:6:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 2372, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2287:1:24", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 2371, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2279:7:24", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 2370, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2279:7:24", - "typeDescriptions": { - "typeIdentifier": null, - "typeString": null - } - } - }, - "id": 2373, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2279:10:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "2269:20:24", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "45524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373", - "id": 2375, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2291:39:24", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea", - "typeString": "literal_string \"ERC20: transfer from the zero address\"" - }, - "value": "ERC20: transfer from the zero address" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea", - "typeString": "literal_string \"ERC20: transfer from the zero address\"" - } - ], - "id": 2368, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [-18, -18], - "referencedDeclaration": -18, - "src": "2261:7:24", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2376, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2261:70:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2377, - "nodeType": "ExpressionStatement", - "src": "2261:70:24" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 2384, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2379, - "name": "recipient", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2363, - "src": "2349:9:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 2382, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2370:1:24", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 2381, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2362:7:24", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 2380, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2362:7:24", - "typeDescriptions": { - "typeIdentifier": null, - "typeString": null - } - } - }, - "id": 2383, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2362:10:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "2349:23:24", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "45524332303a207472616e7366657220746f20746865207a65726f2061646472657373", - "id": 2385, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2374:37:24", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f", - "typeString": "literal_string \"ERC20: transfer to the zero address\"" - }, - "value": "ERC20: transfer to the zero address" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f", - "typeString": "literal_string \"ERC20: transfer to the zero address\"" - } - ], - "id": 2378, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [-18, -18], - "referencedDeclaration": -18, - "src": "2341:7:24", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2386, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2341:71:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2387, - "nodeType": "ExpressionStatement", - "src": "2341:71:24" - }, - { - "assignments": [2389], - "declarations": [ - { - "constant": false, - "id": 2389, - "mutability": "mutable", - "name": "sender_balance", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2438, - "src": "2422:22:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2388, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2422:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2393, - "initialValue": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 2390, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2150, - "src": "2447:9:24", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 2392, - "indexExpression": { - "argumentTypes": null, - "id": 2391, - "name": "sender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2361, - "src": "2457:6:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2447:17:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2422:42:24" - }, - { - "assignments": [2395], - "declarations": [ - { - "constant": false, - "id": 2395, - "mutability": "mutable", - "name": "recipient_balance", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2438, - "src": "2474:25:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2394, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2474:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2399, - "initialValue": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 2396, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2150, - "src": "2502:9:24", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 2398, - "indexExpression": { - "argumentTypes": null, - "id": 2397, - "name": "recipient", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2363, - "src": "2512:9:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2502:20:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2474:48:24" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2403, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2401, - "name": "sender_balance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2389, - "src": "2540:14:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 2402, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2365, - "src": "2558:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2540:24:24", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365", - "id": 2404, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2566:40:24", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6", - "typeString": "literal_string \"ERC20: transfer amount exceeds balance\"" - }, - "value": "ERC20: transfer amount exceeds balance" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6", - "typeString": "literal_string \"ERC20: transfer amount exceeds balance\"" - } - ], - "id": 2400, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [-18, -18], - "referencedDeclaration": -18, - "src": "2532:7:24", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2405, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2532:75:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2406, - "nodeType": "ExpressionStatement", - "src": "2532:75:24" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2412, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2410, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2408, - "name": "recipient_balance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2395, - "src": "2625:17:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "id": 2409, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2365, - "src": "2645:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2625:26:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 2411, - "name": "recipient_balance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2395, - "src": "2655:17:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2625:47:24", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "45524332303a204f766572666c6f77", - "id": 2413, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2674:17:24", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_26a018b402736bda51ff8c596d3a05c63463387018abe06be1ae020b387256a6", - "typeString": "literal_string \"ERC20: Overflow\"" - }, - "value": "ERC20: Overflow" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_26a018b402736bda51ff8c596d3a05c63463387018abe06be1ae020b387256a6", - "typeString": "literal_string \"ERC20: Overflow\"" - } - ], - "id": 2407, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [-18, -18], - "referencedDeclaration": -18, - "src": "2617:7:24", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2414, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2617:75:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2415, - "nodeType": "ExpressionStatement", - "src": "2617:75:24" - }, - { - "expression": { - "argumentTypes": null, - "id": 2422, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 2416, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2150, - "src": "2702:9:24", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 2418, - "indexExpression": { - "argumentTypes": null, - "id": 2417, - "name": "sender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2361, - "src": "2712:6:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2702:17:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2421, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2419, - "name": "sender_balance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2389, - "src": "2722:14:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 2420, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2365, - "src": "2739:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2722:23:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2702:43:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2423, - "nodeType": "ExpressionStatement", - "src": "2702:43:24" - }, - { - "expression": { - "argumentTypes": null, - "id": 2430, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 2424, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2150, - "src": "2755:9:24", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 2426, - "indexExpression": { - "argumentTypes": null, - "id": 2425, - "name": "recipient", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2363, - "src": "2765:9:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2755:20:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2429, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2427, - "name": "recipient_balance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2395, - "src": "2778:17:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "id": 2428, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2365, - "src": "2798:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2778:26:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2755:49:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2431, - "nodeType": "ExpressionStatement", - "src": "2755:49:24" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2433, - "name": "sender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2361, - "src": "2828:6:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 2434, - "name": "recipient", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2363, - "src": "2836:9:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 2435, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2365, - "src": "2847:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2432, - "name": "Transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2686, - "src": "2819:8:24", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 2436, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2819:35:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2437, - "nodeType": "EmitStatement", - "src": "2814:40:24" - } - ] - }, - "documentation": null, - "id": 2439, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_transfer", - "nodeType": "FunctionDefinition", - "overrides": null, - "parameters": { - "id": 2366, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2361, - "mutability": "mutable", - "name": "sender", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2439, - "src": "2170:14:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2360, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2170:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2363, - "mutability": "mutable", - "name": "recipient", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2439, - "src": "2194:17:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2362, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2194:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2365, - "mutability": "mutable", - "name": "amount", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2439, - "src": "2221:14:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2364, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2221:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2160:81:24" - }, - "returnParameters": { - "id": 2367, - "nodeType": "ParameterList", - "parameters": [], - "src": "2251:0:24" - }, - "scope": 2626, - "src": "2142:719:24", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 2490, - "nodeType": "Block", - "src": "2924:314:24", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 2452, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2447, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2441, - "src": "2942:7:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 2450, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2961:1:24", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 2449, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2953:7:24", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 2448, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2953:7:24", - "typeDescriptions": { - "typeIdentifier": null, - "typeString": null - } - } - }, - "id": 2451, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2953:10:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "2942:21:24", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "45524332303a206d696e7420746f20746865207a65726f2061646472657373", - "id": 2453, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2965:33:24", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e", - "typeString": "literal_string \"ERC20: mint to the zero address\"" - }, - "value": "ERC20: mint to the zero address" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e", - "typeString": "literal_string \"ERC20: mint to the zero address\"" - } - ], - "id": 2446, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [-18, -18], - "referencedDeclaration": -18, - "src": "2934:7:24", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2454, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2934:65:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2455, - "nodeType": "ExpressionStatement", - "src": "2934:65:24" - }, - { - "assignments": [2457], - "declarations": [ - { - "constant": false, - "id": 2457, - "mutability": "mutable", - "name": "_total", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2490, - "src": "3009:14:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2456, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3009:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2459, - "initialValue": { - "argumentTypes": null, - "id": 2458, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2158, - "src": "3026:12:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3009:29:24" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2465, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2463, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2461, - "name": "_total", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2457, - "src": "3056:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "id": 2462, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2443, - "src": "3065:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3056:15:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 2464, - "name": "_total", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2457, - "src": "3075:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3056:25:24", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "45524332303a204f766572666c6f77", - "id": 2466, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3083:17:24", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_26a018b402736bda51ff8c596d3a05c63463387018abe06be1ae020b387256a6", - "typeString": "literal_string \"ERC20: Overflow\"" - }, - "value": "ERC20: Overflow" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_26a018b402736bda51ff8c596d3a05c63463387018abe06be1ae020b387256a6", - "typeString": "literal_string \"ERC20: Overflow\"" - } - ], - "id": 2460, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [-18, -18], - "referencedDeclaration": -18, - "src": "3048:7:24", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2467, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3048:53:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2468, - "nodeType": "ExpressionStatement", - "src": "3048:53:24" - }, - { - "expression": { - "argumentTypes": null, - "id": 2473, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 2469, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2158, - "src": "3111:12:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2472, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2470, - "name": "_total", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2457, - "src": "3126:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "id": 2471, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2443, - "src": "3135:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3126:15:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3111:30:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2474, - "nodeType": "ExpressionStatement", - "src": "3111:30:24" - }, - { - "expression": { - "argumentTypes": null, - "id": 2479, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 2475, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2150, - "src": "3151:9:24", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 2477, - "indexExpression": { - "argumentTypes": null, - "id": 2476, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2441, - "src": "3161:7:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "3151:18:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "argumentTypes": null, - "id": 2478, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2443, - "src": "3173:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3151:28:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2480, - "nodeType": "ExpressionStatement", - "src": "3151:28:24" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 2484, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3211:1:24", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 2483, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3203:7:24", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 2482, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3203:7:24", - "typeDescriptions": { - "typeIdentifier": null, - "typeString": null - } - } - }, - "id": 2485, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3203:10:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 2486, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2441, - "src": "3215:7:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 2487, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2443, - "src": "3224:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2481, - "name": "Transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2686, - "src": "3194:8:24", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 2488, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3194:37:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2489, - "nodeType": "EmitStatement", - "src": "3189:42:24" - } - ] - }, - "documentation": null, - "id": 2491, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_mint", - "nodeType": "FunctionDefinition", - "overrides": null, - "parameters": { - "id": 2444, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2441, - "mutability": "mutable", - "name": "account", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2491, - "src": "2882:15:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2440, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2882:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2443, - "mutability": "mutable", - "name": "amount", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2491, - "src": "2899:14:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2442, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2899:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2881:33:24" - }, - "returnParameters": { - "id": 2445, - "nodeType": "ParameterList", - "parameters": [], - "src": "2924:0:24" - }, - "scope": 2626, - "src": "2867:371:24", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 2542, - "nodeType": "Block", - "src": "3300:355:24", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 2504, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2499, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2493, - "src": "3318:7:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 2502, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3337:1:24", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 2501, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3329:7:24", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 2500, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3329:7:24", - "typeDescriptions": { - "typeIdentifier": null, - "typeString": null - } - } - }, - "id": 2503, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3329:10:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "3318:21:24", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "45524332303a206275726e2066726f6d20746865207a65726f2061646472657373", - "id": 2505, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3341:35:24", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f", - "typeString": "literal_string \"ERC20: burn from the zero address\"" - }, - "value": "ERC20: burn from the zero address" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f", - "typeString": "literal_string \"ERC20: burn from the zero address\"" - } - ], - "id": 2498, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [-18, -18], - "referencedDeclaration": -18, - "src": "3310:7:24", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2506, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3310:67:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2507, - "nodeType": "ExpressionStatement", - "src": "3310:67:24" - }, - { - "assignments": [2509], - "declarations": [ - { - "constant": false, - "id": 2509, - "mutability": "mutable", - "name": "current_balance", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2542, - "src": "3387:23:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2508, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3387:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2513, - "initialValue": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 2510, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2150, - "src": "3413:9:24", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 2512, - "indexExpression": { - "argumentTypes": null, - "id": 2511, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2493, - "src": "3423:7:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3413:18:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3387:44:24" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2517, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2515, - "name": "current_balance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2509, - "src": "3449:15:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 2516, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2495, - "src": "3468:5:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3449:24:24", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365", - "id": 2518, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3475:36:24", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd", - "typeString": "literal_string \"ERC20: burn amount exceeds balance\"" - }, - "value": "ERC20: burn amount exceeds balance" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd", - "typeString": "literal_string \"ERC20: burn amount exceeds balance\"" - } - ], - "id": 2514, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [-18, -18], - "referencedDeclaration": -18, - "src": "3441:7:24", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2519, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3441:71:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2520, - "nodeType": "ExpressionStatement", - "src": "3441:71:24" - }, - { - "expression": { - "argumentTypes": null, - "id": 2527, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 2521, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2150, - "src": "3522:9:24", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 2523, - "indexExpression": { - "argumentTypes": null, - "id": 2522, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2493, - "src": "3532:7:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "3522:18:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2526, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2524, - "name": "current_balance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2509, - "src": "3543:15:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 2525, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2495, - "src": "3561:5:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3543:23:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3522:44:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2528, - "nodeType": "ExpressionStatement", - "src": "3522:44:24" - }, - { - "expression": { - "argumentTypes": null, - "id": 2531, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 2529, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2158, - "src": "3576:12:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "-=", - "rightHandSide": { - "argumentTypes": null, - "id": 2530, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2495, - "src": "3592:5:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3576:21:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2532, - "nodeType": "ExpressionStatement", - "src": "3576:21:24" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2534, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2493, - "src": "3621:7:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 2537, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3638:1:24", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 2536, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3630:7:24", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 2535, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3630:7:24", - "typeDescriptions": { - "typeIdentifier": null, - "typeString": null - } - } - }, - "id": 2538, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3630:10:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 2539, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2495, - "src": "3642:5:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2533, - "name": "Transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2686, - "src": "3612:8:24", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 2540, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3612:36:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2541, - "nodeType": "EmitStatement", - "src": "3607:41:24" - } - ] - }, - "documentation": null, - "id": 2543, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_burn", - "nodeType": "FunctionDefinition", - "overrides": null, - "parameters": { - "id": 2496, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2493, - "mutability": "mutable", - "name": "account", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2543, - "src": "3259:15:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2492, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3259:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2495, - "mutability": "mutable", - "name": "value", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2543, - "src": "3276:13:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2494, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3276:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "3258:32:24" - }, - "returnParameters": { - "id": 2497, - "nodeType": "ParameterList", - "parameters": [], - "src": "3300:0:24" - }, - "scope": 2626, - "src": "3244:411:24", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 2586, - "nodeType": "Block", - "src": "3765:255:24", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 2558, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2553, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2545, - "src": "3783:5:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 2556, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3800:1:24", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 2555, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3792:7:24", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 2554, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3792:7:24", - "typeDescriptions": { - "typeIdentifier": null, - "typeString": null - } - } - }, - "id": 2557, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3792:10:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "3783:19:24", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "45524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373", - "id": 2559, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3804:38:24", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208", - "typeString": "literal_string \"ERC20: approve from the zero address\"" - }, - "value": "ERC20: approve from the zero address" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208", - "typeString": "literal_string \"ERC20: approve from the zero address\"" - } - ], - "id": 2552, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [-18, -18], - "referencedDeclaration": -18, - "src": "3775:7:24", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2560, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3775:68:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2561, - "nodeType": "ExpressionStatement", - "src": "3775:68:24" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 2568, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2563, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2547, - "src": "3861:7:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 2566, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3880:1:24", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 2565, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3872:7:24", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 2564, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3872:7:24", - "typeDescriptions": { - "typeIdentifier": null, - "typeString": null - } - } - }, - "id": 2567, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3872:10:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "3861:21:24", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "45524332303a20617070726f766520746f20746865207a65726f2061646472657373", - "id": 2569, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3884:36:24", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029", - "typeString": "literal_string \"ERC20: approve to the zero address\"" - }, - "value": "ERC20: approve to the zero address" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029", - "typeString": "literal_string \"ERC20: approve to the zero address\"" - } - ], - "id": 2562, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [-18, -18], - "referencedDeclaration": -18, - "src": "3853:7:24", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2570, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3853:68:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2571, - "nodeType": "ExpressionStatement", - "src": "3853:68:24" - }, - { - "expression": { - "argumentTypes": null, - "id": 2578, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 2572, - "name": "_allowances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2156, - "src": "3932:11:24", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 2575, - "indexExpression": { - "argumentTypes": null, - "id": 2573, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2545, - "src": "3944:5:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3932:18:24", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 2576, - "indexExpression": { - "argumentTypes": null, - "id": 2574, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2547, - "src": "3951:7:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "3932:27:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 2577, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2549, - "src": "3962:5:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3932:35:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2579, - "nodeType": "ExpressionStatement", - "src": "3932:35:24" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2581, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2545, - "src": "3991:5:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 2582, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2547, - "src": "3998:7:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 2583, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2549, - "src": "4007:5:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2580, - "name": "Approval", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2694, - "src": "3982:8:24", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 2584, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3982:31:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2585, - "nodeType": "EmitStatement", - "src": "3977:36:24" - } - ] - }, - "documentation": null, - "id": 2587, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_approve", - "nodeType": "FunctionDefinition", - "overrides": null, - "parameters": { - "id": 2550, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2545, - "mutability": "mutable", - "name": "owner", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2587, - "src": "3688:13:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2544, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3688:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2547, - "mutability": "mutable", - "name": "spender", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2587, - "src": "3711:15:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2546, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3711:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2549, - "mutability": "mutable", - "name": "value", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2587, - "src": "3736:13:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2548, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3736:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "3678:77:24" - }, - "returnParameters": { - "id": 2551, - "nodeType": "ParameterList", - "parameters": [], - "src": "3765:0:24" - }, - "scope": 2626, - "src": "3661:359:24", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 2624, - "nodeType": "Block", - "src": "4087:262:24", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2595, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2589, - "src": "4103:7:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 2596, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2591, - "src": "4112:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2594, - "name": "_burn", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2543, - "src": "4097:5:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 2597, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4097:22:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2598, - "nodeType": "ExpressionStatement", - "src": "4097:22:24" - }, - { - "assignments": [2600], - "declarations": [ - { - "constant": false, - "id": 2600, - "mutability": "mutable", - "name": "current_allowance", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2624, - "src": "4129:25:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2599, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4129:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 2607, - "initialValue": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 2601, - "name": "_allowances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2156, - "src": "4157:11:24", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 2603, - "indexExpression": { - "argumentTypes": null, - "id": 2602, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2589, - "src": "4169:7:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4157:20:24", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 2606, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 2604, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "4178:3:24", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 2605, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "4178:10:24", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4157:32:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4129:60:24" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2611, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2609, - "name": "current_allowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2600, - "src": "4207:17:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 2610, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2591, - "src": "4228:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4207:27:24", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "45524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e6365", - "id": 2612, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4236:38:24", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_a287c363786607a1457a2d9d12fa61c0073358e02d76b4035fc2c2d86a19c0db", - "typeString": "literal_string \"ERC20: burn amount exceeds allowance\"" - }, - "value": "ERC20: burn amount exceeds allowance" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_a287c363786607a1457a2d9d12fa61c0073358e02d76b4035fc2c2d86a19c0db", - "typeString": "literal_string \"ERC20: burn amount exceeds allowance\"" - } - ], - "id": 2608, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [-18, -18], - "referencedDeclaration": -18, - "src": "4199:7:24", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2613, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4199:76:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2614, - "nodeType": "ExpressionStatement", - "src": "4199:76:24" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2616, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2589, - "src": "4294:7:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 2617, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "4303:3:24", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 2618, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "4303:10:24", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2621, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2619, - "name": "current_allowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2600, - "src": "4315:17:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 2620, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2591, - "src": "4335:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4315:26:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2615, - "name": "_approve", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2587, - "src": "4285:8:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 2622, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4285:57:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2623, - "nodeType": "ExpressionStatement", - "src": "4285:57:24" - } - ] - }, - "documentation": null, - "id": 2625, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_burnFrom", - "nodeType": "FunctionDefinition", - "overrides": null, - "parameters": { - "id": 2592, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2589, - "mutability": "mutable", - "name": "account", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2625, - "src": "4045:15:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2588, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4045:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2591, - "mutability": "mutable", - "name": "amount", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2625, - "src": "4062:14:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2590, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4062:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "4044:33:24" - }, - "returnParameters": { - "id": 2593, - "nodeType": "ParameterList", - "parameters": [], - "src": "4087:0:24" - }, - "scope": 2626, - "src": "4026:323:24", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 2627, - "src": "90:4261:24" - } - ], - "src": "40:4312:24" - }, - "bytecode": "608060405234801561001057600080fd5b50610775806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c806370a082311161005b57806370a0823114610149578063a457c2d71461016f578063a9059cbb1461019b578063dd62ed3e146101c757610088565b8063095ea7b31461008d57806318160ddd146100cd57806323b872dd146100e7578063395093511461011d575b600080fd5b6100b9600480360360408110156100a357600080fd5b506001600160a01b0381351690602001356101f5565b604080519115158252519081900360200190f35b6100d561020b565b60408051918252519081900360200190f35b6100b9600480360360608110156100fd57600080fd5b506001600160a01b03813581169160208101359091169060400135610211565b6100b96004803603604081101561013357600080fd5b506001600160a01b038135169060200135610299565b6100d56004803603602081101561015f57600080fd5b50356001600160a01b031661031d565b6100b96004803603604081101561018557600080fd5b506001600160a01b038135169060200135610338565b6100b9600480360360408110156101b157600080fd5b506001600160a01b0381351690602001356103a8565b6100d5600480360360408110156101dd57600080fd5b506001600160a01b03813581169160200135166103b5565b60006102023384846103e0565b50600192915050565b60025490565b600061021e8484846104cc565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156102815760405162461bcd60e51b81526004018080602001828103825260218152602001806106b06021913960400191505060405180910390fd5b61028e85338584036103e0565b506001949350505050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828101811115610306576040805162461bcd60e51b815260206004820152600f60248201526e45524332303a204f766572666c6f7760881b604482015290519081900360640190fd5b61031333858584016103e0565b5060019392505050565b6001600160a01b031660009081526020819052604090205490565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561039b5760405162461bcd60e51b81526004018080602001828103825260218152602001806106b06021913960400191505060405180910390fd5b61031333858584036103e0565b60006102023384846104cc565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166104255760405162461bcd60e51b815260040180806020018281038252602481526020018061071c6024913960400191505060405180910390fd5b6001600160a01b03821661046a5760405162461bcd60e51b815260040180806020018281038252602281526020018061068e6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166105115760405162461bcd60e51b81526004018080602001828103825260258152602001806106f76025913960400191505060405180910390fd5b6001600160a01b0382166105565760405162461bcd60e51b815260040180806020018281038252602381526020018061066b6023913960400191505060405180910390fd5b6001600160a01b03808416600090815260208190526040808220549285168252902054828210156105b85760405162461bcd60e51b81526004018080602001828103825260268152602001806106d16026913960400191505060405180910390fd5b808382011015610601576040805162461bcd60e51b815260206004820152600f60248201526e45524332303a204f766572666c6f7760881b604482015290519081900360640190fd5b6001600160a01b0380861660008181526020818152604080832088880390559388168083529184902085880190558351878152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a3505050505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e73666572206578636565647320616c6c6f77616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a2646970667358221220661330c930994431bdf133435807d3e76d7466af024fdd46ca386f7d8147cdb564736f6c634300060c0033", - "bytecodeSha1": "aa83c2cb1a3ad47ec87b8df787b15a8af4dfab8d", - "compiler": { - "evm_version": "istanbul", - "optimizer": { - "enabled": true, - "runs": 200 - }, - "version": "0.6.12+commit.27d51765" - }, - "contractName": "ERC20", - "coverageMap": { - "branches": { - "24": { - "ERC20._approve": { - "29": [3783, 3802, true], - "30": [3861, 3882, true] - }, - "ERC20._transfer": { - "31": [2269, 2289, true], - "32": [2349, 2372, true], - "33": [2540, 2564, true], - "34": [2625, 2672, true] - }, - "ERC20.decreaseAllowance": { - "28": [1960, 1995, true] - }, - "ERC20.increaseAllowance": { - "27": [1606, 1657, true] - }, - "ERC20.transferFrom": { - "26": [1269, 1295, true] - } - }, - "25": {} - }, - "statements": { - "24": { - "ERC20._approve": { - "15": [3775, 3843], - "16": [3853, 3921], - "17": [3932, 3967], - "18": [3977, 4013] - }, - "ERC20._transfer": { - "19": [2261, 2331], - "20": [2341, 2412], - "21": [2532, 2607], - "22": [2617, 2692], - "23": [2702, 2745], - "24": [2755, 2804], - "25": [2814, 2854] - }, - "ERC20.allowance": { - "14": [788, 822] - }, - "ERC20.approve": { - "0": [925, 961], - "1": [971, 982] - }, - "ERC20.balanceOf": { - "10": [474, 499] - }, - "ERC20.decreaseAllowance": { - "11": [1952, 2033], - "12": [2043, 2108] - }, - "ERC20.increaseAllowance": { - "7": [1598, 1677], - "8": [1687, 1748], - "9": [1758, 1769] - }, - "ERC20.totalSupply": { - "2": [357, 376] - }, - "ERC20.transfer": { - "13": [614, 654] - }, - "ERC20.transferFrom": { - "3": [1147, 1183], - "4": [1261, 1333], - "5": [1343, 1398], - "6": [1408, 1419] - } - }, - "25": {} - } - }, - "dependencies": ["IERC20"], - "deployedBytecode": "608060405234801561001057600080fd5b50600436106100885760003560e01c806370a082311161005b57806370a0823114610149578063a457c2d71461016f578063a9059cbb1461019b578063dd62ed3e146101c757610088565b8063095ea7b31461008d57806318160ddd146100cd57806323b872dd146100e7578063395093511461011d575b600080fd5b6100b9600480360360408110156100a357600080fd5b506001600160a01b0381351690602001356101f5565b604080519115158252519081900360200190f35b6100d561020b565b60408051918252519081900360200190f35b6100b9600480360360608110156100fd57600080fd5b506001600160a01b03813581169160208101359091169060400135610211565b6100b96004803603604081101561013357600080fd5b506001600160a01b038135169060200135610299565b6100d56004803603602081101561015f57600080fd5b50356001600160a01b031661031d565b6100b96004803603604081101561018557600080fd5b506001600160a01b038135169060200135610338565b6100b9600480360360408110156101b157600080fd5b506001600160a01b0381351690602001356103a8565b6100d5600480360360408110156101dd57600080fd5b506001600160a01b03813581169160200135166103b5565b60006102023384846103e0565b50600192915050565b60025490565b600061021e8484846104cc565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156102815760405162461bcd60e51b81526004018080602001828103825260218152602001806106b06021913960400191505060405180910390fd5b61028e85338584036103e0565b506001949350505050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828101811115610306576040805162461bcd60e51b815260206004820152600f60248201526e45524332303a204f766572666c6f7760881b604482015290519081900360640190fd5b61031333858584016103e0565b5060019392505050565b6001600160a01b031660009081526020819052604090205490565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561039b5760405162461bcd60e51b81526004018080602001828103825260218152602001806106b06021913960400191505060405180910390fd5b61031333858584036103e0565b60006102023384846104cc565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166104255760405162461bcd60e51b815260040180806020018281038252602481526020018061071c6024913960400191505060405180910390fd5b6001600160a01b03821661046a5760405162461bcd60e51b815260040180806020018281038252602281526020018061068e6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166105115760405162461bcd60e51b81526004018080602001828103825260258152602001806106f76025913960400191505060405180910390fd5b6001600160a01b0382166105565760405162461bcd60e51b815260040180806020018281038252602381526020018061066b6023913960400191505060405180910390fd5b6001600160a01b03808416600090815260208190526040808220549285168252902054828210156105b85760405162461bcd60e51b81526004018080602001828103825260268152602001806106d16026913960400191505060405180910390fd5b808382011015610601576040805162461bcd60e51b815260206004820152600f60248201526e45524332303a204f766572666c6f7760881b604482015290519081900360640190fd5b6001600160a01b0380861660008181526020818152604080832088880390559388168083529184902085880190558351878152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a3505050505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e73666572206578636565647320616c6c6f77616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a2646970667358221220661330c930994431bdf133435807d3e76d7466af024fdd46ca386f7d8147cdb564736f6c634300060c0033", - "deployedSourceMap": "90:4261:24:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;835:154;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;835:154:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;285:98;;;:::i;:::-;;;;;;;;;;;;;;;;995:431;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;995:431:24;;;;;;;;;;;;;;;;;:::i;1432:344::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1432:344:24;;;;;;;;:::i;389:117::-;;;;;;;;;;;;;;;;-1:-1:-1;389:117:24;-1:-1:-1;;;;;389:117:24;;:::i;1782:354::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1782:354:24;;;;;;;;:::i;512:170::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;512:170:24;;;;;;;;:::i;688:141::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;688:141:24;;;;;;;;;;:::i;835:154::-;909:4;925:36;934:10;946:7;955:5;925:8;:36::i;:::-;-1:-1:-1;978:4:24;835:154;;;;:::o;285:98::-;364:12;;285:98;:::o;995:431::-;1131:4;1147:36;1157:6;1165:9;1176:6;1147:9;:36::i;:::-;-1:-1:-1;;;;;1220:19:24;;1193:24;1220:19;;;:11;:19;;;;;;;;1240:10;1220:31;;;;;;;;1269:26;;;;1261:72;;;;-1:-1:-1;;;1261:72:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1343:55;1352:6;1360:10;1391:6;1372:16;:25;1343:8;:55::i;:::-;-1:-1:-1;1415:4:24;;995:431;-1:-1:-1;;;;995:431:24:o;1432:344::-;1568:10;1512:4;1556:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;1556:32:24;;;;;;;;;;1606:30;;;:51;-1:-1:-1;1606:51:24;1598:79;;;;;-1:-1:-1;;;1598:79:24;;;;;;;;;;;;-1:-1:-1;;;1598:79:24;;;;;;;;;;;;;;;1687:61;1696:10;1708:7;1737:10;1717:17;:30;1687:8;:61::i;:::-;-1:-1:-1;1765:4:24;;1432:344;-1:-1:-1;;;1432:344:24:o;389:117::-;-1:-1:-1;;;;;481:18:24;455:7;481:18;;;;;;;;;;;;389:117::o;1782:354::-;1922:10;1867:4;1910:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;1910:32:24;;;;;;;;;;1960:35;;;;1952:81;;;;-1:-1:-1;;;1952:81:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2043:65;2052:10;2064:7;2092:15;2073:16;:34;2043:8;:65::i;512:170::-;598:4;614:40;624:10;636:9;647:6;614:9;:40::i;688:141::-;-1:-1:-1;;;;;795:18:24;;;769:7;795:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;688:141::o;3661:359::-;-1:-1:-1;;;;;3783:19:24;;3775:68;;;;-1:-1:-1;;;3775:68:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3861:21:24;;3853:68;;;;-1:-1:-1;;;3853:68:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3932:18:24;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:35;;;3982:31;;;;;;;;;;;;;;;;;3661:359;;;:::o;2142:719::-;-1:-1:-1;;;;;2269:20:24;;2261:70;;;;-1:-1:-1;;;2261:70:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2349:23:24;;2341:71;;;;-1:-1:-1;;;2341:71:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2447:17:24;;;2422:22;2447:17;;;;;;;;;;;;2502:20;;;;;;;;2540:24;;;;2532:75;;;;-1:-1:-1;;;2532:75:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2655:17;2645:6;2625:17;:26;:47;;2617:75;;;;;-1:-1:-1;;;2617:75:24;;;;;;;;;;;;-1:-1:-1;;;2617:75:24;;;;;;;;;;;;;;;-1:-1:-1;;;;;2702:17:24;;;:9;:17;;;;;;;;;;;2722:23;;;2702:43;;2755:20;;;;;;;;;;2778:26;;;2755:49;;2819:35;;;;;;;2755:20;;2819:35;;;;;;;;;;;2142:719;;;;;:::o", - "language": "Solidity", - "natspec": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "offset": [90, 4351], - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x88 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x149 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x16F JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x19B JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x1C7 JUMPI PUSH2 0x88 JUMP JUMPDEST DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0xCD JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0xE7 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x11D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1F5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xD5 PUSH2 0x20B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xB9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x211 JUMP JUMPDEST PUSH2 0xB9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x133 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x299 JUMP JUMPDEST PUSH2 0xD5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x15F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x31D JUMP JUMPDEST PUSH2 0xB9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x338 JUMP JUMPDEST PUSH2 0xB9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x3A8 JUMP JUMPDEST PUSH2 0xD5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x3B5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x202 CALLER DUP5 DUP5 PUSH2 0x3E0 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x21E DUP5 DUP5 DUP5 PUSH2 0x4CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 DUP2 LT ISZERO PUSH2 0x281 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x6B0 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x28E DUP6 CALLER DUP6 DUP5 SUB PUSH2 0x3E0 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD DUP3 DUP2 ADD DUP2 GT ISZERO PUSH2 0x306 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x45524332303A204F766572666C6F77 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x313 CALLER DUP6 DUP6 DUP5 ADD PUSH2 0x3E0 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD DUP3 DUP2 LT ISZERO PUSH2 0x39B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x6B0 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x313 CALLER DUP6 DUP6 DUP5 SUB PUSH2 0x3E0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x202 CALLER DUP5 DUP5 PUSH2 0x4CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x425 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x71C PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x46A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x68E PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x511 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x6F7 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x556 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x66B PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SLOAD SWAP3 DUP6 AND DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP3 DUP3 LT ISZERO PUSH2 0x5B8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x6D1 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 DUP4 DUP3 ADD LT ISZERO PUSH2 0x601 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x45524332303A204F766572666C6F77 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP9 DUP9 SUB SWAP1 SSTORE SWAP4 DUP9 AND DUP1 DUP4 MSTORE SWAP2 DUP5 SWAP1 KECCAK256 DUP6 DUP9 ADD SWAP1 SSTORE DUP4 MLOAD DUP8 DUP2 MSTORE SWAP4 MLOAD SWAP2 SWAP4 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH6 0x786365656473 KECCAK256 PUSH2 0x6C6C PUSH16 0x77616E636545524332303A207472616E PUSH20 0x66657220616D6F756E7420657863656564732062 PUSH2 0x6C61 PUSH15 0x636545524332303A207472616E7366 PUSH6 0x722066726F6D KECCAK256 PUSH21 0x6865207A65726F206164647265737345524332303A KECCAK256 PUSH2 0x7070 PUSH19 0x6F76652066726F6D20746865207A65726F2061 PUSH5 0x6472657373 LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH7 0x1330C930994431 0xBD CALL CALLER NUMBER PC SMOD 0xD3 0xE7 PUSH14 0x7466AF024FDD46CA386F7D8147CD 0xB5 PUSH5 0x736F6C6343 STOP MOD 0xC STOP CALLER ", - "pcMap": { - "0": { - "offset": [90, 4351], - "op": "PUSH1", - "path": "24", - "value": "0x80" - }, - "2": { - "fn": null, - "offset": [90, 4351], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "4": { - "fn": null, - "offset": [90, 4351], - "op": "MSTORE", - "path": "24" - }, - "5": { - "fn": null, - "offset": [90, 4351], - "op": "CALLVALUE", - "path": "24" - }, - "6": { - "fn": null, - "offset": [90, 4351], - "op": "DUP1", - "path": "24" - }, - "7": { - "fn": null, - "offset": [90, 4351], - "op": "ISZERO", - "path": "24" - }, - "8": { - "fn": null, - "offset": [90, 4351], - "op": "PUSH2", - "path": "24", - "value": "0x10" - }, - "11": { - "fn": null, - "offset": [90, 4351], - "op": "JUMPI", - "path": "24" - }, - "12": { - "fn": null, - "offset": [90, 4351], - "op": "PUSH1", - "path": "24", - "value": "0x0" - }, - "14": { - "fn": null, - "offset": [90, 4351], - "op": "DUP1", - "path": "24" - }, - "15": { - "dev": "Cannot send ether to nonpayable function", - "fn": null, - "offset": [90, 4351], - "op": "REVERT", - "path": "24" - }, - "16": { - "fn": null, - "offset": [90, 4351], - "op": "JUMPDEST", - "path": "24" - }, - "17": { - "fn": null, - "offset": [90, 4351], - "op": "POP", - "path": "24" - }, - "18": { - "fn": null, - "offset": [90, 4351], - "op": "PUSH1", - "path": "24", - "value": "0x4" - }, - "20": { - "fn": null, - "offset": [90, 4351], - "op": "CALLDATASIZE", - "path": "24" - }, - "21": { - "fn": null, - "offset": [90, 4351], - "op": "LT", - "path": "24" - }, - "22": { - "fn": null, - "offset": [90, 4351], - "op": "PUSH2", - "path": "24", - "value": "0x88" - }, - "25": { - "fn": null, - "offset": [90, 4351], - "op": "JUMPI", - "path": "24" - }, - "26": { - "fn": null, - "offset": [90, 4351], - "op": "PUSH1", - "path": "24", - "value": "0x0" - }, - "28": { - "fn": null, - "offset": [90, 4351], - "op": "CALLDATALOAD", - "path": "24" - }, - "29": { - "fn": null, - "offset": [90, 4351], - "op": "PUSH1", - "path": "24", - "value": "0xE0" - }, - "31": { - "fn": null, - "offset": [90, 4351], - "op": "SHR", - "path": "24" - }, - "32": { - "fn": null, - "offset": [90, 4351], - "op": "DUP1", - "path": "24" - }, - "33": { - "fn": null, - "offset": [90, 4351], - "op": "PUSH4", - "path": "24", - "value": "0x70A08231" - }, - "38": { - "fn": null, - "offset": [90, 4351], - "op": "GT", - "path": "24" - }, - "39": { - "fn": null, - "offset": [90, 4351], - "op": "PUSH2", - "path": "24", - "value": "0x5B" - }, - "42": { - "fn": null, - "offset": [90, 4351], - "op": "JUMPI", - "path": "24" - }, - "43": { - "fn": null, - "offset": [90, 4351], - "op": "DUP1", - "path": "24" - }, - "44": { - "fn": null, - "offset": [90, 4351], - "op": "PUSH4", - "path": "24", - "value": "0x70A08231" - }, - "49": { - "fn": null, - "offset": [90, 4351], - "op": "EQ", - "path": "24" - }, - "50": { - "fn": null, - "offset": [90, 4351], - "op": "PUSH2", - "path": "24", - "value": "0x149" - }, - "53": { - "fn": null, - "offset": [90, 4351], - "op": "JUMPI", - "path": "24" - }, - "54": { - "fn": null, - "offset": [90, 4351], - "op": "DUP1", - "path": "24" - }, - "55": { - "fn": null, - "offset": [90, 4351], - "op": "PUSH4", - "path": "24", - "value": "0xA457C2D7" - }, - "60": { - "fn": null, - "offset": [90, 4351], - "op": "EQ", - "path": "24" - }, - "61": { - "fn": null, - "offset": [90, 4351], - "op": "PUSH2", - "path": "24", - "value": "0x16F" - }, - "64": { - "fn": null, - "offset": [90, 4351], - "op": "JUMPI", - "path": "24" - }, - "65": { - "fn": null, - "offset": [90, 4351], - "op": "DUP1", - "path": "24" - }, - "66": { - "fn": null, - "offset": [90, 4351], - "op": "PUSH4", - "path": "24", - "value": "0xA9059CBB" - }, - "71": { - "fn": null, - "offset": [90, 4351], - "op": "EQ", - "path": "24" - }, - "72": { - "fn": null, - "offset": [90, 4351], - "op": "PUSH2", - "path": "24", - "value": "0x19B" - }, - "75": { - "fn": null, - "offset": [90, 4351], - "op": "JUMPI", - "path": "24" - }, - "76": { - "fn": null, - "offset": [90, 4351], - "op": "DUP1", - "path": "24" - }, - "77": { - "fn": null, - "offset": [90, 4351], - "op": "PUSH4", - "path": "24", - "value": "0xDD62ED3E" - }, - "82": { - "fn": null, - "offset": [90, 4351], - "op": "EQ", - "path": "24" - }, - "83": { - "fn": null, - "offset": [90, 4351], - "op": "PUSH2", - "path": "24", - "value": "0x1C7" - }, - "86": { - "fn": null, - "offset": [90, 4351], - "op": "JUMPI", - "path": "24" - }, - "87": { - "fn": null, - "offset": [90, 4351], - "op": "PUSH2", - "path": "24", - "value": "0x88" - }, - "90": { - "fn": null, - "offset": [90, 4351], - "op": "JUMP", - "path": "24" - }, - "91": { - "fn": null, - "offset": [90, 4351], - "op": "JUMPDEST", - "path": "24" - }, - "92": { - "fn": null, - "offset": [90, 4351], - "op": "DUP1", - "path": "24" - }, - "93": { - "fn": null, - "offset": [90, 4351], - "op": "PUSH4", - "path": "24", - "value": "0x95EA7B3" - }, - "98": { - "fn": null, - "offset": [90, 4351], - "op": "EQ", - "path": "24" - }, - "99": { - "fn": null, - "offset": [90, 4351], - "op": "PUSH2", - "path": "24", - "value": "0x8D" - }, - "102": { - "fn": null, - "offset": [90, 4351], - "op": "JUMPI", - "path": "24" - }, - "103": { - "fn": null, - "offset": [90, 4351], - "op": "DUP1", - "path": "24" - }, - "104": { - "fn": null, - "offset": [90, 4351], - "op": "PUSH4", - "path": "24", - "value": "0x18160DDD" - }, - "109": { - "fn": null, - "offset": [90, 4351], - "op": "EQ", - "path": "24" - }, - "110": { - "fn": null, - "offset": [90, 4351], - "op": "PUSH2", - "path": "24", - "value": "0xCD" - }, - "113": { - "fn": null, - "offset": [90, 4351], - "op": "JUMPI", - "path": "24" - }, - "114": { - "fn": null, - "offset": [90, 4351], - "op": "DUP1", - "path": "24" - }, - "115": { - "fn": null, - "offset": [90, 4351], - "op": "PUSH4", - "path": "24", - "value": "0x23B872DD" - }, - "120": { - "fn": null, - "offset": [90, 4351], - "op": "EQ", - "path": "24" - }, - "121": { - "fn": null, - "offset": [90, 4351], - "op": "PUSH2", - "path": "24", - "value": "0xE7" - }, - "124": { - "fn": null, - "offset": [90, 4351], - "op": "JUMPI", - "path": "24" - }, - "125": { - "fn": null, - "offset": [90, 4351], - "op": "DUP1", - "path": "24" - }, - "126": { - "fn": null, - "offset": [90, 4351], - "op": "PUSH4", - "path": "24", - "value": "0x39509351" - }, - "131": { - "fn": null, - "offset": [90, 4351], - "op": "EQ", - "path": "24" - }, - "132": { - "fn": null, - "offset": [90, 4351], - "op": "PUSH2", - "path": "24", - "value": "0x11D" - }, - "135": { - "fn": null, - "offset": [90, 4351], - "op": "JUMPI", - "path": "24" - }, - "136": { - "fn": null, - "offset": [90, 4351], - "op": "JUMPDEST", - "path": "24" - }, - "137": { - "fn": null, - "offset": [90, 4351], - "op": "PUSH1", - "path": "24", - "value": "0x0" - }, - "139": { - "fn": null, - "offset": [90, 4351], - "op": "DUP1", - "path": "24" - }, - "140": { - "first_revert": true, - "fn": null, - "offset": [90, 4351], - "op": "REVERT", - "path": "24" - }, - "141": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "JUMPDEST", - "path": "24" - }, - "142": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "PUSH2", - "path": "24", - "value": "0xB9" - }, - "145": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "PUSH1", - "path": "24", - "value": "0x4" - }, - "147": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "DUP1", - "path": "24" - }, - "148": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "CALLDATASIZE", - "path": "24" - }, - "149": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "SUB", - "path": "24" - }, - "150": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "152": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "DUP2", - "path": "24" - }, - "153": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "LT", - "path": "24" - }, - "154": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "ISZERO", - "path": "24" - }, - "155": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "PUSH2", - "path": "24", - "value": "0xA3" - }, - "158": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "JUMPI", - "path": "24" - }, - "159": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "PUSH1", - "path": "24", - "value": "0x0" - }, - "161": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "DUP1", - "path": "24" - }, - "162": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "REVERT", - "path": "24" - }, - "163": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "JUMPDEST", - "path": "24" - }, - "164": { - "op": "POP" - }, - "165": { - "op": "PUSH1", - "value": "0x1" - }, - "167": { - "op": "PUSH1", - "value": "0x1" - }, - "169": { - "op": "PUSH1", - "value": "0xA0" - }, - "171": { - "op": "SHL" - }, - "172": { - "op": "SUB" - }, - "173": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "DUP2", - "path": "24" - }, - "174": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "CALLDATALOAD", - "path": "24" - }, - "175": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "AND", - "path": "24" - }, - "176": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "SWAP1", - "path": "24" - }, - "177": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "179": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "ADD", - "path": "24" - }, - "180": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "CALLDATALOAD", - "path": "24" - }, - "181": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "PUSH2", - "path": "24", - "value": "0x1F5" - }, - "184": { - "fn": "ERC20.approve", - "jump": "i", - "offset": [835, 989], - "op": "JUMP", - "path": "24" - }, - "185": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "JUMPDEST", - "path": "24" - }, - "186": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "188": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "DUP1", - "path": "24" - }, - "189": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "MLOAD", - "path": "24" - }, - "190": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "SWAP2", - "path": "24" - }, - "191": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "ISZERO", - "path": "24" - }, - "192": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "ISZERO", - "path": "24" - }, - "193": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "DUP3", - "path": "24" - }, - "194": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "MSTORE", - "path": "24" - }, - "195": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "MLOAD", - "path": "24" - }, - "196": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "SWAP1", - "path": "24" - }, - "197": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "DUP2", - "path": "24" - }, - "198": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "SWAP1", - "path": "24" - }, - "199": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "SUB", - "path": "24" - }, - "200": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "202": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "ADD", - "path": "24" - }, - "203": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "SWAP1", - "path": "24" - }, - "204": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "RETURN", - "path": "24" - }, - "205": { - "fn": "ERC20.totalSupply", - "offset": [285, 383], - "op": "JUMPDEST", - "path": "24" - }, - "206": { - "fn": "ERC20.totalSupply", - "offset": [285, 383], - "op": "PUSH2", - "path": "24", - "value": "0xD5" - }, - "209": { - "fn": "ERC20.totalSupply", - "offset": [285, 383], - "op": "PUSH2", - "path": "24", - "value": "0x20B" - }, - "212": { - "fn": "ERC20.totalSupply", - "jump": "i", - "offset": [285, 383], - "op": "JUMP", - "path": "24" - }, - "213": { - "fn": "ERC20.totalSupply", - "offset": [285, 383], - "op": "JUMPDEST", - "path": "24" - }, - "214": { - "fn": "ERC20.totalSupply", - "offset": [285, 383], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "216": { - "fn": "ERC20.totalSupply", - "offset": [285, 383], - "op": "DUP1", - "path": "24" - }, - "217": { - "fn": "ERC20.totalSupply", - "offset": [285, 383], - "op": "MLOAD", - "path": "24" - }, - "218": { - "fn": "ERC20.totalSupply", - "offset": [285, 383], - "op": "SWAP2", - "path": "24" - }, - "219": { - "fn": "ERC20.totalSupply", - "offset": [285, 383], - "op": "DUP3", - "path": "24" - }, - "220": { - "fn": "ERC20.totalSupply", - "offset": [285, 383], - "op": "MSTORE", - "path": "24" - }, - "221": { - "fn": "ERC20.totalSupply", - "offset": [285, 383], - "op": "MLOAD", - "path": "24" - }, - "222": { - "fn": "ERC20.totalSupply", - "offset": [285, 383], - "op": "SWAP1", - "path": "24" - }, - "223": { - "fn": "ERC20.totalSupply", - "offset": [285, 383], - "op": "DUP2", - "path": "24" - }, - "224": { - "fn": "ERC20.totalSupply", - "offset": [285, 383], - "op": "SWAP1", - "path": "24" - }, - "225": { - "fn": "ERC20.totalSupply", - "offset": [285, 383], - "op": "SUB", - "path": "24" - }, - "226": { - "fn": "ERC20.totalSupply", - "offset": [285, 383], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "228": { - "fn": "ERC20.totalSupply", - "offset": [285, 383], - "op": "ADD", - "path": "24" - }, - "229": { - "fn": "ERC20.totalSupply", - "offset": [285, 383], - "op": "SWAP1", - "path": "24" - }, - "230": { - "fn": "ERC20.totalSupply", - "offset": [285, 383], - "op": "RETURN", - "path": "24" - }, - "231": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "JUMPDEST", - "path": "24" - }, - "232": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "PUSH2", - "path": "24", - "value": "0xB9" - }, - "235": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "PUSH1", - "path": "24", - "value": "0x4" - }, - "237": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "DUP1", - "path": "24" - }, - "238": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "CALLDATASIZE", - "path": "24" - }, - "239": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "SUB", - "path": "24" - }, - "240": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "PUSH1", - "path": "24", - "value": "0x60" - }, - "242": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "DUP2", - "path": "24" - }, - "243": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "LT", - "path": "24" - }, - "244": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "ISZERO", - "path": "24" - }, - "245": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "PUSH2", - "path": "24", - "value": "0xFD" - }, - "248": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "JUMPI", - "path": "24" - }, - "249": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "PUSH1", - "path": "24", - "value": "0x0" - }, - "251": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "DUP1", - "path": "24" - }, - "252": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "REVERT", - "path": "24" - }, - "253": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "JUMPDEST", - "path": "24" - }, - "254": { - "op": "POP" - }, - "255": { - "op": "PUSH1", - "value": "0x1" - }, - "257": { - "op": "PUSH1", - "value": "0x1" - }, - "259": { - "op": "PUSH1", - "value": "0xA0" - }, - "261": { - "op": "SHL" - }, - "262": { - "op": "SUB" - }, - "263": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "DUP2", - "path": "24" - }, - "264": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "CALLDATALOAD", - "path": "24" - }, - "265": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "DUP2", - "path": "24" - }, - "266": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "AND", - "path": "24" - }, - "267": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "SWAP2", - "path": "24" - }, - "268": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "270": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "DUP2", - "path": "24" - }, - "271": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "ADD", - "path": "24" - }, - "272": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "CALLDATALOAD", - "path": "24" - }, - "273": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "SWAP1", - "path": "24" - }, - "274": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "SWAP2", - "path": "24" - }, - "275": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "AND", - "path": "24" - }, - "276": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "SWAP1", - "path": "24" - }, - "277": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "279": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "ADD", - "path": "24" - }, - "280": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "CALLDATALOAD", - "path": "24" - }, - "281": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "PUSH2", - "path": "24", - "value": "0x211" - }, - "284": { - "fn": "ERC20.transferFrom", - "jump": "i", - "offset": [995, 1426], - "op": "JUMP", - "path": "24" - }, - "285": { - "fn": "ERC20.increaseAllowance", - "offset": [1432, 1776], - "op": "JUMPDEST", - "path": "24" - }, - "286": { - "fn": "ERC20.increaseAllowance", - "offset": [1432, 1776], - "op": "PUSH2", - "path": "24", - "value": "0xB9" - }, - "289": { - "fn": "ERC20.increaseAllowance", - "offset": [1432, 1776], - "op": "PUSH1", - "path": "24", - "value": "0x4" - }, - "291": { - "fn": "ERC20.increaseAllowance", - "offset": [1432, 1776], - "op": "DUP1", - "path": "24" - }, - "292": { - "fn": "ERC20.increaseAllowance", - "offset": [1432, 1776], - "op": "CALLDATASIZE", - "path": "24" - }, - "293": { - "fn": "ERC20.increaseAllowance", - "offset": [1432, 1776], - "op": "SUB", - "path": "24" - }, - "294": { - "fn": "ERC20.increaseAllowance", - "offset": [1432, 1776], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "296": { - "fn": "ERC20.increaseAllowance", - "offset": [1432, 1776], - "op": "DUP2", - "path": "24" - }, - "297": { - "fn": "ERC20.increaseAllowance", - "offset": [1432, 1776], - "op": "LT", - "path": "24" - }, - "298": { - "fn": "ERC20.increaseAllowance", - "offset": [1432, 1776], - "op": "ISZERO", - "path": "24" - }, - "299": { - "fn": "ERC20.increaseAllowance", - "offset": [1432, 1776], - "op": "PUSH2", - "path": "24", - "value": "0x133" - }, - "302": { - "fn": "ERC20.increaseAllowance", - "offset": [1432, 1776], - "op": "JUMPI", - "path": "24" - }, - "303": { - "fn": "ERC20.increaseAllowance", - "offset": [1432, 1776], - "op": "PUSH1", - "path": "24", - "value": "0x0" - }, - "305": { - "fn": "ERC20.increaseAllowance", - "offset": [1432, 1776], - "op": "DUP1", - "path": "24" - }, - "306": { - "fn": "ERC20.increaseAllowance", - "offset": [1432, 1776], - "op": "REVERT", - "path": "24" - }, - "307": { - "fn": "ERC20.increaseAllowance", - "offset": [1432, 1776], - "op": "JUMPDEST", - "path": "24" - }, - "308": { - "op": "POP" - }, - "309": { - "op": "PUSH1", - "value": "0x1" - }, - "311": { - "op": "PUSH1", - "value": "0x1" - }, - "313": { - "op": "PUSH1", - "value": "0xA0" - }, - "315": { - "op": "SHL" - }, - "316": { - "op": "SUB" - }, - "317": { - "fn": "ERC20.increaseAllowance", - "offset": [1432, 1776], - "op": "DUP2", - "path": "24" - }, - "318": { - "fn": "ERC20.increaseAllowance", - "offset": [1432, 1776], - "op": "CALLDATALOAD", - "path": "24" - }, - "319": { - "fn": "ERC20.increaseAllowance", - "offset": [1432, 1776], - "op": "AND", - "path": "24" - }, - "320": { - "fn": "ERC20.increaseAllowance", - "offset": [1432, 1776], - "op": "SWAP1", - "path": "24" - }, - "321": { - "fn": "ERC20.increaseAllowance", - "offset": [1432, 1776], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "323": { - "fn": "ERC20.increaseAllowance", - "offset": [1432, 1776], - "op": "ADD", - "path": "24" - }, - "324": { - "fn": "ERC20.increaseAllowance", - "offset": [1432, 1776], - "op": "CALLDATALOAD", - "path": "24" - }, - "325": { - "fn": "ERC20.increaseAllowance", - "offset": [1432, 1776], - "op": "PUSH2", - "path": "24", - "value": "0x299" - }, - "328": { - "fn": "ERC20.increaseAllowance", - "jump": "i", - "offset": [1432, 1776], - "op": "JUMP", - "path": "24" - }, - "329": { - "fn": "ERC20.balanceOf", - "offset": [389, 506], - "op": "JUMPDEST", - "path": "24" - }, - "330": { - "fn": "ERC20.balanceOf", - "offset": [389, 506], - "op": "PUSH2", - "path": "24", - "value": "0xD5" - }, - "333": { - "fn": "ERC20.balanceOf", - "offset": [389, 506], - "op": "PUSH1", - "path": "24", - "value": "0x4" - }, - "335": { - "fn": "ERC20.balanceOf", - "offset": [389, 506], - "op": "DUP1", - "path": "24" - }, - "336": { - "fn": "ERC20.balanceOf", - "offset": [389, 506], - "op": "CALLDATASIZE", - "path": "24" - }, - "337": { - "fn": "ERC20.balanceOf", - "offset": [389, 506], - "op": "SUB", - "path": "24" - }, - "338": { - "fn": "ERC20.balanceOf", - "offset": [389, 506], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "340": { - "fn": "ERC20.balanceOf", - "offset": [389, 506], - "op": "DUP2", - "path": "24" - }, - "341": { - "fn": "ERC20.balanceOf", - "offset": [389, 506], - "op": "LT", - "path": "24" - }, - "342": { - "fn": "ERC20.balanceOf", - "offset": [389, 506], - "op": "ISZERO", - "path": "24" - }, - "343": { - "fn": "ERC20.balanceOf", - "offset": [389, 506], - "op": "PUSH2", - "path": "24", - "value": "0x15F" - }, - "346": { - "fn": "ERC20.balanceOf", - "offset": [389, 506], - "op": "JUMPI", - "path": "24" - }, - "347": { - "fn": "ERC20.balanceOf", - "offset": [389, 506], - "op": "PUSH1", - "path": "24", - "value": "0x0" - }, - "349": { - "fn": "ERC20.balanceOf", - "offset": [389, 506], - "op": "DUP1", - "path": "24" - }, - "350": { - "fn": "ERC20.balanceOf", - "offset": [389, 506], - "op": "REVERT", - "path": "24" - }, - "351": { - "fn": "ERC20.balanceOf", - "offset": [389, 506], - "op": "JUMPDEST", - "path": "24" - }, - "352": { - "op": "POP" - }, - "353": { - "fn": "ERC20.balanceOf", - "offset": [389, 506], - "op": "CALLDATALOAD", - "path": "24" - }, - "354": { - "op": "PUSH1", - "value": "0x1" - }, - "356": { - "op": "PUSH1", - "value": "0x1" - }, - "358": { - "op": "PUSH1", - "value": "0xA0" - }, - "360": { - "op": "SHL" - }, - "361": { - "op": "SUB" - }, - "362": { - "fn": "ERC20.balanceOf", - "offset": [389, 506], - "op": "AND", - "path": "24" - }, - "363": { - "fn": "ERC20.balanceOf", - "offset": [389, 506], - "op": "PUSH2", - "path": "24", - "value": "0x31D" - }, - "366": { - "fn": "ERC20.balanceOf", - "jump": "i", - "offset": [389, 506], - "op": "JUMP", - "path": "24" - }, - "367": { - "fn": "ERC20.decreaseAllowance", - "offset": [1782, 2136], - "op": "JUMPDEST", - "path": "24" - }, - "368": { - "fn": "ERC20.decreaseAllowance", - "offset": [1782, 2136], - "op": "PUSH2", - "path": "24", - "value": "0xB9" - }, - "371": { - "fn": "ERC20.decreaseAllowance", - "offset": [1782, 2136], - "op": "PUSH1", - "path": "24", - "value": "0x4" - }, - "373": { - "fn": "ERC20.decreaseAllowance", - "offset": [1782, 2136], - "op": "DUP1", - "path": "24" - }, - "374": { - "fn": "ERC20.decreaseAllowance", - "offset": [1782, 2136], - "op": "CALLDATASIZE", - "path": "24" - }, - "375": { - "fn": "ERC20.decreaseAllowance", - "offset": [1782, 2136], - "op": "SUB", - "path": "24" - }, - "376": { - "fn": "ERC20.decreaseAllowance", - "offset": [1782, 2136], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "378": { - "fn": "ERC20.decreaseAllowance", - "offset": [1782, 2136], - "op": "DUP2", - "path": "24" - }, - "379": { - "fn": "ERC20.decreaseAllowance", - "offset": [1782, 2136], - "op": "LT", - "path": "24" - }, - "380": { - "fn": "ERC20.decreaseAllowance", - "offset": [1782, 2136], - "op": "ISZERO", - "path": "24" - }, - "381": { - "fn": "ERC20.decreaseAllowance", - "offset": [1782, 2136], - "op": "PUSH2", - "path": "24", - "value": "0x185" - }, - "384": { - "fn": "ERC20.decreaseAllowance", - "offset": [1782, 2136], - "op": "JUMPI", - "path": "24" - }, - "385": { - "fn": "ERC20.decreaseAllowance", - "offset": [1782, 2136], - "op": "PUSH1", - "path": "24", - "value": "0x0" - }, - "387": { - "fn": "ERC20.decreaseAllowance", - "offset": [1782, 2136], - "op": "DUP1", - "path": "24" - }, - "388": { - "fn": "ERC20.decreaseAllowance", - "offset": [1782, 2136], - "op": "REVERT", - "path": "24" - }, - "389": { - "fn": "ERC20.decreaseAllowance", - "offset": [1782, 2136], - "op": "JUMPDEST", - "path": "24" - }, - "390": { - "op": "POP" - }, - "391": { - "op": "PUSH1", - "value": "0x1" - }, - "393": { - "op": "PUSH1", - "value": "0x1" - }, - "395": { - "op": "PUSH1", - "value": "0xA0" - }, - "397": { - "op": "SHL" - }, - "398": { - "op": "SUB" - }, - "399": { - "fn": "ERC20.decreaseAllowance", - "offset": [1782, 2136], - "op": "DUP2", - "path": "24" - }, - "400": { - "fn": "ERC20.decreaseAllowance", - "offset": [1782, 2136], - "op": "CALLDATALOAD", - "path": "24" - }, - "401": { - "fn": "ERC20.decreaseAllowance", - "offset": [1782, 2136], - "op": "AND", - "path": "24" - }, - "402": { - "fn": "ERC20.decreaseAllowance", - "offset": [1782, 2136], - "op": "SWAP1", - "path": "24" - }, - "403": { - "fn": "ERC20.decreaseAllowance", - "offset": [1782, 2136], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "405": { - "fn": "ERC20.decreaseAllowance", - "offset": [1782, 2136], - "op": "ADD", - "path": "24" - }, - "406": { - "fn": "ERC20.decreaseAllowance", - "offset": [1782, 2136], - "op": "CALLDATALOAD", - "path": "24" - }, - "407": { - "fn": "ERC20.decreaseAllowance", - "offset": [1782, 2136], - "op": "PUSH2", - "path": "24", - "value": "0x338" - }, - "410": { - "fn": "ERC20.decreaseAllowance", - "jump": "i", - "offset": [1782, 2136], - "op": "JUMP", - "path": "24" - }, - "411": { - "fn": "ERC20.transfer", - "offset": [512, 682], - "op": "JUMPDEST", - "path": "24" - }, - "412": { - "fn": "ERC20.transfer", - "offset": [512, 682], - "op": "PUSH2", - "path": "24", - "value": "0xB9" - }, - "415": { - "fn": "ERC20.transfer", - "offset": [512, 682], - "op": "PUSH1", - "path": "24", - "value": "0x4" - }, - "417": { - "fn": "ERC20.transfer", - "offset": [512, 682], - "op": "DUP1", - "path": "24" - }, - "418": { - "fn": "ERC20.transfer", - "offset": [512, 682], - "op": "CALLDATASIZE", - "path": "24" - }, - "419": { - "fn": "ERC20.transfer", - "offset": [512, 682], - "op": "SUB", - "path": "24" - }, - "420": { - "fn": "ERC20.transfer", - "offset": [512, 682], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "422": { - "fn": "ERC20.transfer", - "offset": [512, 682], - "op": "DUP2", - "path": "24" - }, - "423": { - "fn": "ERC20.transfer", - "offset": [512, 682], - "op": "LT", - "path": "24" - }, - "424": { - "fn": "ERC20.transfer", - "offset": [512, 682], - "op": "ISZERO", - "path": "24" - }, - "425": { - "fn": "ERC20.transfer", - "offset": [512, 682], - "op": "PUSH2", - "path": "24", - "value": "0x1B1" - }, - "428": { - "fn": "ERC20.transfer", - "offset": [512, 682], - "op": "JUMPI", - "path": "24" - }, - "429": { - "fn": "ERC20.transfer", - "offset": [512, 682], - "op": "PUSH1", - "path": "24", - "value": "0x0" - }, - "431": { - "fn": "ERC20.transfer", - "offset": [512, 682], - "op": "DUP1", - "path": "24" - }, - "432": { - "fn": "ERC20.transfer", - "offset": [512, 682], - "op": "REVERT", - "path": "24" - }, - "433": { - "fn": "ERC20.transfer", - "offset": [512, 682], - "op": "JUMPDEST", - "path": "24" - }, - "434": { - "op": "POP" - }, - "435": { - "op": "PUSH1", - "value": "0x1" - }, - "437": { - "op": "PUSH1", - "value": "0x1" - }, - "439": { - "op": "PUSH1", - "value": "0xA0" - }, - "441": { - "op": "SHL" - }, - "442": { - "op": "SUB" - }, - "443": { - "fn": "ERC20.transfer", - "offset": [512, 682], - "op": "DUP2", - "path": "24" - }, - "444": { - "fn": "ERC20.transfer", - "offset": [512, 682], - "op": "CALLDATALOAD", - "path": "24" - }, - "445": { - "fn": "ERC20.transfer", - "offset": [512, 682], - "op": "AND", - "path": "24" - }, - "446": { - "fn": "ERC20.transfer", - "offset": [512, 682], - "op": "SWAP1", - "path": "24" - }, - "447": { - "fn": "ERC20.transfer", - "offset": [512, 682], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "449": { - "fn": "ERC20.transfer", - "offset": [512, 682], - "op": "ADD", - "path": "24" - }, - "450": { - "fn": "ERC20.transfer", - "offset": [512, 682], - "op": "CALLDATALOAD", - "path": "24" - }, - "451": { - "fn": "ERC20.transfer", - "offset": [512, 682], - "op": "PUSH2", - "path": "24", - "value": "0x3A8" - }, - "454": { - "fn": "ERC20.transfer", - "jump": "i", - "offset": [512, 682], - "op": "JUMP", - "path": "24" - }, - "455": { - "fn": "ERC20.allowance", - "offset": [688, 829], - "op": "JUMPDEST", - "path": "24" - }, - "456": { - "fn": "ERC20.allowance", - "offset": [688, 829], - "op": "PUSH2", - "path": "24", - "value": "0xD5" - }, - "459": { - "fn": "ERC20.allowance", - "offset": [688, 829], - "op": "PUSH1", - "path": "24", - "value": "0x4" - }, - "461": { - "fn": "ERC20.allowance", - "offset": [688, 829], - "op": "DUP1", - "path": "24" - }, - "462": { - "fn": "ERC20.allowance", - "offset": [688, 829], - "op": "CALLDATASIZE", - "path": "24" - }, - "463": { - "fn": "ERC20.allowance", - "offset": [688, 829], - "op": "SUB", - "path": "24" - }, - "464": { - "fn": "ERC20.allowance", - "offset": [688, 829], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "466": { - "fn": "ERC20.allowance", - "offset": [688, 829], - "op": "DUP2", - "path": "24" - }, - "467": { - "fn": "ERC20.allowance", - "offset": [688, 829], - "op": "LT", - "path": "24" - }, - "468": { - "fn": "ERC20.allowance", - "offset": [688, 829], - "op": "ISZERO", - "path": "24" - }, - "469": { - "fn": "ERC20.allowance", - "offset": [688, 829], - "op": "PUSH2", - "path": "24", - "value": "0x1DD" - }, - "472": { - "fn": "ERC20.allowance", - "offset": [688, 829], - "op": "JUMPI", - "path": "24" - }, - "473": { - "fn": "ERC20.allowance", - "offset": [688, 829], - "op": "PUSH1", - "path": "24", - "value": "0x0" - }, - "475": { - "fn": "ERC20.allowance", - "offset": [688, 829], - "op": "DUP1", - "path": "24" - }, - "476": { - "fn": "ERC20.allowance", - "offset": [688, 829], - "op": "REVERT", - "path": "24" - }, - "477": { - "fn": "ERC20.allowance", - "offset": [688, 829], - "op": "JUMPDEST", - "path": "24" - }, - "478": { - "op": "POP" - }, - "479": { - "op": "PUSH1", - "value": "0x1" - }, - "481": { - "op": "PUSH1", - "value": "0x1" - }, - "483": { - "op": "PUSH1", - "value": "0xA0" - }, - "485": { - "op": "SHL" - }, - "486": { - "op": "SUB" - }, - "487": { - "fn": "ERC20.allowance", - "offset": [688, 829], - "op": "DUP2", - "path": "24" - }, - "488": { - "fn": "ERC20.allowance", - "offset": [688, 829], - "op": "CALLDATALOAD", - "path": "24" - }, - "489": { - "fn": "ERC20.allowance", - "offset": [688, 829], - "op": "DUP2", - "path": "24" - }, - "490": { - "fn": "ERC20.allowance", - "offset": [688, 829], - "op": "AND", - "path": "24" - }, - "491": { - "fn": "ERC20.allowance", - "offset": [688, 829], - "op": "SWAP2", - "path": "24" - }, - "492": { - "fn": "ERC20.allowance", - "offset": [688, 829], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "494": { - "fn": "ERC20.allowance", - "offset": [688, 829], - "op": "ADD", - "path": "24" - }, - "495": { - "fn": "ERC20.allowance", - "offset": [688, 829], - "op": "CALLDATALOAD", - "path": "24" - }, - "496": { - "fn": "ERC20.allowance", - "offset": [688, 829], - "op": "AND", - "path": "24" - }, - "497": { - "fn": "ERC20.allowance", - "offset": [688, 829], - "op": "PUSH2", - "path": "24", - "value": "0x3B5" - }, - "500": { - "fn": "ERC20.allowance", - "jump": "i", - "offset": [688, 829], - "op": "JUMP", - "path": "24" - }, - "501": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "JUMPDEST", - "path": "24" - }, - "502": { - "fn": "ERC20.approve", - "offset": [909, 913], - "op": "PUSH1", - "path": "24", - "value": "0x0" - }, - "504": { - "fn": "ERC20.approve", - "offset": [925, 961], - "op": "PUSH2", - "path": "24", - "statement": 0, - "value": "0x202" - }, - "507": { - "fn": "ERC20.approve", - "offset": [934, 944], - "op": "CALLER", - "path": "24" - }, - "508": { - "fn": "ERC20.approve", - "offset": [946, 953], - "op": "DUP5", - "path": "24" - }, - "509": { - "fn": "ERC20.approve", - "offset": [955, 960], - "op": "DUP5", - "path": "24" - }, - "510": { - "fn": "ERC20.approve", - "offset": [925, 933], - "op": "PUSH2", - "path": "24", - "value": "0x3E0" - }, - "513": { - "fn": "ERC20.approve", - "jump": "i", - "offset": [925, 961], - "op": "JUMP", - "path": "24" - }, - "514": { - "fn": "ERC20.approve", - "offset": [925, 961], - "op": "JUMPDEST", - "path": "24" - }, - "515": { - "op": "POP" - }, - "516": { - "fn": "ERC20.approve", - "offset": [978, 982], - "op": "PUSH1", - "path": "24", - "statement": 1, - "value": "0x1" - }, - "518": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "SWAP3", - "path": "24" - }, - "519": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "SWAP2", - "path": "24" - }, - "520": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "POP", - "path": "24" - }, - "521": { - "fn": "ERC20.approve", - "offset": [835, 989], - "op": "POP", - "path": "24" - }, - "522": { - "fn": "ERC20.approve", - "jump": "o", - "offset": [835, 989], - "op": "JUMP", - "path": "24" - }, - "523": { - "fn": "ERC20.totalSupply", - "offset": [285, 383], - "op": "JUMPDEST", - "path": "24" - }, - "524": { - "fn": "ERC20.totalSupply", - "offset": [364, 376], - "op": "PUSH1", - "path": "24", - "statement": 2, - "value": "0x2" - }, - "526": { - "fn": "ERC20.totalSupply", - "offset": [364, 376], - "op": "SLOAD", - "path": "24" - }, - "527": { - "fn": "ERC20.totalSupply", - "offset": [285, 383], - "op": "SWAP1", - "path": "24" - }, - "528": { - "fn": "ERC20.totalSupply", - "jump": "o", - "offset": [285, 383], - "op": "JUMP", - "path": "24" - }, - "529": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "JUMPDEST", - "path": "24" - }, - "530": { - "fn": "ERC20.transferFrom", - "offset": [1131, 1135], - "op": "PUSH1", - "path": "24", - "value": "0x0" - }, - "532": { - "fn": "ERC20.transferFrom", - "offset": [1147, 1183], - "op": "PUSH2", - "path": "24", - "statement": 3, - "value": "0x21E" - }, - "535": { - "fn": "ERC20.transferFrom", - "offset": [1157, 1163], - "op": "DUP5", - "path": "24" - }, - "536": { - "fn": "ERC20.transferFrom", - "offset": [1165, 1174], - "op": "DUP5", - "path": "24" - }, - "537": { - "fn": "ERC20.transferFrom", - "offset": [1176, 1182], - "op": "DUP5", - "path": "24" - }, - "538": { - "fn": "ERC20.transferFrom", - "offset": [1147, 1156], - "op": "PUSH2", - "path": "24", - "value": "0x4CC" - }, - "541": { - "fn": "ERC20.transferFrom", - "jump": "i", - "offset": [1147, 1183], - "op": "JUMP", - "path": "24" - }, - "542": { - "fn": "ERC20.transferFrom", - "offset": [1147, 1183], - "op": "JUMPDEST", - "path": "24" - }, - "543": { - "op": "PUSH1", - "value": "0x1" - }, - "545": { - "op": "PUSH1", - "value": "0x1" - }, - "547": { - "op": "PUSH1", - "value": "0xA0" - }, - "549": { - "op": "SHL" - }, - "550": { - "op": "SUB" - }, - "551": { - "fn": "ERC20.transferFrom", - "offset": [1220, 1239], - "op": "DUP5", - "path": "24" - }, - "552": { - "fn": "ERC20.transferFrom", - "offset": [1220, 1239], - "op": "AND", - "path": "24" - }, - "553": { - "fn": "ERC20.transferFrom", - "offset": [1193, 1217], - "op": "PUSH1", - "path": "24", - "value": "0x0" - }, - "555": { - "fn": "ERC20.transferFrom", - "offset": [1220, 1239], - "op": "SWAP1", - "path": "24" - }, - "556": { - "fn": "ERC20.transferFrom", - "offset": [1220, 1239], - "op": "DUP2", - "path": "24" - }, - "557": { - "fn": "ERC20.transferFrom", - "offset": [1220, 1239], - "op": "MSTORE", - "path": "24" - }, - "558": { - "fn": "ERC20.transferFrom", - "offset": [1220, 1231], - "op": "PUSH1", - "path": "24", - "value": "0x1" - }, - "560": { - "fn": "ERC20.transferFrom", - "offset": [1220, 1239], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "562": { - "fn": "ERC20.transferFrom", - "offset": [1220, 1239], - "op": "SWAP1", - "path": "24" - }, - "563": { - "fn": "ERC20.transferFrom", - "offset": [1220, 1239], - "op": "DUP2", - "path": "24" - }, - "564": { - "fn": "ERC20.transferFrom", - "offset": [1220, 1239], - "op": "MSTORE", - "path": "24" - }, - "565": { - "fn": "ERC20.transferFrom", - "offset": [1220, 1239], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "567": { - "fn": "ERC20.transferFrom", - "offset": [1220, 1239], - "op": "DUP1", - "path": "24" - }, - "568": { - "fn": "ERC20.transferFrom", - "offset": [1220, 1239], - "op": "DUP4", - "path": "24" - }, - "569": { - "fn": "ERC20.transferFrom", - "offset": [1220, 1239], - "op": "KECCAK256", - "path": "24" - }, - "570": { - "fn": "ERC20.transferFrom", - "offset": [1240, 1250], - "op": "CALLER", - "path": "24" - }, - "571": { - "fn": "ERC20.transferFrom", - "offset": [1220, 1251], - "op": "DUP5", - "path": "24" - }, - "572": { - "fn": "ERC20.transferFrom", - "offset": [1220, 1251], - "op": "MSTORE", - "path": "24" - }, - "573": { - "fn": "ERC20.transferFrom", - "offset": [1220, 1251], - "op": "SWAP1", - "path": "24" - }, - "574": { - "fn": "ERC20.transferFrom", - "offset": [1220, 1251], - "op": "SWAP2", - "path": "24" - }, - "575": { - "fn": "ERC20.transferFrom", - "offset": [1220, 1251], - "op": "MSTORE", - "path": "24" - }, - "576": { - "fn": "ERC20.transferFrom", - "offset": [1220, 1251], - "op": "SWAP1", - "path": "24" - }, - "577": { - "fn": "ERC20.transferFrom", - "offset": [1220, 1251], - "op": "KECCAK256", - "path": "24" - }, - "578": { - "fn": "ERC20.transferFrom", - "offset": [1220, 1251], - "op": "SLOAD", - "path": "24" - }, - "579": { - "fn": "ERC20.transferFrom", - "offset": [1269, 1295], - "op": "DUP3", - "path": "24", - "statement": 4 - }, - "580": { - "fn": "ERC20.transferFrom", - "offset": [1269, 1295], - "op": "DUP2", - "path": "24" - }, - "581": { - "fn": "ERC20.transferFrom", - "offset": [1269, 1295], - "op": "LT", - "path": "24" - }, - "582": { - "branch": 26, - "fn": "ERC20.transferFrom", - "offset": [1269, 1295], - "op": "ISZERO", - "path": "24" - }, - "583": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "PUSH2", - "path": "24", - "value": "0x281" - }, - "586": { - "branch": 26, - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "JUMPI", - "path": "24" - }, - "587": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "589": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "MLOAD", - "path": "24" - }, - "590": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "594": { - "op": "PUSH1", - "value": "0xE5" - }, - "596": { - "op": "SHL" - }, - "597": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "DUP2", - "path": "24" - }, - "598": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "MSTORE", - "path": "24" - }, - "599": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "PUSH1", - "path": "24", - "value": "0x4" - }, - "601": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "ADD", - "path": "24" - }, - "602": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "DUP1", - "path": "24" - }, - "603": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "DUP1", - "path": "24" - }, - "604": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "606": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "ADD", - "path": "24" - }, - "607": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "DUP3", - "path": "24" - }, - "608": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "DUP2", - "path": "24" - }, - "609": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "SUB", - "path": "24" - }, - "610": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "DUP3", - "path": "24" - }, - "611": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "MSTORE", - "path": "24" - }, - "612": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "PUSH1", - "path": "24", - "value": "0x21" - }, - "614": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "DUP2", - "path": "24" - }, - "615": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "MSTORE", - "path": "24" - }, - "616": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "618": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "ADD", - "path": "24" - }, - "619": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "DUP1", - "path": "24" - }, - "620": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "PUSH2", - "path": "24", - "value": "0x6B0" - }, - "623": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "PUSH1", - "path": "24", - "value": "0x21" - }, - "625": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "SWAP2", - "path": "24" - }, - "626": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "CODECOPY", - "path": "24" - }, - "627": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "629": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "ADD", - "path": "24" - }, - "630": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "SWAP2", - "path": "24" - }, - "631": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "POP", - "path": "24" - }, - "632": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "POP", - "path": "24" - }, - "633": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "635": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "MLOAD", - "path": "24" - }, - "636": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "DUP1", - "path": "24" - }, - "637": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "SWAP2", - "path": "24" - }, - "638": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "SUB", - "path": "24" - }, - "639": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "SWAP1", - "path": "24" - }, - "640": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "REVERT", - "path": "24" - }, - "641": { - "fn": "ERC20.transferFrom", - "offset": [1261, 1333], - "op": "JUMPDEST", - "path": "24" - }, - "642": { - "fn": "ERC20.transferFrom", - "offset": [1343, 1398], - "op": "PUSH2", - "path": "24", - "statement": 5, - "value": "0x28E" - }, - "645": { - "fn": "ERC20.transferFrom", - "offset": [1352, 1358], - "op": "DUP6", - "path": "24" - }, - "646": { - "fn": "ERC20.transferFrom", - "offset": [1360, 1370], - "op": "CALLER", - "path": "24" - }, - "647": { - "fn": "ERC20.transferFrom", - "offset": [1391, 1397], - "op": "DUP6", - "path": "24" - }, - "648": { - "fn": "ERC20.transferFrom", - "offset": [1372, 1388], - "op": "DUP5", - "path": "24" - }, - "649": { - "fn": "ERC20.transferFrom", - "offset": [1372, 1397], - "op": "SUB", - "path": "24" - }, - "650": { - "fn": "ERC20.transferFrom", - "offset": [1343, 1351], - "op": "PUSH2", - "path": "24", - "value": "0x3E0" - }, - "653": { - "fn": "ERC20.transferFrom", - "jump": "i", - "offset": [1343, 1398], - "op": "JUMP", - "path": "24" - }, - "654": { - "fn": "ERC20.transferFrom", - "offset": [1343, 1398], - "op": "JUMPDEST", - "path": "24" - }, - "655": { - "op": "POP" - }, - "656": { - "fn": "ERC20.transferFrom", - "offset": [1415, 1419], - "op": "PUSH1", - "path": "24", - "statement": 6, - "value": "0x1" - }, - "658": { - "fn": "ERC20.transferFrom", - "offset": [1415, 1419], - "op": "SWAP5", - "path": "24" - }, - "659": { - "fn": "ERC20.transferFrom", - "offset": [995, 1426], - "op": "SWAP4", - "path": "24" - }, - "660": { - "op": "POP" - }, - "661": { - "op": "POP" - }, - "662": { - "op": "POP" - }, - "663": { - "op": "POP" - }, - "664": { - "fn": "ERC20.transferFrom", - "jump": "o", - "offset": [995, 1426], - "op": "JUMP", - "path": "24" - }, - "665": { - "fn": "ERC20.increaseAllowance", - "offset": [1432, 1776], - "op": "JUMPDEST", - "path": "24" - }, - "666": { - "fn": "ERC20.increaseAllowance", - "offset": [1568, 1578], - "op": "CALLER", - "path": "24" - }, - "667": { - "fn": "ERC20.increaseAllowance", - "offset": [1512, 1516], - "op": "PUSH1", - "path": "24", - "value": "0x0" - }, - "669": { - "fn": "ERC20.increaseAllowance", - "offset": [1556, 1579], - "op": "SWAP1", - "path": "24" - }, - "670": { - "fn": "ERC20.increaseAllowance", - "offset": [1556, 1579], - "op": "DUP2", - "path": "24" - }, - "671": { - "fn": "ERC20.increaseAllowance", - "offset": [1556, 1579], - "op": "MSTORE", - "path": "24" - }, - "672": { - "fn": "ERC20.increaseAllowance", - "offset": [1556, 1567], - "op": "PUSH1", - "path": "24", - "value": "0x1" - }, - "674": { - "fn": "ERC20.increaseAllowance", - "offset": [1556, 1579], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "676": { - "fn": "ERC20.increaseAllowance", - "offset": [1556, 1579], - "op": "SWAP1", - "path": "24" - }, - "677": { - "fn": "ERC20.increaseAllowance", - "offset": [1556, 1579], - "op": "DUP2", - "path": "24" - }, - "678": { - "fn": "ERC20.increaseAllowance", - "offset": [1556, 1579], - "op": "MSTORE", - "path": "24" - }, - "679": { - "fn": "ERC20.increaseAllowance", - "offset": [1556, 1579], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "681": { - "fn": "ERC20.increaseAllowance", - "offset": [1556, 1579], - "op": "DUP1", - "path": "24" - }, - "682": { - "fn": "ERC20.increaseAllowance", - "offset": [1556, 1579], - "op": "DUP4", - "path": "24" - }, - "683": { - "fn": "ERC20.increaseAllowance", - "offset": [1556, 1579], - "op": "KECCAK256", - "path": "24" - }, - "684": { - "op": "PUSH1", - "value": "0x1" - }, - "686": { - "op": "PUSH1", - "value": "0x1" - }, - "688": { - "op": "PUSH1", - "value": "0xA0" - }, - "690": { - "op": "SHL" - }, - "691": { - "op": "SUB" - }, - "692": { - "fn": "ERC20.increaseAllowance", - "offset": [1556, 1588], - "op": "DUP7", - "path": "24" - }, - "693": { - "fn": "ERC20.increaseAllowance", - "offset": [1556, 1588], - "op": "AND", - "path": "24" - }, - "694": { - "fn": "ERC20.increaseAllowance", - "offset": [1556, 1588], - "op": "DUP5", - "path": "24" - }, - "695": { - "fn": "ERC20.increaseAllowance", - "offset": [1556, 1588], - "op": "MSTORE", - "path": "24" - }, - "696": { - "fn": "ERC20.increaseAllowance", - "offset": [1556, 1588], - "op": "SWAP1", - "path": "24" - }, - "697": { - "fn": "ERC20.increaseAllowance", - "offset": [1556, 1588], - "op": "SWAP2", - "path": "24" - }, - "698": { - "fn": "ERC20.increaseAllowance", - "offset": [1556, 1588], - "op": "MSTORE", - "path": "24" - }, - "699": { - "fn": "ERC20.increaseAllowance", - "offset": [1556, 1588], - "op": "DUP2", - "path": "24" - }, - "700": { - "fn": "ERC20.increaseAllowance", - "offset": [1556, 1588], - "op": "KECCAK256", - "path": "24" - }, - "701": { - "fn": "ERC20.increaseAllowance", - "offset": [1556, 1588], - "op": "SLOAD", - "path": "24" - }, - "702": { - "fn": "ERC20.increaseAllowance", - "offset": [1606, 1636], - "op": "DUP3", - "path": "24", - "statement": 7 - }, - "703": { - "fn": "ERC20.increaseAllowance", - "offset": [1606, 1636], - "op": "DUP2", - "path": "24" - }, - "704": { - "fn": "ERC20.increaseAllowance", - "offset": [1606, 1636], - "op": "ADD", - "path": "24" - }, - "705": { - "fn": "ERC20.increaseAllowance", - "offset": [1606, 1657], - "op": "DUP2", - "path": "24" - }, - "706": { - "op": "GT" - }, - "707": { - "branch": 27, - "fn": "ERC20.increaseAllowance", - "offset": [1606, 1657], - "op": "ISZERO", - "path": "24" - }, - "708": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "PUSH2", - "path": "24", - "value": "0x306" - }, - "711": { - "branch": 27, - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "JUMPI", - "path": "24" - }, - "712": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "714": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "DUP1", - "path": "24" - }, - "715": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "MLOAD", - "path": "24" - }, - "716": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "720": { - "op": "PUSH1", - "value": "0xE5" - }, - "722": { - "op": "SHL" - }, - "723": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "DUP2", - "path": "24" - }, - "724": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "MSTORE", - "path": "24" - }, - "725": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "727": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "PUSH1", - "path": "24", - "value": "0x4" - }, - "729": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "DUP3", - "path": "24" - }, - "730": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "ADD", - "path": "24" - }, - "731": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "MSTORE", - "path": "24" - }, - "732": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "PUSH1", - "path": "24", - "value": "0xF" - }, - "734": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "PUSH1", - "path": "24", - "value": "0x24" - }, - "736": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "DUP3", - "path": "24" - }, - "737": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "ADD", - "path": "24" - }, - "738": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "MSTORE", - "path": "24" - }, - "739": { - "op": "PUSH15", - "value": "0x45524332303A204F766572666C6F77" - }, - "755": { - "op": "PUSH1", - "value": "0x88" - }, - "757": { - "op": "SHL" - }, - "758": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "PUSH1", - "path": "24", - "value": "0x44" - }, - "760": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "DUP3", - "path": "24" - }, - "761": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "ADD", - "path": "24" - }, - "762": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "MSTORE", - "path": "24" - }, - "763": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "SWAP1", - "path": "24" - }, - "764": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "MLOAD", - "path": "24" - }, - "765": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "SWAP1", - "path": "24" - }, - "766": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "DUP2", - "path": "24" - }, - "767": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "SWAP1", - "path": "24" - }, - "768": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "SUB", - "path": "24" - }, - "769": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "PUSH1", - "path": "24", - "value": "0x64" - }, - "771": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "ADD", - "path": "24" - }, - "772": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "SWAP1", - "path": "24" - }, - "773": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "REVERT", - "path": "24" - }, - "774": { - "fn": "ERC20.increaseAllowance", - "offset": [1598, 1677], - "op": "JUMPDEST", - "path": "24" - }, - "775": { - "fn": "ERC20.increaseAllowance", - "offset": [1687, 1748], - "op": "PUSH2", - "path": "24", - "statement": 8, - "value": "0x313" - }, - "778": { - "fn": "ERC20.increaseAllowance", - "offset": [1696, 1706], - "op": "CALLER", - "path": "24" - }, - "779": { - "fn": "ERC20.increaseAllowance", - "offset": [1708, 1715], - "op": "DUP6", - "path": "24" - }, - "780": { - "fn": "ERC20.increaseAllowance", - "offset": [1737, 1747], - "op": "DUP6", - "path": "24" - }, - "781": { - "fn": "ERC20.increaseAllowance", - "offset": [1717, 1734], - "op": "DUP5", - "path": "24" - }, - "782": { - "fn": "ERC20.increaseAllowance", - "offset": [1717, 1747], - "op": "ADD", - "path": "24" - }, - "783": { - "fn": "ERC20.increaseAllowance", - "offset": [1687, 1695], - "op": "PUSH2", - "path": "24", - "value": "0x3E0" - }, - "786": { - "fn": "ERC20.increaseAllowance", - "jump": "i", - "offset": [1687, 1748], - "op": "JUMP", - "path": "24" - }, - "787": { - "fn": "ERC20.increaseAllowance", - "offset": [1687, 1748], - "op": "JUMPDEST", - "path": "24" - }, - "788": { - "op": "POP" - }, - "789": { - "fn": "ERC20.increaseAllowance", - "offset": [1765, 1769], - "op": "PUSH1", - "path": "24", - "statement": 9, - "value": "0x1" - }, - "791": { - "fn": "ERC20.increaseAllowance", - "offset": [1765, 1769], - "op": "SWAP4", - "path": "24" - }, - "792": { - "fn": "ERC20.increaseAllowance", - "offset": [1432, 1776], - "op": "SWAP3", - "path": "24" - }, - "793": { - "op": "POP" - }, - "794": { - "op": "POP" - }, - "795": { - "op": "POP" - }, - "796": { - "fn": "ERC20.increaseAllowance", - "jump": "o", - "offset": [1432, 1776], - "op": "JUMP", - "path": "24" - }, - "797": { - "fn": "ERC20.balanceOf", - "offset": [389, 506], - "op": "JUMPDEST", - "path": "24" - }, - "798": { - "op": "PUSH1", - "value": "0x1" - }, - "800": { - "op": "PUSH1", - "value": "0x1" - }, - "802": { - "op": "PUSH1", - "value": "0xA0" - }, - "804": { - "op": "SHL" - }, - "805": { - "op": "SUB" - }, - "806": { - "fn": "ERC20.balanceOf", - "offset": [481, 499], - "op": "AND", - "path": "24", - "statement": 10 - }, - "807": { - "fn": "ERC20.balanceOf", - "offset": [455, 462], - "op": "PUSH1", - "path": "24", - "value": "0x0" - }, - "809": { - "fn": "ERC20.balanceOf", - "offset": [481, 499], - "op": "SWAP1", - "path": "24" - }, - "810": { - "fn": "ERC20.balanceOf", - "offset": [481, 499], - "op": "DUP2", - "path": "24" - }, - "811": { - "fn": "ERC20.balanceOf", - "offset": [481, 499], - "op": "MSTORE", - "path": "24" - }, - "812": { - "fn": "ERC20.balanceOf", - "offset": [481, 499], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "814": { - "fn": "ERC20.balanceOf", - "offset": [481, 499], - "op": "DUP2", - "path": "24" - }, - "815": { - "fn": "ERC20.balanceOf", - "offset": [481, 499], - "op": "SWAP1", - "path": "24" - }, - "816": { - "fn": "ERC20.balanceOf", - "offset": [481, 499], - "op": "MSTORE", - "path": "24" - }, - "817": { - "fn": "ERC20.balanceOf", - "offset": [481, 499], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "819": { - "fn": "ERC20.balanceOf", - "offset": [481, 499], - "op": "SWAP1", - "path": "24" - }, - "820": { - "fn": "ERC20.balanceOf", - "offset": [481, 499], - "op": "KECCAK256", - "path": "24" - }, - "821": { - "fn": "ERC20.balanceOf", - "offset": [481, 499], - "op": "SLOAD", - "path": "24" - }, - "822": { - "fn": "ERC20.balanceOf", - "offset": [481, 499], - "op": "SWAP1", - "path": "24" - }, - "823": { - "fn": "ERC20.balanceOf", - "jump": "o", - "offset": [389, 506], - "op": "JUMP", - "path": "24" - }, - "824": { - "fn": "ERC20.decreaseAllowance", - "offset": [1782, 2136], - "op": "JUMPDEST", - "path": "24" - }, - "825": { - "fn": "ERC20.decreaseAllowance", - "offset": [1922, 1932], - "op": "CALLER", - "path": "24" - }, - "826": { - "fn": "ERC20.decreaseAllowance", - "offset": [1867, 1871], - "op": "PUSH1", - "path": "24", - "value": "0x0" - }, - "828": { - "fn": "ERC20.decreaseAllowance", - "offset": [1910, 1933], - "op": "SWAP1", - "path": "24" - }, - "829": { - "fn": "ERC20.decreaseAllowance", - "offset": [1910, 1933], - "op": "DUP2", - "path": "24" - }, - "830": { - "fn": "ERC20.decreaseAllowance", - "offset": [1910, 1933], - "op": "MSTORE", - "path": "24" - }, - "831": { - "fn": "ERC20.decreaseAllowance", - "offset": [1910, 1921], - "op": "PUSH1", - "path": "24", - "value": "0x1" - }, - "833": { - "fn": "ERC20.decreaseAllowance", - "offset": [1910, 1933], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "835": { - "fn": "ERC20.decreaseAllowance", - "offset": [1910, 1933], - "op": "SWAP1", - "path": "24" - }, - "836": { - "fn": "ERC20.decreaseAllowance", - "offset": [1910, 1933], - "op": "DUP2", - "path": "24" - }, - "837": { - "fn": "ERC20.decreaseAllowance", - "offset": [1910, 1933], - "op": "MSTORE", - "path": "24" - }, - "838": { - "fn": "ERC20.decreaseAllowance", - "offset": [1910, 1933], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "840": { - "fn": "ERC20.decreaseAllowance", - "offset": [1910, 1933], - "op": "DUP1", - "path": "24" - }, - "841": { - "fn": "ERC20.decreaseAllowance", - "offset": [1910, 1933], - "op": "DUP4", - "path": "24" - }, - "842": { - "fn": "ERC20.decreaseAllowance", - "offset": [1910, 1933], - "op": "KECCAK256", - "path": "24" - }, - "843": { - "op": "PUSH1", - "value": "0x1" - }, - "845": { - "op": "PUSH1", - "value": "0x1" - }, - "847": { - "op": "PUSH1", - "value": "0xA0" - }, - "849": { - "op": "SHL" - }, - "850": { - "op": "SUB" - }, - "851": { - "fn": "ERC20.decreaseAllowance", - "offset": [1910, 1942], - "op": "DUP7", - "path": "24" - }, - "852": { - "fn": "ERC20.decreaseAllowance", - "offset": [1910, 1942], - "op": "AND", - "path": "24" - }, - "853": { - "fn": "ERC20.decreaseAllowance", - "offset": [1910, 1942], - "op": "DUP5", - "path": "24" - }, - "854": { - "fn": "ERC20.decreaseAllowance", - "offset": [1910, 1942], - "op": "MSTORE", - "path": "24" - }, - "855": { - "fn": "ERC20.decreaseAllowance", - "offset": [1910, 1942], - "op": "SWAP1", - "path": "24" - }, - "856": { - "fn": "ERC20.decreaseAllowance", - "offset": [1910, 1942], - "op": "SWAP2", - "path": "24" - }, - "857": { - "fn": "ERC20.decreaseAllowance", - "offset": [1910, 1942], - "op": "MSTORE", - "path": "24" - }, - "858": { - "fn": "ERC20.decreaseAllowance", - "offset": [1910, 1942], - "op": "DUP2", - "path": "24" - }, - "859": { - "fn": "ERC20.decreaseAllowance", - "offset": [1910, 1942], - "op": "KECCAK256", - "path": "24" - }, - "860": { - "fn": "ERC20.decreaseAllowance", - "offset": [1910, 1942], - "op": "SLOAD", - "path": "24" - }, - "861": { - "fn": "ERC20.decreaseAllowance", - "offset": [1960, 1995], - "op": "DUP3", - "path": "24", - "statement": 11 - }, - "862": { - "fn": "ERC20.decreaseAllowance", - "offset": [1960, 1995], - "op": "DUP2", - "path": "24" - }, - "863": { - "fn": "ERC20.decreaseAllowance", - "offset": [1960, 1995], - "op": "LT", - "path": "24" - }, - "864": { - "branch": 28, - "fn": "ERC20.decreaseAllowance", - "offset": [1960, 1995], - "op": "ISZERO", - "path": "24" - }, - "865": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "PUSH2", - "path": "24", - "value": "0x39B" - }, - "868": { - "branch": 28, - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "JUMPI", - "path": "24" - }, - "869": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "871": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "MLOAD", - "path": "24" - }, - "872": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "876": { - "op": "PUSH1", - "value": "0xE5" - }, - "878": { - "op": "SHL" - }, - "879": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "DUP2", - "path": "24" - }, - "880": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "MSTORE", - "path": "24" - }, - "881": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "PUSH1", - "path": "24", - "value": "0x4" - }, - "883": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "ADD", - "path": "24" - }, - "884": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "DUP1", - "path": "24" - }, - "885": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "DUP1", - "path": "24" - }, - "886": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "888": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "ADD", - "path": "24" - }, - "889": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "DUP3", - "path": "24" - }, - "890": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "DUP2", - "path": "24" - }, - "891": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "SUB", - "path": "24" - }, - "892": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "DUP3", - "path": "24" - }, - "893": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "MSTORE", - "path": "24" - }, - "894": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "PUSH1", - "path": "24", - "value": "0x21" - }, - "896": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "DUP2", - "path": "24" - }, - "897": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "MSTORE", - "path": "24" - }, - "898": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "900": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "ADD", - "path": "24" - }, - "901": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "DUP1", - "path": "24" - }, - "902": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "PUSH2", - "path": "24", - "value": "0x6B0" - }, - "905": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "PUSH1", - "path": "24", - "value": "0x21" - }, - "907": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "SWAP2", - "path": "24" - }, - "908": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "CODECOPY", - "path": "24" - }, - "909": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "911": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "ADD", - "path": "24" - }, - "912": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "SWAP2", - "path": "24" - }, - "913": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "POP", - "path": "24" - }, - "914": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "POP", - "path": "24" - }, - "915": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "917": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "MLOAD", - "path": "24" - }, - "918": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "DUP1", - "path": "24" - }, - "919": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "SWAP2", - "path": "24" - }, - "920": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "SUB", - "path": "24" - }, - "921": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "SWAP1", - "path": "24" - }, - "922": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "REVERT", - "path": "24" - }, - "923": { - "fn": "ERC20.decreaseAllowance", - "offset": [1952, 2033], - "op": "JUMPDEST", - "path": "24" - }, - "924": { - "fn": "ERC20.decreaseAllowance", - "offset": [2043, 2108], - "op": "PUSH2", - "path": "24", - "statement": 12, - "value": "0x313" - }, - "927": { - "fn": "ERC20.decreaseAllowance", - "offset": [2052, 2062], - "op": "CALLER", - "path": "24" - }, - "928": { - "fn": "ERC20.decreaseAllowance", - "offset": [2064, 2071], - "op": "DUP6", - "path": "24" - }, - "929": { - "fn": "ERC20.decreaseAllowance", - "offset": [2092, 2107], - "op": "DUP6", - "path": "24" - }, - "930": { - "fn": "ERC20.decreaseAllowance", - "offset": [2073, 2089], - "op": "DUP5", - "path": "24" - }, - "931": { - "fn": "ERC20.decreaseAllowance", - "offset": [2073, 2107], - "op": "SUB", - "path": "24" - }, - "932": { - "fn": "ERC20.decreaseAllowance", - "offset": [2043, 2051], - "op": "PUSH2", - "path": "24", - "value": "0x3E0" - }, - "935": { - "fn": "ERC20.decreaseAllowance", - "jump": "i", - "offset": [2043, 2108], - "op": "JUMP", - "path": "24" - }, - "936": { - "fn": "ERC20.transfer", - "offset": [512, 682], - "op": "JUMPDEST", - "path": "24" - }, - "937": { - "fn": "ERC20.transfer", - "offset": [598, 602], - "op": "PUSH1", - "path": "24", - "value": "0x0" - }, - "939": { - "fn": "ERC20.transfer", - "offset": [614, 654], - "op": "PUSH2", - "path": "24", - "statement": 13, - "value": "0x202" - }, - "942": { - "fn": "ERC20.transfer", - "offset": [624, 634], - "op": "CALLER", - "path": "24" - }, - "943": { - "fn": "ERC20.transfer", - "offset": [636, 645], - "op": "DUP5", - "path": "24" - }, - "944": { - "fn": "ERC20.transfer", - "offset": [647, 653], - "op": "DUP5", - "path": "24" - }, - "945": { - "fn": "ERC20.transfer", - "offset": [614, 623], - "op": "PUSH2", - "path": "24", - "value": "0x4CC" - }, - "948": { - "fn": "ERC20.transfer", - "jump": "i", - "offset": [614, 654], - "op": "JUMP", - "path": "24" - }, - "949": { - "fn": "ERC20.allowance", - "offset": [688, 829], - "op": "JUMPDEST", - "path": "24" - }, - "950": { - "op": "PUSH1", - "value": "0x1" - }, - "952": { - "op": "PUSH1", - "value": "0x1" - }, - "954": { - "op": "PUSH1", - "value": "0xA0" - }, - "956": { - "op": "SHL" - }, - "957": { - "op": "SUB" - }, - "958": { - "fn": "ERC20.allowance", - "offset": [795, 813], - "op": "SWAP2", - "path": "24", - "statement": 14 - }, - "959": { - "fn": "ERC20.allowance", - "offset": [795, 813], - "op": "DUP3", - "path": "24" - }, - "960": { - "fn": "ERC20.allowance", - "offset": [795, 813], - "op": "AND", - "path": "24" - }, - "961": { - "fn": "ERC20.allowance", - "offset": [769, 776], - "op": "PUSH1", - "path": "24", - "value": "0x0" - }, - "963": { - "fn": "ERC20.allowance", - "offset": [795, 813], - "op": "SWAP1", - "path": "24" - }, - "964": { - "fn": "ERC20.allowance", - "offset": [795, 813], - "op": "DUP2", - "path": "24" - }, - "965": { - "fn": "ERC20.allowance", - "offset": [795, 813], - "op": "MSTORE", - "path": "24" - }, - "966": { - "fn": "ERC20.allowance", - "offset": [795, 806], - "op": "PUSH1", - "path": "24", - "value": "0x1" - }, - "968": { - "fn": "ERC20.allowance", - "offset": [795, 813], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "970": { - "fn": "ERC20.allowance", - "offset": [795, 813], - "op": "SWAP1", - "path": "24" - }, - "971": { - "fn": "ERC20.allowance", - "offset": [795, 813], - "op": "DUP2", - "path": "24" - }, - "972": { - "fn": "ERC20.allowance", - "offset": [795, 813], - "op": "MSTORE", - "path": "24" - }, - "973": { - "fn": "ERC20.allowance", - "offset": [795, 813], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "975": { - "fn": "ERC20.allowance", - "offset": [795, 813], - "op": "DUP1", - "path": "24" - }, - "976": { - "fn": "ERC20.allowance", - "offset": [795, 813], - "op": "DUP4", - "path": "24" - }, - "977": { - "fn": "ERC20.allowance", - "offset": [795, 813], - "op": "KECCAK256", - "path": "24" - }, - "978": { - "fn": "ERC20.allowance", - "offset": [795, 822], - "op": "SWAP4", - "path": "24" - }, - "979": { - "fn": "ERC20.allowance", - "offset": [795, 822], - "op": "SWAP1", - "path": "24" - }, - "980": { - "fn": "ERC20.allowance", - "offset": [795, 822], - "op": "SWAP5", - "path": "24" - }, - "981": { - "fn": "ERC20.allowance", - "offset": [795, 822], - "op": "AND", - "path": "24" - }, - "982": { - "fn": "ERC20.allowance", - "offset": [795, 822], - "op": "DUP3", - "path": "24" - }, - "983": { - "fn": "ERC20.allowance", - "offset": [795, 822], - "op": "MSTORE", - "path": "24" - }, - "984": { - "fn": "ERC20.allowance", - "offset": [795, 822], - "op": "SWAP2", - "path": "24" - }, - "985": { - "fn": "ERC20.allowance", - "offset": [795, 822], - "op": "SWAP1", - "path": "24" - }, - "986": { - "fn": "ERC20.allowance", - "offset": [795, 822], - "op": "SWAP2", - "path": "24" - }, - "987": { - "fn": "ERC20.allowance", - "offset": [795, 822], - "op": "MSTORE", - "path": "24" - }, - "988": { - "fn": "ERC20.allowance", - "offset": [795, 822], - "op": "KECCAK256", - "path": "24" - }, - "989": { - "fn": "ERC20.allowance", - "offset": [795, 822], - "op": "SLOAD", - "path": "24" - }, - "990": { - "fn": "ERC20.allowance", - "offset": [795, 822], - "op": "SWAP1", - "path": "24" - }, - "991": { - "fn": "ERC20.allowance", - "jump": "o", - "offset": [688, 829], - "op": "JUMP", - "path": "24" - }, - "992": { - "fn": "ERC20._approve", - "offset": [3661, 4020], - "op": "JUMPDEST", - "path": "24" - }, - "993": { - "op": "PUSH1", - "value": "0x1" - }, - "995": { - "op": "PUSH1", - "value": "0x1" - }, - "997": { - "op": "PUSH1", - "value": "0xA0" - }, - "999": { - "op": "SHL" - }, - "1000": { - "op": "SUB" - }, - "1001": { - "fn": "ERC20._approve", - "offset": [3783, 3802], - "op": "DUP4", - "path": "24", - "statement": 15 - }, - "1002": { - "branch": 29, - "fn": "ERC20._approve", - "offset": [3783, 3802], - "op": "AND", - "path": "24" - }, - "1003": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "PUSH2", - "path": "24", - "value": "0x425" - }, - "1006": { - "branch": 29, - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "JUMPI", - "path": "24" - }, - "1007": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "1009": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "MLOAD", - "path": "24" - }, - "1010": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "1014": { - "op": "PUSH1", - "value": "0xE5" - }, - "1016": { - "op": "SHL" - }, - "1017": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "DUP2", - "path": "24" - }, - "1018": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "MSTORE", - "path": "24" - }, - "1019": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "PUSH1", - "path": "24", - "value": "0x4" - }, - "1021": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "ADD", - "path": "24" - }, - "1022": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "DUP1", - "path": "24" - }, - "1023": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "DUP1", - "path": "24" - }, - "1024": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "1026": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "ADD", - "path": "24" - }, - "1027": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "DUP3", - "path": "24" - }, - "1028": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "DUP2", - "path": "24" - }, - "1029": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "SUB", - "path": "24" - }, - "1030": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "DUP3", - "path": "24" - }, - "1031": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "MSTORE", - "path": "24" - }, - "1032": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "PUSH1", - "path": "24", - "value": "0x24" - }, - "1034": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "DUP2", - "path": "24" - }, - "1035": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "MSTORE", - "path": "24" - }, - "1036": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "1038": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "ADD", - "path": "24" - }, - "1039": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "DUP1", - "path": "24" - }, - "1040": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "PUSH2", - "path": "24", - "value": "0x71C" - }, - "1043": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "PUSH1", - "path": "24", - "value": "0x24" - }, - "1045": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "SWAP2", - "path": "24" - }, - "1046": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "CODECOPY", - "path": "24" - }, - "1047": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "1049": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "ADD", - "path": "24" - }, - "1050": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "SWAP2", - "path": "24" - }, - "1051": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "POP", - "path": "24" - }, - "1052": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "POP", - "path": "24" - }, - "1053": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "1055": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "MLOAD", - "path": "24" - }, - "1056": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "DUP1", - "path": "24" - }, - "1057": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "SWAP2", - "path": "24" - }, - "1058": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "SUB", - "path": "24" - }, - "1059": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "SWAP1", - "path": "24" - }, - "1060": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "REVERT", - "path": "24" - }, - "1061": { - "fn": "ERC20._approve", - "offset": [3775, 3843], - "op": "JUMPDEST", - "path": "24" - }, - "1062": { - "op": "PUSH1", - "value": "0x1" - }, - "1064": { - "op": "PUSH1", - "value": "0x1" - }, - "1066": { - "op": "PUSH1", - "value": "0xA0" - }, - "1068": { - "op": "SHL" - }, - "1069": { - "op": "SUB" - }, - "1070": { - "fn": "ERC20._approve", - "offset": [3861, 3882], - "op": "DUP3", - "path": "24", - "statement": 16 - }, - "1071": { - "branch": 30, - "fn": "ERC20._approve", - "offset": [3861, 3882], - "op": "AND", - "path": "24" - }, - "1072": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "PUSH2", - "path": "24", - "value": "0x46A" - }, - "1075": { - "branch": 30, - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "JUMPI", - "path": "24" - }, - "1076": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "1078": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "MLOAD", - "path": "24" - }, - "1079": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "1083": { - "op": "PUSH1", - "value": "0xE5" - }, - "1085": { - "op": "SHL" - }, - "1086": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "DUP2", - "path": "24" - }, - "1087": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "MSTORE", - "path": "24" - }, - "1088": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "PUSH1", - "path": "24", - "value": "0x4" - }, - "1090": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "ADD", - "path": "24" - }, - "1091": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "DUP1", - "path": "24" - }, - "1092": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "DUP1", - "path": "24" - }, - "1093": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "1095": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "ADD", - "path": "24" - }, - "1096": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "DUP3", - "path": "24" - }, - "1097": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "DUP2", - "path": "24" - }, - "1098": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "SUB", - "path": "24" - }, - "1099": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "DUP3", - "path": "24" - }, - "1100": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "MSTORE", - "path": "24" - }, - "1101": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "PUSH1", - "path": "24", - "value": "0x22" - }, - "1103": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "DUP2", - "path": "24" - }, - "1104": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "MSTORE", - "path": "24" - }, - "1105": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "1107": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "ADD", - "path": "24" - }, - "1108": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "DUP1", - "path": "24" - }, - "1109": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "PUSH2", - "path": "24", - "value": "0x68E" - }, - "1112": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "PUSH1", - "path": "24", - "value": "0x22" - }, - "1114": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "SWAP2", - "path": "24" - }, - "1115": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "CODECOPY", - "path": "24" - }, - "1116": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "1118": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "ADD", - "path": "24" - }, - "1119": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "SWAP2", - "path": "24" - }, - "1120": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "POP", - "path": "24" - }, - "1121": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "POP", - "path": "24" - }, - "1122": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "1124": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "MLOAD", - "path": "24" - }, - "1125": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "DUP1", - "path": "24" - }, - "1126": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "SWAP2", - "path": "24" - }, - "1127": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "SUB", - "path": "24" - }, - "1128": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "SWAP1", - "path": "24" - }, - "1129": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "REVERT", - "path": "24" - }, - "1130": { - "fn": "ERC20._approve", - "offset": [3853, 3921], - "op": "JUMPDEST", - "path": "24" - }, - "1131": { - "op": "PUSH1", - "value": "0x1" - }, - "1133": { - "op": "PUSH1", - "value": "0x1" - }, - "1135": { - "op": "PUSH1", - "value": "0xA0" - }, - "1137": { - "op": "SHL" - }, - "1138": { - "op": "SUB" - }, - "1139": { - "fn": "ERC20._approve", - "offset": [3932, 3950], - "op": "DUP1", - "path": "24", - "statement": 17 - }, - "1140": { - "fn": "ERC20._approve", - "offset": [3932, 3950], - "op": "DUP5", - "path": "24" - }, - "1141": { - "fn": "ERC20._approve", - "offset": [3932, 3950], - "op": "AND", - "path": "24" - }, - "1142": { - "fn": "ERC20._approve", - "offset": [3932, 3950], - "op": "PUSH1", - "path": "24", - "value": "0x0" - }, - "1144": { - "fn": "ERC20._approve", - "offset": [3932, 3950], - "op": "DUP2", - "path": "24" - }, - "1145": { - "fn": "ERC20._approve", - "offset": [3932, 3950], - "op": "DUP2", - "path": "24" - }, - "1146": { - "fn": "ERC20._approve", - "offset": [3932, 3950], - "op": "MSTORE", - "path": "24" - }, - "1147": { - "fn": "ERC20._approve", - "offset": [3932, 3943], - "op": "PUSH1", - "path": "24", - "value": "0x1" - }, - "1149": { - "fn": "ERC20._approve", - "offset": [3932, 3950], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "1151": { - "fn": "ERC20._approve", - "offset": [3932, 3950], - "op": "SWAP1", - "path": "24" - }, - "1152": { - "fn": "ERC20._approve", - "offset": [3932, 3950], - "op": "DUP2", - "path": "24" - }, - "1153": { - "fn": "ERC20._approve", - "offset": [3932, 3950], - "op": "MSTORE", - "path": "24" - }, - "1154": { - "fn": "ERC20._approve", - "offset": [3932, 3950], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "1156": { - "fn": "ERC20._approve", - "offset": [3932, 3950], - "op": "DUP1", - "path": "24" - }, - "1157": { - "fn": "ERC20._approve", - "offset": [3932, 3950], - "op": "DUP4", - "path": "24" - }, - "1158": { - "fn": "ERC20._approve", - "offset": [3932, 3950], - "op": "KECCAK256", - "path": "24" - }, - "1159": { - "fn": "ERC20._approve", - "offset": [3932, 3959], - "op": "SWAP5", - "path": "24" - }, - "1160": { - "fn": "ERC20._approve", - "offset": [3932, 3959], - "op": "DUP8", - "path": "24" - }, - "1161": { - "fn": "ERC20._approve", - "offset": [3932, 3959], - "op": "AND", - "path": "24" - }, - "1162": { - "fn": "ERC20._approve", - "offset": [3932, 3959], - "op": "DUP1", - "path": "24" - }, - "1163": { - "fn": "ERC20._approve", - "offset": [3932, 3959], - "op": "DUP5", - "path": "24" - }, - "1164": { - "fn": "ERC20._approve", - "offset": [3932, 3959], - "op": "MSTORE", - "path": "24" - }, - "1165": { - "fn": "ERC20._approve", - "offset": [3932, 3959], - "op": "SWAP5", - "path": "24" - }, - "1166": { - "fn": "ERC20._approve", - "offset": [3932, 3959], - "op": "DUP3", - "path": "24" - }, - "1167": { - "fn": "ERC20._approve", - "offset": [3932, 3959], - "op": "MSTORE", - "path": "24" - }, - "1168": { - "fn": "ERC20._approve", - "offset": [3932, 3959], - "op": "SWAP2", - "path": "24" - }, - "1169": { - "fn": "ERC20._approve", - "offset": [3932, 3959], - "op": "DUP3", - "path": "24" - }, - "1170": { - "fn": "ERC20._approve", - "offset": [3932, 3959], - "op": "SWAP1", - "path": "24" - }, - "1171": { - "fn": "ERC20._approve", - "offset": [3932, 3959], - "op": "KECCAK256", - "path": "24" - }, - "1172": { - "fn": "ERC20._approve", - "offset": [3932, 3967], - "op": "DUP6", - "path": "24" - }, - "1173": { - "fn": "ERC20._approve", - "offset": [3932, 3967], - "op": "SWAP1", - "path": "24" - }, - "1174": { - "fn": "ERC20._approve", - "offset": [3932, 3967], - "op": "SSTORE", - "path": "24" - }, - "1175": { - "fn": "ERC20._approve", - "offset": [3982, 4013], - "op": "DUP2", - "path": "24", - "statement": 18 - }, - "1176": { - "fn": "ERC20._approve", - "offset": [3982, 4013], - "op": "MLOAD", - "path": "24" - }, - "1177": { - "fn": "ERC20._approve", - "offset": [3982, 4013], - "op": "DUP6", - "path": "24" - }, - "1178": { - "fn": "ERC20._approve", - "offset": [3982, 4013], - "op": "DUP2", - "path": "24" - }, - "1179": { - "fn": "ERC20._approve", - "offset": [3982, 4013], - "op": "MSTORE", - "path": "24" - }, - "1180": { - "fn": "ERC20._approve", - "offset": [3982, 4013], - "op": "SWAP2", - "path": "24" - }, - "1181": { - "fn": "ERC20._approve", - "offset": [3982, 4013], - "op": "MLOAD", - "path": "24" - }, - "1182": { - "fn": "ERC20._approve", - "offset": [3982, 4013], - "op": "PUSH32", - "path": "24", - "value": "0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925" - }, - "1215": { - "fn": "ERC20._approve", - "offset": [3982, 4013], - "op": "SWAP3", - "path": "24" - }, - "1216": { - "fn": "ERC20._approve", - "offset": [3982, 4013], - "op": "DUP2", - "path": "24" - }, - "1217": { - "fn": "ERC20._approve", - "offset": [3982, 4013], - "op": "SWAP1", - "path": "24" - }, - "1218": { - "fn": "ERC20._approve", - "offset": [3982, 4013], - "op": "SUB", - "path": "24" - }, - "1219": { - "fn": "ERC20._approve", - "offset": [3982, 4013], - "op": "SWAP1", - "path": "24" - }, - "1220": { - "fn": "ERC20._approve", - "offset": [3982, 4013], - "op": "SWAP2", - "path": "24" - }, - "1221": { - "fn": "ERC20._approve", - "offset": [3982, 4013], - "op": "ADD", - "path": "24" - }, - "1222": { - "fn": "ERC20._approve", - "offset": [3982, 4013], - "op": "SWAP1", - "path": "24" - }, - "1223": { - "fn": "ERC20._approve", - "offset": [3982, 4013], - "op": "LOG3", - "path": "24" - }, - "1224": { - "fn": "ERC20._approve", - "offset": [3661, 4020], - "op": "POP", - "path": "24" - }, - "1225": { - "fn": "ERC20._approve", - "offset": [3661, 4020], - "op": "POP", - "path": "24" - }, - "1226": { - "fn": "ERC20._approve", - "offset": [3661, 4020], - "op": "POP", - "path": "24" - }, - "1227": { - "fn": "ERC20._approve", - "jump": "o", - "offset": [3661, 4020], - "op": "JUMP", - "path": "24" - }, - "1228": { - "fn": "ERC20._transfer", - "offset": [2142, 2861], - "op": "JUMPDEST", - "path": "24" - }, - "1229": { - "op": "PUSH1", - "value": "0x1" - }, - "1231": { - "op": "PUSH1", - "value": "0x1" - }, - "1233": { - "op": "PUSH1", - "value": "0xA0" - }, - "1235": { - "op": "SHL" - }, - "1236": { - "op": "SUB" - }, - "1237": { - "fn": "ERC20._transfer", - "offset": [2269, 2289], - "op": "DUP4", - "path": "24", - "statement": 19 - }, - "1238": { - "branch": 31, - "fn": "ERC20._transfer", - "offset": [2269, 2289], - "op": "AND", - "path": "24" - }, - "1239": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "PUSH2", - "path": "24", - "value": "0x511" - }, - "1242": { - "branch": 31, - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "JUMPI", - "path": "24" - }, - "1243": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "1245": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "MLOAD", - "path": "24" - }, - "1246": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "1250": { - "op": "PUSH1", - "value": "0xE5" - }, - "1252": { - "op": "SHL" - }, - "1253": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "DUP2", - "path": "24" - }, - "1254": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "MSTORE", - "path": "24" - }, - "1255": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "PUSH1", - "path": "24", - "value": "0x4" - }, - "1257": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "ADD", - "path": "24" - }, - "1258": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "DUP1", - "path": "24" - }, - "1259": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "DUP1", - "path": "24" - }, - "1260": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "1262": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "ADD", - "path": "24" - }, - "1263": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "DUP3", - "path": "24" - }, - "1264": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "DUP2", - "path": "24" - }, - "1265": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "SUB", - "path": "24" - }, - "1266": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "DUP3", - "path": "24" - }, - "1267": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "MSTORE", - "path": "24" - }, - "1268": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "PUSH1", - "path": "24", - "value": "0x25" - }, - "1270": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "DUP2", - "path": "24" - }, - "1271": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "MSTORE", - "path": "24" - }, - "1272": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "1274": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "ADD", - "path": "24" - }, - "1275": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "DUP1", - "path": "24" - }, - "1276": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "PUSH2", - "path": "24", - "value": "0x6F7" - }, - "1279": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "PUSH1", - "path": "24", - "value": "0x25" - }, - "1281": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "SWAP2", - "path": "24" - }, - "1282": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "CODECOPY", - "path": "24" - }, - "1283": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "1285": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "ADD", - "path": "24" - }, - "1286": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "SWAP2", - "path": "24" - }, - "1287": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "POP", - "path": "24" - }, - "1288": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "POP", - "path": "24" - }, - "1289": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "1291": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "MLOAD", - "path": "24" - }, - "1292": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "DUP1", - "path": "24" - }, - "1293": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "SWAP2", - "path": "24" - }, - "1294": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "SUB", - "path": "24" - }, - "1295": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "SWAP1", - "path": "24" - }, - "1296": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "REVERT", - "path": "24" - }, - "1297": { - "fn": "ERC20._transfer", - "offset": [2261, 2331], - "op": "JUMPDEST", - "path": "24" - }, - "1298": { - "op": "PUSH1", - "value": "0x1" - }, - "1300": { - "op": "PUSH1", - "value": "0x1" - }, - "1302": { - "op": "PUSH1", - "value": "0xA0" - }, - "1304": { - "op": "SHL" - }, - "1305": { - "op": "SUB" - }, - "1306": { - "fn": "ERC20._transfer", - "offset": [2349, 2372], - "op": "DUP3", - "path": "24", - "statement": 20 - }, - "1307": { - "branch": 32, - "fn": "ERC20._transfer", - "offset": [2349, 2372], - "op": "AND", - "path": "24" - }, - "1308": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "PUSH2", - "path": "24", - "value": "0x556" - }, - "1311": { - "branch": 32, - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "JUMPI", - "path": "24" - }, - "1312": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "1314": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "MLOAD", - "path": "24" - }, - "1315": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "1319": { - "op": "PUSH1", - "value": "0xE5" - }, - "1321": { - "op": "SHL" - }, - "1322": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "DUP2", - "path": "24" - }, - "1323": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "MSTORE", - "path": "24" - }, - "1324": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "PUSH1", - "path": "24", - "value": "0x4" - }, - "1326": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "ADD", - "path": "24" - }, - "1327": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "DUP1", - "path": "24" - }, - "1328": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "DUP1", - "path": "24" - }, - "1329": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "1331": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "ADD", - "path": "24" - }, - "1332": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "DUP3", - "path": "24" - }, - "1333": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "DUP2", - "path": "24" - }, - "1334": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "SUB", - "path": "24" - }, - "1335": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "DUP3", - "path": "24" - }, - "1336": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "MSTORE", - "path": "24" - }, - "1337": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "PUSH1", - "path": "24", - "value": "0x23" - }, - "1339": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "DUP2", - "path": "24" - }, - "1340": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "MSTORE", - "path": "24" - }, - "1341": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "1343": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "ADD", - "path": "24" - }, - "1344": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "DUP1", - "path": "24" - }, - "1345": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "PUSH2", - "path": "24", - "value": "0x66B" - }, - "1348": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "PUSH1", - "path": "24", - "value": "0x23" - }, - "1350": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "SWAP2", - "path": "24" - }, - "1351": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "CODECOPY", - "path": "24" - }, - "1352": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "1354": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "ADD", - "path": "24" - }, - "1355": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "SWAP2", - "path": "24" - }, - "1356": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "POP", - "path": "24" - }, - "1357": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "POP", - "path": "24" - }, - "1358": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "1360": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "MLOAD", - "path": "24" - }, - "1361": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "DUP1", - "path": "24" - }, - "1362": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "SWAP2", - "path": "24" - }, - "1363": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "SUB", - "path": "24" - }, - "1364": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "SWAP1", - "path": "24" - }, - "1365": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "REVERT", - "path": "24" - }, - "1366": { - "fn": "ERC20._transfer", - "offset": [2341, 2412], - "op": "JUMPDEST", - "path": "24" - }, - "1367": { - "op": "PUSH1", - "value": "0x1" - }, - "1369": { - "op": "PUSH1", - "value": "0x1" - }, - "1371": { - "op": "PUSH1", - "value": "0xA0" - }, - "1373": { - "op": "SHL" - }, - "1374": { - "op": "SUB" - }, - "1375": { - "fn": "ERC20._transfer", - "offset": [2447, 2464], - "op": "DUP1", - "path": "24" - }, - "1376": { - "fn": "ERC20._transfer", - "offset": [2447, 2464], - "op": "DUP5", - "path": "24" - }, - "1377": { - "fn": "ERC20._transfer", - "offset": [2447, 2464], - "op": "AND", - "path": "24" - }, - "1378": { - "fn": "ERC20._transfer", - "offset": [2422, 2444], - "op": "PUSH1", - "path": "24", - "value": "0x0" - }, - "1380": { - "fn": "ERC20._transfer", - "offset": [2447, 2464], - "op": "SWAP1", - "path": "24" - }, - "1381": { - "fn": "ERC20._transfer", - "offset": [2447, 2464], - "op": "DUP2", - "path": "24" - }, - "1382": { - "fn": "ERC20._transfer", - "offset": [2447, 2464], - "op": "MSTORE", - "path": "24" - }, - "1383": { - "fn": "ERC20._transfer", - "offset": [2447, 2464], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "1385": { - "fn": "ERC20._transfer", - "offset": [2447, 2464], - "op": "DUP2", - "path": "24" - }, - "1386": { - "fn": "ERC20._transfer", - "offset": [2447, 2464], - "op": "SWAP1", - "path": "24" - }, - "1387": { - "fn": "ERC20._transfer", - "offset": [2447, 2464], - "op": "MSTORE", - "path": "24" - }, - "1388": { - "fn": "ERC20._transfer", - "offset": [2447, 2464], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "1390": { - "fn": "ERC20._transfer", - "offset": [2447, 2464], - "op": "DUP1", - "path": "24" - }, - "1391": { - "fn": "ERC20._transfer", - "offset": [2447, 2464], - "op": "DUP3", - "path": "24" - }, - "1392": { - "fn": "ERC20._transfer", - "offset": [2447, 2464], - "op": "KECCAK256", - "path": "24" - }, - "1393": { - "fn": "ERC20._transfer", - "offset": [2447, 2464], - "op": "SLOAD", - "path": "24" - }, - "1394": { - "fn": "ERC20._transfer", - "offset": [2502, 2522], - "op": "SWAP3", - "path": "24" - }, - "1395": { - "fn": "ERC20._transfer", - "offset": [2502, 2522], - "op": "DUP6", - "path": "24" - }, - "1396": { - "fn": "ERC20._transfer", - "offset": [2502, 2522], - "op": "AND", - "path": "24" - }, - "1397": { - "fn": "ERC20._transfer", - "offset": [2502, 2522], - "op": "DUP3", - "path": "24" - }, - "1398": { - "fn": "ERC20._transfer", - "offset": [2502, 2522], - "op": "MSTORE", - "path": "24" - }, - "1399": { - "fn": "ERC20._transfer", - "offset": [2502, 2522], - "op": "SWAP1", - "path": "24" - }, - "1400": { - "fn": "ERC20._transfer", - "offset": [2502, 2522], - "op": "KECCAK256", - "path": "24" - }, - "1401": { - "fn": "ERC20._transfer", - "offset": [2502, 2522], - "op": "SLOAD", - "path": "24" - }, - "1402": { - "fn": "ERC20._transfer", - "offset": [2540, 2564], - "op": "DUP3", - "path": "24", - "statement": 21 - }, - "1403": { - "fn": "ERC20._transfer", - "offset": [2540, 2564], - "op": "DUP3", - "path": "24" - }, - "1404": { - "fn": "ERC20._transfer", - "offset": [2540, 2564], - "op": "LT", - "path": "24" - }, - "1405": { - "branch": 33, - "fn": "ERC20._transfer", - "offset": [2540, 2564], - "op": "ISZERO", - "path": "24" - }, - "1406": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "PUSH2", - "path": "24", - "value": "0x5B8" - }, - "1409": { - "branch": 33, - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "JUMPI", - "path": "24" - }, - "1410": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "1412": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "MLOAD", - "path": "24" - }, - "1413": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "1417": { - "op": "PUSH1", - "value": "0xE5" - }, - "1419": { - "op": "SHL" - }, - "1420": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "DUP2", - "path": "24" - }, - "1421": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "MSTORE", - "path": "24" - }, - "1422": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "PUSH1", - "path": "24", - "value": "0x4" - }, - "1424": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "ADD", - "path": "24" - }, - "1425": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "DUP1", - "path": "24" - }, - "1426": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "DUP1", - "path": "24" - }, - "1427": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "1429": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "ADD", - "path": "24" - }, - "1430": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "DUP3", - "path": "24" - }, - "1431": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "DUP2", - "path": "24" - }, - "1432": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "SUB", - "path": "24" - }, - "1433": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "DUP3", - "path": "24" - }, - "1434": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "MSTORE", - "path": "24" - }, - "1435": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "PUSH1", - "path": "24", - "value": "0x26" - }, - "1437": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "DUP2", - "path": "24" - }, - "1438": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "MSTORE", - "path": "24" - }, - "1439": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "1441": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "ADD", - "path": "24" - }, - "1442": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "DUP1", - "path": "24" - }, - "1443": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "PUSH2", - "path": "24", - "value": "0x6D1" - }, - "1446": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "PUSH1", - "path": "24", - "value": "0x26" - }, - "1448": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "SWAP2", - "path": "24" - }, - "1449": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "CODECOPY", - "path": "24" - }, - "1450": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "1452": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "ADD", - "path": "24" - }, - "1453": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "SWAP2", - "path": "24" - }, - "1454": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "POP", - "path": "24" - }, - "1455": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "POP", - "path": "24" - }, - "1456": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "1458": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "MLOAD", - "path": "24" - }, - "1459": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "DUP1", - "path": "24" - }, - "1460": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "SWAP2", - "path": "24" - }, - "1461": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "SUB", - "path": "24" - }, - "1462": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "SWAP1", - "path": "24" - }, - "1463": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "REVERT", - "path": "24" - }, - "1464": { - "fn": "ERC20._transfer", - "offset": [2532, 2607], - "op": "JUMPDEST", - "path": "24" - }, - "1465": { - "fn": "ERC20._transfer", - "offset": [2655, 2672], - "op": "DUP1", - "path": "24", - "statement": 22 - }, - "1466": { - "fn": "ERC20._transfer", - "offset": [2645, 2651], - "op": "DUP4", - "path": "24" - }, - "1467": { - "fn": "ERC20._transfer", - "offset": [2625, 2642], - "op": "DUP3", - "path": "24" - }, - "1468": { - "fn": "ERC20._transfer", - "offset": [2625, 2651], - "op": "ADD", - "path": "24" - }, - "1469": { - "fn": "ERC20._transfer", - "offset": [2625, 2672], - "op": "LT", - "path": "24" - }, - "1470": { - "branch": 34, - "fn": "ERC20._transfer", - "offset": [2625, 2672], - "op": "ISZERO", - "path": "24" - }, - "1471": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "PUSH2", - "path": "24", - "value": "0x601" - }, - "1474": { - "branch": 34, - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "JUMPI", - "path": "24" - }, - "1475": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "1477": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "DUP1", - "path": "24" - }, - "1478": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "MLOAD", - "path": "24" - }, - "1479": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "1483": { - "op": "PUSH1", - "value": "0xE5" - }, - "1485": { - "op": "SHL" - }, - "1486": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "DUP2", - "path": "24" - }, - "1487": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "MSTORE", - "path": "24" - }, - "1488": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "1490": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "PUSH1", - "path": "24", - "value": "0x4" - }, - "1492": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "DUP3", - "path": "24" - }, - "1493": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "ADD", - "path": "24" - }, - "1494": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "MSTORE", - "path": "24" - }, - "1495": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "PUSH1", - "path": "24", - "value": "0xF" - }, - "1497": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "PUSH1", - "path": "24", - "value": "0x24" - }, - "1499": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "DUP3", - "path": "24" - }, - "1500": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "ADD", - "path": "24" - }, - "1501": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "MSTORE", - "path": "24" - }, - "1502": { - "op": "PUSH15", - "value": "0x45524332303A204F766572666C6F77" - }, - "1518": { - "op": "PUSH1", - "value": "0x88" - }, - "1520": { - "op": "SHL" - }, - "1521": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "PUSH1", - "path": "24", - "value": "0x44" - }, - "1523": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "DUP3", - "path": "24" - }, - "1524": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "ADD", - "path": "24" - }, - "1525": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "MSTORE", - "path": "24" - }, - "1526": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "SWAP1", - "path": "24" - }, - "1527": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "MLOAD", - "path": "24" - }, - "1528": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "SWAP1", - "path": "24" - }, - "1529": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "DUP2", - "path": "24" - }, - "1530": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "SWAP1", - "path": "24" - }, - "1531": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "SUB", - "path": "24" - }, - "1532": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "PUSH1", - "path": "24", - "value": "0x64" - }, - "1534": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "ADD", - "path": "24" - }, - "1535": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "SWAP1", - "path": "24" - }, - "1536": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "REVERT", - "path": "24" - }, - "1537": { - "fn": "ERC20._transfer", - "offset": [2617, 2692], - "op": "JUMPDEST", - "path": "24" - }, - "1538": { - "op": "PUSH1", - "value": "0x1" - }, - "1540": { - "op": "PUSH1", - "value": "0x1" - }, - "1542": { - "op": "PUSH1", - "value": "0xA0" - }, - "1544": { - "op": "SHL" - }, - "1545": { - "op": "SUB" - }, - "1546": { - "fn": "ERC20._transfer", - "offset": [2702, 2719], - "op": "DUP1", - "path": "24", - "statement": 23 - }, - "1547": { - "fn": "ERC20._transfer", - "offset": [2702, 2719], - "op": "DUP7", - "path": "24" - }, - "1548": { - "fn": "ERC20._transfer", - "offset": [2702, 2719], - "op": "AND", - "path": "24" - }, - "1549": { - "fn": "ERC20._transfer", - "offset": [2702, 2711], - "op": "PUSH1", - "path": "24", - "value": "0x0" - }, - "1551": { - "fn": "ERC20._transfer", - "offset": [2702, 2719], - "op": "DUP2", - "path": "24" - }, - "1552": { - "fn": "ERC20._transfer", - "offset": [2702, 2719], - "op": "DUP2", - "path": "24" - }, - "1553": { - "fn": "ERC20._transfer", - "offset": [2702, 2719], - "op": "MSTORE", - "path": "24" - }, - "1554": { - "fn": "ERC20._transfer", - "offset": [2702, 2719], - "op": "PUSH1", - "path": "24", - "value": "0x20" - }, - "1556": { - "fn": "ERC20._transfer", - "offset": [2702, 2719], - "op": "DUP2", - "path": "24" - }, - "1557": { - "fn": "ERC20._transfer", - "offset": [2702, 2719], - "op": "DUP2", - "path": "24" - }, - "1558": { - "fn": "ERC20._transfer", - "offset": [2702, 2719], - "op": "MSTORE", - "path": "24" - }, - "1559": { - "fn": "ERC20._transfer", - "offset": [2702, 2719], - "op": "PUSH1", - "path": "24", - "value": "0x40" - }, - "1561": { - "fn": "ERC20._transfer", - "offset": [2702, 2719], - "op": "DUP1", - "path": "24" - }, - "1562": { - "fn": "ERC20._transfer", - "offset": [2702, 2719], - "op": "DUP4", - "path": "24" - }, - "1563": { - "fn": "ERC20._transfer", - "offset": [2702, 2719], - "op": "KECCAK256", - "path": "24" - }, - "1564": { - "fn": "ERC20._transfer", - "offset": [2722, 2745], - "op": "DUP9", - "path": "24" - }, - "1565": { - "fn": "ERC20._transfer", - "offset": [2722, 2745], - "op": "DUP9", - "path": "24" - }, - "1566": { - "fn": "ERC20._transfer", - "offset": [2722, 2745], - "op": "SUB", - "path": "24" - }, - "1567": { - "fn": "ERC20._transfer", - "offset": [2702, 2745], - "op": "SWAP1", - "path": "24" - }, - "1568": { - "fn": "ERC20._transfer", - "offset": [2702, 2745], - "op": "SSTORE", - "path": "24" - }, - "1569": { - "fn": "ERC20._transfer", - "offset": [2755, 2775], - "op": "SWAP4", - "path": "24", - "statement": 24 - }, - "1570": { - "fn": "ERC20._transfer", - "offset": [2755, 2775], - "op": "DUP9", - "path": "24" - }, - "1571": { - "fn": "ERC20._transfer", - "offset": [2755, 2775], - "op": "AND", - "path": "24" - }, - "1572": { - "fn": "ERC20._transfer", - "offset": [2755, 2775], - "op": "DUP1", - "path": "24" - }, - "1573": { - "fn": "ERC20._transfer", - "offset": [2755, 2775], - "op": "DUP4", - "path": "24" - }, - "1574": { - "fn": "ERC20._transfer", - "offset": [2755, 2775], - "op": "MSTORE", - "path": "24" - }, - "1575": { - "fn": "ERC20._transfer", - "offset": [2755, 2775], - "op": "SWAP2", - "path": "24" - }, - "1576": { - "fn": "ERC20._transfer", - "offset": [2755, 2775], - "op": "DUP5", - "path": "24" - }, - "1577": { - "fn": "ERC20._transfer", - "offset": [2755, 2775], - "op": "SWAP1", - "path": "24" - }, - "1578": { - "fn": "ERC20._transfer", - "offset": [2755, 2775], - "op": "KECCAK256", - "path": "24" - }, - "1579": { - "fn": "ERC20._transfer", - "offset": [2778, 2804], - "op": "DUP6", - "path": "24" - }, - "1580": { - "fn": "ERC20._transfer", - "offset": [2778, 2804], - "op": "DUP9", - "path": "24" - }, - "1581": { - "fn": "ERC20._transfer", - "offset": [2778, 2804], - "op": "ADD", - "path": "24" - }, - "1582": { - "fn": "ERC20._transfer", - "offset": [2755, 2804], - "op": "SWAP1", - "path": "24" - }, - "1583": { - "fn": "ERC20._transfer", - "offset": [2755, 2804], - "op": "SSTORE", - "path": "24" - }, - "1584": { - "fn": "ERC20._transfer", - "offset": [2819, 2854], - "op": "DUP4", - "path": "24", - "statement": 25 - }, - "1585": { - "fn": "ERC20._transfer", - "offset": [2819, 2854], - "op": "MLOAD", - "path": "24" - }, - "1586": { - "fn": "ERC20._transfer", - "offset": [2819, 2854], - "op": "DUP8", - "path": "24" - }, - "1587": { - "fn": "ERC20._transfer", - "offset": [2819, 2854], - "op": "DUP2", - "path": "24" - }, - "1588": { - "fn": "ERC20._transfer", - "offset": [2819, 2854], - "op": "MSTORE", - "path": "24" - }, - "1589": { - "fn": "ERC20._transfer", - "offset": [2819, 2854], - "op": "SWAP4", - "path": "24" - }, - "1590": { - "fn": "ERC20._transfer", - "offset": [2819, 2854], - "op": "MLOAD", - "path": "24" - }, - "1591": { - "fn": "ERC20._transfer", - "offset": [2755, 2775], - "op": "SWAP2", - "path": "24" - }, - "1592": { - "fn": "ERC20._transfer", - "offset": [2755, 2775], - "op": "SWAP4", - "path": "24" - }, - "1593": { - "fn": "ERC20._transfer", - "offset": [2819, 2854], - "op": "PUSH32", - "path": "24", - "value": "0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF" - }, - "1626": { - "fn": "ERC20._transfer", - "offset": [2819, 2854], - "op": "SWAP3", - "path": "24" - }, - "1627": { - "fn": "ERC20._transfer", - "offset": [2819, 2854], - "op": "SWAP1", - "path": "24" - }, - "1628": { - "fn": "ERC20._transfer", - "offset": [2819, 2854], - "op": "DUP2", - "path": "24" - }, - "1629": { - "fn": "ERC20._transfer", - "offset": [2819, 2854], - "op": "SWAP1", - "path": "24" - }, - "1630": { - "fn": "ERC20._transfer", - "offset": [2819, 2854], - "op": "SUB", - "path": "24" - }, - "1631": { - "fn": "ERC20._transfer", - "offset": [2819, 2854], - "op": "SWAP1", - "path": "24" - }, - "1632": { - "fn": "ERC20._transfer", - "offset": [2819, 2854], - "op": "SWAP2", - "path": "24" - }, - "1633": { - "fn": "ERC20._transfer", - "offset": [2819, 2854], - "op": "ADD", - "path": "24" - }, - "1634": { - "fn": "ERC20._transfer", - "offset": [2819, 2854], - "op": "SWAP1", - "path": "24" - }, - "1635": { - "fn": "ERC20._transfer", - "offset": [2819, 2854], - "op": "LOG3", - "path": "24" - }, - "1636": { - "fn": "ERC20._transfer", - "offset": [2142, 2861], - "op": "POP", - "path": "24" - }, - "1637": { - "fn": "ERC20._transfer", - "offset": [2142, 2861], - "op": "POP", - "path": "24" - }, - "1638": { - "fn": "ERC20._transfer", - "offset": [2142, 2861], - "op": "POP", - "path": "24" - }, - "1639": { - "fn": "ERC20._transfer", - "offset": [2142, 2861], - "op": "POP", - "path": "24" - }, - "1640": { - "fn": "ERC20._transfer", - "offset": [2142, 2861], - "op": "POP", - "path": "24" - }, - "1641": { - "fn": "ERC20._transfer", - "jump": "o", - "offset": [2142, 2861], - "op": "JUMP", - "path": "24" - } - }, - "sha1": "be5ac30d9240f886669c060219687b44fa2b39b6", - "source": "// SPDX-License-Identifier: Apache-2.0.\npragma solidity ^0.6.12;\n\nimport \"./IERC20.sol\";\n\ncontract ERC20 is IERC20 {\n mapping(address => uint256) internal _balances;\n\n mapping(address => mapping(address => uint256)) internal _allowances;\n\n uint256 internal _totalSupply;\n\n function totalSupply() public view override returns (uint256) {\n return _totalSupply;\n }\n\n function balanceOf(address account) public view override returns (uint256) {\n return _balances[account];\n }\n\n function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\n _transfer(msg.sender, recipient, amount);\n return true;\n }\n\n function allowance(address owner, address spender) public view override returns (uint256) {\n return _allowances[owner][spender];\n }\n\n function approve(address spender, uint256 value) public override returns (bool) {\n _approve(msg.sender, spender, value);\n return true;\n }\n\n function transferFrom(\n address sender,\n address recipient,\n uint256 amount\n ) public virtual override returns (bool) {\n _transfer(sender, recipient, amount);\n uint256 sender_allowance = _allowances[sender][msg.sender];\n require(sender_allowance >= amount, \"ERC20: transfer exceeds allowance\");\n _approve(sender, msg.sender, sender_allowance - amount);\n return true;\n }\n\n function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {\n uint256 spender_allowance = _allowances[msg.sender][spender];\n require(spender_allowance + addedValue >= spender_allowance, \"ERC20: Overflow\");\n _approve(msg.sender, spender, spender_allowance + addedValue);\n return true;\n }\n\n function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {\n uint256 sender_allowance = _allowances[msg.sender][spender];\n require(sender_allowance >= subtractedValue, \"ERC20: transfer exceeds allowance\");\n _approve(msg.sender, spender, sender_allowance - subtractedValue);\n return true;\n }\n\n function _transfer(\n address sender,\n address recipient,\n uint256 amount\n ) internal {\n require(sender != address(0), \"ERC20: transfer from the zero address\");\n require(recipient != address(0), \"ERC20: transfer to the zero address\");\n uint256 sender_balance = _balances[sender];\n uint256 recipient_balance = _balances[recipient];\n require(sender_balance >= amount, \"ERC20: transfer amount exceeds balance\");\n require(recipient_balance + amount >= recipient_balance, \"ERC20: Overflow\");\n _balances[sender] = sender_balance - amount;\n _balances[recipient] = recipient_balance + amount;\n emit Transfer(sender, recipient, amount);\n }\n\n function _mint(address account, uint256 amount) internal {\n require(account != address(0), \"ERC20: mint to the zero address\");\n uint256 _total = _totalSupply;\n require(_total + amount >= _total, \"ERC20: Overflow\");\n _totalSupply = _total + amount;\n _balances[account] += amount;\n emit Transfer(address(0), account, amount);\n }\n\n function _burn(address account, uint256 value) internal {\n require(account != address(0), \"ERC20: burn from the zero address\");\n uint256 current_balance = _balances[account];\n require(current_balance >= value, \"ERC20: burn amount exceeds balance\");\n _balances[account] = current_balance - value;\n _totalSupply -= value;\n emit Transfer(account, address(0), value);\n }\n\n function _approve(\n address owner,\n address spender,\n uint256 value\n ) internal {\n require(owner != address(0), \"ERC20: approve from the zero address\");\n require(spender != address(0), \"ERC20: approve to the zero address\");\n\n _allowances[owner][spender] = value;\n emit Approval(owner, spender, value);\n }\n\n function _burnFrom(address account, uint256 amount) internal {\n _burn(account, amount);\n uint256 current_allowance = _allowances[account][msg.sender];\n require(current_allowance >= amount, \"ERC20: burn amount exceeds allowance\");\n _approve(account, msg.sender, current_allowance - amount);\n }\n}\n", - "sourceMap": "90:4261:24:-:0;;;;;;;;;;;;;;;;;;;", - "sourcePath": "contracts/starkware/contracts/tokens/ERC20/ERC20.sol", - "type": "contract" -} diff --git a/src/contracts/ERC20/ERC20_STARKNET.json b/src/contracts/ERC20/ERC20_STARKNET.json deleted file mode 100644 index 101330e9..00000000 --- a/src/contracts/ERC20/ERC20_STARKNET.json +++ /dev/null @@ -1,226 +0,0 @@ -{ - "abi": [ - { - "members": [ - { - "name": "low", - "offset": 0, - "type": "felt" - }, - { - "name": "high", - "offset": 1, - "type": "felt" - } - ], - "name": "Uint256", - "size": 2, - "type": "struct" - }, - { - "inputs": [ - { - "name": "governance_account_address", - "type": "felt" - } - ], - "name": "constructor", - "outputs": [], - "type": "constructor" - }, - { - "inputs": [], - "name": "governance_address", - "outputs": [ - { - "name": "res", - "type": "felt" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "total_supply", - "outputs": [ - { - "name": "res", - "type": "Uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "name": "account", - "type": "felt" - } - ], - "name": "balance_of", - "outputs": [ - { - "name": "balance", - "type": "Uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "name": "owner", - "type": "felt" - }, - { - "name": "spender", - "type": "felt" - } - ], - "name": "allowance", - "outputs": [ - { - "name": "allowance", - "type": "Uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "permitted_minter", - "outputs": [ - { - "name": "res", - "type": "felt" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "name": "minter_address", - "type": "felt" - } - ], - "name": "set_permitted_minter", - "outputs": [], - "type": "function" - }, - { - "inputs": [ - { - "name": "account", - "type": "felt" - }, - { - "name": "amount", - "type": "Uint256" - } - ], - "name": "permissioned_mint", - "outputs": [], - "type": "function" - }, - { - "inputs": [ - { - "name": "account", - "type": "felt" - }, - { - "name": "amount", - "type": "Uint256" - } - ], - "name": "permissioned_burn", - "outputs": [], - "type": "function" - }, - { - "inputs": [ - { - "name": "recipient", - "type": "felt" - }, - { - "name": "amount", - "type": "Uint256" - } - ], - "name": "transfer", - "outputs": [], - "type": "function" - }, - { - "inputs": [ - { - "name": "spender", - "type": "felt" - }, - { - "name": "amount", - "type": "Uint256" - } - ], - "name": "approve", - "outputs": [], - "type": "function" - }, - { - "inputs": [ - { - "name": "sender", - "type": "felt" - }, - { - "name": "recipient", - "type": "felt" - }, - { - "name": "amount", - "type": "Uint256" - } - ], - "name": "transfer_from", - "outputs": [], - "type": "function" - }, - { - "inputs": [ - { - "name": "spender", - "type": "felt" - }, - { - "name": "added_value", - "type": "Uint256" - } - ], - "name": "increase_allowance", - "outputs": [], - "type": "function" - }, - { - "inputs": [ - { - "name": "spender", - "type": "felt" - }, - { - "name": "subtracted_value", - "type": "Uint256" - } - ], - "name": "decrease_allowance", - "outputs": [], - "type": "function" - } - ] -} diff --git a/src/contracts/StarknetERC20Bridge/StarknetERC20Bridge.js b/src/contracts/StarknetERC20Bridge/StarknetERC20Bridge.js deleted file mode 100644 index 4712d206..00000000 --- a/src/contracts/StarknetERC20Bridge/StarknetERC20Bridge.js +++ /dev/null @@ -1,6 +0,0 @@ -import {web3} from '../../web3'; -import {abi} from './StarknetERC20Bridge.json'; - -const address = ''; - -export const starkNetERC20Bridge = new web3.eth.Contract(abi, address); diff --git a/src/contracts/StarknetERC20Bridge/StarknetERC20Bridge.json b/src/contracts/StarknetERC20Bridge/StarknetERC20Bridge.json deleted file mode 100644 index 0471cdd9..00000000 --- a/src/contracts/StarknetERC20Bridge/StarknetERC20Bridge.json +++ /dev/null @@ -1,31587 +0,0 @@ -{ - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - } - ], - "name": "LogDeposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "acceptedGovernor", - "type": "address" - } - ], - "name": "LogNewGovernorAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "nominatedGovernor", - "type": "address" - } - ], - "name": "LogNominatedGovernor", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "LogNominationCancelled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "removedGovernor", - "type": "address" - } - ], - "name": "LogRemovedGovernor", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "LogSetL2TokenContract", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "LogSetMaxDeposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "LogSetMaxTotalBalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "LogWithdrawal", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - } - ], - "name": "deposit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "isFrozen", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "l2TokenContract_", - "type": "uint256" - } - ], - "name": "setL2TokenContract", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "maxDeposit_", - "type": "uint256" - } - ], - "name": "setMaxDeposit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "maxTotalBalance_", - "type": "uint256" - } - ], - "name": "setMaxTotalBalance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "starknetAcceptGovernance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "starknetCancelNomination", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "testGovernor", - "type": "address" - } - ], - "name": "starknetIsGovernor", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newGovernor", - "type": "address" - } - ], - "name": "starknetNominateNewGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "governorForRemoval", - "type": "address" - } - ], - "name": "starknetRemoveGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "recipient", - "type": "address" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "allSourcePaths": { - "0": "contracts/common-contracts/src/libraries/NamedStorage.sol", - "1": "contracts/scalable-dex/contracts/src/components/Governance.sol", - "10": "contracts/scalable-dex/contracts/src/interfaces/ProxySupport.sol", - "11": "contracts/scalable-dex/contracts/src/libraries/Common.sol", - "16": "contracts/starkware/cairo/eth/CairoConstants.sol", - "25": "contracts/starkware/contracts/tokens/ERC20/IERC20.sol", - "26": "contracts/starkware/starknet/apps/token/solidity/StarknetERC20Bridge.sol", - "28": "contracts/starkware/starknet/apps/token/solidity/StarknetTokenBridge.sol", - "29": "contracts/starkware/starknet/apps/token/solidity/StarknetTokenStorage.sol", - "30": "contracts/starkware/starknet/apps/token/solidity/Transfers.sol", - "31": "contracts/starkware/starknet/eth/IStarknetMessaging.sol", - "34": "contracts/starkware/starknet/eth/StarknetGovernance.sol", - "5": "contracts/scalable-dex/contracts/src/interfaces/BlockDirectCall.sol", - "6": "contracts/scalable-dex/contracts/src/interfaces/ContractInitializer.sol", - "8": "contracts/scalable-dex/contracts/src/interfaces/MGovernance.sol" - }, - "ast": { - "absolutePath": "contracts/starkware/starknet/apps/token/solidity/StarknetERC20Bridge.sol", - "exportedSymbols": { - "StarknetERC20Bridge": [2769] - }, - "id": 2770, - "license": "Apache-2.0.", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 2697, - "literals": ["solidity", "^", "0.6", ".12"], - "nodeType": "PragmaDirective", - "src": "40:24:26" - }, - { - "absolutePath": "contracts/common-contracts/src/libraries/NamedStorage.sol", - "file": "contracts/common-contracts/src/libraries/NamedStorage.sol", - "id": 2698, - "nodeType": "ImportDirective", - "scope": 2770, - "sourceUnit": 218, - "src": "66:67:26", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "contracts/starkware/contracts/tokens/ERC20/IERC20.sol", - "file": "contracts/starkware/contracts/tokens/ERC20/IERC20.sol", - "id": 2699, - "nodeType": "ImportDirective", - "scope": 2770, - "sourceUnit": 2696, - "src": "134:63:26", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "contracts/starkware/starknet/apps/token/solidity/StarknetTokenBridge.sol", - "file": "contracts/starkware/starknet/apps/token/solidity/StarknetTokenBridge.sol", - "id": 2700, - "nodeType": "ImportDirective", - "scope": 2770, - "sourceUnit": 3211, - "src": "198:82:26", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "contracts/starkware/starknet/apps/token/solidity/Transfers.sol", - "file": "contracts/starkware/starknet/apps/token/solidity/Transfers.sol", - "id": 2701, - "nodeType": "ImportDirective", - "scope": 2770, - "sourceUnit": 3520, - "src": "281:72:26", - "symbolAliases": [], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 2702, - "name": "StarknetTokenBridge", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 3210, - "src": "387:19:26", - "typeDescriptions": { - "typeIdentifier": "t_contract$_StarknetTokenBridge_$3210", - "typeString": "contract StarknetTokenBridge" - } - }, - "id": 2703, - "nodeType": "InheritanceSpecifier", - "src": "387:19:26" - } - ], - "contractDependencies": [446, 627, 656, 699, 917, 3210, 3355, 4350], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 2769, - "linearizedBaseContracts": [2769, 3210, 917, 656, 627, 4350, 446, 699, 3355], - "name": "StarknetERC20Bridge", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 2744, - "nodeType": "Block", - "src": "476:269:26", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2725, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2722, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2718, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -28, - "src": "548:4:26", - "typeDescriptions": { - "typeIdentifier": "t_contract$_StarknetERC20Bridge_$2769", - "typeString": "contract StarknetERC20Bridge" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_StarknetERC20Bridge_$2769", - "typeString": "contract StarknetERC20Bridge" - } - ], - "id": 2717, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "540:7:26", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 2716, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "540:7:26", - "typeDescriptions": { - "typeIdentifier": null, - "typeString": null - } - } - }, - "id": 2719, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "540:13:26", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 2712, - "name": "bridgedToken", - "nodeType": "Identifier", - "overloadedDeclarations": [3240, 3299], - "referencedDeclaration": 3240, - "src": "514:12:26", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 2713, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "514:14:26", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2711, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2695, - "src": "507:6:26", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$2695_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 2714, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "507:22:26", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$2695", - "typeString": "contract IERC20" - } - }, - "id": 2715, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 2640, - "src": "507:32:26", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 2720, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "507:47:26", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "id": 2721, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2705, - "src": "557:6:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "507:56:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 2723, - "name": "maxTotalBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [3273, 3338], - "referencedDeclaration": 3273, - "src": "567:15:26", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", - "typeString": "function () view returns (uint256)" - } - }, - "id": 2724, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "567:17:26", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "507:77:26", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "4d41585f42414c414e43455f4558434545444544", - "id": 2726, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "598:22:26", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_d24ec41da52cc3754d98b259a05ea7ee3bf5b2f335e623d989d33ec6a80b1e79", - "typeString": "literal_string \"MAX_BALANCE_EXCEEDED\"" - }, - "value": "MAX_BALANCE_EXCEEDED" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_d24ec41da52cc3754d98b259a05ea7ee3bf5b2f335e623d989d33ec6a80b1e79", - "typeString": "literal_string \"MAX_BALANCE_EXCEEDED\"" - } - ], - "id": 2710, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [-18, -18], - "referencedDeclaration": -18, - "src": "486:7:26", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2727, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "486:144:26", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2728, - "nodeType": "ExpressionStatement", - "src": "486:144:26" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 2732, - "name": "bridgedToken", - "nodeType": "Identifier", - "overloadedDeclarations": [3240, 3299], - "referencedDeclaration": 3240, - "src": "661:12:26", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 2733, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "661:14:26", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 2734, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "677:3:26", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 2735, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "677:10:26", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 2736, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2705, - "src": "689:6:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 2729, - "name": "Transfers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3519, - "src": "640:9:26", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Transfers_$3519_$", - "typeString": "type(library Transfers)" - } - }, - "id": 2731, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transferIn", - "nodeType": "MemberAccess", - "referencedDeclaration": 3437, - "src": "640:20:26", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 2737, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "640:56:26", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2738, - "nodeType": "ExpressionStatement", - "src": "640:56:26" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2740, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2705, - "src": "718:6:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 2741, - "name": "l2Recipient", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2707, - "src": "726:11:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2739, - "name": "sendMessage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3127, - "src": "706:11:26", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (uint256,uint256)" - } - }, - "id": 2742, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "706:32:26", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2743, - "nodeType": "ExpressionStatement", - "src": "706:32:26" - } - ] - }, - "documentation": null, - "functionSelector": "e2bbb158", - "id": 2745, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "deposit", - "nodeType": "FunctionDefinition", - "overrides": null, - "parameters": { - "id": 2708, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2705, - "mutability": "mutable", - "name": "amount", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2745, - "src": "430:14:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2704, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "430:7:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2707, - "mutability": "mutable", - "name": "l2Recipient", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2745, - "src": "446:19:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2706, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "446:7:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "429:37:26" - }, - "returnParameters": { - "id": 2709, - "nodeType": "ParameterList", - "parameters": [], - "src": "476:0:26" - }, - "scope": 2769, - "src": "413:332:26", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [3197], - "body": { - "id": 2767, - "nodeType": "Block", - "src": "820:116:26", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2754, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2747, - "src": "845:6:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 2755, - "name": "recipient", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2749, - "src": "853:9:26", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2753, - "name": "consumeMessage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3190, - "src": "830:14:26", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$", - "typeString": "function (uint256,address)" - } - }, - "id": 2756, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "830:33:26", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2757, - "nodeType": "ExpressionStatement", - "src": "830:33:26" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 2761, - "name": "bridgedToken", - "nodeType": "Identifier", - "overloadedDeclarations": [3240, 3299], - "referencedDeclaration": 3240, - "src": "895:12:26", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 2762, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "895:14:26", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 2763, - "name": "recipient", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2749, - "src": "911:9:26", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 2764, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2747, - "src": "922:6:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 2758, - "name": "Transfers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3519, - "src": "873:9:26", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Transfers_$3519_$", - "typeString": "type(library Transfers)" - } - }, - "id": 2760, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transferOut", - "nodeType": "MemberAccess", - "referencedDeclaration": 3518, - "src": "873:21:26", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 2765, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "873:56:26", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2766, - "nodeType": "ExpressionStatement", - "src": "873:56:26" - } - ] - }, - "documentation": null, - "functionSelector": "00f714ce", - "id": 2768, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "withdraw", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 2751, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "811:8:26" - }, - "parameters": { - "id": 2750, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2747, - "mutability": "mutable", - "name": "amount", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2768, - "src": "769:14:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2746, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "769:7:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2749, - "mutability": "mutable", - "name": "recipient", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2768, - "src": "785:17:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2748, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "785:7:26", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "768:35:26" - }, - "returnParameters": { - "id": 2752, - "nodeType": "ParameterList", - "parameters": [], - "src": "820:0:26" - }, - "scope": 2769, - "src": "751:185:26", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - } - ], - "scope": 2770, - "src": "355:583:26" - } - ], - "src": "40:899:26" - }, - "bytecode": "60a060405234801561001057600080fd5b50600030425a60405160200180846001600160a01b0316815260200183815260200182815260200193505050506040516020818303038152906040528051906020012090508060808181525050602a815550608051611fac61007c600039806102eb5250611fac6000f3fe608060405234801561001057600080fd5b50600436106100ce5760003560e01c8063894ecf041161008c578063a90e32b811610066578063a90e32b814610241578063bb371fdd1461025e578063e2bbb1581461027b578063e37fec251461029e576100ce565b8063894ecf04146101f657806391a66a2614610213578063946be3ed14610239576100ce565b8062f714ce146100d357806301a01590146101015780632e1a7d4d1461013b57806333eeb14714610158578063439fab911461016057806384f921cd146101d0575b600080fd5b6100ff600480360360408110156100e957600080fd5b50803590602001356001600160a01b03166102a6565b005b6101276004803603602081101561011757600080fd5b50356001600160a01b03166102c6565b604080519115158252519081900360200190f35b6100ff6004803603602081101561015157600080fd5b50356102d7565b6101276102e4565b6100ff6004803603602081101561017657600080fd5b81019060208101813564010000000081111561019157600080fd5b8201836020820111156101a357600080fd5b803590602001918460018302840111640100000000831117156101c557600080fd5b5090925090506102e9565b6100ff600480360360208110156101e657600080fd5b50356001600160a01b03166104bc565b6100ff6004803603602081101561020c57600080fd5b50356104c5565b6100ff6004803603602081101561022957600080fd5b50356001600160a01b031661054d565b6100ff610556565b6100ff6004803603602081101561025757600080fd5b5035610560565b6100ff6004803603602081101561027457600080fd5b50356106eb565b6100ff6004803603604081101561029157600080fd5b5080359060200135610773565b6100ff610863565b6102b0828261086b565b6102c26102bb610a19565b8284610a41565b5050565b60006102d182610c82565b92915050565b6102e181336102a6565b50565b600090565b7f00000000000000000000000000000000000000000000000000000000000000008054908115610359576040805162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b604482015290519081900360640190fd5b505060006103656102e4565b602090810291508101808310156103b9576040805162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b604482015290519081900360640190fd5b60006103c782848688611e6a565b60208110156103d557600080fd5b50356001600160a01b031690503660006103f18582888a611e6a565b915091506103ff82826102c2565b36600061040e8887818c611e6a565b90925090506001600160a01b038516156104395761042d858383610cb1565b505050505050506102c2565b610441610f08565b15610495578015610490576040805162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b604482015290519081900360640190fd5b6104b1565b61049f8282610f23565b6104a98282610f6c565b6104b1610faf565b505050505050505050565b6102e181611031565b6104ce33610c82565b610511576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517fa9aec19ec61c04ae0a4a1498ab6ce04cbd68b3d54c47888a45eb2bd37caf06bc9181900360200190a16102e18161117e565b6102e1816111a0565b61055e61129d565b565b61056861136a565b156105ba576040805162461bcd60e51b815260206004820152601d60248201527f4c325f544f4b454e5f434f4e54524143545f414c52454144595f534554000000604482015290519081900360640190fd5b8080610607576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b600167080000000000001160c01b018110610663576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b61066c33610c82565b6106af576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805183815290517f49774a785afe45b60857497c0aff8733f202ca7e75329ad6408073564efea6df9181900360200190a16102c28261138d565b6106f433610c82565b610737576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517faf474b5afcf11bd99dc9fc7f499e6ab368d650bf7ef23993f0d61bd9ad7626519181900360200190a16102e1816113af565b61077b6113d1565b82610784610a19565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156107d057600080fd5b505afa1580156107e4573d6000803e3d6000fd5b505050506040513d60208110156107fa57600080fd5b5051011115610847576040805162461bcd60e51b815260206004820152601460248201527313505617d09053105390d157d15610d15151115160621b604482015290519081900360640190fd5b610859610852610a19565b33846113f4565b6102c282826115dd565b61055e6118cb565b604080516001600160a01b03831681526020810184905281517fb4214c8c54fc7442f36d3682f59aebaf09358a4431835b30efb29d52cf9e1e91929181900390910190a160408051600480825260a08201909252606091602082016080803683370190505090506000816000815181106108e157fe5b602002602001018181525050816001600160a01b03168160018151811061090457fe5b6020908102919091010152600160801b83068160028151811061092357fe5b6020908102919091010152600160801b83048160038151811061094257fe5b602002602001018181525050610956611962565b6001600160a01b0316632c9dd5c061096c61136a565b836040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156109c25781810151838201526020016109aa565b505050509050019350505050602060405180830381600087803b1580156109e857600080fd5b505af11580156109fc573d6000803e3d6000fd5b505050506040513d6020811015610a1257600080fd5b5050505050565b6000610a3c604051806060016040528060298152602001611f4e60299139611981565b905090565b826001600160a01b038316610a91576040805162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b604482015290519081900360640190fd5b6000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610ae057600080fd5b505afa158015610af4573d6000803e3d6000fd5b505050506040513d6020811015610b0a57600080fd5b50519050828103811015610b51576040805162461bcd60e51b8152602060048201526009602482015268554e444552464c4f5760b81b604482015290519081900360640190fd5b604080516001600160a01b03808716602483015260448083018790528351808403909101815260649092019092526020810180516001600160e01b031663a9059cbb60e01b17905290610ba6908716826119fe565b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610bf557600080fd5b505afa158015610c09573d6000803e3d6000fd5b505050506040513d6020811015610c1f57600080fd5b505190508483038114610c79576040805162461bcd60e51b815260206004820152601c60248201527f494e434f52524543545f414d4f554e545f5452414e5346455252454400000000604482015290519081900360640190fd5b50505050505050565b600080610c8d611bad565b6001600160a01b039390931660009081526020939093525050604090205460ff1690565b610cc3836001600160a01b0316611c5c565b610d09576040805162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b604482015290519081900360640190fd5b60006060846001600160a01b031663439fab9160e01b85856040516024018080602001828103825284848281815260200192508082843760008382015260408051601f909201601f1990811690940182810390940182529283526020810180516001600160e01b03166001600160e01b0319909916989098178852915182519297909650869550935090915081905083835b60208310610dba5780518252601f199092019160209182019101610d9b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610e1a576040519150601f19603f3d011682016040523d82523d6000602084013e610e1f565b606091505b5091509150818190610eaf5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e74578181015183820152602001610e5c565b50505050905090810190601f168015610ea15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508051819015610f005760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610e74578181015183820152602001610e5c565b505050505050565b600080610f13611962565b6001600160a01b03161415905090565b604081146102c2576040805162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b604482015290519081900360640190fd5b60008083836040811015610f7f57600080fd5b506001600160a01b03813581169350602090910135169050610fa082611c62565b610fa981611c84565b50505050565b6000610fb9611bad565b6001810154909150600160a01b900460ff1615611013576040805162461bcd60e51b81526020600482015260136024820152721053149150511657d253925512505312569151606a1b604482015290519081900360640190fd5b60018101805460ff60a01b1916600160a01b1790556102e133611ca6565b61103a33610c82565b61107d576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b336001600160a01b03821614156110d2576040805162461bcd60e51b8152602060048201526014602482015273474f5645524e4f525f53454c465f52454d4f564560601b604482015290519081900360640190fd5b60006110dc611bad565b90506110e782610c82565b611127576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa3a7ab22a92727a960a11b604482015290519081900360640190fd5b6001600160a01b03821660008181526020838152604091829020805460ff19169055815192835290517fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a295999281900390910190a15050565b6102e1604051806060016040528060278152602001611f066027913982611d26565b6111a933610c82565b6111ec576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b60006111f6611bad565b905061120182610c82565b15611246576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b6001810180546001600160a01b0384166001600160a01b0319909116811790915560408051918252517f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a69181900360200190a15050565b60006112a7611bad565b60018101549091506001600160a01b0316331461130b576040805162461bcd60e51b815260206004820152601760248201527f4f4e4c595f43414e4449444154455f474f5645524e4f52000000000000000000604482015290519081900360640190fd5b6001810154611322906001600160a01b0316611ca6565b6001810180546001600160a01b03191690556040805133815290517fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d29181900360200190a150565b6000610a3c604051806060016040528060278152602001611edf60279139611981565b6102e1604051806060016040528060278152602001611edf6027913982611da0565b6102e1604051806060016040528060218152602001611f2d6021913982611d26565b6000610a3c604051806060016040528060278152602001611f0660279139611981565b604080516370a0823160e01b8152306004820152905184916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561143f57600080fd5b505afa158015611453573d6000803e3d6000fd5b505050506040513d602081101561146957600080fd5b505190508281018111156114af576040805162461bcd60e51b81526020600482015260086024820152674f564552464c4f5760c01b604482015290519081900360640190fd5b604080516001600160a01b03808716602483015230604483015260648083018790528351808403909101815260849092019092526020810180516001600160e01b03166323b872dd60e01b1790529061150a908716826119fe565b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561155957600080fd5b505afa15801561156d573d6000803e3d6000fd5b505050506040513d602081101561158357600080fd5b505190508285018114610c79576040805162461bcd60e51b815260206004820152601c60248201527f494e434f52524543545f414d4f554e545f5452414e5346455252454400000000604482015290519081900360640190fd5b6115e561136a565b611636576040805162461bcd60e51b815260206004820152601960248201527f4c325f544f4b454e5f434f4e54524143545f4e4f545f53455400000000000000604482015290519081900360640190fd5b8080611683576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b600167080000000000001160c01b0181106116df576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b6116e7611df3565b8311156117255760405162461bcd60e51b8152600401808060200182810382526024815260200180611ebb6024913960400191505060405180910390fd5b604080513381526020810185905280820184905290517f9dbb0e7dda3e09710ce75b801addc87cf9d9c6c581641b3275fca409ad086c629181900360600190a160408051600380825260808201909252606091602082018380368337019050509050828160008151811061179557fe5b6020908102919091010152600160801b8406816001815181106117b457fe5b6020908102919091010152600160801b8404816002815181106117d357fe5b6020026020010181815250506117e7611962565b6001600160a01b0316633e3aa6c56117fd61136a565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5846040518463ffffffff1660e01b81526004018084815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561187a578181015183820152602001611862565b50505050905001945050505050602060405180830381600087803b1580156118a157600080fd5b505af11580156118b5573d6000803e3d6000fd5b505050506040513d6020811015610f0057600080fd5b6118d433610c82565b611917576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6000611921611bad565b6001810180546001600160a01b03191690556040519091507f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f590600090a150565b6000610a3c604051806060016040528060288152602001611e93602891395b600080826040516020018082805190602001908083835b602083106119b75780518252601f199092019160209182019101611998565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508054915050919050565b611a0782611c5c565b611a4c576040805162461bcd60e51b81526020600482015260116024820152704241445f544f4b454e5f4144445245535360781b604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310611a8a5780518252601f199092019160209182019101611a6b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611aec576040519150601f19603f3d011682016040523d82523d6000602084013e611af1565b606091505b5091509150818190611b445760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610e74578181015183820152602001610e5c565b50805115610fa957808060200190516020811015611b6157600080fd5b5051610fa9576040805162461bcd60e51b81526020600482015260166024820152751513d2d15397d3d4115490551253d397d1905253115160521b604482015290519081900360640190fd5b6000806040518060400160405280601c81526020017f535441524b4e45545f312e305f474f5645524e414e43455f494e464f000000008152506040516020018082805190602001908083835b60208310611c185780518252601f199092019160209182019101611bf9565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508091505090565b3b151590565b6102e1604051806060016040528060298152602001611f4e6029913982611e16565b6102e1604051806060016040528060288152602001611e936028913982611e16565b611caf81610c82565b15611cf4576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b6000611cfe611bad565b6001600160a01b0390921660009081526020929092525060409020805460ff19166001179055565b6000826040516020018082805190602001908083835b60208310611d5b5780518252601f199092019160209182019101611d3c565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050818155505050565b611da982611981565b15611de9576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b6102c28282611d26565b6000610a3c604051806060016040528060218152602001611f2d60219139611981565b6000611e2183611981565b6001600160a01b031614611de9576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b60008085851115611e79578182fd5b83861115611e85578182fd5b505082019391909203915056fe535441524b4e45545f544f4b454e5f4252494447455f4d4553534147494e475f434f4e54524143545452414e534645525f544f5f535441524b4e45545f414d4f554e545f4558434545444544535441524b4e45545f544f4b454e5f4252494447455f4c325f544f4b454e5f434f4e5452414354535441524b4e45545f544f4b454e5f4252494447455f4d41585f544f54414c5f42414c414e4345535441524b4e45545f544f4b454e5f4252494447455f4d41585f4445504f534954535441524b4e45545f45524332305f544f4b454e5f4252494447455f544f4b454e5f41444452455353a2646970667358221220fd2fe883d770c6733418100eae3f37e39ee730035d864ee143dfa0a26b5856e164736f6c634300060c0033", - "bytecodeSha1": "e87d42c61c5da19738e736af0764caf94d479bf6", - "compiler": { - "evm_version": "istanbul", - "optimizer": { - "enabled": true, - "runs": 200 - }, - "version": "0.6.12+commit.27d51765" - }, - "contractName": "StarknetERC20Bridge", - "coverageMap": { - "branches": { - "0": { - "NamedStorage.setAddressValueOnce": { - "101": [2262, 2299, true] - }, - "NamedStorage.setUintValueOnce": { - "100": [1665, 1688, true] - } - }, - "1": { - "Governance.acceptGovernance": { - "97": [3393, 3428, true] - }, - "Governance.addGovernor": { - "98": [3019, 3043, true] - }, - "Governance.initGovernance": { - "93": [1646, 1662, true] - }, - "Governance.nominateNewGovernor": { - "96": [2488, 2512, true] - }, - "Governance.removeGovernor": { - "94": [3841, 3873, true], - "95": [3980, 4010, true] - } - }, - "10": { - "ProxySupport.callExternalInitializer": { - "106": [2645, 2681, true], - "107": [2961, 2968, true], - "108": [3007, 3029, true] - }, - "ProxySupport.initialize": { - "102": [1674, 1705, true], - "103": [2095, 2121, false], - "104": [2227, 2242, false], - "105": [2266, 2286, true] - } - }, - "11": { - "Addresses.safeTokenContractCall": { - "88": [887, 911, true], - "89": [1074, 1081, true], - "90": [1117, 1138, false], - "91": [1162, 1192, true] - } - }, - "16": {}, - "25": {}, - "26": { - "StarknetERC20Bridge.deposit": { - "87": [507, 584, true] - } - }, - "28": { - "StarknetTokenBridge.sendMessage": { - "110": [3454, 3476, true] - }, - "StarknetTokenBridge.validateInitData": { - "109": [1297, 1314, true] - } - }, - "29": {}, - "30": { - "Transfers.transferIn": { - "114": [564, 615, true], - "115": [1019, 1069, true] - }, - "Transfers.transferOut": { - "111": [1408, 1433, true], - "112": [1549, 1600, true], - "113": [1977, 2027, true] - } - }, - "31": {}, - "34": {}, - "5": { - "ProxySupport.initialize": { - "92": [1178, 1197, true] - } - }, - "6": {}, - "8": { - "Governance.cancelNomination": { - "99": [434, 456, true] - } - } - }, - "statements": { - "0": { - "NamedStorage.setAddressValueOnce": { - "86": [2254, 2315] - }, - "NamedStorage.setUintValueOnce": { - "83": [1657, 1704], - "84": [1714, 1739] - } - }, - "1": { - "Governance.acceptGovernance": { - "55": [3385, 3456], - "56": [3492, 3526], - "57": [3536, 3572], - "58": [3644, 3683] - }, - "Governance.addGovernor": { - "81": [3011, 3064], - "82": [3138, 3180] - }, - "Governance.cancelNomination": { - "72": [2244, 2280], - "73": [2290, 2319] - }, - "Governance.initGovernance": { - "44": [1638, 1686], - "45": [1696, 1718], - "46": [1804, 1827] - }, - "Governance.isGovernor": { - "36": [1994, 2037] - }, - "Governance.nominateNewGovernor": { - "52": [2480, 2533], - "53": [2543, 2578], - "54": [2588, 2626] - }, - "Governance.removeGovernor": { - "47": [3833, 3898], - "48": [3972, 4027], - "49": [4037, 4087], - "50": [4097, 4140] - } - }, - "10": { - "ProxySupport.callExternalInitializer": { - "37": [2637, 2704], - "38": [2953, 2989], - "39": [2999, 3050] - }, - "ProxySupport.initialize": { - "4": [1666, 1729], - "5": [1891, 1940], - "6": [2137, 2182], - "7": [2196, 2203], - "8": [2258, 2311], - "9": [2391, 2417], - "10": [2431, 2464], - "11": [2478, 2494] - } - }, - "11": { - "Addresses.isContract": { - "78": [329, 344] - }, - "Addresses.safeTokenContractCall": { - "75": [879, 933], - "76": [1066, 1102], - "77": [1154, 1219] - } - }, - "16": {}, - "25": {}, - "26": { - "StarknetERC20Bridge.deposit": { - "21": [486, 630], - "22": [640, 696], - "23": [706, 738] - }, - "StarknetERC20Bridge.withdraw": { - "0": [830, 863], - "1": [873, 929] - } - }, - "28": { - "StarknetTokenBridge.consumeMessage": { - "25": [3935, 3972], - "26": [4036, 4071], - "27": [4081, 4112], - "28": [4122, 4161], - "29": [4171, 4210], - "30": [4221, 4289] - }, - "StarknetTokenBridge.initializeContractState": { - "42": [1843, 1870], - "43": [1880, 1917] - }, - "StarknetTokenBridge.isInitialized": { - "40": [1044, 1095] - }, - "StarknetTokenBridge.sendMessage": { - "66": [3446, 3517], - "67": [3527, 3575], - "68": [3639, 3663], - "69": [3673, 3712], - "70": [3722, 3761], - "71": [3771, 3844] - }, - "StarknetTokenBridge.setL2TokenContract": { - "17": [2846, 2890], - "18": [2900, 2933] - }, - "StarknetTokenBridge.setMaxDeposit": { - "19": [3212, 3246], - "20": [3256, 3279] - }, - "StarknetTokenBridge.setMaxTotalBalance": { - "13": [3034, 3078], - "14": [3088, 3121] - }, - "StarknetTokenBridge.validateInitData": { - "41": [1289, 1336] - }, - "StarknetTokenBridge.withdraw": { - "3": [4429, 4457] - } - }, - "29": { - "StarknetTokenStorage.bridgedToken": { - "31": [829, 883], - "79": [1545, 1607] - }, - "StarknetTokenStorage.l2TokenContract": { - "59": [965, 1011], - "60": [1679, 1729] - }, - "StarknetTokenStorage.maxDeposit": { - "61": [1796, 1845], - "85": [1088, 1137] - }, - "StarknetTokenStorage.maxTotalBalance": { - "51": [1917, 1972], - "62": [1219, 1274] - }, - "StarknetTokenStorage.messagingContract": { - "74": [1369, 1448], - "80": [2061, 2137] - } - }, - "30": { - "Transfers.transferIn": { - "63": [556, 628], - "64": [818, 855], - "65": [1011, 1102] - }, - "Transfers.transferOut": { - "32": [1400, 1455], - "33": [1541, 1614], - "34": [1776, 1813], - "35": [1969, 2060] - } - }, - "31": {}, - "34": { - "StarknetGovernance.starknetAcceptGovernance": { - "16": [1053, 1071] - }, - "StarknetGovernance.starknetCancelNomination": { - "24": [1139, 1157] - }, - "StarknetGovernance.starknetIsGovernor": { - "2": [706, 737] - }, - "StarknetGovernance.starknetNominateNewGovernor": { - "15": [827, 859] - }, - "StarknetGovernance.starknetRemoveGovernor": { - "12": [951, 985] - } - }, - "5": {}, - "6": {}, - "8": {} - } - }, - "dependencies": [ - "Addresses", - "BlockDirectCall", - "CairoConstants", - "ContractInitializer", - "Governance", - "IERC20", - "IStarknetMessaging", - "MGovernance", - "NamedStorage", - "ProxySupport", - "StarknetGovernance", - "StarknetTokenBridge", - "StarknetTokenStorage", - "Transfers" - ], - "deployedBytecode": "608060405234801561001057600080fd5b50600436106100ce5760003560e01c8063894ecf041161008c578063a90e32b811610066578063a90e32b814610241578063bb371fdd1461025e578063e2bbb1581461027b578063e37fec251461029e576100ce565b8063894ecf04146101f657806391a66a2614610213578063946be3ed14610239576100ce565b8062f714ce146100d357806301a01590146101015780632e1a7d4d1461013b57806333eeb14714610158578063439fab911461016057806384f921cd146101d0575b600080fd5b6100ff600480360360408110156100e957600080fd5b50803590602001356001600160a01b03166102a6565b005b6101276004803603602081101561011757600080fd5b50356001600160a01b03166102c6565b604080519115158252519081900360200190f35b6100ff6004803603602081101561015157600080fd5b50356102d7565b6101276102e4565b6100ff6004803603602081101561017657600080fd5b81019060208101813564010000000081111561019157600080fd5b8201836020820111156101a357600080fd5b803590602001918460018302840111640100000000831117156101c557600080fd5b5090925090506102e9565b6100ff600480360360208110156101e657600080fd5b50356001600160a01b03166104bc565b6100ff6004803603602081101561020c57600080fd5b50356104c5565b6100ff6004803603602081101561022957600080fd5b50356001600160a01b031661054d565b6100ff610556565b6100ff6004803603602081101561025757600080fd5b5035610560565b6100ff6004803603602081101561027457600080fd5b50356106eb565b6100ff6004803603604081101561029157600080fd5b5080359060200135610773565b6100ff610863565b6102b0828261086b565b6102c26102bb610a19565b8284610a41565b5050565b60006102d182610c82565b92915050565b6102e181336102a6565b50565b600090565b7f00000000000000000000000000000000000000000000000000000000000000008054908115610359576040805162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b604482015290519081900360640190fd5b505060006103656102e4565b602090810291508101808310156103b9576040805162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b604482015290519081900360640190fd5b60006103c782848688611e6a565b60208110156103d557600080fd5b50356001600160a01b031690503660006103f18582888a611e6a565b915091506103ff82826102c2565b36600061040e8887818c611e6a565b90925090506001600160a01b038516156104395761042d858383610cb1565b505050505050506102c2565b610441610f08565b15610495578015610490576040805162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b604482015290519081900360640190fd5b6104b1565b61049f8282610f23565b6104a98282610f6c565b6104b1610faf565b505050505050505050565b6102e181611031565b6104ce33610c82565b610511576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517fa9aec19ec61c04ae0a4a1498ab6ce04cbd68b3d54c47888a45eb2bd37caf06bc9181900360200190a16102e18161117e565b6102e1816111a0565b61055e61129d565b565b61056861136a565b156105ba576040805162461bcd60e51b815260206004820152601d60248201527f4c325f544f4b454e5f434f4e54524143545f414c52454144595f534554000000604482015290519081900360640190fd5b8080610607576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b600167080000000000001160c01b018110610663576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b61066c33610c82565b6106af576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805183815290517f49774a785afe45b60857497c0aff8733f202ca7e75329ad6408073564efea6df9181900360200190a16102c28261138d565b6106f433610c82565b610737576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517faf474b5afcf11bd99dc9fc7f499e6ab368d650bf7ef23993f0d61bd9ad7626519181900360200190a16102e1816113af565b61077b6113d1565b82610784610a19565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156107d057600080fd5b505afa1580156107e4573d6000803e3d6000fd5b505050506040513d60208110156107fa57600080fd5b5051011115610847576040805162461bcd60e51b815260206004820152601460248201527313505617d09053105390d157d15610d15151115160621b604482015290519081900360640190fd5b610859610852610a19565b33846113f4565b6102c282826115dd565b61055e6118cb565b604080516001600160a01b03831681526020810184905281517fb4214c8c54fc7442f36d3682f59aebaf09358a4431835b30efb29d52cf9e1e91929181900390910190a160408051600480825260a08201909252606091602082016080803683370190505090506000816000815181106108e157fe5b602002602001018181525050816001600160a01b03168160018151811061090457fe5b6020908102919091010152600160801b83068160028151811061092357fe5b6020908102919091010152600160801b83048160038151811061094257fe5b602002602001018181525050610956611962565b6001600160a01b0316632c9dd5c061096c61136a565b836040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156109c25781810151838201526020016109aa565b505050509050019350505050602060405180830381600087803b1580156109e857600080fd5b505af11580156109fc573d6000803e3d6000fd5b505050506040513d6020811015610a1257600080fd5b5050505050565b6000610a3c604051806060016040528060298152602001611f4e60299139611981565b905090565b826001600160a01b038316610a91576040805162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b604482015290519081900360640190fd5b6000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610ae057600080fd5b505afa158015610af4573d6000803e3d6000fd5b505050506040513d6020811015610b0a57600080fd5b50519050828103811015610b51576040805162461bcd60e51b8152602060048201526009602482015268554e444552464c4f5760b81b604482015290519081900360640190fd5b604080516001600160a01b03808716602483015260448083018790528351808403909101815260649092019092526020810180516001600160e01b031663a9059cbb60e01b17905290610ba6908716826119fe565b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610bf557600080fd5b505afa158015610c09573d6000803e3d6000fd5b505050506040513d6020811015610c1f57600080fd5b505190508483038114610c79576040805162461bcd60e51b815260206004820152601c60248201527f494e434f52524543545f414d4f554e545f5452414e5346455252454400000000604482015290519081900360640190fd5b50505050505050565b600080610c8d611bad565b6001600160a01b039390931660009081526020939093525050604090205460ff1690565b610cc3836001600160a01b0316611c5c565b610d09576040805162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b604482015290519081900360640190fd5b60006060846001600160a01b031663439fab9160e01b85856040516024018080602001828103825284848281815260200192508082843760008382015260408051601f909201601f1990811690940182810390940182529283526020810180516001600160e01b03166001600160e01b0319909916989098178852915182519297909650869550935090915081905083835b60208310610dba5780518252601f199092019160209182019101610d9b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610e1a576040519150601f19603f3d011682016040523d82523d6000602084013e610e1f565b606091505b5091509150818190610eaf5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e74578181015183820152602001610e5c565b50505050905090810190601f168015610ea15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508051819015610f005760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610e74578181015183820152602001610e5c565b505050505050565b600080610f13611962565b6001600160a01b03161415905090565b604081146102c2576040805162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b604482015290519081900360640190fd5b60008083836040811015610f7f57600080fd5b506001600160a01b03813581169350602090910135169050610fa082611c62565b610fa981611c84565b50505050565b6000610fb9611bad565b6001810154909150600160a01b900460ff1615611013576040805162461bcd60e51b81526020600482015260136024820152721053149150511657d253925512505312569151606a1b604482015290519081900360640190fd5b60018101805460ff60a01b1916600160a01b1790556102e133611ca6565b61103a33610c82565b61107d576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b336001600160a01b03821614156110d2576040805162461bcd60e51b8152602060048201526014602482015273474f5645524e4f525f53454c465f52454d4f564560601b604482015290519081900360640190fd5b60006110dc611bad565b90506110e782610c82565b611127576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa3a7ab22a92727a960a11b604482015290519081900360640190fd5b6001600160a01b03821660008181526020838152604091829020805460ff19169055815192835290517fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a295999281900390910190a15050565b6102e1604051806060016040528060278152602001611f066027913982611d26565b6111a933610c82565b6111ec576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b60006111f6611bad565b905061120182610c82565b15611246576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b6001810180546001600160a01b0384166001600160a01b0319909116811790915560408051918252517f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a69181900360200190a15050565b60006112a7611bad565b60018101549091506001600160a01b0316331461130b576040805162461bcd60e51b815260206004820152601760248201527f4f4e4c595f43414e4449444154455f474f5645524e4f52000000000000000000604482015290519081900360640190fd5b6001810154611322906001600160a01b0316611ca6565b6001810180546001600160a01b03191690556040805133815290517fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d29181900360200190a150565b6000610a3c604051806060016040528060278152602001611edf60279139611981565b6102e1604051806060016040528060278152602001611edf6027913982611da0565b6102e1604051806060016040528060218152602001611f2d6021913982611d26565b6000610a3c604051806060016040528060278152602001611f0660279139611981565b604080516370a0823160e01b8152306004820152905184916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561143f57600080fd5b505afa158015611453573d6000803e3d6000fd5b505050506040513d602081101561146957600080fd5b505190508281018111156114af576040805162461bcd60e51b81526020600482015260086024820152674f564552464c4f5760c01b604482015290519081900360640190fd5b604080516001600160a01b03808716602483015230604483015260648083018790528351808403909101815260849092019092526020810180516001600160e01b03166323b872dd60e01b1790529061150a908716826119fe565b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561155957600080fd5b505afa15801561156d573d6000803e3d6000fd5b505050506040513d602081101561158357600080fd5b505190508285018114610c79576040805162461bcd60e51b815260206004820152601c60248201527f494e434f52524543545f414d4f554e545f5452414e5346455252454400000000604482015290519081900360640190fd5b6115e561136a565b611636576040805162461bcd60e51b815260206004820152601960248201527f4c325f544f4b454e5f434f4e54524143545f4e4f545f53455400000000000000604482015290519081900360640190fd5b8080611683576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b600167080000000000001160c01b0181106116df576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b6116e7611df3565b8311156117255760405162461bcd60e51b8152600401808060200182810382526024815260200180611ebb6024913960400191505060405180910390fd5b604080513381526020810185905280820184905290517f9dbb0e7dda3e09710ce75b801addc87cf9d9c6c581641b3275fca409ad086c629181900360600190a160408051600380825260808201909252606091602082018380368337019050509050828160008151811061179557fe5b6020908102919091010152600160801b8406816001815181106117b457fe5b6020908102919091010152600160801b8404816002815181106117d357fe5b6020026020010181815250506117e7611962565b6001600160a01b0316633e3aa6c56117fd61136a565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5846040518463ffffffff1660e01b81526004018084815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561187a578181015183820152602001611862565b50505050905001945050505050602060405180830381600087803b1580156118a157600080fd5b505af11580156118b5573d6000803e3d6000fd5b505050506040513d6020811015610f0057600080fd5b6118d433610c82565b611917576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6000611921611bad565b6001810180546001600160a01b03191690556040519091507f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f590600090a150565b6000610a3c604051806060016040528060288152602001611e93602891395b600080826040516020018082805190602001908083835b602083106119b75780518252601f199092019160209182019101611998565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508054915050919050565b611a0782611c5c565b611a4c576040805162461bcd60e51b81526020600482015260116024820152704241445f544f4b454e5f4144445245535360781b604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310611a8a5780518252601f199092019160209182019101611a6b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611aec576040519150601f19603f3d011682016040523d82523d6000602084013e611af1565b606091505b5091509150818190611b445760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610e74578181015183820152602001610e5c565b50805115610fa957808060200190516020811015611b6157600080fd5b5051610fa9576040805162461bcd60e51b81526020600482015260166024820152751513d2d15397d3d4115490551253d397d1905253115160521b604482015290519081900360640190fd5b6000806040518060400160405280601c81526020017f535441524b4e45545f312e305f474f5645524e414e43455f494e464f000000008152506040516020018082805190602001908083835b60208310611c185780518252601f199092019160209182019101611bf9565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508091505090565b3b151590565b6102e1604051806060016040528060298152602001611f4e6029913982611e16565b6102e1604051806060016040528060288152602001611e936028913982611e16565b611caf81610c82565b15611cf4576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b6000611cfe611bad565b6001600160a01b0390921660009081526020929092525060409020805460ff19166001179055565b6000826040516020018082805190602001908083835b60208310611d5b5780518252601f199092019160209182019101611d3c565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050818155505050565b611da982611981565b15611de9576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b6102c28282611d26565b6000610a3c604051806060016040528060218152602001611f2d60219139611981565b6000611e2183611981565b6001600160a01b031614611de9576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b60008085851115611e79578182fd5b83861115611e85578182fd5b505082019391909203915056fe535441524b4e45545f544f4b454e5f4252494447455f4d4553534147494e475f434f4e54524143545452414e534645525f544f5f535441524b4e45545f414d4f554e545f4558434545444544535441524b4e45545f544f4b454e5f4252494447455f4c325f544f4b454e5f434f4e5452414354535441524b4e45545f544f4b454e5f4252494447455f4d41585f544f54414c5f42414c414e4345535441524b4e45545f544f4b454e5f4252494447455f4d41585f4445504f534954535441524b4e45545f45524332305f544f4b454e5f4252494447455f544f4b454e5f41444452455353a2646970667358221220fd2fe883d770c6733418100eae3f37e39ee730035d864ee143dfa0a26b5856e164736f6c634300060c0033", - "deployedSourceMap": "355:583:26:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;751:185;;;;;;;;;;;;;;;;-1:-1:-1;751:185:26;;;;;;-1:-1:-1;;;;;751:185:26;;:::i;:::-;;617:127:34;;;;;;;;;;;;;;;;-1:-1:-1;617:127:34;-1:-1:-1;;;;;617:127:34;;:::i;:::-;;;;;;;;;;;;;;;;;;4376:88:28;;;;;;;;;;;;;;;;-1:-1:-1;4376:88:28;;:::i;775:86:10:-;;;:::i;1483:1028::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1483:1028:10;;-1:-1:-1;1483:1028:10;-1:-1:-1;1483:1028:10;:::i;872:120:34:-;;;;;;;;;;;;;;;;-1:-1:-1;872:120:34;-1:-1:-1;;;;;872:120:34;;:::i;2946:182:28:-;;;;;;;;;;;;;;;;-1:-1:-1;2946:182:28;;:::i;750:116:34:-;;;;;;;;;;;;;;;;-1:-1:-1;750:116:34;-1:-1:-1;;;;;750:116:34;;:::i;998:80::-;;;:::i;2665:275:28:-;;;;;;;;;;;;;;;;-1:-1:-1;2665:275:28;;:::i;3134:152::-;;;;;;;;;;;;;;;;-1:-1:-1;3134:152:28;;:::i;413:332:26:-;;;;;;;;;;;;;;;;-1:-1:-1;413:332:26;;;;;;;:::i;1084:80:34:-;;;:::i;751:185:26:-;830:33;845:6;853:9;830:14;:33::i;:::-;873:56;895:14;:12;:14::i;:::-;911:9;922:6;873:21;:56::i;:::-;751:185;;:::o;617:127:34:-;690:4;713:24;724:12;713:10;:24::i;:::-;706:31;617:127;-1:-1:-1;;617:127:34:o;4376:88:28:-;4429:28;4438:6;4446:10;4429:8;:28::i;:::-;4376:88;:::o;775:86:10:-;826:4;775:86;:::o;1483:1028::-;1052:21:5;1132:11;;;1178:19;;1170:54;;;;;-1:-1:-1;;;1170:54:5;;;;;;;;;;;;-1:-1:-1;;;1170:54:5;;;;;;;;;;;;;;;1483:1028:10;;1561:17:::1;1586:19;:17;:19::i;:::-;1581:2;:24:::0;;::::1;::::0;-1:-1:-1;1642:14:10;::::1;1674:31:::0;;::::1;;1666:63;;;::::0;;-1:-1:-1;;;1666:63:10;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;1666:63:10;;;;;;;;;;;;;::::1;;1739:18;1771:32;1786:16:::0;1776:9;1771:4;;:32:::1;:::i;:::-;1760:55;;;;;;;::::0;::::1;;-1:-1:-1::0;1760:55:10::1;-1:-1:-1::0;;;;;1760:55:10::1;::::0;-1:-1:-1;1826:35:10::1;;1864:16;1870:9:::0;1826:35;1864:4;;:16:::1;:::i;:::-;1826:54;;;;1891:49;1919:20;;1891:27;:49::i;:::-;1951:23;;1977;:4:::0;1982:16;1977:4;;:23:::1;:::i;:::-;1951:49:::0;;-1:-1:-1;1951:49:10;-1:-1:-1;;;;;;2095:26:10;::::1;::::0;2091:122:::1;;2137:45;2161:10;2173:8;;2137:23;:45::i;:::-;2196:7;;;;;;;;;2091:122;2227:15;:13;:15::i;:::-;2223:282;;;2266:20:::0;;2258:53:::1;;;::::0;;-1:-1:-1;;;2258:53:10;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2258:53:10;;;;;;;;;;;;;::::1;;2223:282;;;2391:26;2408:8;;2391:16;:26::i;:::-;2431:33;2455:8;;2431:23;:33::i;:::-;2478:16;:14;:16::i;:::-;1244:1:5;;;;;;;1483:1028:10::0;;:::o;872:120:34:-;951:34;966:18;951:14;:34::i;2946:182:28:-;434:22:8;445:10;434;:22::i;:::-;426:50;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;;;;3039:39:28::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;3088:33;3104:16;3088:15;:33::i;750:116:34:-:0;827:32;847:11;827:19;:32::i;998:80::-;1053:18;:16;:18::i;:::-;998:80::o;2665:275:28:-;2461:17;:15;:17::i;:::-;:22;2453:64;;;;;-1:-1:-1;;;2453:64:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;2791:16;2260:14;2252:50:::1;;;::::0;;-1:-1:-1;;;2252:50:28;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2252:50:28;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;2320:9:28::1;:38;2312:74;;;::::0;;-1:-1:-1;;;2312:74:28;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2312:74:28;;;;;;;;;;;;;::::1;;434:22:8::2;445:10;434;:22::i;:::-;426:50;;;::::0;;-1:-1:-1;;;426:50:8;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;;::::2;;2851:39:28::3;::::0;;;;;;;::::3;::::0;;;;::::3;::::0;;::::3;2900:33;2916:16;2900:15;:33::i;3134:152::-:0;434:22:8;445:10;434;:22::i;:::-;426:50;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;;;;3217:29:28::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;3256:23;3267:11;3256:10;:23::i;413:332:26:-:0;567:17;:15;:17::i;:::-;557:6;514:14;:12;:14::i;:::-;-1:-1:-1;;;;;507:32:26;;548:4;507:47;;;;;;;;;;;;;-1:-1:-1;;;;;507:47:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;507:47:26;:56;:77;;486:144;;;;;-1:-1:-1;;;486:144:26;;;;;;;;;;;;-1:-1:-1;;;486:144:26;;;;;;;;;;;;;;;640:56;661:14;:12;:14::i;:::-;677:10;689:6;640:20;:56::i;:::-;706:32;718:6;726:11;706;:32::i;1084:80:34:-;1139:18;:16;:18::i;3857:439:28:-;3940:32;;;-1:-1:-1;;;;;3940:32:28;;;;;;;;;;;;;;;;;;;;;;;4010:16;;;4024:1;4010:16;;;;;;;;;3983:24;;4010:16;;;;;;;;;;-1:-1:-1;4010:16:28;3983:43;;2140:1;4036:7;4044:1;4036:10;;;;;;;;;;;;;:35;;;;;4102:9;-1:-1:-1;;;;;4094:18:28;4081:7;4089:1;4081:10;;;;;;;;;;;;;;;;;:31;-1:-1:-1;;;4135:6:28;:26;4122:7;4130:1;4122:10;;;;;;;;;;;;;;;;;:39;-1:-1:-1;;;4184:6:28;:26;4171:7;4179:1;4171:10;;;;;;;;;;;;;:39;;;;;4221:19;:17;:19::i;:::-;-1:-1:-1;;;;;4221:40:28;;4262:17;:15;:17::i;:::-;4281:7;4221:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3857:439:28:o;763:127:29:-;810:7;836:47;865:17;;;;;;;;;;;;;;;;;836:28;:47::i;:::-;829:54;;763:127;:::o;1181:886:30:-;1329:5;-1:-1:-1;;;;;1408:25:30;;1400:55;;;;;-1:-1:-1;;;1400:55:30;;;;;;;;;;;;-1:-1:-1;;;1400:55:30;;;;;;;;;;;;;;;1465:27;1495:11;-1:-1:-1;;;;;1495:21:30;;1525:4;1495:36;;;;;;;;;;;;;-1:-1:-1;;;;;1495:36:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1495:36:30;;-1:-1:-1;1549:28:30;;;:51;-1:-1:-1;1549:51:30;1541:73;;;;;-1:-1:-1;;;1541:73:30;;;;;;;;;;;;-1:-1:-1;;;1541:73:30;;;;;;;;;;;;;;;1648:118;;;-1:-1:-1;;;;;1648:118:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1648:118:30;-1:-1:-1;;;1648:118:30;;;;1776:37;;:27;;1648:118;1776:27;:37::i;:::-;1823:26;1852:11;-1:-1:-1;;;;;1852:21:30;;1882:4;1852:36;;;;;;;;;;;;;-1:-1:-1;;;;;1852:36:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1852:36:30;;-1:-1:-1;1999:28:30;;;1977:50;;1969:91;;;;;-1:-1:-1;;;1969:91:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;1181:886;;;;;;;:::o;1840:204:1:-;1914:4;1930:32;1965:19;:17;:19::i;:::-;-1:-1:-1;;;;;2001:36:1;;;;:22;:36;;;;;;;;-1:-1:-1;;2001:36:1;;;;;;;1840:204::o;2517:540:10:-;2645:36;:23;-1:-1:-1;;;;;2645:34:10;;:36::i;:::-;2637:67;;;;;-1:-1:-1;;;2637:67:10;;;;;;;;;;;;-1:-1:-1;;;2637:67:10;;;;;;;;;;;;;;;2785:12;2799:23;2826;-1:-1:-1;;;;;2826:36:10;2899:24;;;2925:7;;2876:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2876:57:10;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2876:57:10;-1:-1:-1;;;;;;2876:57:10;;;;;;;;;2826:117;;;;2876:57;;2826:117;;-1:-1:-1;2826:117:10;;-1:-1:-1;2876:57:10;-1:-1:-1;2826:117:10;;-1:-1:-1;2826:117:10;;-1:-1:-1;2826:117:10;2876:57;2826:117;;;;;;;;;;-1:-1:-1;;2826:117:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2784:159;;;;2961:7;2977:10;2953:36;;;;;-1:-1:-1;;;2953:36:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3007:17:10;;:10;;:22;2999:51;;;;-1:-1:-1;;;2999:51:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2517:540;;;;;:::o;971:131:28:-;1028:4;;1051:19;:17;:19::i;:::-;-1:-1:-1;;;;;1051:44:28;;;1044:51;;971:131;:::o;1209:134::-;1312:2;1297:17;;1289:47;;;;;-1:-1:-1;;;1289:47:28;;;;;;;;;;;;-1:-1:-1;;;1289:47:28;;;;;;;;;;;;;;1605:319;1688:21;1711:37;1776:4;;1752:81;;;;;;;;;;-1:-1:-1;;;;;;1752:81:28;;;;;-1:-1:-1;1752:81:28;;;;;;;-1:-1:-1;1843:27:28;1752:81;1843:12;:27::i;:::-;1880:37;1898:18;1880:17;:37::i;:::-;1605:319;;;;:::o;1529:305:1:-;1574:32;1609:19;:17;:19::i;:::-;1647:15;;;;;;-1:-1:-1;;;;1647:15:1;;;;1646:16;1638:48;;;;;-1:-1:-1;;;1638:48:1;;;;;;;;;;;;-1:-1:-1;;;1638:48:1;;;;;;;;;;;;;;;1714:4;1696:15;;:22;;-1:-1:-1;;;;1696:22:1;-1:-1:-1;;;1696:22:1;;;1804:23;1816:10;1804:11;:23::i;3747:400::-;434:22:8;445:10;434;:22::i;:::-;426:50;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;;;;3841:10:1::1;-1:-1:-1::0;;;;;3841:32:1;::::1;;;3833:65;;;::::0;;-1:-1:-1;;;3833:65:1;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;3833:65:1;;;;;;;;;;;;;::::1;;3908:32;3943:19;:17;:19::i;:::-;3908:54;;3980:30;3991:18;3980:10;:30::i;:::-;3972:55;;;::::0;;-1:-1:-1;;;3972:55:1;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;3972:55:1;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;4037:42:1;::::1;4082:5;4037:42:::0;;;::::1;::::0;;;;;;;;:50;;-1:-1:-1;;4037:50:1::1;::::0;;4102:38;;;;;;;::::1;::::0;;;;;;;;::::1;486:1:8;3747:400:1::0;:::o;1858:121:29:-;1917:55;1943:21;;;;;;;;;;;;;;;;;1966:5;1917:25;:55::i;2332:301:1:-;434:22:8;445:10;434;:22::i;:::-;426:50;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;;;;2416:32:1::1;2451:19;:17;:19::i;:::-;2416:54;;2489:23;2500:11;2489:10;:23::i;:::-;2488:24;2480:53;;;::::0;;-1:-1:-1;;;2480:53:1;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2480:53:1;;;;;;;;;;;;;::::1;;2543:21;::::0;::::1;:35:::0;;-1:-1:-1;;;;;2543:35:1;::::1;-1:-1:-1::0;;;;;;2543:35:1;;::::1;::::0;::::1;::::0;;;2593:33:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;486:1:8;2332:301:1::0;:::o;3193:497::-;3321:32;3356:19;:17;:19::i;:::-;3407:21;;;;;;-1:-1:-1;;;;;;3407:21:1;3393:10;:35;3385:71;;;;;-1:-1:-1;;;3385:71:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;3504:21;;;;3492:34;;-1:-1:-1;;;;;3504:21:1;3492:11;:34::i;:::-;3536:21;;;:36;;-1:-1:-1;;;;;;3536:36:1;;;3649:34;;;3672:10;3649:34;;;;;;;;;;;;;3193:497;:::o;896:122:29:-;946:7;972:39;998:12;;;;;;;;;;;;;;;;;972:25;:39::i;1620:116::-;1679:50;1709:12;;;;;;;;;;;;;;;;;1723:5;1679:29;:50::i;1742:110::-;1796:49;1822:15;;;;;;;;;;;;;;;;;1839:5;1796:25;:49::i;1150:131::-;1200:7;1226:48;1252:21;;;;;;;;;;;;;;;;;1226:25;:48::i;320:789:30:-;510:36;;;-1:-1:-1;;;510:36:30;;540:4;510:36;;;;;;464:5;;436:18;;-1:-1:-1;;;;;510:21:30;;;;;:36;;;;;;;;;;;;;;:21;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;510:36:30;;-1:-1:-1;564:28:30;;;:51;-1:-1:-1;564:51:30;556:72;;;;;-1:-1:-1;;;556:72:30;;;;;;;;;;;;-1:-1:-1;;;556:72:30;;;;;;;;;;;;;;;662:146;;;-1:-1:-1;;;;;662:146:30;;;;;;;773:4;662:146;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;662:146:30;-1:-1:-1;;;662:146:30;;;;818:37;;:27;;662:146;818:27;:37::i;:::-;865:26;894:11;-1:-1:-1;;;;;894:21:30;;924:4;894:36;;;;;;;;;;;;;-1:-1:-1;;;;;894:36:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;894:36:30;;-1:-1:-1;1041:28:30;;;1019:50;;1011:91;;;;;-1:-1:-1;;;1011:91:30;;;;;;;;;;;;;;;;;;;;;;;;;;;3292:559:28;2589:17;:15;:17::i;:::-;2581:60;;;;;-1:-1:-1;;;2581:60:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;3419:11;2260:14;2252:50:::1;;;::::0;;-1:-1:-1;;;2252:50:28;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2252:50:28;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;2320:9:28::1;:38;2312:74;;;::::0;;-1:-1:-1;;;2312:74:28;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2312:74:28;;;;;;;;;;;;;::::1;;3464:12:::2;:10;:12::i;:::-;3454:6;:22;;3446:71;;;;-1:-1:-1::0;;;3446:71:28::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3532:43;::::0;;3543:10:::2;3532:43:::0;;::::2;::::0;::::2;::::0;;;;;;;;;;;::::2;::::0;;;;;;;::::2;3613:16;::::0;;3627:1:::2;3613:16:::0;;;;;::::2;::::0;;;3586:24:::2;::::0;3613:16:::2;::::0;::::2;3586:24:::0;;3613:16:::2;::::0;::::2;;::::0;-1:-1:-1;3613:16:28::2;3586:43;;3652:11;3639:7;3647:1;3639:10;;;;;;;;;::::0;;::::2;::::0;;;;;:24;-1:-1:-1;;;3686:6:28;:26:::2;3673:7;3681:1;3673:10;;;;;;;;;::::0;;::::2;::::0;;;;;:39;-1:-1:-1;;;3735:6:28;:26:::2;3722:7;3730:1;3722:10;;;;;;;;;;;;;:39;;;::::0;::::2;3771:19;:17;:19::i;:::-;-1:-1:-1::0;;;;;3771:35:28::2;;3807:17;:15;:17::i;:::-;2016:76;3836:7;3771:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;2118:208:1::0;434:22:8;445:10;434;:22::i;:::-;426:50;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;;;;2180:32:1::1;2215:19;:17;:19::i;:::-;2244:21;::::0;::::1;:36:::0;;-1:-1:-1;;;;;;2244:36:1::1;::::0;;2295:24:::1;::::0;2180:54;;-1:-1:-1;2295:24:1::1;::::0;2276:3:::1;::::0;2295:24:::1;486:1:8;2118:208:1:o:0;1287:168:29:-;1339:18;1395:52;1424:22;;;;;;;;;;;;;;;;;1752:212:0;1820:14;1846:12;1888:4;1871:22;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1871:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1861:33;;;;;;1846:48;;1943:4;1937:11;1927:21;;1913:45;;;;:::o;784:452:11:-;887:24;898:12;887:10;:24::i;:::-;879:54;;;;;-1:-1:-1;;;879:54:11;;;;;;;;;;;;-1:-1:-1;;;879:54:11;;;;;;;;;;;;;;;988:12;1002:23;1029:12;-1:-1:-1;;;;;1029:17:11;1047:8;1029:27;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1029:27:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;987:69;;;;1074:7;1090:10;1066:36;;;;;-1:-1:-1;;;1066:36:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1117:17:11;;:21;1113:117;;1173:10;1162:30;;;;;;;;;;;;;;;-1:-1:-1;1162:30:11;1154:65;;;;;-1:-1:-1;;;1154:65:11;;;;;;;;;;;;-1:-1:-1;;;1154:65:11;;;;;;;;;;;;;;361:250:34;422:32;466:16;512:28;;;;;;;;;;;;;;;;;495:46;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;495:46:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;485:57;;;;;;466:76;;587:8;575:20;;561:44;;:::o;161:190:11:-;290:20;336:8;;;161:190::o;1485:129:29:-;1545:62;1578:17;;;;;;;;;;;;;;;;;1597:9;1545:32;:62::i;1985:159::-;2061:76;2094:22;;;;;;;;;;;;;;;;;2126:9;2061:32;:76::i;2951:236:1:-;3020:23;3031:11;3020:10;:23::i;:::-;3019:24;3011:53;;;;;-1:-1:-1;;;3011:53:1;;;;;;;;;;;;-1:-1:-1;;;3011:53:1;;;;;;;;;;;;;;;3074:32;3109:19;:17;:19::i;:::-;-1:-1:-1;;;;;3138:35:1;;;:22;:35;;;;;;;;-1:-1:-1;3138:35:1;;;:42;;-1:-1:-1;;3138:42:1;3176:4;3138:42;;;2951:236::o;1379:192:0:-;1455:12;1497:4;1480:22;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1480:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1470:33;;;;;;1455:48;;1549:5;1543:4;1536:19;1522:43;;;:::o;1577:169::-;1665:18;1678:4;1665:12;:18::i;:::-;:23;1657:47;;;;;-1:-1:-1;;;1657:47:0;;;;;;;;;;;;-1:-1:-1;;;1657:47:0;;;;;;;;;;;;;;;1714:25;1727:4;1733:5;1714:12;:25::i;1024:120:29:-;1069:7;1095:42;1121:15;;;;;;;;;;;;;;;;;1095:25;:42::i;2171:189:0:-;2295:3;2262:21;2278:4;2262:15;:21::i;:::-;-1:-1:-1;;;;;2262:37:0;;2254:61;;;;;-1:-1:-1;;;2254:61:0;;;;;;;;;;;;-1:-1:-1;;;2254:61:0;;;;;;;;;;;;;;5:318:-1;;;155:8;143:10;140:24;137:2;;;-1:-1;;167:12;137:2;202:6;192:8;189:20;186:2;;;-1:-1;;212:12;186:2;-1:-1;;244:31;;;293:25;;;;;-1:-1;131:192::o", - "language": "Solidity", - "natspec": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "offset": [355, 938], - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xCE JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x894ECF04 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xA90E32B8 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA90E32B8 EQ PUSH2 0x241 JUMPI DUP1 PUSH4 0xBB371FDD EQ PUSH2 0x25E JUMPI DUP1 PUSH4 0xE2BBB158 EQ PUSH2 0x27B JUMPI DUP1 PUSH4 0xE37FEC25 EQ PUSH2 0x29E JUMPI PUSH2 0xCE JUMP JUMPDEST DUP1 PUSH4 0x894ECF04 EQ PUSH2 0x1F6 JUMPI DUP1 PUSH4 0x91A66A26 EQ PUSH2 0x213 JUMPI DUP1 PUSH4 0x946BE3ED EQ PUSH2 0x239 JUMPI PUSH2 0xCE JUMP JUMPDEST DUP1 PUSH3 0xF714CE EQ PUSH2 0xD3 JUMPI DUP1 PUSH4 0x1A01590 EQ PUSH2 0x101 JUMPI DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x13B JUMPI DUP1 PUSH4 0x33EEB147 EQ PUSH2 0x158 JUMPI DUP1 PUSH4 0x439FAB91 EQ PUSH2 0x160 JUMPI DUP1 PUSH4 0x84F921CD EQ PUSH2 0x1D0 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2A6 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x127 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x117 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2C6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x151 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2D7 JUMP JUMPDEST PUSH2 0x127 PUSH2 0x2E4 JUMP JUMPDEST PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x176 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x191 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x2E9 JUMP JUMPDEST PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4BC JUMP JUMPDEST PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x20C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x4C5 JUMP JUMPDEST PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x229 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x54D JUMP JUMPDEST PUSH2 0xFF PUSH2 0x556 JUMP JUMPDEST PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x257 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x560 JUMP JUMPDEST PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x274 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x6EB JUMP JUMPDEST PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x291 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x773 JUMP JUMPDEST PUSH2 0xFF PUSH2 0x863 JUMP JUMPDEST PUSH2 0x2B0 DUP3 DUP3 PUSH2 0x86B JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x2BB PUSH2 0xA19 JUMP JUMPDEST DUP3 DUP5 PUSH2 0xA41 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D1 DUP3 PUSH2 0xC82 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2E1 DUP2 CALLER PUSH2 0x2A6 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 DUP1 SLOAD SWAP1 DUP2 ISZERO PUSH2 0x359 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x1112549150D517D0D0531317D11254D0531313D5D151 PUSH1 0x52 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x0 PUSH2 0x365 PUSH2 0x2E4 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 POP DUP2 ADD DUP1 DUP4 LT ISZERO PUSH2 0x3B9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x1253925517D110551057D513D3D7D4D3505313 PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3C7 DUP3 DUP5 DUP7 DUP9 PUSH2 0x1E6A JUMP JUMPDEST PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP CALLDATASIZE PUSH1 0x0 PUSH2 0x3F1 DUP6 DUP3 DUP9 DUP11 PUSH2 0x1E6A JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x3FF DUP3 DUP3 PUSH2 0x2C2 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 PUSH2 0x40E DUP9 DUP8 DUP2 DUP13 PUSH2 0x1E6A JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND ISZERO PUSH2 0x439 JUMPI PUSH2 0x42D DUP6 DUP4 DUP4 PUSH2 0xCB1 JUMP JUMPDEST POP POP POP POP POP POP POP PUSH2 0x2C2 JUMP JUMPDEST PUSH2 0x441 PUSH2 0xF08 JUMP JUMPDEST ISZERO PUSH2 0x495 JUMPI DUP1 ISZERO PUSH2 0x490 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x554E45585045435445445F494E49545F44415441 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x4B1 JUMP JUMPDEST PUSH2 0x49F DUP3 DUP3 PUSH2 0xF23 JUMP JUMPDEST PUSH2 0x4A9 DUP3 DUP3 PUSH2 0xF6C JUMP JUMPDEST PUSH2 0x4B1 PUSH2 0xFAF JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x2E1 DUP2 PUSH2 0x1031 JUMP JUMPDEST PUSH2 0x4CE CALLER PUSH2 0xC82 JUMP JUMPDEST PUSH2 0x511 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4F4E4C595F474F5645524E414E4345 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xA9AEC19EC61C04AE0A4A1498AB6CE04CBD68B3D54C47888A45EB2BD37CAF06BC SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 PUSH2 0x2E1 DUP2 PUSH2 0x117E JUMP JUMPDEST PUSH2 0x2E1 DUP2 PUSH2 0x11A0 JUMP JUMPDEST PUSH2 0x55E PUSH2 0x129D JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x568 PUSH2 0x136A JUMP JUMPDEST ISZERO PUSH2 0x5BA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C325F544F4B454E5F434F4E54524143545F414C52454144595F534554000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP1 PUSH2 0x607 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x4C325F414444524553535F4F55545F4F465F52414E4745 PUSH1 0x48 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH8 0x800000000000011 PUSH1 0xC0 SHL ADD DUP2 LT PUSH2 0x663 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x4C325F414444524553535F4F55545F4F465F52414E4745 PUSH1 0x48 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x66C CALLER PUSH2 0xC82 JUMP JUMPDEST PUSH2 0x6AF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4F4E4C595F474F5645524E414E4345 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x49774A785AFE45B60857497C0AFF8733F202CA7E75329AD6408073564EFEA6DF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 PUSH2 0x2C2 DUP3 PUSH2 0x138D JUMP JUMPDEST PUSH2 0x6F4 CALLER PUSH2 0xC82 JUMP JUMPDEST PUSH2 0x737 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4F4E4C595F474F5645524E414E4345 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xAF474B5AFCF11BD99DC9FC7F499E6AB368D650BF7EF23993F0D61BD9AD762651 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 PUSH2 0x2E1 DUP2 PUSH2 0x13AF JUMP JUMPDEST PUSH2 0x77B PUSH2 0x13D1 JUMP JUMPDEST DUP3 PUSH2 0x784 PUSH2 0xA19 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7E4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ADD GT ISZERO PUSH2 0x847 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x13505617D09053105390D157D15610D151511151 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x859 PUSH2 0x852 PUSH2 0xA19 JUMP JUMPDEST CALLER DUP5 PUSH2 0x13F4 JUMP JUMPDEST PUSH2 0x2C2 DUP3 DUP3 PUSH2 0x15DD JUMP JUMPDEST PUSH2 0x55E PUSH2 0x18CB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE DUP2 MLOAD PUSH32 0xB4214C8C54FC7442F36D3682F59AEBAF09358A4431835B30EFB29D52CF9E1E91 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 PUSH1 0x40 DUP1 MLOAD PUSH1 0x4 DUP1 DUP3 MSTORE PUSH1 0xA0 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 PUSH1 0x20 DUP3 ADD PUSH1 0x80 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x8E1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x904 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 PUSH1 0x80 SHL DUP4 MOD DUP2 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x923 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 PUSH1 0x80 SHL DUP4 DIV DUP2 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x942 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x956 PUSH2 0x1962 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2C9DD5C0 PUSH2 0x96C PUSH2 0x136A JUMP JUMPDEST DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x9C2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x9AA JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x9E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA3C PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4E PUSH1 0x29 SWAP2 CODECOPY PUSH2 0x1981 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xA91 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x1253959053125117D49150D25412515395 PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xAE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAF4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB0A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP3 DUP2 SUB DUP2 LT ISZERO PUSH2 0xB51 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x554E444552464C4F57 PUSH1 0xB8 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP8 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 PUSH2 0xBA6 SWAP1 DUP8 AND DUP3 PUSH2 0x19FE JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC09 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xC1F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP5 DUP4 SUB DUP2 EQ PUSH2 0xC79 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E434F52524543545F414D4F554E545F5452414E5346455252454400000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xC8D PUSH2 0x1BAD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP4 SWAP1 SWAP4 MSTORE POP POP PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0xCC3 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1C5C JUMP JUMPDEST PUSH2 0xD09 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x115250D7D393D517D057D0D3D395149050D5 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x439FAB91 PUSH1 0xE0 SHL DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F SWAP1 SWAP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND SWAP1 SWAP5 ADD DUP3 DUP2 SUB SWAP1 SWAP5 ADD DUP3 MSTORE SWAP3 DUP4 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP10 AND SWAP9 SWAP1 SWAP9 OR DUP9 MSTORE SWAP2 MLOAD DUP3 MLOAD SWAP3 SWAP8 SWAP1 SWAP7 POP DUP7 SWAP6 POP SWAP4 POP SWAP1 SWAP2 POP DUP2 SWAP1 POP DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xDBA JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xD9B JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xE1A JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xE1F JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP2 SWAP1 PUSH2 0xEAF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xE74 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xE5C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xEA1 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP1 MLOAD DUP2 SWAP1 ISZERO PUSH2 0xF00 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0xE74 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xE5C JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xF13 PUSH2 0x1962 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP2 EQ PUSH2 0x2C2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x494C4C4547414C5F444154415F53495A45 PUSH1 0x78 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 DUP4 PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xF7F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP4 POP PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD AND SWAP1 POP PUSH2 0xFA0 DUP3 PUSH2 0x1C62 JUMP JUMPDEST PUSH2 0xFA9 DUP2 PUSH2 0x1C84 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFB9 PUSH2 0x1BAD JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x1013 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x1053149150511657D253925512505312569151 PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 ADD DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE PUSH2 0x2E1 CALLER PUSH2 0x1CA6 JUMP JUMPDEST PUSH2 0x103A CALLER PUSH2 0xC82 JUMP JUMPDEST PUSH2 0x107D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4F4E4C595F474F5645524E414E4345 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ ISZERO PUSH2 0x10D2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x474F5645524E4F525F53454C465F52454D4F5645 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x10DC PUSH2 0x1BAD JUMP JUMPDEST SWAP1 POP PUSH2 0x10E7 DUP3 PUSH2 0xC82 JUMP JUMPDEST PUSH2 0x1127 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x2727AA2FA3A7AB22A92727A9 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP4 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP2 MLOAD SWAP3 DUP4 MSTORE SWAP1 MLOAD PUSH32 0xD75F94825E770B8B512BE8E74759E252AD00E102E38F50CCE2F7C6F868A29599 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH2 0x2E1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F06 PUSH1 0x27 SWAP2 CODECOPY DUP3 PUSH2 0x1D26 JUMP JUMPDEST PUSH2 0x11A9 CALLER PUSH2 0xC82 JUMP JUMPDEST PUSH2 0x11EC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4F4E4C595F474F5645524E414E4345 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x11F6 PUSH2 0x1BAD JUMP JUMPDEST SWAP1 POP PUSH2 0x1201 DUP3 PUSH2 0xC82 JUMP JUMPDEST ISZERO PUSH2 0x1246 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x20A62922A0A22CAFA3A7AB22A92727A9 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0x6166272C8D3F5F579082F2827532732F97195007983BB5B83AC12C56700B01A6 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12A7 PUSH2 0x1BAD JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x130B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F43414E4449444154455F474F5645524E4F52000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD PUSH2 0x1322 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1CA6 JUMP JUMPDEST PUSH1 0x1 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE SWAP1 MLOAD PUSH32 0xCFB473E6C03F9A29DDAF990E736FA3DE5188A0BD85D684F5B6E164EBFBFFF5D2 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA3C PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1EDF PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x1981 JUMP JUMPDEST PUSH2 0x2E1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1EDF PUSH1 0x27 SWAP2 CODECOPY DUP3 PUSH2 0x1DA0 JUMP JUMPDEST PUSH2 0x2E1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F2D PUSH1 0x21 SWAP2 CODECOPY DUP3 PUSH2 0x1D26 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA3C PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F06 PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x1981 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD DUP5 SWAP2 PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x143F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1453 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1469 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP3 DUP2 ADD DUP2 GT ISZERO PUSH2 0x14AF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x4F564552464C4F57 PUSH1 0xC0 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x24 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP1 DUP4 ADD DUP8 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 PUSH2 0x150A SWAP1 DUP8 AND DUP3 PUSH2 0x19FE JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1559 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x156D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1583 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP3 DUP6 ADD DUP2 EQ PUSH2 0xC79 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E434F52524543545F414D4F554E545F5452414E5346455252454400000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x15E5 PUSH2 0x136A JUMP JUMPDEST PUSH2 0x1636 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C325F544F4B454E5F434F4E54524143545F4E4F545F53455400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP1 PUSH2 0x1683 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x4C325F414444524553535F4F55545F4F465F52414E4745 PUSH1 0x48 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH8 0x800000000000011 PUSH1 0xC0 SHL ADD DUP2 LT PUSH2 0x16DF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x4C325F414444524553535F4F55545F4F465F52414E4745 PUSH1 0x48 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x16E7 PUSH2 0x1DF3 JUMP JUMPDEST DUP4 GT ISZERO PUSH2 0x1725 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1EBB PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD DUP5 SWAP1 MSTORE SWAP1 MLOAD PUSH32 0x9DBB0E7DDA3E09710CE75B801ADDC87CF9D9C6C581641B3275FCA409AD086C62 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 PUSH1 0x40 DUP1 MLOAD PUSH1 0x3 DUP1 DUP3 MSTORE PUSH1 0x80 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 PUSH1 0x20 DUP3 ADD DUP4 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP3 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x1795 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 PUSH1 0x80 SHL DUP5 MOD DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x17B4 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 PUSH1 0x80 SHL DUP5 DIV DUP2 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x17D3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x17E7 PUSH2 0x1962 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3E3AA6C5 PUSH2 0x17FD PUSH2 0x136A JUMP JUMPDEST PUSH32 0x2D757788A8D8D6F21D1CD40BCE38A8222D70654214E96FF95D8086E684FBEE5 DUP5 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x187A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1862 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x18B5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF00 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x18D4 CALLER PUSH2 0xC82 JUMP JUMPDEST PUSH2 0x1917 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4F4E4C595F474F5645524E414E4345 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1921 PUSH2 0x1BAD JUMP JUMPDEST PUSH1 0x1 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 POP PUSH32 0x7A8DC7DD7FFFB43C4807438FA62729225156941E641FD877938F4EDADE3429F5 SWAP1 PUSH1 0x0 SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA3C PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E93 PUSH1 0x28 SWAP2 CODECOPY JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x19B7 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1998 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP1 SLOAD SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1A07 DUP3 PUSH2 0x1C5C JUMP JUMPDEST PUSH2 0x1A4C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x4241445F544F4B454E5F41444452455353 PUSH1 0x78 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1A8A JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1A6B JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1AEC JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1AF1 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP2 SWAP1 PUSH2 0x1B44 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0xE74 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xE5C JUMP JUMPDEST POP DUP1 MLOAD ISZERO PUSH2 0xFA9 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1B61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0xFA9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x1513D2D15397D3D4115490551253D397D19052531151 PUSH1 0x52 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1C DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x535441524B4E45545F312E305F474F5645524E414E43455F494E464F00000000 DUP2 MSTORE POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1C18 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1BF9 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP1 SWAP2 POP POP SWAP1 JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x2E1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4E PUSH1 0x29 SWAP2 CODECOPY DUP3 PUSH2 0x1E16 JUMP JUMPDEST PUSH2 0x2E1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E93 PUSH1 0x28 SWAP2 CODECOPY DUP3 PUSH2 0x1E16 JUMP JUMPDEST PUSH2 0x1CAF DUP2 PUSH2 0xC82 JUMP JUMPDEST ISZERO PUSH2 0x1CF4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x20A62922A0A22CAFA3A7AB22A92727A9 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1CFE PUSH2 0x1BAD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP3 SWAP1 SWAP3 MSTORE POP PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1D5B JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1D3C JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP2 DUP2 SSTORE POP POP POP JUMP JUMPDEST PUSH2 0x1DA9 DUP3 PUSH2 0x1981 JUMP JUMPDEST ISZERO PUSH2 0x1DE9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x1053149150511657D4D155 PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2C2 DUP3 DUP3 PUSH2 0x1D26 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA3C PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F2D PUSH1 0x21 SWAP2 CODECOPY PUSH2 0x1981 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E21 DUP4 PUSH2 0x1981 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1DE9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x1053149150511657D4D155 PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP6 GT ISZERO PUSH2 0x1E79 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP4 DUP7 GT ISZERO PUSH2 0x1E85 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP3 ADD SWAP4 SWAP2 SWAP1 SWAP3 SUB SWAP2 POP JUMP INVALID MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F SLOAD 0x4F 0x4B GASLIMIT 0x4E 0x5F TIMESTAMP MSTORE 0x49 DIFFICULTY SELFBALANCE GASLIMIT 0x5F 0x4D GASLIMIT MSTORE8 MSTORE8 COINBASE SELFBALANCE 0x49 0x4E SELFBALANCE 0x5F NUMBER 0x4F 0x4E SLOAD MSTORE COINBASE NUMBER SLOAD SLOAD MSTORE COINBASE 0x4E MSTORE8 CHAINID GASLIMIT MSTORE 0x5F SLOAD 0x4F 0x5F MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F COINBASE 0x4D 0x4F SSTORE 0x4E SLOAD 0x5F GASLIMIT PC NUMBER GASLIMIT GASLIMIT DIFFICULTY GASLIMIT DIFFICULTY MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F SLOAD 0x4F 0x4B GASLIMIT 0x4E 0x5F TIMESTAMP MSTORE 0x49 DIFFICULTY SELFBALANCE GASLIMIT 0x5F 0x4C ORIGIN 0x5F SLOAD 0x4F 0x4B GASLIMIT 0x4E 0x5F NUMBER 0x4F 0x4E SLOAD MSTORE COINBASE NUMBER SLOAD MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F SLOAD 0x4F 0x4B GASLIMIT 0x4E 0x5F TIMESTAMP MSTORE 0x49 DIFFICULTY SELFBALANCE GASLIMIT 0x5F 0x4D COINBASE PC 0x5F SLOAD 0x4F SLOAD COINBASE 0x4C 0x5F TIMESTAMP COINBASE 0x4C COINBASE 0x4E NUMBER GASLIMIT MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F SLOAD 0x4F 0x4B GASLIMIT 0x4E 0x5F TIMESTAMP MSTORE 0x49 DIFFICULTY SELFBALANCE GASLIMIT 0x5F 0x4D COINBASE PC 0x5F DIFFICULTY GASLIMIT POP 0x4F MSTORE8 0x49 SLOAD MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F GASLIMIT MSTORE NUMBER ORIGIN ADDRESS 0x5F SLOAD 0x4F 0x4B GASLIMIT 0x4E 0x5F TIMESTAMP MSTORE 0x49 DIFFICULTY SELFBALANCE GASLIMIT 0x5F SLOAD 0x4F 0x4B GASLIMIT 0x4E 0x5F COINBASE DIFFICULTY DIFFICULTY MSTORE GASLIMIT MSTORE8 MSTORE8 LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 REVERT 0x2F 0xE8 DUP4 0xD7 PUSH17 0xC6733418100EAE3F37E39EE730035D864E 0xE1 NUMBER 0xDF LOG0 LOG2 PUSH12 0x5856E164736F6C634300060C STOP CALLER ", - "pcMap": { - "0": { - "offset": [355, 938], - "op": "PUSH1", - "path": "26", - "value": "0x80" - }, - "2": { - "fn": null, - "offset": [355, 938], - "op": "PUSH1", - "path": "26", - "value": "0x40" - }, - "4": { - "fn": null, - "offset": [355, 938], - "op": "MSTORE", - "path": "26" - }, - "5": { - "fn": null, - "offset": [355, 938], - "op": "CALLVALUE", - "path": "26" - }, - "6": { - "fn": null, - "offset": [355, 938], - "op": "DUP1", - "path": "26" - }, - "7": { - "fn": null, - "offset": [355, 938], - "op": "ISZERO", - "path": "26" - }, - "8": { - "fn": null, - "offset": [355, 938], - "op": "PUSH2", - "path": "26", - "value": "0x10" - }, - "11": { - "fn": null, - "offset": [355, 938], - "op": "JUMPI", - "path": "26" - }, - "12": { - "fn": null, - "offset": [355, 938], - "op": "PUSH1", - "path": "26", - "value": "0x0" - }, - "14": { - "fn": null, - "offset": [355, 938], - "op": "DUP1", - "path": "26" - }, - "15": { - "dev": "Cannot send ether to nonpayable function", - "fn": null, - "offset": [355, 938], - "op": "REVERT", - "path": "26" - }, - "16": { - "fn": null, - "offset": [355, 938], - "op": "JUMPDEST", - "path": "26" - }, - "17": { - "fn": null, - "offset": [355, 938], - "op": "POP", - "path": "26" - }, - "18": { - "fn": null, - "offset": [355, 938], - "op": "PUSH1", - "path": "26", - "value": "0x4" - }, - "20": { - "fn": null, - "offset": [355, 938], - "op": "CALLDATASIZE", - "path": "26" - }, - "21": { - "fn": null, - "offset": [355, 938], - "op": "LT", - "path": "26" - }, - "22": { - "fn": null, - "offset": [355, 938], - "op": "PUSH2", - "path": "26", - "value": "0xCE" - }, - "25": { - "fn": null, - "offset": [355, 938], - "op": "JUMPI", - "path": "26" - }, - "26": { - "fn": null, - "offset": [355, 938], - "op": "PUSH1", - "path": "26", - "value": "0x0" - }, - "28": { - "fn": null, - "offset": [355, 938], - "op": "CALLDATALOAD", - "path": "26" - }, - "29": { - "fn": null, - "offset": [355, 938], - "op": "PUSH1", - "path": "26", - "value": "0xE0" - }, - "31": { - "fn": null, - "offset": [355, 938], - "op": "SHR", - "path": "26" - }, - "32": { - "fn": null, - "offset": [355, 938], - "op": "DUP1", - "path": "26" - }, - "33": { - "fn": null, - "offset": [355, 938], - "op": "PUSH4", - "path": "26", - "value": "0x894ECF04" - }, - "38": { - "fn": null, - "offset": [355, 938], - "op": "GT", - "path": "26" - }, - "39": { - "fn": null, - "offset": [355, 938], - "op": "PUSH2", - "path": "26", - "value": "0x8C" - }, - "42": { - "fn": null, - "offset": [355, 938], - "op": "JUMPI", - "path": "26" - }, - "43": { - "fn": null, - "offset": [355, 938], - "op": "DUP1", - "path": "26" - }, - "44": { - "fn": null, - "offset": [355, 938], - "op": "PUSH4", - "path": "26", - "value": "0xA90E32B8" - }, - "49": { - "fn": null, - "offset": [355, 938], - "op": "GT", - "path": "26" - }, - "50": { - "fn": null, - "offset": [355, 938], - "op": "PUSH2", - "path": "26", - "value": "0x66" - }, - "53": { - "fn": null, - "offset": [355, 938], - "op": "JUMPI", - "path": "26" - }, - "54": { - "fn": null, - "offset": [355, 938], - "op": "DUP1", - "path": "26" - }, - "55": { - "fn": null, - "offset": [355, 938], - "op": "PUSH4", - "path": "26", - "value": "0xA90E32B8" - }, - "60": { - "fn": null, - "offset": [355, 938], - "op": "EQ", - "path": "26" - }, - "61": { - "fn": null, - "offset": [355, 938], - "op": "PUSH2", - "path": "26", - "value": "0x241" - }, - "64": { - "fn": null, - "offset": [355, 938], - "op": "JUMPI", - "path": "26" - }, - "65": { - "fn": null, - "offset": [355, 938], - "op": "DUP1", - "path": "26" - }, - "66": { - "fn": null, - "offset": [355, 938], - "op": "PUSH4", - "path": "26", - "value": "0xBB371FDD" - }, - "71": { - "fn": null, - "offset": [355, 938], - "op": "EQ", - "path": "26" - }, - "72": { - "fn": null, - "offset": [355, 938], - "op": "PUSH2", - "path": "26", - "value": "0x25E" - }, - "75": { - "fn": null, - "offset": [355, 938], - "op": "JUMPI", - "path": "26" - }, - "76": { - "fn": null, - "offset": [355, 938], - "op": "DUP1", - "path": "26" - }, - "77": { - "fn": null, - "offset": [355, 938], - "op": "PUSH4", - "path": "26", - "value": "0xE2BBB158" - }, - "82": { - "fn": null, - "offset": [355, 938], - "op": "EQ", - "path": "26" - }, - "83": { - "fn": null, - "offset": [355, 938], - "op": "PUSH2", - "path": "26", - "value": "0x27B" - }, - "86": { - "fn": null, - "offset": [355, 938], - "op": "JUMPI", - "path": "26" - }, - "87": { - "fn": null, - "offset": [355, 938], - "op": "DUP1", - "path": "26" - }, - "88": { - "fn": null, - "offset": [355, 938], - "op": "PUSH4", - "path": "26", - "value": "0xE37FEC25" - }, - "93": { - "fn": null, - "offset": [355, 938], - "op": "EQ", - "path": "26" - }, - "94": { - "fn": null, - "offset": [355, 938], - "op": "PUSH2", - "path": "26", - "value": "0x29E" - }, - "97": { - "fn": null, - "offset": [355, 938], - "op": "JUMPI", - "path": "26" - }, - "98": { - "fn": null, - "offset": [355, 938], - "op": "PUSH2", - "path": "26", - "value": "0xCE" - }, - "101": { - "fn": null, - "offset": [355, 938], - "op": "JUMP", - "path": "26" - }, - "102": { - "fn": null, - "offset": [355, 938], - "op": "JUMPDEST", - "path": "26" - }, - "103": { - "fn": null, - "offset": [355, 938], - "op": "DUP1", - "path": "26" - }, - "104": { - "fn": null, - "offset": [355, 938], - "op": "PUSH4", - "path": "26", - "value": "0x894ECF04" - }, - "109": { - "fn": null, - "offset": [355, 938], - "op": "EQ", - "path": "26" - }, - "110": { - "fn": null, - "offset": [355, 938], - "op": "PUSH2", - "path": "26", - "value": "0x1F6" - }, - "113": { - "fn": null, - "offset": [355, 938], - "op": "JUMPI", - "path": "26" - }, - "114": { - "fn": null, - "offset": [355, 938], - "op": "DUP1", - "path": "26" - }, - "115": { - "fn": null, - "offset": [355, 938], - "op": "PUSH4", - "path": "26", - "value": "0x91A66A26" - }, - "120": { - "fn": null, - "offset": [355, 938], - "op": "EQ", - "path": "26" - }, - "121": { - "fn": null, - "offset": [355, 938], - "op": "PUSH2", - "path": "26", - "value": "0x213" - }, - "124": { - "fn": null, - "offset": [355, 938], - "op": "JUMPI", - "path": "26" - }, - "125": { - "fn": null, - "offset": [355, 938], - "op": "DUP1", - "path": "26" - }, - "126": { - "fn": null, - "offset": [355, 938], - "op": "PUSH4", - "path": "26", - "value": "0x946BE3ED" - }, - "131": { - "fn": null, - "offset": [355, 938], - "op": "EQ", - "path": "26" - }, - "132": { - "fn": null, - "offset": [355, 938], - "op": "PUSH2", - "path": "26", - "value": "0x239" - }, - "135": { - "fn": null, - "offset": [355, 938], - "op": "JUMPI", - "path": "26" - }, - "136": { - "fn": null, - "offset": [355, 938], - "op": "PUSH2", - "path": "26", - "value": "0xCE" - }, - "139": { - "fn": null, - "offset": [355, 938], - "op": "JUMP", - "path": "26" - }, - "140": { - "fn": null, - "offset": [355, 938], - "op": "JUMPDEST", - "path": "26" - }, - "141": { - "fn": null, - "offset": [355, 938], - "op": "DUP1", - "path": "26" - }, - "142": { - "fn": null, - "offset": [355, 938], - "op": "PUSH3", - "path": "26", - "value": "0xF714CE" - }, - "146": { - "fn": null, - "offset": [355, 938], - "op": "EQ", - "path": "26" - }, - "147": { - "fn": null, - "offset": [355, 938], - "op": "PUSH2", - "path": "26", - "value": "0xD3" - }, - "150": { - "fn": null, - "offset": [355, 938], - "op": "JUMPI", - "path": "26" - }, - "151": { - "fn": null, - "offset": [355, 938], - "op": "DUP1", - "path": "26" - }, - "152": { - "fn": null, - "offset": [355, 938], - "op": "PUSH4", - "path": "26", - "value": "0x1A01590" - }, - "157": { - "fn": null, - "offset": [355, 938], - "op": "EQ", - "path": "26" - }, - "158": { - "fn": null, - "offset": [355, 938], - "op": "PUSH2", - "path": "26", - "value": "0x101" - }, - "161": { - "fn": null, - "offset": [355, 938], - "op": "JUMPI", - "path": "26" - }, - "162": { - "fn": null, - "offset": [355, 938], - "op": "DUP1", - "path": "26" - }, - "163": { - "fn": null, - "offset": [355, 938], - "op": "PUSH4", - "path": "26", - "value": "0x2E1A7D4D" - }, - "168": { - "fn": null, - "offset": [355, 938], - "op": "EQ", - "path": "26" - }, - "169": { - "fn": null, - "offset": [355, 938], - "op": "PUSH2", - "path": "26", - "value": "0x13B" - }, - "172": { - "fn": null, - "offset": [355, 938], - "op": "JUMPI", - "path": "26" - }, - "173": { - "fn": null, - "offset": [355, 938], - "op": "DUP1", - "path": "26" - }, - "174": { - "fn": null, - "offset": [355, 938], - "op": "PUSH4", - "path": "26", - "value": "0x33EEB147" - }, - "179": { - "fn": null, - "offset": [355, 938], - "op": "EQ", - "path": "26" - }, - "180": { - "fn": null, - "offset": [355, 938], - "op": "PUSH2", - "path": "26", - "value": "0x158" - }, - "183": { - "fn": null, - "offset": [355, 938], - "op": "JUMPI", - "path": "26" - }, - "184": { - "fn": null, - "offset": [355, 938], - "op": "DUP1", - "path": "26" - }, - "185": { - "fn": null, - "offset": [355, 938], - "op": "PUSH4", - "path": "26", - "value": "0x439FAB91" - }, - "190": { - "fn": null, - "offset": [355, 938], - "op": "EQ", - "path": "26" - }, - "191": { - "fn": null, - "offset": [355, 938], - "op": "PUSH2", - "path": "26", - "value": "0x160" - }, - "194": { - "fn": null, - "offset": [355, 938], - "op": "JUMPI", - "path": "26" - }, - "195": { - "fn": null, - "offset": [355, 938], - "op": "DUP1", - "path": "26" - }, - "196": { - "fn": null, - "offset": [355, 938], - "op": "PUSH4", - "path": "26", - "value": "0x84F921CD" - }, - "201": { - "fn": null, - "offset": [355, 938], - "op": "EQ", - "path": "26" - }, - "202": { - "fn": null, - "offset": [355, 938], - "op": "PUSH2", - "path": "26", - "value": "0x1D0" - }, - "205": { - "fn": null, - "offset": [355, 938], - "op": "JUMPI", - "path": "26" - }, - "206": { - "fn": null, - "offset": [355, 938], - "op": "JUMPDEST", - "path": "26" - }, - "207": { - "fn": null, - "offset": [355, 938], - "op": "PUSH1", - "path": "26", - "value": "0x0" - }, - "209": { - "fn": null, - "offset": [355, 938], - "op": "DUP1", - "path": "26" - }, - "210": { - "first_revert": true, - "fn": null, - "offset": [355, 938], - "op": "REVERT", - "path": "26" - }, - "211": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [751, 936], - "op": "JUMPDEST", - "path": "26" - }, - "212": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [751, 936], - "op": "PUSH2", - "path": "26", - "value": "0xFF" - }, - "215": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [751, 936], - "op": "PUSH1", - "path": "26", - "value": "0x4" - }, - "217": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [751, 936], - "op": "DUP1", - "path": "26" - }, - "218": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [751, 936], - "op": "CALLDATASIZE", - "path": "26" - }, - "219": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [751, 936], - "op": "SUB", - "path": "26" - }, - "220": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [751, 936], - "op": "PUSH1", - "path": "26", - "value": "0x40" - }, - "222": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [751, 936], - "op": "DUP2", - "path": "26" - }, - "223": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [751, 936], - "op": "LT", - "path": "26" - }, - "224": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [751, 936], - "op": "ISZERO", - "path": "26" - }, - "225": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [751, 936], - "op": "PUSH2", - "path": "26", - "value": "0xE9" - }, - "228": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [751, 936], - "op": "JUMPI", - "path": "26" - }, - "229": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [751, 936], - "op": "PUSH1", - "path": "26", - "value": "0x0" - }, - "231": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [751, 936], - "op": "DUP1", - "path": "26" - }, - "232": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [751, 936], - "op": "REVERT", - "path": "26" - }, - "233": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [751, 936], - "op": "JUMPDEST", - "path": "26" - }, - "234": { - "op": "POP" - }, - "235": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [751, 936], - "op": "DUP1", - "path": "26" - }, - "236": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [751, 936], - "op": "CALLDATALOAD", - "path": "26" - }, - "237": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [751, 936], - "op": "SWAP1", - "path": "26" - }, - "238": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [751, 936], - "op": "PUSH1", - "path": "26", - "value": "0x20" - }, - "240": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [751, 936], - "op": "ADD", - "path": "26" - }, - "241": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [751, 936], - "op": "CALLDATALOAD", - "path": "26" - }, - "242": { - "op": "PUSH1", - "value": "0x1" - }, - "244": { - "op": "PUSH1", - "value": "0x1" - }, - "246": { - "op": "PUSH1", - "value": "0xA0" - }, - "248": { - "op": "SHL" - }, - "249": { - "op": "SUB" - }, - "250": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [751, 936], - "op": "AND", - "path": "26" - }, - "251": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [751, 936], - "op": "PUSH2", - "path": "26", - "value": "0x2A6" - }, - "254": { - "fn": "StarknetERC20Bridge.withdraw", - "jump": "i", - "offset": [751, 936], - "op": "JUMP", - "path": "26" - }, - "255": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [751, 936], - "op": "JUMPDEST", - "path": "26" - }, - "256": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [751, 936], - "op": "STOP", - "path": "26" - }, - "257": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "JUMPDEST", - "path": "34" - }, - "258": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "PUSH2", - "path": "34", - "value": "0x127" - }, - "261": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "PUSH1", - "path": "34", - "value": "0x4" - }, - "263": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "DUP1", - "path": "34" - }, - "264": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "CALLDATASIZE", - "path": "34" - }, - "265": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "SUB", - "path": "34" - }, - "266": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "PUSH1", - "path": "34", - "value": "0x20" - }, - "268": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "DUP2", - "path": "34" - }, - "269": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "LT", - "path": "34" - }, - "270": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "ISZERO", - "path": "34" - }, - "271": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "PUSH2", - "path": "34", - "value": "0x117" - }, - "274": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "JUMPI", - "path": "34" - }, - "275": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "PUSH1", - "path": "34", - "value": "0x0" - }, - "277": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "DUP1", - "path": "34" - }, - "278": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "REVERT", - "path": "34" - }, - "279": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "JUMPDEST", - "path": "34" - }, - "280": { - "op": "POP" - }, - "281": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "CALLDATALOAD", - "path": "34" - }, - "282": { - "op": "PUSH1", - "value": "0x1" - }, - "284": { - "op": "PUSH1", - "value": "0x1" - }, - "286": { - "op": "PUSH1", - "value": "0xA0" - }, - "288": { - "op": "SHL" - }, - "289": { - "op": "SUB" - }, - "290": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "AND", - "path": "34" - }, - "291": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "PUSH2", - "path": "34", - "value": "0x2C6" - }, - "294": { - "fn": "StarknetGovernance.starknetIsGovernor", - "jump": "i", - "offset": [617, 744], - "op": "JUMP", - "path": "34" - }, - "295": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "JUMPDEST", - "path": "34" - }, - "296": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "PUSH1", - "path": "34", - "value": "0x40" - }, - "298": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "DUP1", - "path": "34" - }, - "299": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "MLOAD", - "path": "34" - }, - "300": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "SWAP2", - "path": "34" - }, - "301": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "ISZERO", - "path": "34" - }, - "302": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "ISZERO", - "path": "34" - }, - "303": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "DUP3", - "path": "34" - }, - "304": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "MSTORE", - "path": "34" - }, - "305": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "MLOAD", - "path": "34" - }, - "306": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "SWAP1", - "path": "34" - }, - "307": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "DUP2", - "path": "34" - }, - "308": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "SWAP1", - "path": "34" - }, - "309": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "SUB", - "path": "34" - }, - "310": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "PUSH1", - "path": "34", - "value": "0x20" - }, - "312": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "ADD", - "path": "34" - }, - "313": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "SWAP1", - "path": "34" - }, - "314": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "RETURN", - "path": "34" - }, - "315": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "JUMPDEST", - "path": "28" - }, - "316": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "PUSH2", - "path": "28", - "value": "0xFF" - }, - "319": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "321": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "DUP1", - "path": "28" - }, - "322": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "CALLDATASIZE", - "path": "28" - }, - "323": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "SUB", - "path": "28" - }, - "324": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "326": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "DUP2", - "path": "28" - }, - "327": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "LT", - "path": "28" - }, - "328": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "ISZERO", - "path": "28" - }, - "329": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "PUSH2", - "path": "28", - "value": "0x151" - }, - "332": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "JUMPI", - "path": "28" - }, - "333": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "335": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "DUP1", - "path": "28" - }, - "336": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "REVERT", - "path": "28" - }, - "337": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "JUMPDEST", - "path": "28" - }, - "338": { - "op": "POP" - }, - "339": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "CALLDATALOAD", - "path": "28" - }, - "340": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "PUSH2", - "path": "28", - "value": "0x2D7" - }, - "343": { - "fn": "StarknetTokenBridge.withdraw", - "jump": "i", - "offset": [4376, 4464], - "op": "JUMP", - "path": "28" - }, - "344": { - "fn": "ProxySupport.isFrozen", - "offset": [775, 861], - "op": "JUMPDEST", - "path": "10" - }, - "345": { - "fn": "ProxySupport.isFrozen", - "offset": [775, 861], - "op": "PUSH2", - "path": "10", - "value": "0x127" - }, - "348": { - "fn": "ProxySupport.isFrozen", - "offset": [775, 861], - "op": "PUSH2", - "path": "10", - "value": "0x2E4" - }, - "351": { - "fn": "ProxySupport.isFrozen", - "jump": "i", - "offset": [775, 861], - "op": "JUMP", - "path": "10" - }, - "352": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "JUMPDEST", - "path": "10" - }, - "353": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH2", - "path": "10", - "value": "0xFF" - }, - "356": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH1", - "path": "10", - "value": "0x4" - }, - "358": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP1", - "path": "10" - }, - "359": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "CALLDATASIZE", - "path": "10" - }, - "360": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "SUB", - "path": "10" - }, - "361": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "363": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP2", - "path": "10" - }, - "364": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "LT", - "path": "10" - }, - "365": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "ISZERO", - "path": "10" - }, - "366": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH2", - "path": "10", - "value": "0x176" - }, - "369": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "JUMPI", - "path": "10" - }, - "370": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "372": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP1", - "path": "10" - }, - "373": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "REVERT", - "path": "10" - }, - "374": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "JUMPDEST", - "path": "10" - }, - "375": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP2", - "path": "10" - }, - "376": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "ADD", - "path": "10" - }, - "377": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "SWAP1", - "path": "10" - }, - "378": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "380": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP2", - "path": "10" - }, - "381": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "ADD", - "path": "10" - }, - "382": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP2", - "path": "10" - }, - "383": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "CALLDATALOAD", - "path": "10" - }, - "384": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH5", - "path": "10", - "value": "0x100000000" - }, - "390": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP2", - "path": "10" - }, - "391": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "GT", - "path": "10" - }, - "392": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "ISZERO", - "path": "10" - }, - "393": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH2", - "path": "10", - "value": "0x191" - }, - "396": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "JUMPI", - "path": "10" - }, - "397": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "399": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP1", - "path": "10" - }, - "400": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "REVERT", - "path": "10" - }, - "401": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "JUMPDEST", - "path": "10" - }, - "402": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP3", - "path": "10" - }, - "403": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "ADD", - "path": "10" - }, - "404": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP4", - "path": "10" - }, - "405": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "407": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP3", - "path": "10" - }, - "408": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "ADD", - "path": "10" - }, - "409": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "GT", - "path": "10" - }, - "410": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "ISZERO", - "path": "10" - }, - "411": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH2", - "path": "10", - "value": "0x1A3" - }, - "414": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "JUMPI", - "path": "10" - }, - "415": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "417": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP1", - "path": "10" - }, - "418": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "REVERT", - "path": "10" - }, - "419": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "JUMPDEST", - "path": "10" - }, - "420": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP1", - "path": "10" - }, - "421": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "CALLDATALOAD", - "path": "10" - }, - "422": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "SWAP1", - "path": "10" - }, - "423": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "425": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "ADD", - "path": "10" - }, - "426": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "SWAP2", - "path": "10" - }, - "427": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP5", - "path": "10" - }, - "428": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH1", - "path": "10", - "value": "0x1" - }, - "430": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP4", - "path": "10" - }, - "431": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "MUL", - "path": "10" - }, - "432": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP5", - "path": "10" - }, - "433": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "ADD", - "path": "10" - }, - "434": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "GT", - "path": "10" - }, - "435": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH5", - "path": "10", - "value": "0x100000000" - }, - "441": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP4", - "path": "10" - }, - "442": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "GT", - "path": "10" - }, - "443": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "OR", - "path": "10" - }, - "444": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "ISZERO", - "path": "10" - }, - "445": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH2", - "path": "10", - "value": "0x1C5" - }, - "448": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "JUMPI", - "path": "10" - }, - "449": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "451": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP1", - "path": "10" - }, - "452": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "REVERT", - "path": "10" - }, - "453": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "JUMPDEST", - "path": "10" - }, - "454": { - "op": "POP" - }, - "455": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "SWAP1", - "path": "10" - }, - "456": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "SWAP3", - "path": "10" - }, - "457": { - "op": "POP" - }, - "458": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "SWAP1", - "path": "10" - }, - "459": { - "op": "POP" - }, - "460": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH2", - "path": "10", - "value": "0x2E9" - }, - "463": { - "fn": "ProxySupport.initialize", - "jump": "i", - "offset": [1483, 2511], - "op": "JUMP", - "path": "10" - }, - "464": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "JUMPDEST", - "path": "34" - }, - "465": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "PUSH2", - "path": "34", - "value": "0xFF" - }, - "468": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "PUSH1", - "path": "34", - "value": "0x4" - }, - "470": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "DUP1", - "path": "34" - }, - "471": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "CALLDATASIZE", - "path": "34" - }, - "472": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "SUB", - "path": "34" - }, - "473": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "PUSH1", - "path": "34", - "value": "0x20" - }, - "475": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "DUP2", - "path": "34" - }, - "476": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "LT", - "path": "34" - }, - "477": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "ISZERO", - "path": "34" - }, - "478": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "PUSH2", - "path": "34", - "value": "0x1E6" - }, - "481": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "JUMPI", - "path": "34" - }, - "482": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "PUSH1", - "path": "34", - "value": "0x0" - }, - "484": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "DUP1", - "path": "34" - }, - "485": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "REVERT", - "path": "34" - }, - "486": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "JUMPDEST", - "path": "34" - }, - "487": { - "op": "POP" - }, - "488": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "CALLDATALOAD", - "path": "34" - }, - "489": { - "op": "PUSH1", - "value": "0x1" - }, - "491": { - "op": "PUSH1", - "value": "0x1" - }, - "493": { - "op": "PUSH1", - "value": "0xA0" - }, - "495": { - "op": "SHL" - }, - "496": { - "op": "SUB" - }, - "497": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "AND", - "path": "34" - }, - "498": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "PUSH2", - "path": "34", - "value": "0x4BC" - }, - "501": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "jump": "i", - "offset": [872, 992], - "op": "JUMP", - "path": "34" - }, - "502": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "JUMPDEST", - "path": "28" - }, - "503": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "PUSH2", - "path": "28", - "value": "0xFF" - }, - "506": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "508": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "DUP1", - "path": "28" - }, - "509": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "CALLDATASIZE", - "path": "28" - }, - "510": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "SUB", - "path": "28" - }, - "511": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "513": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "DUP2", - "path": "28" - }, - "514": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "LT", - "path": "28" - }, - "515": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "ISZERO", - "path": "28" - }, - "516": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "PUSH2", - "path": "28", - "value": "0x20C" - }, - "519": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "JUMPI", - "path": "28" - }, - "520": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "522": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "DUP1", - "path": "28" - }, - "523": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "REVERT", - "path": "28" - }, - "524": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "JUMPDEST", - "path": "28" - }, - "525": { - "op": "POP" - }, - "526": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "CALLDATALOAD", - "path": "28" - }, - "527": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "PUSH2", - "path": "28", - "value": "0x4C5" - }, - "530": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "jump": "i", - "offset": [2946, 3128], - "op": "JUMP", - "path": "28" - }, - "531": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "JUMPDEST", - "path": "34" - }, - "532": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "PUSH2", - "path": "34", - "value": "0xFF" - }, - "535": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "PUSH1", - "path": "34", - "value": "0x4" - }, - "537": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "DUP1", - "path": "34" - }, - "538": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "CALLDATASIZE", - "path": "34" - }, - "539": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "SUB", - "path": "34" - }, - "540": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "PUSH1", - "path": "34", - "value": "0x20" - }, - "542": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "DUP2", - "path": "34" - }, - "543": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "LT", - "path": "34" - }, - "544": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "ISZERO", - "path": "34" - }, - "545": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "PUSH2", - "path": "34", - "value": "0x229" - }, - "548": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "JUMPI", - "path": "34" - }, - "549": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "PUSH1", - "path": "34", - "value": "0x0" - }, - "551": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "DUP1", - "path": "34" - }, - "552": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "REVERT", - "path": "34" - }, - "553": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "JUMPDEST", - "path": "34" - }, - "554": { - "op": "POP" - }, - "555": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "CALLDATALOAD", - "path": "34" - }, - "556": { - "op": "PUSH1", - "value": "0x1" - }, - "558": { - "op": "PUSH1", - "value": "0x1" - }, - "560": { - "op": "PUSH1", - "value": "0xA0" - }, - "562": { - "op": "SHL" - }, - "563": { - "op": "SUB" - }, - "564": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "AND", - "path": "34" - }, - "565": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "PUSH2", - "path": "34", - "value": "0x54D" - }, - "568": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "jump": "i", - "offset": [750, 866], - "op": "JUMP", - "path": "34" - }, - "569": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "offset": [998, 1078], - "op": "JUMPDEST", - "path": "34" - }, - "570": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "offset": [998, 1078], - "op": "PUSH2", - "path": "34", - "value": "0xFF" - }, - "573": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "offset": [998, 1078], - "op": "PUSH2", - "path": "34", - "value": "0x556" - }, - "576": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "jump": "i", - "offset": [998, 1078], - "op": "JUMP", - "path": "34" - }, - "577": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "JUMPDEST", - "path": "28" - }, - "578": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "PUSH2", - "path": "28", - "value": "0xFF" - }, - "581": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "583": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "DUP1", - "path": "28" - }, - "584": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "CALLDATASIZE", - "path": "28" - }, - "585": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "SUB", - "path": "28" - }, - "586": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "588": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "DUP2", - "path": "28" - }, - "589": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "LT", - "path": "28" - }, - "590": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "ISZERO", - "path": "28" - }, - "591": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "PUSH2", - "path": "28", - "value": "0x257" - }, - "594": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "JUMPI", - "path": "28" - }, - "595": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "597": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "DUP1", - "path": "28" - }, - "598": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "REVERT", - "path": "28" - }, - "599": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "JUMPDEST", - "path": "28" - }, - "600": { - "op": "POP" - }, - "601": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "CALLDATALOAD", - "path": "28" - }, - "602": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "PUSH2", - "path": "28", - "value": "0x560" - }, - "605": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "jump": "i", - "offset": [2665, 2940], - "op": "JUMP", - "path": "28" - }, - "606": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "JUMPDEST", - "path": "28" - }, - "607": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "PUSH2", - "path": "28", - "value": "0xFF" - }, - "610": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "612": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "DUP1", - "path": "28" - }, - "613": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "CALLDATASIZE", - "path": "28" - }, - "614": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "SUB", - "path": "28" - }, - "615": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "617": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "DUP2", - "path": "28" - }, - "618": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "LT", - "path": "28" - }, - "619": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "ISZERO", - "path": "28" - }, - "620": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "PUSH2", - "path": "28", - "value": "0x274" - }, - "623": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "JUMPI", - "path": "28" - }, - "624": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "626": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "DUP1", - "path": "28" - }, - "627": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "REVERT", - "path": "28" - }, - "628": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "JUMPDEST", - "path": "28" - }, - "629": { - "op": "POP" - }, - "630": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "CALLDATALOAD", - "path": "28" - }, - "631": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "PUSH2", - "path": "28", - "value": "0x6EB" - }, - "634": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "jump": "i", - "offset": [3134, 3286], - "op": "JUMP", - "path": "28" - }, - "635": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [413, 745], - "op": "JUMPDEST", - "path": "26" - }, - "636": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [413, 745], - "op": "PUSH2", - "path": "26", - "value": "0xFF" - }, - "639": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [413, 745], - "op": "PUSH1", - "path": "26", - "value": "0x4" - }, - "641": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [413, 745], - "op": "DUP1", - "path": "26" - }, - "642": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [413, 745], - "op": "CALLDATASIZE", - "path": "26" - }, - "643": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [413, 745], - "op": "SUB", - "path": "26" - }, - "644": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [413, 745], - "op": "PUSH1", - "path": "26", - "value": "0x40" - }, - "646": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [413, 745], - "op": "DUP2", - "path": "26" - }, - "647": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [413, 745], - "op": "LT", - "path": "26" - }, - "648": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [413, 745], - "op": "ISZERO", - "path": "26" - }, - "649": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [413, 745], - "op": "PUSH2", - "path": "26", - "value": "0x291" - }, - "652": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [413, 745], - "op": "JUMPI", - "path": "26" - }, - "653": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [413, 745], - "op": "PUSH1", - "path": "26", - "value": "0x0" - }, - "655": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [413, 745], - "op": "DUP1", - "path": "26" - }, - "656": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [413, 745], - "op": "REVERT", - "path": "26" - }, - "657": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [413, 745], - "op": "JUMPDEST", - "path": "26" - }, - "658": { - "op": "POP" - }, - "659": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [413, 745], - "op": "DUP1", - "path": "26" - }, - "660": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [413, 745], - "op": "CALLDATALOAD", - "path": "26" - }, - "661": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [413, 745], - "op": "SWAP1", - "path": "26" - }, - "662": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [413, 745], - "op": "PUSH1", - "path": "26", - "value": "0x20" - }, - "664": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [413, 745], - "op": "ADD", - "path": "26" - }, - "665": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [413, 745], - "op": "CALLDATALOAD", - "path": "26" - }, - "666": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [413, 745], - "op": "PUSH2", - "path": "26", - "value": "0x773" - }, - "669": { - "fn": "StarknetERC20Bridge.deposit", - "jump": "i", - "offset": [413, 745], - "op": "JUMP", - "path": "26" - }, - "670": { - "fn": "StarknetGovernance.starknetCancelNomination", - "offset": [1084, 1164], - "op": "JUMPDEST", - "path": "34" - }, - "671": { - "fn": "StarknetGovernance.starknetCancelNomination", - "offset": [1084, 1164], - "op": "PUSH2", - "path": "34", - "value": "0xFF" - }, - "674": { - "fn": "StarknetGovernance.starknetCancelNomination", - "offset": [1084, 1164], - "op": "PUSH2", - "path": "34", - "value": "0x863" - }, - "677": { - "fn": "StarknetGovernance.starknetCancelNomination", - "jump": "i", - "offset": [1084, 1164], - "op": "JUMP", - "path": "34" - }, - "678": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [751, 936], - "op": "JUMPDEST", - "path": "26" - }, - "679": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [830, 863], - "op": "PUSH2", - "path": "26", - "statement": 0, - "value": "0x2B0" - }, - "682": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [845, 851], - "op": "DUP3", - "path": "26" - }, - "683": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [853, 862], - "op": "DUP3", - "path": "26" - }, - "684": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [830, 844], - "op": "PUSH2", - "path": "26", - "value": "0x86B" - }, - "687": { - "fn": "StarknetERC20Bridge.withdraw", - "jump": "i", - "offset": [830, 863], - "op": "JUMP", - "path": "26" - }, - "688": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [830, 863], - "op": "JUMPDEST", - "path": "26" - }, - "689": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [873, 929], - "op": "PUSH2", - "path": "26", - "statement": 1, - "value": "0x2C2" - }, - "692": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [895, 909], - "op": "PUSH2", - "path": "26", - "value": "0x2BB" - }, - "695": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [895, 907], - "op": "PUSH2", - "path": "26", - "value": "0xA19" - }, - "698": { - "fn": "StarknetERC20Bridge.withdraw", - "jump": "i", - "offset": [895, 909], - "op": "JUMP", - "path": "26" - }, - "699": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [895, 909], - "op": "JUMPDEST", - "path": "26" - }, - "700": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [911, 920], - "op": "DUP3", - "path": "26" - }, - "701": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [922, 928], - "op": "DUP5", - "path": "26" - }, - "702": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [873, 894], - "op": "PUSH2", - "path": "26", - "value": "0xA41" - }, - "705": { - "fn": "StarknetERC20Bridge.withdraw", - "jump": "i", - "offset": [873, 929], - "op": "JUMP", - "path": "26" - }, - "706": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [873, 929], - "op": "JUMPDEST", - "path": "26" - }, - "707": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [751, 936], - "op": "POP", - "path": "26" - }, - "708": { - "fn": "StarknetERC20Bridge.withdraw", - "offset": [751, 936], - "op": "POP", - "path": "26" - }, - "709": { - "fn": "StarknetERC20Bridge.withdraw", - "jump": "o", - "offset": [751, 936], - "op": "JUMP", - "path": "26" - }, - "710": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "JUMPDEST", - "path": "34" - }, - "711": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [690, 694], - "op": "PUSH1", - "path": "34", - "value": "0x0" - }, - "713": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [713, 737], - "op": "PUSH2", - "path": "34", - "statement": 2, - "value": "0x2D1" - }, - "716": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [724, 736], - "op": "DUP3", - "path": "34" - }, - "717": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [713, 723], - "op": "PUSH2", - "path": "34", - "value": "0xC82" - }, - "720": { - "fn": "StarknetGovernance.starknetIsGovernor", - "jump": "i", - "offset": [713, 737], - "op": "JUMP", - "path": "34" - }, - "721": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [713, 737], - "op": "JUMPDEST", - "path": "34" - }, - "722": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [706, 737], - "op": "SWAP3", - "path": "34" - }, - "723": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "SWAP2", - "path": "34" - }, - "724": { - "op": "POP" - }, - "725": { - "op": "POP" - }, - "726": { - "fn": "StarknetGovernance.starknetIsGovernor", - "jump": "o", - "offset": [617, 744], - "op": "JUMP", - "path": "34" - }, - "727": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "JUMPDEST", - "path": "28" - }, - "728": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4429, 4457], - "op": "PUSH2", - "path": "28", - "statement": 3, - "value": "0x2E1" - }, - "731": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4438, 4444], - "op": "DUP2", - "path": "28" - }, - "732": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4446, 4456], - "op": "CALLER", - "path": "28" - }, - "733": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4429, 4437], - "op": "PUSH2", - "path": "28", - "value": "0x2A6" - }, - "736": { - "fn": "StarknetTokenBridge.withdraw", - "jump": "i", - "offset": [4429, 4457], - "op": "JUMP", - "path": "28" - }, - "737": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4429, 4457], - "op": "JUMPDEST", - "path": "28" - }, - "738": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "POP", - "path": "28" - }, - "739": { - "fn": "StarknetTokenBridge.withdraw", - "jump": "o", - "offset": [4376, 4464], - "op": "JUMP", - "path": "28" - }, - "740": { - "fn": "ProxySupport.isFrozen", - "offset": [775, 861], - "op": "JUMPDEST", - "path": "10" - }, - "741": { - "fn": "ProxySupport.isFrozen", - "offset": [826, 830], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "743": { - "fn": "ProxySupport.isFrozen", - "offset": [775, 861], - "op": "SWAP1", - "path": "10" - }, - "744": { - "fn": "ProxySupport.isFrozen", - "jump": "o", - "offset": [775, 861], - "op": "JUMP", - "path": "10" - }, - "745": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "JUMPDEST", - "path": "10" - }, - "746": { - "offset": [1052, 1073], - "op": "PUSH32", - "path": "5", - "value": "0x0" - }, - "779": { - "offset": [1132, 1143], - "op": "DUP1", - "path": "5" - }, - "780": { - "fn": "ProxySupport.initialize", - "offset": [1132, 1143], - "op": "SLOAD", - "path": "5" - }, - "781": { - "fn": "ProxySupport.initialize", - "offset": [1132, 1143], - "op": "SWAP1", - "path": "5" - }, - "782": { - "offset": [1178, 1197], - "op": "DUP2", - "path": "5" - }, - "783": { - "branch": 92, - "fn": "ProxySupport.initialize", - "offset": [1178, 1197], - "op": "ISZERO", - "path": "5" - }, - "784": { - "offset": [1170, 1224], - "op": "PUSH2", - "path": "5", - "value": "0x359" - }, - "787": { - "branch": 92, - "offset": [1170, 1224], - "op": "JUMPI", - "path": "5" - }, - "788": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "PUSH1", - "path": "5", - "value": "0x40" - }, - "790": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "DUP1", - "path": "5" - }, - "791": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "MLOAD", - "path": "5" - }, - "792": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "796": { - "op": "PUSH1", - "value": "0xE5" - }, - "798": { - "op": "SHL" - }, - "799": { - "offset": [1170, 1224], - "op": "DUP2", - "path": "5" - }, - "800": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "MSTORE", - "path": "5" - }, - "801": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "PUSH1", - "path": "5", - "value": "0x20" - }, - "803": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "PUSH1", - "path": "5", - "value": "0x4" - }, - "805": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "DUP3", - "path": "5" - }, - "806": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "ADD", - "path": "5" - }, - "807": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "MSTORE", - "path": "5" - }, - "808": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "PUSH1", - "path": "5", - "value": "0x16" - }, - "810": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "PUSH1", - "path": "5", - "value": "0x24" - }, - "812": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "DUP3", - "path": "5" - }, - "813": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "ADD", - "path": "5" - }, - "814": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "MSTORE", - "path": "5" - }, - "815": { - "op": "PUSH22", - "value": "0x1112549150D517D0D0531317D11254D0531313D5D151" - }, - "838": { - "op": "PUSH1", - "value": "0x52" - }, - "840": { - "op": "SHL" - }, - "841": { - "offset": [1170, 1224], - "op": "PUSH1", - "path": "5", - "value": "0x44" - }, - "843": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "DUP3", - "path": "5" - }, - "844": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "ADD", - "path": "5" - }, - "845": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "MSTORE", - "path": "5" - }, - "846": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "SWAP1", - "path": "5" - }, - "847": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "MLOAD", - "path": "5" - }, - "848": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "SWAP1", - "path": "5" - }, - "849": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "DUP2", - "path": "5" - }, - "850": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "SWAP1", - "path": "5" - }, - "851": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "SUB", - "path": "5" - }, - "852": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "PUSH1", - "path": "5", - "value": "0x64" - }, - "854": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "ADD", - "path": "5" - }, - "855": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "SWAP1", - "path": "5" - }, - "856": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "REVERT", - "path": "5" - }, - "857": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "JUMPDEST", - "path": "5" - }, - "858": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "POP", - "path": "10" - }, - "859": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "POP", - "path": "10" - }, - "860": { - "fn": "ProxySupport.initialize", - "offset": [1561, 1578], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "862": { - "fn": "ProxySupport.initialize", - "offset": [1586, 1605], - "op": "PUSH2", - "path": "10", - "value": "0x365" - }, - "865": { - "fn": "ProxySupport.initialize", - "offset": [1586, 1603], - "op": "PUSH2", - "path": "10", - "value": "0x2E4" - }, - "868": { - "fn": "ProxySupport.initialize", - "jump": "i", - "offset": [1586, 1605], - "op": "JUMP", - "path": "10" - }, - "869": { - "fn": "ProxySupport.initialize", - "offset": [1586, 1605], - "op": "JUMPDEST", - "path": "10" - }, - "870": { - "fn": "ProxySupport.initialize", - "offset": [1581, 1583], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "872": { - "fn": "ProxySupport.initialize", - "offset": [1581, 1605], - "op": "SWAP1", - "path": "10" - }, - "873": { - "fn": "ProxySupport.initialize", - "offset": [1581, 1605], - "op": "DUP2", - "path": "10" - }, - "874": { - "fn": "ProxySupport.initialize", - "offset": [1581, 1605], - "op": "MUL", - "path": "10" - }, - "875": { - "fn": "ProxySupport.initialize", - "offset": [1581, 1605], - "op": "SWAP2", - "path": "10" - }, - "876": { - "op": "POP" - }, - "877": { - "fn": "ProxySupport.initialize", - "offset": [1642, 1656], - "op": "DUP2", - "path": "10" - }, - "878": { - "fn": "ProxySupport.initialize", - "offset": [1642, 1656], - "op": "ADD", - "path": "10" - }, - "879": { - "fn": "ProxySupport.initialize", - "offset": [1674, 1705], - "op": "DUP1", - "path": "10", - "statement": 4 - }, - "880": { - "fn": "ProxySupport.initialize", - "offset": [1674, 1705], - "op": "DUP4", - "path": "10" - }, - "881": { - "fn": "ProxySupport.initialize", - "offset": [1674, 1705], - "op": "LT", - "path": "10" - }, - "882": { - "branch": 102, - "fn": "ProxySupport.initialize", - "offset": [1674, 1705], - "op": "ISZERO", - "path": "10" - }, - "883": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "PUSH2", - "path": "10", - "value": "0x3B9" - }, - "886": { - "branch": 102, - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "JUMPI", - "path": "10" - }, - "887": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "PUSH1", - "path": "10", - "value": "0x40" - }, - "889": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "DUP1", - "path": "10" - }, - "890": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "MLOAD", - "path": "10" - }, - "891": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "895": { - "op": "PUSH1", - "value": "0xE5" - }, - "897": { - "op": "SHL" - }, - "898": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "DUP2", - "path": "10" - }, - "899": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "MSTORE", - "path": "10" - }, - "900": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "902": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "PUSH1", - "path": "10", - "value": "0x4" - }, - "904": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "DUP3", - "path": "10" - }, - "905": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "ADD", - "path": "10" - }, - "906": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "MSTORE", - "path": "10" - }, - "907": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "PUSH1", - "path": "10", - "value": "0x13" - }, - "909": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "PUSH1", - "path": "10", - "value": "0x24" - }, - "911": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "DUP3", - "path": "10" - }, - "912": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "ADD", - "path": "10" - }, - "913": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "MSTORE", - "path": "10" - }, - "914": { - "op": "PUSH19", - "value": "0x1253925517D110551057D513D3D7D4D3505313" - }, - "934": { - "op": "PUSH1", - "value": "0x6A" - }, - "936": { - "op": "SHL" - }, - "937": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "PUSH1", - "path": "10", - "value": "0x44" - }, - "939": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "DUP3", - "path": "10" - }, - "940": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "ADD", - "path": "10" - }, - "941": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "MSTORE", - "path": "10" - }, - "942": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "SWAP1", - "path": "10" - }, - "943": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "MLOAD", - "path": "10" - }, - "944": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "SWAP1", - "path": "10" - }, - "945": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "DUP2", - "path": "10" - }, - "946": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "SWAP1", - "path": "10" - }, - "947": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "SUB", - "path": "10" - }, - "948": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "PUSH1", - "path": "10", - "value": "0x64" - }, - "950": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "ADD", - "path": "10" - }, - "951": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "SWAP1", - "path": "10" - }, - "952": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "REVERT", - "path": "10" - }, - "953": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "JUMPDEST", - "path": "10" - }, - "954": { - "fn": "ProxySupport.initialize", - "offset": [1739, 1757], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "956": { - "fn": "ProxySupport.initialize", - "offset": [1771, 1803], - "op": "PUSH2", - "path": "10", - "value": "0x3C7" - }, - "959": { - "fn": "ProxySupport.initialize", - "offset": [1786, 1802], - "op": "DUP3", - "path": "10" - }, - "960": { - "fn": "ProxySupport.initialize", - "offset": [1776, 1785], - "op": "DUP5", - "path": "10" - }, - "961": { - "fn": "ProxySupport.initialize", - "offset": [1771, 1775], - "op": "DUP7", - "path": "10" - }, - "962": { - "fn": "ProxySupport.initialize", - "offset": [1771, 1775], - "op": "DUP9", - "path": "10" - }, - "963": { - "fn": "ProxySupport.initialize", - "offset": [1771, 1803], - "op": "PUSH2", - "path": "10", - "value": "0x1E6A" - }, - "966": { - "fn": "ProxySupport.initialize", - "jump": "i", - "offset": [1771, 1803], - "op": "JUMP", - "path": "10" - }, - "967": { - "fn": "ProxySupport.initialize", - "offset": [1771, 1803], - "op": "JUMPDEST", - "path": "10" - }, - "968": { - "fn": "ProxySupport.initialize", - "offset": [1760, 1815], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "970": { - "fn": "ProxySupport.initialize", - "offset": [1760, 1815], - "op": "DUP2", - "path": "10" - }, - "971": { - "fn": "ProxySupport.initialize", - "offset": [1760, 1815], - "op": "LT", - "path": "10" - }, - "972": { - "fn": "ProxySupport.initialize", - "offset": [1760, 1815], - "op": "ISZERO", - "path": "10" - }, - "973": { - "fn": "ProxySupport.initialize", - "offset": [1760, 1815], - "op": "PUSH2", - "path": "10", - "value": "0x3D5" - }, - "976": { - "fn": "ProxySupport.initialize", - "offset": [1760, 1815], - "op": "JUMPI", - "path": "10" - }, - "977": { - "fn": "ProxySupport.initialize", - "offset": [1760, 1815], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "979": { - "fn": "ProxySupport.initialize", - "offset": [1760, 1815], - "op": "DUP1", - "path": "10" - }, - "980": { - "fn": "ProxySupport.initialize", - "offset": [1760, 1815], - "op": "REVERT", - "path": "10" - }, - "981": { - "fn": "ProxySupport.initialize", - "offset": [1760, 1815], - "op": "JUMPDEST", - "path": "10" - }, - "982": { - "op": "POP" - }, - "983": { - "fn": "ProxySupport.initialize", - "offset": [1760, 1815], - "op": "CALLDATALOAD", - "path": "10" - }, - "984": { - "op": "PUSH1", - "value": "0x1" - }, - "986": { - "op": "PUSH1", - "value": "0x1" - }, - "988": { - "op": "PUSH1", - "value": "0xA0" - }, - "990": { - "op": "SHL" - }, - "991": { - "op": "SUB" - }, - "992": { - "fn": "ProxySupport.initialize", - "offset": [1760, 1815], - "op": "AND", - "path": "10" - }, - "993": { - "fn": "ProxySupport.initialize", - "offset": [1760, 1815], - "op": "SWAP1", - "path": "10" - }, - "994": { - "op": "POP" - }, - "995": { - "fn": "ProxySupport.initialize", - "offset": [1826, 1861], - "op": "CALLDATASIZE", - "path": "10" - }, - "996": { - "fn": "ProxySupport.initialize", - "offset": [1826, 1861], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "998": { - "fn": "ProxySupport.initialize", - "offset": [1864, 1880], - "op": "PUSH2", - "path": "10", - "value": "0x3F1" - }, - "1001": { - "fn": "ProxySupport.initialize", - "offset": [1870, 1879], - "op": "DUP6", - "path": "10" - }, - "1002": { - "fn": "ProxySupport.initialize", - "offset": [1826, 1861], - "op": "DUP3", - "path": "10" - }, - "1003": { - "fn": "ProxySupport.initialize", - "offset": [1864, 1868], - "op": "DUP9", - "path": "10" - }, - "1004": { - "fn": "ProxySupport.initialize", - "offset": [1864, 1868], - "op": "DUP11", - "path": "10" - }, - "1005": { - "fn": "ProxySupport.initialize", - "offset": [1864, 1880], - "op": "PUSH2", - "path": "10", - "value": "0x1E6A" - }, - "1008": { - "fn": "ProxySupport.initialize", - "jump": "i", - "offset": [1864, 1880], - "op": "JUMP", - "path": "10" - }, - "1009": { - "fn": "ProxySupport.initialize", - "offset": [1864, 1880], - "op": "JUMPDEST", - "path": "10" - }, - "1010": { - "fn": "ProxySupport.initialize", - "offset": [1826, 1880], - "op": "SWAP2", - "path": "10" - }, - "1011": { - "fn": "ProxySupport.initialize", - "offset": [1826, 1880], - "op": "POP", - "path": "10" - }, - "1012": { - "fn": "ProxySupport.initialize", - "offset": [1826, 1880], - "op": "SWAP2", - "path": "10" - }, - "1013": { - "fn": "ProxySupport.initialize", - "offset": [1826, 1880], - "op": "POP", - "path": "10" - }, - "1014": { - "fn": "ProxySupport.initialize", - "offset": [1891, 1940], - "op": "PUSH2", - "path": "10", - "statement": 5, - "value": "0x3FF" - }, - "1017": { - "fn": "ProxySupport.initialize", - "offset": [1919, 1939], - "op": "DUP3", - "path": "10" - }, - "1018": { - "fn": "ProxySupport.initialize", - "offset": [1919, 1939], - "op": "DUP3", - "path": "10" - }, - "1019": { - "fn": "ProxySupport.initialize", - "offset": [1891, 1918], - "op": "PUSH2", - "path": "10", - "value": "0x2C2" - }, - "1022": { - "fn": "ProxySupport.initialize", - "jump": "i", - "offset": [1891, 1940], - "op": "JUMP", - "path": "10" - }, - "1023": { - "fn": "ProxySupport.initialize", - "offset": [1891, 1940], - "op": "JUMPDEST", - "path": "10" - }, - "1024": { - "fn": "ProxySupport.initialize", - "offset": [1951, 1974], - "op": "CALLDATASIZE", - "path": "10" - }, - "1025": { - "fn": "ProxySupport.initialize", - "offset": [1951, 1974], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "1027": { - "fn": "ProxySupport.initialize", - "offset": [1977, 2000], - "op": "PUSH2", - "path": "10", - "value": "0x40E" - }, - "1030": { - "fn": "ProxySupport.initialize", - "offset": [1977, 1981], - "op": "DUP9", - "path": "10" - }, - "1031": { - "fn": "ProxySupport.initialize", - "offset": [1982, 1998], - "op": "DUP8", - "path": "10" - }, - "1032": { - "fn": "ProxySupport.initialize", - "offset": [1977, 1981], - "op": "DUP2", - "path": "10" - }, - "1033": { - "fn": "ProxySupport.initialize", - "offset": [1977, 1981], - "op": "DUP13", - "path": "10" - }, - "1034": { - "fn": "ProxySupport.initialize", - "offset": [1977, 2000], - "op": "PUSH2", - "path": "10", - "value": "0x1E6A" - }, - "1037": { - "fn": "ProxySupport.initialize", - "jump": "i", - "offset": [1977, 2000], - "op": "JUMP", - "path": "10" - }, - "1038": { - "fn": "ProxySupport.initialize", - "offset": [1977, 2000], - "op": "JUMPDEST", - "path": "10" - }, - "1039": { - "fn": "ProxySupport.initialize", - "offset": [1951, 2000], - "op": "SWAP1", - "path": "10" - }, - "1040": { - "fn": "ProxySupport.initialize", - "offset": [1951, 2000], - "op": "SWAP3", - "path": "10" - }, - "1041": { - "op": "POP" - }, - "1042": { - "fn": "ProxySupport.initialize", - "offset": [1951, 2000], - "op": "SWAP1", - "path": "10" - }, - "1043": { - "op": "POP" - }, - "1044": { - "op": "PUSH1", - "value": "0x1" - }, - "1046": { - "op": "PUSH1", - "value": "0x1" - }, - "1048": { - "op": "PUSH1", - "value": "0xA0" - }, - "1050": { - "op": "SHL" - }, - "1051": { - "op": "SUB" - }, - "1052": { - "fn": "ProxySupport.initialize", - "offset": [2095, 2121], - "op": "DUP6", - "path": "10" - }, - "1053": { - "fn": "ProxySupport.initialize", - "offset": [2095, 2121], - "op": "AND", - "path": "10" - }, - "1054": { - "branch": 103, - "fn": "ProxySupport.initialize", - "offset": [2095, 2121], - "op": "ISZERO", - "path": "10" - }, - "1055": { - "fn": "ProxySupport.initialize", - "offset": [2091, 2213], - "op": "PUSH2", - "path": "10", - "value": "0x439" - }, - "1058": { - "branch": 103, - "fn": "ProxySupport.initialize", - "offset": [2091, 2213], - "op": "JUMPI", - "path": "10" - }, - "1059": { - "fn": "ProxySupport.initialize", - "offset": [2137, 2182], - "op": "PUSH2", - "path": "10", - "statement": 6, - "value": "0x42D" - }, - "1062": { - "fn": "ProxySupport.initialize", - "offset": [2161, 2171], - "op": "DUP6", - "path": "10" - }, - "1063": { - "fn": "ProxySupport.initialize", - "offset": [2173, 2181], - "op": "DUP4", - "path": "10" - }, - "1064": { - "fn": "ProxySupport.initialize", - "offset": [2173, 2181], - "op": "DUP4", - "path": "10" - }, - "1065": { - "fn": "ProxySupport.initialize", - "offset": [2137, 2160], - "op": "PUSH2", - "path": "10", - "value": "0xCB1" - }, - "1068": { - "fn": "ProxySupport.initialize", - "jump": "i", - "offset": [2137, 2182], - "op": "JUMP", - "path": "10" - }, - "1069": { - "fn": "ProxySupport.initialize", - "offset": [2137, 2182], - "op": "JUMPDEST", - "path": "10" - }, - "1070": { - "fn": "ProxySupport.initialize", - "offset": [2196, 2203], - "op": "POP", - "path": "10", - "statement": 7 - }, - "1071": { - "fn": "ProxySupport.initialize", - "offset": [2196, 2203], - "op": "POP", - "path": "10" - }, - "1072": { - "fn": "ProxySupport.initialize", - "offset": [2196, 2203], - "op": "POP", - "path": "10" - }, - "1073": { - "fn": "ProxySupport.initialize", - "offset": [2196, 2203], - "op": "POP", - "path": "10" - }, - "1074": { - "fn": "ProxySupport.initialize", - "offset": [2196, 2203], - "op": "POP", - "path": "10" - }, - "1075": { - "fn": "ProxySupport.initialize", - "offset": [2196, 2203], - "op": "POP", - "path": "10" - }, - "1076": { - "fn": "ProxySupport.initialize", - "offset": [2196, 2203], - "op": "POP", - "path": "10" - }, - "1077": { - "fn": "ProxySupport.initialize", - "offset": [2196, 2203], - "op": "PUSH2", - "path": "10", - "value": "0x2C2" - }, - "1080": { - "fn": "ProxySupport.initialize", - "offset": [2196, 2203], - "op": "JUMP", - "path": "10" - }, - "1081": { - "fn": "ProxySupport.initialize", - "offset": [2091, 2213], - "op": "JUMPDEST", - "path": "10" - }, - "1082": { - "fn": "ProxySupport.initialize", - "offset": [2227, 2242], - "op": "PUSH2", - "path": "10", - "value": "0x441" - }, - "1085": { - "fn": "ProxySupport.initialize", - "offset": [2227, 2240], - "op": "PUSH2", - "path": "10", - "value": "0xF08" - }, - "1088": { - "fn": "ProxySupport.initialize", - "jump": "i", - "offset": [2227, 2242], - "op": "JUMP", - "path": "10" - }, - "1089": { - "branch": 104, - "fn": "ProxySupport.initialize", - "offset": [2227, 2242], - "op": "JUMPDEST", - "path": "10" - }, - "1090": { - "fn": "ProxySupport.initialize", - "offset": [2223, 2505], - "op": "ISZERO", - "path": "10" - }, - "1091": { - "fn": "ProxySupport.initialize", - "offset": [2223, 2505], - "op": "PUSH2", - "path": "10", - "value": "0x495" - }, - "1094": { - "branch": 104, - "fn": "ProxySupport.initialize", - "offset": [2223, 2505], - "op": "JUMPI", - "path": "10" - }, - "1095": { - "fn": "ProxySupport.initialize", - "offset": [2266, 2286], - "op": "DUP1", - "path": "10", - "statement": 8 - }, - "1096": { - "branch": 105, - "fn": "ProxySupport.initialize", - "offset": [2266, 2286], - "op": "ISZERO", - "path": "10" - }, - "1097": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "PUSH2", - "path": "10", - "value": "0x490" - }, - "1100": { - "branch": 105, - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "JUMPI", - "path": "10" - }, - "1101": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "PUSH1", - "path": "10", - "value": "0x40" - }, - "1103": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "DUP1", - "path": "10" - }, - "1104": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "MLOAD", - "path": "10" - }, - "1105": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "1109": { - "op": "PUSH1", - "value": "0xE5" - }, - "1111": { - "op": "SHL" - }, - "1112": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "DUP2", - "path": "10" - }, - "1113": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "MSTORE", - "path": "10" - }, - "1114": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "1116": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "PUSH1", - "path": "10", - "value": "0x4" - }, - "1118": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "DUP3", - "path": "10" - }, - "1119": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "ADD", - "path": "10" - }, - "1120": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "MSTORE", - "path": "10" - }, - "1121": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "PUSH1", - "path": "10", - "value": "0x14" - }, - "1123": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "PUSH1", - "path": "10", - "value": "0x24" - }, - "1125": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "DUP3", - "path": "10" - }, - "1126": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "ADD", - "path": "10" - }, - "1127": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "MSTORE", - "path": "10" - }, - "1128": { - "op": "PUSH20", - "value": "0x554E45585045435445445F494E49545F44415441" - }, - "1149": { - "op": "PUSH1", - "value": "0x60" - }, - "1151": { - "op": "SHL" - }, - "1152": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "PUSH1", - "path": "10", - "value": "0x44" - }, - "1154": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "DUP3", - "path": "10" - }, - "1155": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "ADD", - "path": "10" - }, - "1156": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "MSTORE", - "path": "10" - }, - "1157": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "SWAP1", - "path": "10" - }, - "1158": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "MLOAD", - "path": "10" - }, - "1159": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "SWAP1", - "path": "10" - }, - "1160": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "DUP2", - "path": "10" - }, - "1161": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "SWAP1", - "path": "10" - }, - "1162": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "SUB", - "path": "10" - }, - "1163": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "PUSH1", - "path": "10", - "value": "0x64" - }, - "1165": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "ADD", - "path": "10" - }, - "1166": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "SWAP1", - "path": "10" - }, - "1167": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "REVERT", - "path": "10" - }, - "1168": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "JUMPDEST", - "path": "10" - }, - "1169": { - "fn": "ProxySupport.initialize", - "offset": [2223, 2505], - "op": "PUSH2", - "path": "10", - "value": "0x4B1" - }, - "1172": { - "fn": "ProxySupport.initialize", - "offset": [2223, 2505], - "op": "JUMP", - "path": "10" - }, - "1173": { - "fn": "ProxySupport.initialize", - "offset": [2223, 2505], - "op": "JUMPDEST", - "path": "10" - }, - "1174": { - "fn": "ProxySupport.initialize", - "offset": [2391, 2417], - "op": "PUSH2", - "path": "10", - "statement": 9, - "value": "0x49F" - }, - "1177": { - "fn": "ProxySupport.initialize", - "offset": [2408, 2416], - "op": "DUP3", - "path": "10" - }, - "1178": { - "fn": "ProxySupport.initialize", - "offset": [2408, 2416], - "op": "DUP3", - "path": "10" - }, - "1179": { - "fn": "ProxySupport.initialize", - "offset": [2391, 2407], - "op": "PUSH2", - "path": "10", - "value": "0xF23" - }, - "1182": { - "fn": "ProxySupport.initialize", - "jump": "i", - "offset": [2391, 2417], - "op": "JUMP", - "path": "10" - }, - "1183": { - "fn": "ProxySupport.initialize", - "offset": [2391, 2417], - "op": "JUMPDEST", - "path": "10" - }, - "1184": { - "fn": "ProxySupport.initialize", - "offset": [2431, 2464], - "op": "PUSH2", - "path": "10", - "statement": 10, - "value": "0x4A9" - }, - "1187": { - "fn": "ProxySupport.initialize", - "offset": [2455, 2463], - "op": "DUP3", - "path": "10" - }, - "1188": { - "fn": "ProxySupport.initialize", - "offset": [2455, 2463], - "op": "DUP3", - "path": "10" - }, - "1189": { - "fn": "ProxySupport.initialize", - "offset": [2431, 2454], - "op": "PUSH2", - "path": "10", - "value": "0xF6C" - }, - "1192": { - "fn": "ProxySupport.initialize", - "jump": "i", - "offset": [2431, 2464], - "op": "JUMP", - "path": "10" - }, - "1193": { - "fn": "ProxySupport.initialize", - "offset": [2431, 2464], - "op": "JUMPDEST", - "path": "10" - }, - "1194": { - "fn": "ProxySupport.initialize", - "offset": [2478, 2494], - "op": "PUSH2", - "path": "10", - "statement": 11, - "value": "0x4B1" - }, - "1197": { - "fn": "ProxySupport.initialize", - "offset": [2478, 2492], - "op": "PUSH2", - "path": "10", - "value": "0xFAF" - }, - "1200": { - "fn": "ProxySupport.initialize", - "jump": "i", - "offset": [2478, 2494], - "op": "JUMP", - "path": "10" - }, - "1201": { - "fn": "ProxySupport.initialize", - "offset": [2478, 2494], - "op": "JUMPDEST", - "path": "10" - }, - "1202": { - "offset": [1244, 1245], - "op": "POP", - "path": "5" - }, - "1203": { - "fn": "ProxySupport.initialize", - "offset": [1244, 1245], - "op": "POP", - "path": "5" - }, - "1204": { - "fn": "ProxySupport.initialize", - "offset": [1244, 1245], - "op": "POP", - "path": "5" - }, - "1205": { - "fn": "ProxySupport.initialize", - "offset": [1244, 1245], - "op": "POP", - "path": "5" - }, - "1206": { - "fn": "ProxySupport.initialize", - "offset": [1244, 1245], - "op": "POP", - "path": "5" - }, - "1207": { - "fn": "ProxySupport.initialize", - "offset": [1244, 1245], - "op": "POP", - "path": "5" - }, - "1208": { - "fn": "ProxySupport.initialize", - "offset": [1244, 1245], - "op": "POP", - "path": "5" - }, - "1209": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "POP", - "path": "10" - }, - "1210": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "POP", - "path": "10" - }, - "1211": { - "fn": "ProxySupport.initialize", - "jump": "o", - "offset": [1483, 2511], - "op": "JUMP", - "path": "10" - }, - "1212": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "JUMPDEST", - "path": "34" - }, - "1213": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [951, 985], - "op": "PUSH2", - "path": "34", - "statement": 12, - "value": "0x2E1" - }, - "1216": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [966, 984], - "op": "DUP2", - "path": "34" - }, - "1217": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [951, 965], - "op": "PUSH2", - "path": "34", - "value": "0x1031" - }, - "1220": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "jump": "i", - "offset": [951, 985], - "op": "JUMP", - "path": "34" - }, - "1221": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "JUMPDEST", - "path": "28" - }, - "1222": { - "offset": [434, 456], - "op": "PUSH2", - "path": "8", - "value": "0x4CE" - }, - "1225": { - "offset": [445, 455], - "op": "CALLER", - "path": "8" - }, - "1226": { - "offset": [434, 444], - "op": "PUSH2", - "path": "8", - "value": "0xC82" - }, - "1229": { - "jump": "i", - "offset": [434, 456], - "op": "JUMP", - "path": "8" - }, - "1230": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [434, 456], - "op": "JUMPDEST", - "path": "8" - }, - "1231": { - "offset": [426, 476], - "op": "PUSH2", - "path": "8", - "value": "0x511" - }, - "1234": { - "offset": [426, 476], - "op": "JUMPI", - "path": "8" - }, - "1235": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x40" - }, - "1237": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "DUP1", - "path": "8" - }, - "1238": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "MLOAD", - "path": "8" - }, - "1239": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "1243": { - "op": "PUSH1", - "value": "0xE5" - }, - "1245": { - "op": "SHL" - }, - "1246": { - "offset": [426, 476], - "op": "DUP2", - "path": "8" - }, - "1247": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "1248": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x20" - }, - "1250": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x4" - }, - "1252": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "1253": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "1254": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "1255": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0xF" - }, - "1257": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x24" - }, - "1259": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "1260": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "1261": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "1262": { - "op": "PUSH15", - "value": "0x4F4E4C595F474F5645524E414E4345" - }, - "1278": { - "op": "PUSH1", - "value": "0x88" - }, - "1280": { - "op": "SHL" - }, - "1281": { - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x44" - }, - "1283": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "1284": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "1285": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "1286": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "1287": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "MLOAD", - "path": "8" - }, - "1288": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "1289": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "DUP2", - "path": "8" - }, - "1290": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "1291": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "SUB", - "path": "8" - }, - "1292": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x64" - }, - "1294": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "1295": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "1296": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "REVERT", - "path": "8" - }, - "1297": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "JUMPDEST", - "path": "8" - }, - "1298": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "PUSH1", - "path": "28", - "statement": 13, - "value": "0x40" - }, - "1300": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "DUP1", - "path": "28" - }, - "1301": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "MLOAD", - "path": "28" - }, - "1302": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "DUP3", - "path": "28" - }, - "1303": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "DUP2", - "path": "28" - }, - "1304": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "MSTORE", - "path": "28" - }, - "1305": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "SWAP1", - "path": "28" - }, - "1306": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "MLOAD", - "path": "28" - }, - "1307": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "PUSH32", - "path": "28", - "value": "0xA9AEC19EC61C04AE0A4A1498AB6CE04CBD68B3D54C47888A45EB2BD37CAF06BC" - }, - "1340": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "SWAP2", - "path": "28" - }, - "1341": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "DUP2", - "path": "28" - }, - "1342": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "SWAP1", - "path": "28" - }, - "1343": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "SUB", - "path": "28" - }, - "1344": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "1346": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "ADD", - "path": "28" - }, - "1347": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "SWAP1", - "path": "28" - }, - "1348": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "LOG1", - "path": "28" - }, - "1349": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3088, 3121], - "op": "PUSH2", - "path": "28", - "statement": 14, - "value": "0x2E1" - }, - "1352": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3104, 3120], - "op": "DUP2", - "path": "28" - }, - "1353": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3088, 3103], - "op": "PUSH2", - "path": "28", - "value": "0x117E" - }, - "1356": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "jump": "i", - "offset": [3088, 3121], - "op": "JUMP", - "path": "28" - }, - "1357": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "JUMPDEST", - "path": "34" - }, - "1358": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [827, 859], - "op": "PUSH2", - "path": "34", - "statement": 15, - "value": "0x2E1" - }, - "1361": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [847, 858], - "op": "DUP2", - "path": "34" - }, - "1362": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [827, 846], - "op": "PUSH2", - "path": "34", - "value": "0x11A0" - }, - "1365": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "jump": "i", - "offset": [827, 859], - "op": "JUMP", - "path": "34" - }, - "1366": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "offset": [998, 1078], - "op": "JUMPDEST", - "path": "34" - }, - "1367": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "offset": [1053, 1071], - "op": "PUSH2", - "path": "34", - "statement": 16, - "value": "0x55E" - }, - "1370": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "offset": [1053, 1069], - "op": "PUSH2", - "path": "34", - "value": "0x129D" - }, - "1373": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "jump": "i", - "offset": [1053, 1071], - "op": "JUMP", - "path": "34" - }, - "1374": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "offset": [1053, 1071], - "op": "JUMPDEST", - "path": "34" - }, - "1375": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "jump": "o", - "offset": [998, 1078], - "op": "JUMP", - "path": "34" - }, - "1376": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "JUMPDEST", - "path": "28" - }, - "1377": { - "offset": [2461, 2478], - "op": "PUSH2", - "path": "28", - "value": "0x568" - }, - "1380": { - "offset": [2461, 2476], - "op": "PUSH2", - "path": "28", - "value": "0x136A" - }, - "1383": { - "jump": "i", - "offset": [2461, 2478], - "op": "JUMP", - "path": "28" - }, - "1384": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2461, 2478], - "op": "JUMPDEST", - "path": "28" - }, - "1385": { - "offset": [2461, 2483], - "op": "ISZERO", - "path": "28" - }, - "1386": { - "offset": [2453, 2517], - "op": "PUSH2", - "path": "28", - "value": "0x5BA" - }, - "1389": { - "offset": [2453, 2517], - "op": "JUMPI", - "path": "28" - }, - "1390": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "1392": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "DUP1", - "path": "28" - }, - "1393": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "MLOAD", - "path": "28" - }, - "1394": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "1398": { - "op": "PUSH1", - "value": "0xE5" - }, - "1400": { - "op": "SHL" - }, - "1401": { - "offset": [2453, 2517], - "op": "DUP2", - "path": "28" - }, - "1402": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "MSTORE", - "path": "28" - }, - "1403": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "1405": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "1407": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "DUP3", - "path": "28" - }, - "1408": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "ADD", - "path": "28" - }, - "1409": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "MSTORE", - "path": "28" - }, - "1410": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "PUSH1", - "path": "28", - "value": "0x1D" - }, - "1412": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "PUSH1", - "path": "28", - "value": "0x24" - }, - "1414": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "DUP3", - "path": "28" - }, - "1415": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "ADD", - "path": "28" - }, - "1416": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "MSTORE", - "path": "28" - }, - "1417": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "PUSH32", - "path": "28", - "value": "0x4C325F544F4B454E5F434F4E54524143545F414C52454144595F534554000000" - }, - "1450": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "PUSH1", - "path": "28", - "value": "0x44" - }, - "1452": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "DUP3", - "path": "28" - }, - "1453": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "ADD", - "path": "28" - }, - "1454": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "MSTORE", - "path": "28" - }, - "1455": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "SWAP1", - "path": "28" - }, - "1456": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "MLOAD", - "path": "28" - }, - "1457": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "SWAP1", - "path": "28" - }, - "1458": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "DUP2", - "path": "28" - }, - "1459": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "SWAP1", - "path": "28" - }, - "1460": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "SUB", - "path": "28" - }, - "1461": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "PUSH1", - "path": "28", - "value": "0x64" - }, - "1463": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "ADD", - "path": "28" - }, - "1464": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "SWAP1", - "path": "28" - }, - "1465": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "REVERT", - "path": "28" - }, - "1466": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "JUMPDEST", - "path": "28" - }, - "1467": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2791, 2807], - "op": "DUP1", - "path": "28" - }, - "1468": { - "offset": [2260, 2274], - "op": "DUP1", - "path": "28" - }, - "1469": { - "offset": [2252, 2302], - "op": "PUSH2", - "path": "28", - "value": "0x607" - }, - "1472": { - "offset": [2252, 2302], - "op": "JUMPI", - "path": "28" - }, - "1473": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "1475": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "DUP1", - "path": "28" - }, - "1476": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "MLOAD", - "path": "28" - }, - "1477": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "1481": { - "op": "PUSH1", - "value": "0xE5" - }, - "1483": { - "op": "SHL" - }, - "1484": { - "offset": [2252, 2302], - "op": "DUP2", - "path": "28" - }, - "1485": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "MSTORE", - "path": "28" - }, - "1486": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "1488": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "1490": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "DUP3", - "path": "28" - }, - "1491": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "ADD", - "path": "28" - }, - "1492": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "MSTORE", - "path": "28" - }, - "1493": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "PUSH1", - "path": "28", - "value": "0x17" - }, - "1495": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "PUSH1", - "path": "28", - "value": "0x24" - }, - "1497": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "DUP3", - "path": "28" - }, - "1498": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "ADD", - "path": "28" - }, - "1499": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "MSTORE", - "path": "28" - }, - "1500": { - "op": "PUSH23", - "value": "0x4C325F414444524553535F4F55545F4F465F52414E4745" - }, - "1524": { - "op": "PUSH1", - "value": "0x48" - }, - "1526": { - "op": "SHL" - }, - "1527": { - "offset": [2252, 2302], - "op": "PUSH1", - "path": "28", - "value": "0x44" - }, - "1529": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "DUP3", - "path": "28" - }, - "1530": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "ADD", - "path": "28" - }, - "1531": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "MSTORE", - "path": "28" - }, - "1532": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "SWAP1", - "path": "28" - }, - "1533": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "MLOAD", - "path": "28" - }, - "1534": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "SWAP1", - "path": "28" - }, - "1535": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "DUP2", - "path": "28" - }, - "1536": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "SWAP1", - "path": "28" - }, - "1537": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "SUB", - "path": "28" - }, - "1538": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "PUSH1", - "path": "28", - "value": "0x64" - }, - "1540": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "ADD", - "path": "28" - }, - "1541": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "SWAP1", - "path": "28" - }, - "1542": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "REVERT", - "path": "28" - }, - "1543": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "JUMPDEST", - "path": "28" - }, - "1544": { - "op": "PUSH1", - "value": "0x1" - }, - "1546": { - "op": "PUSH8", - "value": "0x800000000000011" - }, - "1555": { - "op": "PUSH1", - "value": "0xC0" - }, - "1557": { - "op": "SHL" - }, - "1558": { - "op": "ADD" - }, - "1559": { - "offset": [2320, 2329], - "op": "DUP2", - "path": "28" - }, - "1560": { - "offset": [2320, 2358], - "op": "LT", - "path": "28" - }, - "1561": { - "offset": [2312, 2386], - "op": "PUSH2", - "path": "28", - "value": "0x663" - }, - "1564": { - "offset": [2312, 2386], - "op": "JUMPI", - "path": "28" - }, - "1565": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "1567": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "DUP1", - "path": "28" - }, - "1568": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "MLOAD", - "path": "28" - }, - "1569": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "1573": { - "op": "PUSH1", - "value": "0xE5" - }, - "1575": { - "op": "SHL" - }, - "1576": { - "offset": [2312, 2386], - "op": "DUP2", - "path": "28" - }, - "1577": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "MSTORE", - "path": "28" - }, - "1578": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "1580": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "1582": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "DUP3", - "path": "28" - }, - "1583": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "ADD", - "path": "28" - }, - "1584": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "MSTORE", - "path": "28" - }, - "1585": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "PUSH1", - "path": "28", - "value": "0x17" - }, - "1587": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "PUSH1", - "path": "28", - "value": "0x24" - }, - "1589": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "DUP3", - "path": "28" - }, - "1590": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "ADD", - "path": "28" - }, - "1591": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "MSTORE", - "path": "28" - }, - "1592": { - "op": "PUSH23", - "value": "0x4C325F414444524553535F4F55545F4F465F52414E4745" - }, - "1616": { - "op": "PUSH1", - "value": "0x48" - }, - "1618": { - "op": "SHL" - }, - "1619": { - "offset": [2312, 2386], - "op": "PUSH1", - "path": "28", - "value": "0x44" - }, - "1621": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "DUP3", - "path": "28" - }, - "1622": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "ADD", - "path": "28" - }, - "1623": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "MSTORE", - "path": "28" - }, - "1624": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "SWAP1", - "path": "28" - }, - "1625": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "MLOAD", - "path": "28" - }, - "1626": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "SWAP1", - "path": "28" - }, - "1627": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "DUP2", - "path": "28" - }, - "1628": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "SWAP1", - "path": "28" - }, - "1629": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "SUB", - "path": "28" - }, - "1630": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "PUSH1", - "path": "28", - "value": "0x64" - }, - "1632": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "ADD", - "path": "28" - }, - "1633": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "SWAP1", - "path": "28" - }, - "1634": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "REVERT", - "path": "28" - }, - "1635": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "JUMPDEST", - "path": "28" - }, - "1636": { - "offset": [434, 456], - "op": "PUSH2", - "path": "8", - "value": "0x66C" - }, - "1639": { - "offset": [445, 455], - "op": "CALLER", - "path": "8" - }, - "1640": { - "offset": [434, 444], - "op": "PUSH2", - "path": "8", - "value": "0xC82" - }, - "1643": { - "jump": "i", - "offset": [434, 456], - "op": "JUMP", - "path": "8" - }, - "1644": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [434, 456], - "op": "JUMPDEST", - "path": "8" - }, - "1645": { - "offset": [426, 476], - "op": "PUSH2", - "path": "8", - "value": "0x6AF" - }, - "1648": { - "offset": [426, 476], - "op": "JUMPI", - "path": "8" - }, - "1649": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x40" - }, - "1651": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "DUP1", - "path": "8" - }, - "1652": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "MLOAD", - "path": "8" - }, - "1653": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "1657": { - "op": "PUSH1", - "value": "0xE5" - }, - "1659": { - "op": "SHL" - }, - "1660": { - "offset": [426, 476], - "op": "DUP2", - "path": "8" - }, - "1661": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "1662": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x20" - }, - "1664": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x4" - }, - "1666": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "1667": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "1668": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "1669": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0xF" - }, - "1671": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x24" - }, - "1673": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "1674": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "1675": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "1676": { - "op": "PUSH15", - "value": "0x4F4E4C595F474F5645524E414E4345" - }, - "1692": { - "op": "PUSH1", - "value": "0x88" - }, - "1694": { - "op": "SHL" - }, - "1695": { - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x44" - }, - "1697": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "1698": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "1699": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "1700": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "1701": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "MLOAD", - "path": "8" - }, - "1702": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "1703": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "DUP2", - "path": "8" - }, - "1704": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "1705": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "SUB", - "path": "8" - }, - "1706": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x64" - }, - "1708": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "1709": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "1710": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "REVERT", - "path": "8" - }, - "1711": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "JUMPDEST", - "path": "8" - }, - "1712": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "PUSH1", - "path": "28", - "statement": 17, - "value": "0x40" - }, - "1714": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "DUP1", - "path": "28" - }, - "1715": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "MLOAD", - "path": "28" - }, - "1716": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "DUP4", - "path": "28" - }, - "1717": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "DUP2", - "path": "28" - }, - "1718": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "MSTORE", - "path": "28" - }, - "1719": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "SWAP1", - "path": "28" - }, - "1720": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "MLOAD", - "path": "28" - }, - "1721": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "PUSH32", - "path": "28", - "value": "0x49774A785AFE45B60857497C0AFF8733F202CA7E75329AD6408073564EFEA6DF" - }, - "1754": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "SWAP2", - "path": "28" - }, - "1755": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "DUP2", - "path": "28" - }, - "1756": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "SWAP1", - "path": "28" - }, - "1757": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "SUB", - "path": "28" - }, - "1758": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "1760": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "ADD", - "path": "28" - }, - "1761": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "SWAP1", - "path": "28" - }, - "1762": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "LOG1", - "path": "28" - }, - "1763": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2900, 2933], - "op": "PUSH2", - "path": "28", - "statement": 18, - "value": "0x2C2" - }, - "1766": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2916, 2932], - "op": "DUP3", - "path": "28" - }, - "1767": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2900, 2915], - "op": "PUSH2", - "path": "28", - "value": "0x138D" - }, - "1770": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "jump": "i", - "offset": [2900, 2933], - "op": "JUMP", - "path": "28" - }, - "1771": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "JUMPDEST", - "path": "28" - }, - "1772": { - "offset": [434, 456], - "op": "PUSH2", - "path": "8", - "value": "0x6F4" - }, - "1775": { - "offset": [445, 455], - "op": "CALLER", - "path": "8" - }, - "1776": { - "offset": [434, 444], - "op": "PUSH2", - "path": "8", - "value": "0xC82" - }, - "1779": { - "jump": "i", - "offset": [434, 456], - "op": "JUMP", - "path": "8" - }, - "1780": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [434, 456], - "op": "JUMPDEST", - "path": "8" - }, - "1781": { - "offset": [426, 476], - "op": "PUSH2", - "path": "8", - "value": "0x737" - }, - "1784": { - "offset": [426, 476], - "op": "JUMPI", - "path": "8" - }, - "1785": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x40" - }, - "1787": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "DUP1", - "path": "8" - }, - "1788": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "MLOAD", - "path": "8" - }, - "1789": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "1793": { - "op": "PUSH1", - "value": "0xE5" - }, - "1795": { - "op": "SHL" - }, - "1796": { - "offset": [426, 476], - "op": "DUP2", - "path": "8" - }, - "1797": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "1798": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x20" - }, - "1800": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x4" - }, - "1802": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "1803": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "1804": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "1805": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0xF" - }, - "1807": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x24" - }, - "1809": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "1810": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "1811": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "1812": { - "op": "PUSH15", - "value": "0x4F4E4C595F474F5645524E414E4345" - }, - "1828": { - "op": "PUSH1", - "value": "0x88" - }, - "1830": { - "op": "SHL" - }, - "1831": { - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x44" - }, - "1833": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "1834": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "1835": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "1836": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "1837": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "MLOAD", - "path": "8" - }, - "1838": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "1839": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "DUP2", - "path": "8" - }, - "1840": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "1841": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "SUB", - "path": "8" - }, - "1842": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x64" - }, - "1844": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "1845": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "1846": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "REVERT", - "path": "8" - }, - "1847": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "JUMPDEST", - "path": "8" - }, - "1848": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "PUSH1", - "path": "28", - "statement": 19, - "value": "0x40" - }, - "1850": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "DUP1", - "path": "28" - }, - "1851": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "MLOAD", - "path": "28" - }, - "1852": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "DUP3", - "path": "28" - }, - "1853": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "DUP2", - "path": "28" - }, - "1854": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "MSTORE", - "path": "28" - }, - "1855": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "SWAP1", - "path": "28" - }, - "1856": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "MLOAD", - "path": "28" - }, - "1857": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "PUSH32", - "path": "28", - "value": "0xAF474B5AFCF11BD99DC9FC7F499E6AB368D650BF7EF23993F0D61BD9AD762651" - }, - "1890": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "SWAP2", - "path": "28" - }, - "1891": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "DUP2", - "path": "28" - }, - "1892": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "SWAP1", - "path": "28" - }, - "1893": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "SUB", - "path": "28" - }, - "1894": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "1896": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "ADD", - "path": "28" - }, - "1897": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "SWAP1", - "path": "28" - }, - "1898": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "LOG1", - "path": "28" - }, - "1899": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3256, 3279], - "op": "PUSH2", - "path": "28", - "statement": 20, - "value": "0x2E1" - }, - "1902": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3267, 3278], - "op": "DUP2", - "path": "28" - }, - "1903": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3256, 3266], - "op": "PUSH2", - "path": "28", - "value": "0x13AF" - }, - "1906": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "jump": "i", - "offset": [3256, 3279], - "op": "JUMP", - "path": "28" - }, - "1907": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [413, 745], - "op": "JUMPDEST", - "path": "26" - }, - "1908": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [567, 584], - "op": "PUSH2", - "path": "26", - "statement": 21, - "value": "0x77B" - }, - "1911": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [567, 582], - "op": "PUSH2", - "path": "26", - "value": "0x13D1" - }, - "1914": { - "fn": "StarknetERC20Bridge.deposit", - "jump": "i", - "offset": [567, 584], - "op": "JUMP", - "path": "26" - }, - "1915": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [567, 584], - "op": "JUMPDEST", - "path": "26" - }, - "1916": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [557, 563], - "op": "DUP3", - "path": "26" - }, - "1917": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [514, 528], - "op": "PUSH2", - "path": "26", - "value": "0x784" - }, - "1920": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [514, 526], - "op": "PUSH2", - "path": "26", - "value": "0xA19" - }, - "1923": { - "fn": "StarknetERC20Bridge.deposit", - "jump": "i", - "offset": [514, 528], - "op": "JUMP", - "path": "26" - }, - "1924": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [514, 528], - "op": "JUMPDEST", - "path": "26" - }, - "1925": { - "op": "PUSH1", - "value": "0x1" - }, - "1927": { - "op": "PUSH1", - "value": "0x1" - }, - "1929": { - "op": "PUSH1", - "value": "0xA0" - }, - "1931": { - "op": "SHL" - }, - "1932": { - "op": "SUB" - }, - "1933": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 539], - "op": "AND", - "path": "26" - }, - "1934": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 539], - "op": "PUSH4", - "path": "26", - "value": "0x70A08231" - }, - "1939": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [548, 552], - "op": "ADDRESS", - "path": "26" - }, - "1940": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "PUSH1", - "path": "26", - "value": "0x40" - }, - "1942": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "MLOAD", - "path": "26" - }, - "1943": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "DUP3", - "path": "26" - }, - "1944": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "PUSH4", - "path": "26", - "value": "0xFFFFFFFF" - }, - "1949": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "AND", - "path": "26" - }, - "1950": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "PUSH1", - "path": "26", - "value": "0xE0" - }, - "1952": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "SHL", - "path": "26" - }, - "1953": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "DUP2", - "path": "26" - }, - "1954": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "MSTORE", - "path": "26" - }, - "1955": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "PUSH1", - "path": "26", - "value": "0x4" - }, - "1957": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "ADD", - "path": "26" - }, - "1958": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "DUP1", - "path": "26" - }, - "1959": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "DUP3", - "path": "26" - }, - "1960": { - "op": "PUSH1", - "value": "0x1" - }, - "1962": { - "op": "PUSH1", - "value": "0x1" - }, - "1964": { - "op": "PUSH1", - "value": "0xA0" - }, - "1966": { - "op": "SHL" - }, - "1967": { - "op": "SUB" - }, - "1968": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "AND", - "path": "26" - }, - "1969": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "DUP2", - "path": "26" - }, - "1970": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "MSTORE", - "path": "26" - }, - "1971": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "PUSH1", - "path": "26", - "value": "0x20" - }, - "1973": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "ADD", - "path": "26" - }, - "1974": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "SWAP2", - "path": "26" - }, - "1975": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "POP", - "path": "26" - }, - "1976": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "POP", - "path": "26" - }, - "1977": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "PUSH1", - "path": "26", - "value": "0x20" - }, - "1979": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "PUSH1", - "path": "26", - "value": "0x40" - }, - "1981": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "MLOAD", - "path": "26" - }, - "1982": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "DUP1", - "path": "26" - }, - "1983": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "DUP4", - "path": "26" - }, - "1984": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "SUB", - "path": "26" - }, - "1985": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "DUP2", - "path": "26" - }, - "1986": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "DUP7", - "path": "26" - }, - "1987": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "DUP1", - "path": "26" - }, - "1988": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "EXTCODESIZE", - "path": "26" - }, - "1989": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "ISZERO", - "path": "26" - }, - "1990": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "DUP1", - "path": "26" - }, - "1991": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "ISZERO", - "path": "26" - }, - "1992": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "PUSH2", - "path": "26", - "value": "0x7D0" - }, - "1995": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "JUMPI", - "path": "26" - }, - "1996": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "PUSH1", - "path": "26", - "value": "0x0" - }, - "1998": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "DUP1", - "path": "26" - }, - "1999": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "REVERT", - "path": "26" - }, - "2000": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "JUMPDEST", - "path": "26" - }, - "2001": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "POP", - "path": "26" - }, - "2002": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "GAS", - "path": "26" - }, - "2003": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "STATICCALL", - "path": "26" - }, - "2004": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "ISZERO", - "path": "26" - }, - "2005": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "DUP1", - "path": "26" - }, - "2006": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "ISZERO", - "path": "26" - }, - "2007": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "PUSH2", - "path": "26", - "value": "0x7E4" - }, - "2010": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "JUMPI", - "path": "26" - }, - "2011": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "RETURNDATASIZE", - "path": "26" - }, - "2012": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "PUSH1", - "path": "26", - "value": "0x0" - }, - "2014": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "DUP1", - "path": "26" - }, - "2015": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "RETURNDATACOPY", - "path": "26" - }, - "2016": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "RETURNDATASIZE", - "path": "26" - }, - "2017": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "PUSH1", - "path": "26", - "value": "0x0" - }, - "2019": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "REVERT", - "path": "26" - }, - "2020": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "JUMPDEST", - "path": "26" - }, - "2021": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "POP", - "path": "26" - }, - "2022": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "POP", - "path": "26" - }, - "2023": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "POP", - "path": "26" - }, - "2024": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "POP", - "path": "26" - }, - "2025": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "PUSH1", - "path": "26", - "value": "0x40" - }, - "2027": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "MLOAD", - "path": "26" - }, - "2028": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "RETURNDATASIZE", - "path": "26" - }, - "2029": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "PUSH1", - "path": "26", - "value": "0x20" - }, - "2031": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "DUP2", - "path": "26" - }, - "2032": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "LT", - "path": "26" - }, - "2033": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "ISZERO", - "path": "26" - }, - "2034": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "PUSH2", - "path": "26", - "value": "0x7FA" - }, - "2037": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "JUMPI", - "path": "26" - }, - "2038": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "PUSH1", - "path": "26", - "value": "0x0" - }, - "2040": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "DUP1", - "path": "26" - }, - "2041": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "REVERT", - "path": "26" - }, - "2042": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "JUMPDEST", - "path": "26" - }, - "2043": { - "op": "POP" - }, - "2044": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 554], - "op": "MLOAD", - "path": "26" - }, - "2045": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 563], - "op": "ADD", - "path": "26" - }, - "2046": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 584], - "op": "GT", - "path": "26" - }, - "2047": { - "branch": 87, - "fn": "StarknetERC20Bridge.deposit", - "offset": [507, 584], - "op": "ISZERO", - "path": "26" - }, - "2048": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "PUSH2", - "path": "26", - "value": "0x847" - }, - "2051": { - "branch": 87, - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "JUMPI", - "path": "26" - }, - "2052": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "PUSH1", - "path": "26", - "value": "0x40" - }, - "2054": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "DUP1", - "path": "26" - }, - "2055": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "MLOAD", - "path": "26" - }, - "2056": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "2060": { - "op": "PUSH1", - "value": "0xE5" - }, - "2062": { - "op": "SHL" - }, - "2063": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "DUP2", - "path": "26" - }, - "2064": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "MSTORE", - "path": "26" - }, - "2065": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "PUSH1", - "path": "26", - "value": "0x20" - }, - "2067": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "PUSH1", - "path": "26", - "value": "0x4" - }, - "2069": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "DUP3", - "path": "26" - }, - "2070": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "ADD", - "path": "26" - }, - "2071": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "MSTORE", - "path": "26" - }, - "2072": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "PUSH1", - "path": "26", - "value": "0x14" - }, - "2074": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "PUSH1", - "path": "26", - "value": "0x24" - }, - "2076": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "DUP3", - "path": "26" - }, - "2077": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "ADD", - "path": "26" - }, - "2078": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "MSTORE", - "path": "26" - }, - "2079": { - "op": "PUSH20", - "value": "0x13505617D09053105390D157D15610D151511151" - }, - "2100": { - "op": "PUSH1", - "value": "0x62" - }, - "2102": { - "op": "SHL" - }, - "2103": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "PUSH1", - "path": "26", - "value": "0x44" - }, - "2105": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "DUP3", - "path": "26" - }, - "2106": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "ADD", - "path": "26" - }, - "2107": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "MSTORE", - "path": "26" - }, - "2108": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "SWAP1", - "path": "26" - }, - "2109": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "MLOAD", - "path": "26" - }, - "2110": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "SWAP1", - "path": "26" - }, - "2111": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "DUP2", - "path": "26" - }, - "2112": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "SWAP1", - "path": "26" - }, - "2113": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "SUB", - "path": "26" - }, - "2114": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "PUSH1", - "path": "26", - "value": "0x64" - }, - "2116": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "ADD", - "path": "26" - }, - "2117": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "SWAP1", - "path": "26" - }, - "2118": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "REVERT", - "path": "26" - }, - "2119": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [486, 630], - "op": "JUMPDEST", - "path": "26" - }, - "2120": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [640, 696], - "op": "PUSH2", - "path": "26", - "statement": 22, - "value": "0x859" - }, - "2123": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [661, 675], - "op": "PUSH2", - "path": "26", - "value": "0x852" - }, - "2126": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [661, 673], - "op": "PUSH2", - "path": "26", - "value": "0xA19" - }, - "2129": { - "fn": "StarknetERC20Bridge.deposit", - "jump": "i", - "offset": [661, 675], - "op": "JUMP", - "path": "26" - }, - "2130": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [661, 675], - "op": "JUMPDEST", - "path": "26" - }, - "2131": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [677, 687], - "op": "CALLER", - "path": "26" - }, - "2132": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [689, 695], - "op": "DUP5", - "path": "26" - }, - "2133": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [640, 660], - "op": "PUSH2", - "path": "26", - "value": "0x13F4" - }, - "2136": { - "fn": "StarknetERC20Bridge.deposit", - "jump": "i", - "offset": [640, 696], - "op": "JUMP", - "path": "26" - }, - "2137": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [640, 696], - "op": "JUMPDEST", - "path": "26" - }, - "2138": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [706, 738], - "op": "PUSH2", - "path": "26", - "statement": 23, - "value": "0x2C2" - }, - "2141": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [718, 724], - "op": "DUP3", - "path": "26" - }, - "2142": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [726, 737], - "op": "DUP3", - "path": "26" - }, - "2143": { - "fn": "StarknetERC20Bridge.deposit", - "offset": [706, 717], - "op": "PUSH2", - "path": "26", - "value": "0x15DD" - }, - "2146": { - "fn": "StarknetERC20Bridge.deposit", - "jump": "i", - "offset": [706, 738], - "op": "JUMP", - "path": "26" - }, - "2147": { - "fn": "StarknetGovernance.starknetCancelNomination", - "offset": [1084, 1164], - "op": "JUMPDEST", - "path": "34" - }, - "2148": { - "fn": "StarknetGovernance.starknetCancelNomination", - "offset": [1139, 1157], - "op": "PUSH2", - "path": "34", - "statement": 24, - "value": "0x55E" - }, - "2151": { - "fn": "StarknetGovernance.starknetCancelNomination", - "offset": [1139, 1155], - "op": "PUSH2", - "path": "34", - "value": "0x18CB" - }, - "2154": { - "fn": "StarknetGovernance.starknetCancelNomination", - "jump": "i", - "offset": [1139, 1157], - "op": "JUMP", - "path": "34" - }, - "2155": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3857, 4296], - "op": "JUMPDEST", - "path": "28" - }, - "2156": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "PUSH1", - "path": "28", - "statement": 25, - "value": "0x40" - }, - "2158": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "DUP1", - "path": "28" - }, - "2159": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "MLOAD", - "path": "28" - }, - "2160": { - "op": "PUSH1", - "value": "0x1" - }, - "2162": { - "op": "PUSH1", - "value": "0x1" - }, - "2164": { - "op": "PUSH1", - "value": "0xA0" - }, - "2166": { - "op": "SHL" - }, - "2167": { - "op": "SUB" - }, - "2168": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "DUP4", - "path": "28" - }, - "2169": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "AND", - "path": "28" - }, - "2170": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "DUP2", - "path": "28" - }, - "2171": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "MSTORE", - "path": "28" - }, - "2172": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2174": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "DUP2", - "path": "28" - }, - "2175": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "ADD", - "path": "28" - }, - "2176": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "DUP5", - "path": "28" - }, - "2177": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "SWAP1", - "path": "28" - }, - "2178": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "MSTORE", - "path": "28" - }, - "2179": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "DUP2", - "path": "28" - }, - "2180": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "MLOAD", - "path": "28" - }, - "2181": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "PUSH32", - "path": "28", - "value": "0xB4214C8C54FC7442F36D3682F59AEBAF09358A4431835B30EFB29D52CF9E1E91" - }, - "2214": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "SWAP3", - "path": "28" - }, - "2215": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "SWAP2", - "path": "28" - }, - "2216": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "DUP2", - "path": "28" - }, - "2217": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "SWAP1", - "path": "28" - }, - "2218": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "SUB", - "path": "28" - }, - "2219": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "SWAP1", - "path": "28" - }, - "2220": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "SWAP2", - "path": "28" - }, - "2221": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "ADD", - "path": "28" - }, - "2222": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "SWAP1", - "path": "28" - }, - "2223": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "LOG1", - "path": "28" - }, - "2224": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "2226": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "DUP1", - "path": "28" - }, - "2227": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "MLOAD", - "path": "28" - }, - "2228": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4024, 4025], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "2230": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "DUP1", - "path": "28" - }, - "2231": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "DUP3", - "path": "28" - }, - "2232": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "MSTORE", - "path": "28" - }, - "2233": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "PUSH1", - "path": "28", - "value": "0xA0" - }, - "2235": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "DUP3", - "path": "28" - }, - "2236": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "ADD", - "path": "28" - }, - "2237": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "SWAP1", - "path": "28" - }, - "2238": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "SWAP3", - "path": "28" - }, - "2239": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "MSTORE", - "path": "28" - }, - "2240": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3983, 4007], - "op": "PUSH1", - "path": "28", - "value": "0x60" - }, - "2242": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3983, 4007], - "op": "SWAP2", - "path": "28" - }, - "2243": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2245": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "DUP3", - "path": "28" - }, - "2246": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "ADD", - "path": "28" - }, - "2247": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "PUSH1", - "path": "28", - "value": "0x80" - }, - "2249": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "DUP1", - "path": "28" - }, - "2250": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "CALLDATASIZE", - "path": "28" - }, - "2251": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "DUP4", - "path": "28" - }, - "2252": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "CALLDATACOPY", - "path": "28" - }, - "2253": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "ADD", - "path": "28" - }, - "2254": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "SWAP1", - "path": "28" - }, - "2255": { - "op": "POP" - }, - "2256": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "POP", - "path": "28" - }, - "2257": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3983, 4026], - "op": "SWAP1", - "path": "28" - }, - "2258": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3983, 4026], - "op": "POP", - "path": "28" - }, - "2259": { - "offset": [2140, 2141], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "2261": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4043], - "op": "DUP2", - "path": "28", - "statement": 26 - }, - "2262": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4044, 4045], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "2264": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4046], - "op": "DUP2", - "path": "28" - }, - "2265": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4046], - "op": "MLOAD", - "path": "28" - }, - "2266": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4046], - "op": "DUP2", - "path": "28" - }, - "2267": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4046], - "op": "LT", - "path": "28" - }, - "2268": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4046], - "op": "PUSH2", - "path": "28", - "value": "0x8E1" - }, - "2271": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4046], - "op": "JUMPI", - "path": "28" - }, - "2272": { - "dev": "Index out of range", - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4046], - "op": "INVALID", - "path": "28" - }, - "2273": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4046], - "op": "JUMPDEST", - "path": "28" - }, - "2274": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4046], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2276": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4046], - "op": "MUL", - "path": "28" - }, - "2277": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4046], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2279": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4046], - "op": "ADD", - "path": "28" - }, - "2280": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4046], - "op": "ADD", - "path": "28" - }, - "2281": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4071], - "op": "DUP2", - "path": "28" - }, - "2282": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4071], - "op": "DUP2", - "path": "28" - }, - "2283": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4071], - "op": "MSTORE", - "path": "28" - }, - "2284": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4071], - "op": "POP", - "path": "28" - }, - "2285": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4071], - "op": "POP", - "path": "28" - }, - "2286": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4102, 4111], - "op": "DUP2", - "path": "28", - "statement": 27 - }, - "2287": { - "op": "PUSH1", - "value": "0x1" - }, - "2289": { - "op": "PUSH1", - "value": "0x1" - }, - "2291": { - "op": "PUSH1", - "value": "0xA0" - }, - "2293": { - "op": "SHL" - }, - "2294": { - "op": "SUB" - }, - "2295": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4094, 4112], - "op": "AND", - "path": "28" - }, - "2296": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4088], - "op": "DUP2", - "path": "28" - }, - "2297": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4089, 4090], - "op": "PUSH1", - "path": "28", - "value": "0x1" - }, - "2299": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "DUP2", - "path": "28" - }, - "2300": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "MLOAD", - "path": "28" - }, - "2301": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "DUP2", - "path": "28" - }, - "2302": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "LT", - "path": "28" - }, - "2303": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "PUSH2", - "path": "28", - "value": "0x904" - }, - "2306": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "JUMPI", - "path": "28" - }, - "2307": { - "dev": "Index out of range", - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "INVALID", - "path": "28" - }, - "2308": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "JUMPDEST", - "path": "28" - }, - "2309": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2311": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "SWAP1", - "path": "28" - }, - "2312": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "DUP2", - "path": "28" - }, - "2313": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "MUL", - "path": "28" - }, - "2314": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "SWAP2", - "path": "28" - }, - "2315": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "SWAP1", - "path": "28" - }, - "2316": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "SWAP2", - "path": "28" - }, - "2317": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "ADD", - "path": "28" - }, - "2318": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "ADD", - "path": "28" - }, - "2319": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4112], - "op": "MSTORE", - "path": "28" - }, - "2320": { - "op": "PUSH1", - "value": "0x1" - }, - "2322": { - "op": "PUSH1", - "value": "0x80" - }, - "2324": { - "op": "SHL" - }, - "2325": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4135, 4141], - "op": "DUP4", - "path": "28", - "statement": 28 - }, - "2326": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4135, 4161], - "op": "MOD", - "path": "28" - }, - "2327": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4129], - "op": "DUP2", - "path": "28" - }, - "2328": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4130, 4131], - "op": "PUSH1", - "path": "28", - "value": "0x2" - }, - "2330": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "DUP2", - "path": "28" - }, - "2331": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "MLOAD", - "path": "28" - }, - "2332": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "DUP2", - "path": "28" - }, - "2333": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "LT", - "path": "28" - }, - "2334": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "PUSH2", - "path": "28", - "value": "0x923" - }, - "2337": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "JUMPI", - "path": "28" - }, - "2338": { - "dev": "Index out of range", - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "INVALID", - "path": "28" - }, - "2339": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "JUMPDEST", - "path": "28" - }, - "2340": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2342": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "SWAP1", - "path": "28" - }, - "2343": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "DUP2", - "path": "28" - }, - "2344": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "MUL", - "path": "28" - }, - "2345": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "SWAP2", - "path": "28" - }, - "2346": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "SWAP1", - "path": "28" - }, - "2347": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "SWAP2", - "path": "28" - }, - "2348": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "ADD", - "path": "28" - }, - "2349": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "ADD", - "path": "28" - }, - "2350": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4161], - "op": "MSTORE", - "path": "28" - }, - "2351": { - "op": "PUSH1", - "value": "0x1" - }, - "2353": { - "op": "PUSH1", - "value": "0x80" - }, - "2355": { - "op": "SHL" - }, - "2356": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4184, 4190], - "op": "DUP4", - "path": "28", - "statement": 29 - }, - "2357": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4184, 4210], - "op": "DIV", - "path": "28" - }, - "2358": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4178], - "op": "DUP2", - "path": "28" - }, - "2359": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4179, 4180], - "op": "PUSH1", - "path": "28", - "value": "0x3" - }, - "2361": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4181], - "op": "DUP2", - "path": "28" - }, - "2362": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4181], - "op": "MLOAD", - "path": "28" - }, - "2363": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4181], - "op": "DUP2", - "path": "28" - }, - "2364": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4181], - "op": "LT", - "path": "28" - }, - "2365": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4181], - "op": "PUSH2", - "path": "28", - "value": "0x942" - }, - "2368": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4181], - "op": "JUMPI", - "path": "28" - }, - "2369": { - "dev": "Index out of range", - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4181], - "op": "INVALID", - "path": "28" - }, - "2370": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4181], - "op": "JUMPDEST", - "path": "28" - }, - "2371": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4181], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2373": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4181], - "op": "MUL", - "path": "28" - }, - "2374": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4181], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2376": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4181], - "op": "ADD", - "path": "28" - }, - "2377": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4181], - "op": "ADD", - "path": "28" - }, - "2378": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4210], - "op": "DUP2", - "path": "28" - }, - "2379": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4210], - "op": "DUP2", - "path": "28" - }, - "2380": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4210], - "op": "MSTORE", - "path": "28" - }, - "2381": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4210], - "op": "POP", - "path": "28" - }, - "2382": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4210], - "op": "POP", - "path": "28" - }, - "2383": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4240], - "op": "PUSH2", - "path": "28", - "statement": 30, - "value": "0x956" - }, - "2386": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4238], - "op": "PUSH2", - "path": "28", - "value": "0x1962" - }, - "2389": { - "fn": "StarknetTokenBridge.consumeMessage", - "jump": "i", - "offset": [4221, 4240], - "op": "JUMP", - "path": "28" - }, - "2390": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4240], - "op": "JUMPDEST", - "path": "28" - }, - "2391": { - "op": "PUSH1", - "value": "0x1" - }, - "2393": { - "op": "PUSH1", - "value": "0x1" - }, - "2395": { - "op": "PUSH1", - "value": "0xA0" - }, - "2397": { - "op": "SHL" - }, - "2398": { - "op": "SUB" - }, - "2399": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4261], - "op": "AND", - "path": "28" - }, - "2400": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4261], - "op": "PUSH4", - "path": "28", - "value": "0x2C9DD5C0" - }, - "2405": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4262, 4279], - "op": "PUSH2", - "path": "28", - "value": "0x96C" - }, - "2408": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4262, 4277], - "op": "PUSH2", - "path": "28", - "value": "0x136A" - }, - "2411": { - "fn": "StarknetTokenBridge.consumeMessage", - "jump": "i", - "offset": [4262, 4279], - "op": "JUMP", - "path": "28" - }, - "2412": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4262, 4279], - "op": "JUMPDEST", - "path": "28" - }, - "2413": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4281, 4288], - "op": "DUP4", - "path": "28" - }, - "2414": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "2416": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "MLOAD", - "path": "28" - }, - "2417": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP4", - "path": "28" - }, - "2418": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH4", - "path": "28", - "value": "0xFFFFFFFF" - }, - "2423": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "AND", - "path": "28" - }, - "2424": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0xE0" - }, - "2426": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "SHL", - "path": "28" - }, - "2427": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP2", - "path": "28" - }, - "2428": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "MSTORE", - "path": "28" - }, - "2429": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "2431": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ADD", - "path": "28" - }, - "2432": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP1", - "path": "28" - }, - "2433": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP4", - "path": "28" - }, - "2434": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP2", - "path": "28" - }, - "2435": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "MSTORE", - "path": "28" - }, - "2436": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2438": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ADD", - "path": "28" - }, - "2439": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP1", - "path": "28" - }, - "2440": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2442": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ADD", - "path": "28" - }, - "2443": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP3", - "path": "28" - }, - "2444": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP2", - "path": "28" - }, - "2445": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "SUB", - "path": "28" - }, - "2446": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP3", - "path": "28" - }, - "2447": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "MSTORE", - "path": "28" - }, - "2448": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP4", - "path": "28" - }, - "2449": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP2", - "path": "28" - }, - "2450": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP2", - "path": "28" - }, - "2451": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "MLOAD", - "path": "28" - }, - "2452": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP2", - "path": "28" - }, - "2453": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "MSTORE", - "path": "28" - }, - "2454": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2456": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ADD", - "path": "28" - }, - "2457": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "SWAP2", - "path": "28" - }, - "2458": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2459": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP1", - "path": "28" - }, - "2460": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "MLOAD", - "path": "28" - }, - "2461": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "SWAP1", - "path": "28" - }, - "2462": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2464": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ADD", - "path": "28" - }, - "2465": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "SWAP1", - "path": "28" - }, - "2466": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2468": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "MUL", - "path": "28" - }, - "2469": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP1", - "path": "28" - }, - "2470": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP4", - "path": "28" - }, - "2471": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP4", - "path": "28" - }, - "2472": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "2474": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "JUMPDEST", - "path": "28" - }, - "2475": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP4", - "path": "28" - }, - "2476": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP2", - "path": "28" - }, - "2477": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "LT", - "path": "28" - }, - "2478": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ISZERO", - "path": "28" - }, - "2479": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH2", - "path": "28", - "value": "0x9C2" - }, - "2482": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "JUMPI", - "path": "28" - }, - "2483": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP2", - "path": "28" - }, - "2484": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP2", - "path": "28" - }, - "2485": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ADD", - "path": "28" - }, - "2486": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "MLOAD", - "path": "28" - }, - "2487": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP4", - "path": "28" - }, - "2488": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP3", - "path": "28" - }, - "2489": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ADD", - "path": "28" - }, - "2490": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "MSTORE", - "path": "28" - }, - "2491": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2493": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ADD", - "path": "28" - }, - "2494": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH2", - "path": "28", - "value": "0x9AA" - }, - "2497": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "JUMP", - "path": "28" - }, - "2498": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "JUMPDEST", - "path": "28" - }, - "2499": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2500": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2501": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2502": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2503": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "SWAP1", - "path": "28" - }, - "2504": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2505": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ADD", - "path": "28" - }, - "2506": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "SWAP4", - "path": "28" - }, - "2507": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2508": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2509": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2510": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2511": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2513": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "2515": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "MLOAD", - "path": "28" - }, - "2516": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP1", - "path": "28" - }, - "2517": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP4", - "path": "28" - }, - "2518": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "SUB", - "path": "28" - }, - "2519": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP2", - "path": "28" - }, - "2520": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "2522": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP8", - "path": "28" - }, - "2523": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP1", - "path": "28" - }, - "2524": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "EXTCODESIZE", - "path": "28" - }, - "2525": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ISZERO", - "path": "28" - }, - "2526": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP1", - "path": "28" - }, - "2527": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ISZERO", - "path": "28" - }, - "2528": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH2", - "path": "28", - "value": "0x9E8" - }, - "2531": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "JUMPI", - "path": "28" - }, - "2532": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "2534": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP1", - "path": "28" - }, - "2535": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "REVERT", - "path": "28" - }, - "2536": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "JUMPDEST", - "path": "28" - }, - "2537": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2538": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "GAS", - "path": "28" - }, - "2539": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "CALL", - "path": "28" - }, - "2540": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ISZERO", - "path": "28" - }, - "2541": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP1", - "path": "28" - }, - "2542": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ISZERO", - "path": "28" - }, - "2543": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH2", - "path": "28", - "value": "0x9FC" - }, - "2546": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "JUMPI", - "path": "28" - }, - "2547": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "RETURNDATASIZE", - "path": "28" - }, - "2548": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "2550": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP1", - "path": "28" - }, - "2551": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "RETURNDATACOPY", - "path": "28" - }, - "2552": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "RETURNDATASIZE", - "path": "28" - }, - "2553": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "2555": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "REVERT", - "path": "28" - }, - "2556": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "JUMPDEST", - "path": "28" - }, - "2557": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2558": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2559": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2560": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2561": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "2563": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "MLOAD", - "path": "28" - }, - "2564": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "RETURNDATASIZE", - "path": "28" - }, - "2565": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2567": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP2", - "path": "28" - }, - "2568": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "LT", - "path": "28" - }, - "2569": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ISZERO", - "path": "28" - }, - "2570": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH2", - "path": "28", - "value": "0xA12" - }, - "2573": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "JUMPI", - "path": "28" - }, - "2574": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "2576": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP1", - "path": "28" - }, - "2577": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "REVERT", - "path": "28" - }, - "2578": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "JUMPDEST", - "path": "28" - }, - "2579": { - "op": "POP" - }, - "2580": { - "op": "POP" - }, - "2581": { - "op": "POP" - }, - "2582": { - "op": "POP" - }, - "2583": { - "op": "POP" - }, - "2584": { - "fn": "StarknetTokenBridge.consumeMessage", - "jump": "o", - "offset": [3857, 4296], - "op": "JUMP", - "path": "28" - }, - "2585": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [763, 890], - "op": "JUMPDEST", - "path": "29" - }, - "2586": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [810, 817], - "op": "PUSH1", - "path": "29", - "value": "0x0" - }, - "2588": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [836, 883], - "op": "PUSH2", - "path": "29", - "statement": 31, - "value": "0xA3C" - }, - "2591": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [865, 882], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "2593": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [865, 882], - "op": "MLOAD", - "path": "29" - }, - "2594": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [865, 882], - "op": "DUP1", - "path": "29" - }, - "2595": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [865, 882], - "op": "PUSH1", - "path": "29", - "value": "0x60" - }, - "2597": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [865, 882], - "op": "ADD", - "path": "29" - }, - "2598": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [865, 882], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "2600": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [865, 882], - "op": "MSTORE", - "path": "29" - }, - "2601": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [865, 882], - "op": "DUP1", - "path": "29" - }, - "2602": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [865, 882], - "op": "PUSH1", - "path": "29", - "value": "0x29" - }, - "2604": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [865, 882], - "op": "DUP2", - "path": "29" - }, - "2605": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [865, 882], - "op": "MSTORE", - "path": "29" - }, - "2606": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [865, 882], - "op": "PUSH1", - "path": "29", - "value": "0x20" - }, - "2608": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [865, 882], - "op": "ADD", - "path": "29" - }, - "2609": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [865, 882], - "op": "PUSH2", - "path": "29", - "value": "0x1F4E" - }, - "2612": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [865, 882], - "op": "PUSH1", - "path": "29", - "value": "0x29" - }, - "2614": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [865, 882], - "op": "SWAP2", - "path": "29" - }, - "2615": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [865, 882], - "op": "CODECOPY", - "path": "29" - }, - "2616": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [836, 864], - "op": "PUSH2", - "path": "29", - "value": "0x1981" - }, - "2619": { - "fn": "StarknetTokenStorage.bridgedToken", - "jump": "i", - "offset": [836, 883], - "op": "JUMP", - "path": "29" - }, - "2620": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [836, 883], - "op": "JUMPDEST", - "path": "29" - }, - "2621": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [829, 883], - "op": "SWAP1", - "path": "29" - }, - "2622": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [829, 883], - "op": "POP", - "path": "29" - }, - "2623": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [763, 890], - "op": "SWAP1", - "path": "29" - }, - "2624": { - "fn": "StarknetTokenStorage.bridgedToken", - "jump": "o", - "offset": [763, 890], - "op": "JUMP", - "path": "29" - }, - "2625": { - "fn": "Transfers.transferOut", - "offset": [1181, 2067], - "op": "JUMPDEST", - "path": "30" - }, - "2626": { - "fn": "Transfers.transferOut", - "offset": [1329, 1334], - "op": "DUP3", - "path": "30" - }, - "2627": { - "op": "PUSH1", - "value": "0x1" - }, - "2629": { - "op": "PUSH1", - "value": "0x1" - }, - "2631": { - "op": "PUSH1", - "value": "0xA0" - }, - "2633": { - "op": "SHL" - }, - "2634": { - "op": "SUB" - }, - "2635": { - "fn": "Transfers.transferOut", - "offset": [1408, 1433], - "op": "DUP4", - "path": "30", - "statement": 32 - }, - "2636": { - "branch": 111, - "fn": "Transfers.transferOut", - "offset": [1408, 1433], - "op": "AND", - "path": "30" - }, - "2637": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "PUSH2", - "path": "30", - "value": "0xA91" - }, - "2640": { - "branch": 111, - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "JUMPI", - "path": "30" - }, - "2641": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "PUSH1", - "path": "30", - "value": "0x40" - }, - "2643": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "DUP1", - "path": "30" - }, - "2644": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "MLOAD", - "path": "30" - }, - "2645": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "2649": { - "op": "PUSH1", - "value": "0xE5" - }, - "2651": { - "op": "SHL" - }, - "2652": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "DUP2", - "path": "30" - }, - "2653": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "MSTORE", - "path": "30" - }, - "2654": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "PUSH1", - "path": "30", - "value": "0x20" - }, - "2656": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "PUSH1", - "path": "30", - "value": "0x4" - }, - "2658": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "DUP3", - "path": "30" - }, - "2659": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "ADD", - "path": "30" - }, - "2660": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "MSTORE", - "path": "30" - }, - "2661": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "PUSH1", - "path": "30", - "value": "0x11" - }, - "2663": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "PUSH1", - "path": "30", - "value": "0x24" - }, - "2665": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "DUP3", - "path": "30" - }, - "2666": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "ADD", - "path": "30" - }, - "2667": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "MSTORE", - "path": "30" - }, - "2668": { - "op": "PUSH17", - "value": "0x1253959053125117D49150D25412515395" - }, - "2686": { - "op": "PUSH1", - "value": "0x7A" - }, - "2688": { - "op": "SHL" - }, - "2689": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "PUSH1", - "path": "30", - "value": "0x44" - }, - "2691": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "DUP3", - "path": "30" - }, - "2692": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "ADD", - "path": "30" - }, - "2693": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "MSTORE", - "path": "30" - }, - "2694": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "SWAP1", - "path": "30" - }, - "2695": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "MLOAD", - "path": "30" - }, - "2696": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "SWAP1", - "path": "30" - }, - "2697": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "DUP2", - "path": "30" - }, - "2698": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "SWAP1", - "path": "30" - }, - "2699": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "SUB", - "path": "30" - }, - "2700": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "PUSH1", - "path": "30", - "value": "0x64" - }, - "2702": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "ADD", - "path": "30" - }, - "2703": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "SWAP1", - "path": "30" - }, - "2704": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "REVERT", - "path": "30" - }, - "2705": { - "fn": "Transfers.transferOut", - "offset": [1400, 1455], - "op": "JUMPDEST", - "path": "30" - }, - "2706": { - "fn": "Transfers.transferOut", - "offset": [1465, 1492], - "op": "PUSH1", - "path": "30", - "value": "0x0" - }, - "2708": { - "fn": "Transfers.transferOut", - "offset": [1495, 1506], - "op": "DUP2", - "path": "30" - }, - "2709": { - "op": "PUSH1", - "value": "0x1" - }, - "2711": { - "op": "PUSH1", - "value": "0x1" - }, - "2713": { - "op": "PUSH1", - "value": "0xA0" - }, - "2715": { - "op": "SHL" - }, - "2716": { - "op": "SUB" - }, - "2717": { - "fn": "Transfers.transferOut", - "offset": [1495, 1516], - "op": "AND", - "path": "30" - }, - "2718": { - "fn": "Transfers.transferOut", - "offset": [1495, 1516], - "op": "PUSH4", - "path": "30", - "value": "0x70A08231" - }, - "2723": { - "fn": "Transfers.transferOut", - "offset": [1525, 1529], - "op": "ADDRESS", - "path": "30" - }, - "2724": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "PUSH1", - "path": "30", - "value": "0x40" - }, - "2726": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "MLOAD", - "path": "30" - }, - "2727": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "DUP3", - "path": "30" - }, - "2728": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "PUSH4", - "path": "30", - "value": "0xFFFFFFFF" - }, - "2733": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "AND", - "path": "30" - }, - "2734": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "PUSH1", - "path": "30", - "value": "0xE0" - }, - "2736": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "SHL", - "path": "30" - }, - "2737": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "DUP2", - "path": "30" - }, - "2738": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "MSTORE", - "path": "30" - }, - "2739": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "PUSH1", - "path": "30", - "value": "0x4" - }, - "2741": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "ADD", - "path": "30" - }, - "2742": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "DUP1", - "path": "30" - }, - "2743": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "DUP3", - "path": "30" - }, - "2744": { - "op": "PUSH1", - "value": "0x1" - }, - "2746": { - "op": "PUSH1", - "value": "0x1" - }, - "2748": { - "op": "PUSH1", - "value": "0xA0" - }, - "2750": { - "op": "SHL" - }, - "2751": { - "op": "SUB" - }, - "2752": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "AND", - "path": "30" - }, - "2753": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "DUP2", - "path": "30" - }, - "2754": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "MSTORE", - "path": "30" - }, - "2755": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "PUSH1", - "path": "30", - "value": "0x20" - }, - "2757": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "ADD", - "path": "30" - }, - "2758": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "SWAP2", - "path": "30" - }, - "2759": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "POP", - "path": "30" - }, - "2760": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "POP", - "path": "30" - }, - "2761": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "PUSH1", - "path": "30", - "value": "0x20" - }, - "2763": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "PUSH1", - "path": "30", - "value": "0x40" - }, - "2765": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "MLOAD", - "path": "30" - }, - "2766": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "DUP1", - "path": "30" - }, - "2767": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "DUP4", - "path": "30" - }, - "2768": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "SUB", - "path": "30" - }, - "2769": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "DUP2", - "path": "30" - }, - "2770": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "DUP7", - "path": "30" - }, - "2771": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "DUP1", - "path": "30" - }, - "2772": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "EXTCODESIZE", - "path": "30" - }, - "2773": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "ISZERO", - "path": "30" - }, - "2774": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "DUP1", - "path": "30" - }, - "2775": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "ISZERO", - "path": "30" - }, - "2776": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "PUSH2", - "path": "30", - "value": "0xAE0" - }, - "2779": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "JUMPI", - "path": "30" - }, - "2780": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "PUSH1", - "path": "30", - "value": "0x0" - }, - "2782": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "DUP1", - "path": "30" - }, - "2783": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "REVERT", - "path": "30" - }, - "2784": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "JUMPDEST", - "path": "30" - }, - "2785": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "POP", - "path": "30" - }, - "2786": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "GAS", - "path": "30" - }, - "2787": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "STATICCALL", - "path": "30" - }, - "2788": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "ISZERO", - "path": "30" - }, - "2789": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "DUP1", - "path": "30" - }, - "2790": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "ISZERO", - "path": "30" - }, - "2791": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "PUSH2", - "path": "30", - "value": "0xAF4" - }, - "2794": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "JUMPI", - "path": "30" - }, - "2795": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "RETURNDATASIZE", - "path": "30" - }, - "2796": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "PUSH1", - "path": "30", - "value": "0x0" - }, - "2798": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "DUP1", - "path": "30" - }, - "2799": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "RETURNDATACOPY", - "path": "30" - }, - "2800": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "RETURNDATASIZE", - "path": "30" - }, - "2801": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "PUSH1", - "path": "30", - "value": "0x0" - }, - "2803": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "REVERT", - "path": "30" - }, - "2804": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "JUMPDEST", - "path": "30" - }, - "2805": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "POP", - "path": "30" - }, - "2806": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "POP", - "path": "30" - }, - "2807": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "POP", - "path": "30" - }, - "2808": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "POP", - "path": "30" - }, - "2809": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "PUSH1", - "path": "30", - "value": "0x40" - }, - "2811": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "MLOAD", - "path": "30" - }, - "2812": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "RETURNDATASIZE", - "path": "30" - }, - "2813": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "PUSH1", - "path": "30", - "value": "0x20" - }, - "2815": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "DUP2", - "path": "30" - }, - "2816": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "LT", - "path": "30" - }, - "2817": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "ISZERO", - "path": "30" - }, - "2818": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "PUSH2", - "path": "30", - "value": "0xB0A" - }, - "2821": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "JUMPI", - "path": "30" - }, - "2822": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "PUSH1", - "path": "30", - "value": "0x0" - }, - "2824": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "DUP1", - "path": "30" - }, - "2825": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "REVERT", - "path": "30" - }, - "2826": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "JUMPDEST", - "path": "30" - }, - "2827": { - "op": "POP" - }, - "2828": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "MLOAD", - "path": "30" - }, - "2829": { - "fn": "Transfers.transferOut", - "offset": [1495, 1531], - "op": "SWAP1", - "path": "30" - }, - "2830": { - "op": "POP" - }, - "2831": { - "fn": "Transfers.transferOut", - "offset": [1549, 1577], - "op": "DUP3", - "path": "30", - "statement": 33 - }, - "2832": { - "fn": "Transfers.transferOut", - "offset": [1549, 1577], - "op": "DUP2", - "path": "30" - }, - "2833": { - "fn": "Transfers.transferOut", - "offset": [1549, 1577], - "op": "SUB", - "path": "30" - }, - "2834": { - "fn": "Transfers.transferOut", - "offset": [1549, 1600], - "op": "DUP2", - "path": "30" - }, - "2835": { - "op": "LT" - }, - "2836": { - "branch": 112, - "fn": "Transfers.transferOut", - "offset": [1549, 1600], - "op": "ISZERO", - "path": "30" - }, - "2837": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "PUSH2", - "path": "30", - "value": "0xB51" - }, - "2840": { - "branch": 112, - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "JUMPI", - "path": "30" - }, - "2841": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "PUSH1", - "path": "30", - "value": "0x40" - }, - "2843": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "DUP1", - "path": "30" - }, - "2844": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "MLOAD", - "path": "30" - }, - "2845": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "2849": { - "op": "PUSH1", - "value": "0xE5" - }, - "2851": { - "op": "SHL" - }, - "2852": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "DUP2", - "path": "30" - }, - "2853": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "MSTORE", - "path": "30" - }, - "2854": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "PUSH1", - "path": "30", - "value": "0x20" - }, - "2856": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "PUSH1", - "path": "30", - "value": "0x4" - }, - "2858": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "DUP3", - "path": "30" - }, - "2859": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "ADD", - "path": "30" - }, - "2860": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "MSTORE", - "path": "30" - }, - "2861": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "PUSH1", - "path": "30", - "value": "0x9" - }, - "2863": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "PUSH1", - "path": "30", - "value": "0x24" - }, - "2865": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "DUP3", - "path": "30" - }, - "2866": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "ADD", - "path": "30" - }, - "2867": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "MSTORE", - "path": "30" - }, - "2868": { - "op": "PUSH9", - "value": "0x554E444552464C4F57" - }, - "2878": { - "op": "PUSH1", - "value": "0xB8" - }, - "2880": { - "op": "SHL" - }, - "2881": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "PUSH1", - "path": "30", - "value": "0x44" - }, - "2883": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "DUP3", - "path": "30" - }, - "2884": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "ADD", - "path": "30" - }, - "2885": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "MSTORE", - "path": "30" - }, - "2886": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "SWAP1", - "path": "30" - }, - "2887": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "MLOAD", - "path": "30" - }, - "2888": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "SWAP1", - "path": "30" - }, - "2889": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "DUP2", - "path": "30" - }, - "2890": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "SWAP1", - "path": "30" - }, - "2891": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "SUB", - "path": "30" - }, - "2892": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "PUSH1", - "path": "30", - "value": "0x64" - }, - "2894": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "ADD", - "path": "30" - }, - "2895": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "SWAP1", - "path": "30" - }, - "2896": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "REVERT", - "path": "30" - }, - "2897": { - "fn": "Transfers.transferOut", - "offset": [1541, 1614], - "op": "JUMPDEST", - "path": "30" - }, - "2898": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "PUSH1", - "path": "30", - "value": "0x40" - }, - "2900": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "DUP1", - "path": "30" - }, - "2901": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "MLOAD", - "path": "30" - }, - "2902": { - "op": "PUSH1", - "value": "0x1" - }, - "2904": { - "op": "PUSH1", - "value": "0x1" - }, - "2906": { - "op": "PUSH1", - "value": "0xA0" - }, - "2908": { - "op": "SHL" - }, - "2909": { - "op": "SUB" - }, - "2910": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "DUP1", - "path": "30" - }, - "2911": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "DUP8", - "path": "30" - }, - "2912": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "AND", - "path": "30" - }, - "2913": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "PUSH1", - "path": "30", - "value": "0x24" - }, - "2915": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "DUP4", - "path": "30" - }, - "2916": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "ADD", - "path": "30" - }, - "2917": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "MSTORE", - "path": "30" - }, - "2918": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "PUSH1", - "path": "30", - "value": "0x44" - }, - "2920": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "DUP1", - "path": "30" - }, - "2921": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "DUP4", - "path": "30" - }, - "2922": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "ADD", - "path": "30" - }, - "2923": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "DUP8", - "path": "30" - }, - "2924": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "SWAP1", - "path": "30" - }, - "2925": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "MSTORE", - "path": "30" - }, - "2926": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "DUP4", - "path": "30" - }, - "2927": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "MLOAD", - "path": "30" - }, - "2928": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "DUP1", - "path": "30" - }, - "2929": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "DUP5", - "path": "30" - }, - "2930": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "SUB", - "path": "30" - }, - "2931": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "SWAP1", - "path": "30" - }, - "2932": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "SWAP2", - "path": "30" - }, - "2933": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "ADD", - "path": "30" - }, - "2934": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "DUP2", - "path": "30" - }, - "2935": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "MSTORE", - "path": "30" - }, - "2936": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "PUSH1", - "path": "30", - "value": "0x64" - }, - "2938": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "SWAP1", - "path": "30" - }, - "2939": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "SWAP3", - "path": "30" - }, - "2940": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "ADD", - "path": "30" - }, - "2941": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "SWAP1", - "path": "30" - }, - "2942": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "SWAP3", - "path": "30" - }, - "2943": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "MSTORE", - "path": "30" - }, - "2944": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "PUSH1", - "path": "30", - "value": "0x20" - }, - "2946": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "DUP2", - "path": "30" - }, - "2947": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "ADD", - "path": "30" - }, - "2948": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "DUP1", - "path": "30" - }, - "2949": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "MLOAD", - "path": "30" - }, - "2950": { - "op": "PUSH1", - "value": "0x1" - }, - "2952": { - "op": "PUSH1", - "value": "0x1" - }, - "2954": { - "op": "PUSH1", - "value": "0xE0" - }, - "2956": { - "op": "SHL" - }, - "2957": { - "op": "SUB" - }, - "2958": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "AND", - "path": "30" - }, - "2959": { - "op": "PUSH4", - "value": "0xA9059CBB" - }, - "2964": { - "op": "PUSH1", - "value": "0xE0" - }, - "2966": { - "op": "SHL" - }, - "2967": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "OR", - "path": "30" - }, - "2968": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "SWAP1", - "path": "30" - }, - "2969": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "MSTORE", - "path": "30" - }, - "2970": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "SWAP1", - "path": "30" - }, - "2971": { - "fn": "Transfers.transferOut", - "offset": [1776, 1813], - "op": "PUSH2", - "path": "30", - "statement": 34, - "value": "0xBA6" - }, - "2974": { - "fn": "Transfers.transferOut", - "offset": [1776, 1813], - "op": "SWAP1", - "path": "30" - }, - "2975": { - "fn": "Transfers.transferOut", - "offset": [1776, 1803], - "op": "DUP8", - "path": "30" - }, - "2976": { - "fn": "Transfers.transferOut", - "offset": [1776, 1803], - "op": "AND", - "path": "30" - }, - "2977": { - "fn": "Transfers.transferOut", - "offset": [1648, 1766], - "op": "DUP3", - "path": "30" - }, - "2978": { - "fn": "Transfers.transferOut", - "offset": [1776, 1803], - "op": "PUSH2", - "path": "30", - "value": "0x19FE" - }, - "2981": { - "fn": "Transfers.transferOut", - "jump": "i", - "offset": [1776, 1813], - "op": "JUMP", - "path": "30" - }, - "2982": { - "fn": "Transfers.transferOut", - "offset": [1776, 1813], - "op": "JUMPDEST", - "path": "30" - }, - "2983": { - "fn": "Transfers.transferOut", - "offset": [1823, 1849], - "op": "PUSH1", - "path": "30", - "value": "0x0" - }, - "2985": { - "fn": "Transfers.transferOut", - "offset": [1852, 1863], - "op": "DUP4", - "path": "30" - }, - "2986": { - "op": "PUSH1", - "value": "0x1" - }, - "2988": { - "op": "PUSH1", - "value": "0x1" - }, - "2990": { - "op": "PUSH1", - "value": "0xA0" - }, - "2992": { - "op": "SHL" - }, - "2993": { - "op": "SUB" - }, - "2994": { - "fn": "Transfers.transferOut", - "offset": [1852, 1873], - "op": "AND", - "path": "30" - }, - "2995": { - "fn": "Transfers.transferOut", - "offset": [1852, 1873], - "op": "PUSH4", - "path": "30", - "value": "0x70A08231" - }, - "3000": { - "fn": "Transfers.transferOut", - "offset": [1882, 1886], - "op": "ADDRESS", - "path": "30" - }, - "3001": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "PUSH1", - "path": "30", - "value": "0x40" - }, - "3003": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "MLOAD", - "path": "30" - }, - "3004": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "DUP3", - "path": "30" - }, - "3005": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "PUSH4", - "path": "30", - "value": "0xFFFFFFFF" - }, - "3010": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "AND", - "path": "30" - }, - "3011": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "PUSH1", - "path": "30", - "value": "0xE0" - }, - "3013": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "SHL", - "path": "30" - }, - "3014": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "DUP2", - "path": "30" - }, - "3015": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "MSTORE", - "path": "30" - }, - "3016": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "PUSH1", - "path": "30", - "value": "0x4" - }, - "3018": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "ADD", - "path": "30" - }, - "3019": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "DUP1", - "path": "30" - }, - "3020": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "DUP3", - "path": "30" - }, - "3021": { - "op": "PUSH1", - "value": "0x1" - }, - "3023": { - "op": "PUSH1", - "value": "0x1" - }, - "3025": { - "op": "PUSH1", - "value": "0xA0" - }, - "3027": { - "op": "SHL" - }, - "3028": { - "op": "SUB" - }, - "3029": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "AND", - "path": "30" - }, - "3030": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "DUP2", - "path": "30" - }, - "3031": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "MSTORE", - "path": "30" - }, - "3032": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "PUSH1", - "path": "30", - "value": "0x20" - }, - "3034": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "ADD", - "path": "30" - }, - "3035": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "SWAP2", - "path": "30" - }, - "3036": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "POP", - "path": "30" - }, - "3037": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "POP", - "path": "30" - }, - "3038": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "PUSH1", - "path": "30", - "value": "0x20" - }, - "3040": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "PUSH1", - "path": "30", - "value": "0x40" - }, - "3042": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "MLOAD", - "path": "30" - }, - "3043": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "DUP1", - "path": "30" - }, - "3044": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "DUP4", - "path": "30" - }, - "3045": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "SUB", - "path": "30" - }, - "3046": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "DUP2", - "path": "30" - }, - "3047": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "DUP7", - "path": "30" - }, - "3048": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "DUP1", - "path": "30" - }, - "3049": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "EXTCODESIZE", - "path": "30" - }, - "3050": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "ISZERO", - "path": "30" - }, - "3051": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "DUP1", - "path": "30" - }, - "3052": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "ISZERO", - "path": "30" - }, - "3053": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "PUSH2", - "path": "30", - "value": "0xBF5" - }, - "3056": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "JUMPI", - "path": "30" - }, - "3057": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "PUSH1", - "path": "30", - "value": "0x0" - }, - "3059": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "DUP1", - "path": "30" - }, - "3060": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "REVERT", - "path": "30" - }, - "3061": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "JUMPDEST", - "path": "30" - }, - "3062": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "POP", - "path": "30" - }, - "3063": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "GAS", - "path": "30" - }, - "3064": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "STATICCALL", - "path": "30" - }, - "3065": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "ISZERO", - "path": "30" - }, - "3066": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "DUP1", - "path": "30" - }, - "3067": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "ISZERO", - "path": "30" - }, - "3068": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "PUSH2", - "path": "30", - "value": "0xC09" - }, - "3071": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "JUMPI", - "path": "30" - }, - "3072": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "RETURNDATASIZE", - "path": "30" - }, - "3073": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "PUSH1", - "path": "30", - "value": "0x0" - }, - "3075": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "DUP1", - "path": "30" - }, - "3076": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "RETURNDATACOPY", - "path": "30" - }, - "3077": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "RETURNDATASIZE", - "path": "30" - }, - "3078": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "PUSH1", - "path": "30", - "value": "0x0" - }, - "3080": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "REVERT", - "path": "30" - }, - "3081": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "JUMPDEST", - "path": "30" - }, - "3082": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "POP", - "path": "30" - }, - "3083": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "POP", - "path": "30" - }, - "3084": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "POP", - "path": "30" - }, - "3085": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "POP", - "path": "30" - }, - "3086": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "PUSH1", - "path": "30", - "value": "0x40" - }, - "3088": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "MLOAD", - "path": "30" - }, - "3089": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "RETURNDATASIZE", - "path": "30" - }, - "3090": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "PUSH1", - "path": "30", - "value": "0x20" - }, - "3092": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "DUP2", - "path": "30" - }, - "3093": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "LT", - "path": "30" - }, - "3094": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "ISZERO", - "path": "30" - }, - "3095": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "PUSH2", - "path": "30", - "value": "0xC1F" - }, - "3098": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "JUMPI", - "path": "30" - }, - "3099": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "PUSH1", - "path": "30", - "value": "0x0" - }, - "3101": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "DUP1", - "path": "30" - }, - "3102": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "REVERT", - "path": "30" - }, - "3103": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "JUMPDEST", - "path": "30" - }, - "3104": { - "op": "POP" - }, - "3105": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "MLOAD", - "path": "30" - }, - "3106": { - "fn": "Transfers.transferOut", - "offset": [1852, 1888], - "op": "SWAP1", - "path": "30" - }, - "3107": { - "op": "POP" - }, - "3108": { - "fn": "Transfers.transferOut", - "offset": [1999, 2027], - "op": "DUP5", - "path": "30", - "statement": 35 - }, - "3109": { - "fn": "Transfers.transferOut", - "offset": [1999, 2027], - "op": "DUP4", - "path": "30" - }, - "3110": { - "fn": "Transfers.transferOut", - "offset": [1999, 2027], - "op": "SUB", - "path": "30" - }, - "3111": { - "fn": "Transfers.transferOut", - "offset": [1977, 2027], - "op": "DUP2", - "path": "30" - }, - "3112": { - "branch": 113, - "fn": "Transfers.transferOut", - "offset": [1977, 2027], - "op": "EQ", - "path": "30" - }, - "3113": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "PUSH2", - "path": "30", - "value": "0xC79" - }, - "3116": { - "branch": 113, - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "JUMPI", - "path": "30" - }, - "3117": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "PUSH1", - "path": "30", - "value": "0x40" - }, - "3119": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "DUP1", - "path": "30" - }, - "3120": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "MLOAD", - "path": "30" - }, - "3121": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "3125": { - "op": "PUSH1", - "value": "0xE5" - }, - "3127": { - "op": "SHL" - }, - "3128": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "DUP2", - "path": "30" - }, - "3129": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "MSTORE", - "path": "30" - }, - "3130": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "PUSH1", - "path": "30", - "value": "0x20" - }, - "3132": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "PUSH1", - "path": "30", - "value": "0x4" - }, - "3134": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "DUP3", - "path": "30" - }, - "3135": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "ADD", - "path": "30" - }, - "3136": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "MSTORE", - "path": "30" - }, - "3137": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "PUSH1", - "path": "30", - "value": "0x1C" - }, - "3139": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "PUSH1", - "path": "30", - "value": "0x24" - }, - "3141": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "DUP3", - "path": "30" - }, - "3142": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "ADD", - "path": "30" - }, - "3143": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "MSTORE", - "path": "30" - }, - "3144": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "PUSH32", - "path": "30", - "value": "0x494E434F52524543545F414D4F554E545F5452414E5346455252454400000000" - }, - "3177": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "PUSH1", - "path": "30", - "value": "0x44" - }, - "3179": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "DUP3", - "path": "30" - }, - "3180": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "ADD", - "path": "30" - }, - "3181": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "MSTORE", - "path": "30" - }, - "3182": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "SWAP1", - "path": "30" - }, - "3183": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "MLOAD", - "path": "30" - }, - "3184": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "SWAP1", - "path": "30" - }, - "3185": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "DUP2", - "path": "30" - }, - "3186": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "SWAP1", - "path": "30" - }, - "3187": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "SUB", - "path": "30" - }, - "3188": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "PUSH1", - "path": "30", - "value": "0x64" - }, - "3190": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "ADD", - "path": "30" - }, - "3191": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "SWAP1", - "path": "30" - }, - "3192": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "REVERT", - "path": "30" - }, - "3193": { - "fn": "Transfers.transferOut", - "offset": [1969, 2060], - "op": "JUMPDEST", - "path": "30" - }, - "3194": { - "fn": "Transfers.transferOut", - "offset": [1181, 2067], - "op": "POP", - "path": "30" - }, - "3195": { - "fn": "Transfers.transferOut", - "offset": [1181, 2067], - "op": "POP", - "path": "30" - }, - "3196": { - "fn": "Transfers.transferOut", - "offset": [1181, 2067], - "op": "POP", - "path": "30" - }, - "3197": { - "fn": "Transfers.transferOut", - "offset": [1181, 2067], - "op": "POP", - "path": "30" - }, - "3198": { - "fn": "Transfers.transferOut", - "offset": [1181, 2067], - "op": "POP", - "path": "30" - }, - "3199": { - "fn": "Transfers.transferOut", - "offset": [1181, 2067], - "op": "POP", - "path": "30" - }, - "3200": { - "fn": "Transfers.transferOut", - "offset": [1181, 2067], - "op": "POP", - "path": "30" - }, - "3201": { - "fn": "Transfers.transferOut", - "jump": "o", - "offset": [1181, 2067], - "op": "JUMP", - "path": "30" - }, - "3202": { - "fn": "Governance.isGovernor", - "offset": [1840, 2044], - "op": "JUMPDEST", - "path": "1" - }, - "3203": { - "fn": "Governance.isGovernor", - "offset": [1914, 1918], - "op": "PUSH1", - "path": "1", - "value": "0x0" - }, - "3205": { - "fn": "Governance.isGovernor", - "offset": [1930, 1962], - "op": "DUP1", - "path": "1" - }, - "3206": { - "fn": "Governance.isGovernor", - "offset": [1965, 1984], - "op": "PUSH2", - "path": "1", - "value": "0xC8D" - }, - "3209": { - "fn": "Governance.isGovernor", - "offset": [1965, 1982], - "op": "PUSH2", - "path": "1", - "value": "0x1BAD" - }, - "3212": { - "fn": "Governance.isGovernor", - "jump": "i", - "offset": [1965, 1984], - "op": "JUMP", - "path": "1" - }, - "3213": { - "fn": "Governance.isGovernor", - "offset": [1965, 1984], - "op": "JUMPDEST", - "path": "1" - }, - "3214": { - "op": "PUSH1", - "value": "0x1" - }, - "3216": { - "op": "PUSH1", - "value": "0x1" - }, - "3218": { - "op": "PUSH1", - "value": "0xA0" - }, - "3220": { - "op": "SHL" - }, - "3221": { - "op": "SUB" - }, - "3222": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "SWAP4", - "path": "1", - "statement": 36 - }, - "3223": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "SWAP1", - "path": "1" - }, - "3224": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "SWAP4", - "path": "1" - }, - "3225": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "AND", - "path": "1" - }, - "3226": { - "fn": "Governance.isGovernor", - "offset": [2001, 2023], - "op": "PUSH1", - "path": "1", - "value": "0x0" - }, - "3228": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "SWAP1", - "path": "1" - }, - "3229": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "DUP2", - "path": "1" - }, - "3230": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "MSTORE", - "path": "1" - }, - "3231": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "3233": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "SWAP4", - "path": "1" - }, - "3234": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "SWAP1", - "path": "1" - }, - "3235": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "SWAP4", - "path": "1" - }, - "3236": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "MSTORE", - "path": "1" - }, - "3237": { - "op": "POP" - }, - "3238": { - "op": "POP" - }, - "3239": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "PUSH1", - "path": "1", - "value": "0x40" - }, - "3241": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "SWAP1", - "path": "1" - }, - "3242": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "KECCAK256", - "path": "1" - }, - "3243": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "SLOAD", - "path": "1" - }, - "3244": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "PUSH1", - "path": "1", - "value": "0xFF" - }, - "3246": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "AND", - "path": "1" - }, - "3247": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "SWAP1", - "path": "1" - }, - "3248": { - "fn": "Governance.isGovernor", - "jump": "o", - "offset": [1840, 2044], - "op": "JUMP", - "path": "1" - }, - "3249": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2517, 3057], - "op": "JUMPDEST", - "path": "10" - }, - "3250": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2645, 2681], - "op": "PUSH2", - "path": "10", - "statement": 37, - "value": "0xCC3" - }, - "3253": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2645, 2668], - "op": "DUP4", - "path": "10" - }, - "3254": { - "op": "PUSH1", - "value": "0x1" - }, - "3256": { - "op": "PUSH1", - "value": "0x1" - }, - "3258": { - "op": "PUSH1", - "value": "0xA0" - }, - "3260": { - "op": "SHL" - }, - "3261": { - "op": "SUB" - }, - "3262": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2645, 2679], - "op": "AND", - "path": "10" - }, - "3263": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2645, 2679], - "op": "PUSH2", - "path": "10", - "value": "0x1C5C" - }, - "3266": { - "fn": "ProxySupport.callExternalInitializer", - "jump": "i", - "offset": [2645, 2681], - "op": "JUMP", - "path": "10" - }, - "3267": { - "branch": 106, - "fn": "ProxySupport.callExternalInitializer", - "offset": [2645, 2681], - "op": "JUMPDEST", - "path": "10" - }, - "3268": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "PUSH2", - "path": "10", - "value": "0xD09" - }, - "3271": { - "branch": 106, - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "JUMPI", - "path": "10" - }, - "3272": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "PUSH1", - "path": "10", - "value": "0x40" - }, - "3274": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "DUP1", - "path": "10" - }, - "3275": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "MLOAD", - "path": "10" - }, - "3276": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "3280": { - "op": "PUSH1", - "value": "0xE5" - }, - "3282": { - "op": "SHL" - }, - "3283": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "DUP2", - "path": "10" - }, - "3284": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "MSTORE", - "path": "10" - }, - "3285": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3287": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "PUSH1", - "path": "10", - "value": "0x4" - }, - "3289": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "DUP3", - "path": "10" - }, - "3290": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "ADD", - "path": "10" - }, - "3291": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "MSTORE", - "path": "10" - }, - "3292": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "PUSH1", - "path": "10", - "value": "0x12" - }, - "3294": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "PUSH1", - "path": "10", - "value": "0x24" - }, - "3296": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "DUP3", - "path": "10" - }, - "3297": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "ADD", - "path": "10" - }, - "3298": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "MSTORE", - "path": "10" - }, - "3299": { - "op": "PUSH18", - "value": "0x115250D7D393D517D057D0D3D395149050D5" - }, - "3318": { - "op": "PUSH1", - "value": "0x72" - }, - "3320": { - "op": "SHL" - }, - "3321": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "PUSH1", - "path": "10", - "value": "0x44" - }, - "3323": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "DUP3", - "path": "10" - }, - "3324": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "ADD", - "path": "10" - }, - "3325": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "MSTORE", - "path": "10" - }, - "3326": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "SWAP1", - "path": "10" - }, - "3327": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "MLOAD", - "path": "10" - }, - "3328": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "SWAP1", - "path": "10" - }, - "3329": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "DUP2", - "path": "10" - }, - "3330": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "SWAP1", - "path": "10" - }, - "3331": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "SUB", - "path": "10" - }, - "3332": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "PUSH1", - "path": "10", - "value": "0x64" - }, - "3334": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "ADD", - "path": "10" - }, - "3335": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "SWAP1", - "path": "10" - }, - "3336": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "REVERT", - "path": "10" - }, - "3337": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "JUMPDEST", - "path": "10" - }, - "3338": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2785, 2797], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "3340": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2799, 2822], - "op": "PUSH1", - "path": "10", - "value": "0x60" - }, - "3342": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2849], - "op": "DUP5", - "path": "10" - }, - "3343": { - "op": "PUSH1", - "value": "0x1" - }, - "3345": { - "op": "PUSH1", - "value": "0x1" - }, - "3347": { - "op": "PUSH1", - "value": "0xA0" - }, - "3349": { - "op": "SHL" - }, - "3350": { - "op": "SUB" - }, - "3351": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2862], - "op": "AND", - "path": "10" - }, - "3352": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2899, 2923], - "op": "PUSH4", - "path": "10", - "value": "0x439FAB91" - }, - "3357": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2899, 2923], - "op": "PUSH1", - "path": "10", - "value": "0xE0" - }, - "3359": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2899, 2923], - "op": "SHL", - "path": "10" - }, - "3360": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2925, 2932], - "op": "DUP6", - "path": "10" - }, - "3361": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2925, 2932], - "op": "DUP6", - "path": "10" - }, - "3362": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "PUSH1", - "path": "10", - "value": "0x40" - }, - "3364": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "MLOAD", - "path": "10" - }, - "3365": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "PUSH1", - "path": "10", - "value": "0x24" - }, - "3367": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "ADD", - "path": "10" - }, - "3368": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP1", - "path": "10" - }, - "3369": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP1", - "path": "10" - }, - "3370": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3372": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "ADD", - "path": "10" - }, - "3373": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP3", - "path": "10" - }, - "3374": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP2", - "path": "10" - }, - "3375": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SUB", - "path": "10" - }, - "3376": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP3", - "path": "10" - }, - "3377": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "MSTORE", - "path": "10" - }, - "3378": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP5", - "path": "10" - }, - "3379": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP5", - "path": "10" - }, - "3380": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP3", - "path": "10" - }, - "3381": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP2", - "path": "10" - }, - "3382": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP2", - "path": "10" - }, - "3383": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "MSTORE", - "path": "10" - }, - "3384": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3386": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "ADD", - "path": "10" - }, - "3387": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP3", - "path": "10" - }, - "3388": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "POP", - "path": "10" - }, - "3389": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP1", - "path": "10" - }, - "3390": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP3", - "path": "10" - }, - "3391": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP5", - "path": "10" - }, - "3392": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "CALLDATACOPY", - "path": "10" - }, - "3393": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "3395": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP4", - "path": "10" - }, - "3396": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP3", - "path": "10" - }, - "3397": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "ADD", - "path": "10" - }, - "3398": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "MSTORE", - "path": "10" - }, - "3399": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "PUSH1", - "path": "10", - "value": "0x40" - }, - "3401": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP1", - "path": "10" - }, - "3402": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "MLOAD", - "path": "10" - }, - "3403": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "PUSH1", - "path": "10", - "value": "0x1F" - }, - "3405": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP1", - "path": "10" - }, - "3406": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP3", - "path": "10" - }, - "3407": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "ADD", - "path": "10" - }, - "3408": { - "op": "PUSH1", - "value": "0x1F" - }, - "3410": { - "op": "NOT" - }, - "3411": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP1", - "path": "10" - }, - "3412": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP2", - "path": "10" - }, - "3413": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "AND", - "path": "10" - }, - "3414": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP1", - "path": "10" - }, - "3415": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP5", - "path": "10" - }, - "3416": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "ADD", - "path": "10" - }, - "3417": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP3", - "path": "10" - }, - "3418": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP2", - "path": "10" - }, - "3419": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SUB", - "path": "10" - }, - "3420": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP1", - "path": "10" - }, - "3421": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP5", - "path": "10" - }, - "3422": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "ADD", - "path": "10" - }, - "3423": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP3", - "path": "10" - }, - "3424": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "MSTORE", - "path": "10" - }, - "3425": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP3", - "path": "10" - }, - "3426": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP4", - "path": "10" - }, - "3427": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "MSTORE", - "path": "10" - }, - "3428": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3430": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP2", - "path": "10" - }, - "3431": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "ADD", - "path": "10" - }, - "3432": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP1", - "path": "10" - }, - "3433": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "MLOAD", - "path": "10" - }, - "3434": { - "op": "PUSH1", - "value": "0x1" - }, - "3436": { - "op": "PUSH1", - "value": "0x1" - }, - "3438": { - "op": "PUSH1", - "value": "0xE0" - }, - "3440": { - "op": "SHL" - }, - "3441": { - "op": "SUB" - }, - "3442": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "AND", - "path": "10" - }, - "3443": { - "op": "PUSH1", - "value": "0x1" - }, - "3445": { - "op": "PUSH1", - "value": "0x1" - }, - "3447": { - "op": "PUSH1", - "value": "0xE0" - }, - "3449": { - "op": "SHL" - }, - "3450": { - "op": "SUB" - }, - "3451": { - "op": "NOT" - }, - "3452": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP1", - "path": "10" - }, - "3453": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP10", - "path": "10" - }, - "3454": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "AND", - "path": "10" - }, - "3455": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP9", - "path": "10" - }, - "3456": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP1", - "path": "10" - }, - "3457": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP9", - "path": "10" - }, - "3458": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "OR", - "path": "10" - }, - "3459": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP9", - "path": "10" - }, - "3460": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "MSTORE", - "path": "10" - }, - "3461": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP2", - "path": "10" - }, - "3462": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "MLOAD", - "path": "10" - }, - "3463": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP3", - "path": "10" - }, - "3464": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "MLOAD", - "path": "10" - }, - "3465": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP3", - "path": "10" - }, - "3466": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP8", - "path": "10" - }, - "3467": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP1", - "path": "10" - }, - "3468": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP7", - "path": "10" - }, - "3469": { - "op": "POP" - }, - "3470": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP7", - "path": "10" - }, - "3471": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP6", - "path": "10" - }, - "3472": { - "op": "POP" - }, - "3473": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP4", - "path": "10" - }, - "3474": { - "op": "POP" - }, - "3475": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP1", - "path": "10" - }, - "3476": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP2", - "path": "10" - }, - "3477": { - "op": "POP" - }, - "3478": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP2", - "path": "10" - }, - "3479": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP1", - "path": "10" - }, - "3480": { - "op": "POP" - }, - "3481": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP4", - "path": "10" - }, - "3482": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP4", - "path": "10" - }, - "3483": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "JUMPDEST", - "path": "10" - }, - "3484": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3486": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP4", - "path": "10" - }, - "3487": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "LT", - "path": "10" - }, - "3488": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH2", - "path": "10", - "value": "0xDBA" - }, - "3491": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "JUMPI", - "path": "10" - }, - "3492": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP1", - "path": "10" - }, - "3493": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "MLOAD", - "path": "10" - }, - "3494": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP3", - "path": "10" - }, - "3495": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "MSTORE", - "path": "10" - }, - "3496": { - "op": "PUSH1", - "value": "0x1F" - }, - "3498": { - "op": "NOT" - }, - "3499": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP1", - "path": "10" - }, - "3500": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP3", - "path": "10" - }, - "3501": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "ADD", - "path": "10" - }, - "3502": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP2", - "path": "10" - }, - "3503": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3505": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP2", - "path": "10" - }, - "3506": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP3", - "path": "10" - }, - "3507": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "ADD", - "path": "10" - }, - "3508": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP2", - "path": "10" - }, - "3509": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "ADD", - "path": "10" - }, - "3510": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH2", - "path": "10", - "value": "0xD9B" - }, - "3513": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "JUMP", - "path": "10" - }, - "3514": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "JUMPDEST", - "path": "10" - }, - "3515": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH1", - "path": "10", - "value": "0x1" - }, - "3517": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP4", - "path": "10" - }, - "3518": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3520": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SUB", - "path": "10" - }, - "3521": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH2", - "path": "10", - "value": "0x100" - }, - "3524": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "EXP", - "path": "10" - }, - "3525": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SUB", - "path": "10" - }, - "3526": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP1", - "path": "10" - }, - "3527": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "NOT", - "path": "10" - }, - "3528": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP3", - "path": "10" - }, - "3529": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "MLOAD", - "path": "10" - }, - "3530": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "AND", - "path": "10" - }, - "3531": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP2", - "path": "10" - }, - "3532": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP5", - "path": "10" - }, - "3533": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "MLOAD", - "path": "10" - }, - "3534": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "AND", - "path": "10" - }, - "3535": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP1", - "path": "10" - }, - "3536": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP3", - "path": "10" - }, - "3537": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "OR", - "path": "10" - }, - "3538": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP6", - "path": "10" - }, - "3539": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "MSTORE", - "path": "10" - }, - "3540": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "POP", - "path": "10" - }, - "3541": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "POP", - "path": "10" - }, - "3542": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "POP", - "path": "10" - }, - "3543": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "POP", - "path": "10" - }, - "3544": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "POP", - "path": "10" - }, - "3545": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "POP", - "path": "10" - }, - "3546": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP1", - "path": "10" - }, - "3547": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "POP", - "path": "10" - }, - "3548": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "ADD", - "path": "10" - }, - "3549": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP2", - "path": "10" - }, - "3550": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "POP", - "path": "10" - }, - "3551": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "POP", - "path": "10" - }, - "3552": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "3554": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH1", - "path": "10", - "value": "0x40" - }, - "3556": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "MLOAD", - "path": "10" - }, - "3557": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP1", - "path": "10" - }, - "3558": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP4", - "path": "10" - }, - "3559": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SUB", - "path": "10" - }, - "3560": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP2", - "path": "10" - }, - "3561": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP6", - "path": "10" - }, - "3562": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "GAS", - "path": "10" - }, - "3563": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DELEGATECALL", - "path": "10" - }, - "3564": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP2", - "path": "10" - }, - "3565": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "POP", - "path": "10" - }, - "3566": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "POP", - "path": "10" - }, - "3567": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "RETURNDATASIZE", - "path": "10" - }, - "3568": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP1", - "path": "10" - }, - "3569": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "3571": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP2", - "path": "10" - }, - "3572": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "EQ", - "path": "10" - }, - "3573": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH2", - "path": "10", - "value": "0xE1A" - }, - "3576": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "JUMPI", - "path": "10" - }, - "3577": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH1", - "path": "10", - "value": "0x40" - }, - "3579": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "MLOAD", - "path": "10" - }, - "3580": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP2", - "path": "10" - }, - "3581": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "POP", - "path": "10" - }, - "3582": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH1", - "path": "10", - "value": "0x1F" - }, - "3584": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "NOT", - "path": "10" - }, - "3585": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH1", - "path": "10", - "value": "0x3F" - }, - "3587": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "RETURNDATASIZE", - "path": "10" - }, - "3588": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "ADD", - "path": "10" - }, - "3589": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "AND", - "path": "10" - }, - "3590": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP3", - "path": "10" - }, - "3591": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "ADD", - "path": "10" - }, - "3592": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH1", - "path": "10", - "value": "0x40" - }, - "3594": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "MSTORE", - "path": "10" - }, - "3595": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "RETURNDATASIZE", - "path": "10" - }, - "3596": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP3", - "path": "10" - }, - "3597": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "MSTORE", - "path": "10" - }, - "3598": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "RETURNDATASIZE", - "path": "10" - }, - "3599": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "3601": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3603": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP5", - "path": "10" - }, - "3604": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "ADD", - "path": "10" - }, - "3605": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "RETURNDATACOPY", - "path": "10" - }, - "3606": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH2", - "path": "10", - "value": "0xE1F" - }, - "3609": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "JUMP", - "path": "10" - }, - "3610": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "JUMPDEST", - "path": "10" - }, - "3611": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH1", - "path": "10", - "value": "0x60" - }, - "3613": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP2", - "path": "10" - }, - "3614": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "POP", - "path": "10" - }, - "3615": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "JUMPDEST", - "path": "10" - }, - "3616": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "POP", - "path": "10" - }, - "3617": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2784, 2943], - "op": "SWAP2", - "path": "10" - }, - "3618": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2784, 2943], - "op": "POP", - "path": "10" - }, - "3619": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2784, 2943], - "op": "SWAP2", - "path": "10" - }, - "3620": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2784, 2943], - "op": "POP", - "path": "10" - }, - "3621": { - "branch": 107, - "fn": "ProxySupport.callExternalInitializer", - "offset": [2961, 2968], - "op": "DUP2", - "path": "10", - "statement": 38 - }, - "3622": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2977, 2987], - "op": "DUP2", - "path": "10" - }, - "3623": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SWAP1", - "path": "10" - }, - "3624": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH2", - "path": "10", - "value": "0xEAF" - }, - "3627": { - "branch": 107, - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "JUMPI", - "path": "10" - }, - "3628": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH1", - "path": "10", - "value": "0x40" - }, - "3630": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "MLOAD", - "path": "10" - }, - "3631": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "3635": { - "op": "PUSH1", - "value": "0xE5" - }, - "3637": { - "op": "SHL" - }, - "3638": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP2", - "path": "10" - }, - "3639": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "MSTORE", - "path": "10" - }, - "3640": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH1", - "path": "10", - "value": "0x4" - }, - "3642": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "ADD", - "path": "10" - }, - "3643": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP1", - "path": "10" - }, - "3644": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP1", - "path": "10" - }, - "3645": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3647": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "ADD", - "path": "10" - }, - "3648": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP3", - "path": "10" - }, - "3649": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP2", - "path": "10" - }, - "3650": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SUB", - "path": "10" - }, - "3651": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP3", - "path": "10" - }, - "3652": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "MSTORE", - "path": "10" - }, - "3653": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP4", - "path": "10" - }, - "3654": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP2", - "path": "10" - }, - "3655": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP2", - "path": "10" - }, - "3656": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "MLOAD", - "path": "10" - }, - "3657": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP2", - "path": "10" - }, - "3658": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "MSTORE", - "path": "10" - }, - "3659": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3661": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "ADD", - "path": "10" - }, - "3662": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SWAP2", - "path": "10" - }, - "3663": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "POP", - "path": "10" - }, - "3664": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP1", - "path": "10" - }, - "3665": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "MLOAD", - "path": "10" - }, - "3666": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SWAP1", - "path": "10" - }, - "3667": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3669": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "ADD", - "path": "10" - }, - "3670": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SWAP1", - "path": "10" - }, - "3671": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP1", - "path": "10" - }, - "3672": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP4", - "path": "10" - }, - "3673": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP4", - "path": "10" - }, - "3674": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "3676": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "JUMPDEST", - "path": "10" - }, - "3677": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP4", - "path": "10" - }, - "3678": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP2", - "path": "10" - }, - "3679": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "LT", - "path": "10" - }, - "3680": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "ISZERO", - "path": "10" - }, - "3681": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH2", - "path": "10", - "value": "0xE74" - }, - "3684": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "JUMPI", - "path": "10" - }, - "3685": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP2", - "path": "10" - }, - "3686": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP2", - "path": "10" - }, - "3687": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "ADD", - "path": "10" - }, - "3688": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "MLOAD", - "path": "10" - }, - "3689": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP4", - "path": "10" - }, - "3690": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP3", - "path": "10" - }, - "3691": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "ADD", - "path": "10" - }, - "3692": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "MSTORE", - "path": "10" - }, - "3693": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3695": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "ADD", - "path": "10" - }, - "3696": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH2", - "path": "10", - "value": "0xE5C" - }, - "3699": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "JUMP", - "path": "10" - }, - "3700": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "JUMPDEST", - "path": "10" - }, - "3701": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "POP", - "path": "10" - }, - "3702": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "POP", - "path": "10" - }, - "3703": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "POP", - "path": "10" - }, - "3704": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "POP", - "path": "10" - }, - "3705": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SWAP1", - "path": "10" - }, - "3706": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "POP", - "path": "10" - }, - "3707": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SWAP1", - "path": "10" - }, - "3708": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP2", - "path": "10" - }, - "3709": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "ADD", - "path": "10" - }, - "3710": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SWAP1", - "path": "10" - }, - "3711": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH1", - "path": "10", - "value": "0x1F" - }, - "3713": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "AND", - "path": "10" - }, - "3714": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP1", - "path": "10" - }, - "3715": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "ISZERO", - "path": "10" - }, - "3716": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH2", - "path": "10", - "value": "0xEA1" - }, - "3719": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "JUMPI", - "path": "10" - }, - "3720": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP1", - "path": "10" - }, - "3721": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP3", - "path": "10" - }, - "3722": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SUB", - "path": "10" - }, - "3723": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP1", - "path": "10" - }, - "3724": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "MLOAD", - "path": "10" - }, - "3725": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH1", - "path": "10", - "value": "0x1" - }, - "3727": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP4", - "path": "10" - }, - "3728": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3730": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SUB", - "path": "10" - }, - "3731": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH2", - "path": "10", - "value": "0x100" - }, - "3734": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "EXP", - "path": "10" - }, - "3735": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SUB", - "path": "10" - }, - "3736": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "NOT", - "path": "10" - }, - "3737": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "AND", - "path": "10" - }, - "3738": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP2", - "path": "10" - }, - "3739": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "MSTORE", - "path": "10" - }, - "3740": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3742": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "ADD", - "path": "10" - }, - "3743": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SWAP2", - "path": "10" - }, - "3744": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "POP", - "path": "10" - }, - "3745": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "JUMPDEST", - "path": "10" - }, - "3746": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "POP", - "path": "10" - }, - "3747": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SWAP3", - "path": "10" - }, - "3748": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "POP", - "path": "10" - }, - "3749": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "POP", - "path": "10" - }, - "3750": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "POP", - "path": "10" - }, - "3751": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH1", - "path": "10", - "value": "0x40" - }, - "3753": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "MLOAD", - "path": "10" - }, - "3754": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP1", - "path": "10" - }, - "3755": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SWAP2", - "path": "10" - }, - "3756": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SUB", - "path": "10" - }, - "3757": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SWAP1", - "path": "10" - }, - "3758": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "REVERT", - "path": "10" - }, - "3759": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "JUMPDEST", - "path": "10" - }, - "3760": { - "op": "POP" - }, - "3761": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [3007, 3024], - "op": "DUP1", - "path": "10", - "statement": 39 - }, - "3762": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [3007, 3024], - "op": "MLOAD", - "path": "10" - }, - "3763": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [3007, 3017], - "op": "DUP2", - "path": "10" - }, - "3764": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [3007, 3017], - "op": "SWAP1", - "path": "10" - }, - "3765": { - "branch": 108, - "fn": "ProxySupport.callExternalInitializer", - "offset": [3007, 3029], - "op": "ISZERO", - "path": "10" - }, - "3766": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "PUSH2", - "path": "10", - "value": "0xF00" - }, - "3769": { - "branch": 108, - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "JUMPI", - "path": "10" - }, - "3770": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "PUSH1", - "path": "10", - "value": "0x40" - }, - "3772": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "MLOAD", - "path": "10" - }, - "3773": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "3777": { - "op": "PUSH1", - "value": "0xE5" - }, - "3779": { - "op": "SHL" - }, - "3780": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP2", - "path": "10" - }, - "3781": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "MSTORE", - "path": "10" - }, - "3782": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3784": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "PUSH1", - "path": "10", - "value": "0x4" - }, - "3786": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP3", - "path": "10" - }, - "3787": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "ADD", - "path": "10" - }, - "3788": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP2", - "path": "10" - }, - "3789": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP2", - "path": "10" - }, - "3790": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "MSTORE", - "path": "10" - }, - "3791": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP4", - "path": "10" - }, - "3792": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "MLOAD", - "path": "10" - }, - "3793": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "PUSH1", - "path": "10", - "value": "0x24" - }, - "3795": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP5", - "path": "10" - }, - "3796": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "ADD", - "path": "10" - }, - "3797": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "MSTORE", - "path": "10" - }, - "3798": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP4", - "path": "10" - }, - "3799": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "MLOAD", - "path": "10" - }, - "3800": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "SWAP1", - "path": "10" - }, - "3801": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "SWAP3", - "path": "10" - }, - "3802": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP4", - "path": "10" - }, - "3803": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "SWAP3", - "path": "10" - }, - "3804": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "PUSH1", - "path": "10", - "value": "0x44" - }, - "3806": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "SWAP1", - "path": "10" - }, - "3807": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "SWAP2", - "path": "10" - }, - "3808": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "ADD", - "path": "10" - }, - "3809": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "SWAP2", - "path": "10" - }, - "3810": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "SWAP1", - "path": "10" - }, - "3811": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP6", - "path": "10" - }, - "3812": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "ADD", - "path": "10" - }, - "3813": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "SWAP1", - "path": "10" - }, - "3814": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP1", - "path": "10" - }, - "3815": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP4", - "path": "10" - }, - "3816": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP4", - "path": "10" - }, - "3817": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "3819": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP4", - "path": "10" - }, - "3820": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "ISZERO", - "path": "10" - }, - "3821": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "PUSH2", - "path": "10", - "value": "0xE74" - }, - "3824": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "JUMPI", - "path": "10" - }, - "3825": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP2", - "path": "10" - }, - "3826": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP2", - "path": "10" - }, - "3827": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "ADD", - "path": "10" - }, - "3828": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "MLOAD", - "path": "10" - }, - "3829": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP4", - "path": "10" - }, - "3830": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP3", - "path": "10" - }, - "3831": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "ADD", - "path": "10" - }, - "3832": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "MSTORE", - "path": "10" - }, - "3833": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3835": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "ADD", - "path": "10" - }, - "3836": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "PUSH2", - "path": "10", - "value": "0xE5C" - }, - "3839": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "JUMP", - "path": "10" - }, - "3840": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "JUMPDEST", - "path": "10" - }, - "3841": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "POP", - "path": "10" - }, - "3842": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2517, 3057], - "op": "POP", - "path": "10" - }, - "3843": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2517, 3057], - "op": "POP", - "path": "10" - }, - "3844": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2517, 3057], - "op": "POP", - "path": "10" - }, - "3845": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2517, 3057], - "op": "POP", - "path": "10" - }, - "3846": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2517, 3057], - "op": "POP", - "path": "10" - }, - "3847": { - "fn": "ProxySupport.callExternalInitializer", - "jump": "o", - "offset": [2517, 3057], - "op": "JUMP", - "path": "10" - }, - "3848": { - "fn": "StarknetTokenBridge.isInitialized", - "offset": [971, 1102], - "op": "JUMPDEST", - "path": "28" - }, - "3849": { - "fn": "StarknetTokenBridge.isInitialized", - "offset": [1028, 1032], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "3851": { - "fn": "StarknetTokenBridge.isInitialized", - "offset": [1028, 1032], - "op": "DUP1", - "path": "28" - }, - "3852": { - "fn": "StarknetTokenBridge.isInitialized", - "offset": [1051, 1070], - "op": "PUSH2", - "path": "28", - "statement": 40, - "value": "0xF13" - }, - "3855": { - "fn": "StarknetTokenBridge.isInitialized", - "offset": [1051, 1068], - "op": "PUSH2", - "path": "28", - "value": "0x1962" - }, - "3858": { - "fn": "StarknetTokenBridge.isInitialized", - "jump": "i", - "offset": [1051, 1070], - "op": "JUMP", - "path": "28" - }, - "3859": { - "fn": "StarknetTokenBridge.isInitialized", - "offset": [1051, 1070], - "op": "JUMPDEST", - "path": "28" - }, - "3860": { - "op": "PUSH1", - "value": "0x1" - }, - "3862": { - "op": "PUSH1", - "value": "0x1" - }, - "3864": { - "op": "PUSH1", - "value": "0xA0" - }, - "3866": { - "op": "SHL" - }, - "3867": { - "op": "SUB" - }, - "3868": { - "fn": "StarknetTokenBridge.isInitialized", - "offset": [1051, 1095], - "op": "AND", - "path": "28" - }, - "3869": { - "fn": "StarknetTokenBridge.isInitialized", - "offset": [1051, 1095], - "op": "EQ", - "path": "28" - }, - "3870": { - "fn": "StarknetTokenBridge.isInitialized", - "offset": [1051, 1095], - "op": "ISZERO", - "path": "28" - }, - "3871": { - "fn": "StarknetTokenBridge.isInitialized", - "offset": [1044, 1095], - "op": "SWAP1", - "path": "28" - }, - "3872": { - "fn": "StarknetTokenBridge.isInitialized", - "offset": [1044, 1095], - "op": "POP", - "path": "28" - }, - "3873": { - "fn": "StarknetTokenBridge.isInitialized", - "offset": [971, 1102], - "op": "SWAP1", - "path": "28" - }, - "3874": { - "fn": "StarknetTokenBridge.isInitialized", - "jump": "o", - "offset": [971, 1102], - "op": "JUMP", - "path": "28" - }, - "3875": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1209, 1343], - "op": "JUMPDEST", - "path": "28" - }, - "3876": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1312, 1314], - "op": "PUSH1", - "path": "28", - "statement": 41, - "value": "0x40" - }, - "3878": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1297, 1314], - "op": "DUP2", - "path": "28" - }, - "3879": { - "branch": 109, - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1297, 1314], - "op": "EQ", - "path": "28" - }, - "3880": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "PUSH2", - "path": "28", - "value": "0x2C2" - }, - "3883": { - "branch": 109, - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "JUMPI", - "path": "28" - }, - "3884": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "3886": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "DUP1", - "path": "28" - }, - "3887": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "MLOAD", - "path": "28" - }, - "3888": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "3892": { - "op": "PUSH1", - "value": "0xE5" - }, - "3894": { - "op": "SHL" - }, - "3895": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "DUP2", - "path": "28" - }, - "3896": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "MSTORE", - "path": "28" - }, - "3897": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "3899": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "3901": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "DUP3", - "path": "28" - }, - "3902": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "ADD", - "path": "28" - }, - "3903": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "MSTORE", - "path": "28" - }, - "3904": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "PUSH1", - "path": "28", - "value": "0x11" - }, - "3906": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "PUSH1", - "path": "28", - "value": "0x24" - }, - "3908": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "DUP3", - "path": "28" - }, - "3909": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "ADD", - "path": "28" - }, - "3910": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "MSTORE", - "path": "28" - }, - "3911": { - "op": "PUSH17", - "value": "0x494C4C4547414C5F444154415F53495A45" - }, - "3929": { - "op": "PUSH1", - "value": "0x78" - }, - "3931": { - "op": "SHL" - }, - "3932": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "PUSH1", - "path": "28", - "value": "0x44" - }, - "3934": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "DUP3", - "path": "28" - }, - "3935": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "ADD", - "path": "28" - }, - "3936": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "MSTORE", - "path": "28" - }, - "3937": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "SWAP1", - "path": "28" - }, - "3938": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "MLOAD", - "path": "28" - }, - "3939": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "SWAP1", - "path": "28" - }, - "3940": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "DUP2", - "path": "28" - }, - "3941": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "SWAP1", - "path": "28" - }, - "3942": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "SUB", - "path": "28" - }, - "3943": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "PUSH1", - "path": "28", - "value": "0x64" - }, - "3945": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "ADD", - "path": "28" - }, - "3946": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "SWAP1", - "path": "28" - }, - "3947": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "REVERT", - "path": "28" - }, - "3948": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1605, 1924], - "op": "JUMPDEST", - "path": "28" - }, - "3949": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1688, 1709], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "3951": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1711, 1748], - "op": "DUP1", - "path": "28" - }, - "3952": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1776, 1780], - "op": "DUP4", - "path": "28" - }, - "3953": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1776, 1780], - "op": "DUP4", - "path": "28" - }, - "3954": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "3956": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "DUP2", - "path": "28" - }, - "3957": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "LT", - "path": "28" - }, - "3958": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "ISZERO", - "path": "28" - }, - "3959": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "PUSH2", - "path": "28", - "value": "0xF7F" - }, - "3962": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "JUMPI", - "path": "28" - }, - "3963": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "3965": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "DUP1", - "path": "28" - }, - "3966": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "REVERT", - "path": "28" - }, - "3967": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "JUMPDEST", - "path": "28" - }, - "3968": { - "op": "POP" - }, - "3969": { - "op": "PUSH1", - "value": "0x1" - }, - "3971": { - "op": "PUSH1", - "value": "0x1" - }, - "3973": { - "op": "PUSH1", - "value": "0xA0" - }, - "3975": { - "op": "SHL" - }, - "3976": { - "op": "SUB" - }, - "3977": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "DUP2", - "path": "28" - }, - "3978": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "CALLDATALOAD", - "path": "28" - }, - "3979": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "DUP2", - "path": "28" - }, - "3980": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "AND", - "path": "28" - }, - "3981": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "SWAP4", - "path": "28" - }, - "3982": { - "op": "POP" - }, - "3983": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "3985": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "SWAP1", - "path": "28" - }, - "3986": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "SWAP2", - "path": "28" - }, - "3987": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "ADD", - "path": "28" - }, - "3988": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "CALLDATALOAD", - "path": "28" - }, - "3989": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "AND", - "path": "28" - }, - "3990": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "SWAP1", - "path": "28" - }, - "3991": { - "op": "POP" - }, - "3992": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1843, 1870], - "op": "PUSH2", - "path": "28", - "statement": 42, - "value": "0xFA0" - }, - "3995": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "DUP3", - "path": "28" - }, - "3996": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1843, 1855], - "op": "PUSH2", - "path": "28", - "value": "0x1C62" - }, - "3999": { - "fn": "StarknetTokenBridge.initializeContractState", - "jump": "i", - "offset": [1843, 1870], - "op": "JUMP", - "path": "28" - }, - "4000": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1843, 1870], - "op": "JUMPDEST", - "path": "28" - }, - "4001": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1880, 1917], - "op": "PUSH2", - "path": "28", - "statement": 43, - "value": "0xFA9" - }, - "4004": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1898, 1916], - "op": "DUP2", - "path": "28" - }, - "4005": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1880, 1897], - "op": "PUSH2", - "path": "28", - "value": "0x1C84" - }, - "4008": { - "fn": "StarknetTokenBridge.initializeContractState", - "jump": "i", - "offset": [1880, 1917], - "op": "JUMP", - "path": "28" - }, - "4009": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1880, 1917], - "op": "JUMPDEST", - "path": "28" - }, - "4010": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1605, 1924], - "op": "POP", - "path": "28" - }, - "4011": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1605, 1924], - "op": "POP", - "path": "28" - }, - "4012": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1605, 1924], - "op": "POP", - "path": "28" - }, - "4013": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1605, 1924], - "op": "POP", - "path": "28" - }, - "4014": { - "fn": "StarknetTokenBridge.initializeContractState", - "jump": "o", - "offset": [1605, 1924], - "op": "JUMP", - "path": "28" - }, - "4015": { - "fn": "Governance.initGovernance", - "offset": [1529, 1834], - "op": "JUMPDEST", - "path": "1" - }, - "4016": { - "fn": "Governance.initGovernance", - "offset": [1574, 1606], - "op": "PUSH1", - "path": "1", - "value": "0x0" - }, - "4018": { - "fn": "Governance.initGovernance", - "offset": [1609, 1628], - "op": "PUSH2", - "path": "1", - "value": "0xFB9" - }, - "4021": { - "fn": "Governance.initGovernance", - "offset": [1609, 1626], - "op": "PUSH2", - "path": "1", - "value": "0x1BAD" - }, - "4024": { - "fn": "Governance.initGovernance", - "jump": "i", - "offset": [1609, 1628], - "op": "JUMP", - "path": "1" - }, - "4025": { - "fn": "Governance.initGovernance", - "offset": [1609, 1628], - "op": "JUMPDEST", - "path": "1" - }, - "4026": { - "fn": "Governance.initGovernance", - "offset": [1647, 1662], - "op": "PUSH1", - "path": "1", - "statement": 44, - "value": "0x1" - }, - "4028": { - "fn": "Governance.initGovernance", - "offset": [1647, 1662], - "op": "DUP2", - "path": "1" - }, - "4029": { - "fn": "Governance.initGovernance", - "offset": [1647, 1662], - "op": "ADD", - "path": "1" - }, - "4030": { - "fn": "Governance.initGovernance", - "offset": [1647, 1662], - "op": "SLOAD", - "path": "1" - }, - "4031": { - "fn": "Governance.initGovernance", - "offset": [1647, 1662], - "op": "SWAP1", - "path": "1" - }, - "4032": { - "fn": "Governance.initGovernance", - "offset": [1647, 1662], - "op": "SWAP2", - "path": "1" - }, - "4033": { - "op": "POP" - }, - "4034": { - "op": "PUSH1", - "value": "0x1" - }, - "4036": { - "op": "PUSH1", - "value": "0xA0" - }, - "4038": { - "op": "SHL" - }, - "4039": { - "fn": "Governance.initGovernance", - "offset": [1647, 1662], - "op": "SWAP1", - "path": "1" - }, - "4040": { - "fn": "Governance.initGovernance", - "offset": [1647, 1662], - "op": "DIV", - "path": "1" - }, - "4041": { - "fn": "Governance.initGovernance", - "offset": [1647, 1662], - "op": "PUSH1", - "path": "1", - "value": "0xFF" - }, - "4043": { - "fn": "Governance.initGovernance", - "offset": [1647, 1662], - "op": "AND", - "path": "1" - }, - "4044": { - "branch": 93, - "fn": "Governance.initGovernance", - "offset": [1646, 1662], - "op": "ISZERO", - "path": "1" - }, - "4045": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "PUSH2", - "path": "1", - "value": "0x1013" - }, - "4048": { - "branch": 93, - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "JUMPI", - "path": "1" - }, - "4049": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "PUSH1", - "path": "1", - "value": "0x40" - }, - "4051": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "DUP1", - "path": "1" - }, - "4052": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "MLOAD", - "path": "1" - }, - "4053": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "4057": { - "op": "PUSH1", - "value": "0xE5" - }, - "4059": { - "op": "SHL" - }, - "4060": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "DUP2", - "path": "1" - }, - "4061": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "MSTORE", - "path": "1" - }, - "4062": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "4064": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "PUSH1", - "path": "1", - "value": "0x4" - }, - "4066": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "DUP3", - "path": "1" - }, - "4067": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "ADD", - "path": "1" - }, - "4068": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "MSTORE", - "path": "1" - }, - "4069": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "PUSH1", - "path": "1", - "value": "0x13" - }, - "4071": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "PUSH1", - "path": "1", - "value": "0x24" - }, - "4073": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "DUP3", - "path": "1" - }, - "4074": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "ADD", - "path": "1" - }, - "4075": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "MSTORE", - "path": "1" - }, - "4076": { - "op": "PUSH19", - "value": "0x1053149150511657D253925512505312569151" - }, - "4096": { - "op": "PUSH1", - "value": "0x6A" - }, - "4098": { - "op": "SHL" - }, - "4099": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "PUSH1", - "path": "1", - "value": "0x44" - }, - "4101": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "DUP3", - "path": "1" - }, - "4102": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "ADD", - "path": "1" - }, - "4103": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "MSTORE", - "path": "1" - }, - "4104": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "SWAP1", - "path": "1" - }, - "4105": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "MLOAD", - "path": "1" - }, - "4106": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "SWAP1", - "path": "1" - }, - "4107": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "DUP2", - "path": "1" - }, - "4108": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "SWAP1", - "path": "1" - }, - "4109": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "SUB", - "path": "1" - }, - "4110": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "PUSH1", - "path": "1", - "value": "0x64" - }, - "4112": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "ADD", - "path": "1" - }, - "4113": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "SWAP1", - "path": "1" - }, - "4114": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "REVERT", - "path": "1" - }, - "4115": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "JUMPDEST", - "path": "1" - }, - "4116": { - "fn": "Governance.initGovernance", - "offset": [1714, 1718], - "op": "PUSH1", - "path": "1", - "statement": 45, - "value": "0x1" - }, - "4118": { - "fn": "Governance.initGovernance", - "offset": [1696, 1711], - "op": "DUP2", - "path": "1" - }, - "4119": { - "fn": "Governance.initGovernance", - "offset": [1696, 1711], - "op": "ADD", - "path": "1" - }, - "4120": { - "fn": "Governance.initGovernance", - "offset": [1696, 1718], - "op": "DUP1", - "path": "1" - }, - "4121": { - "fn": "Governance.initGovernance", - "offset": [1696, 1718], - "op": "SLOAD", - "path": "1" - }, - "4122": { - "op": "PUSH1", - "value": "0xFF" - }, - "4124": { - "op": "PUSH1", - "value": "0xA0" - }, - "4126": { - "op": "SHL" - }, - "4127": { - "op": "NOT" - }, - "4128": { - "fn": "Governance.initGovernance", - "offset": [1696, 1718], - "op": "AND", - "path": "1" - }, - "4129": { - "op": "PUSH1", - "value": "0x1" - }, - "4131": { - "op": "PUSH1", - "value": "0xA0" - }, - "4133": { - "op": "SHL" - }, - "4134": { - "fn": "Governance.initGovernance", - "offset": [1696, 1718], - "op": "OR", - "path": "1" - }, - "4135": { - "fn": "Governance.initGovernance", - "offset": [1696, 1718], - "op": "SWAP1", - "path": "1" - }, - "4136": { - "fn": "Governance.initGovernance", - "offset": [1696, 1718], - "op": "SSTORE", - "path": "1" - }, - "4137": { - "fn": "Governance.initGovernance", - "offset": [1804, 1827], - "op": "PUSH2", - "path": "1", - "statement": 46, - "value": "0x2E1" - }, - "4140": { - "fn": "Governance.initGovernance", - "offset": [1816, 1826], - "op": "CALLER", - "path": "1" - }, - "4141": { - "fn": "Governance.initGovernance", - "offset": [1804, 1815], - "op": "PUSH2", - "path": "1", - "value": "0x1CA6" - }, - "4144": { - "fn": "Governance.initGovernance", - "jump": "i", - "offset": [1804, 1827], - "op": "JUMP", - "path": "1" - }, - "4145": { - "fn": "Governance.removeGovernor", - "offset": [3747, 4147], - "op": "JUMPDEST", - "path": "1" - }, - "4146": { - "offset": [434, 456], - "op": "PUSH2", - "path": "8", - "value": "0x103A" - }, - "4149": { - "offset": [445, 455], - "op": "CALLER", - "path": "8" - }, - "4150": { - "offset": [434, 444], - "op": "PUSH2", - "path": "8", - "value": "0xC82" - }, - "4153": { - "jump": "i", - "offset": [434, 456], - "op": "JUMP", - "path": "8" - }, - "4154": { - "fn": "Governance.removeGovernor", - "offset": [434, 456], - "op": "JUMPDEST", - "path": "8" - }, - "4155": { - "offset": [426, 476], - "op": "PUSH2", - "path": "8", - "value": "0x107D" - }, - "4158": { - "offset": [426, 476], - "op": "JUMPI", - "path": "8" - }, - "4159": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x40" - }, - "4161": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "DUP1", - "path": "8" - }, - "4162": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "MLOAD", - "path": "8" - }, - "4163": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "4167": { - "op": "PUSH1", - "value": "0xE5" - }, - "4169": { - "op": "SHL" - }, - "4170": { - "offset": [426, 476], - "op": "DUP2", - "path": "8" - }, - "4171": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "4172": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x20" - }, - "4174": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x4" - }, - "4176": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "4177": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "4178": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "4179": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0xF" - }, - "4181": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x24" - }, - "4183": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "4184": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "4185": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "4186": { - "op": "PUSH15", - "value": "0x4F4E4C595F474F5645524E414E4345" - }, - "4202": { - "op": "PUSH1", - "value": "0x88" - }, - "4204": { - "op": "SHL" - }, - "4205": { - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x44" - }, - "4207": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "4208": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "4209": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "4210": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "4211": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "MLOAD", - "path": "8" - }, - "4212": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "4213": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "DUP2", - "path": "8" - }, - "4214": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "4215": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "SUB", - "path": "8" - }, - "4216": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x64" - }, - "4218": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "4219": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "4220": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "REVERT", - "path": "8" - }, - "4221": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "JUMPDEST", - "path": "8" - }, - "4222": { - "fn": "Governance.removeGovernor", - "offset": [3841, 3851], - "op": "CALLER", - "path": "1", - "statement": 47 - }, - "4223": { - "op": "PUSH1", - "value": "0x1" - }, - "4225": { - "op": "PUSH1", - "value": "0x1" - }, - "4227": { - "op": "PUSH1", - "value": "0xA0" - }, - "4229": { - "op": "SHL" - }, - "4230": { - "op": "SUB" - }, - "4231": { - "fn": "Governance.removeGovernor", - "offset": [3841, 3873], - "op": "DUP3", - "path": "1" - }, - "4232": { - "fn": "Governance.removeGovernor", - "offset": [3841, 3873], - "op": "AND", - "path": "1" - }, - "4233": { - "fn": "Governance.removeGovernor", - "offset": [3841, 3873], - "op": "EQ", - "path": "1" - }, - "4234": { - "branch": 94, - "fn": "Governance.removeGovernor", - "offset": [3841, 3873], - "op": "ISZERO", - "path": "1" - }, - "4235": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "PUSH2", - "path": "1", - "value": "0x10D2" - }, - "4238": { - "branch": 94, - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "JUMPI", - "path": "1" - }, - "4239": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "PUSH1", - "path": "1", - "value": "0x40" - }, - "4241": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "DUP1", - "path": "1" - }, - "4242": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "MLOAD", - "path": "1" - }, - "4243": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "4247": { - "op": "PUSH1", - "value": "0xE5" - }, - "4249": { - "op": "SHL" - }, - "4250": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "DUP2", - "path": "1" - }, - "4251": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "MSTORE", - "path": "1" - }, - "4252": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "4254": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "PUSH1", - "path": "1", - "value": "0x4" - }, - "4256": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "DUP3", - "path": "1" - }, - "4257": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "ADD", - "path": "1" - }, - "4258": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "MSTORE", - "path": "1" - }, - "4259": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "PUSH1", - "path": "1", - "value": "0x14" - }, - "4261": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "PUSH1", - "path": "1", - "value": "0x24" - }, - "4263": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "DUP3", - "path": "1" - }, - "4264": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "ADD", - "path": "1" - }, - "4265": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "MSTORE", - "path": "1" - }, - "4266": { - "op": "PUSH20", - "value": "0x474F5645524E4F525F53454C465F52454D4F5645" - }, - "4287": { - "op": "PUSH1", - "value": "0x60" - }, - "4289": { - "op": "SHL" - }, - "4290": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "PUSH1", - "path": "1", - "value": "0x44" - }, - "4292": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "DUP3", - "path": "1" - }, - "4293": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "ADD", - "path": "1" - }, - "4294": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "MSTORE", - "path": "1" - }, - "4295": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "SWAP1", - "path": "1" - }, - "4296": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "MLOAD", - "path": "1" - }, - "4297": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "SWAP1", - "path": "1" - }, - "4298": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "DUP2", - "path": "1" - }, - "4299": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "SWAP1", - "path": "1" - }, - "4300": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "SUB", - "path": "1" - }, - "4301": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "PUSH1", - "path": "1", - "value": "0x64" - }, - "4303": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "ADD", - "path": "1" - }, - "4304": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "SWAP1", - "path": "1" - }, - "4305": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "REVERT", - "path": "1" - }, - "4306": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "JUMPDEST", - "path": "1" - }, - "4307": { - "fn": "Governance.removeGovernor", - "offset": [3908, 3940], - "op": "PUSH1", - "path": "1", - "value": "0x0" - }, - "4309": { - "fn": "Governance.removeGovernor", - "offset": [3943, 3962], - "op": "PUSH2", - "path": "1", - "value": "0x10DC" - }, - "4312": { - "fn": "Governance.removeGovernor", - "offset": [3943, 3960], - "op": "PUSH2", - "path": "1", - "value": "0x1BAD" - }, - "4315": { - "fn": "Governance.removeGovernor", - "jump": "i", - "offset": [3943, 3962], - "op": "JUMP", - "path": "1" - }, - "4316": { - "fn": "Governance.removeGovernor", - "offset": [3943, 3962], - "op": "JUMPDEST", - "path": "1" - }, - "4317": { - "fn": "Governance.removeGovernor", - "offset": [3908, 3962], - "op": "SWAP1", - "path": "1" - }, - "4318": { - "fn": "Governance.removeGovernor", - "offset": [3908, 3962], - "op": "POP", - "path": "1" - }, - "4319": { - "fn": "Governance.removeGovernor", - "offset": [3980, 4010], - "op": "PUSH2", - "path": "1", - "statement": 48, - "value": "0x10E7" - }, - "4322": { - "fn": "Governance.removeGovernor", - "offset": [3991, 4009], - "op": "DUP3", - "path": "1" - }, - "4323": { - "fn": "Governance.removeGovernor", - "offset": [3980, 3990], - "op": "PUSH2", - "path": "1", - "value": "0xC82" - }, - "4326": { - "fn": "Governance.removeGovernor", - "jump": "i", - "offset": [3980, 4010], - "op": "JUMP", - "path": "1" - }, - "4327": { - "branch": 95, - "fn": "Governance.removeGovernor", - "offset": [3980, 4010], - "op": "JUMPDEST", - "path": "1" - }, - "4328": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "PUSH2", - "path": "1", - "value": "0x1127" - }, - "4331": { - "branch": 95, - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "JUMPI", - "path": "1" - }, - "4332": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "PUSH1", - "path": "1", - "value": "0x40" - }, - "4334": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "DUP1", - "path": "1" - }, - "4335": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "MLOAD", - "path": "1" - }, - "4336": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "4340": { - "op": "PUSH1", - "value": "0xE5" - }, - "4342": { - "op": "SHL" - }, - "4343": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "DUP2", - "path": "1" - }, - "4344": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "MSTORE", - "path": "1" - }, - "4345": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "4347": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "PUSH1", - "path": "1", - "value": "0x4" - }, - "4349": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "DUP3", - "path": "1" - }, - "4350": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "ADD", - "path": "1" - }, - "4351": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "MSTORE", - "path": "1" - }, - "4352": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "PUSH1", - "path": "1", - "value": "0xC" - }, - "4354": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "PUSH1", - "path": "1", - "value": "0x24" - }, - "4356": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "DUP3", - "path": "1" - }, - "4357": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "ADD", - "path": "1" - }, - "4358": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "MSTORE", - "path": "1" - }, - "4359": { - "op": "PUSH12", - "value": "0x2727AA2FA3A7AB22A92727A9" - }, - "4372": { - "op": "PUSH1", - "value": "0xA1" - }, - "4374": { - "op": "SHL" - }, - "4375": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "PUSH1", - "path": "1", - "value": "0x44" - }, - "4377": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "DUP3", - "path": "1" - }, - "4378": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "ADD", - "path": "1" - }, - "4379": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "MSTORE", - "path": "1" - }, - "4380": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "SWAP1", - "path": "1" - }, - "4381": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "MLOAD", - "path": "1" - }, - "4382": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "SWAP1", - "path": "1" - }, - "4383": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "DUP2", - "path": "1" - }, - "4384": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "SWAP1", - "path": "1" - }, - "4385": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "SUB", - "path": "1" - }, - "4386": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "PUSH1", - "path": "1", - "value": "0x64" - }, - "4388": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "ADD", - "path": "1" - }, - "4389": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "SWAP1", - "path": "1" - }, - "4390": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "REVERT", - "path": "1" - }, - "4391": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "JUMPDEST", - "path": "1" - }, - "4392": { - "op": "PUSH1", - "value": "0x1" - }, - "4394": { - "op": "PUSH1", - "value": "0x1" - }, - "4396": { - "op": "PUSH1", - "value": "0xA0" - }, - "4398": { - "op": "SHL" - }, - "4399": { - "op": "SUB" - }, - "4400": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4079], - "op": "DUP3", - "path": "1", - "statement": 49 - }, - "4401": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4079], - "op": "AND", - "path": "1" - }, - "4402": { - "fn": "Governance.removeGovernor", - "offset": [4082, 4087], - "op": "PUSH1", - "path": "1", - "value": "0x0" - }, - "4404": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4079], - "op": "DUP2", - "path": "1" - }, - "4405": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4079], - "op": "DUP2", - "path": "1" - }, - "4406": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4079], - "op": "MSTORE", - "path": "1" - }, - "4407": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4079], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "4409": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4079], - "op": "DUP4", - "path": "1" - }, - "4410": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4079], - "op": "DUP2", - "path": "1" - }, - "4411": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4079], - "op": "MSTORE", - "path": "1" - }, - "4412": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4079], - "op": "PUSH1", - "path": "1", - "value": "0x40" - }, - "4414": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4079], - "op": "SWAP2", - "path": "1" - }, - "4415": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4079], - "op": "DUP3", - "path": "1" - }, - "4416": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4079], - "op": "SWAP1", - "path": "1" - }, - "4417": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4079], - "op": "KECCAK256", - "path": "1" - }, - "4418": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4087], - "op": "DUP1", - "path": "1" - }, - "4419": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4087], - "op": "SLOAD", - "path": "1" - }, - "4420": { - "op": "PUSH1", - "value": "0xFF" - }, - "4422": { - "op": "NOT" - }, - "4423": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4087], - "op": "AND", - "path": "1" - }, - "4424": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4087], - "op": "SWAP1", - "path": "1" - }, - "4425": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4087], - "op": "SSTORE", - "path": "1" - }, - "4426": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "DUP2", - "path": "1", - "statement": 50 - }, - "4427": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "MLOAD", - "path": "1" - }, - "4428": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "SWAP3", - "path": "1" - }, - "4429": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "DUP4", - "path": "1" - }, - "4430": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "MSTORE", - "path": "1" - }, - "4431": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "SWAP1", - "path": "1" - }, - "4432": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "MLOAD", - "path": "1" - }, - "4433": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "PUSH32", - "path": "1", - "value": "0xD75F94825E770B8B512BE8E74759E252AD00E102E38F50CCE2F7C6F868A29599" - }, - "4466": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "SWAP3", - "path": "1" - }, - "4467": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "DUP2", - "path": "1" - }, - "4468": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "SWAP1", - "path": "1" - }, - "4469": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "SUB", - "path": "1" - }, - "4470": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "SWAP1", - "path": "1" - }, - "4471": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "SWAP2", - "path": "1" - }, - "4472": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "ADD", - "path": "1" - }, - "4473": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "SWAP1", - "path": "1" - }, - "4474": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "LOG1", - "path": "1" - }, - "4475": { - "offset": [486, 487], - "op": "POP", - "path": "8" - }, - "4476": { - "fn": "Governance.removeGovernor", - "offset": [3747, 4147], - "op": "POP", - "path": "1" - }, - "4477": { - "fn": "Governance.removeGovernor", - "jump": "o", - "offset": [3747, 4147], - "op": "JUMP", - "path": "1" - }, - "4478": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1858, 1979], - "op": "JUMPDEST", - "path": "29" - }, - "4479": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1917, 1972], - "op": "PUSH2", - "path": "29", - "statement": 51, - "value": "0x2E1" - }, - "4482": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "4484": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "MLOAD", - "path": "29" - }, - "4485": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "DUP1", - "path": "29" - }, - "4486": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "PUSH1", - "path": "29", - "value": "0x60" - }, - "4488": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "ADD", - "path": "29" - }, - "4489": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "4491": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "MSTORE", - "path": "29" - }, - "4492": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "DUP1", - "path": "29" - }, - "4493": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "PUSH1", - "path": "29", - "value": "0x27" - }, - "4495": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "DUP2", - "path": "29" - }, - "4496": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "MSTORE", - "path": "29" - }, - "4497": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "PUSH1", - "path": "29", - "value": "0x20" - }, - "4499": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "ADD", - "path": "29" - }, - "4500": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "PUSH2", - "path": "29", - "value": "0x1F06" - }, - "4503": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "PUSH1", - "path": "29", - "value": "0x27" - }, - "4505": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "SWAP2", - "path": "29" - }, - "4506": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "CODECOPY", - "path": "29" - }, - "4507": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1966, 1971], - "op": "DUP3", - "path": "29" - }, - "4508": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1917, 1942], - "op": "PUSH2", - "path": "29", - "value": "0x1D26" - }, - "4511": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "jump": "i", - "offset": [1917, 1972], - "op": "JUMP", - "path": "29" - }, - "4512": { - "fn": "Governance.nominateNewGovernor", - "offset": [2332, 2633], - "op": "JUMPDEST", - "path": "1" - }, - "4513": { - "offset": [434, 456], - "op": "PUSH2", - "path": "8", - "value": "0x11A9" - }, - "4516": { - "offset": [445, 455], - "op": "CALLER", - "path": "8" - }, - "4517": { - "offset": [434, 444], - "op": "PUSH2", - "path": "8", - "value": "0xC82" - }, - "4520": { - "jump": "i", - "offset": [434, 456], - "op": "JUMP", - "path": "8" - }, - "4521": { - "fn": "Governance.nominateNewGovernor", - "offset": [434, 456], - "op": "JUMPDEST", - "path": "8" - }, - "4522": { - "offset": [426, 476], - "op": "PUSH2", - "path": "8", - "value": "0x11EC" - }, - "4525": { - "offset": [426, 476], - "op": "JUMPI", - "path": "8" - }, - "4526": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x40" - }, - "4528": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "DUP1", - "path": "8" - }, - "4529": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "MLOAD", - "path": "8" - }, - "4530": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "4534": { - "op": "PUSH1", - "value": "0xE5" - }, - "4536": { - "op": "SHL" - }, - "4537": { - "offset": [426, 476], - "op": "DUP2", - "path": "8" - }, - "4538": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "4539": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x20" - }, - "4541": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x4" - }, - "4543": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "4544": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "4545": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "4546": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0xF" - }, - "4548": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x24" - }, - "4550": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "4551": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "4552": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "4553": { - "op": "PUSH15", - "value": "0x4F4E4C595F474F5645524E414E4345" - }, - "4569": { - "op": "PUSH1", - "value": "0x88" - }, - "4571": { - "op": "SHL" - }, - "4572": { - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x44" - }, - "4574": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "4575": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "4576": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "4577": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "4578": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "MLOAD", - "path": "8" - }, - "4579": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "4580": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "DUP2", - "path": "8" - }, - "4581": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "4582": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "SUB", - "path": "8" - }, - "4583": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x64" - }, - "4585": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "4586": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "4587": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "REVERT", - "path": "8" - }, - "4588": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "JUMPDEST", - "path": "8" - }, - "4589": { - "fn": "Governance.nominateNewGovernor", - "offset": [2416, 2448], - "op": "PUSH1", - "path": "1", - "value": "0x0" - }, - "4591": { - "fn": "Governance.nominateNewGovernor", - "offset": [2451, 2470], - "op": "PUSH2", - "path": "1", - "value": "0x11F6" - }, - "4594": { - "fn": "Governance.nominateNewGovernor", - "offset": [2451, 2468], - "op": "PUSH2", - "path": "1", - "value": "0x1BAD" - }, - "4597": { - "fn": "Governance.nominateNewGovernor", - "jump": "i", - "offset": [2451, 2470], - "op": "JUMP", - "path": "1" - }, - "4598": { - "fn": "Governance.nominateNewGovernor", - "offset": [2451, 2470], - "op": "JUMPDEST", - "path": "1" - }, - "4599": { - "fn": "Governance.nominateNewGovernor", - "offset": [2416, 2470], - "op": "SWAP1", - "path": "1" - }, - "4600": { - "fn": "Governance.nominateNewGovernor", - "offset": [2416, 2470], - "op": "POP", - "path": "1" - }, - "4601": { - "fn": "Governance.nominateNewGovernor", - "offset": [2489, 2512], - "op": "PUSH2", - "path": "1", - "statement": 52, - "value": "0x1201" - }, - "4604": { - "fn": "Governance.nominateNewGovernor", - "offset": [2500, 2511], - "op": "DUP3", - "path": "1" - }, - "4605": { - "fn": "Governance.nominateNewGovernor", - "offset": [2489, 2499], - "op": "PUSH2", - "path": "1", - "value": "0xC82" - }, - "4608": { - "fn": "Governance.nominateNewGovernor", - "jump": "i", - "offset": [2489, 2512], - "op": "JUMP", - "path": "1" - }, - "4609": { - "fn": "Governance.nominateNewGovernor", - "offset": [2489, 2512], - "op": "JUMPDEST", - "path": "1" - }, - "4610": { - "branch": 96, - "fn": "Governance.nominateNewGovernor", - "offset": [2488, 2512], - "op": "ISZERO", - "path": "1" - }, - "4611": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "PUSH2", - "path": "1", - "value": "0x1246" - }, - "4614": { - "branch": 96, - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "JUMPI", - "path": "1" - }, - "4615": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "PUSH1", - "path": "1", - "value": "0x40" - }, - "4617": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "DUP1", - "path": "1" - }, - "4618": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "MLOAD", - "path": "1" - }, - "4619": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "4623": { - "op": "PUSH1", - "value": "0xE5" - }, - "4625": { - "op": "SHL" - }, - "4626": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "DUP2", - "path": "1" - }, - "4627": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "MSTORE", - "path": "1" - }, - "4628": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "4630": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "PUSH1", - "path": "1", - "value": "0x4" - }, - "4632": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "DUP3", - "path": "1" - }, - "4633": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "ADD", - "path": "1" - }, - "4634": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "MSTORE", - "path": "1" - }, - "4635": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "PUSH1", - "path": "1", - "value": "0x10" - }, - "4637": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "PUSH1", - "path": "1", - "value": "0x24" - }, - "4639": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "DUP3", - "path": "1" - }, - "4640": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "ADD", - "path": "1" - }, - "4641": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "MSTORE", - "path": "1" - }, - "4642": { - "op": "PUSH16", - "value": "0x20A62922A0A22CAFA3A7AB22A92727A9" - }, - "4659": { - "op": "PUSH1", - "value": "0x81" - }, - "4661": { - "op": "SHL" - }, - "4662": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "PUSH1", - "path": "1", - "value": "0x44" - }, - "4664": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "DUP3", - "path": "1" - }, - "4665": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "ADD", - "path": "1" - }, - "4666": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "MSTORE", - "path": "1" - }, - "4667": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "SWAP1", - "path": "1" - }, - "4668": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "MLOAD", - "path": "1" - }, - "4669": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "SWAP1", - "path": "1" - }, - "4670": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "DUP2", - "path": "1" - }, - "4671": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "SWAP1", - "path": "1" - }, - "4672": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "SUB", - "path": "1" - }, - "4673": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "PUSH1", - "path": "1", - "value": "0x64" - }, - "4675": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "ADD", - "path": "1" - }, - "4676": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "SWAP1", - "path": "1" - }, - "4677": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "REVERT", - "path": "1" - }, - "4678": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "JUMPDEST", - "path": "1" - }, - "4679": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2564], - "op": "PUSH1", - "path": "1", - "statement": 53, - "value": "0x1" - }, - "4681": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2564], - "op": "DUP2", - "path": "1" - }, - "4682": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2564], - "op": "ADD", - "path": "1" - }, - "4683": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2578], - "op": "DUP1", - "path": "1" - }, - "4684": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2578], - "op": "SLOAD", - "path": "1" - }, - "4685": { - "op": "PUSH1", - "value": "0x1" - }, - "4687": { - "op": "PUSH1", - "value": "0x1" - }, - "4689": { - "op": "PUSH1", - "value": "0xA0" - }, - "4691": { - "op": "SHL" - }, - "4692": { - "op": "SUB" - }, - "4693": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2578], - "op": "DUP5", - "path": "1" - }, - "4694": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2578], - "op": "AND", - "path": "1" - }, - "4695": { - "op": "PUSH1", - "value": "0x1" - }, - "4697": { - "op": "PUSH1", - "value": "0x1" - }, - "4699": { - "op": "PUSH1", - "value": "0xA0" - }, - "4701": { - "op": "SHL" - }, - "4702": { - "op": "SUB" - }, - "4703": { - "op": "NOT" - }, - "4704": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2578], - "op": "SWAP1", - "path": "1" - }, - "4705": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2578], - "op": "SWAP2", - "path": "1" - }, - "4706": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2578], - "op": "AND", - "path": "1" - }, - "4707": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2578], - "op": "DUP2", - "path": "1" - }, - "4708": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2578], - "op": "OR", - "path": "1" - }, - "4709": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2578], - "op": "SWAP1", - "path": "1" - }, - "4710": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2578], - "op": "SWAP2", - "path": "1" - }, - "4711": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2578], - "op": "SSTORE", - "path": "1" - }, - "4712": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "PUSH1", - "path": "1", - "statement": 54, - "value": "0x40" - }, - "4714": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "DUP1", - "path": "1" - }, - "4715": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "MLOAD", - "path": "1" - }, - "4716": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "SWAP2", - "path": "1" - }, - "4717": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "DUP3", - "path": "1" - }, - "4718": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "MSTORE", - "path": "1" - }, - "4719": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "MLOAD", - "path": "1" - }, - "4720": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "PUSH32", - "path": "1", - "value": "0x6166272C8D3F5F579082F2827532732F97195007983BB5B83AC12C56700B01A6" - }, - "4753": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "SWAP2", - "path": "1" - }, - "4754": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "DUP2", - "path": "1" - }, - "4755": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "SWAP1", - "path": "1" - }, - "4756": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "SUB", - "path": "1" - }, - "4757": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "4759": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "ADD", - "path": "1" - }, - "4760": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "SWAP1", - "path": "1" - }, - "4761": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "LOG1", - "path": "1" - }, - "4762": { - "offset": [486, 487], - "op": "POP", - "path": "8" - }, - "4763": { - "fn": "Governance.nominateNewGovernor", - "offset": [2332, 2633], - "op": "POP", - "path": "1" - }, - "4764": { - "fn": "Governance.nominateNewGovernor", - "jump": "o", - "offset": [2332, 2633], - "op": "JUMP", - "path": "1" - }, - "4765": { - "fn": "Governance.acceptGovernance", - "offset": [3193, 3690], - "op": "JUMPDEST", - "path": "1" - }, - "4766": { - "fn": "Governance.acceptGovernance", - "offset": [3321, 3353], - "op": "PUSH1", - "path": "1", - "value": "0x0" - }, - "4768": { - "fn": "Governance.acceptGovernance", - "offset": [3356, 3375], - "op": "PUSH2", - "path": "1", - "value": "0x12A7" - }, - "4771": { - "fn": "Governance.acceptGovernance", - "offset": [3356, 3373], - "op": "PUSH2", - "path": "1", - "value": "0x1BAD" - }, - "4774": { - "fn": "Governance.acceptGovernance", - "jump": "i", - "offset": [3356, 3375], - "op": "JUMP", - "path": "1" - }, - "4775": { - "fn": "Governance.acceptGovernance", - "offset": [3356, 3375], - "op": "JUMPDEST", - "path": "1" - }, - "4776": { - "fn": "Governance.acceptGovernance", - "offset": [3407, 3428], - "op": "PUSH1", - "path": "1", - "statement": 55, - "value": "0x1" - }, - "4778": { - "fn": "Governance.acceptGovernance", - "offset": [3407, 3428], - "op": "DUP2", - "path": "1" - }, - "4779": { - "fn": "Governance.acceptGovernance", - "offset": [3407, 3428], - "op": "ADD", - "path": "1" - }, - "4780": { - "fn": "Governance.acceptGovernance", - "offset": [3407, 3428], - "op": "SLOAD", - "path": "1" - }, - "4781": { - "fn": "Governance.acceptGovernance", - "offset": [3407, 3428], - "op": "SWAP1", - "path": "1" - }, - "4782": { - "fn": "Governance.acceptGovernance", - "offset": [3407, 3428], - "op": "SWAP2", - "path": "1" - }, - "4783": { - "op": "POP" - }, - "4784": { - "op": "PUSH1", - "value": "0x1" - }, - "4786": { - "op": "PUSH1", - "value": "0x1" - }, - "4788": { - "op": "PUSH1", - "value": "0xA0" - }, - "4790": { - "op": "SHL" - }, - "4791": { - "op": "SUB" - }, - "4792": { - "fn": "Governance.acceptGovernance", - "offset": [3407, 3428], - "op": "AND", - "path": "1" - }, - "4793": { - "fn": "Governance.acceptGovernance", - "offset": [3393, 3403], - "op": "CALLER", - "path": "1" - }, - "4794": { - "branch": 97, - "fn": "Governance.acceptGovernance", - "offset": [3393, 3428], - "op": "EQ", - "path": "1" - }, - "4795": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "PUSH2", - "path": "1", - "value": "0x130B" - }, - "4798": { - "branch": 97, - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "JUMPI", - "path": "1" - }, - "4799": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "PUSH1", - "path": "1", - "value": "0x40" - }, - "4801": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "DUP1", - "path": "1" - }, - "4802": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "MLOAD", - "path": "1" - }, - "4803": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "4807": { - "op": "PUSH1", - "value": "0xE5" - }, - "4809": { - "op": "SHL" - }, - "4810": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "DUP2", - "path": "1" - }, - "4811": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "MSTORE", - "path": "1" - }, - "4812": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "4814": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "PUSH1", - "path": "1", - "value": "0x4" - }, - "4816": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "DUP3", - "path": "1" - }, - "4817": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "ADD", - "path": "1" - }, - "4818": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "MSTORE", - "path": "1" - }, - "4819": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "PUSH1", - "path": "1", - "value": "0x17" - }, - "4821": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "PUSH1", - "path": "1", - "value": "0x24" - }, - "4823": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "DUP3", - "path": "1" - }, - "4824": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "ADD", - "path": "1" - }, - "4825": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "MSTORE", - "path": "1" - }, - "4826": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "PUSH32", - "path": "1", - "value": "0x4F4E4C595F43414E4449444154455F474F5645524E4F52000000000000000000" - }, - "4859": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "PUSH1", - "path": "1", - "value": "0x44" - }, - "4861": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "DUP3", - "path": "1" - }, - "4862": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "ADD", - "path": "1" - }, - "4863": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "MSTORE", - "path": "1" - }, - "4864": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "SWAP1", - "path": "1" - }, - "4865": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "MLOAD", - "path": "1" - }, - "4866": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "SWAP1", - "path": "1" - }, - "4867": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "DUP2", - "path": "1" - }, - "4868": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "SWAP1", - "path": "1" - }, - "4869": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "SUB", - "path": "1" - }, - "4870": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "PUSH1", - "path": "1", - "value": "0x64" - }, - "4872": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "ADD", - "path": "1" - }, - "4873": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "SWAP1", - "path": "1" - }, - "4874": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "REVERT", - "path": "1" - }, - "4875": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "JUMPDEST", - "path": "1" - }, - "4876": { - "fn": "Governance.acceptGovernance", - "offset": [3504, 3525], - "op": "PUSH1", - "path": "1", - "statement": 56, - "value": "0x1" - }, - "4878": { - "fn": "Governance.acceptGovernance", - "offset": [3504, 3525], - "op": "DUP2", - "path": "1" - }, - "4879": { - "fn": "Governance.acceptGovernance", - "offset": [3504, 3525], - "op": "ADD", - "path": "1" - }, - "4880": { - "fn": "Governance.acceptGovernance", - "offset": [3504, 3525], - "op": "SLOAD", - "path": "1" - }, - "4881": { - "fn": "Governance.acceptGovernance", - "offset": [3492, 3526], - "op": "PUSH2", - "path": "1", - "value": "0x1322" - }, - "4884": { - "fn": "Governance.acceptGovernance", - "offset": [3492, 3526], - "op": "SWAP1", - "path": "1" - }, - "4885": { - "op": "PUSH1", - "value": "0x1" - }, - "4887": { - "op": "PUSH1", - "value": "0x1" - }, - "4889": { - "op": "PUSH1", - "value": "0xA0" - }, - "4891": { - "op": "SHL" - }, - "4892": { - "op": "SUB" - }, - "4893": { - "fn": "Governance.acceptGovernance", - "offset": [3504, 3525], - "op": "AND", - "path": "1" - }, - "4894": { - "fn": "Governance.acceptGovernance", - "offset": [3492, 3503], - "op": "PUSH2", - "path": "1", - "value": "0x1CA6" - }, - "4897": { - "fn": "Governance.acceptGovernance", - "jump": "i", - "offset": [3492, 3526], - "op": "JUMP", - "path": "1" - }, - "4898": { - "fn": "Governance.acceptGovernance", - "offset": [3492, 3526], - "op": "JUMPDEST", - "path": "1" - }, - "4899": { - "fn": "Governance.acceptGovernance", - "offset": [3536, 3557], - "op": "PUSH1", - "path": "1", - "statement": 57, - "value": "0x1" - }, - "4901": { - "fn": "Governance.acceptGovernance", - "offset": [3536, 3557], - "op": "DUP2", - "path": "1" - }, - "4902": { - "fn": "Governance.acceptGovernance", - "offset": [3536, 3557], - "op": "ADD", - "path": "1" - }, - "4903": { - "fn": "Governance.acceptGovernance", - "offset": [3536, 3572], - "op": "DUP1", - "path": "1" - }, - "4904": { - "fn": "Governance.acceptGovernance", - "offset": [3536, 3572], - "op": "SLOAD", - "path": "1" - }, - "4905": { - "op": "PUSH1", - "value": "0x1" - }, - "4907": { - "op": "PUSH1", - "value": "0x1" - }, - "4909": { - "op": "PUSH1", - "value": "0xA0" - }, - "4911": { - "op": "SHL" - }, - "4912": { - "op": "SUB" - }, - "4913": { - "op": "NOT" - }, - "4914": { - "fn": "Governance.acceptGovernance", - "offset": [3536, 3572], - "op": "AND", - "path": "1" - }, - "4915": { - "fn": "Governance.acceptGovernance", - "offset": [3536, 3572], - "op": "SWAP1", - "path": "1" - }, - "4916": { - "fn": "Governance.acceptGovernance", - "offset": [3536, 3572], - "op": "SSTORE", - "path": "1" - }, - "4917": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "PUSH1", - "path": "1", - "statement": 58, - "value": "0x40" - }, - "4919": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "DUP1", - "path": "1" - }, - "4920": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "MLOAD", - "path": "1" - }, - "4921": { - "fn": "Governance.acceptGovernance", - "offset": [3672, 3682], - "op": "CALLER", - "path": "1" - }, - "4922": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "DUP2", - "path": "1" - }, - "4923": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "MSTORE", - "path": "1" - }, - "4924": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "SWAP1", - "path": "1" - }, - "4925": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "MLOAD", - "path": "1" - }, - "4926": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "PUSH32", - "path": "1", - "value": "0xCFB473E6C03F9A29DDAF990E736FA3DE5188A0BD85D684F5B6E164EBFBFFF5D2" - }, - "4959": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "SWAP2", - "path": "1" - }, - "4960": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "DUP2", - "path": "1" - }, - "4961": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "SWAP1", - "path": "1" - }, - "4962": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "SUB", - "path": "1" - }, - "4963": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "4965": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "ADD", - "path": "1" - }, - "4966": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "SWAP1", - "path": "1" - }, - "4967": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "LOG1", - "path": "1" - }, - "4968": { - "fn": "Governance.acceptGovernance", - "offset": [3193, 3690], - "op": "POP", - "path": "1" - }, - "4969": { - "fn": "Governance.acceptGovernance", - "jump": "o", - "offset": [3193, 3690], - "op": "JUMP", - "path": "1" - }, - "4970": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [896, 1018], - "op": "JUMPDEST", - "path": "29" - }, - "4971": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [946, 953], - "op": "PUSH1", - "path": "29", - "value": "0x0" - }, - "4973": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [972, 1011], - "op": "PUSH2", - "path": "29", - "statement": 59, - "value": "0xA3C" - }, - "4976": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "4978": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "MLOAD", - "path": "29" - }, - "4979": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "DUP1", - "path": "29" - }, - "4980": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "PUSH1", - "path": "29", - "value": "0x60" - }, - "4982": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "ADD", - "path": "29" - }, - "4983": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "4985": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "MSTORE", - "path": "29" - }, - "4986": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "DUP1", - "path": "29" - }, - "4987": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "PUSH1", - "path": "29", - "value": "0x27" - }, - "4989": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "DUP2", - "path": "29" - }, - "4990": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "MSTORE", - "path": "29" - }, - "4991": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "PUSH1", - "path": "29", - "value": "0x20" - }, - "4993": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "ADD", - "path": "29" - }, - "4994": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "PUSH2", - "path": "29", - "value": "0x1EDF" - }, - "4997": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "PUSH1", - "path": "29", - "value": "0x27" - }, - "4999": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "SWAP2", - "path": "29" - }, - "5000": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "CODECOPY", - "path": "29" - }, - "5001": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [972, 997], - "op": "PUSH2", - "path": "29", - "value": "0x1981" - }, - "5004": { - "fn": "StarknetTokenStorage.l2TokenContract", - "jump": "i", - "offset": [972, 1011], - "op": "JUMP", - "path": "29" - }, - "5005": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1620, 1736], - "op": "JUMPDEST", - "path": "29" - }, - "5006": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1679, 1729], - "op": "PUSH2", - "path": "29", - "statement": 60, - "value": "0x2E1" - }, - "5009": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "5011": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "MLOAD", - "path": "29" - }, - "5012": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "DUP1", - "path": "29" - }, - "5013": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "PUSH1", - "path": "29", - "value": "0x60" - }, - "5015": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "ADD", - "path": "29" - }, - "5016": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "5018": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "MSTORE", - "path": "29" - }, - "5019": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "DUP1", - "path": "29" - }, - "5020": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "PUSH1", - "path": "29", - "value": "0x27" - }, - "5022": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "DUP2", - "path": "29" - }, - "5023": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "MSTORE", - "path": "29" - }, - "5024": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "PUSH1", - "path": "29", - "value": "0x20" - }, - "5026": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "ADD", - "path": "29" - }, - "5027": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "PUSH2", - "path": "29", - "value": "0x1EDF" - }, - "5030": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "PUSH1", - "path": "29", - "value": "0x27" - }, - "5032": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "SWAP2", - "path": "29" - }, - "5033": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "CODECOPY", - "path": "29" - }, - "5034": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1723, 1728], - "op": "DUP3", - "path": "29" - }, - "5035": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1679, 1708], - "op": "PUSH2", - "path": "29", - "value": "0x1DA0" - }, - "5038": { - "fn": "StarknetTokenStorage.l2TokenContract", - "jump": "i", - "offset": [1679, 1729], - "op": "JUMP", - "path": "29" - }, - "5039": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1742, 1852], - "op": "JUMPDEST", - "path": "29" - }, - "5040": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1796, 1845], - "op": "PUSH2", - "path": "29", - "statement": 61, - "value": "0x2E1" - }, - "5043": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "5045": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "MLOAD", - "path": "29" - }, - "5046": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "DUP1", - "path": "29" - }, - "5047": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "PUSH1", - "path": "29", - "value": "0x60" - }, - "5049": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "ADD", - "path": "29" - }, - "5050": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "5052": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "MSTORE", - "path": "29" - }, - "5053": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "DUP1", - "path": "29" - }, - "5054": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "PUSH1", - "path": "29", - "value": "0x21" - }, - "5056": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "DUP2", - "path": "29" - }, - "5057": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "MSTORE", - "path": "29" - }, - "5058": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "PUSH1", - "path": "29", - "value": "0x20" - }, - "5060": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "ADD", - "path": "29" - }, - "5061": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "PUSH2", - "path": "29", - "value": "0x1F2D" - }, - "5064": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "PUSH1", - "path": "29", - "value": "0x21" - }, - "5066": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "SWAP2", - "path": "29" - }, - "5067": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "CODECOPY", - "path": "29" - }, - "5068": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1839, 1844], - "op": "DUP3", - "path": "29" - }, - "5069": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1796, 1821], - "op": "PUSH2", - "path": "29", - "value": "0x1D26" - }, - "5072": { - "fn": "StarknetTokenStorage.maxDeposit", - "jump": "i", - "offset": [1796, 1845], - "op": "JUMP", - "path": "29" - }, - "5073": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1150, 1281], - "op": "JUMPDEST", - "path": "29" - }, - "5074": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1200, 1207], - "op": "PUSH1", - "path": "29", - "value": "0x0" - }, - "5076": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1226, 1274], - "op": "PUSH2", - "path": "29", - "statement": 62, - "value": "0xA3C" - }, - "5079": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "5081": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "MLOAD", - "path": "29" - }, - "5082": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "DUP1", - "path": "29" - }, - "5083": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "PUSH1", - "path": "29", - "value": "0x60" - }, - "5085": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "ADD", - "path": "29" - }, - "5086": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "5088": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "MSTORE", - "path": "29" - }, - "5089": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "DUP1", - "path": "29" - }, - "5090": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "PUSH1", - "path": "29", - "value": "0x27" - }, - "5092": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "DUP2", - "path": "29" - }, - "5093": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "MSTORE", - "path": "29" - }, - "5094": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "PUSH1", - "path": "29", - "value": "0x20" - }, - "5096": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "ADD", - "path": "29" - }, - "5097": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "PUSH2", - "path": "29", - "value": "0x1F06" - }, - "5100": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "PUSH1", - "path": "29", - "value": "0x27" - }, - "5102": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "SWAP2", - "path": "29" - }, - "5103": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "CODECOPY", - "path": "29" - }, - "5104": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1226, 1251], - "op": "PUSH2", - "path": "29", - "value": "0x1981" - }, - "5107": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "jump": "i", - "offset": [1226, 1274], - "op": "JUMP", - "path": "29" - }, - "5108": { - "fn": "Transfers.transferIn", - "offset": [320, 1109], - "op": "JUMPDEST", - "path": "30" - }, - "5109": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "PUSH1", - "path": "30", - "value": "0x40" - }, - "5111": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "DUP1", - "path": "30" - }, - "5112": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "MLOAD", - "path": "30" - }, - "5113": { - "op": "PUSH4", - "value": "0x70A08231" - }, - "5118": { - "op": "PUSH1", - "value": "0xE0" - }, - "5120": { - "op": "SHL" - }, - "5121": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "DUP2", - "path": "30" - }, - "5122": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "MSTORE", - "path": "30" - }, - "5123": { - "fn": "Transfers.transferIn", - "offset": [540, 544], - "op": "ADDRESS", - "path": "30" - }, - "5124": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "PUSH1", - "path": "30", - "value": "0x4" - }, - "5126": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "DUP3", - "path": "30" - }, - "5127": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "ADD", - "path": "30" - }, - "5128": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "MSTORE", - "path": "30" - }, - "5129": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "SWAP1", - "path": "30" - }, - "5130": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "MLOAD", - "path": "30" - }, - "5131": { - "fn": "Transfers.transferIn", - "offset": [464, 469], - "op": "DUP5", - "path": "30" - }, - "5132": { - "fn": "Transfers.transferIn", - "offset": [464, 469], - "op": "SWAP2", - "path": "30" - }, - "5133": { - "fn": "Transfers.transferIn", - "offset": [436, 454], - "op": "PUSH1", - "path": "30", - "value": "0x0" - }, - "5135": { - "fn": "Transfers.transferIn", - "offset": [436, 454], - "op": "SWAP2", - "path": "30" - }, - "5136": { - "op": "PUSH1", - "value": "0x1" - }, - "5138": { - "op": "PUSH1", - "value": "0x1" - }, - "5140": { - "op": "PUSH1", - "value": "0xA0" - }, - "5142": { - "op": "SHL" - }, - "5143": { - "op": "SUB" - }, - "5144": { - "fn": "Transfers.transferIn", - "offset": [510, 531], - "op": "DUP5", - "path": "30" - }, - "5145": { - "fn": "Transfers.transferIn", - "offset": [510, 531], - "op": "AND", - "path": "30" - }, - "5146": { - "fn": "Transfers.transferIn", - "offset": [510, 531], - "op": "SWAP2", - "path": "30" - }, - "5147": { - "fn": "Transfers.transferIn", - "offset": [510, 531], - "op": "PUSH4", - "path": "30", - "value": "0x70A08231" - }, - "5152": { - "fn": "Transfers.transferIn", - "offset": [510, 531], - "op": "SWAP2", - "path": "30" - }, - "5153": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "PUSH1", - "path": "30", - "value": "0x24" - }, - "5155": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "DUP1", - "path": "30" - }, - "5156": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "DUP4", - "path": "30" - }, - "5157": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "ADD", - "path": "30" - }, - "5158": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "SWAP3", - "path": "30" - }, - "5159": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "PUSH1", - "path": "30", - "value": "0x20" - }, - "5161": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "SWAP3", - "path": "30" - }, - "5162": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "SWAP2", - "path": "30" - }, - "5163": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "SWAP1", - "path": "30" - }, - "5164": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "DUP3", - "path": "30" - }, - "5165": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "SWAP1", - "path": "30" - }, - "5166": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "SUB", - "path": "30" - }, - "5167": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "ADD", - "path": "30" - }, - "5168": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "DUP2", - "path": "30" - }, - "5169": { - "fn": "Transfers.transferIn", - "offset": [510, 531], - "op": "DUP7", - "path": "30" - }, - "5170": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "DUP1", - "path": "30" - }, - "5171": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "EXTCODESIZE", - "path": "30" - }, - "5172": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "ISZERO", - "path": "30" - }, - "5173": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "DUP1", - "path": "30" - }, - "5174": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "ISZERO", - "path": "30" - }, - "5175": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "PUSH2", - "path": "30", - "value": "0x143F" - }, - "5178": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "JUMPI", - "path": "30" - }, - "5179": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "PUSH1", - "path": "30", - "value": "0x0" - }, - "5181": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "DUP1", - "path": "30" - }, - "5182": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "REVERT", - "path": "30" - }, - "5183": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "JUMPDEST", - "path": "30" - }, - "5184": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "POP", - "path": "30" - }, - "5185": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "GAS", - "path": "30" - }, - "5186": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "STATICCALL", - "path": "30" - }, - "5187": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "ISZERO", - "path": "30" - }, - "5188": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "DUP1", - "path": "30" - }, - "5189": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "ISZERO", - "path": "30" - }, - "5190": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "PUSH2", - "path": "30", - "value": "0x1453" - }, - "5193": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "JUMPI", - "path": "30" - }, - "5194": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "RETURNDATASIZE", - "path": "30" - }, - "5195": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "PUSH1", - "path": "30", - "value": "0x0" - }, - "5197": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "DUP1", - "path": "30" - }, - "5198": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "RETURNDATACOPY", - "path": "30" - }, - "5199": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "RETURNDATASIZE", - "path": "30" - }, - "5200": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "PUSH1", - "path": "30", - "value": "0x0" - }, - "5202": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "REVERT", - "path": "30" - }, - "5203": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "JUMPDEST", - "path": "30" - }, - "5204": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "POP", - "path": "30" - }, - "5205": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "POP", - "path": "30" - }, - "5206": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "POP", - "path": "30" - }, - "5207": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "POP", - "path": "30" - }, - "5208": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "PUSH1", - "path": "30", - "value": "0x40" - }, - "5210": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "MLOAD", - "path": "30" - }, - "5211": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "RETURNDATASIZE", - "path": "30" - }, - "5212": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "PUSH1", - "path": "30", - "value": "0x20" - }, - "5214": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "DUP2", - "path": "30" - }, - "5215": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "LT", - "path": "30" - }, - "5216": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "ISZERO", - "path": "30" - }, - "5217": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "PUSH2", - "path": "30", - "value": "0x1469" - }, - "5220": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "JUMPI", - "path": "30" - }, - "5221": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "PUSH1", - "path": "30", - "value": "0x0" - }, - "5223": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "DUP1", - "path": "30" - }, - "5224": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "REVERT", - "path": "30" - }, - "5225": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "JUMPDEST", - "path": "30" - }, - "5226": { - "op": "POP" - }, - "5227": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "MLOAD", - "path": "30" - }, - "5228": { - "fn": "Transfers.transferIn", - "offset": [510, 546], - "op": "SWAP1", - "path": "30" - }, - "5229": { - "op": "POP" - }, - "5230": { - "fn": "Transfers.transferIn", - "offset": [564, 592], - "op": "DUP3", - "path": "30", - "statement": 63 - }, - "5231": { - "fn": "Transfers.transferIn", - "offset": [564, 592], - "op": "DUP2", - "path": "30" - }, - "5232": { - "fn": "Transfers.transferIn", - "offset": [564, 592], - "op": "ADD", - "path": "30" - }, - "5233": { - "fn": "Transfers.transferIn", - "offset": [564, 615], - "op": "DUP2", - "path": "30" - }, - "5234": { - "op": "GT" - }, - "5235": { - "branch": 114, - "fn": "Transfers.transferIn", - "offset": [564, 615], - "op": "ISZERO", - "path": "30" - }, - "5236": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "PUSH2", - "path": "30", - "value": "0x14AF" - }, - "5239": { - "branch": 114, - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "JUMPI", - "path": "30" - }, - "5240": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "PUSH1", - "path": "30", - "value": "0x40" - }, - "5242": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "DUP1", - "path": "30" - }, - "5243": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "MLOAD", - "path": "30" - }, - "5244": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "5248": { - "op": "PUSH1", - "value": "0xE5" - }, - "5250": { - "op": "SHL" - }, - "5251": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "DUP2", - "path": "30" - }, - "5252": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "MSTORE", - "path": "30" - }, - "5253": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "PUSH1", - "path": "30", - "value": "0x20" - }, - "5255": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "PUSH1", - "path": "30", - "value": "0x4" - }, - "5257": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "DUP3", - "path": "30" - }, - "5258": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "ADD", - "path": "30" - }, - "5259": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "MSTORE", - "path": "30" - }, - "5260": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "PUSH1", - "path": "30", - "value": "0x8" - }, - "5262": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "PUSH1", - "path": "30", - "value": "0x24" - }, - "5264": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "DUP3", - "path": "30" - }, - "5265": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "ADD", - "path": "30" - }, - "5266": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "MSTORE", - "path": "30" - }, - "5267": { - "op": "PUSH8", - "value": "0x4F564552464C4F57" - }, - "5276": { - "op": "PUSH1", - "value": "0xC0" - }, - "5278": { - "op": "SHL" - }, - "5279": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "PUSH1", - "path": "30", - "value": "0x44" - }, - "5281": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "DUP3", - "path": "30" - }, - "5282": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "ADD", - "path": "30" - }, - "5283": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "MSTORE", - "path": "30" - }, - "5284": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "SWAP1", - "path": "30" - }, - "5285": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "MLOAD", - "path": "30" - }, - "5286": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "SWAP1", - "path": "30" - }, - "5287": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "DUP2", - "path": "30" - }, - "5288": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "SWAP1", - "path": "30" - }, - "5289": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "SUB", - "path": "30" - }, - "5290": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "PUSH1", - "path": "30", - "value": "0x64" - }, - "5292": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "ADD", - "path": "30" - }, - "5293": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "SWAP1", - "path": "30" - }, - "5294": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "REVERT", - "path": "30" - }, - "5295": { - "fn": "Transfers.transferIn", - "offset": [556, 628], - "op": "JUMPDEST", - "path": "30" - }, - "5296": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "PUSH1", - "path": "30", - "value": "0x40" - }, - "5298": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "DUP1", - "path": "30" - }, - "5299": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "MLOAD", - "path": "30" - }, - "5300": { - "op": "PUSH1", - "value": "0x1" - }, - "5302": { - "op": "PUSH1", - "value": "0x1" - }, - "5304": { - "op": "PUSH1", - "value": "0xA0" - }, - "5306": { - "op": "SHL" - }, - "5307": { - "op": "SUB" - }, - "5308": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "DUP1", - "path": "30" - }, - "5309": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "DUP8", - "path": "30" - }, - "5310": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "AND", - "path": "30" - }, - "5311": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "PUSH1", - "path": "30", - "value": "0x24" - }, - "5313": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "DUP4", - "path": "30" - }, - "5314": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "ADD", - "path": "30" - }, - "5315": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "MSTORE", - "path": "30" - }, - "5316": { - "fn": "Transfers.transferIn", - "offset": [773, 777], - "op": "ADDRESS", - "path": "30" - }, - "5317": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "PUSH1", - "path": "30", - "value": "0x44" - }, - "5319": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "DUP4", - "path": "30" - }, - "5320": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "ADD", - "path": "30" - }, - "5321": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "MSTORE", - "path": "30" - }, - "5322": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "PUSH1", - "path": "30", - "value": "0x64" - }, - "5324": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "DUP1", - "path": "30" - }, - "5325": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "DUP4", - "path": "30" - }, - "5326": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "ADD", - "path": "30" - }, - "5327": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "DUP8", - "path": "30" - }, - "5328": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "SWAP1", - "path": "30" - }, - "5329": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "MSTORE", - "path": "30" - }, - "5330": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "DUP4", - "path": "30" - }, - "5331": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "MLOAD", - "path": "30" - }, - "5332": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "DUP1", - "path": "30" - }, - "5333": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "DUP5", - "path": "30" - }, - "5334": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "SUB", - "path": "30" - }, - "5335": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "SWAP1", - "path": "30" - }, - "5336": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "SWAP2", - "path": "30" - }, - "5337": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "ADD", - "path": "30" - }, - "5338": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "DUP2", - "path": "30" - }, - "5339": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "MSTORE", - "path": "30" - }, - "5340": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "PUSH1", - "path": "30", - "value": "0x84" - }, - "5342": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "SWAP1", - "path": "30" - }, - "5343": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "SWAP3", - "path": "30" - }, - "5344": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "ADD", - "path": "30" - }, - "5345": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "SWAP1", - "path": "30" - }, - "5346": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "SWAP3", - "path": "30" - }, - "5347": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "MSTORE", - "path": "30" - }, - "5348": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "PUSH1", - "path": "30", - "value": "0x20" - }, - "5350": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "DUP2", - "path": "30" - }, - "5351": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "ADD", - "path": "30" - }, - "5352": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "DUP1", - "path": "30" - }, - "5353": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "MLOAD", - "path": "30" - }, - "5354": { - "op": "PUSH1", - "value": "0x1" - }, - "5356": { - "op": "PUSH1", - "value": "0x1" - }, - "5358": { - "op": "PUSH1", - "value": "0xE0" - }, - "5360": { - "op": "SHL" - }, - "5361": { - "op": "SUB" - }, - "5362": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "AND", - "path": "30" - }, - "5363": { - "op": "PUSH4", - "value": "0x23B872DD" - }, - "5368": { - "op": "PUSH1", - "value": "0xE0" - }, - "5370": { - "op": "SHL" - }, - "5371": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "OR", - "path": "30" - }, - "5372": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "SWAP1", - "path": "30" - }, - "5373": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "MSTORE", - "path": "30" - }, - "5374": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "SWAP1", - "path": "30" - }, - "5375": { - "fn": "Transfers.transferIn", - "offset": [818, 855], - "op": "PUSH2", - "path": "30", - "statement": 64, - "value": "0x150A" - }, - "5378": { - "fn": "Transfers.transferIn", - "offset": [818, 855], - "op": "SWAP1", - "path": "30" - }, - "5379": { - "fn": "Transfers.transferIn", - "offset": [818, 845], - "op": "DUP8", - "path": "30" - }, - "5380": { - "fn": "Transfers.transferIn", - "offset": [818, 845], - "op": "AND", - "path": "30" - }, - "5381": { - "fn": "Transfers.transferIn", - "offset": [662, 808], - "op": "DUP3", - "path": "30" - }, - "5382": { - "fn": "Transfers.transferIn", - "offset": [818, 845], - "op": "PUSH2", - "path": "30", - "value": "0x19FE" - }, - "5385": { - "fn": "Transfers.transferIn", - "jump": "i", - "offset": [818, 855], - "op": "JUMP", - "path": "30" - }, - "5386": { - "fn": "Transfers.transferIn", - "offset": [818, 855], - "op": "JUMPDEST", - "path": "30" - }, - "5387": { - "fn": "Transfers.transferIn", - "offset": [865, 891], - "op": "PUSH1", - "path": "30", - "value": "0x0" - }, - "5389": { - "fn": "Transfers.transferIn", - "offset": [894, 905], - "op": "DUP4", - "path": "30" - }, - "5390": { - "op": "PUSH1", - "value": "0x1" - }, - "5392": { - "op": "PUSH1", - "value": "0x1" - }, - "5394": { - "op": "PUSH1", - "value": "0xA0" - }, - "5396": { - "op": "SHL" - }, - "5397": { - "op": "SUB" - }, - "5398": { - "fn": "Transfers.transferIn", - "offset": [894, 915], - "op": "AND", - "path": "30" - }, - "5399": { - "fn": "Transfers.transferIn", - "offset": [894, 915], - "op": "PUSH4", - "path": "30", - "value": "0x70A08231" - }, - "5404": { - "fn": "Transfers.transferIn", - "offset": [924, 928], - "op": "ADDRESS", - "path": "30" - }, - "5405": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "PUSH1", - "path": "30", - "value": "0x40" - }, - "5407": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "MLOAD", - "path": "30" - }, - "5408": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "DUP3", - "path": "30" - }, - "5409": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "PUSH4", - "path": "30", - "value": "0xFFFFFFFF" - }, - "5414": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "AND", - "path": "30" - }, - "5415": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "PUSH1", - "path": "30", - "value": "0xE0" - }, - "5417": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "SHL", - "path": "30" - }, - "5418": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "DUP2", - "path": "30" - }, - "5419": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "MSTORE", - "path": "30" - }, - "5420": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "PUSH1", - "path": "30", - "value": "0x4" - }, - "5422": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "ADD", - "path": "30" - }, - "5423": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "DUP1", - "path": "30" - }, - "5424": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "DUP3", - "path": "30" - }, - "5425": { - "op": "PUSH1", - "value": "0x1" - }, - "5427": { - "op": "PUSH1", - "value": "0x1" - }, - "5429": { - "op": "PUSH1", - "value": "0xA0" - }, - "5431": { - "op": "SHL" - }, - "5432": { - "op": "SUB" - }, - "5433": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "AND", - "path": "30" - }, - "5434": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "DUP2", - "path": "30" - }, - "5435": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "MSTORE", - "path": "30" - }, - "5436": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "PUSH1", - "path": "30", - "value": "0x20" - }, - "5438": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "ADD", - "path": "30" - }, - "5439": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "SWAP2", - "path": "30" - }, - "5440": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "POP", - "path": "30" - }, - "5441": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "POP", - "path": "30" - }, - "5442": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "PUSH1", - "path": "30", - "value": "0x20" - }, - "5444": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "PUSH1", - "path": "30", - "value": "0x40" - }, - "5446": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "MLOAD", - "path": "30" - }, - "5447": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "DUP1", - "path": "30" - }, - "5448": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "DUP4", - "path": "30" - }, - "5449": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "SUB", - "path": "30" - }, - "5450": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "DUP2", - "path": "30" - }, - "5451": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "DUP7", - "path": "30" - }, - "5452": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "DUP1", - "path": "30" - }, - "5453": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "EXTCODESIZE", - "path": "30" - }, - "5454": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "ISZERO", - "path": "30" - }, - "5455": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "DUP1", - "path": "30" - }, - "5456": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "ISZERO", - "path": "30" - }, - "5457": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "PUSH2", - "path": "30", - "value": "0x1559" - }, - "5460": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "JUMPI", - "path": "30" - }, - "5461": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "PUSH1", - "path": "30", - "value": "0x0" - }, - "5463": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "DUP1", - "path": "30" - }, - "5464": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "REVERT", - "path": "30" - }, - "5465": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "JUMPDEST", - "path": "30" - }, - "5466": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "POP", - "path": "30" - }, - "5467": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "GAS", - "path": "30" - }, - "5468": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "STATICCALL", - "path": "30" - }, - "5469": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "ISZERO", - "path": "30" - }, - "5470": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "DUP1", - "path": "30" - }, - "5471": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "ISZERO", - "path": "30" - }, - "5472": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "PUSH2", - "path": "30", - "value": "0x156D" - }, - "5475": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "JUMPI", - "path": "30" - }, - "5476": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "RETURNDATASIZE", - "path": "30" - }, - "5477": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "PUSH1", - "path": "30", - "value": "0x0" - }, - "5479": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "DUP1", - "path": "30" - }, - "5480": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "RETURNDATACOPY", - "path": "30" - }, - "5481": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "RETURNDATASIZE", - "path": "30" - }, - "5482": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "PUSH1", - "path": "30", - "value": "0x0" - }, - "5484": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "REVERT", - "path": "30" - }, - "5485": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "JUMPDEST", - "path": "30" - }, - "5486": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "POP", - "path": "30" - }, - "5487": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "POP", - "path": "30" - }, - "5488": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "POP", - "path": "30" - }, - "5489": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "POP", - "path": "30" - }, - "5490": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "PUSH1", - "path": "30", - "value": "0x40" - }, - "5492": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "MLOAD", - "path": "30" - }, - "5493": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "RETURNDATASIZE", - "path": "30" - }, - "5494": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "PUSH1", - "path": "30", - "value": "0x20" - }, - "5496": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "DUP2", - "path": "30" - }, - "5497": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "LT", - "path": "30" - }, - "5498": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "ISZERO", - "path": "30" - }, - "5499": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "PUSH2", - "path": "30", - "value": "0x1583" - }, - "5502": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "JUMPI", - "path": "30" - }, - "5503": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "PUSH1", - "path": "30", - "value": "0x0" - }, - "5505": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "DUP1", - "path": "30" - }, - "5506": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "REVERT", - "path": "30" - }, - "5507": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "JUMPDEST", - "path": "30" - }, - "5508": { - "op": "POP" - }, - "5509": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "MLOAD", - "path": "30" - }, - "5510": { - "fn": "Transfers.transferIn", - "offset": [894, 930], - "op": "SWAP1", - "path": "30" - }, - "5511": { - "op": "POP" - }, - "5512": { - "fn": "Transfers.transferIn", - "offset": [1041, 1069], - "op": "DUP3", - "path": "30", - "statement": 65 - }, - "5513": { - "fn": "Transfers.transferIn", - "offset": [1041, 1069], - "op": "DUP6", - "path": "30" - }, - "5514": { - "fn": "Transfers.transferIn", - "offset": [1041, 1069], - "op": "ADD", - "path": "30" - }, - "5515": { - "fn": "Transfers.transferIn", - "offset": [1019, 1069], - "op": "DUP2", - "path": "30" - }, - "5516": { - "branch": 115, - "fn": "Transfers.transferIn", - "offset": [1019, 1069], - "op": "EQ", - "path": "30" - }, - "5517": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "PUSH2", - "path": "30", - "value": "0xC79" - }, - "5520": { - "branch": 115, - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "JUMPI", - "path": "30" - }, - "5521": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "PUSH1", - "path": "30", - "value": "0x40" - }, - "5523": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "DUP1", - "path": "30" - }, - "5524": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "MLOAD", - "path": "30" - }, - "5525": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "5529": { - "op": "PUSH1", - "value": "0xE5" - }, - "5531": { - "op": "SHL" - }, - "5532": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "DUP2", - "path": "30" - }, - "5533": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "MSTORE", - "path": "30" - }, - "5534": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "PUSH1", - "path": "30", - "value": "0x20" - }, - "5536": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "PUSH1", - "path": "30", - "value": "0x4" - }, - "5538": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "DUP3", - "path": "30" - }, - "5539": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "ADD", - "path": "30" - }, - "5540": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "MSTORE", - "path": "30" - }, - "5541": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "PUSH1", - "path": "30", - "value": "0x1C" - }, - "5543": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "PUSH1", - "path": "30", - "value": "0x24" - }, - "5545": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "DUP3", - "path": "30" - }, - "5546": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "ADD", - "path": "30" - }, - "5547": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "MSTORE", - "path": "30" - }, - "5548": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "PUSH32", - "path": "30", - "value": "0x494E434F52524543545F414D4F554E545F5452414E5346455252454400000000" - }, - "5581": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "PUSH1", - "path": "30", - "value": "0x44" - }, - "5583": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "DUP3", - "path": "30" - }, - "5584": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "ADD", - "path": "30" - }, - "5585": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "MSTORE", - "path": "30" - }, - "5586": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "SWAP1", - "path": "30" - }, - "5587": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "MLOAD", - "path": "30" - }, - "5588": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "SWAP1", - "path": "30" - }, - "5589": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "DUP2", - "path": "30" - }, - "5590": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "SWAP1", - "path": "30" - }, - "5591": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "SUB", - "path": "30" - }, - "5592": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "PUSH1", - "path": "30", - "value": "0x64" - }, - "5594": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "ADD", - "path": "30" - }, - "5595": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "SWAP1", - "path": "30" - }, - "5596": { - "fn": "Transfers.transferIn", - "offset": [1011, 1102], - "op": "REVERT", - "path": "30" - }, - "5597": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3292, 3851], - "op": "JUMPDEST", - "path": "28" - }, - "5598": { - "offset": [2589, 2606], - "op": "PUSH2", - "path": "28", - "value": "0x15E5" - }, - "5601": { - "offset": [2589, 2604], - "op": "PUSH2", - "path": "28", - "value": "0x136A" - }, - "5604": { - "jump": "i", - "offset": [2589, 2606], - "op": "JUMP", - "path": "28" - }, - "5605": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2589, 2606], - "op": "JUMPDEST", - "path": "28" - }, - "5606": { - "offset": [2581, 2641], - "op": "PUSH2", - "path": "28", - "value": "0x1636" - }, - "5609": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "JUMPI", - "path": "28" - }, - "5610": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "5612": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "DUP1", - "path": "28" - }, - "5613": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "MLOAD", - "path": "28" - }, - "5614": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "5618": { - "op": "PUSH1", - "value": "0xE5" - }, - "5620": { - "op": "SHL" - }, - "5621": { - "offset": [2581, 2641], - "op": "DUP2", - "path": "28" - }, - "5622": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "MSTORE", - "path": "28" - }, - "5623": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "5625": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "5627": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "DUP3", - "path": "28" - }, - "5628": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "ADD", - "path": "28" - }, - "5629": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "MSTORE", - "path": "28" - }, - "5630": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "PUSH1", - "path": "28", - "value": "0x19" - }, - "5632": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "PUSH1", - "path": "28", - "value": "0x24" - }, - "5634": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "DUP3", - "path": "28" - }, - "5635": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "ADD", - "path": "28" - }, - "5636": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "MSTORE", - "path": "28" - }, - "5637": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "PUSH32", - "path": "28", - "value": "0x4C325F544F4B454E5F434F4E54524143545F4E4F545F53455400000000000000" - }, - "5670": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "PUSH1", - "path": "28", - "value": "0x44" - }, - "5672": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "DUP3", - "path": "28" - }, - "5673": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "ADD", - "path": "28" - }, - "5674": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "MSTORE", - "path": "28" - }, - "5675": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "SWAP1", - "path": "28" - }, - "5676": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "MLOAD", - "path": "28" - }, - "5677": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "SWAP1", - "path": "28" - }, - "5678": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "DUP2", - "path": "28" - }, - "5679": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "SWAP1", - "path": "28" - }, - "5680": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "SUB", - "path": "28" - }, - "5681": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "PUSH1", - "path": "28", - "value": "0x64" - }, - "5683": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "ADD", - "path": "28" - }, - "5684": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "SWAP1", - "path": "28" - }, - "5685": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "REVERT", - "path": "28" - }, - "5686": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "JUMPDEST", - "path": "28" - }, - "5687": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3419, 3430], - "op": "DUP1", - "path": "28" - }, - "5688": { - "offset": [2260, 2274], - "op": "DUP1", - "path": "28" - }, - "5689": { - "offset": [2252, 2302], - "op": "PUSH2", - "path": "28", - "value": "0x1683" - }, - "5692": { - "offset": [2252, 2302], - "op": "JUMPI", - "path": "28" - }, - "5693": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "5695": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "DUP1", - "path": "28" - }, - "5696": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "MLOAD", - "path": "28" - }, - "5697": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "5701": { - "op": "PUSH1", - "value": "0xE5" - }, - "5703": { - "op": "SHL" - }, - "5704": { - "offset": [2252, 2302], - "op": "DUP2", - "path": "28" - }, - "5705": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "MSTORE", - "path": "28" - }, - "5706": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "5708": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "5710": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "DUP3", - "path": "28" - }, - "5711": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "ADD", - "path": "28" - }, - "5712": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "MSTORE", - "path": "28" - }, - "5713": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "PUSH1", - "path": "28", - "value": "0x17" - }, - "5715": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "PUSH1", - "path": "28", - "value": "0x24" - }, - "5717": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "DUP3", - "path": "28" - }, - "5718": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "ADD", - "path": "28" - }, - "5719": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "MSTORE", - "path": "28" - }, - "5720": { - "op": "PUSH23", - "value": "0x4C325F414444524553535F4F55545F4F465F52414E4745" - }, - "5744": { - "op": "PUSH1", - "value": "0x48" - }, - "5746": { - "op": "SHL" - }, - "5747": { - "offset": [2252, 2302], - "op": "PUSH1", - "path": "28", - "value": "0x44" - }, - "5749": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "DUP3", - "path": "28" - }, - "5750": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "ADD", - "path": "28" - }, - "5751": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "MSTORE", - "path": "28" - }, - "5752": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "SWAP1", - "path": "28" - }, - "5753": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "MLOAD", - "path": "28" - }, - "5754": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "SWAP1", - "path": "28" - }, - "5755": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "DUP2", - "path": "28" - }, - "5756": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "SWAP1", - "path": "28" - }, - "5757": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "SUB", - "path": "28" - }, - "5758": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "PUSH1", - "path": "28", - "value": "0x64" - }, - "5760": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "ADD", - "path": "28" - }, - "5761": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "SWAP1", - "path": "28" - }, - "5762": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "REVERT", - "path": "28" - }, - "5763": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "JUMPDEST", - "path": "28" - }, - "5764": { - "op": "PUSH1", - "value": "0x1" - }, - "5766": { - "op": "PUSH8", - "value": "0x800000000000011" - }, - "5775": { - "op": "PUSH1", - "value": "0xC0" - }, - "5777": { - "op": "SHL" - }, - "5778": { - "op": "ADD" - }, - "5779": { - "offset": [2320, 2329], - "op": "DUP2", - "path": "28" - }, - "5780": { - "offset": [2320, 2358], - "op": "LT", - "path": "28" - }, - "5781": { - "offset": [2312, 2386], - "op": "PUSH2", - "path": "28", - "value": "0x16DF" - }, - "5784": { - "offset": [2312, 2386], - "op": "JUMPI", - "path": "28" - }, - "5785": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "5787": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "DUP1", - "path": "28" - }, - "5788": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "MLOAD", - "path": "28" - }, - "5789": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "5793": { - "op": "PUSH1", - "value": "0xE5" - }, - "5795": { - "op": "SHL" - }, - "5796": { - "offset": [2312, 2386], - "op": "DUP2", - "path": "28" - }, - "5797": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "MSTORE", - "path": "28" - }, - "5798": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "5800": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "5802": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "DUP3", - "path": "28" - }, - "5803": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "ADD", - "path": "28" - }, - "5804": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "MSTORE", - "path": "28" - }, - "5805": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "PUSH1", - "path": "28", - "value": "0x17" - }, - "5807": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "PUSH1", - "path": "28", - "value": "0x24" - }, - "5809": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "DUP3", - "path": "28" - }, - "5810": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "ADD", - "path": "28" - }, - "5811": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "MSTORE", - "path": "28" - }, - "5812": { - "op": "PUSH23", - "value": "0x4C325F414444524553535F4F55545F4F465F52414E4745" - }, - "5836": { - "op": "PUSH1", - "value": "0x48" - }, - "5838": { - "op": "SHL" - }, - "5839": { - "offset": [2312, 2386], - "op": "PUSH1", - "path": "28", - "value": "0x44" - }, - "5841": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "DUP3", - "path": "28" - }, - "5842": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "ADD", - "path": "28" - }, - "5843": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "MSTORE", - "path": "28" - }, - "5844": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "SWAP1", - "path": "28" - }, - "5845": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "MLOAD", - "path": "28" - }, - "5846": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "SWAP1", - "path": "28" - }, - "5847": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "DUP2", - "path": "28" - }, - "5848": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "SWAP1", - "path": "28" - }, - "5849": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "SUB", - "path": "28" - }, - "5850": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "PUSH1", - "path": "28", - "value": "0x64" - }, - "5852": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "ADD", - "path": "28" - }, - "5853": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "SWAP1", - "path": "28" - }, - "5854": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "REVERT", - "path": "28" - }, - "5855": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "JUMPDEST", - "path": "28" - }, - "5856": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3464, 3476], - "op": "PUSH2", - "path": "28", - "statement": 66, - "value": "0x16E7" - }, - "5859": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3464, 3474], - "op": "PUSH2", - "path": "28", - "value": "0x1DF3" - }, - "5862": { - "fn": "StarknetTokenBridge.sendMessage", - "jump": "i", - "offset": [3464, 3476], - "op": "JUMP", - "path": "28" - }, - "5863": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3464, 3476], - "op": "JUMPDEST", - "path": "28" - }, - "5864": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3454, 3460], - "op": "DUP4", - "path": "28" - }, - "5865": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3454, 3476], - "op": "GT", - "path": "28" - }, - "5866": { - "branch": 110, - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3454, 3476], - "op": "ISZERO", - "path": "28" - }, - "5867": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "PUSH2", - "path": "28", - "value": "0x1725" - }, - "5870": { - "branch": 110, - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "JUMPI", - "path": "28" - }, - "5871": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "5873": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "MLOAD", - "path": "28" - }, - "5874": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "5878": { - "op": "PUSH1", - "value": "0xE5" - }, - "5880": { - "op": "SHL" - }, - "5881": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "DUP2", - "path": "28" - }, - "5882": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "MSTORE", - "path": "28" - }, - "5883": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "5885": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "ADD", - "path": "28" - }, - "5886": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "DUP1", - "path": "28" - }, - "5887": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "DUP1", - "path": "28" - }, - "5888": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "5890": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "ADD", - "path": "28" - }, - "5891": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "DUP3", - "path": "28" - }, - "5892": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "DUP2", - "path": "28" - }, - "5893": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "SUB", - "path": "28" - }, - "5894": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "DUP3", - "path": "28" - }, - "5895": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "MSTORE", - "path": "28" - }, - "5896": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "PUSH1", - "path": "28", - "value": "0x24" - }, - "5898": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "DUP2", - "path": "28" - }, - "5899": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "MSTORE", - "path": "28" - }, - "5900": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "5902": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "ADD", - "path": "28" - }, - "5903": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "DUP1", - "path": "28" - }, - "5904": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "PUSH2", - "path": "28", - "value": "0x1EBB" - }, - "5907": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "PUSH1", - "path": "28", - "value": "0x24" - }, - "5909": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "SWAP2", - "path": "28" - }, - "5910": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "CODECOPY", - "path": "28" - }, - "5911": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "5913": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "ADD", - "path": "28" - }, - "5914": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "SWAP2", - "path": "28" - }, - "5915": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "POP", - "path": "28" - }, - "5916": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "POP", - "path": "28" - }, - "5917": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "5919": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "MLOAD", - "path": "28" - }, - "5920": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "DUP1", - "path": "28" - }, - "5921": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "SWAP2", - "path": "28" - }, - "5922": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "SUB", - "path": "28" - }, - "5923": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "SWAP1", - "path": "28" - }, - "5924": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "REVERT", - "path": "28" - }, - "5925": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "JUMPDEST", - "path": "28" - }, - "5926": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "PUSH1", - "path": "28", - "statement": 67, - "value": "0x40" - }, - "5928": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "DUP1", - "path": "28" - }, - "5929": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "MLOAD", - "path": "28" - }, - "5930": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3543, 3553], - "op": "CALLER", - "path": "28" - }, - "5931": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "DUP2", - "path": "28" - }, - "5932": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "MSTORE", - "path": "28" - }, - "5933": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "5935": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "DUP2", - "path": "28" - }, - "5936": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "ADD", - "path": "28" - }, - "5937": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "DUP6", - "path": "28" - }, - "5938": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "SWAP1", - "path": "28" - }, - "5939": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "MSTORE", - "path": "28" - }, - "5940": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "DUP1", - "path": "28" - }, - "5941": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "DUP3", - "path": "28" - }, - "5942": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "ADD", - "path": "28" - }, - "5943": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "DUP5", - "path": "28" - }, - "5944": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "SWAP1", - "path": "28" - }, - "5945": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "MSTORE", - "path": "28" - }, - "5946": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "SWAP1", - "path": "28" - }, - "5947": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "MLOAD", - "path": "28" - }, - "5948": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "PUSH32", - "path": "28", - "value": "0x9DBB0E7DDA3E09710CE75B801ADDC87CF9D9C6C581641B3275FCA409AD086C62" - }, - "5981": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "SWAP2", - "path": "28" - }, - "5982": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "DUP2", - "path": "28" - }, - "5983": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "SWAP1", - "path": "28" - }, - "5984": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "SUB", - "path": "28" - }, - "5985": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "PUSH1", - "path": "28", - "value": "0x60" - }, - "5987": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "ADD", - "path": "28" - }, - "5988": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "SWAP1", - "path": "28" - }, - "5989": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "LOG1", - "path": "28" - }, - "5990": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "5992": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "DUP1", - "path": "28" - }, - "5993": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "MLOAD", - "path": "28" - }, - "5994": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3627, 3628], - "op": "PUSH1", - "path": "28", - "value": "0x3" - }, - "5996": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "DUP1", - "path": "28" - }, - "5997": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "DUP3", - "path": "28" - }, - "5998": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "MSTORE", - "path": "28" - }, - "5999": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "PUSH1", - "path": "28", - "value": "0x80" - }, - "6001": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "DUP3", - "path": "28" - }, - "6002": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "ADD", - "path": "28" - }, - "6003": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "SWAP1", - "path": "28" - }, - "6004": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "SWAP3", - "path": "28" - }, - "6005": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "MSTORE", - "path": "28" - }, - "6006": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3586, 3610], - "op": "PUSH1", - "path": "28", - "value": "0x60" - }, - "6008": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3586, 3610], - "op": "SWAP2", - "path": "28" - }, - "6009": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "6011": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "DUP3", - "path": "28" - }, - "6012": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "ADD", - "path": "28" - }, - "6013": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3586, 3610], - "op": "DUP4", - "path": "28" - }, - "6014": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3586, 3610], - "op": "DUP1", - "path": "28" - }, - "6015": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "CALLDATASIZE", - "path": "28" - }, - "6016": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "DUP4", - "path": "28" - }, - "6017": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "CALLDATACOPY", - "path": "28" - }, - "6018": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "ADD", - "path": "28" - }, - "6019": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "SWAP1", - "path": "28" - }, - "6020": { - "op": "POP" - }, - "6021": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "POP", - "path": "28" - }, - "6022": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3586, 3629], - "op": "SWAP1", - "path": "28" - }, - "6023": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3586, 3629], - "op": "POP", - "path": "28" - }, - "6024": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3652, 3663], - "op": "DUP3", - "path": "28", - "statement": 68 - }, - "6025": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3646], - "op": "DUP2", - "path": "28" - }, - "6026": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3647, 3648], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "6028": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "DUP2", - "path": "28" - }, - "6029": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "MLOAD", - "path": "28" - }, - "6030": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "DUP2", - "path": "28" - }, - "6031": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "LT", - "path": "28" - }, - "6032": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "PUSH2", - "path": "28", - "value": "0x1795" - }, - "6035": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "JUMPI", - "path": "28" - }, - "6036": { - "dev": "Index out of range", - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "INVALID", - "path": "28" - }, - "6037": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "JUMPDEST", - "path": "28" - }, - "6038": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "6040": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "SWAP1", - "path": "28" - }, - "6041": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "DUP2", - "path": "28" - }, - "6042": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "MUL", - "path": "28" - }, - "6043": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "SWAP2", - "path": "28" - }, - "6044": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "SWAP1", - "path": "28" - }, - "6045": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "SWAP2", - "path": "28" - }, - "6046": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "ADD", - "path": "28" - }, - "6047": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "ADD", - "path": "28" - }, - "6048": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3663], - "op": "MSTORE", - "path": "28" - }, - "6049": { - "op": "PUSH1", - "value": "0x1" - }, - "6051": { - "op": "PUSH1", - "value": "0x80" - }, - "6053": { - "op": "SHL" - }, - "6054": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3686, 3692], - "op": "DUP5", - "path": "28", - "statement": 69 - }, - "6055": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3686, 3712], - "op": "MOD", - "path": "28" - }, - "6056": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3680], - "op": "DUP2", - "path": "28" - }, - "6057": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3681, 3682], - "op": "PUSH1", - "path": "28", - "value": "0x1" - }, - "6059": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "DUP2", - "path": "28" - }, - "6060": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "MLOAD", - "path": "28" - }, - "6061": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "DUP2", - "path": "28" - }, - "6062": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "LT", - "path": "28" - }, - "6063": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "PUSH2", - "path": "28", - "value": "0x17B4" - }, - "6066": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "JUMPI", - "path": "28" - }, - "6067": { - "dev": "Index out of range", - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "INVALID", - "path": "28" - }, - "6068": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "JUMPDEST", - "path": "28" - }, - "6069": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "6071": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "SWAP1", - "path": "28" - }, - "6072": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "DUP2", - "path": "28" - }, - "6073": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "MUL", - "path": "28" - }, - "6074": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "SWAP2", - "path": "28" - }, - "6075": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "SWAP1", - "path": "28" - }, - "6076": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "SWAP2", - "path": "28" - }, - "6077": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "ADD", - "path": "28" - }, - "6078": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "ADD", - "path": "28" - }, - "6079": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3712], - "op": "MSTORE", - "path": "28" - }, - "6080": { - "op": "PUSH1", - "value": "0x1" - }, - "6082": { - "op": "PUSH1", - "value": "0x80" - }, - "6084": { - "op": "SHL" - }, - "6085": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3735, 3741], - "op": "DUP5", - "path": "28", - "statement": 70 - }, - "6086": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3735, 3761], - "op": "DIV", - "path": "28" - }, - "6087": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3729], - "op": "DUP2", - "path": "28" - }, - "6088": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3730, 3731], - "op": "PUSH1", - "path": "28", - "value": "0x2" - }, - "6090": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3732], - "op": "DUP2", - "path": "28" - }, - "6091": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3732], - "op": "MLOAD", - "path": "28" - }, - "6092": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3732], - "op": "DUP2", - "path": "28" - }, - "6093": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3732], - "op": "LT", - "path": "28" - }, - "6094": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3732], - "op": "PUSH2", - "path": "28", - "value": "0x17D3" - }, - "6097": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3732], - "op": "JUMPI", - "path": "28" - }, - "6098": { - "dev": "Index out of range", - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3732], - "op": "INVALID", - "path": "28" - }, - "6099": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3732], - "op": "JUMPDEST", - "path": "28" - }, - "6100": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3732], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "6102": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3732], - "op": "MUL", - "path": "28" - }, - "6103": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3732], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "6105": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3732], - "op": "ADD", - "path": "28" - }, - "6106": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3732], - "op": "ADD", - "path": "28" - }, - "6107": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3761], - "op": "DUP2", - "path": "28" - }, - "6108": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3761], - "op": "DUP2", - "path": "28" - }, - "6109": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3761], - "op": "MSTORE", - "path": "28" - }, - "6110": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3761], - "op": "POP", - "path": "28" - }, - "6111": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3761], - "op": "POP", - "path": "28" - }, - "6112": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3790], - "op": "PUSH2", - "path": "28", - "statement": 71, - "value": "0x17E7" - }, - "6115": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3788], - "op": "PUSH2", - "path": "28", - "value": "0x1962" - }, - "6118": { - "fn": "StarknetTokenBridge.sendMessage", - "jump": "i", - "offset": [3771, 3790], - "op": "JUMP", - "path": "28" - }, - "6119": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3790], - "op": "JUMPDEST", - "path": "28" - }, - "6120": { - "op": "PUSH1", - "value": "0x1" - }, - "6122": { - "op": "PUSH1", - "value": "0x1" - }, - "6124": { - "op": "PUSH1", - "value": "0xA0" - }, - "6126": { - "op": "SHL" - }, - "6127": { - "op": "SUB" - }, - "6128": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3806], - "op": "AND", - "path": "28" - }, - "6129": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3806], - "op": "PUSH4", - "path": "28", - "value": "0x3E3AA6C5" - }, - "6134": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3807, 3824], - "op": "PUSH2", - "path": "28", - "value": "0x17FD" - }, - "6137": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3807, 3822], - "op": "PUSH2", - "path": "28", - "value": "0x136A" - }, - "6140": { - "fn": "StarknetTokenBridge.sendMessage", - "jump": "i", - "offset": [3807, 3824], - "op": "JUMP", - "path": "28" - }, - "6141": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3807, 3824], - "op": "JUMPDEST", - "path": "28" - }, - "6142": { - "offset": [2016, 2092], - "op": "PUSH32", - "path": "28", - "value": "0x2D757788A8D8D6F21D1CD40BCE38A8222D70654214E96FF95D8086E684FBEE5" - }, - "6175": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3836, 3843], - "op": "DUP5", - "path": "28" - }, - "6176": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "6178": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "MLOAD", - "path": "28" - }, - "6179": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP5", - "path": "28" - }, - "6180": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH4", - "path": "28", - "value": "0xFFFFFFFF" - }, - "6185": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "AND", - "path": "28" - }, - "6186": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0xE0" - }, - "6188": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "SHL", - "path": "28" - }, - "6189": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP2", - "path": "28" - }, - "6190": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "MSTORE", - "path": "28" - }, - "6191": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "6193": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ADD", - "path": "28" - }, - "6194": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP1", - "path": "28" - }, - "6195": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP5", - "path": "28" - }, - "6196": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP2", - "path": "28" - }, - "6197": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "MSTORE", - "path": "28" - }, - "6198": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "6200": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ADD", - "path": "28" - }, - "6201": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP4", - "path": "28" - }, - "6202": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP2", - "path": "28" - }, - "6203": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "MSTORE", - "path": "28" - }, - "6204": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "6206": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ADD", - "path": "28" - }, - "6207": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP1", - "path": "28" - }, - "6208": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "6210": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ADD", - "path": "28" - }, - "6211": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP3", - "path": "28" - }, - "6212": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP2", - "path": "28" - }, - "6213": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "SUB", - "path": "28" - }, - "6214": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP3", - "path": "28" - }, - "6215": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "MSTORE", - "path": "28" - }, - "6216": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP4", - "path": "28" - }, - "6217": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP2", - "path": "28" - }, - "6218": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP2", - "path": "28" - }, - "6219": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "MLOAD", - "path": "28" - }, - "6220": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP2", - "path": "28" - }, - "6221": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "MSTORE", - "path": "28" - }, - "6222": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "6224": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ADD", - "path": "28" - }, - "6225": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "SWAP2", - "path": "28" - }, - "6226": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "6227": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP1", - "path": "28" - }, - "6228": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "MLOAD", - "path": "28" - }, - "6229": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "SWAP1", - "path": "28" - }, - "6230": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "6232": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ADD", - "path": "28" - }, - "6233": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "SWAP1", - "path": "28" - }, - "6234": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "6236": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "MUL", - "path": "28" - }, - "6237": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP1", - "path": "28" - }, - "6238": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP4", - "path": "28" - }, - "6239": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP4", - "path": "28" - }, - "6240": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "6242": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "JUMPDEST", - "path": "28" - }, - "6243": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP4", - "path": "28" - }, - "6244": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP2", - "path": "28" - }, - "6245": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "LT", - "path": "28" - }, - "6246": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ISZERO", - "path": "28" - }, - "6247": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH2", - "path": "28", - "value": "0x187A" - }, - "6250": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "JUMPI", - "path": "28" - }, - "6251": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP2", - "path": "28" - }, - "6252": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP2", - "path": "28" - }, - "6253": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ADD", - "path": "28" - }, - "6254": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "MLOAD", - "path": "28" - }, - "6255": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP4", - "path": "28" - }, - "6256": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP3", - "path": "28" - }, - "6257": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ADD", - "path": "28" - }, - "6258": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "MSTORE", - "path": "28" - }, - "6259": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "6261": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ADD", - "path": "28" - }, - "6262": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH2", - "path": "28", - "value": "0x1862" - }, - "6265": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "JUMP", - "path": "28" - }, - "6266": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "JUMPDEST", - "path": "28" - }, - "6267": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "6268": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "6269": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "6270": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "6271": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "SWAP1", - "path": "28" - }, - "6272": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "6273": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ADD", - "path": "28" - }, - "6274": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "SWAP5", - "path": "28" - }, - "6275": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "6276": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "6277": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "6278": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "6279": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "6280": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "6282": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "6284": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "MLOAD", - "path": "28" - }, - "6285": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP1", - "path": "28" - }, - "6286": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP4", - "path": "28" - }, - "6287": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "SUB", - "path": "28" - }, - "6288": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP2", - "path": "28" - }, - "6289": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "6291": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP8", - "path": "28" - }, - "6292": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP1", - "path": "28" - }, - "6293": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "EXTCODESIZE", - "path": "28" - }, - "6294": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ISZERO", - "path": "28" - }, - "6295": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP1", - "path": "28" - }, - "6296": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ISZERO", - "path": "28" - }, - "6297": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH2", - "path": "28", - "value": "0x18A1" - }, - "6300": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "JUMPI", - "path": "28" - }, - "6301": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "6303": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP1", - "path": "28" - }, - "6304": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "REVERT", - "path": "28" - }, - "6305": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "JUMPDEST", - "path": "28" - }, - "6306": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "6307": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "GAS", - "path": "28" - }, - "6308": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "CALL", - "path": "28" - }, - "6309": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ISZERO", - "path": "28" - }, - "6310": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP1", - "path": "28" - }, - "6311": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ISZERO", - "path": "28" - }, - "6312": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH2", - "path": "28", - "value": "0x18B5" - }, - "6315": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "JUMPI", - "path": "28" - }, - "6316": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "RETURNDATASIZE", - "path": "28" - }, - "6317": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "6319": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP1", - "path": "28" - }, - "6320": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "RETURNDATACOPY", - "path": "28" - }, - "6321": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "RETURNDATASIZE", - "path": "28" - }, - "6322": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "6324": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "REVERT", - "path": "28" - }, - "6325": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "JUMPDEST", - "path": "28" - }, - "6326": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "6327": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "6328": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "6329": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "6330": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "6332": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "MLOAD", - "path": "28" - }, - "6333": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "RETURNDATASIZE", - "path": "28" - }, - "6334": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "6336": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP2", - "path": "28" - }, - "6337": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "LT", - "path": "28" - }, - "6338": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ISZERO", - "path": "28" - }, - "6339": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH2", - "path": "28", - "value": "0xF00" - }, - "6342": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "JUMPI", - "path": "28" - }, - "6343": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "6345": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP1", - "path": "28" - }, - "6346": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "REVERT", - "path": "28" - }, - "6347": { - "fn": "Governance.cancelNomination", - "offset": [2118, 2326], - "op": "JUMPDEST", - "path": "1" - }, - "6348": { - "offset": [434, 456], - "op": "PUSH2", - "path": "8", - "value": "0x18D4" - }, - "6351": { - "offset": [445, 455], - "op": "CALLER", - "path": "8" - }, - "6352": { - "offset": [434, 444], - "op": "PUSH2", - "path": "8", - "value": "0xC82" - }, - "6355": { - "jump": "i", - "offset": [434, 456], - "op": "JUMP", - "path": "8" - }, - "6356": { - "branch": 99, - "fn": "Governance.cancelNomination", - "offset": [434, 456], - "op": "JUMPDEST", - "path": "8" - }, - "6357": { - "offset": [426, 476], - "op": "PUSH2", - "path": "8", - "value": "0x1917" - }, - "6360": { - "branch": 99, - "offset": [426, 476], - "op": "JUMPI", - "path": "8" - }, - "6361": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x40" - }, - "6363": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "DUP1", - "path": "8" - }, - "6364": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "MLOAD", - "path": "8" - }, - "6365": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "6369": { - "op": "PUSH1", - "value": "0xE5" - }, - "6371": { - "op": "SHL" - }, - "6372": { - "offset": [426, 476], - "op": "DUP2", - "path": "8" - }, - "6373": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "6374": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x20" - }, - "6376": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x4" - }, - "6378": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "6379": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "6380": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "6381": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0xF" - }, - "6383": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x24" - }, - "6385": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "6386": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "6387": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "6388": { - "op": "PUSH15", - "value": "0x4F4E4C595F474F5645524E414E4345" - }, - "6404": { - "op": "PUSH1", - "value": "0x88" - }, - "6406": { - "op": "SHL" - }, - "6407": { - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x44" - }, - "6409": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "6410": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "6411": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "6412": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "6413": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "MLOAD", - "path": "8" - }, - "6414": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "6415": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "DUP2", - "path": "8" - }, - "6416": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "6417": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "SUB", - "path": "8" - }, - "6418": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x64" - }, - "6420": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "6421": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "6422": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "REVERT", - "path": "8" - }, - "6423": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "JUMPDEST", - "path": "8" - }, - "6424": { - "fn": "Governance.cancelNomination", - "offset": [2180, 2212], - "op": "PUSH1", - "path": "1", - "value": "0x0" - }, - "6426": { - "fn": "Governance.cancelNomination", - "offset": [2215, 2234], - "op": "PUSH2", - "path": "1", - "value": "0x1921" - }, - "6429": { - "fn": "Governance.cancelNomination", - "offset": [2215, 2232], - "op": "PUSH2", - "path": "1", - "value": "0x1BAD" - }, - "6432": { - "fn": "Governance.cancelNomination", - "jump": "i", - "offset": [2215, 2234], - "op": "JUMP", - "path": "1" - }, - "6433": { - "fn": "Governance.cancelNomination", - "offset": [2215, 2234], - "op": "JUMPDEST", - "path": "1" - }, - "6434": { - "fn": "Governance.cancelNomination", - "offset": [2244, 2265], - "op": "PUSH1", - "path": "1", - "statement": 72, - "value": "0x1" - }, - "6436": { - "fn": "Governance.cancelNomination", - "offset": [2244, 2265], - "op": "DUP2", - "path": "1" - }, - "6437": { - "fn": "Governance.cancelNomination", - "offset": [2244, 2265], - "op": "ADD", - "path": "1" - }, - "6438": { - "fn": "Governance.cancelNomination", - "offset": [2244, 2280], - "op": "DUP1", - "path": "1" - }, - "6439": { - "fn": "Governance.cancelNomination", - "offset": [2244, 2280], - "op": "SLOAD", - "path": "1" - }, - "6440": { - "op": "PUSH1", - "value": "0x1" - }, - "6442": { - "op": "PUSH1", - "value": "0x1" - }, - "6444": { - "op": "PUSH1", - "value": "0xA0" - }, - "6446": { - "op": "SHL" - }, - "6447": { - "op": "SUB" - }, - "6448": { - "op": "NOT" - }, - "6449": { - "fn": "Governance.cancelNomination", - "offset": [2244, 2280], - "op": "AND", - "path": "1" - }, - "6450": { - "fn": "Governance.cancelNomination", - "offset": [2244, 2280], - "op": "SWAP1", - "path": "1" - }, - "6451": { - "fn": "Governance.cancelNomination", - "offset": [2244, 2280], - "op": "SSTORE", - "path": "1" - }, - "6452": { - "fn": "Governance.cancelNomination", - "offset": [2295, 2319], - "op": "PUSH1", - "path": "1", - "statement": 73, - "value": "0x40" - }, - "6454": { - "fn": "Governance.cancelNomination", - "offset": [2295, 2319], - "op": "MLOAD", - "path": "1" - }, - "6455": { - "fn": "Governance.cancelNomination", - "offset": [2180, 2234], - "op": "SWAP1", - "path": "1" - }, - "6456": { - "fn": "Governance.cancelNomination", - "offset": [2180, 2234], - "op": "SWAP2", - "path": "1" - }, - "6457": { - "op": "POP" - }, - "6458": { - "fn": "Governance.cancelNomination", - "offset": [2295, 2319], - "op": "PUSH32", - "path": "1", - "value": "0x7A8DC7DD7FFFB43C4807438FA62729225156941E641FD877938F4EDADE3429F5" - }, - "6491": { - "fn": "Governance.cancelNomination", - "offset": [2295, 2319], - "op": "SWAP1", - "path": "1" - }, - "6492": { - "fn": "Governance.cancelNomination", - "offset": [2276, 2279], - "op": "PUSH1", - "path": "1", - "value": "0x0" - }, - "6494": { - "fn": "Governance.cancelNomination", - "offset": [2276, 2279], - "op": "SWAP1", - "path": "1" - }, - "6495": { - "fn": "Governance.cancelNomination", - "offset": [2295, 2319], - "op": "LOG1", - "path": "1" - }, - "6496": { - "offset": [486, 487], - "op": "POP", - "path": "8" - }, - "6497": { - "fn": "Governance.cancelNomination", - "jump": "o", - "offset": [2118, 2326], - "op": "JUMP", - "path": "1" - }, - "6498": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1287, 1455], - "op": "JUMPDEST", - "path": "29" - }, - "6499": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1339, 1357], - "op": "PUSH1", - "path": "29", - "value": "0x0" - }, - "6501": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1395, 1447], - "op": "PUSH2", - "path": "29", - "statement": 74, - "value": "0xA3C" - }, - "6504": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "6506": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "MLOAD", - "path": "29" - }, - "6507": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "DUP1", - "path": "29" - }, - "6508": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "PUSH1", - "path": "29", - "value": "0x60" - }, - "6510": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "ADD", - "path": "29" - }, - "6511": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "6513": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "MSTORE", - "path": "29" - }, - "6514": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "DUP1", - "path": "29" - }, - "6515": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "PUSH1", - "path": "29", - "value": "0x28" - }, - "6517": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "DUP2", - "path": "29" - }, - "6518": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "MSTORE", - "path": "29" - }, - "6519": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "PUSH1", - "path": "29", - "value": "0x20" - }, - "6521": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "ADD", - "path": "29" - }, - "6522": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "PUSH2", - "path": "29", - "value": "0x1E93" - }, - "6525": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "PUSH1", - "path": "29", - "value": "0x28" - }, - "6527": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "SWAP2", - "path": "29" - }, - "6528": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "CODECOPY", - "path": "29" - }, - "6529": { - "fn": "NamedStorage.getAddressValue", - "offset": [1752, 1964], - "op": "JUMPDEST", - "path": "0" - }, - "6530": { - "fn": "NamedStorage.getAddressValue", - "offset": [1820, 1834], - "op": "PUSH1", - "path": "0", - "value": "0x0" - }, - "6532": { - "fn": "NamedStorage.getAddressValue", - "offset": [1846, 1858], - "op": "DUP1", - "path": "0" - }, - "6533": { - "fn": "NamedStorage.getAddressValue", - "offset": [1888, 1892], - "op": "DUP3", - "path": "0" - }, - "6534": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "PUSH1", - "path": "0", - "value": "0x40" - }, - "6536": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "MLOAD", - "path": "0" - }, - "6537": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "6539": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "ADD", - "path": "0" - }, - "6540": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "DUP1", - "path": "0" - }, - "6541": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "DUP3", - "path": "0" - }, - "6542": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "DUP1", - "path": "0" - }, - "6543": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "MLOAD", - "path": "0" - }, - "6544": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "SWAP1", - "path": "0" - }, - "6545": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "6547": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "ADD", - "path": "0" - }, - "6548": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "SWAP1", - "path": "0" - }, - "6549": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "DUP1", - "path": "0" - }, - "6550": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "DUP4", - "path": "0" - }, - "6551": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "DUP4", - "path": "0" - }, - "6552": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "JUMPDEST", - "path": "0" - }, - "6553": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "6555": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "DUP4", - "path": "0" - }, - "6556": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "LT", - "path": "0" - }, - "6557": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "PUSH2", - "path": "0", - "value": "0x19B7" - }, - "6560": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "JUMPI", - "path": "0" - }, - "6561": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "DUP1", - "path": "0" - }, - "6562": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "MLOAD", - "path": "0" - }, - "6563": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "DUP3", - "path": "0" - }, - "6564": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "MSTORE", - "path": "0" - }, - "6565": { - "op": "PUSH1", - "value": "0x1F" - }, - "6567": { - "op": "NOT" - }, - "6568": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "SWAP1", - "path": "0" - }, - "6569": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "SWAP3", - "path": "0" - }, - "6570": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "ADD", - "path": "0" - }, - "6571": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "SWAP2", - "path": "0" - }, - "6572": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "6574": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "SWAP2", - "path": "0" - }, - "6575": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "DUP3", - "path": "0" - }, - "6576": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "ADD", - "path": "0" - }, - "6577": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "SWAP2", - "path": "0" - }, - "6578": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "ADD", - "path": "0" - }, - "6579": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "PUSH2", - "path": "0", - "value": "0x1998" - }, - "6582": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "JUMP", - "path": "0" - }, - "6583": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "JUMPDEST", - "path": "0" - }, - "6584": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "PUSH1", - "path": "0", - "value": "0x1" - }, - "6586": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "DUP4", - "path": "0" - }, - "6587": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "6589": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "SUB", - "path": "0" - }, - "6590": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "PUSH2", - "path": "0", - "value": "0x100" - }, - "6593": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "EXP", - "path": "0" - }, - "6594": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "SUB", - "path": "0" - }, - "6595": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "DUP1", - "path": "0" - }, - "6596": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "NOT", - "path": "0" - }, - "6597": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "DUP3", - "path": "0" - }, - "6598": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "MLOAD", - "path": "0" - }, - "6599": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "AND", - "path": "0" - }, - "6600": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "DUP2", - "path": "0" - }, - "6601": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "DUP5", - "path": "0" - }, - "6602": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "MLOAD", - "path": "0" - }, - "6603": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "AND", - "path": "0" - }, - "6604": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "DUP1", - "path": "0" - }, - "6605": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "DUP3", - "path": "0" - }, - "6606": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "OR", - "path": "0" - }, - "6607": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "DUP6", - "path": "0" - }, - "6608": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "MSTORE", - "path": "0" - }, - "6609": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "POP", - "path": "0" - }, - "6610": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "POP", - "path": "0" - }, - "6611": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "POP", - "path": "0" - }, - "6612": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "POP", - "path": "0" - }, - "6613": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "POP", - "path": "0" - }, - "6614": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "POP", - "path": "0" - }, - "6615": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "SWAP1", - "path": "0" - }, - "6616": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "POP", - "path": "0" - }, - "6617": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "ADD", - "path": "0" - }, - "6618": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "SWAP2", - "path": "0" - }, - "6619": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "POP", - "path": "0" - }, - "6620": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "POP", - "path": "0" - }, - "6621": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "PUSH1", - "path": "0", - "value": "0x40" - }, - "6623": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "MLOAD", - "path": "0" - }, - "6624": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "6626": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "DUP2", - "path": "0" - }, - "6627": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "DUP4", - "path": "0" - }, - "6628": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "SUB", - "path": "0" - }, - "6629": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "SUB", - "path": "0" - }, - "6630": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "DUP2", - "path": "0" - }, - "6631": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "MSTORE", - "path": "0" - }, - "6632": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "SWAP1", - "path": "0" - }, - "6633": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "PUSH1", - "path": "0", - "value": "0x40" - }, - "6635": { - "fn": "NamedStorage.getAddressValue", - "offset": [1871, 1893], - "op": "MSTORE", - "path": "0" - }, - "6636": { - "fn": "NamedStorage.getAddressValue", - "offset": [1861, 1894], - "op": "DUP1", - "path": "0" - }, - "6637": { - "fn": "NamedStorage.getAddressValue", - "offset": [1861, 1894], - "op": "MLOAD", - "path": "0" - }, - "6638": { - "fn": "NamedStorage.getAddressValue", - "offset": [1861, 1894], - "op": "SWAP1", - "path": "0" - }, - "6639": { - "fn": "NamedStorage.getAddressValue", - "offset": [1861, 1894], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "6641": { - "fn": "NamedStorage.getAddressValue", - "offset": [1861, 1894], - "op": "ADD", - "path": "0" - }, - "6642": { - "fn": "NamedStorage.getAddressValue", - "offset": [1861, 1894], - "op": "KECCAK256", - "path": "0" - }, - "6643": { - "fn": "NamedStorage.getAddressValue", - "offset": [1846, 1894], - "op": "SWAP1", - "path": "0" - }, - "6644": { - "fn": "NamedStorage.getAddressValue", - "offset": [1846, 1894], - "op": "POP", - "path": "0" - }, - "6645": { - "fn": "NamedStorage.getAddressValue", - "offset": [1943, 1947], - "op": "DUP1", - "path": "0" - }, - "6646": { - "fn": "NamedStorage.getAddressValue", - "offset": [1937, 1948], - "op": "SLOAD", - "path": "0" - }, - "6647": { - "fn": "NamedStorage.getAddressValue", - "offset": [1927, 1948], - "op": "SWAP2", - "path": "0" - }, - "6648": { - "fn": "NamedStorage.getAddressValue", - "offset": [1927, 1948], - "op": "POP", - "path": "0" - }, - "6649": { - "fn": "NamedStorage.getAddressValue", - "offset": [1913, 1958], - "op": "POP", - "path": "0" - }, - "6650": { - "fn": "NamedStorage.getAddressValue", - "offset": [1913, 1958], - "op": "SWAP2", - "path": "0" - }, - "6651": { - "fn": "NamedStorage.getAddressValue", - "offset": [1913, 1958], - "op": "SWAP1", - "path": "0" - }, - "6652": { - "fn": "NamedStorage.getAddressValue", - "offset": [1913, 1958], - "op": "POP", - "path": "0" - }, - "6653": { - "fn": "NamedStorage.getAddressValue", - "jump": "o", - "offset": [1913, 1958], - "op": "JUMP", - "path": "0" - }, - "6654": { - "fn": "Addresses.safeTokenContractCall", - "offset": [784, 1236], - "op": "JUMPDEST", - "path": "11" - }, - "6655": { - "fn": "Addresses.safeTokenContractCall", - "offset": [887, 911], - "op": "PUSH2", - "path": "11", - "statement": 75, - "value": "0x1A07" - }, - "6658": { - "fn": "Addresses.safeTokenContractCall", - "offset": [898, 910], - "op": "DUP3", - "path": "11" - }, - "6659": { - "fn": "Addresses.safeTokenContractCall", - "offset": [887, 897], - "op": "PUSH2", - "path": "11", - "value": "0x1C5C" - }, - "6662": { - "fn": "Addresses.safeTokenContractCall", - "jump": "i", - "offset": [887, 911], - "op": "JUMP", - "path": "11" - }, - "6663": { - "branch": 88, - "fn": "Addresses.safeTokenContractCall", - "offset": [887, 911], - "op": "JUMPDEST", - "path": "11" - }, - "6664": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "PUSH2", - "path": "11", - "value": "0x1A4C" - }, - "6667": { - "branch": 88, - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "JUMPI", - "path": "11" - }, - "6668": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "PUSH1", - "path": "11", - "value": "0x40" - }, - "6670": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "DUP1", - "path": "11" - }, - "6671": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "MLOAD", - "path": "11" - }, - "6672": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "6676": { - "op": "PUSH1", - "value": "0xE5" - }, - "6678": { - "op": "SHL" - }, - "6679": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "DUP2", - "path": "11" - }, - "6680": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "MSTORE", - "path": "11" - }, - "6681": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "PUSH1", - "path": "11", - "value": "0x20" - }, - "6683": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "PUSH1", - "path": "11", - "value": "0x4" - }, - "6685": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "DUP3", - "path": "11" - }, - "6686": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "ADD", - "path": "11" - }, - "6687": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "MSTORE", - "path": "11" - }, - "6688": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "PUSH1", - "path": "11", - "value": "0x11" - }, - "6690": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "PUSH1", - "path": "11", - "value": "0x24" - }, - "6692": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "DUP3", - "path": "11" - }, - "6693": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "ADD", - "path": "11" - }, - "6694": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "MSTORE", - "path": "11" - }, - "6695": { - "op": "PUSH17", - "value": "0x4241445F544F4B454E5F41444452455353" - }, - "6713": { - "op": "PUSH1", - "value": "0x78" - }, - "6715": { - "op": "SHL" - }, - "6716": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "PUSH1", - "path": "11", - "value": "0x44" - }, - "6718": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "DUP3", - "path": "11" - }, - "6719": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "ADD", - "path": "11" - }, - "6720": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "MSTORE", - "path": "11" - }, - "6721": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "SWAP1", - "path": "11" - }, - "6722": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "MLOAD", - "path": "11" - }, - "6723": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "SWAP1", - "path": "11" - }, - "6724": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "DUP2", - "path": "11" - }, - "6725": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "SWAP1", - "path": "11" - }, - "6726": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "SUB", - "path": "11" - }, - "6727": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "PUSH1", - "path": "11", - "value": "0x64" - }, - "6729": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "ADD", - "path": "11" - }, - "6730": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "SWAP1", - "path": "11" - }, - "6731": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "REVERT", - "path": "11" - }, - "6732": { - "fn": "Addresses.safeTokenContractCall", - "offset": [879, 933], - "op": "JUMPDEST", - "path": "11" - }, - "6733": { - "fn": "Addresses.safeTokenContractCall", - "offset": [988, 1000], - "op": "PUSH1", - "path": "11", - "value": "0x0" - }, - "6735": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1002, 1025], - "op": "PUSH1", - "path": "11", - "value": "0x60" - }, - "6737": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1041], - "op": "DUP4", - "path": "11" - }, - "6738": { - "op": "PUSH1", - "value": "0x1" - }, - "6740": { - "op": "PUSH1", - "value": "0x1" - }, - "6742": { - "op": "PUSH1", - "value": "0xA0" - }, - "6744": { - "op": "SHL" - }, - "6745": { - "op": "SUB" - }, - "6746": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1046], - "op": "AND", - "path": "11" - }, - "6747": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1047, 1055], - "op": "DUP4", - "path": "11" - }, - "6748": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "PUSH1", - "path": "11", - "value": "0x40" - }, - "6750": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "MLOAD", - "path": "11" - }, - "6751": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "DUP1", - "path": "11" - }, - "6752": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "DUP3", - "path": "11" - }, - "6753": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "DUP1", - "path": "11" - }, - "6754": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "MLOAD", - "path": "11" - }, - "6755": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "SWAP1", - "path": "11" - }, - "6756": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "PUSH1", - "path": "11", - "value": "0x20" - }, - "6758": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "ADD", - "path": "11" - }, - "6759": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "SWAP1", - "path": "11" - }, - "6760": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "DUP1", - "path": "11" - }, - "6761": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "DUP4", - "path": "11" - }, - "6762": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "DUP4", - "path": "11" - }, - "6763": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "JUMPDEST", - "path": "11" - }, - "6764": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "PUSH1", - "path": "11", - "value": "0x20" - }, - "6766": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "DUP4", - "path": "11" - }, - "6767": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "LT", - "path": "11" - }, - "6768": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "PUSH2", - "path": "11", - "value": "0x1A8A" - }, - "6771": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "JUMPI", - "path": "11" - }, - "6772": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "DUP1", - "path": "11" - }, - "6773": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "MLOAD", - "path": "11" - }, - "6774": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "DUP3", - "path": "11" - }, - "6775": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "MSTORE", - "path": "11" - }, - "6776": { - "op": "PUSH1", - "value": "0x1F" - }, - "6778": { - "op": "NOT" - }, - "6779": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "SWAP1", - "path": "11" - }, - "6780": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "SWAP3", - "path": "11" - }, - "6781": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "ADD", - "path": "11" - }, - "6782": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "SWAP2", - "path": "11" - }, - "6783": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "PUSH1", - "path": "11", - "value": "0x20" - }, - "6785": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "SWAP2", - "path": "11" - }, - "6786": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "DUP3", - "path": "11" - }, - "6787": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "ADD", - "path": "11" - }, - "6788": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "SWAP2", - "path": "11" - }, - "6789": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "ADD", - "path": "11" - }, - "6790": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "PUSH2", - "path": "11", - "value": "0x1A6B" - }, - "6793": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "JUMP", - "path": "11" - }, - "6794": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "JUMPDEST", - "path": "11" - }, - "6795": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "PUSH1", - "path": "11", - "value": "0x1" - }, - "6797": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "DUP4", - "path": "11" - }, - "6798": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "PUSH1", - "path": "11", - "value": "0x20" - }, - "6800": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "SUB", - "path": "11" - }, - "6801": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "PUSH2", - "path": "11", - "value": "0x100" - }, - "6804": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "EXP", - "path": "11" - }, - "6805": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "SUB", - "path": "11" - }, - "6806": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "DUP1", - "path": "11" - }, - "6807": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "NOT", - "path": "11" - }, - "6808": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "DUP3", - "path": "11" - }, - "6809": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "MLOAD", - "path": "11" - }, - "6810": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "AND", - "path": "11" - }, - "6811": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "DUP2", - "path": "11" - }, - "6812": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "DUP5", - "path": "11" - }, - "6813": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "MLOAD", - "path": "11" - }, - "6814": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "AND", - "path": "11" - }, - "6815": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "DUP1", - "path": "11" - }, - "6816": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "DUP3", - "path": "11" - }, - "6817": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "OR", - "path": "11" - }, - "6818": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "DUP6", - "path": "11" - }, - "6819": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "MSTORE", - "path": "11" - }, - "6820": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "POP", - "path": "11" - }, - "6821": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "POP", - "path": "11" - }, - "6822": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "POP", - "path": "11" - }, - "6823": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "POP", - "path": "11" - }, - "6824": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "POP", - "path": "11" - }, - "6825": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "POP", - "path": "11" - }, - "6826": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "SWAP1", - "path": "11" - }, - "6827": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "POP", - "path": "11" - }, - "6828": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "ADD", - "path": "11" - }, - "6829": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "SWAP2", - "path": "11" - }, - "6830": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "POP", - "path": "11" - }, - "6831": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "POP", - "path": "11" - }, - "6832": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "PUSH1", - "path": "11", - "value": "0x0" - }, - "6834": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "PUSH1", - "path": "11", - "value": "0x40" - }, - "6836": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "MLOAD", - "path": "11" - }, - "6837": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "DUP1", - "path": "11" - }, - "6838": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "DUP4", - "path": "11" - }, - "6839": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "SUB", - "path": "11" - }, - "6840": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "DUP2", - "path": "11" - }, - "6841": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "PUSH1", - "path": "11", - "value": "0x0" - }, - "6843": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "DUP7", - "path": "11" - }, - "6844": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "GAS", - "path": "11" - }, - "6845": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "CALL", - "path": "11" - }, - "6846": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "SWAP2", - "path": "11" - }, - "6847": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "POP", - "path": "11" - }, - "6848": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "POP", - "path": "11" - }, - "6849": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "RETURNDATASIZE", - "path": "11" - }, - "6850": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "DUP1", - "path": "11" - }, - "6851": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "PUSH1", - "path": "11", - "value": "0x0" - }, - "6853": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "DUP2", - "path": "11" - }, - "6854": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "EQ", - "path": "11" - }, - "6855": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "PUSH2", - "path": "11", - "value": "0x1AEC" - }, - "6858": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "JUMPI", - "path": "11" - }, - "6859": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "PUSH1", - "path": "11", - "value": "0x40" - }, - "6861": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "MLOAD", - "path": "11" - }, - "6862": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "SWAP2", - "path": "11" - }, - "6863": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "POP", - "path": "11" - }, - "6864": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "PUSH1", - "path": "11", - "value": "0x1F" - }, - "6866": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "NOT", - "path": "11" - }, - "6867": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "PUSH1", - "path": "11", - "value": "0x3F" - }, - "6869": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "RETURNDATASIZE", - "path": "11" - }, - "6870": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "ADD", - "path": "11" - }, - "6871": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "AND", - "path": "11" - }, - "6872": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "DUP3", - "path": "11" - }, - "6873": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "ADD", - "path": "11" - }, - "6874": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "PUSH1", - "path": "11", - "value": "0x40" - }, - "6876": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "MSTORE", - "path": "11" - }, - "6877": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "RETURNDATASIZE", - "path": "11" - }, - "6878": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "DUP3", - "path": "11" - }, - "6879": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "MSTORE", - "path": "11" - }, - "6880": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "RETURNDATASIZE", - "path": "11" - }, - "6881": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "PUSH1", - "path": "11", - "value": "0x0" - }, - "6883": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "PUSH1", - "path": "11", - "value": "0x20" - }, - "6885": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "DUP5", - "path": "11" - }, - "6886": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "ADD", - "path": "11" - }, - "6887": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "RETURNDATACOPY", - "path": "11" - }, - "6888": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "PUSH2", - "path": "11", - "value": "0x1AF1" - }, - "6891": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "JUMP", - "path": "11" - }, - "6892": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "JUMPDEST", - "path": "11" - }, - "6893": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "PUSH1", - "path": "11", - "value": "0x60" - }, - "6895": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "SWAP2", - "path": "11" - }, - "6896": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "POP", - "path": "11" - }, - "6897": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "JUMPDEST", - "path": "11" - }, - "6898": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1029, 1056], - "op": "POP", - "path": "11" - }, - "6899": { - "fn": "Addresses.safeTokenContractCall", - "offset": [987, 1056], - "op": "SWAP2", - "path": "11" - }, - "6900": { - "fn": "Addresses.safeTokenContractCall", - "offset": [987, 1056], - "op": "POP", - "path": "11" - }, - "6901": { - "fn": "Addresses.safeTokenContractCall", - "offset": [987, 1056], - "op": "SWAP2", - "path": "11" - }, - "6902": { - "fn": "Addresses.safeTokenContractCall", - "offset": [987, 1056], - "op": "POP", - "path": "11" - }, - "6903": { - "branch": 89, - "fn": "Addresses.safeTokenContractCall", - "offset": [1074, 1081], - "op": "DUP2", - "path": "11", - "statement": 76 - }, - "6904": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1090, 1100], - "op": "DUP2", - "path": "11" - }, - "6905": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "SWAP1", - "path": "11" - }, - "6906": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "PUSH2", - "path": "11", - "value": "0x1B44" - }, - "6909": { - "branch": 89, - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "JUMPI", - "path": "11" - }, - "6910": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "PUSH1", - "path": "11", - "value": "0x40" - }, - "6912": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "MLOAD", - "path": "11" - }, - "6913": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "6917": { - "op": "PUSH1", - "value": "0xE5" - }, - "6919": { - "op": "SHL" - }, - "6920": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "DUP2", - "path": "11" - }, - "6921": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "MSTORE", - "path": "11" - }, - "6922": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "PUSH1", - "path": "11", - "value": "0x20" - }, - "6924": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "PUSH1", - "path": "11", - "value": "0x4" - }, - "6926": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "DUP3", - "path": "11" - }, - "6927": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "ADD", - "path": "11" - }, - "6928": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "DUP2", - "path": "11" - }, - "6929": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "DUP2", - "path": "11" - }, - "6930": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "MSTORE", - "path": "11" - }, - "6931": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "DUP4", - "path": "11" - }, - "6932": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "MLOAD", - "path": "11" - }, - "6933": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "PUSH1", - "path": "11", - "value": "0x24" - }, - "6935": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "DUP5", - "path": "11" - }, - "6936": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "ADD", - "path": "11" - }, - "6937": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "MSTORE", - "path": "11" - }, - "6938": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "DUP4", - "path": "11" - }, - "6939": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "MLOAD", - "path": "11" - }, - "6940": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "SWAP1", - "path": "11" - }, - "6941": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "SWAP3", - "path": "11" - }, - "6942": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "DUP4", - "path": "11" - }, - "6943": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "SWAP3", - "path": "11" - }, - "6944": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "PUSH1", - "path": "11", - "value": "0x44" - }, - "6946": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "SWAP1", - "path": "11" - }, - "6947": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "SWAP2", - "path": "11" - }, - "6948": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "ADD", - "path": "11" - }, - "6949": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "SWAP2", - "path": "11" - }, - "6950": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "SWAP1", - "path": "11" - }, - "6951": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "DUP6", - "path": "11" - }, - "6952": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "ADD", - "path": "11" - }, - "6953": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "SWAP1", - "path": "11" - }, - "6954": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "DUP1", - "path": "11" - }, - "6955": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "DUP4", - "path": "11" - }, - "6956": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "DUP4", - "path": "11" - }, - "6957": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "PUSH1", - "path": "11", - "value": "0x0" - }, - "6959": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "DUP4", - "path": "11" - }, - "6960": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "ISZERO", - "path": "11" - }, - "6961": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "PUSH2", - "path": "11", - "value": "0xE74" - }, - "6964": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "JUMPI", - "path": "11" - }, - "6965": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "DUP2", - "path": "11" - }, - "6966": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "DUP2", - "path": "11" - }, - "6967": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "ADD", - "path": "11" - }, - "6968": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "MLOAD", - "path": "11" - }, - "6969": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "DUP4", - "path": "11" - }, - "6970": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "DUP3", - "path": "11" - }, - "6971": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "ADD", - "path": "11" - }, - "6972": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "MSTORE", - "path": "11" - }, - "6973": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "PUSH1", - "path": "11", - "value": "0x20" - }, - "6975": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "ADD", - "path": "11" - }, - "6976": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "PUSH2", - "path": "11", - "value": "0xE5C" - }, - "6979": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "JUMP", - "path": "11" - }, - "6980": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1066, 1102], - "op": "JUMPDEST", - "path": "11" - }, - "6981": { - "op": "POP" - }, - "6982": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1117, 1134], - "op": "DUP1", - "path": "11" - }, - "6983": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1117, 1134], - "op": "MLOAD", - "path": "11" - }, - "6984": { - "branch": 90, - "fn": "Addresses.safeTokenContractCall", - "offset": [1117, 1138], - "op": "ISZERO", - "path": "11" - }, - "6985": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1113, 1230], - "op": "PUSH2", - "path": "11", - "value": "0xFA9" - }, - "6988": { - "branch": 90, - "fn": "Addresses.safeTokenContractCall", - "offset": [1113, 1230], - "op": "JUMPI", - "path": "11" - }, - "6989": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1173, 1183], - "op": "DUP1", - "path": "11", - "statement": 77 - }, - "6990": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1162, 1192], - "op": "DUP1", - "path": "11" - }, - "6991": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1162, 1192], - "op": "PUSH1", - "path": "11", - "value": "0x20" - }, - "6993": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1162, 1192], - "op": "ADD", - "path": "11" - }, - "6994": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1162, 1192], - "op": "SWAP1", - "path": "11" - }, - "6995": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1162, 1192], - "op": "MLOAD", - "path": "11" - }, - "6996": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1162, 1192], - "op": "PUSH1", - "path": "11", - "value": "0x20" - }, - "6998": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1162, 1192], - "op": "DUP2", - "path": "11" - }, - "6999": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1162, 1192], - "op": "LT", - "path": "11" - }, - "7000": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1162, 1192], - "op": "ISZERO", - "path": "11" - }, - "7001": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1162, 1192], - "op": "PUSH2", - "path": "11", - "value": "0x1B61" - }, - "7004": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1162, 1192], - "op": "JUMPI", - "path": "11" - }, - "7005": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1162, 1192], - "op": "PUSH1", - "path": "11", - "value": "0x0" - }, - "7007": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1162, 1192], - "op": "DUP1", - "path": "11" - }, - "7008": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1162, 1192], - "op": "REVERT", - "path": "11" - }, - "7009": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1162, 1192], - "op": "JUMPDEST", - "path": "11" - }, - "7010": { - "op": "POP" - }, - "7011": { - "branch": 91, - "fn": "Addresses.safeTokenContractCall", - "offset": [1162, 1192], - "op": "MLOAD", - "path": "11" - }, - "7012": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "PUSH2", - "path": "11", - "value": "0xFA9" - }, - "7015": { - "branch": 91, - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "JUMPI", - "path": "11" - }, - "7016": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "PUSH1", - "path": "11", - "value": "0x40" - }, - "7018": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "DUP1", - "path": "11" - }, - "7019": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "MLOAD", - "path": "11" - }, - "7020": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "7024": { - "op": "PUSH1", - "value": "0xE5" - }, - "7026": { - "op": "SHL" - }, - "7027": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "DUP2", - "path": "11" - }, - "7028": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "MSTORE", - "path": "11" - }, - "7029": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "PUSH1", - "path": "11", - "value": "0x20" - }, - "7031": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "PUSH1", - "path": "11", - "value": "0x4" - }, - "7033": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "DUP3", - "path": "11" - }, - "7034": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "ADD", - "path": "11" - }, - "7035": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "MSTORE", - "path": "11" - }, - "7036": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "PUSH1", - "path": "11", - "value": "0x16" - }, - "7038": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "PUSH1", - "path": "11", - "value": "0x24" - }, - "7040": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "DUP3", - "path": "11" - }, - "7041": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "ADD", - "path": "11" - }, - "7042": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "MSTORE", - "path": "11" - }, - "7043": { - "op": "PUSH22", - "value": "0x1513D2D15397D3D4115490551253D397D19052531151" - }, - "7066": { - "op": "PUSH1", - "value": "0x52" - }, - "7068": { - "op": "SHL" - }, - "7069": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "PUSH1", - "path": "11", - "value": "0x44" - }, - "7071": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "DUP3", - "path": "11" - }, - "7072": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "ADD", - "path": "11" - }, - "7073": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "MSTORE", - "path": "11" - }, - "7074": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "SWAP1", - "path": "11" - }, - "7075": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "MLOAD", - "path": "11" - }, - "7076": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "SWAP1", - "path": "11" - }, - "7077": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "DUP2", - "path": "11" - }, - "7078": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "SWAP1", - "path": "11" - }, - "7079": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "SUB", - "path": "11" - }, - "7080": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "PUSH1", - "path": "11", - "value": "0x64" - }, - "7082": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "ADD", - "path": "11" - }, - "7083": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "SWAP1", - "path": "11" - }, - "7084": { - "fn": "Addresses.safeTokenContractCall", - "offset": [1154, 1219], - "op": "REVERT", - "path": "11" - }, - "7085": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [361, 611], - "op": "JUMPDEST", - "path": "34" - }, - "7086": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [422, 454], - "op": "PUSH1", - "path": "34", - "value": "0x0" - }, - "7088": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [466, 482], - "op": "DUP1", - "path": "34" - }, - "7089": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "PUSH1", - "path": "34", - "value": "0x40" - }, - "7091": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "MLOAD", - "path": "34" - }, - "7092": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "DUP1", - "path": "34" - }, - "7093": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "PUSH1", - "path": "34", - "value": "0x40" - }, - "7095": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "ADD", - "path": "34" - }, - "7096": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "PUSH1", - "path": "34", - "value": "0x40" - }, - "7098": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "MSTORE", - "path": "34" - }, - "7099": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "DUP1", - "path": "34" - }, - "7100": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "PUSH1", - "path": "34", - "value": "0x1C" - }, - "7102": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "DUP2", - "path": "34" - }, - "7103": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "MSTORE", - "path": "34" - }, - "7104": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "PUSH1", - "path": "34", - "value": "0x20" - }, - "7106": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "ADD", - "path": "34" - }, - "7107": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "PUSH32", - "path": "34", - "value": "0x535441524B4E45545F312E305F474F5645524E414E43455F494E464F00000000" - }, - "7140": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "DUP2", - "path": "34" - }, - "7141": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "MSTORE", - "path": "34" - }, - "7142": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "POP", - "path": "34" - }, - "7143": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "PUSH1", - "path": "34", - "value": "0x40" - }, - "7145": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "MLOAD", - "path": "34" - }, - "7146": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "PUSH1", - "path": "34", - "value": "0x20" - }, - "7148": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "ADD", - "path": "34" - }, - "7149": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP1", - "path": "34" - }, - "7150": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP3", - "path": "34" - }, - "7151": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP1", - "path": "34" - }, - "7152": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "MLOAD", - "path": "34" - }, - "7153": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "SWAP1", - "path": "34" - }, - "7154": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "PUSH1", - "path": "34", - "value": "0x20" - }, - "7156": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "ADD", - "path": "34" - }, - "7157": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "SWAP1", - "path": "34" - }, - "7158": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP1", - "path": "34" - }, - "7159": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP4", - "path": "34" - }, - "7160": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP4", - "path": "34" - }, - "7161": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "JUMPDEST", - "path": "34" - }, - "7162": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "PUSH1", - "path": "34", - "value": "0x20" - }, - "7164": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP4", - "path": "34" - }, - "7165": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "LT", - "path": "34" - }, - "7166": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "PUSH2", - "path": "34", - "value": "0x1C18" - }, - "7169": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "JUMPI", - "path": "34" - }, - "7170": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP1", - "path": "34" - }, - "7171": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "MLOAD", - "path": "34" - }, - "7172": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP3", - "path": "34" - }, - "7173": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "MSTORE", - "path": "34" - }, - "7174": { - "op": "PUSH1", - "value": "0x1F" - }, - "7176": { - "op": "NOT" - }, - "7177": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "SWAP1", - "path": "34" - }, - "7178": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "SWAP3", - "path": "34" - }, - "7179": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "ADD", - "path": "34" - }, - "7180": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "SWAP2", - "path": "34" - }, - "7181": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "PUSH1", - "path": "34", - "value": "0x20" - }, - "7183": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "SWAP2", - "path": "34" - }, - "7184": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP3", - "path": "34" - }, - "7185": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "ADD", - "path": "34" - }, - "7186": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "SWAP2", - "path": "34" - }, - "7187": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "ADD", - "path": "34" - }, - "7188": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "PUSH2", - "path": "34", - "value": "0x1BF9" - }, - "7191": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "JUMP", - "path": "34" - }, - "7192": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "JUMPDEST", - "path": "34" - }, - "7193": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "PUSH1", - "path": "34", - "value": "0x1" - }, - "7195": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP4", - "path": "34" - }, - "7196": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "PUSH1", - "path": "34", - "value": "0x20" - }, - "7198": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "SUB", - "path": "34" - }, - "7199": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "PUSH2", - "path": "34", - "value": "0x100" - }, - "7202": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "EXP", - "path": "34" - }, - "7203": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "SUB", - "path": "34" - }, - "7204": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP1", - "path": "34" - }, - "7205": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "NOT", - "path": "34" - }, - "7206": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP3", - "path": "34" - }, - "7207": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "MLOAD", - "path": "34" - }, - "7208": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "AND", - "path": "34" - }, - "7209": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP2", - "path": "34" - }, - "7210": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP5", - "path": "34" - }, - "7211": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "MLOAD", - "path": "34" - }, - "7212": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "AND", - "path": "34" - }, - "7213": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP1", - "path": "34" - }, - "7214": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP3", - "path": "34" - }, - "7215": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "OR", - "path": "34" - }, - "7216": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP6", - "path": "34" - }, - "7217": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "MSTORE", - "path": "34" - }, - "7218": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "POP", - "path": "34" - }, - "7219": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "POP", - "path": "34" - }, - "7220": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "POP", - "path": "34" - }, - "7221": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "POP", - "path": "34" - }, - "7222": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "POP", - "path": "34" - }, - "7223": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "POP", - "path": "34" - }, - "7224": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "SWAP1", - "path": "34" - }, - "7225": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "POP", - "path": "34" - }, - "7226": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "ADD", - "path": "34" - }, - "7227": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "SWAP2", - "path": "34" - }, - "7228": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "POP", - "path": "34" - }, - "7229": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "POP", - "path": "34" - }, - "7230": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "PUSH1", - "path": "34", - "value": "0x40" - }, - "7232": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "MLOAD", - "path": "34" - }, - "7233": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "PUSH1", - "path": "34", - "value": "0x20" - }, - "7235": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP2", - "path": "34" - }, - "7236": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP4", - "path": "34" - }, - "7237": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "SUB", - "path": "34" - }, - "7238": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "SUB", - "path": "34" - }, - "7239": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP2", - "path": "34" - }, - "7240": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "MSTORE", - "path": "34" - }, - "7241": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "SWAP1", - "path": "34" - }, - "7242": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "PUSH1", - "path": "34", - "value": "0x40" - }, - "7244": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "MSTORE", - "path": "34" - }, - "7245": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [485, 542], - "op": "DUP1", - "path": "34" - }, - "7246": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [485, 542], - "op": "MLOAD", - "path": "34" - }, - "7247": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [485, 542], - "op": "SWAP1", - "path": "34" - }, - "7248": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [485, 542], - "op": "PUSH1", - "path": "34", - "value": "0x20" - }, - "7250": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [485, 542], - "op": "ADD", - "path": "34" - }, - "7251": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [485, 542], - "op": "KECCAK256", - "path": "34" - }, - "7252": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [466, 542], - "op": "SWAP1", - "path": "34" - }, - "7253": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [466, 542], - "op": "POP", - "path": "34" - }, - "7254": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [587, 595], - "op": "DUP1", - "path": "34" - }, - "7255": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [575, 595], - "op": "SWAP2", - "path": "34" - }, - "7256": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [575, 595], - "op": "POP", - "path": "34" - }, - "7257": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [561, 605], - "op": "POP", - "path": "34" - }, - "7258": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [561, 605], - "op": "SWAP1", - "path": "34" - }, - "7259": { - "fn": "StarknetGovernance.getGovernanceInfo", - "jump": "o", - "offset": [561, 605], - "op": "JUMP", - "path": "34" - }, - "7260": { - "fn": "Addresses.isContract", - "offset": [161, 351], - "op": "JUMPDEST", - "path": "11" - }, - "7261": { - "fn": "Addresses.isContract", - "offset": [290, 310], - "op": "EXTCODESIZE", - "path": "11" - }, - "7262": { - "fn": "Addresses.isContract", - "offset": [336, 344], - "op": "ISZERO", - "path": "11", - "statement": 78 - }, - "7263": { - "fn": "Addresses.isContract", - "offset": [336, 344], - "op": "ISZERO", - "path": "11" - }, - "7264": { - "fn": "Addresses.isContract", - "offset": [336, 344], - "op": "SWAP1", - "path": "11" - }, - "7265": { - "fn": "Addresses.isContract", - "jump": "o", - "offset": [161, 351], - "op": "JUMP", - "path": "11" - }, - "7266": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1485, 1614], - "op": "JUMPDEST", - "path": "29" - }, - "7267": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1545, 1607], - "op": "PUSH2", - "path": "29", - "statement": 79, - "value": "0x2E1" - }, - "7270": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "7272": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "MLOAD", - "path": "29" - }, - "7273": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "DUP1", - "path": "29" - }, - "7274": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "PUSH1", - "path": "29", - "value": "0x60" - }, - "7276": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "ADD", - "path": "29" - }, - "7277": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "7279": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "MSTORE", - "path": "29" - }, - "7280": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "DUP1", - "path": "29" - }, - "7281": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "PUSH1", - "path": "29", - "value": "0x29" - }, - "7283": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "DUP2", - "path": "29" - }, - "7284": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "MSTORE", - "path": "29" - }, - "7285": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "PUSH1", - "path": "29", - "value": "0x20" - }, - "7287": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "ADD", - "path": "29" - }, - "7288": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "PUSH2", - "path": "29", - "value": "0x1F4E" - }, - "7291": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "PUSH1", - "path": "29", - "value": "0x29" - }, - "7293": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "SWAP2", - "path": "29" - }, - "7294": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "CODECOPY", - "path": "29" - }, - "7295": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1597, 1606], - "op": "DUP3", - "path": "29" - }, - "7296": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1545, 1577], - "op": "PUSH2", - "path": "29", - "value": "0x1E16" - }, - "7299": { - "fn": "StarknetTokenStorage.bridgedToken", - "jump": "i", - "offset": [1545, 1607], - "op": "JUMP", - "path": "29" - }, - "7300": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1985, 2144], - "op": "JUMPDEST", - "path": "29" - }, - "7301": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2061, 2137], - "op": "PUSH2", - "path": "29", - "statement": 80, - "value": "0x2E1" - }, - "7304": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "7306": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "MLOAD", - "path": "29" - }, - "7307": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "DUP1", - "path": "29" - }, - "7308": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "PUSH1", - "path": "29", - "value": "0x60" - }, - "7310": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "ADD", - "path": "29" - }, - "7311": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "7313": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "MSTORE", - "path": "29" - }, - "7314": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "DUP1", - "path": "29" - }, - "7315": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "PUSH1", - "path": "29", - "value": "0x28" - }, - "7317": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "DUP2", - "path": "29" - }, - "7318": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "MSTORE", - "path": "29" - }, - "7319": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "PUSH1", - "path": "29", - "value": "0x20" - }, - "7321": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "ADD", - "path": "29" - }, - "7322": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "PUSH2", - "path": "29", - "value": "0x1E93" - }, - "7325": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "PUSH1", - "path": "29", - "value": "0x28" - }, - "7327": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "SWAP2", - "path": "29" - }, - "7328": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "CODECOPY", - "path": "29" - }, - "7329": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2126, 2135], - "op": "DUP3", - "path": "29" - }, - "7330": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2061, 2093], - "op": "PUSH2", - "path": "29", - "value": "0x1E16" - }, - "7333": { - "fn": "StarknetTokenStorage.messagingContract", - "jump": "i", - "offset": [2061, 2137], - "op": "JUMP", - "path": "29" - }, - "7334": { - "fn": "Governance.addGovernor", - "offset": [2951, 3187], - "op": "JUMPDEST", - "path": "1" - }, - "7335": { - "fn": "Governance.addGovernor", - "offset": [3020, 3043], - "op": "PUSH2", - "path": "1", - "statement": 81, - "value": "0x1CAF" - }, - "7338": { - "fn": "Governance.addGovernor", - "offset": [3031, 3042], - "op": "DUP2", - "path": "1" - }, - "7339": { - "fn": "Governance.addGovernor", - "offset": [3020, 3030], - "op": "PUSH2", - "path": "1", - "value": "0xC82" - }, - "7342": { - "fn": "Governance.addGovernor", - "jump": "i", - "offset": [3020, 3043], - "op": "JUMP", - "path": "1" - }, - "7343": { - "fn": "Governance.addGovernor", - "offset": [3020, 3043], - "op": "JUMPDEST", - "path": "1" - }, - "7344": { - "branch": 98, - "fn": "Governance.addGovernor", - "offset": [3019, 3043], - "op": "ISZERO", - "path": "1" - }, - "7345": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "PUSH2", - "path": "1", - "value": "0x1CF4" - }, - "7348": { - "branch": 98, - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "JUMPI", - "path": "1" - }, - "7349": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "PUSH1", - "path": "1", - "value": "0x40" - }, - "7351": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "DUP1", - "path": "1" - }, - "7352": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "MLOAD", - "path": "1" - }, - "7353": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "7357": { - "op": "PUSH1", - "value": "0xE5" - }, - "7359": { - "op": "SHL" - }, - "7360": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "DUP2", - "path": "1" - }, - "7361": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "MSTORE", - "path": "1" - }, - "7362": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "7364": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "PUSH1", - "path": "1", - "value": "0x4" - }, - "7366": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "DUP3", - "path": "1" - }, - "7367": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "ADD", - "path": "1" - }, - "7368": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "MSTORE", - "path": "1" - }, - "7369": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "PUSH1", - "path": "1", - "value": "0x10" - }, - "7371": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "PUSH1", - "path": "1", - "value": "0x24" - }, - "7373": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "DUP3", - "path": "1" - }, - "7374": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "ADD", - "path": "1" - }, - "7375": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "MSTORE", - "path": "1" - }, - "7376": { - "op": "PUSH16", - "value": "0x20A62922A0A22CAFA3A7AB22A92727A9" - }, - "7393": { - "op": "PUSH1", - "value": "0x81" - }, - "7395": { - "op": "SHL" - }, - "7396": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "PUSH1", - "path": "1", - "value": "0x44" - }, - "7398": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "DUP3", - "path": "1" - }, - "7399": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "ADD", - "path": "1" - }, - "7400": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "MSTORE", - "path": "1" - }, - "7401": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "SWAP1", - "path": "1" - }, - "7402": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "MLOAD", - "path": "1" - }, - "7403": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "SWAP1", - "path": "1" - }, - "7404": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "DUP2", - "path": "1" - }, - "7405": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "SWAP1", - "path": "1" - }, - "7406": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "SUB", - "path": "1" - }, - "7407": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "PUSH1", - "path": "1", - "value": "0x64" - }, - "7409": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "ADD", - "path": "1" - }, - "7410": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "SWAP1", - "path": "1" - }, - "7411": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "REVERT", - "path": "1" - }, - "7412": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "JUMPDEST", - "path": "1" - }, - "7413": { - "fn": "Governance.addGovernor", - "offset": [3074, 3106], - "op": "PUSH1", - "path": "1", - "value": "0x0" - }, - "7415": { - "fn": "Governance.addGovernor", - "offset": [3109, 3128], - "op": "PUSH2", - "path": "1", - "value": "0x1CFE" - }, - "7418": { - "fn": "Governance.addGovernor", - "offset": [3109, 3126], - "op": "PUSH2", - "path": "1", - "value": "0x1BAD" - }, - "7421": { - "fn": "Governance.addGovernor", - "jump": "i", - "offset": [3109, 3128], - "op": "JUMP", - "path": "1" - }, - "7422": { - "fn": "Governance.addGovernor", - "offset": [3109, 3128], - "op": "JUMPDEST", - "path": "1" - }, - "7423": { - "op": "PUSH1", - "value": "0x1" - }, - "7425": { - "op": "PUSH1", - "value": "0x1" - }, - "7427": { - "op": "PUSH1", - "value": "0xA0" - }, - "7429": { - "op": "SHL" - }, - "7430": { - "op": "SUB" - }, - "7431": { - "fn": "Governance.addGovernor", - "offset": [3138, 3173], - "op": "SWAP1", - "path": "1", - "statement": 82 - }, - "7432": { - "fn": "Governance.addGovernor", - "offset": [3138, 3173], - "op": "SWAP3", - "path": "1" - }, - "7433": { - "fn": "Governance.addGovernor", - "offset": [3138, 3173], - "op": "AND", - "path": "1" - }, - "7434": { - "fn": "Governance.addGovernor", - "offset": [3138, 3160], - "op": "PUSH1", - "path": "1", - "value": "0x0" - }, - "7436": { - "fn": "Governance.addGovernor", - "offset": [3138, 3173], - "op": "SWAP1", - "path": "1" - }, - "7437": { - "fn": "Governance.addGovernor", - "offset": [3138, 3173], - "op": "DUP2", - "path": "1" - }, - "7438": { - "fn": "Governance.addGovernor", - "offset": [3138, 3173], - "op": "MSTORE", - "path": "1" - }, - "7439": { - "fn": "Governance.addGovernor", - "offset": [3138, 3173], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "7441": { - "fn": "Governance.addGovernor", - "offset": [3138, 3173], - "op": "SWAP3", - "path": "1" - }, - "7442": { - "fn": "Governance.addGovernor", - "offset": [3138, 3173], - "op": "SWAP1", - "path": "1" - }, - "7443": { - "fn": "Governance.addGovernor", - "offset": [3138, 3173], - "op": "SWAP3", - "path": "1" - }, - "7444": { - "fn": "Governance.addGovernor", - "offset": [3138, 3173], - "op": "MSTORE", - "path": "1" - }, - "7445": { - "op": "POP" - }, - "7446": { - "fn": "Governance.addGovernor", - "offset": [3138, 3173], - "op": "PUSH1", - "path": "1", - "value": "0x40" - }, - "7448": { - "fn": "Governance.addGovernor", - "offset": [3138, 3173], - "op": "SWAP1", - "path": "1" - }, - "7449": { - "fn": "Governance.addGovernor", - "offset": [3138, 3173], - "op": "KECCAK256", - "path": "1" - }, - "7450": { - "fn": "Governance.addGovernor", - "offset": [3138, 3180], - "op": "DUP1", - "path": "1" - }, - "7451": { - "fn": "Governance.addGovernor", - "offset": [3138, 3180], - "op": "SLOAD", - "path": "1" - }, - "7452": { - "op": "PUSH1", - "value": "0xFF" - }, - "7454": { - "op": "NOT" - }, - "7455": { - "fn": "Governance.addGovernor", - "offset": [3138, 3180], - "op": "AND", - "path": "1" - }, - "7456": { - "fn": "Governance.addGovernor", - "offset": [3176, 3180], - "op": "PUSH1", - "path": "1", - "value": "0x1" - }, - "7458": { - "fn": "Governance.addGovernor", - "offset": [3138, 3180], - "op": "OR", - "path": "1" - }, - "7459": { - "fn": "Governance.addGovernor", - "offset": [3138, 3180], - "op": "SWAP1", - "path": "1" - }, - "7460": { - "fn": "Governance.addGovernor", - "offset": [3138, 3180], - "op": "SSTORE", - "path": "1" - }, - "7461": { - "fn": "Governance.addGovernor", - "jump": "o", - "offset": [2951, 3187], - "op": "JUMP", - "path": "1" - }, - "7462": { - "fn": "NamedStorage.setUintValue", - "offset": [1379, 1571], - "op": "JUMPDEST", - "path": "0" - }, - "7463": { - "fn": "NamedStorage.setUintValue", - "offset": [1455, 1467], - "op": "PUSH1", - "path": "0", - "value": "0x0" - }, - "7465": { - "fn": "NamedStorage.setUintValue", - "offset": [1497, 1501], - "op": "DUP3", - "path": "0" - }, - "7466": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "PUSH1", - "path": "0", - "value": "0x40" - }, - "7468": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "MLOAD", - "path": "0" - }, - "7469": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "7471": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "ADD", - "path": "0" - }, - "7472": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP1", - "path": "0" - }, - "7473": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP3", - "path": "0" - }, - "7474": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP1", - "path": "0" - }, - "7475": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "MLOAD", - "path": "0" - }, - "7476": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "SWAP1", - "path": "0" - }, - "7477": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "7479": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "ADD", - "path": "0" - }, - "7480": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "SWAP1", - "path": "0" - }, - "7481": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP1", - "path": "0" - }, - "7482": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP4", - "path": "0" - }, - "7483": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP4", - "path": "0" - }, - "7484": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "JUMPDEST", - "path": "0" - }, - "7485": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "7487": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP4", - "path": "0" - }, - "7488": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "LT", - "path": "0" - }, - "7489": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "PUSH2", - "path": "0", - "value": "0x1D5B" - }, - "7492": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "JUMPI", - "path": "0" - }, - "7493": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP1", - "path": "0" - }, - "7494": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "MLOAD", - "path": "0" - }, - "7495": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP3", - "path": "0" - }, - "7496": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "MSTORE", - "path": "0" - }, - "7497": { - "op": "PUSH1", - "value": "0x1F" - }, - "7499": { - "op": "NOT" - }, - "7500": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "SWAP1", - "path": "0" - }, - "7501": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "SWAP3", - "path": "0" - }, - "7502": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "ADD", - "path": "0" - }, - "7503": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "SWAP2", - "path": "0" - }, - "7504": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "7506": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "SWAP2", - "path": "0" - }, - "7507": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP3", - "path": "0" - }, - "7508": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "ADD", - "path": "0" - }, - "7509": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "SWAP2", - "path": "0" - }, - "7510": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "ADD", - "path": "0" - }, - "7511": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "PUSH2", - "path": "0", - "value": "0x1D3C" - }, - "7514": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "JUMP", - "path": "0" - }, - "7515": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "JUMPDEST", - "path": "0" - }, - "7516": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "PUSH1", - "path": "0", - "value": "0x1" - }, - "7518": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP4", - "path": "0" - }, - "7519": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "7521": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "SUB", - "path": "0" - }, - "7522": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "PUSH2", - "path": "0", - "value": "0x100" - }, - "7525": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "EXP", - "path": "0" - }, - "7526": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "SUB", - "path": "0" - }, - "7527": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP1", - "path": "0" - }, - "7528": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "NOT", - "path": "0" - }, - "7529": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP3", - "path": "0" - }, - "7530": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "MLOAD", - "path": "0" - }, - "7531": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "AND", - "path": "0" - }, - "7532": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP2", - "path": "0" - }, - "7533": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP5", - "path": "0" - }, - "7534": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "MLOAD", - "path": "0" - }, - "7535": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "AND", - "path": "0" - }, - "7536": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP1", - "path": "0" - }, - "7537": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP3", - "path": "0" - }, - "7538": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "OR", - "path": "0" - }, - "7539": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP6", - "path": "0" - }, - "7540": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "MSTORE", - "path": "0" - }, - "7541": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "POP", - "path": "0" - }, - "7542": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "POP", - "path": "0" - }, - "7543": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "POP", - "path": "0" - }, - "7544": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "POP", - "path": "0" - }, - "7545": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "POP", - "path": "0" - }, - "7546": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "POP", - "path": "0" - }, - "7547": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "SWAP1", - "path": "0" - }, - "7548": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "POP", - "path": "0" - }, - "7549": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "ADD", - "path": "0" - }, - "7550": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "SWAP2", - "path": "0" - }, - "7551": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "POP", - "path": "0" - }, - "7552": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "POP", - "path": "0" - }, - "7553": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "PUSH1", - "path": "0", - "value": "0x40" - }, - "7555": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "MLOAD", - "path": "0" - }, - "7556": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "7558": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP2", - "path": "0" - }, - "7559": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP4", - "path": "0" - }, - "7560": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "SUB", - "path": "0" - }, - "7561": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "SUB", - "path": "0" - }, - "7562": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP2", - "path": "0" - }, - "7563": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "MSTORE", - "path": "0" - }, - "7564": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "SWAP1", - "path": "0" - }, - "7565": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "PUSH1", - "path": "0", - "value": "0x40" - }, - "7567": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "MSTORE", - "path": "0" - }, - "7568": { - "fn": "NamedStorage.setUintValue", - "offset": [1470, 1503], - "op": "DUP1", - "path": "0" - }, - "7569": { - "fn": "NamedStorage.setUintValue", - "offset": [1470, 1503], - "op": "MLOAD", - "path": "0" - }, - "7570": { - "fn": "NamedStorage.setUintValue", - "offset": [1470, 1503], - "op": "SWAP1", - "path": "0" - }, - "7571": { - "fn": "NamedStorage.setUintValue", - "offset": [1470, 1503], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "7573": { - "fn": "NamedStorage.setUintValue", - "offset": [1470, 1503], - "op": "ADD", - "path": "0" - }, - "7574": { - "fn": "NamedStorage.setUintValue", - "offset": [1470, 1503], - "op": "KECCAK256", - "path": "0" - }, - "7575": { - "fn": "NamedStorage.setUintValue", - "offset": [1455, 1503], - "op": "SWAP1", - "path": "0" - }, - "7576": { - "fn": "NamedStorage.setUintValue", - "offset": [1455, 1503], - "op": "POP", - "path": "0" - }, - "7577": { - "fn": "NamedStorage.setUintValue", - "offset": [1549, 1554], - "op": "DUP2", - "path": "0" - }, - "7578": { - "fn": "NamedStorage.setUintValue", - "offset": [1543, 1547], - "op": "DUP2", - "path": "0" - }, - "7579": { - "fn": "NamedStorage.setUintValue", - "offset": [1536, 1555], - "op": "SSTORE", - "path": "0" - }, - "7580": { - "fn": "NamedStorage.setUintValue", - "offset": [1522, 1565], - "op": "POP", - "path": "0" - }, - "7581": { - "fn": "NamedStorage.setUintValue", - "offset": [1522, 1565], - "op": "POP", - "path": "0" - }, - "7582": { - "fn": "NamedStorage.setUintValue", - "offset": [1522, 1565], - "op": "POP", - "path": "0" - }, - "7583": { - "fn": "NamedStorage.setUintValue", - "jump": "o", - "offset": [1522, 1565], - "op": "JUMP", - "path": "0" - }, - "7584": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1577, 1746], - "op": "JUMPDEST", - "path": "0" - }, - "7585": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1665, 1683], - "op": "PUSH2", - "path": "0", - "statement": 83, - "value": "0x1DA9" - }, - "7588": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1678, 1682], - "op": "DUP3", - "path": "0" - }, - "7589": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1665, 1677], - "op": "PUSH2", - "path": "0", - "value": "0x1981" - }, - "7592": { - "fn": "NamedStorage.setUintValueOnce", - "jump": "i", - "offset": [1665, 1683], - "op": "JUMP", - "path": "0" - }, - "7593": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1665, 1683], - "op": "JUMPDEST", - "path": "0" - }, - "7594": { - "branch": 100, - "fn": "NamedStorage.setUintValueOnce", - "offset": [1665, 1688], - "op": "ISZERO", - "path": "0" - }, - "7595": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "PUSH2", - "path": "0", - "value": "0x1DE9" - }, - "7598": { - "branch": 100, - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "JUMPI", - "path": "0" - }, - "7599": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "PUSH1", - "path": "0", - "value": "0x40" - }, - "7601": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "DUP1", - "path": "0" - }, - "7602": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "MLOAD", - "path": "0" - }, - "7603": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "7607": { - "op": "PUSH1", - "value": "0xE5" - }, - "7609": { - "op": "SHL" - }, - "7610": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "DUP2", - "path": "0" - }, - "7611": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "MSTORE", - "path": "0" - }, - "7612": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "7614": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "PUSH1", - "path": "0", - "value": "0x4" - }, - "7616": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "DUP3", - "path": "0" - }, - "7617": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "ADD", - "path": "0" - }, - "7618": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "MSTORE", - "path": "0" - }, - "7619": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "PUSH1", - "path": "0", - "value": "0xB" - }, - "7621": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "PUSH1", - "path": "0", - "value": "0x24" - }, - "7623": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "DUP3", - "path": "0" - }, - "7624": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "ADD", - "path": "0" - }, - "7625": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "MSTORE", - "path": "0" - }, - "7626": { - "op": "PUSH11", - "value": "0x1053149150511657D4D155" - }, - "7638": { - "op": "PUSH1", - "value": "0xAA" - }, - "7640": { - "op": "SHL" - }, - "7641": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "PUSH1", - "path": "0", - "value": "0x44" - }, - "7643": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "DUP3", - "path": "0" - }, - "7644": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "ADD", - "path": "0" - }, - "7645": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "MSTORE", - "path": "0" - }, - "7646": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "SWAP1", - "path": "0" - }, - "7647": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "MLOAD", - "path": "0" - }, - "7648": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "SWAP1", - "path": "0" - }, - "7649": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "DUP2", - "path": "0" - }, - "7650": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "SWAP1", - "path": "0" - }, - "7651": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "SUB", - "path": "0" - }, - "7652": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "PUSH1", - "path": "0", - "value": "0x64" - }, - "7654": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "ADD", - "path": "0" - }, - "7655": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "SWAP1", - "path": "0" - }, - "7656": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "REVERT", - "path": "0" - }, - "7657": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "JUMPDEST", - "path": "0" - }, - "7658": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1714, 1739], - "op": "PUSH2", - "path": "0", - "statement": 84, - "value": "0x2C2" - }, - "7661": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1727, 1731], - "op": "DUP3", - "path": "0" - }, - "7662": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1733, 1738], - "op": "DUP3", - "path": "0" - }, - "7663": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1714, 1726], - "op": "PUSH2", - "path": "0", - "value": "0x1D26" - }, - "7666": { - "fn": "NamedStorage.setUintValueOnce", - "jump": "i", - "offset": [1714, 1739], - "op": "JUMP", - "path": "0" - }, - "7667": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1024, 1144], - "op": "JUMPDEST", - "path": "29" - }, - "7668": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1069, 1076], - "op": "PUSH1", - "path": "29", - "value": "0x0" - }, - "7670": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1095, 1137], - "op": "PUSH2", - "path": "29", - "statement": 85, - "value": "0xA3C" - }, - "7673": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "7675": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "MLOAD", - "path": "29" - }, - "7676": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "DUP1", - "path": "29" - }, - "7677": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "PUSH1", - "path": "29", - "value": "0x60" - }, - "7679": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "ADD", - "path": "29" - }, - "7680": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "7682": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "MSTORE", - "path": "29" - }, - "7683": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "DUP1", - "path": "29" - }, - "7684": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "PUSH1", - "path": "29", - "value": "0x21" - }, - "7686": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "DUP2", - "path": "29" - }, - "7687": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "MSTORE", - "path": "29" - }, - "7688": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "PUSH1", - "path": "29", - "value": "0x20" - }, - "7690": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "ADD", - "path": "29" - }, - "7691": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "PUSH2", - "path": "29", - "value": "0x1F2D" - }, - "7694": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "PUSH1", - "path": "29", - "value": "0x21" - }, - "7696": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "SWAP2", - "path": "29" - }, - "7697": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "CODECOPY", - "path": "29" - }, - "7698": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1095, 1120], - "op": "PUSH2", - "path": "29", - "value": "0x1981" - }, - "7701": { - "fn": "StarknetTokenStorage.maxDeposit", - "jump": "i", - "offset": [1095, 1137], - "op": "JUMP", - "path": "29" - }, - "7702": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2171, 2360], - "op": "JUMPDEST", - "path": "0" - }, - "7703": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2295, 2298], - "op": "PUSH1", - "path": "0", - "statement": 86, - "value": "0x0" - }, - "7705": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2262, 2283], - "op": "PUSH2", - "path": "0", - "value": "0x1E21" - }, - "7708": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2278, 2282], - "op": "DUP4", - "path": "0" - }, - "7709": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2262, 2277], - "op": "PUSH2", - "path": "0", - "value": "0x1981" - }, - "7712": { - "fn": "NamedStorage.setAddressValueOnce", - "jump": "i", - "offset": [2262, 2283], - "op": "JUMP", - "path": "0" - }, - "7713": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2262, 2283], - "op": "JUMPDEST", - "path": "0" - }, - "7714": { - "op": "PUSH1", - "value": "0x1" - }, - "7716": { - "op": "PUSH1", - "value": "0x1" - }, - "7718": { - "op": "PUSH1", - "value": "0xA0" - }, - "7720": { - "op": "SHL" - }, - "7721": { - "op": "SUB" - }, - "7722": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2262, 2299], - "op": "AND", - "path": "0" - }, - "7723": { - "branch": 101, - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2262, 2299], - "op": "EQ", - "path": "0" - }, - "7724": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "PUSH2", - "path": "0", - "value": "0x1DE9" - }, - "7727": { - "branch": 101, - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "JUMPI", - "path": "0" - }, - "7728": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "PUSH1", - "path": "0", - "value": "0x40" - }, - "7730": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "DUP1", - "path": "0" - }, - "7731": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "MLOAD", - "path": "0" - }, - "7732": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "7736": { - "op": "PUSH1", - "value": "0xE5" - }, - "7738": { - "op": "SHL" - }, - "7739": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "DUP2", - "path": "0" - }, - "7740": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "MSTORE", - "path": "0" - }, - "7741": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "7743": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "PUSH1", - "path": "0", - "value": "0x4" - }, - "7745": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "DUP3", - "path": "0" - }, - "7746": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "ADD", - "path": "0" - }, - "7747": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "MSTORE", - "path": "0" - }, - "7748": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "PUSH1", - "path": "0", - "value": "0xB" - }, - "7750": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "PUSH1", - "path": "0", - "value": "0x24" - }, - "7752": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "DUP3", - "path": "0" - }, - "7753": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "ADD", - "path": "0" - }, - "7754": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "MSTORE", - "path": "0" - }, - "7755": { - "op": "PUSH11", - "value": "0x1053149150511657D4D155" - }, - "7767": { - "op": "PUSH1", - "value": "0xAA" - }, - "7769": { - "op": "SHL" - }, - "7770": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "PUSH1", - "path": "0", - "value": "0x44" - }, - "7772": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "DUP3", - "path": "0" - }, - "7773": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "ADD", - "path": "0" - }, - "7774": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "MSTORE", - "path": "0" - }, - "7775": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "SWAP1", - "path": "0" - }, - "7776": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "MLOAD", - "path": "0" - }, - "7777": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "SWAP1", - "path": "0" - }, - "7778": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "DUP2", - "path": "0" - }, - "7779": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "SWAP1", - "path": "0" - }, - "7780": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "SUB", - "path": "0" - }, - "7781": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "PUSH1", - "path": "0", - "value": "0x64" - }, - "7783": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "ADD", - "path": "0" - }, - "7784": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "SWAP1", - "path": "0" - }, - "7785": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "REVERT", - "path": "0" - }, - "7786": { - "op": "JUMPDEST" - }, - "7787": { - "op": "PUSH1", - "value": "0x0" - }, - "7789": { - "op": "DUP1" - }, - "7790": { - "op": "DUP6" - }, - "7791": { - "op": "DUP6" - }, - "7792": { - "op": "GT" - }, - "7793": { - "op": "ISZERO" - }, - "7794": { - "op": "PUSH2", - "value": "0x1E79" - }, - "7797": { - "op": "JUMPI" - }, - "7798": { - "op": "DUP2" - }, - "7799": { - "op": "DUP3" - }, - "7800": { - "op": "REVERT" - }, - "7801": { - "op": "JUMPDEST" - }, - "7802": { - "op": "DUP4" - }, - "7803": { - "op": "DUP7" - }, - "7804": { - "op": "GT" - }, - "7805": { - "op": "ISZERO" - }, - "7806": { - "op": "PUSH2", - "value": "0x1E85" - }, - "7809": { - "op": "JUMPI" - }, - "7810": { - "op": "DUP2" - }, - "7811": { - "op": "DUP3" - }, - "7812": { - "op": "REVERT" - }, - "7813": { - "op": "JUMPDEST" - }, - "7814": { - "op": "POP" - }, - "7815": { - "op": "POP" - }, - "7816": { - "op": "DUP3" - }, - "7817": { - "op": "ADD" - }, - "7818": { - "op": "SWAP4" - }, - "7819": { - "op": "SWAP2" - }, - "7820": { - "op": "SWAP1" - }, - "7821": { - "op": "SWAP3" - }, - "7822": { - "op": "SUB" - }, - "7823": { - "op": "SWAP2" - }, - "7824": { - "op": "POP" - }, - "7825": { - "op": "JUMP" - } - }, - "sha1": "53b4d60ed236763be15a4a4ffd6586f2d948babf", - "source": "// SPDX-License-Identifier: Apache-2.0.\npragma solidity ^0.6.12;\n\nimport \"contracts/common-contracts/src/libraries/NamedStorage.sol\";\nimport \"contracts/starkware/contracts/tokens/ERC20/IERC20.sol\";\nimport \"contracts/starkware/starknet/apps/token/solidity/StarknetTokenBridge.sol\";\nimport \"contracts/starkware/starknet/apps/token/solidity/Transfers.sol\";\n\ncontract StarknetERC20Bridge is StarknetTokenBridge {\n function deposit(uint256 amount, uint256 l2Recipient) external {\n require(\n IERC20(bridgedToken()).balanceOf(address(this)) + amount <= maxTotalBalance(),\n \"MAX_BALANCE_EXCEEDED\"\n );\n Transfers.transferIn(bridgedToken(), msg.sender, amount);\n sendMessage(amount, l2Recipient);\n }\n\n function withdraw(uint256 amount, address recipient) public override {\n consumeMessage(amount, recipient);\n Transfers.transferOut(bridgedToken(), recipient, amount);\n }\n}\n", - "sourceMap": "355:583:26:-:0;;;;;;;;;;;;;711:12:5;747:4;753:15;770:9;736:44;;;;;;-1:-1:-1;;;;;736:44:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;726:55;;;;;;711:70;;815:4;791:28;;;;;;865:2;859:4;852:16;838:40;355:583:26;;;;;;;;;", - "sourcePath": "contracts/starkware/starknet/apps/token/solidity/StarknetERC20Bridge.sol", - "type": "contract" -} diff --git a/src/contracts/StarknetERC20Bridge/StarknetERC20Bridge_STARKNET.json b/src/contracts/StarknetERC20Bridge/StarknetERC20Bridge_STARKNET.json deleted file mode 100644 index 59950f0a..00000000 --- a/src/contracts/StarknetERC20Bridge/StarknetERC20Bridge_STARKNET.json +++ /dev/null @@ -1,714 +0,0 @@ -{ - "bytecode": [ - "0x40780017fff7fff", - "0x1", - "0x208b7fff7fff7ffe", - "0x20780017fff7ffd", - "0x4", - "0x400780017fff7ffd", - "0x1", - "0x208b7fff7fff7ffe", - "0x400380007ffc7ffd", - "0x482680017ffc8000", - "0x1", - "0x208b7fff7fff7ffe", - "0x480a7ffb7fff8000", - "0x48297ffc80007ffd", - "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffffb", - "0x208b7fff7fff7ffe", - "0x480280017ffc8000", - "0x484480017fff8000", - "0x100000000000000000000000000000000", - "0x480280007ffc8000", - "0x40317fff7ffe7ffd", - "0x480280017ffc8000", - "0x482480017fff8000", - "0x800000000000010fffffffffffffffff7ffffffffffffef0000000000000001", - "0x20680017fff7fff", - "0xb", - "0x482680017ffc8000", - "0x2", - "0x480280007ffc8000", - "0x480680017fff8000", - "0x0", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffed", - "0x10780017fff7fff", - "0x9", - "0x482680017ffc8000", - "0x2", - "0x480280017ffc8000", - "0x480680017fff8000", - "0x8000000000000110000000000000000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffe4", - "0x480280017ffc8000", - "0x480280007ffc8000", - "0x208b7fff7fff7ffe", - "0x40780017fff7fff", - "0x2", - "0x480a7ffb7fff8000", - "0x480a7ffc7fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffe0", - "0x40137ffe7fff8000", - "0x40137fff7fff8001", - "0x48127ffd7fff8000", - "0x480a7ffd7fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffda", - "0x48317ffe80008000", - "0x20680017fff7fff", - "0x8", - "0x48127ffc7fff8000", - "0x480a80017fff8000", - "0x48127ffc7fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffcd", - "0x208b7fff7fff7ffe", - "0x48127ffc7fff8000", - "0x480a80007fff8000", - "0x48127ffb7fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffc7", - "0x208b7fff7fff7ffe", - "0x480680017fff8000", - "0x43616c6c436f6e7472616374", - "0x400280007ff97fff", - "0x400380017ff97ffa", - "0x400380027ff97ffb", - "0x400380037ff97ffc", - "0x400380047ff97ffd", - "0x482680017ff98000", - "0x7", - "0x480280057ff98000", - "0x480280067ff98000", - "0x208b7fff7fff7ffe", - "0x480680017fff8000", - "0x47657443616c6c657241646472657373", - "0x400280007ffd7fff", - "0x482680017ffd8000", - "0x2", - "0x480280017ffd8000", - "0x208b7fff7fff7ffe", - "0x480680017fff8000", - "0x53746f7261676552656164", - "0x400280007ffc7fff", - "0x400380017ffc7ffd", - "0x482680017ffc8000", - "0x3", - "0x480280027ffc8000", - "0x208b7fff7fff7ffe", - "0x480680017fff8000", - "0x53746f726167655772697465", - "0x400280007ffb7fff", - "0x400380017ffb7ffc", - "0x400380027ffb7ffd", - "0x482680017ffb8000", - "0x3", - "0x208b7fff7fff7ffe", - "0x480680017fff8000", - "0x53656e644d657373616765546f4c31", - "0x400280007ffa7fff", - "0x400380017ffa7ffb", - "0x400380027ffa7ffc", - "0x400380037ffa7ffd", - "0x482680017ffa8000", - "0x4", - "0x208b7fff7fff7ffe", - "0x40780017fff7fff", - "0x1", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff8a", - "0x40137fff7fff8000", - "0x4003800080007ffb", - "0x4003800180007ffc", - "0x4003800280007ffd", - "0x4826800180008000", - "0x3", - "0x480a7ff87fff8000", - "0x480a7ffa7fff8000", - "0x480680017fff8000", - "0x1c67057e2995950900dbf33db0f5fc9904f5a18aae4a3768f721c43efe5d288", - "0x4828800080007ffc", - "0x480a80007fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffc5", - "0x48127ffd7fff8000", - "0x480a7ff97fff8000", - "0x208b7fff7fff7ffe", - "0x40780017fff7fff", - "0x1", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff75", - "0x40137fff7fff8000", - "0x4003800080007ffb", - "0x4003800180007ffc", - "0x4003800280007ffd", - "0x4826800180008000", - "0x3", - "0x480a7ff87fff8000", - "0x480a7ffa7fff8000", - "0x480680017fff8000", - "0x3a07502a2e0e18ad6178ca530615148b9892d000199dbb29e402c41913c3d1a", - "0x4828800080007ffc", - "0x480a80007fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffb0", - "0x48127ffd7fff8000", - "0x480a7ff97fff8000", - "0x208b7fff7fff7ffe", - "0x480a7ffa7fff8000", - "0x480a7ffb7fff8000", - "0x480a7ffc7fff8000", - "0x480a7ffd7fff8000", - "0x1104800180018000", - "0x27", - "0x208b7fff7fff7ffe", - "0x482680017ffd8000", - "0x1", - "0x402a7ffd7ffc7fff", - "0x480280007ffb8000", - "0x480280017ffb8000", - "0x480280027ffb8000", - "0x480280007ffd8000", - "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffff3", - "0x40780017fff7fff", - "0x1", - "0x48127ffc7fff8000", - "0x48127ffc7fff8000", - "0x48127ffc7fff8000", - "0x480680017fff8000", - "0x0", - "0x48127ffb7fff8000", - "0x208b7fff7fff7ffe", - "0x480a7ffc7fff8000", - "0x480a7ffd7fff8000", - "0x480680017fff8000", - "0xbc9cb2b502047e302f811059d0c846a98f1390e9d19af78fc3873240d05901", - "0x208b7fff7fff7ffe", - "0x480a7ffc7fff8000", - "0x480a7ffd7fff8000", - "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffffa", - "0x480a7ffb7fff8000", - "0x48127ffe7fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff9a", - "0x48127ffe7fff8000", - "0x48127ff57fff8000", - "0x48127ff57fff8000", - "0x48127ffc7fff8000", - "0x208b7fff7fff7ffe", - "0x480a7ffb7fff8000", - "0x480a7ffc7fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffed", - "0x480a7ffa7fff8000", - "0x48127ffe7fff8000", - "0x480a7ffd7fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff94", - "0x48127ff67fff8000", - "0x48127ff67fff8000", - "0x208b7fff7fff7ffe", - "0x480a7ffb7fff8000", - "0x480a7ffc7fff8000", - "0x480a7ffd7fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffe5", - "0x208b7fff7fff7ffe", - "0x40780017fff7fff", - "0x1", - "0x4003800080007ffc", - "0x4826800180008000", - "0x1", - "0x480a7ffd7fff8000", - "0x4828800080007ffe", - "0x480a80007fff8000", - "0x208b7fff7fff7ffe", - "0x402b7ffd7ffc7ffd", - "0x480280007ffb8000", - "0x480280017ffb8000", - "0x480280027ffb8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffee", - "0x48127ffe7fff8000", - "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffff1", - "0x48127ff47fff8000", - "0x48127ff47fff8000", - "0x48127ffb7fff8000", - "0x48127ffb7fff8000", - "0x48127ffb7fff8000", - "0x208b7fff7fff7ffe", - "0x480a7ffc7fff8000", - "0x480a7ffd7fff8000", - "0x480680017fff8000", - "0x2d61a080f2e3fa7e5a8158531280f8e56e6d021fe226d23fcf31beda34f3ebd", - "0x208b7fff7fff7ffe", - "0x480a7ffc7fff8000", - "0x480a7ffd7fff8000", - "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffffa", - "0x480a7ffb7fff8000", - "0x48127ffe7fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff5e", - "0x48127ffe7fff8000", - "0x48127ff57fff8000", - "0x48127ff57fff8000", - "0x48127ffc7fff8000", - "0x208b7fff7fff7ffe", - "0x480a7ffb7fff8000", - "0x480a7ffc7fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffed", - "0x480a7ffa7fff8000", - "0x48127ffe7fff8000", - "0x480a7ffd7fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff58", - "0x48127ff67fff8000", - "0x48127ff67fff8000", - "0x208b7fff7fff7ffe", - "0x480a7ffb7fff8000", - "0x480a7ffc7fff8000", - "0x480a7ffd7fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffe5", - "0x208b7fff7fff7ffe", - "0x40780017fff7fff", - "0x1", - "0x4003800080007ffc", - "0x4826800180008000", - "0x1", - "0x480a7ffd7fff8000", - "0x4828800080007ffe", - "0x480a80007fff8000", - "0x208b7fff7fff7ffe", - "0x402b7ffd7ffc7ffd", - "0x480280007ffb8000", - "0x480280017ffb8000", - "0x480280027ffb8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffee", - "0x48127ffe7fff8000", - "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffff1", - "0x48127ff47fff8000", - "0x48127ff47fff8000", - "0x48127ffb7fff8000", - "0x48127ffb7fff8000", - "0x48127ffb7fff8000", - "0x208b7fff7fff7ffe", - "0x480a7ffc7fff8000", - "0x480a7ffd7fff8000", - "0x480680017fff8000", - "0xaada8f27d6c6c67ba06936e4515904e39a0eaa3fbfba588583198087be24fc", - "0x208b7fff7fff7ffe", - "0x480a7ffc7fff8000", - "0x480a7ffd7fff8000", - "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffffa", - "0x480a7ffb7fff8000", - "0x48127ffe7fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff22", - "0x48127ffe7fff8000", - "0x48127ff57fff8000", - "0x48127ff57fff8000", - "0x48127ffc7fff8000", - "0x208b7fff7fff7ffe", - "0x480a7ffb7fff8000", - "0x480a7ffc7fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffed", - "0x480a7ffa7fff8000", - "0x48127ffe7fff8000", - "0x480a7ffd7fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff1c", - "0x48127ff67fff8000", - "0x48127ff67fff8000", - "0x208b7fff7fff7ffe", - "0x480a7ffb7fff8000", - "0x480a7ffc7fff8000", - "0x480a7ffd7fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffe5", - "0x208b7fff7fff7ffe", - "0x40780017fff7fff", - "0x1", - "0x4003800080007ffc", - "0x4826800180008000", - "0x1", - "0x480a7ffd7fff8000", - "0x4828800080007ffe", - "0x480a80007fff8000", - "0x208b7fff7fff7ffe", - "0x402b7ffd7ffc7ffd", - "0x480280007ffb8000", - "0x480280017ffb8000", - "0x480280027ffb8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffee", - "0x48127ffe7fff8000", - "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffff1", - "0x48127ff47fff8000", - "0x48127ff47fff8000", - "0x48127ffb7fff8000", - "0x48127ffb7fff8000", - "0x48127ffb7fff8000", - "0x208b7fff7fff7ffe", - "0x40780017fff7fff", - "0x3", - "0x480a7ffa7fff8000", - "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffee7", - "0x48127ffe7fff8000", - "0x480a7ffb7fff8000", - "0x480a7ffc7fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff4a", - "0x40137fff7fff8000", - "0x400a80007fff7fe8", - "0x48127ffc7fff8000", - "0x48127ffc7fff8000", - "0x48127ffc7fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff7f", - "0x40137fff7fff8001", - "0x400780017fff8001", - "0x0", - "0x40137ffc7fff8002", - "0x48127ffe7fff8000", - "0x480a7ffd7fff8000", - "0x480680017fff8000", - "0x10000000000000000000000000000000000000000", - "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffeaa", - "0x480a7ffd7fff8000", - "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffe7c", - "0x480a80027fff8000", - "0x48127fbd7fff8000", - "0x48127ffa7fff8000", - "0x480a7ffd7fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff79", - "0x208b7fff7fff7ffe", - "0x482680017ffd8000", - "0x1", - "0x402a7ffd7ffc7fff", - "0x480280007ffb8000", - "0x480280017ffb8000", - "0x480280027ffb8000", - "0x480280007ffd8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffd5", - "0x40780017fff7fff", - "0x1", - "0x48127ffc7fff8000", - "0x48127ffc7fff8000", - "0x48127ffc7fff8000", - "0x480680017fff8000", - "0x0", - "0x48127ffb7fff8000", - "0x208b7fff7fff7ffe", - "0x40780017fff7fff", - "0x3", - "0x480a7ffa7fff8000", - "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffeb0", - "0x48127ffe7fff8000", - "0x480a7ffb7fff8000", - "0x480a7ffc7fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff13", - "0x40137fff7fff8000", - "0x400a80007fff7fe8", - "0x48127ffc7fff8000", - "0x48127ffc7fff8000", - "0x48127ffc7fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff9d", - "0x40137fff7fff8001", - "0x400780017fff8001", - "0x0", - "0x40137ffc7fff8002", - "0x480a7ffd7fff8000", - "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffe4b", - "0x480a80027fff8000", - "0x48127ff97fff8000", - "0x48127ff97fff8000", - "0x480a7ffd7fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff84", - "0x208b7fff7fff7ffe", - "0x482680017ffd8000", - "0x1", - "0x402a7ffd7ffc7fff", - "0x480280007ffb8000", - "0x480280017ffb8000", - "0x480280027ffb8000", - "0x480280007ffd8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffdb", - "0x40780017fff7fff", - "0x1", - "0x48127ffc7fff8000", - "0x48127ffc7fff8000", - "0x48127ffc7fff8000", - "0x480680017fff8000", - "0x0", - "0x48127ffb7fff8000", - "0x208b7fff7fff7ffe", - "0x40780017fff7fff", - "0x2", - "0x480a7ff87fff8000", - "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffe7f", - "0x40137ffe7fff8000", - "0x480a80007fff8000", - "0x480a7ff97fff8000", - "0x480a7ffa7fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff72", - "0x40137fff7fff8001", - "0x480a80017fff8000", - "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffe23", - "0x48127ff97fff8000", - "0x48127ffa7fff8000", - "0x480a80017fff8000", - "0x48127fdd7fff8000", - "0x480a7ffc7fff8000", - "0x480a7ffd7fff8000", - "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffea2", - "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffe16", - "0x480680017fff8000", - "0x0", - "0x400080007ffe7fff", - "0x400180017ffe7ffb", - "0x400180027ffe7ffc", - "0x400180037ffe7ffd", - "0x48127ffa7fff8000", - "0x48127fdb7fff8000", - "0x48127ff97fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff1d", - "0x48127ffc7fff8000", - "0x48127ffe7fff8000", - "0x480680017fff8000", - "0x4", - "0x48127fdf7fff8000", - "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffe70", - "0x48127ff57fff8000", - "0x48127ff57fff8000", - "0x208b7fff7fff7ffe", - "0x482680017ffd8000", - "0x3", - "0x402a7ffd7ffc7fff", - "0x480280007ffb8000", - "0x480280017ffb8000", - "0x480280027ffb8000", - "0x480280007ffd8000", - "0x480280017ffd8000", - "0x480280027ffd8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffca", - "0x40780017fff7fff", - "0x1", - "0x48127ffc7fff8000", - "0x48127ffc7fff8000", - "0x48127ffc7fff8000", - "0x480680017fff8000", - "0x0", - "0x48127ffb7fff8000", - "0x208b7fff7fff7ffe", - "0x40780017fff7fff", - "0x1", - "0x480a7ff77fff8000", - "0x480a7ff87fff8000", - "0x480a7ff97fff8000", - "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffef8", - "0x40137fff7fff7ffa", - "0x48127ffc7fff8000", - "0x48127ffc7fff8000", - "0x48127ffc7fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff2e", - "0x40137fff7fff8000", - "0x480a80007fff8000", - "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffddf", - "0x48127ff97fff8000", - "0x48127ffa7fff8000", - "0x480a80007fff8000", - "0x480a7ffb7fff8000", - "0x480a7ffc7fff8000", - "0x480a7ffd7fff8000", - "0x1104800180018000", - "0x800000000000010fffffffffffffffffffffffffffffffffffffffffffffe49", - "0x48127ffe7fff8000", - "0x48127fdf7fff8000", - "0x48127ffd7fff8000", - "0x208b7fff7fff7ffe", - "0x482680017ffd8000", - "0x4", - "0x402a7ffd7ffc7fff", - "0x480280007ffb8000", - "0x480280017ffb8000", - "0x480280027ffb8000", - "0x480280007ffd8000", - "0x480280017ffd8000", - "0x480280027ffd8000", - "0x480280037ffd8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffda", - "0x40780017fff7fff", - "0x1", - "0x48127ffc7fff8000", - "0x48127ffc7fff8000", - "0x48127ffc7fff8000", - "0x480680017fff8000", - "0x0", - "0x48127ffb7fff8000", - "0x208b7fff7fff7ffe" - ], - "abi": [ - { - "members": [ - { - "name": "low", - "offset": 0, - "type": "felt" - }, - { - "name": "high", - "offset": 1, - "type": "felt" - } - ], - "name": "Uint256", - "size": 2, - "type": "struct" - }, - { - "inputs": [ - { - "name": "governance_account_address", - "type": "felt" - } - ], - "name": "constructor", - "outputs": [], - "type": "constructor" - }, - { - "inputs": [], - "name": "governance_address", - "outputs": [ - { - "name": "res", - "type": "felt" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l1_contract_address", - "outputs": [ - { - "name": "res", - "type": "felt" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2_token_contract_address", - "outputs": [ - { - "name": "res", - "type": "felt" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "name": "l1_contract_address", - "type": "felt" - } - ], - "name": "set_l1_bridge_address", - "outputs": [], - "type": "function" - }, - { - "inputs": [ - { - "name": "l2_token_address", - "type": "felt" - } - ], - "name": "set_l2_token_address", - "outputs": [], - "type": "function" - }, - { - "inputs": [ - { - "name": "l1_recipient", - "type": "felt" - }, - { - "name": "amount", - "type": "Uint256" - } - ], - "name": "initiate_withdraw", - "outputs": [], - "type": "function" - }, - { - "inputs": [ - { - "name": "from_address", - "type": "felt" - }, - { - "name": "account", - "type": "felt" - }, - { - "name": "amount_low", - "type": "felt" - }, - { - "name": "amount_high", - "type": "felt" - } - ], - "name": "handle_deposit", - "outputs": [], - "type": "l1_handler" - } - ] -} diff --git a/src/contracts/StarknetEthBridge/StarknetEthBridge.js b/src/contracts/StarknetEthBridge/StarknetEthBridge.js deleted file mode 100644 index 8a953c59..00000000 --- a/src/contracts/StarknetEthBridge/StarknetEthBridge.js +++ /dev/null @@ -1,6 +0,0 @@ -import {web3} from '../../web3'; -import {abi} from './StarknetEthBridge.json'; - -const address = ''; - -export const starkNetEthBridge = new web3.eth.Contract(abi, address); diff --git a/src/contracts/StarknetEthBridge/StarknetEthBridge.json b/src/contracts/StarknetEthBridge/StarknetEthBridge.json deleted file mode 100644 index 60ba13ba..00000000 --- a/src/contracts/StarknetEthBridge/StarknetEthBridge.json +++ /dev/null @@ -1,26116 +0,0 @@ -{ - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - } - ], - "name": "LogDeposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "acceptedGovernor", - "type": "address" - } - ], - "name": "LogNewGovernorAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "nominatedGovernor", - "type": "address" - } - ], - "name": "LogNominatedGovernor", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "LogNominationCancelled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "removedGovernor", - "type": "address" - } - ], - "name": "LogRemovedGovernor", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "LogSetL2TokenContract", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "LogSetMaxDeposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "LogSetMaxTotalBalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "LogWithdrawal", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - } - ], - "name": "deposit", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "isFrozen", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "l2TokenContract_", - "type": "uint256" - } - ], - "name": "setL2TokenContract", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "maxDeposit_", - "type": "uint256" - } - ], - "name": "setMaxDeposit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "maxTotalBalance_", - "type": "uint256" - } - ], - "name": "setMaxTotalBalance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "starknetAcceptGovernance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "starknetCancelNomination", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "testGovernor", - "type": "address" - } - ], - "name": "starknetIsGovernor", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newGovernor", - "type": "address" - } - ], - "name": "starknetNominateNewGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "governorForRemoval", - "type": "address" - } - ], - "name": "starknetRemoveGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "recipient", - "type": "address" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "allSourcePaths": { - "0": "contracts/common-contracts/src/libraries/NamedStorage.sol", - "1": "contracts/scalable-dex/contracts/src/components/Governance.sol", - "10": "contracts/scalable-dex/contracts/src/interfaces/ProxySupport.sol", - "11": "contracts/scalable-dex/contracts/src/libraries/Common.sol", - "16": "contracts/starkware/cairo/eth/CairoConstants.sol", - "27": "contracts/starkware/starknet/apps/token/solidity/StarknetEthBridge.sol", - "28": "contracts/starkware/starknet/apps/token/solidity/StarknetTokenBridge.sol", - "29": "contracts/starkware/starknet/apps/token/solidity/StarknetTokenStorage.sol", - "31": "contracts/starkware/starknet/eth/IStarknetMessaging.sol", - "34": "contracts/starkware/starknet/eth/StarknetGovernance.sol", - "5": "contracts/scalable-dex/contracts/src/interfaces/BlockDirectCall.sol", - "6": "contracts/scalable-dex/contracts/src/interfaces/ContractInitializer.sol", - "8": "contracts/scalable-dex/contracts/src/interfaces/MGovernance.sol" - }, - "ast": { - "absolutePath": "contracts/starkware/starknet/apps/token/solidity/StarknetEthBridge.sol", - "exportedSymbols": { - "StarknetEthBridge": [2833] - }, - "id": 2834, - "license": "Apache-2.0.", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 2771, - "literals": ["solidity", "^", "0.6", ".12"], - "nodeType": "PragmaDirective", - "src": "40:24:27" - }, - { - "absolutePath": "contracts/scalable-dex/contracts/src/libraries/Common.sol", - "file": "contracts/scalable-dex/contracts/src/libraries/Common.sol", - "id": 2772, - "nodeType": "ImportDirective", - "scope": 2834, - "sourceUnit": 1096, - "src": "66:67:27", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "contracts/starkware/starknet/apps/token/solidity/StarknetTokenBridge.sol", - "file": "contracts/starkware/starknet/apps/token/solidity/StarknetTokenBridge.sol", - "id": 2773, - "nodeType": "ImportDirective", - "scope": 2834, - "sourceUnit": 3211, - "src": "134:82:27", - "symbolAliases": [], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 2774, - "name": "StarknetTokenBridge", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 3210, - "src": "248:19:27", - "typeDescriptions": { - "typeIdentifier": "t_contract$_StarknetTokenBridge_$3210", - "typeString": "contract StarknetTokenBridge" - } - }, - "id": 2775, - "nodeType": "InheritanceSpecifier", - "src": "248:19:27" - } - ], - "contractDependencies": [446, 627, 656, 699, 917, 3210, 3355, 4350], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 2833, - "linearizedBaseContracts": [2833, 3210, 917, 656, 627, 4350, 446, 699, 3355], - "name": "StarknetEthBridge", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 2778, - "libraryName": { - "contractScope": null, - "id": 2776, - "name": "Addresses", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1086, - "src": "280:9:27", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Addresses_$1086", - "typeString": "library Addresses" - } - }, - "nodeType": "UsingForDirective", - "src": "274:28:27", - "typeName": { - "id": 2777, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "294:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - }, - { - "body": { - "id": 2801, - "nodeType": "Block", - "src": "363:220:27", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2791, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2786, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -28, - "src": "472:4:27", - "typeDescriptions": { - "typeIdentifier": "t_contract$_StarknetEthBridge_$2833", - "typeString": "contract StarknetEthBridge" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_StarknetEthBridge_$2833", - "typeString": "contract StarknetEthBridge" - } - ], - "id": 2785, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "464:7:27", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 2784, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "464:7:27", - "typeDescriptions": { - "typeIdentifier": null, - "typeString": null - } - } - }, - "id": 2787, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "464:13:27", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 2788, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balance", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "464:21:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 2789, - "name": "maxTotalBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [3273, 3338], - "referencedDeclaration": 3273, - "src": "489:15:27", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", - "typeString": "function () view returns (uint256)" - } - }, - "id": 2790, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "489:17:27", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "464:42:27", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "4d41585f42414c414e43455f4558434545444544", - "id": 2792, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "508:22:27", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_d24ec41da52cc3754d98b259a05ea7ee3bf5b2f335e623d989d33ec6a80b1e79", - "typeString": "literal_string \"MAX_BALANCE_EXCEEDED\"" - }, - "value": "MAX_BALANCE_EXCEEDED" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_d24ec41da52cc3754d98b259a05ea7ee3bf5b2f335e623d989d33ec6a80b1e79", - "typeString": "literal_string \"MAX_BALANCE_EXCEEDED\"" - } - ], - "id": 2783, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [-18, -18], - "referencedDeclaration": -18, - "src": "456:7:27", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2793, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "456:75:27", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2794, - "nodeType": "ExpressionStatement", - "src": "456:75:27" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 2796, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "553:3:27", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 2797, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "value", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "553:9:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 2798, - "name": "l2Recipient", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2780, - "src": "564:11:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2795, - "name": "sendMessage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3127, - "src": "541:11:27", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (uint256,uint256)" - } - }, - "id": 2799, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "541:35:27", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2800, - "nodeType": "ExpressionStatement", - "src": "541:35:27" - } - ] - }, - "documentation": null, - "functionSelector": "b6b55f25", - "id": 2802, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "deposit", - "nodeType": "FunctionDefinition", - "overrides": null, - "parameters": { - "id": 2781, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2780, - "mutability": "mutable", - "name": "l2Recipient", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2802, - "src": "325:19:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2779, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "325:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "324:21:27" - }, - "returnParameters": { - "id": 2782, - "nodeType": "ParameterList", - "parameters": [], - "src": "363:0:27" - }, - "scope": 2833, - "src": "308:275:27", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [3197], - "body": { - "id": 2831, - "nodeType": "Block", - "src": "658:216:27", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2811, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2804, - "src": "683:6:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 2812, - "name": "recipient", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2806, - "src": "691:9:27", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2810, - "name": "consumeMessage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3190, - "src": "668:14:27", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$", - "typeString": "function (uint256,address)" - } - }, - "id": 2813, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "668:33:27", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2814, - "nodeType": "ExpressionStatement", - "src": "668:33:27" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 2821, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 2816, - "name": "recipient", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2806, - "src": "774:9:27", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "307830", - "id": 2819, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "795:3:27", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0x0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 2818, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "787:7:27", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 2817, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "787:7:27", - "typeDescriptions": { - "typeIdentifier": null, - "typeString": null - } - } - }, - "id": 2820, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "787:12:27", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "774:25:27", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "494e56414c49445f524543495049454e54", - "id": 2822, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "801:19:27", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_5e7bf34c5f9e77c6f415365fc02ea1195419ccebda18d14265f0c098f3687483", - "typeString": "literal_string \"INVALID_RECIPIENT\"" - }, - "value": "INVALID_RECIPIENT" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_5e7bf34c5f9e77c6f415365fc02ea1195419ccebda18d14265f0c098f3687483", - "typeString": "literal_string \"INVALID_RECIPIENT\"" - } - ], - "id": 2815, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [-18, -18], - "referencedDeclaration": -18, - "src": "766:7:27", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2823, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "766:55:27", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2824, - "nodeType": "ExpressionStatement", - "src": "766:55:27" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2828, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2804, - "src": "860:6:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 2825, - "name": "recipient", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2806, - "src": "831:9:27", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 2827, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "performEthTransfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 957, - "src": "831:28:27", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$bound_to$_t_address_$", - "typeString": "function (address,uint256)" - } - }, - "id": 2829, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "831:36:27", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2830, - "nodeType": "ExpressionStatement", - "src": "831:36:27" - } - ] - }, - "documentation": null, - "functionSelector": "00f714ce", - "id": 2832, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "withdraw", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 2808, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "649:8:27" - }, - "parameters": { - "id": 2807, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2804, - "mutability": "mutable", - "name": "amount", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2832, - "src": "607:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2803, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "607:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2806, - "mutability": "mutable", - "name": "recipient", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 2832, - "src": "623:17:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2805, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "623:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "606:35:27" - }, - "returnParameters": { - "id": 2809, - "nodeType": "ParameterList", - "parameters": [], - "src": "658:0:27" - }, - "scope": 2833, - "src": "589:285:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - } - ], - "scope": 2834, - "src": "218:658:27" - } - ], - "src": "40:837:27" - }, - "bytecode": "60a060405234801561001057600080fd5b50600030425a60405160200180846001600160a01b0316815260200183815260200182815260200193505050506040516020818303038152906040528051906020012090508060808181525050602a815550608051611a9b61007c600039806103c45250611a9b6000f3fe6080604052600436106100c15760003560e01c8063894ecf041161007f578063a90e32b811610059578063a90e32b8146102a9578063b6b55f25146102d3578063bb371fdd146102f0578063e37fec251461031a576100c1565b8063894ecf041461023757806391a66a2614610261578063946be3ed14610294576100c1565b8062f714ce146100c657806301a01590146101015780632e1a7d4d1461014857806333eeb14714610172578063439fab911461018757806384f921cd14610204575b600080fd5b3480156100d257600080fd5b506100ff600480360360408110156100e957600080fd5b50803590602001356001600160a01b031661032f565b005b34801561010d57600080fd5b506101346004803603602081101561012457600080fd5b50356001600160a01b031661039f565b604080519115158252519081900360200190f35b34801561015457600080fd5b506100ff6004803603602081101561016b57600080fd5b50356103b0565b34801561017e57600080fd5b506101346103bd565b34801561019357600080fd5b506100ff600480360360208110156101aa57600080fd5b8101906020810181356401000000008111156101c557600080fd5b8201836020820111156101d757600080fd5b803590602001918460018302840111640100000000831117156101f957600080fd5b5090925090506103c2565b34801561021057600080fd5b506100ff6004803603602081101561022757600080fd5b50356001600160a01b0316610595565b34801561024357600080fd5b506100ff6004803603602081101561025a57600080fd5b503561059e565b34801561026d57600080fd5b506100ff6004803603602081101561028457600080fd5b50356001600160a01b0316610626565b3480156102a057600080fd5b506100ff61062f565b3480156102b557600080fd5b506100ff600480360360208110156102cc57600080fd5b5035610639565b6100ff600480360360208110156102e957600080fd5b50356107c4565b3480156102fc57600080fd5b506100ff6004803603602081101561031357600080fd5b5035610821565b34801561032657600080fd5b506100ff6108a9565b61033982826108b1565b6001600160a01b038116610388576040805162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b604482015290519081900360640190fd5b61039b6001600160a01b03821683610a5f565b5050565b60006103aa82610b00565b92915050565b6103ba813361032f565b50565b600090565b7f00000000000000000000000000000000000000000000000000000000000000008054908115610432576040805162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b604482015290519081900360640190fd5b5050600061043e6103bd565b60209081029150810180831015610492576040805162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b604482015290519081900360640190fd5b60006104a082848688611959565b60208110156104ae57600080fd5b50356001600160a01b031690503660006104ca8582888a611959565b915091506104d8828261039b565b3660006104e78887818c611959565b90925090506001600160a01b0385161561051257610506858383610b2f565b5050505050505061039b565b61051a610d86565b1561056e578015610569576040805162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b604482015290519081900360640190fd5b61058a565b6105788282610da1565b6105828282610dea565b61058a610e2d565b505050505050505050565b6103ba81610eaf565b6105a733610b00565b6105ea576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517fa9aec19ec61c04ae0a4a1498ab6ce04cbd68b3d54c47888a45eb2bd37caf06bc9181900360200190a16103ba81610ffc565b6103ba8161101e565b61063761111b565b565b6106416111e8565b15610693576040805162461bcd60e51b815260206004820152601d60248201527f4c325f544f4b454e5f434f4e54524143545f414c52454144595f534554000000604482015290519081900360640190fd5b80806106e0576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b600167080000000000001160c01b01811061073c576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b61074533610b00565b610788576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805183815290517f49774a785afe45b60857497c0aff8733f202ca7e75329ad6408073564efea6df9181900360200190a161039b82611210565b6107cc611232565b471115610817576040805162461bcd60e51b815260206004820152601460248201527313505617d09053105390d157d15610d15151115160621b604482015290519081900360640190fd5b6103ba3482611255565b61082a33610b00565b61086d576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517faf474b5afcf11bd99dc9fc7f499e6ab368d650bf7ef23993f0d61bd9ad7626519181900360200190a16103ba81611543565b610637611565565b604080516001600160a01b03831681526020810184905281517fb4214c8c54fc7442f36d3682f59aebaf09358a4431835b30efb29d52cf9e1e91929181900390910190a160408051600480825260a082019092526060916020820160808036833701905050905060008160008151811061092757fe5b602002602001018181525050816001600160a01b03168160018151811061094a57fe5b6020908102919091010152600160801b83068160028151811061096957fe5b6020908102919091010152600160801b83048160038151811061098857fe5b60200260200101818152505061099c6115fc565b6001600160a01b0316632c9dd5c06109b26111e8565b836040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015610a085781810151838201526020016109f0565b505050509050019350505050602060405180830381600087803b158015610a2e57600080fd5b505af1158015610a42573d6000803e3d6000fd5b505050506040513d6020811015610a5857600080fd5b5050505050565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114610aaa576040519150601f19603f3d011682016040523d82523d6000602084013e610aaf565b606091505b5050905080610afb576040805162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b604482015290519081900360640190fd5b505050565b600080610b0b61161f565b6001600160a01b039390931660009081526020939093525050604090205460ff1690565b610b41836001600160a01b03166116ce565b610b87576040805162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b604482015290519081900360640190fd5b60006060846001600160a01b031663439fab9160e01b85856040516024018080602001828103825284848281815260200192508082843760008382015260408051601f909201601f1990811690940182810390940182529283526020810180516001600160e01b03166001600160e01b0319909916989098178852915182519297909650869550935090915081905083835b60208310610c385780518252601f199092019160209182019101610c19565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610c98576040519150601f19603f3d011682016040523d82523d6000602084013e610c9d565b606091505b5091509150818190610d2d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610cf2578181015183820152602001610cda565b50505050905090810190601f168015610d1f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508051819015610d7e5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610cf2578181015183820152602001610cda565b505050505050565b600080610d916115fc565b6001600160a01b03161415905090565b6040811461039b576040805162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b604482015290519081900360640190fd5b60008083836040811015610dfd57600080fd5b506001600160a01b03813581169350602090910135169050610e1e826116d4565b610e27816116f6565b50505050565b6000610e3761161f565b6001810154909150600160a01b900460ff1615610e91576040805162461bcd60e51b81526020600482015260136024820152721053149150511657d253925512505312569151606a1b604482015290519081900360640190fd5b60018101805460ff60a01b1916600160a01b1790556103ba33611718565b610eb833610b00565b610efb576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b336001600160a01b0382161415610f50576040805162461bcd60e51b8152602060048201526014602482015273474f5645524e4f525f53454c465f52454d4f564560601b604482015290519081900360640190fd5b6000610f5a61161f565b9050610f6582610b00565b610fa5576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa3a7ab22a92727a960a11b604482015290519081900360640190fd5b6001600160a01b03821660008181526020838152604091829020805460ff19169055815192835290517fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a295999281900390910190a15050565b6103ba6040518060600160405280602781526020016119f56027913982611798565b61102733610b00565b61106a576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b600061107461161f565b905061107f82610b00565b156110c4576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b6001810180546001600160a01b0384166001600160a01b0319909116811790915560408051918252517f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a69181900360200190a15050565b600061112561161f565b60018101549091506001600160a01b03163314611189576040805162461bcd60e51b815260206004820152601760248201527f4f4e4c595f43414e4449444154455f474f5645524e4f52000000000000000000604482015290519081900360640190fd5b60018101546111a0906001600160a01b0316611718565b6001810180546001600160a01b03191690556040805133815290517fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d29181900360200190a150565b600061120b6040518060600160405280602781526020016119ce60279139611812565b905090565b6103ba6040518060600160405280602781526020016119ce602791398261188f565b600061120b6040518060600160405280602781526020016119f560279139611812565b61125d6111e8565b6112ae576040805162461bcd60e51b815260206004820152601960248201527f4c325f544f4b454e5f434f4e54524143545f4e4f545f53455400000000000000604482015290519081900360640190fd5b80806112fb576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b600167080000000000001160c01b018110611357576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b61135f6118e2565b83111561139d5760405162461bcd60e51b81526004018080602001828103825260248152602001806119aa6024913960400191505060405180910390fd5b604080513381526020810185905280820184905290517f9dbb0e7dda3e09710ce75b801addc87cf9d9c6c581641b3275fca409ad086c629181900360600190a160408051600380825260808201909252606091602082018380368337019050509050828160008151811061140d57fe5b6020908102919091010152600160801b84068160018151811061142c57fe5b6020908102919091010152600160801b84048160028151811061144b57fe5b60200260200101818152505061145f6115fc565b6001600160a01b0316633e3aa6c56114756111e8565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5846040518463ffffffff1660e01b81526004018084815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156114f25781810151838201526020016114da565b50505050905001945050505050602060405180830381600087803b15801561151957600080fd5b505af115801561152d573d6000803e3d6000fd5b505050506040513d6020811015610d7e57600080fd5b6103ba604051806060016040528060218152602001611a1c6021913982611798565b61156e33610b00565b6115b1576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b60006115bb61161f565b6001810180546001600160a01b03191690556040519091507f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f590600090a150565b600061120b60405180606001604052806028815260200161198260289139611812565b6000806040518060400160405280601c81526020017f535441524b4e45545f312e305f474f5645524e414e43455f494e464f000000008152506040516020018082805190602001908083835b6020831061168a5780518252601f19909201916020918201910161166b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508091505090565b3b151590565b6103ba604051806060016040528060298152602001611a3d6029913982611905565b6103ba6040518060600160405280602881526020016119826028913982611905565b61172181610b00565b15611766576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b600061177061161f565b6001600160a01b0390921660009081526020929092525060409020805460ff19166001179055565b6000826040516020018082805190602001908083835b602083106117cd5780518252601f1990920191602091820191016117ae565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050818155505050565b600080826040516020018082805190602001908083835b602083106118485780518252601f199092019160209182019101611829565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508054915050919050565b61189882611812565b156118d8576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b61039b8282611798565b600061120b604051806060016040528060218152602001611a1c60219139611812565b600061191083611812565b6001600160a01b0316146118d8576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b60008085851115611968578182fd5b83861115611974578182fd5b505082019391909203915056fe535441524b4e45545f544f4b454e5f4252494447455f4d4553534147494e475f434f4e54524143545452414e534645525f544f5f535441524b4e45545f414d4f554e545f4558434545444544535441524b4e45545f544f4b454e5f4252494447455f4c325f544f4b454e5f434f4e5452414354535441524b4e45545f544f4b454e5f4252494447455f4d41585f544f54414c5f42414c414e4345535441524b4e45545f544f4b454e5f4252494447455f4d41585f4445504f534954535441524b4e45545f45524332305f544f4b454e5f4252494447455f544f4b454e5f41444452455353a26469706673582212209959fc54e8a44b980bf871fb9dea17ddd1c7307656ec3058927e288962d49aec64736f6c634300060c0033", - "bytecodeSha1": "8e413971359aefbd513923ad46960eec06a03904", - "compiler": { - "evm_version": "istanbul", - "optimizer": { - "enabled": true, - "runs": 200 - }, - "version": "0.6.12+commit.27d51765" - }, - "contractName": "StarknetEthBridge", - "coverageMap": { - "branches": { - "0": { - "NamedStorage.setAddressValueOnce": { - "89": [2262, 2299, true] - }, - "NamedStorage.setUintValueOnce": { - "88": [1665, 1688, true] - } - }, - "1": { - "Governance.acceptGovernance": { - "85": [3393, 3428, true] - }, - "Governance.addGovernor": { - "86": [3019, 3043, true] - }, - "Governance.initGovernance": { - "81": [1646, 1662, true] - }, - "Governance.nominateNewGovernor": { - "84": [2488, 2512, true] - }, - "Governance.removeGovernor": { - "82": [3841, 3873, true], - "83": [3980, 4010, true] - } - }, - "10": { - "ProxySupport.callExternalInitializer": { - "94": [2645, 2681, true], - "95": [2961, 2968, true], - "96": [3007, 3029, true] - }, - "ProxySupport.initialize": { - "90": [1674, 1705, true], - "91": [2095, 2121, false], - "92": [2227, 2242, false], - "93": [2266, 2286, true] - } - }, - "11": { - "Addresses.performEthTransfer": { - "79": [537, 544, true] - } - }, - "16": {}, - "27": { - "StarknetEthBridge.deposit": { - "78": [464, 506, true] - }, - "StarknetEthBridge.withdraw": { - "77": [774, 799, true] - } - }, - "28": { - "StarknetTokenBridge.sendMessage": { - "98": [3454, 3476, true] - }, - "StarknetTokenBridge.validateInitData": { - "97": [1297, 1314, true] - } - }, - "29": {}, - "31": {}, - "34": {}, - "5": { - "ProxySupport.initialize": { - "80": [1178, 1197, true] - } - }, - "6": {}, - "8": { - "Governance.cancelNomination": { - "87": [434, 456, true] - } - } - }, - "statements": { - "0": { - "NamedStorage.setAddressValueOnce": { - "76": [2254, 2315] - }, - "NamedStorage.setUintValueOnce": { - "73": [1657, 1704], - "74": [1714, 1739] - } - }, - "1": { - "Governance.acceptGovernance": { - "51": [3385, 3456], - "52": [3492, 3526], - "53": [3536, 3572], - "54": [3644, 3683] - }, - "Governance.addGovernor": { - "71": [3011, 3064], - "72": [3138, 3180] - }, - "Governance.cancelNomination": { - "65": [2244, 2280], - "66": [2290, 2319] - }, - "Governance.initGovernance": { - "40": [1638, 1686], - "41": [1696, 1718], - "42": [1804, 1827] - }, - "Governance.isGovernor": { - "32": [1994, 2037] - }, - "Governance.nominateNewGovernor": { - "48": [2480, 2533], - "49": [2543, 2578], - "50": [2588, 2626] - }, - "Governance.removeGovernor": { - "43": [3833, 3898], - "44": [3972, 4027], - "45": [4037, 4087], - "46": [4097, 4140] - } - }, - "10": { - "ProxySupport.callExternalInitializer": { - "33": [2637, 2704], - "34": [2953, 2989], - "35": [2999, 3050] - }, - "ProxySupport.initialize": { - "5": [1666, 1729], - "6": [1891, 1940], - "7": [2137, 2182], - "8": [2196, 2203], - "9": [2258, 2311], - "10": [2391, 2417], - "11": [2431, 2464], - "12": [2478, 2494] - } - }, - "11": { - "Addresses.isContract": { - "68": [329, 344] - }, - "Addresses.performEthTransfer": { - "31": [529, 568] - } - }, - "16": {}, - "27": { - "StarknetEthBridge.deposit": { - "20": [456, 531], - "21": [541, 576] - }, - "StarknetEthBridge.withdraw": { - "0": [668, 701], - "1": [766, 821], - "2": [831, 867] - } - }, - "28": { - "StarknetTokenBridge.consumeMessage": { - "25": [3935, 3972], - "26": [4036, 4071], - "27": [4081, 4112], - "28": [4122, 4161], - "29": [4171, 4210], - "30": [4221, 4289] - }, - "StarknetTokenBridge.initializeContractState": { - "38": [1843, 1870], - "39": [1880, 1917] - }, - "StarknetTokenBridge.isInitialized": { - "36": [1044, 1095] - }, - "StarknetTokenBridge.sendMessage": { - "58": [3446, 3517], - "59": [3527, 3575], - "60": [3639, 3663], - "61": [3673, 3712], - "62": [3722, 3761], - "63": [3771, 3844] - }, - "StarknetTokenBridge.setL2TokenContract": { - "18": [2846, 2890], - "19": [2900, 2933] - }, - "StarknetTokenBridge.setMaxDeposit": { - "22": [3212, 3246], - "23": [3256, 3279] - }, - "StarknetTokenBridge.setMaxTotalBalance": { - "14": [3034, 3078], - "15": [3088, 3121] - }, - "StarknetTokenBridge.validateInitData": { - "37": [1289, 1336] - }, - "StarknetTokenBridge.withdraw": { - "4": [4429, 4457] - } - }, - "29": { - "StarknetTokenStorage.bridgedToken": { - "69": [1545, 1607] - }, - "StarknetTokenStorage.l2TokenContract": { - "55": [965, 1011], - "56": [1679, 1729] - }, - "StarknetTokenStorage.maxDeposit": { - "64": [1796, 1845], - "75": [1088, 1137] - }, - "StarknetTokenStorage.maxTotalBalance": { - "47": [1917, 1972], - "57": [1219, 1274] - }, - "StarknetTokenStorage.messagingContract": { - "67": [1369, 1448], - "70": [2061, 2137] - } - }, - "31": {}, - "34": { - "StarknetGovernance.starknetAcceptGovernance": { - "17": [1053, 1071] - }, - "StarknetGovernance.starknetCancelNomination": { - "24": [1139, 1157] - }, - "StarknetGovernance.starknetIsGovernor": { - "3": [706, 737] - }, - "StarknetGovernance.starknetNominateNewGovernor": { - "16": [827, 859] - }, - "StarknetGovernance.starknetRemoveGovernor": { - "13": [951, 985] - } - }, - "5": {}, - "6": {}, - "8": {} - } - }, - "dependencies": [ - "Addresses", - "BlockDirectCall", - "CairoConstants", - "ContractInitializer", - "Governance", - "IStarknetMessaging", - "MGovernance", - "NamedStorage", - "ProxySupport", - "StarknetGovernance", - "StarknetTokenBridge", - "StarknetTokenStorage" - ], - "deployedBytecode": "6080604052600436106100c15760003560e01c8063894ecf041161007f578063a90e32b811610059578063a90e32b8146102a9578063b6b55f25146102d3578063bb371fdd146102f0578063e37fec251461031a576100c1565b8063894ecf041461023757806391a66a2614610261578063946be3ed14610294576100c1565b8062f714ce146100c657806301a01590146101015780632e1a7d4d1461014857806333eeb14714610172578063439fab911461018757806384f921cd14610204575b600080fd5b3480156100d257600080fd5b506100ff600480360360408110156100e957600080fd5b50803590602001356001600160a01b031661032f565b005b34801561010d57600080fd5b506101346004803603602081101561012457600080fd5b50356001600160a01b031661039f565b604080519115158252519081900360200190f35b34801561015457600080fd5b506100ff6004803603602081101561016b57600080fd5b50356103b0565b34801561017e57600080fd5b506101346103bd565b34801561019357600080fd5b506100ff600480360360208110156101aa57600080fd5b8101906020810181356401000000008111156101c557600080fd5b8201836020820111156101d757600080fd5b803590602001918460018302840111640100000000831117156101f957600080fd5b5090925090506103c2565b34801561021057600080fd5b506100ff6004803603602081101561022757600080fd5b50356001600160a01b0316610595565b34801561024357600080fd5b506100ff6004803603602081101561025a57600080fd5b503561059e565b34801561026d57600080fd5b506100ff6004803603602081101561028457600080fd5b50356001600160a01b0316610626565b3480156102a057600080fd5b506100ff61062f565b3480156102b557600080fd5b506100ff600480360360208110156102cc57600080fd5b5035610639565b6100ff600480360360208110156102e957600080fd5b50356107c4565b3480156102fc57600080fd5b506100ff6004803603602081101561031357600080fd5b5035610821565b34801561032657600080fd5b506100ff6108a9565b61033982826108b1565b6001600160a01b038116610388576040805162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b604482015290519081900360640190fd5b61039b6001600160a01b03821683610a5f565b5050565b60006103aa82610b00565b92915050565b6103ba813361032f565b50565b600090565b7f00000000000000000000000000000000000000000000000000000000000000008054908115610432576040805162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b604482015290519081900360640190fd5b5050600061043e6103bd565b60209081029150810180831015610492576040805162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b604482015290519081900360640190fd5b60006104a082848688611959565b60208110156104ae57600080fd5b50356001600160a01b031690503660006104ca8582888a611959565b915091506104d8828261039b565b3660006104e78887818c611959565b90925090506001600160a01b0385161561051257610506858383610b2f565b5050505050505061039b565b61051a610d86565b1561056e578015610569576040805162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b604482015290519081900360640190fd5b61058a565b6105788282610da1565b6105828282610dea565b61058a610e2d565b505050505050505050565b6103ba81610eaf565b6105a733610b00565b6105ea576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517fa9aec19ec61c04ae0a4a1498ab6ce04cbd68b3d54c47888a45eb2bd37caf06bc9181900360200190a16103ba81610ffc565b6103ba8161101e565b61063761111b565b565b6106416111e8565b15610693576040805162461bcd60e51b815260206004820152601d60248201527f4c325f544f4b454e5f434f4e54524143545f414c52454144595f534554000000604482015290519081900360640190fd5b80806106e0576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b600167080000000000001160c01b01811061073c576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b61074533610b00565b610788576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805183815290517f49774a785afe45b60857497c0aff8733f202ca7e75329ad6408073564efea6df9181900360200190a161039b82611210565b6107cc611232565b471115610817576040805162461bcd60e51b815260206004820152601460248201527313505617d09053105390d157d15610d15151115160621b604482015290519081900360640190fd5b6103ba3482611255565b61082a33610b00565b61086d576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517faf474b5afcf11bd99dc9fc7f499e6ab368d650bf7ef23993f0d61bd9ad7626519181900360200190a16103ba81611543565b610637611565565b604080516001600160a01b03831681526020810184905281517fb4214c8c54fc7442f36d3682f59aebaf09358a4431835b30efb29d52cf9e1e91929181900390910190a160408051600480825260a082019092526060916020820160808036833701905050905060008160008151811061092757fe5b602002602001018181525050816001600160a01b03168160018151811061094a57fe5b6020908102919091010152600160801b83068160028151811061096957fe5b6020908102919091010152600160801b83048160038151811061098857fe5b60200260200101818152505061099c6115fc565b6001600160a01b0316632c9dd5c06109b26111e8565b836040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015610a085781810151838201526020016109f0565b505050509050019350505050602060405180830381600087803b158015610a2e57600080fd5b505af1158015610a42573d6000803e3d6000fd5b505050506040513d6020811015610a5857600080fd5b5050505050565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114610aaa576040519150601f19603f3d011682016040523d82523d6000602084013e610aaf565b606091505b5050905080610afb576040805162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b604482015290519081900360640190fd5b505050565b600080610b0b61161f565b6001600160a01b039390931660009081526020939093525050604090205460ff1690565b610b41836001600160a01b03166116ce565b610b87576040805162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b604482015290519081900360640190fd5b60006060846001600160a01b031663439fab9160e01b85856040516024018080602001828103825284848281815260200192508082843760008382015260408051601f909201601f1990811690940182810390940182529283526020810180516001600160e01b03166001600160e01b0319909916989098178852915182519297909650869550935090915081905083835b60208310610c385780518252601f199092019160209182019101610c19565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610c98576040519150601f19603f3d011682016040523d82523d6000602084013e610c9d565b606091505b5091509150818190610d2d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610cf2578181015183820152602001610cda565b50505050905090810190601f168015610d1f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508051819015610d7e5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610cf2578181015183820152602001610cda565b505050505050565b600080610d916115fc565b6001600160a01b03161415905090565b6040811461039b576040805162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b604482015290519081900360640190fd5b60008083836040811015610dfd57600080fd5b506001600160a01b03813581169350602090910135169050610e1e826116d4565b610e27816116f6565b50505050565b6000610e3761161f565b6001810154909150600160a01b900460ff1615610e91576040805162461bcd60e51b81526020600482015260136024820152721053149150511657d253925512505312569151606a1b604482015290519081900360640190fd5b60018101805460ff60a01b1916600160a01b1790556103ba33611718565b610eb833610b00565b610efb576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b336001600160a01b0382161415610f50576040805162461bcd60e51b8152602060048201526014602482015273474f5645524e4f525f53454c465f52454d4f564560601b604482015290519081900360640190fd5b6000610f5a61161f565b9050610f6582610b00565b610fa5576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa3a7ab22a92727a960a11b604482015290519081900360640190fd5b6001600160a01b03821660008181526020838152604091829020805460ff19169055815192835290517fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a295999281900390910190a15050565b6103ba6040518060600160405280602781526020016119f56027913982611798565b61102733610b00565b61106a576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b600061107461161f565b905061107f82610b00565b156110c4576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b6001810180546001600160a01b0384166001600160a01b0319909116811790915560408051918252517f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a69181900360200190a15050565b600061112561161f565b60018101549091506001600160a01b03163314611189576040805162461bcd60e51b815260206004820152601760248201527f4f4e4c595f43414e4449444154455f474f5645524e4f52000000000000000000604482015290519081900360640190fd5b60018101546111a0906001600160a01b0316611718565b6001810180546001600160a01b03191690556040805133815290517fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d29181900360200190a150565b600061120b6040518060600160405280602781526020016119ce60279139611812565b905090565b6103ba6040518060600160405280602781526020016119ce602791398261188f565b600061120b6040518060600160405280602781526020016119f560279139611812565b61125d6111e8565b6112ae576040805162461bcd60e51b815260206004820152601960248201527f4c325f544f4b454e5f434f4e54524143545f4e4f545f53455400000000000000604482015290519081900360640190fd5b80806112fb576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b600167080000000000001160c01b018110611357576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b61135f6118e2565b83111561139d5760405162461bcd60e51b81526004018080602001828103825260248152602001806119aa6024913960400191505060405180910390fd5b604080513381526020810185905280820184905290517f9dbb0e7dda3e09710ce75b801addc87cf9d9c6c581641b3275fca409ad086c629181900360600190a160408051600380825260808201909252606091602082018380368337019050509050828160008151811061140d57fe5b6020908102919091010152600160801b84068160018151811061142c57fe5b6020908102919091010152600160801b84048160028151811061144b57fe5b60200260200101818152505061145f6115fc565b6001600160a01b0316633e3aa6c56114756111e8565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5846040518463ffffffff1660e01b81526004018084815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156114f25781810151838201526020016114da565b50505050905001945050505050602060405180830381600087803b15801561151957600080fd5b505af115801561152d573d6000803e3d6000fd5b505050506040513d6020811015610d7e57600080fd5b6103ba604051806060016040528060218152602001611a1c6021913982611798565b61156e33610b00565b6115b1576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b60006115bb61161f565b6001810180546001600160a01b03191690556040519091507f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f590600090a150565b600061120b60405180606001604052806028815260200161198260289139611812565b6000806040518060400160405280601c81526020017f535441524b4e45545f312e305f474f5645524e414e43455f494e464f000000008152506040516020018082805190602001908083835b6020831061168a5780518252601f19909201916020918201910161166b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508091505090565b3b151590565b6103ba604051806060016040528060298152602001611a3d6029913982611905565b6103ba6040518060600160405280602881526020016119826028913982611905565b61172181610b00565b15611766576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b600061177061161f565b6001600160a01b0390921660009081526020929092525060409020805460ff19166001179055565b6000826040516020018082805190602001908083835b602083106117cd5780518252601f1990920191602091820191016117ae565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050818155505050565b600080826040516020018082805190602001908083835b602083106118485780518252601f199092019160209182019101611829565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508054915050919050565b61189882611812565b156118d8576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b61039b8282611798565b600061120b604051806060016040528060218152602001611a1c60219139611812565b600061191083611812565b6001600160a01b0316146118d8576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b60008085851115611968578182fd5b83861115611974578182fd5b505082019391909203915056fe535441524b4e45545f544f4b454e5f4252494447455f4d4553534147494e475f434f4e54524143545452414e534645525f544f5f535441524b4e45545f414d4f554e545f4558434545444544535441524b4e45545f544f4b454e5f4252494447455f4c325f544f4b454e5f434f4e5452414354535441524b4e45545f544f4b454e5f4252494447455f4d41585f544f54414c5f42414c414e4345535441524b4e45545f544f4b454e5f4252494447455f4d41585f4445504f534954535441524b4e45545f45524332305f544f4b454e5f4252494447455f544f4b454e5f41444452455353a26469706673582212209959fc54e8a44b980bf871fb9dea17ddd1c7307656ec3058927e288962d49aec64736f6c634300060c0033", - "deployedSourceMap": "218:658:27:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;589:285;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;589:285:27;;;;;;-1:-1:-1;;;;;589:285:27;;:::i;:::-;;617:127:34;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;617:127:34;-1:-1:-1;;;;;617:127:34;;:::i;:::-;;;;;;;;;;;;;;;;;;4376:88:28;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4376:88:28;;:::i;775:86:10:-;;;;;;;;;;;;;:::i;1483:1028::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1483:1028:10;;-1:-1:-1;1483:1028:10;-1:-1:-1;1483:1028:10;:::i;872:120:34:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;872:120:34;-1:-1:-1;;;;;872:120:34;;:::i;2946:182:28:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2946:182:28;;:::i;750:116:34:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;750:116:34;-1:-1:-1;;;;;750:116:34;;:::i;998:80::-;;;;;;;;;;;;;:::i;2665:275:28:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2665:275:28;;:::i;308::27:-;;;;;;;;;;;;;;;;-1:-1:-1;308:275:27;;:::i;3134:152:28:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3134:152:28;;:::i;1084:80:34:-;;;;;;;;;;;;;:::i;589:285:27:-;668:33;683:6;691:9;668:14;:33::i;:::-;-1:-1:-1;;;;;774:25:27;;766:55;;;;;-1:-1:-1;;;766:55:27;;;;;;;;;;;;-1:-1:-1;;;766:55:27;;;;;;;;;;;;;;;831:36;-1:-1:-1;;;;;831:28:27;;860:6;831:28;:36::i;:::-;589:285;;:::o;617:127:34:-;690:4;713:24;724:12;713:10;:24::i;:::-;706:31;617:127;-1:-1:-1;;617:127:34:o;4376:88:28:-;4429:28;4438:6;4446:10;4429:8;:28::i;:::-;4376:88;:::o;775:86:10:-;826:4;775:86;:::o;1483:1028::-;1052:21:5;1132:11;;;1178:19;;1170:54;;;;;-1:-1:-1;;;1170:54:5;;;;;;;;;;;;-1:-1:-1;;;1170:54:5;;;;;;;;;;;;;;;1483:1028:10;;1561:17:::1;1586:19;:17;:19::i;:::-;1581:2;:24:::0;;::::1;::::0;-1:-1:-1;1642:14:10;::::1;1674:31:::0;;::::1;;1666:63;;;::::0;;-1:-1:-1;;;1666:63:10;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;1666:63:10;;;;;;;;;;;;;::::1;;1739:18;1771:32;1786:16:::0;1776:9;1771:4;;:32:::1;:::i;:::-;1760:55;;;;;;;::::0;::::1;;-1:-1:-1::0;1760:55:10::1;-1:-1:-1::0;;;;;1760:55:10::1;::::0;-1:-1:-1;1826:35:10::1;;1864:16;1870:9:::0;1826:35;1864:4;;:16:::1;:::i;:::-;1826:54;;;;1891:49;1919:20;;1891:27;:49::i;:::-;1951:23;;1977;:4:::0;1982:16;1977:4;;:23:::1;:::i;:::-;1951:49:::0;;-1:-1:-1;1951:49:10;-1:-1:-1;;;;;;2095:26:10;::::1;::::0;2091:122:::1;;2137:45;2161:10;2173:8;;2137:23;:45::i;:::-;2196:7;;;;;;;;;2091:122;2227:15;:13;:15::i;:::-;2223:282;;;2266:20:::0;;2258:53:::1;;;::::0;;-1:-1:-1;;;2258:53:10;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2258:53:10;;;;;;;;;;;;;::::1;;2223:282;;;2391:26;2408:8;;2391:16;:26::i;:::-;2431:33;2455:8;;2431:23;:33::i;:::-;2478:16;:14;:16::i;:::-;1244:1:5;;;;;;;1483:1028:10::0;;:::o;872:120:34:-;951:34;966:18;951:14;:34::i;2946:182:28:-;434:22:8;445:10;434;:22::i;:::-;426:50;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;;;;3039:39:28::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;3088:33;3104:16;3088:15;:33::i;750:116:34:-:0;827:32;847:11;827:19;:32::i;998:80::-;1053:18;:16;:18::i;:::-;998:80::o;2665:275:28:-;2461:17;:15;:17::i;:::-;:22;2453:64;;;;;-1:-1:-1;;;2453:64:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;2791:16;2260:14;2252:50:::1;;;::::0;;-1:-1:-1;;;2252:50:28;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2252:50:28;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;2320:9:28::1;:38;2312:74;;;::::0;;-1:-1:-1;;;2312:74:28;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2312:74:28;;;;;;;;;;;;;::::1;;434:22:8::2;445:10;434;:22::i;:::-;426:50;;;::::0;;-1:-1:-1;;;426:50:8;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;;::::2;;2851:39:28::3;::::0;;;;;;;::::3;::::0;;;;::::3;::::0;;::::3;2900:33;2916:16;2900:15;:33::i;308:275:27:-:0;489:17;:15;:17::i;:::-;464:21;:42;;456:75;;;;;-1:-1:-1;;;456:75:27;;;;;;;;;;;;-1:-1:-1;;;456:75:27;;;;;;;;;;;;;;;541:35;553:9;564:11;541;:35::i;3134:152:28:-;434:22:8;445:10;434;:22::i;:::-;426:50;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;;;;3217:29:28::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;3256:23;3267:11;3256:10;:23::i;1084:80:34:-:0;1139:18;:16;:18::i;3857:439:28:-;3940:32;;;-1:-1:-1;;;;;3940:32:28;;;;;;;;;;;;;;;;;;;;;;;4010:16;;;4024:1;4010:16;;;;;;;;;3983:24;;4010:16;;;;;;;;;;-1:-1:-1;4010:16:28;3983:43;;2140:1;4036:7;4044:1;4036:10;;;;;;;;;;;;;:35;;;;;4102:9;-1:-1:-1;;;;;4094:18:28;4081:7;4089:1;4081:10;;;;;;;;;;;;;;;;;:31;-1:-1:-1;;;4135:6:28;:26;4122:7;4130:1;4122:10;;;;;;;;;;;;;;;;;:39;-1:-1:-1;;;4184:6:28;:26;4171:7;4179:1;4171:10;;;;;;;;;;;;;:39;;;;;4221:19;:17;:19::i;:::-;-1:-1:-1;;;;;4221:40:28;;4262:17;:15;:17::i;:::-;4281:7;4221:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3857:439:28:o;357:218:11:-;458:33;;440:12;;-1:-1:-1;;;;;458:14:11;;;480:6;;440:12;458:33;440:12;458:33;480:6;458:14;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;439:52;;;537:7;529:39;;;;;-1:-1:-1;;;529:39:11;;;;;;;;;;;;-1:-1:-1;;;529:39:11;;;;;;;;;;;;;;;357:218;;;:::o;1840:204:1:-;1914:4;1930:32;1965:19;:17;:19::i;:::-;-1:-1:-1;;;;;2001:36:1;;;;:22;:36;;;;;;;;-1:-1:-1;;2001:36:1;;;;;;;1840:204::o;2517:540:10:-;2645:36;:23;-1:-1:-1;;;;;2645:34:10;;:36::i;:::-;2637:67;;;;;-1:-1:-1;;;2637:67:10;;;;;;;;;;;;-1:-1:-1;;;2637:67:10;;;;;;;;;;;;;;;2785:12;2799:23;2826;-1:-1:-1;;;;;2826:36:10;2899:24;;;2925:7;;2876:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2876:57:10;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2876:57:10;-1:-1:-1;;;;;;2876:57:10;;;;;;;;;2826:117;;;;2876:57;;2826:117;;-1:-1:-1;2826:117:10;;-1:-1:-1;2876:57:10;-1:-1:-1;2826:117:10;;-1:-1:-1;2826:117:10;;-1:-1:-1;2826:117:10;2876:57;2826:117;;;;;;;;;;-1:-1:-1;;2826:117:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2784:159;;;;2961:7;2977:10;2953:36;;;;;-1:-1:-1;;;2953:36:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3007:17:10;;:10;;:22;2999:51;;;;-1:-1:-1;;;2999:51:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2517:540;;;;;:::o;971:131:28:-;1028:4;;1051:19;:17;:19::i;:::-;-1:-1:-1;;;;;1051:44:28;;;1044:51;;971:131;:::o;1209:134::-;1312:2;1297:17;;1289:47;;;;;-1:-1:-1;;;1289:47:28;;;;;;;;;;;;-1:-1:-1;;;1289:47:28;;;;;;;;;;;;;;1605:319;1688:21;1711:37;1776:4;;1752:81;;;;;;;;;;-1:-1:-1;;;;;;1752:81:28;;;;;-1:-1:-1;1752:81:28;;;;;;;-1:-1:-1;1843:27:28;1752:81;1843:12;:27::i;:::-;1880:37;1898:18;1880:17;:37::i;:::-;1605:319;;;;:::o;1529:305:1:-;1574:32;1609:19;:17;:19::i;:::-;1647:15;;;;;;-1:-1:-1;;;;1647:15:1;;;;1646:16;1638:48;;;;;-1:-1:-1;;;1638:48:1;;;;;;;;;;;;-1:-1:-1;;;1638:48:1;;;;;;;;;;;;;;;1714:4;1696:15;;:22;;-1:-1:-1;;;;1696:22:1;-1:-1:-1;;;1696:22:1;;;1804:23;1816:10;1804:11;:23::i;3747:400::-;434:22:8;445:10;434;:22::i;:::-;426:50;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;;;;3841:10:1::1;-1:-1:-1::0;;;;;3841:32:1;::::1;;;3833:65;;;::::0;;-1:-1:-1;;;3833:65:1;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;3833:65:1;;;;;;;;;;;;;::::1;;3908:32;3943:19;:17;:19::i;:::-;3908:54;;3980:30;3991:18;3980:10;:30::i;:::-;3972:55;;;::::0;;-1:-1:-1;;;3972:55:1;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;3972:55:1;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;4037:42:1;::::1;4082:5;4037:42:::0;;;::::1;::::0;;;;;;;;:50;;-1:-1:-1;;4037:50:1::1;::::0;;4102:38;;;;;;;::::1;::::0;;;;;;;;::::1;486:1:8;3747:400:1::0;:::o;1858:121:29:-;1917:55;1943:21;;;;;;;;;;;;;;;;;1966:5;1917:25;:55::i;2332:301:1:-;434:22:8;445:10;434;:22::i;:::-;426:50;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;;;;2416:32:1::1;2451:19;:17;:19::i;:::-;2416:54;;2489:23;2500:11;2489:10;:23::i;:::-;2488:24;2480:53;;;::::0;;-1:-1:-1;;;2480:53:1;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2480:53:1;;;;;;;;;;;;;::::1;;2543:21;::::0;::::1;:35:::0;;-1:-1:-1;;;;;2543:35:1;::::1;-1:-1:-1::0;;;;;;2543:35:1;;::::1;::::0;::::1;::::0;;;2593:33:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;486:1:8;2332:301:1::0;:::o;3193:497::-;3321:32;3356:19;:17;:19::i;:::-;3407:21;;;;;;-1:-1:-1;;;;;;3407:21:1;3393:10;:35;3385:71;;;;;-1:-1:-1;;;3385:71:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;3504:21;;;;3492:34;;-1:-1:-1;;;;;3504:21:1;3492:11;:34::i;:::-;3536:21;;;:36;;-1:-1:-1;;;;;;3536:36:1;;;3649:34;;;3672:10;3649:34;;;;;;;;;;;;;3193:497;:::o;896:122:29:-;946:7;972:39;998:12;;;;;;;;;;;;;;;;;972:25;:39::i;:::-;965:46;;896:122;:::o;1620:116::-;1679:50;1709:12;;;;;;;;;;;;;;;;;1723:5;1679:29;:50::i;1150:131::-;1200:7;1226:48;1252:21;;;;;;;;;;;;;;;;;1226:25;:48::i;3292:559:28:-;2589:17;:15;:17::i;:::-;2581:60;;;;;-1:-1:-1;;;2581:60:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;3419:11;2260:14;2252:50:::1;;;::::0;;-1:-1:-1;;;2252:50:28;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2252:50:28;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;2320:9:28::1;:38;2312:74;;;::::0;;-1:-1:-1;;;2312:74:28;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2312:74:28;;;;;;;;;;;;;::::1;;3464:12:::2;:10;:12::i;:::-;3454:6;:22;;3446:71;;;;-1:-1:-1::0;;;3446:71:28::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3532:43;::::0;;3543:10:::2;3532:43:::0;;::::2;::::0;::::2;::::0;;;;;;;;;;;::::2;::::0;;;;;;;::::2;3613:16;::::0;;3627:1:::2;3613:16:::0;;;;;::::2;::::0;;;3586:24:::2;::::0;3613:16:::2;::::0;::::2;3586:24:::0;;3613:16:::2;::::0;::::2;;::::0;-1:-1:-1;3613:16:28::2;3586:43;;3652:11;3639:7;3647:1;3639:10;;;;;;;;;::::0;;::::2;::::0;;;;;:24;-1:-1:-1;;;3686:6:28;:26:::2;3673:7;3681:1;3673:10;;;;;;;;;::::0;;::::2;::::0;;;;;:39;-1:-1:-1;;;3735:6:28;:26:::2;3722:7;3730:1;3722:10;;;;;;;;;;;;;:39;;;::::0;::::2;3771:19;:17;:19::i;:::-;-1:-1:-1::0;;;;;3771:35:28::2;;3807:17;:15;:17::i;:::-;2016:76;3836:7;3771:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;1742:110:29::0;1796:49;1822:15;;;;;;;;;;;;;;;;;1839:5;1796:25;:49::i;2118:208:1:-;434:22:8;445:10;434;:22::i;:::-;426:50;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;-1:-1:-1;;;426:50:8;;;;;;;;;;;;;;;2180:32:1::1;2215:19;:17;:19::i;:::-;2244:21;::::0;::::1;:36:::0;;-1:-1:-1;;;;;;2244:36:1::1;::::0;;2295:24:::1;::::0;2180:54;;-1:-1:-1;2295:24:1::1;::::0;2276:3:::1;::::0;2295:24:::1;486:1:8;2118:208:1:o:0;1287:168:29:-;1339:18;1395:52;1424:22;;;;;;;;;;;;;;;;;1395:28;:52::i;361:250:34:-;422:32;466:16;512:28;;;;;;;;;;;;;;;;;495:46;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;495:46:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;485:57;;;;;;466:76;;587:8;575:20;;561:44;;:::o;161:190:11:-;290:20;336:8;;;161:190::o;1485:129:29:-;1545:62;1578:17;;;;;;;;;;;;;;;;;1597:9;1545:32;:62::i;1985:159::-;2061:76;2094:22;;;;;;;;;;;;;;;;;2126:9;2061:32;:76::i;2951:236:1:-;3020:23;3031:11;3020:10;:23::i;:::-;3019:24;3011:53;;;;;-1:-1:-1;;;3011:53:1;;;;;;;;;;;;-1:-1:-1;;;3011:53:1;;;;;;;;;;;;;;;3074:32;3109:19;:17;:19::i;:::-;-1:-1:-1;;;;;3138:35:1;;;:22;:35;;;;;;;;-1:-1:-1;3138:35:1;;;:42;;-1:-1:-1;;3138:42:1;3176:4;3138:42;;;2951:236::o;1379:192:0:-;1455:12;1497:4;1480:22;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1480:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1470:33;;;;;;1455:48;;1549:5;1543:4;1536:19;1522:43;;;:::o;1164:209::-;1229:14;1255:12;1297:4;1280:22;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1280:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1270:33;;;;;;1255:48;;1352:4;1346:11;1336:21;;1322:45;;;;:::o;1577:169::-;1665:18;1678:4;1665:12;:18::i;:::-;:23;1657:47;;;;;-1:-1:-1;;;1657:47:0;;;;;;;;;;;;-1:-1:-1;;;1657:47:0;;;;;;;;;;;;;;;1714:25;1727:4;1733:5;1714:12;:25::i;1024:120:29:-;1069:7;1095:42;1121:15;;;;;;;;;;;;;;;;;1095:25;:42::i;2171:189:0:-;2295:3;2262:21;2278:4;2262:15;:21::i;:::-;-1:-1:-1;;;;;2262:37:0;;2254:61;;;;;-1:-1:-1;;;2254:61:0;;;;;;;;;;;;-1:-1:-1;;;2254:61:0;;;;;;;;;;;;;;5:318:-1;;;155:8;143:10;140:24;137:2;;;-1:-1;;167:12;137:2;202:6;192:8;189:20;186:2;;;-1:-1;;212:12;186:2;-1:-1;;244:31;;;293:25;;;;;-1:-1;131:192::o", - "language": "Solidity", - "natspec": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "offset": [218, 876], - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC1 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x894ECF04 GT PUSH2 0x7F JUMPI DUP1 PUSH4 0xA90E32B8 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xA90E32B8 EQ PUSH2 0x2A9 JUMPI DUP1 PUSH4 0xB6B55F25 EQ PUSH2 0x2D3 JUMPI DUP1 PUSH4 0xBB371FDD EQ PUSH2 0x2F0 JUMPI DUP1 PUSH4 0xE37FEC25 EQ PUSH2 0x31A JUMPI PUSH2 0xC1 JUMP JUMPDEST DUP1 PUSH4 0x894ECF04 EQ PUSH2 0x237 JUMPI DUP1 PUSH4 0x91A66A26 EQ PUSH2 0x261 JUMPI DUP1 PUSH4 0x946BE3ED EQ PUSH2 0x294 JUMPI PUSH2 0xC1 JUMP JUMPDEST DUP1 PUSH3 0xF714CE EQ PUSH2 0xC6 JUMPI DUP1 PUSH4 0x1A01590 EQ PUSH2 0x101 JUMPI DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x148 JUMPI DUP1 PUSH4 0x33EEB147 EQ PUSH2 0x172 JUMPI DUP1 PUSH4 0x439FAB91 EQ PUSH2 0x187 JUMPI DUP1 PUSH4 0x84F921CD EQ PUSH2 0x204 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x32F JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x134 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x124 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x39F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x154 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x16B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x3B0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x17E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x134 PUSH2 0x3BD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x193 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x3C2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x210 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x227 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x595 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x243 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x25A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x59E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x284 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x626 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0x62F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x639 JUMP JUMPDEST PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x7C4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x313 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x821 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x326 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0x8A9 JUMP JUMPDEST PUSH2 0x339 DUP3 DUP3 PUSH2 0x8B1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x388 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x1253959053125117D49150D25412515395 PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x39B PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP4 PUSH2 0xA5F JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3AA DUP3 PUSH2 0xB00 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x3BA DUP2 CALLER PUSH2 0x32F JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 DUP1 SLOAD SWAP1 DUP2 ISZERO PUSH2 0x432 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x1112549150D517D0D0531317D11254D0531313D5D151 PUSH1 0x52 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x0 PUSH2 0x43E PUSH2 0x3BD JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 POP DUP2 ADD DUP1 DUP4 LT ISZERO PUSH2 0x492 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x1253925517D110551057D513D3D7D4D3505313 PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x4A0 DUP3 DUP5 DUP7 DUP9 PUSH2 0x1959 JUMP JUMPDEST PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP CALLDATASIZE PUSH1 0x0 PUSH2 0x4CA DUP6 DUP3 DUP9 DUP11 PUSH2 0x1959 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x4D8 DUP3 DUP3 PUSH2 0x39B JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 PUSH2 0x4E7 DUP9 DUP8 DUP2 DUP13 PUSH2 0x1959 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND ISZERO PUSH2 0x512 JUMPI PUSH2 0x506 DUP6 DUP4 DUP4 PUSH2 0xB2F JUMP JUMPDEST POP POP POP POP POP POP POP PUSH2 0x39B JUMP JUMPDEST PUSH2 0x51A PUSH2 0xD86 JUMP JUMPDEST ISZERO PUSH2 0x56E JUMPI DUP1 ISZERO PUSH2 0x569 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x554E45585045435445445F494E49545F44415441 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x58A JUMP JUMPDEST PUSH2 0x578 DUP3 DUP3 PUSH2 0xDA1 JUMP JUMPDEST PUSH2 0x582 DUP3 DUP3 PUSH2 0xDEA JUMP JUMPDEST PUSH2 0x58A PUSH2 0xE2D JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3BA DUP2 PUSH2 0xEAF JUMP JUMPDEST PUSH2 0x5A7 CALLER PUSH2 0xB00 JUMP JUMPDEST PUSH2 0x5EA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4F4E4C595F474F5645524E414E4345 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xA9AEC19EC61C04AE0A4A1498AB6CE04CBD68B3D54C47888A45EB2BD37CAF06BC SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 PUSH2 0x3BA DUP2 PUSH2 0xFFC JUMP JUMPDEST PUSH2 0x3BA DUP2 PUSH2 0x101E JUMP JUMPDEST PUSH2 0x637 PUSH2 0x111B JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x641 PUSH2 0x11E8 JUMP JUMPDEST ISZERO PUSH2 0x693 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C325F544F4B454E5F434F4E54524143545F414C52454144595F534554000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP1 PUSH2 0x6E0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x4C325F414444524553535F4F55545F4F465F52414E4745 PUSH1 0x48 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH8 0x800000000000011 PUSH1 0xC0 SHL ADD DUP2 LT PUSH2 0x73C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x4C325F414444524553535F4F55545F4F465F52414E4745 PUSH1 0x48 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x745 CALLER PUSH2 0xB00 JUMP JUMPDEST PUSH2 0x788 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4F4E4C595F474F5645524E414E4345 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x49774A785AFE45B60857497C0AFF8733F202CA7E75329AD6408073564EFEA6DF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 PUSH2 0x39B DUP3 PUSH2 0x1210 JUMP JUMPDEST PUSH2 0x7CC PUSH2 0x1232 JUMP JUMPDEST SELFBALANCE GT ISZERO PUSH2 0x817 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x13505617D09053105390D157D15610D151511151 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3BA CALLVALUE DUP3 PUSH2 0x1255 JUMP JUMPDEST PUSH2 0x82A CALLER PUSH2 0xB00 JUMP JUMPDEST PUSH2 0x86D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4F4E4C595F474F5645524E414E4345 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xAF474B5AFCF11BD99DC9FC7F499E6AB368D650BF7EF23993F0D61BD9AD762651 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 PUSH2 0x3BA DUP2 PUSH2 0x1543 JUMP JUMPDEST PUSH2 0x637 PUSH2 0x1565 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE DUP2 MLOAD PUSH32 0xB4214C8C54FC7442F36D3682F59AEBAF09358A4431835B30EFB29D52CF9E1E91 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 PUSH1 0x40 DUP1 MLOAD PUSH1 0x4 DUP1 DUP3 MSTORE PUSH1 0xA0 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 PUSH1 0x20 DUP3 ADD PUSH1 0x80 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x927 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x94A JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 PUSH1 0x80 SHL DUP4 MOD DUP2 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x969 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 PUSH1 0x80 SHL DUP4 DIV DUP2 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x988 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x99C PUSH2 0x15FC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2C9DD5C0 PUSH2 0x9B2 PUSH2 0x11E8 JUMP JUMPDEST DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xA08 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x9F0 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA42 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP4 SWAP1 DUP4 DUP2 DUP2 DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xAAA JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xAAF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0xAFB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x11551217D514905394D1915497D19052531151 PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xB0B PUSH2 0x161F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP4 SWAP1 SWAP4 MSTORE POP POP PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0xB41 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x16CE JUMP JUMPDEST PUSH2 0xB87 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x115250D7D393D517D057D0D3D395149050D5 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x439FAB91 PUSH1 0xE0 SHL DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F SWAP1 SWAP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND SWAP1 SWAP5 ADD DUP3 DUP2 SUB SWAP1 SWAP5 ADD DUP3 MSTORE SWAP3 DUP4 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP10 AND SWAP9 SWAP1 SWAP9 OR DUP9 MSTORE SWAP2 MLOAD DUP3 MLOAD SWAP3 SWAP8 SWAP1 SWAP7 POP DUP7 SWAP6 POP SWAP4 POP SWAP1 SWAP2 POP DUP2 SWAP1 POP DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xC38 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xC19 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xC98 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xC9D JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP2 SWAP1 PUSH2 0xD2D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xCF2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xCDA JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xD1F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP1 MLOAD DUP2 SWAP1 ISZERO PUSH2 0xD7E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0xCF2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xCDA JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xD91 PUSH2 0x15FC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP2 EQ PUSH2 0x39B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x494C4C4547414C5F444154415F53495A45 PUSH1 0x78 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 DUP4 PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xDFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP4 POP PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD AND SWAP1 POP PUSH2 0xE1E DUP3 PUSH2 0x16D4 JUMP JUMPDEST PUSH2 0xE27 DUP2 PUSH2 0x16F6 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE37 PUSH2 0x161F JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xE91 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x1053149150511657D253925512505312569151 PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 ADD DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE PUSH2 0x3BA CALLER PUSH2 0x1718 JUMP JUMPDEST PUSH2 0xEB8 CALLER PUSH2 0xB00 JUMP JUMPDEST PUSH2 0xEFB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4F4E4C595F474F5645524E414E4345 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ ISZERO PUSH2 0xF50 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x474F5645524E4F525F53454C465F52454D4F5645 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xF5A PUSH2 0x161F JUMP JUMPDEST SWAP1 POP PUSH2 0xF65 DUP3 PUSH2 0xB00 JUMP JUMPDEST PUSH2 0xFA5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x2727AA2FA3A7AB22A92727A9 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP4 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP2 MLOAD SWAP3 DUP4 MSTORE SWAP1 MLOAD PUSH32 0xD75F94825E770B8B512BE8E74759E252AD00E102E38F50CCE2F7C6F868A29599 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH2 0x3BA PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19F5 PUSH1 0x27 SWAP2 CODECOPY DUP3 PUSH2 0x1798 JUMP JUMPDEST PUSH2 0x1027 CALLER PUSH2 0xB00 JUMP JUMPDEST PUSH2 0x106A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4F4E4C595F474F5645524E414E4345 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1074 PUSH2 0x161F JUMP JUMPDEST SWAP1 POP PUSH2 0x107F DUP3 PUSH2 0xB00 JUMP JUMPDEST ISZERO PUSH2 0x10C4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x20A62922A0A22CAFA3A7AB22A92727A9 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0x6166272C8D3F5F579082F2827532732F97195007983BB5B83AC12C56700B01A6 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1125 PUSH2 0x161F JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1189 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F43414E4449444154455F474F5645524E4F52000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD PUSH2 0x11A0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1718 JUMP JUMPDEST PUSH1 0x1 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE SWAP1 MLOAD PUSH32 0xCFB473E6C03F9A29DDAF990E736FA3DE5188A0BD85D684F5B6E164EBFBFFF5D2 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x120B PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19CE PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x1812 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x3BA PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19CE PUSH1 0x27 SWAP2 CODECOPY DUP3 PUSH2 0x188F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x120B PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19F5 PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x1812 JUMP JUMPDEST PUSH2 0x125D PUSH2 0x11E8 JUMP JUMPDEST PUSH2 0x12AE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C325F544F4B454E5F434F4E54524143545F4E4F545F53455400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP1 PUSH2 0x12FB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x4C325F414444524553535F4F55545F4F465F52414E4745 PUSH1 0x48 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH8 0x800000000000011 PUSH1 0xC0 SHL ADD DUP2 LT PUSH2 0x1357 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x4C325F414444524553535F4F55545F4F465F52414E4745 PUSH1 0x48 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x135F PUSH2 0x18E2 JUMP JUMPDEST DUP4 GT ISZERO PUSH2 0x139D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x19AA PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD DUP5 SWAP1 MSTORE SWAP1 MLOAD PUSH32 0x9DBB0E7DDA3E09710CE75B801ADDC87CF9D9C6C581641B3275FCA409AD086C62 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 PUSH1 0x40 DUP1 MLOAD PUSH1 0x3 DUP1 DUP3 MSTORE PUSH1 0x80 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 PUSH1 0x20 DUP3 ADD DUP4 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP3 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x140D JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 PUSH1 0x80 SHL DUP5 MOD DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x142C JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 PUSH1 0x80 SHL DUP5 DIV DUP2 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x144B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x145F PUSH2 0x15FC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3E3AA6C5 PUSH2 0x1475 PUSH2 0x11E8 JUMP JUMPDEST PUSH32 0x2D757788A8D8D6F21D1CD40BCE38A8222D70654214E96FF95D8086E684FBEE5 DUP5 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x14F2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x14DA JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1519 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x152D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xD7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3BA PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1A1C PUSH1 0x21 SWAP2 CODECOPY DUP3 PUSH2 0x1798 JUMP JUMPDEST PUSH2 0x156E CALLER PUSH2 0xB00 JUMP JUMPDEST PUSH2 0x15B1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4F4E4C595F474F5645524E414E4345 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x15BB PUSH2 0x161F JUMP JUMPDEST PUSH1 0x1 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 POP PUSH32 0x7A8DC7DD7FFFB43C4807438FA62729225156941E641FD877938F4EDADE3429F5 SWAP1 PUSH1 0x0 SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x120B PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1982 PUSH1 0x28 SWAP2 CODECOPY PUSH2 0x1812 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1C DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x535441524B4E45545F312E305F474F5645524E414E43455F494E464F00000000 DUP2 MSTORE POP PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x168A JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x166B JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP1 SWAP2 POP POP SWAP1 JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x3BA PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1A3D PUSH1 0x29 SWAP2 CODECOPY DUP3 PUSH2 0x1905 JUMP JUMPDEST PUSH2 0x3BA PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1982 PUSH1 0x28 SWAP2 CODECOPY DUP3 PUSH2 0x1905 JUMP JUMPDEST PUSH2 0x1721 DUP2 PUSH2 0xB00 JUMP JUMPDEST ISZERO PUSH2 0x1766 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x20A62922A0A22CAFA3A7AB22A92727A9 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1770 PUSH2 0x161F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP3 SWAP1 SWAP3 MSTORE POP PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x17CD JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x17AE JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP2 DUP2 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1848 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1829 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP1 SLOAD SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1898 DUP3 PUSH2 0x1812 JUMP JUMPDEST ISZERO PUSH2 0x18D8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x1053149150511657D4D155 PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x39B DUP3 DUP3 PUSH2 0x1798 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x120B PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1A1C PUSH1 0x21 SWAP2 CODECOPY PUSH2 0x1812 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1910 DUP4 PUSH2 0x1812 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x18D8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x1053149150511657D4D155 PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP6 GT ISZERO PUSH2 0x1968 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP4 DUP7 GT ISZERO PUSH2 0x1974 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP3 ADD SWAP4 SWAP2 SWAP1 SWAP3 SUB SWAP2 POP JUMP INVALID MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F SLOAD 0x4F 0x4B GASLIMIT 0x4E 0x5F TIMESTAMP MSTORE 0x49 DIFFICULTY SELFBALANCE GASLIMIT 0x5F 0x4D GASLIMIT MSTORE8 MSTORE8 COINBASE SELFBALANCE 0x49 0x4E SELFBALANCE 0x5F NUMBER 0x4F 0x4E SLOAD MSTORE COINBASE NUMBER SLOAD SLOAD MSTORE COINBASE 0x4E MSTORE8 CHAINID GASLIMIT MSTORE 0x5F SLOAD 0x4F 0x5F MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F COINBASE 0x4D 0x4F SSTORE 0x4E SLOAD 0x5F GASLIMIT PC NUMBER GASLIMIT GASLIMIT DIFFICULTY GASLIMIT DIFFICULTY MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F SLOAD 0x4F 0x4B GASLIMIT 0x4E 0x5F TIMESTAMP MSTORE 0x49 DIFFICULTY SELFBALANCE GASLIMIT 0x5F 0x4C ORIGIN 0x5F SLOAD 0x4F 0x4B GASLIMIT 0x4E 0x5F NUMBER 0x4F 0x4E SLOAD MSTORE COINBASE NUMBER SLOAD MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F SLOAD 0x4F 0x4B GASLIMIT 0x4E 0x5F TIMESTAMP MSTORE 0x49 DIFFICULTY SELFBALANCE GASLIMIT 0x5F 0x4D COINBASE PC 0x5F SLOAD 0x4F SLOAD COINBASE 0x4C 0x5F TIMESTAMP COINBASE 0x4C COINBASE 0x4E NUMBER GASLIMIT MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F SLOAD 0x4F 0x4B GASLIMIT 0x4E 0x5F TIMESTAMP MSTORE 0x49 DIFFICULTY SELFBALANCE GASLIMIT 0x5F 0x4D COINBASE PC 0x5F DIFFICULTY GASLIMIT POP 0x4F MSTORE8 0x49 SLOAD MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F GASLIMIT MSTORE NUMBER ORIGIN ADDRESS 0x5F SLOAD 0x4F 0x4B GASLIMIT 0x4E 0x5F TIMESTAMP MSTORE 0x49 DIFFICULTY SELFBALANCE GASLIMIT 0x5F SLOAD 0x4F 0x4B GASLIMIT 0x4E 0x5F COINBASE DIFFICULTY DIFFICULTY MSTORE GASLIMIT MSTORE8 MSTORE8 LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP10 MSIZE 0xFC SLOAD 0xE8 LOG4 0x4B SWAP9 SIGNEXTEND 0xF8 PUSH18 0xFB9DEA17DDD1C7307656EC3058927E288962 0xD4 SWAP11 0xEC PUSH5 0x736F6C6343 STOP MOD 0xC STOP CALLER ", - "pcMap": { - "0": { - "offset": [218, 876], - "op": "PUSH1", - "path": "27", - "value": "0x80" - }, - "2": { - "fn": null, - "offset": [218, 876], - "op": "PUSH1", - "path": "27", - "value": "0x40" - }, - "4": { - "fn": null, - "offset": [218, 876], - "op": "MSTORE", - "path": "27" - }, - "5": { - "fn": null, - "offset": [218, 876], - "op": "PUSH1", - "path": "27", - "value": "0x4" - }, - "7": { - "fn": null, - "offset": [218, 876], - "op": "CALLDATASIZE", - "path": "27" - }, - "8": { - "fn": null, - "offset": [218, 876], - "op": "LT", - "path": "27" - }, - "9": { - "fn": null, - "offset": [218, 876], - "op": "PUSH2", - "path": "27", - "value": "0xC1" - }, - "12": { - "fn": null, - "offset": [218, 876], - "op": "JUMPI", - "path": "27" - }, - "13": { - "fn": null, - "offset": [218, 876], - "op": "PUSH1", - "path": "27", - "value": "0x0" - }, - "15": { - "fn": null, - "offset": [218, 876], - "op": "CALLDATALOAD", - "path": "27" - }, - "16": { - "fn": null, - "offset": [218, 876], - "op": "PUSH1", - "path": "27", - "value": "0xE0" - }, - "18": { - "fn": null, - "offset": [218, 876], - "op": "SHR", - "path": "27" - }, - "19": { - "fn": null, - "offset": [218, 876], - "op": "DUP1", - "path": "27" - }, - "20": { - "fn": null, - "offset": [218, 876], - "op": "PUSH4", - "path": "27", - "value": "0x894ECF04" - }, - "25": { - "fn": null, - "offset": [218, 876], - "op": "GT", - "path": "27" - }, - "26": { - "fn": null, - "offset": [218, 876], - "op": "PUSH2", - "path": "27", - "value": "0x7F" - }, - "29": { - "fn": null, - "offset": [218, 876], - "op": "JUMPI", - "path": "27" - }, - "30": { - "fn": null, - "offset": [218, 876], - "op": "DUP1", - "path": "27" - }, - "31": { - "fn": null, - "offset": [218, 876], - "op": "PUSH4", - "path": "27", - "value": "0xA90E32B8" - }, - "36": { - "fn": null, - "offset": [218, 876], - "op": "GT", - "path": "27" - }, - "37": { - "fn": null, - "offset": [218, 876], - "op": "PUSH2", - "path": "27", - "value": "0x59" - }, - "40": { - "fn": null, - "offset": [218, 876], - "op": "JUMPI", - "path": "27" - }, - "41": { - "fn": null, - "offset": [218, 876], - "op": "DUP1", - "path": "27" - }, - "42": { - "fn": null, - "offset": [218, 876], - "op": "PUSH4", - "path": "27", - "value": "0xA90E32B8" - }, - "47": { - "fn": null, - "offset": [218, 876], - "op": "EQ", - "path": "27" - }, - "48": { - "fn": null, - "offset": [218, 876], - "op": "PUSH2", - "path": "27", - "value": "0x2A9" - }, - "51": { - "fn": null, - "offset": [218, 876], - "op": "JUMPI", - "path": "27" - }, - "52": { - "fn": null, - "offset": [218, 876], - "op": "DUP1", - "path": "27" - }, - "53": { - "fn": null, - "offset": [218, 876], - "op": "PUSH4", - "path": "27", - "value": "0xB6B55F25" - }, - "58": { - "fn": null, - "offset": [218, 876], - "op": "EQ", - "path": "27" - }, - "59": { - "fn": null, - "offset": [218, 876], - "op": "PUSH2", - "path": "27", - "value": "0x2D3" - }, - "62": { - "fn": null, - "offset": [218, 876], - "op": "JUMPI", - "path": "27" - }, - "63": { - "fn": null, - "offset": [218, 876], - "op": "DUP1", - "path": "27" - }, - "64": { - "fn": null, - "offset": [218, 876], - "op": "PUSH4", - "path": "27", - "value": "0xBB371FDD" - }, - "69": { - "fn": null, - "offset": [218, 876], - "op": "EQ", - "path": "27" - }, - "70": { - "fn": null, - "offset": [218, 876], - "op": "PUSH2", - "path": "27", - "value": "0x2F0" - }, - "73": { - "fn": null, - "offset": [218, 876], - "op": "JUMPI", - "path": "27" - }, - "74": { - "fn": null, - "offset": [218, 876], - "op": "DUP1", - "path": "27" - }, - "75": { - "fn": null, - "offset": [218, 876], - "op": "PUSH4", - "path": "27", - "value": "0xE37FEC25" - }, - "80": { - "fn": null, - "offset": [218, 876], - "op": "EQ", - "path": "27" - }, - "81": { - "fn": null, - "offset": [218, 876], - "op": "PUSH2", - "path": "27", - "value": "0x31A" - }, - "84": { - "fn": null, - "offset": [218, 876], - "op": "JUMPI", - "path": "27" - }, - "85": { - "fn": null, - "offset": [218, 876], - "op": "PUSH2", - "path": "27", - "value": "0xC1" - }, - "88": { - "fn": null, - "offset": [218, 876], - "op": "JUMP", - "path": "27" - }, - "89": { - "fn": null, - "offset": [218, 876], - "op": "JUMPDEST", - "path": "27" - }, - "90": { - "fn": null, - "offset": [218, 876], - "op": "DUP1", - "path": "27" - }, - "91": { - "fn": null, - "offset": [218, 876], - "op": "PUSH4", - "path": "27", - "value": "0x894ECF04" - }, - "96": { - "fn": null, - "offset": [218, 876], - "op": "EQ", - "path": "27" - }, - "97": { - "fn": null, - "offset": [218, 876], - "op": "PUSH2", - "path": "27", - "value": "0x237" - }, - "100": { - "fn": null, - "offset": [218, 876], - "op": "JUMPI", - "path": "27" - }, - "101": { - "fn": null, - "offset": [218, 876], - "op": "DUP1", - "path": "27" - }, - "102": { - "fn": null, - "offset": [218, 876], - "op": "PUSH4", - "path": "27", - "value": "0x91A66A26" - }, - "107": { - "fn": null, - "offset": [218, 876], - "op": "EQ", - "path": "27" - }, - "108": { - "fn": null, - "offset": [218, 876], - "op": "PUSH2", - "path": "27", - "value": "0x261" - }, - "111": { - "fn": null, - "offset": [218, 876], - "op": "JUMPI", - "path": "27" - }, - "112": { - "fn": null, - "offset": [218, 876], - "op": "DUP1", - "path": "27" - }, - "113": { - "fn": null, - "offset": [218, 876], - "op": "PUSH4", - "path": "27", - "value": "0x946BE3ED" - }, - "118": { - "fn": null, - "offset": [218, 876], - "op": "EQ", - "path": "27" - }, - "119": { - "fn": null, - "offset": [218, 876], - "op": "PUSH2", - "path": "27", - "value": "0x294" - }, - "122": { - "fn": null, - "offset": [218, 876], - "op": "JUMPI", - "path": "27" - }, - "123": { - "fn": null, - "offset": [218, 876], - "op": "PUSH2", - "path": "27", - "value": "0xC1" - }, - "126": { - "fn": null, - "offset": [218, 876], - "op": "JUMP", - "path": "27" - }, - "127": { - "fn": null, - "offset": [218, 876], - "op": "JUMPDEST", - "path": "27" - }, - "128": { - "fn": null, - "offset": [218, 876], - "op": "DUP1", - "path": "27" - }, - "129": { - "fn": null, - "offset": [218, 876], - "op": "PUSH3", - "path": "27", - "value": "0xF714CE" - }, - "133": { - "fn": null, - "offset": [218, 876], - "op": "EQ", - "path": "27" - }, - "134": { - "fn": null, - "offset": [218, 876], - "op": "PUSH2", - "path": "27", - "value": "0xC6" - }, - "137": { - "fn": null, - "offset": [218, 876], - "op": "JUMPI", - "path": "27" - }, - "138": { - "fn": null, - "offset": [218, 876], - "op": "DUP1", - "path": "27" - }, - "139": { - "fn": null, - "offset": [218, 876], - "op": "PUSH4", - "path": "27", - "value": "0x1A01590" - }, - "144": { - "fn": null, - "offset": [218, 876], - "op": "EQ", - "path": "27" - }, - "145": { - "fn": null, - "offset": [218, 876], - "op": "PUSH2", - "path": "27", - "value": "0x101" - }, - "148": { - "fn": null, - "offset": [218, 876], - "op": "JUMPI", - "path": "27" - }, - "149": { - "fn": null, - "offset": [218, 876], - "op": "DUP1", - "path": "27" - }, - "150": { - "fn": null, - "offset": [218, 876], - "op": "PUSH4", - "path": "27", - "value": "0x2E1A7D4D" - }, - "155": { - "fn": null, - "offset": [218, 876], - "op": "EQ", - "path": "27" - }, - "156": { - "fn": null, - "offset": [218, 876], - "op": "PUSH2", - "path": "27", - "value": "0x148" - }, - "159": { - "fn": null, - "offset": [218, 876], - "op": "JUMPI", - "path": "27" - }, - "160": { - "fn": null, - "offset": [218, 876], - "op": "DUP1", - "path": "27" - }, - "161": { - "fn": null, - "offset": [218, 876], - "op": "PUSH4", - "path": "27", - "value": "0x33EEB147" - }, - "166": { - "fn": null, - "offset": [218, 876], - "op": "EQ", - "path": "27" - }, - "167": { - "fn": null, - "offset": [218, 876], - "op": "PUSH2", - "path": "27", - "value": "0x172" - }, - "170": { - "fn": null, - "offset": [218, 876], - "op": "JUMPI", - "path": "27" - }, - "171": { - "fn": null, - "offset": [218, 876], - "op": "DUP1", - "path": "27" - }, - "172": { - "fn": null, - "offset": [218, 876], - "op": "PUSH4", - "path": "27", - "value": "0x439FAB91" - }, - "177": { - "fn": null, - "offset": [218, 876], - "op": "EQ", - "path": "27" - }, - "178": { - "fn": null, - "offset": [218, 876], - "op": "PUSH2", - "path": "27", - "value": "0x187" - }, - "181": { - "fn": null, - "offset": [218, 876], - "op": "JUMPI", - "path": "27" - }, - "182": { - "fn": null, - "offset": [218, 876], - "op": "DUP1", - "path": "27" - }, - "183": { - "fn": null, - "offset": [218, 876], - "op": "PUSH4", - "path": "27", - "value": "0x84F921CD" - }, - "188": { - "fn": null, - "offset": [218, 876], - "op": "EQ", - "path": "27" - }, - "189": { - "fn": null, - "offset": [218, 876], - "op": "PUSH2", - "path": "27", - "value": "0x204" - }, - "192": { - "fn": null, - "offset": [218, 876], - "op": "JUMPI", - "path": "27" - }, - "193": { - "fn": null, - "offset": [218, 876], - "op": "JUMPDEST", - "path": "27" - }, - "194": { - "fn": null, - "offset": [218, 876], - "op": "PUSH1", - "path": "27", - "value": "0x0" - }, - "196": { - "fn": null, - "offset": [218, 876], - "op": "DUP1", - "path": "27" - }, - "197": { - "first_revert": true, - "fn": null, - "offset": [218, 876], - "op": "REVERT", - "path": "27" - }, - "198": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "JUMPDEST", - "path": "27" - }, - "199": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "CALLVALUE", - "path": "27" - }, - "200": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "DUP1", - "path": "27" - }, - "201": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "ISZERO", - "path": "27" - }, - "202": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "PUSH2", - "path": "27", - "value": "0xD2" - }, - "205": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "JUMPI", - "path": "27" - }, - "206": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "PUSH1", - "path": "27", - "value": "0x0" - }, - "208": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "DUP1", - "path": "27" - }, - "209": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "REVERT", - "path": "27" - }, - "210": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "JUMPDEST", - "path": "27" - }, - "211": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "POP", - "path": "27" - }, - "212": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "PUSH2", - "path": "27", - "value": "0xFF" - }, - "215": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "PUSH1", - "path": "27", - "value": "0x4" - }, - "217": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "DUP1", - "path": "27" - }, - "218": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "CALLDATASIZE", - "path": "27" - }, - "219": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "SUB", - "path": "27" - }, - "220": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "PUSH1", - "path": "27", - "value": "0x40" - }, - "222": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "DUP2", - "path": "27" - }, - "223": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "LT", - "path": "27" - }, - "224": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "ISZERO", - "path": "27" - }, - "225": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "PUSH2", - "path": "27", - "value": "0xE9" - }, - "228": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "JUMPI", - "path": "27" - }, - "229": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "PUSH1", - "path": "27", - "value": "0x0" - }, - "231": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "DUP1", - "path": "27" - }, - "232": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "REVERT", - "path": "27" - }, - "233": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "JUMPDEST", - "path": "27" - }, - "234": { - "op": "POP" - }, - "235": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "DUP1", - "path": "27" - }, - "236": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "CALLDATALOAD", - "path": "27" - }, - "237": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "SWAP1", - "path": "27" - }, - "238": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "PUSH1", - "path": "27", - "value": "0x20" - }, - "240": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "ADD", - "path": "27" - }, - "241": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "CALLDATALOAD", - "path": "27" - }, - "242": { - "op": "PUSH1", - "value": "0x1" - }, - "244": { - "op": "PUSH1", - "value": "0x1" - }, - "246": { - "op": "PUSH1", - "value": "0xA0" - }, - "248": { - "op": "SHL" - }, - "249": { - "op": "SUB" - }, - "250": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "AND", - "path": "27" - }, - "251": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "PUSH2", - "path": "27", - "value": "0x32F" - }, - "254": { - "fn": "StarknetEthBridge.withdraw", - "jump": "i", - "offset": [589, 874], - "op": "JUMP", - "path": "27" - }, - "255": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "JUMPDEST", - "path": "27" - }, - "256": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "STOP", - "path": "27" - }, - "257": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "JUMPDEST", - "path": "34" - }, - "258": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "CALLVALUE", - "path": "34" - }, - "259": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "DUP1", - "path": "34" - }, - "260": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "ISZERO", - "path": "34" - }, - "261": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "PUSH2", - "path": "34", - "value": "0x10D" - }, - "264": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "JUMPI", - "path": "34" - }, - "265": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "PUSH1", - "path": "34", - "value": "0x0" - }, - "267": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "DUP1", - "path": "34" - }, - "268": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "REVERT", - "path": "34" - }, - "269": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "JUMPDEST", - "path": "34" - }, - "270": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "POP", - "path": "34" - }, - "271": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "PUSH2", - "path": "34", - "value": "0x134" - }, - "274": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "PUSH1", - "path": "34", - "value": "0x4" - }, - "276": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "DUP1", - "path": "34" - }, - "277": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "CALLDATASIZE", - "path": "34" - }, - "278": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "SUB", - "path": "34" - }, - "279": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "PUSH1", - "path": "34", - "value": "0x20" - }, - "281": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "DUP2", - "path": "34" - }, - "282": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "LT", - "path": "34" - }, - "283": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "ISZERO", - "path": "34" - }, - "284": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "PUSH2", - "path": "34", - "value": "0x124" - }, - "287": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "JUMPI", - "path": "34" - }, - "288": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "PUSH1", - "path": "34", - "value": "0x0" - }, - "290": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "DUP1", - "path": "34" - }, - "291": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "REVERT", - "path": "34" - }, - "292": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "JUMPDEST", - "path": "34" - }, - "293": { - "op": "POP" - }, - "294": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "CALLDATALOAD", - "path": "34" - }, - "295": { - "op": "PUSH1", - "value": "0x1" - }, - "297": { - "op": "PUSH1", - "value": "0x1" - }, - "299": { - "op": "PUSH1", - "value": "0xA0" - }, - "301": { - "op": "SHL" - }, - "302": { - "op": "SUB" - }, - "303": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "AND", - "path": "34" - }, - "304": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "PUSH2", - "path": "34", - "value": "0x39F" - }, - "307": { - "fn": "StarknetGovernance.starknetIsGovernor", - "jump": "i", - "offset": [617, 744], - "op": "JUMP", - "path": "34" - }, - "308": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "JUMPDEST", - "path": "34" - }, - "309": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "PUSH1", - "path": "34", - "value": "0x40" - }, - "311": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "DUP1", - "path": "34" - }, - "312": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "MLOAD", - "path": "34" - }, - "313": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "SWAP2", - "path": "34" - }, - "314": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "ISZERO", - "path": "34" - }, - "315": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "ISZERO", - "path": "34" - }, - "316": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "DUP3", - "path": "34" - }, - "317": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "MSTORE", - "path": "34" - }, - "318": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "MLOAD", - "path": "34" - }, - "319": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "SWAP1", - "path": "34" - }, - "320": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "DUP2", - "path": "34" - }, - "321": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "SWAP1", - "path": "34" - }, - "322": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "SUB", - "path": "34" - }, - "323": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "PUSH1", - "path": "34", - "value": "0x20" - }, - "325": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "ADD", - "path": "34" - }, - "326": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "SWAP1", - "path": "34" - }, - "327": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "RETURN", - "path": "34" - }, - "328": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "JUMPDEST", - "path": "28" - }, - "329": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "CALLVALUE", - "path": "28" - }, - "330": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "DUP1", - "path": "28" - }, - "331": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "ISZERO", - "path": "28" - }, - "332": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "PUSH2", - "path": "28", - "value": "0x154" - }, - "335": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "JUMPI", - "path": "28" - }, - "336": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "338": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "DUP1", - "path": "28" - }, - "339": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "REVERT", - "path": "28" - }, - "340": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "JUMPDEST", - "path": "28" - }, - "341": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "POP", - "path": "28" - }, - "342": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "PUSH2", - "path": "28", - "value": "0xFF" - }, - "345": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "347": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "DUP1", - "path": "28" - }, - "348": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "CALLDATASIZE", - "path": "28" - }, - "349": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "SUB", - "path": "28" - }, - "350": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "352": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "DUP2", - "path": "28" - }, - "353": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "LT", - "path": "28" - }, - "354": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "ISZERO", - "path": "28" - }, - "355": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "PUSH2", - "path": "28", - "value": "0x16B" - }, - "358": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "JUMPI", - "path": "28" - }, - "359": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "361": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "DUP1", - "path": "28" - }, - "362": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "REVERT", - "path": "28" - }, - "363": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "JUMPDEST", - "path": "28" - }, - "364": { - "op": "POP" - }, - "365": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "CALLDATALOAD", - "path": "28" - }, - "366": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "PUSH2", - "path": "28", - "value": "0x3B0" - }, - "369": { - "fn": "StarknetTokenBridge.withdraw", - "jump": "i", - "offset": [4376, 4464], - "op": "JUMP", - "path": "28" - }, - "370": { - "fn": "ProxySupport.isFrozen", - "offset": [775, 861], - "op": "JUMPDEST", - "path": "10" - }, - "371": { - "fn": "ProxySupport.isFrozen", - "offset": [775, 861], - "op": "CALLVALUE", - "path": "10" - }, - "372": { - "fn": "ProxySupport.isFrozen", - "offset": [775, 861], - "op": "DUP1", - "path": "10" - }, - "373": { - "fn": "ProxySupport.isFrozen", - "offset": [775, 861], - "op": "ISZERO", - "path": "10" - }, - "374": { - "fn": "ProxySupport.isFrozen", - "offset": [775, 861], - "op": "PUSH2", - "path": "10", - "value": "0x17E" - }, - "377": { - "fn": "ProxySupport.isFrozen", - "offset": [775, 861], - "op": "JUMPI", - "path": "10" - }, - "378": { - "fn": "ProxySupport.isFrozen", - "offset": [775, 861], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "380": { - "fn": "ProxySupport.isFrozen", - "offset": [775, 861], - "op": "DUP1", - "path": "10" - }, - "381": { - "fn": "ProxySupport.isFrozen", - "offset": [775, 861], - "op": "REVERT", - "path": "10" - }, - "382": { - "fn": "ProxySupport.isFrozen", - "offset": [775, 861], - "op": "JUMPDEST", - "path": "10" - }, - "383": { - "fn": "ProxySupport.isFrozen", - "offset": [775, 861], - "op": "POP", - "path": "10" - }, - "384": { - "fn": "ProxySupport.isFrozen", - "offset": [775, 861], - "op": "PUSH2", - "path": "10", - "value": "0x134" - }, - "387": { - "fn": "ProxySupport.isFrozen", - "offset": [775, 861], - "op": "PUSH2", - "path": "10", - "value": "0x3BD" - }, - "390": { - "fn": "ProxySupport.isFrozen", - "jump": "i", - "offset": [775, 861], - "op": "JUMP", - "path": "10" - }, - "391": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "JUMPDEST", - "path": "10" - }, - "392": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "CALLVALUE", - "path": "10" - }, - "393": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP1", - "path": "10" - }, - "394": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "ISZERO", - "path": "10" - }, - "395": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH2", - "path": "10", - "value": "0x193" - }, - "398": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "JUMPI", - "path": "10" - }, - "399": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "401": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP1", - "path": "10" - }, - "402": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "REVERT", - "path": "10" - }, - "403": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "JUMPDEST", - "path": "10" - }, - "404": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "POP", - "path": "10" - }, - "405": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH2", - "path": "10", - "value": "0xFF" - }, - "408": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH1", - "path": "10", - "value": "0x4" - }, - "410": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP1", - "path": "10" - }, - "411": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "CALLDATASIZE", - "path": "10" - }, - "412": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "SUB", - "path": "10" - }, - "413": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "415": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP2", - "path": "10" - }, - "416": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "LT", - "path": "10" - }, - "417": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "ISZERO", - "path": "10" - }, - "418": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH2", - "path": "10", - "value": "0x1AA" - }, - "421": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "JUMPI", - "path": "10" - }, - "422": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "424": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP1", - "path": "10" - }, - "425": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "REVERT", - "path": "10" - }, - "426": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "JUMPDEST", - "path": "10" - }, - "427": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP2", - "path": "10" - }, - "428": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "ADD", - "path": "10" - }, - "429": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "SWAP1", - "path": "10" - }, - "430": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "432": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP2", - "path": "10" - }, - "433": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "ADD", - "path": "10" - }, - "434": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP2", - "path": "10" - }, - "435": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "CALLDATALOAD", - "path": "10" - }, - "436": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH5", - "path": "10", - "value": "0x100000000" - }, - "442": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP2", - "path": "10" - }, - "443": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "GT", - "path": "10" - }, - "444": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "ISZERO", - "path": "10" - }, - "445": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH2", - "path": "10", - "value": "0x1C5" - }, - "448": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "JUMPI", - "path": "10" - }, - "449": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "451": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP1", - "path": "10" - }, - "452": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "REVERT", - "path": "10" - }, - "453": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "JUMPDEST", - "path": "10" - }, - "454": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP3", - "path": "10" - }, - "455": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "ADD", - "path": "10" - }, - "456": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP4", - "path": "10" - }, - "457": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "459": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP3", - "path": "10" - }, - "460": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "ADD", - "path": "10" - }, - "461": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "GT", - "path": "10" - }, - "462": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "ISZERO", - "path": "10" - }, - "463": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH2", - "path": "10", - "value": "0x1D7" - }, - "466": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "JUMPI", - "path": "10" - }, - "467": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "469": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP1", - "path": "10" - }, - "470": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "REVERT", - "path": "10" - }, - "471": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "JUMPDEST", - "path": "10" - }, - "472": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP1", - "path": "10" - }, - "473": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "CALLDATALOAD", - "path": "10" - }, - "474": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "SWAP1", - "path": "10" - }, - "475": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "477": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "ADD", - "path": "10" - }, - "478": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "SWAP2", - "path": "10" - }, - "479": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP5", - "path": "10" - }, - "480": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH1", - "path": "10", - "value": "0x1" - }, - "482": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP4", - "path": "10" - }, - "483": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "MUL", - "path": "10" - }, - "484": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP5", - "path": "10" - }, - "485": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "ADD", - "path": "10" - }, - "486": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "GT", - "path": "10" - }, - "487": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH5", - "path": "10", - "value": "0x100000000" - }, - "493": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP4", - "path": "10" - }, - "494": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "GT", - "path": "10" - }, - "495": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "OR", - "path": "10" - }, - "496": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "ISZERO", - "path": "10" - }, - "497": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH2", - "path": "10", - "value": "0x1F9" - }, - "500": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "JUMPI", - "path": "10" - }, - "501": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "503": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "DUP1", - "path": "10" - }, - "504": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "REVERT", - "path": "10" - }, - "505": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "JUMPDEST", - "path": "10" - }, - "506": { - "op": "POP" - }, - "507": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "SWAP1", - "path": "10" - }, - "508": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "SWAP3", - "path": "10" - }, - "509": { - "op": "POP" - }, - "510": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "SWAP1", - "path": "10" - }, - "511": { - "op": "POP" - }, - "512": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "PUSH2", - "path": "10", - "value": "0x3C2" - }, - "515": { - "fn": "ProxySupport.initialize", - "jump": "i", - "offset": [1483, 2511], - "op": "JUMP", - "path": "10" - }, - "516": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "JUMPDEST", - "path": "34" - }, - "517": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "CALLVALUE", - "path": "34" - }, - "518": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "DUP1", - "path": "34" - }, - "519": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "ISZERO", - "path": "34" - }, - "520": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "PUSH2", - "path": "34", - "value": "0x210" - }, - "523": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "JUMPI", - "path": "34" - }, - "524": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "PUSH1", - "path": "34", - "value": "0x0" - }, - "526": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "DUP1", - "path": "34" - }, - "527": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "REVERT", - "path": "34" - }, - "528": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "JUMPDEST", - "path": "34" - }, - "529": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "POP", - "path": "34" - }, - "530": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "PUSH2", - "path": "34", - "value": "0xFF" - }, - "533": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "PUSH1", - "path": "34", - "value": "0x4" - }, - "535": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "DUP1", - "path": "34" - }, - "536": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "CALLDATASIZE", - "path": "34" - }, - "537": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "SUB", - "path": "34" - }, - "538": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "PUSH1", - "path": "34", - "value": "0x20" - }, - "540": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "DUP2", - "path": "34" - }, - "541": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "LT", - "path": "34" - }, - "542": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "ISZERO", - "path": "34" - }, - "543": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "PUSH2", - "path": "34", - "value": "0x227" - }, - "546": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "JUMPI", - "path": "34" - }, - "547": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "PUSH1", - "path": "34", - "value": "0x0" - }, - "549": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "DUP1", - "path": "34" - }, - "550": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "REVERT", - "path": "34" - }, - "551": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "JUMPDEST", - "path": "34" - }, - "552": { - "op": "POP" - }, - "553": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "CALLDATALOAD", - "path": "34" - }, - "554": { - "op": "PUSH1", - "value": "0x1" - }, - "556": { - "op": "PUSH1", - "value": "0x1" - }, - "558": { - "op": "PUSH1", - "value": "0xA0" - }, - "560": { - "op": "SHL" - }, - "561": { - "op": "SUB" - }, - "562": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "AND", - "path": "34" - }, - "563": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "PUSH2", - "path": "34", - "value": "0x595" - }, - "566": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "jump": "i", - "offset": [872, 992], - "op": "JUMP", - "path": "34" - }, - "567": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "JUMPDEST", - "path": "28" - }, - "568": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "CALLVALUE", - "path": "28" - }, - "569": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "DUP1", - "path": "28" - }, - "570": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "ISZERO", - "path": "28" - }, - "571": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "PUSH2", - "path": "28", - "value": "0x243" - }, - "574": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "JUMPI", - "path": "28" - }, - "575": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "577": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "DUP1", - "path": "28" - }, - "578": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "REVERT", - "path": "28" - }, - "579": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "JUMPDEST", - "path": "28" - }, - "580": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "POP", - "path": "28" - }, - "581": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "PUSH2", - "path": "28", - "value": "0xFF" - }, - "584": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "586": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "DUP1", - "path": "28" - }, - "587": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "CALLDATASIZE", - "path": "28" - }, - "588": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "SUB", - "path": "28" - }, - "589": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "591": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "DUP2", - "path": "28" - }, - "592": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "LT", - "path": "28" - }, - "593": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "ISZERO", - "path": "28" - }, - "594": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "PUSH2", - "path": "28", - "value": "0x25A" - }, - "597": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "JUMPI", - "path": "28" - }, - "598": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "600": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "DUP1", - "path": "28" - }, - "601": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "REVERT", - "path": "28" - }, - "602": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "JUMPDEST", - "path": "28" - }, - "603": { - "op": "POP" - }, - "604": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "CALLDATALOAD", - "path": "28" - }, - "605": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "PUSH2", - "path": "28", - "value": "0x59E" - }, - "608": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "jump": "i", - "offset": [2946, 3128], - "op": "JUMP", - "path": "28" - }, - "609": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "JUMPDEST", - "path": "34" - }, - "610": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "CALLVALUE", - "path": "34" - }, - "611": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "DUP1", - "path": "34" - }, - "612": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "ISZERO", - "path": "34" - }, - "613": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "PUSH2", - "path": "34", - "value": "0x26D" - }, - "616": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "JUMPI", - "path": "34" - }, - "617": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "PUSH1", - "path": "34", - "value": "0x0" - }, - "619": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "DUP1", - "path": "34" - }, - "620": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "REVERT", - "path": "34" - }, - "621": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "JUMPDEST", - "path": "34" - }, - "622": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "POP", - "path": "34" - }, - "623": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "PUSH2", - "path": "34", - "value": "0xFF" - }, - "626": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "PUSH1", - "path": "34", - "value": "0x4" - }, - "628": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "DUP1", - "path": "34" - }, - "629": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "CALLDATASIZE", - "path": "34" - }, - "630": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "SUB", - "path": "34" - }, - "631": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "PUSH1", - "path": "34", - "value": "0x20" - }, - "633": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "DUP2", - "path": "34" - }, - "634": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "LT", - "path": "34" - }, - "635": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "ISZERO", - "path": "34" - }, - "636": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "PUSH2", - "path": "34", - "value": "0x284" - }, - "639": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "JUMPI", - "path": "34" - }, - "640": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "PUSH1", - "path": "34", - "value": "0x0" - }, - "642": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "DUP1", - "path": "34" - }, - "643": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "REVERT", - "path": "34" - }, - "644": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "JUMPDEST", - "path": "34" - }, - "645": { - "op": "POP" - }, - "646": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "CALLDATALOAD", - "path": "34" - }, - "647": { - "op": "PUSH1", - "value": "0x1" - }, - "649": { - "op": "PUSH1", - "value": "0x1" - }, - "651": { - "op": "PUSH1", - "value": "0xA0" - }, - "653": { - "op": "SHL" - }, - "654": { - "op": "SUB" - }, - "655": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "AND", - "path": "34" - }, - "656": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "PUSH2", - "path": "34", - "value": "0x626" - }, - "659": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "jump": "i", - "offset": [750, 866], - "op": "JUMP", - "path": "34" - }, - "660": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "offset": [998, 1078], - "op": "JUMPDEST", - "path": "34" - }, - "661": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "offset": [998, 1078], - "op": "CALLVALUE", - "path": "34" - }, - "662": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "offset": [998, 1078], - "op": "DUP1", - "path": "34" - }, - "663": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "offset": [998, 1078], - "op": "ISZERO", - "path": "34" - }, - "664": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "offset": [998, 1078], - "op": "PUSH2", - "path": "34", - "value": "0x2A0" - }, - "667": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "offset": [998, 1078], - "op": "JUMPI", - "path": "34" - }, - "668": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "offset": [998, 1078], - "op": "PUSH1", - "path": "34", - "value": "0x0" - }, - "670": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "offset": [998, 1078], - "op": "DUP1", - "path": "34" - }, - "671": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "offset": [998, 1078], - "op": "REVERT", - "path": "34" - }, - "672": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "offset": [998, 1078], - "op": "JUMPDEST", - "path": "34" - }, - "673": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "offset": [998, 1078], - "op": "POP", - "path": "34" - }, - "674": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "offset": [998, 1078], - "op": "PUSH2", - "path": "34", - "value": "0xFF" - }, - "677": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "offset": [998, 1078], - "op": "PUSH2", - "path": "34", - "value": "0x62F" - }, - "680": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "jump": "i", - "offset": [998, 1078], - "op": "JUMP", - "path": "34" - }, - "681": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "JUMPDEST", - "path": "28" - }, - "682": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "CALLVALUE", - "path": "28" - }, - "683": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "DUP1", - "path": "28" - }, - "684": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "ISZERO", - "path": "28" - }, - "685": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "PUSH2", - "path": "28", - "value": "0x2B5" - }, - "688": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "JUMPI", - "path": "28" - }, - "689": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "691": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "DUP1", - "path": "28" - }, - "692": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "REVERT", - "path": "28" - }, - "693": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "JUMPDEST", - "path": "28" - }, - "694": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "POP", - "path": "28" - }, - "695": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "PUSH2", - "path": "28", - "value": "0xFF" - }, - "698": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "700": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "DUP1", - "path": "28" - }, - "701": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "CALLDATASIZE", - "path": "28" - }, - "702": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "SUB", - "path": "28" - }, - "703": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "705": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "DUP2", - "path": "28" - }, - "706": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "LT", - "path": "28" - }, - "707": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "ISZERO", - "path": "28" - }, - "708": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "PUSH2", - "path": "28", - "value": "0x2CC" - }, - "711": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "JUMPI", - "path": "28" - }, - "712": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "714": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "DUP1", - "path": "28" - }, - "715": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "REVERT", - "path": "28" - }, - "716": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "JUMPDEST", - "path": "28" - }, - "717": { - "op": "POP" - }, - "718": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "CALLDATALOAD", - "path": "28" - }, - "719": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "PUSH2", - "path": "28", - "value": "0x639" - }, - "722": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "jump": "i", - "offset": [2665, 2940], - "op": "JUMP", - "path": "28" - }, - "723": { - "fn": "StarknetEthBridge.deposit", - "offset": [308, 583], - "op": "JUMPDEST", - "path": "27" - }, - "724": { - "fn": "StarknetEthBridge.deposit", - "offset": [308, 583], - "op": "PUSH2", - "path": "27", - "value": "0xFF" - }, - "727": { - "fn": "StarknetEthBridge.deposit", - "offset": [308, 583], - "op": "PUSH1", - "path": "27", - "value": "0x4" - }, - "729": { - "fn": "StarknetEthBridge.deposit", - "offset": [308, 583], - "op": "DUP1", - "path": "27" - }, - "730": { - "fn": "StarknetEthBridge.deposit", - "offset": [308, 583], - "op": "CALLDATASIZE", - "path": "27" - }, - "731": { - "fn": "StarknetEthBridge.deposit", - "offset": [308, 583], - "op": "SUB", - "path": "27" - }, - "732": { - "fn": "StarknetEthBridge.deposit", - "offset": [308, 583], - "op": "PUSH1", - "path": "27", - "value": "0x20" - }, - "734": { - "fn": "StarknetEthBridge.deposit", - "offset": [308, 583], - "op": "DUP2", - "path": "27" - }, - "735": { - "fn": "StarknetEthBridge.deposit", - "offset": [308, 583], - "op": "LT", - "path": "27" - }, - "736": { - "fn": "StarknetEthBridge.deposit", - "offset": [308, 583], - "op": "ISZERO", - "path": "27" - }, - "737": { - "fn": "StarknetEthBridge.deposit", - "offset": [308, 583], - "op": "PUSH2", - "path": "27", - "value": "0x2E9" - }, - "740": { - "fn": "StarknetEthBridge.deposit", - "offset": [308, 583], - "op": "JUMPI", - "path": "27" - }, - "741": { - "fn": "StarknetEthBridge.deposit", - "offset": [308, 583], - "op": "PUSH1", - "path": "27", - "value": "0x0" - }, - "743": { - "fn": "StarknetEthBridge.deposit", - "offset": [308, 583], - "op": "DUP1", - "path": "27" - }, - "744": { - "fn": "StarknetEthBridge.deposit", - "offset": [308, 583], - "op": "REVERT", - "path": "27" - }, - "745": { - "fn": "StarknetEthBridge.deposit", - "offset": [308, 583], - "op": "JUMPDEST", - "path": "27" - }, - "746": { - "op": "POP" - }, - "747": { - "fn": "StarknetEthBridge.deposit", - "offset": [308, 583], - "op": "CALLDATALOAD", - "path": "27" - }, - "748": { - "fn": "StarknetEthBridge.deposit", - "offset": [308, 583], - "op": "PUSH2", - "path": "27", - "value": "0x7C4" - }, - "751": { - "fn": "StarknetEthBridge.deposit", - "jump": "i", - "offset": [308, 583], - "op": "JUMP", - "path": "27" - }, - "752": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "JUMPDEST", - "path": "28" - }, - "753": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "CALLVALUE", - "path": "28" - }, - "754": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "DUP1", - "path": "28" - }, - "755": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "ISZERO", - "path": "28" - }, - "756": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "PUSH2", - "path": "28", - "value": "0x2FC" - }, - "759": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "JUMPI", - "path": "28" - }, - "760": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "762": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "DUP1", - "path": "28" - }, - "763": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "REVERT", - "path": "28" - }, - "764": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "JUMPDEST", - "path": "28" - }, - "765": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "POP", - "path": "28" - }, - "766": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "PUSH2", - "path": "28", - "value": "0xFF" - }, - "769": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "771": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "DUP1", - "path": "28" - }, - "772": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "CALLDATASIZE", - "path": "28" - }, - "773": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "SUB", - "path": "28" - }, - "774": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "776": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "DUP2", - "path": "28" - }, - "777": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "LT", - "path": "28" - }, - "778": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "ISZERO", - "path": "28" - }, - "779": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "PUSH2", - "path": "28", - "value": "0x313" - }, - "782": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "JUMPI", - "path": "28" - }, - "783": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "785": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "DUP1", - "path": "28" - }, - "786": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "REVERT", - "path": "28" - }, - "787": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "JUMPDEST", - "path": "28" - }, - "788": { - "op": "POP" - }, - "789": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "CALLDATALOAD", - "path": "28" - }, - "790": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "PUSH2", - "path": "28", - "value": "0x821" - }, - "793": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "jump": "i", - "offset": [3134, 3286], - "op": "JUMP", - "path": "28" - }, - "794": { - "fn": "StarknetGovernance.starknetCancelNomination", - "offset": [1084, 1164], - "op": "JUMPDEST", - "path": "34" - }, - "795": { - "fn": "StarknetGovernance.starknetCancelNomination", - "offset": [1084, 1164], - "op": "CALLVALUE", - "path": "34" - }, - "796": { - "fn": "StarknetGovernance.starknetCancelNomination", - "offset": [1084, 1164], - "op": "DUP1", - "path": "34" - }, - "797": { - "fn": "StarknetGovernance.starknetCancelNomination", - "offset": [1084, 1164], - "op": "ISZERO", - "path": "34" - }, - "798": { - "fn": "StarknetGovernance.starknetCancelNomination", - "offset": [1084, 1164], - "op": "PUSH2", - "path": "34", - "value": "0x326" - }, - "801": { - "fn": "StarknetGovernance.starknetCancelNomination", - "offset": [1084, 1164], - "op": "JUMPI", - "path": "34" - }, - "802": { - "fn": "StarknetGovernance.starknetCancelNomination", - "offset": [1084, 1164], - "op": "PUSH1", - "path": "34", - "value": "0x0" - }, - "804": { - "fn": "StarknetGovernance.starknetCancelNomination", - "offset": [1084, 1164], - "op": "DUP1", - "path": "34" - }, - "805": { - "fn": "StarknetGovernance.starknetCancelNomination", - "offset": [1084, 1164], - "op": "REVERT", - "path": "34" - }, - "806": { - "fn": "StarknetGovernance.starknetCancelNomination", - "offset": [1084, 1164], - "op": "JUMPDEST", - "path": "34" - }, - "807": { - "fn": "StarknetGovernance.starknetCancelNomination", - "offset": [1084, 1164], - "op": "POP", - "path": "34" - }, - "808": { - "fn": "StarknetGovernance.starknetCancelNomination", - "offset": [1084, 1164], - "op": "PUSH2", - "path": "34", - "value": "0xFF" - }, - "811": { - "fn": "StarknetGovernance.starknetCancelNomination", - "offset": [1084, 1164], - "op": "PUSH2", - "path": "34", - "value": "0x8A9" - }, - "814": { - "fn": "StarknetGovernance.starknetCancelNomination", - "jump": "i", - "offset": [1084, 1164], - "op": "JUMP", - "path": "34" - }, - "815": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "JUMPDEST", - "path": "27" - }, - "816": { - "fn": "StarknetEthBridge.withdraw", - "offset": [668, 701], - "op": "PUSH2", - "path": "27", - "statement": 0, - "value": "0x339" - }, - "819": { - "fn": "StarknetEthBridge.withdraw", - "offset": [683, 689], - "op": "DUP3", - "path": "27" - }, - "820": { - "fn": "StarknetEthBridge.withdraw", - "offset": [691, 700], - "op": "DUP3", - "path": "27" - }, - "821": { - "fn": "StarknetEthBridge.withdraw", - "offset": [668, 682], - "op": "PUSH2", - "path": "27", - "value": "0x8B1" - }, - "824": { - "fn": "StarknetEthBridge.withdraw", - "jump": "i", - "offset": [668, 701], - "op": "JUMP", - "path": "27" - }, - "825": { - "fn": "StarknetEthBridge.withdraw", - "offset": [668, 701], - "op": "JUMPDEST", - "path": "27" - }, - "826": { - "op": "PUSH1", - "value": "0x1" - }, - "828": { - "op": "PUSH1", - "value": "0x1" - }, - "830": { - "op": "PUSH1", - "value": "0xA0" - }, - "832": { - "op": "SHL" - }, - "833": { - "op": "SUB" - }, - "834": { - "fn": "StarknetEthBridge.withdraw", - "offset": [774, 799], - "op": "DUP2", - "path": "27", - "statement": 1 - }, - "835": { - "branch": 77, - "fn": "StarknetEthBridge.withdraw", - "offset": [774, 799], - "op": "AND", - "path": "27" - }, - "836": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "PUSH2", - "path": "27", - "value": "0x388" - }, - "839": { - "branch": 77, - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "JUMPI", - "path": "27" - }, - "840": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "PUSH1", - "path": "27", - "value": "0x40" - }, - "842": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "DUP1", - "path": "27" - }, - "843": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "MLOAD", - "path": "27" - }, - "844": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "848": { - "op": "PUSH1", - "value": "0xE5" - }, - "850": { - "op": "SHL" - }, - "851": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "DUP2", - "path": "27" - }, - "852": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "MSTORE", - "path": "27" - }, - "853": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "PUSH1", - "path": "27", - "value": "0x20" - }, - "855": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "PUSH1", - "path": "27", - "value": "0x4" - }, - "857": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "DUP3", - "path": "27" - }, - "858": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "ADD", - "path": "27" - }, - "859": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "MSTORE", - "path": "27" - }, - "860": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "PUSH1", - "path": "27", - "value": "0x11" - }, - "862": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "PUSH1", - "path": "27", - "value": "0x24" - }, - "864": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "DUP3", - "path": "27" - }, - "865": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "ADD", - "path": "27" - }, - "866": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "MSTORE", - "path": "27" - }, - "867": { - "op": "PUSH17", - "value": "0x1253959053125117D49150D25412515395" - }, - "885": { - "op": "PUSH1", - "value": "0x7A" - }, - "887": { - "op": "SHL" - }, - "888": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "PUSH1", - "path": "27", - "value": "0x44" - }, - "890": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "DUP3", - "path": "27" - }, - "891": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "ADD", - "path": "27" - }, - "892": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "MSTORE", - "path": "27" - }, - "893": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "SWAP1", - "path": "27" - }, - "894": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "MLOAD", - "path": "27" - }, - "895": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "SWAP1", - "path": "27" - }, - "896": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "DUP2", - "path": "27" - }, - "897": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "SWAP1", - "path": "27" - }, - "898": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "SUB", - "path": "27" - }, - "899": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "PUSH1", - "path": "27", - "value": "0x64" - }, - "901": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "ADD", - "path": "27" - }, - "902": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "SWAP1", - "path": "27" - }, - "903": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "REVERT", - "path": "27" - }, - "904": { - "fn": "StarknetEthBridge.withdraw", - "offset": [766, 821], - "op": "JUMPDEST", - "path": "27" - }, - "905": { - "fn": "StarknetEthBridge.withdraw", - "offset": [831, 867], - "op": "PUSH2", - "path": "27", - "statement": 2, - "value": "0x39B" - }, - "908": { - "op": "PUSH1", - "value": "0x1" - }, - "910": { - "op": "PUSH1", - "value": "0x1" - }, - "912": { - "op": "PUSH1", - "value": "0xA0" - }, - "914": { - "op": "SHL" - }, - "915": { - "op": "SUB" - }, - "916": { - "fn": "StarknetEthBridge.withdraw", - "offset": [831, 859], - "op": "DUP3", - "path": "27" - }, - "917": { - "fn": "StarknetEthBridge.withdraw", - "offset": [831, 859], - "op": "AND", - "path": "27" - }, - "918": { - "fn": "StarknetEthBridge.withdraw", - "offset": [860, 866], - "op": "DUP4", - "path": "27" - }, - "919": { - "fn": "StarknetEthBridge.withdraw", - "offset": [831, 859], - "op": "PUSH2", - "path": "27", - "value": "0xA5F" - }, - "922": { - "fn": "StarknetEthBridge.withdraw", - "jump": "i", - "offset": [831, 867], - "op": "JUMP", - "path": "27" - }, - "923": { - "fn": "StarknetEthBridge.withdraw", - "offset": [831, 867], - "op": "JUMPDEST", - "path": "27" - }, - "924": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "POP", - "path": "27" - }, - "925": { - "fn": "StarknetEthBridge.withdraw", - "offset": [589, 874], - "op": "POP", - "path": "27" - }, - "926": { - "fn": "StarknetEthBridge.withdraw", - "jump": "o", - "offset": [589, 874], - "op": "JUMP", - "path": "27" - }, - "927": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "JUMPDEST", - "path": "34" - }, - "928": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [690, 694], - "op": "PUSH1", - "path": "34", - "value": "0x0" - }, - "930": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [713, 737], - "op": "PUSH2", - "path": "34", - "statement": 3, - "value": "0x3AA" - }, - "933": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [724, 736], - "op": "DUP3", - "path": "34" - }, - "934": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [713, 723], - "op": "PUSH2", - "path": "34", - "value": "0xB00" - }, - "937": { - "fn": "StarknetGovernance.starknetIsGovernor", - "jump": "i", - "offset": [713, 737], - "op": "JUMP", - "path": "34" - }, - "938": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [713, 737], - "op": "JUMPDEST", - "path": "34" - }, - "939": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [706, 737], - "op": "SWAP3", - "path": "34" - }, - "940": { - "fn": "StarknetGovernance.starknetIsGovernor", - "offset": [617, 744], - "op": "SWAP2", - "path": "34" - }, - "941": { - "op": "POP" - }, - "942": { - "op": "POP" - }, - "943": { - "fn": "StarknetGovernance.starknetIsGovernor", - "jump": "o", - "offset": [617, 744], - "op": "JUMP", - "path": "34" - }, - "944": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "JUMPDEST", - "path": "28" - }, - "945": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4429, 4457], - "op": "PUSH2", - "path": "28", - "statement": 4, - "value": "0x3BA" - }, - "948": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4438, 4444], - "op": "DUP2", - "path": "28" - }, - "949": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4446, 4456], - "op": "CALLER", - "path": "28" - }, - "950": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4429, 4437], - "op": "PUSH2", - "path": "28", - "value": "0x32F" - }, - "953": { - "fn": "StarknetTokenBridge.withdraw", - "jump": "i", - "offset": [4429, 4457], - "op": "JUMP", - "path": "28" - }, - "954": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4429, 4457], - "op": "JUMPDEST", - "path": "28" - }, - "955": { - "fn": "StarknetTokenBridge.withdraw", - "offset": [4376, 4464], - "op": "POP", - "path": "28" - }, - "956": { - "fn": "StarknetTokenBridge.withdraw", - "jump": "o", - "offset": [4376, 4464], - "op": "JUMP", - "path": "28" - }, - "957": { - "fn": "ProxySupport.isFrozen", - "offset": [775, 861], - "op": "JUMPDEST", - "path": "10" - }, - "958": { - "fn": "ProxySupport.isFrozen", - "offset": [826, 830], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "960": { - "fn": "ProxySupport.isFrozen", - "offset": [775, 861], - "op": "SWAP1", - "path": "10" - }, - "961": { - "fn": "ProxySupport.isFrozen", - "jump": "o", - "offset": [775, 861], - "op": "JUMP", - "path": "10" - }, - "962": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "JUMPDEST", - "path": "10" - }, - "963": { - "offset": [1052, 1073], - "op": "PUSH32", - "path": "5", - "value": "0x0" - }, - "996": { - "offset": [1132, 1143], - "op": "DUP1", - "path": "5" - }, - "997": { - "fn": "ProxySupport.initialize", - "offset": [1132, 1143], - "op": "SLOAD", - "path": "5" - }, - "998": { - "fn": "ProxySupport.initialize", - "offset": [1132, 1143], - "op": "SWAP1", - "path": "5" - }, - "999": { - "offset": [1178, 1197], - "op": "DUP2", - "path": "5" - }, - "1000": { - "branch": 80, - "fn": "ProxySupport.initialize", - "offset": [1178, 1197], - "op": "ISZERO", - "path": "5" - }, - "1001": { - "offset": [1170, 1224], - "op": "PUSH2", - "path": "5", - "value": "0x432" - }, - "1004": { - "branch": 80, - "offset": [1170, 1224], - "op": "JUMPI", - "path": "5" - }, - "1005": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "PUSH1", - "path": "5", - "value": "0x40" - }, - "1007": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "DUP1", - "path": "5" - }, - "1008": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "MLOAD", - "path": "5" - }, - "1009": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "1013": { - "op": "PUSH1", - "value": "0xE5" - }, - "1015": { - "op": "SHL" - }, - "1016": { - "offset": [1170, 1224], - "op": "DUP2", - "path": "5" - }, - "1017": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "MSTORE", - "path": "5" - }, - "1018": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "PUSH1", - "path": "5", - "value": "0x20" - }, - "1020": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "PUSH1", - "path": "5", - "value": "0x4" - }, - "1022": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "DUP3", - "path": "5" - }, - "1023": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "ADD", - "path": "5" - }, - "1024": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "MSTORE", - "path": "5" - }, - "1025": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "PUSH1", - "path": "5", - "value": "0x16" - }, - "1027": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "PUSH1", - "path": "5", - "value": "0x24" - }, - "1029": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "DUP3", - "path": "5" - }, - "1030": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "ADD", - "path": "5" - }, - "1031": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "MSTORE", - "path": "5" - }, - "1032": { - "op": "PUSH22", - "value": "0x1112549150D517D0D0531317D11254D0531313D5D151" - }, - "1055": { - "op": "PUSH1", - "value": "0x52" - }, - "1057": { - "op": "SHL" - }, - "1058": { - "offset": [1170, 1224], - "op": "PUSH1", - "path": "5", - "value": "0x44" - }, - "1060": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "DUP3", - "path": "5" - }, - "1061": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "ADD", - "path": "5" - }, - "1062": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "MSTORE", - "path": "5" - }, - "1063": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "SWAP1", - "path": "5" - }, - "1064": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "MLOAD", - "path": "5" - }, - "1065": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "SWAP1", - "path": "5" - }, - "1066": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "DUP2", - "path": "5" - }, - "1067": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "SWAP1", - "path": "5" - }, - "1068": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "SUB", - "path": "5" - }, - "1069": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "PUSH1", - "path": "5", - "value": "0x64" - }, - "1071": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "ADD", - "path": "5" - }, - "1072": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "SWAP1", - "path": "5" - }, - "1073": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "REVERT", - "path": "5" - }, - "1074": { - "fn": "ProxySupport.initialize", - "offset": [1170, 1224], - "op": "JUMPDEST", - "path": "5" - }, - "1075": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "POP", - "path": "10" - }, - "1076": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "POP", - "path": "10" - }, - "1077": { - "fn": "ProxySupport.initialize", - "offset": [1561, 1578], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "1079": { - "fn": "ProxySupport.initialize", - "offset": [1586, 1605], - "op": "PUSH2", - "path": "10", - "value": "0x43E" - }, - "1082": { - "fn": "ProxySupport.initialize", - "offset": [1586, 1603], - "op": "PUSH2", - "path": "10", - "value": "0x3BD" - }, - "1085": { - "fn": "ProxySupport.initialize", - "jump": "i", - "offset": [1586, 1605], - "op": "JUMP", - "path": "10" - }, - "1086": { - "fn": "ProxySupport.initialize", - "offset": [1586, 1605], - "op": "JUMPDEST", - "path": "10" - }, - "1087": { - "fn": "ProxySupport.initialize", - "offset": [1581, 1583], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "1089": { - "fn": "ProxySupport.initialize", - "offset": [1581, 1605], - "op": "SWAP1", - "path": "10" - }, - "1090": { - "fn": "ProxySupport.initialize", - "offset": [1581, 1605], - "op": "DUP2", - "path": "10" - }, - "1091": { - "fn": "ProxySupport.initialize", - "offset": [1581, 1605], - "op": "MUL", - "path": "10" - }, - "1092": { - "fn": "ProxySupport.initialize", - "offset": [1581, 1605], - "op": "SWAP2", - "path": "10" - }, - "1093": { - "op": "POP" - }, - "1094": { - "fn": "ProxySupport.initialize", - "offset": [1642, 1656], - "op": "DUP2", - "path": "10" - }, - "1095": { - "fn": "ProxySupport.initialize", - "offset": [1642, 1656], - "op": "ADD", - "path": "10" - }, - "1096": { - "fn": "ProxySupport.initialize", - "offset": [1674, 1705], - "op": "DUP1", - "path": "10", - "statement": 5 - }, - "1097": { - "fn": "ProxySupport.initialize", - "offset": [1674, 1705], - "op": "DUP4", - "path": "10" - }, - "1098": { - "fn": "ProxySupport.initialize", - "offset": [1674, 1705], - "op": "LT", - "path": "10" - }, - "1099": { - "branch": 90, - "fn": "ProxySupport.initialize", - "offset": [1674, 1705], - "op": "ISZERO", - "path": "10" - }, - "1100": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "PUSH2", - "path": "10", - "value": "0x492" - }, - "1103": { - "branch": 90, - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "JUMPI", - "path": "10" - }, - "1104": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "PUSH1", - "path": "10", - "value": "0x40" - }, - "1106": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "DUP1", - "path": "10" - }, - "1107": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "MLOAD", - "path": "10" - }, - "1108": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "1112": { - "op": "PUSH1", - "value": "0xE5" - }, - "1114": { - "op": "SHL" - }, - "1115": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "DUP2", - "path": "10" - }, - "1116": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "MSTORE", - "path": "10" - }, - "1117": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "1119": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "PUSH1", - "path": "10", - "value": "0x4" - }, - "1121": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "DUP3", - "path": "10" - }, - "1122": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "ADD", - "path": "10" - }, - "1123": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "MSTORE", - "path": "10" - }, - "1124": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "PUSH1", - "path": "10", - "value": "0x13" - }, - "1126": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "PUSH1", - "path": "10", - "value": "0x24" - }, - "1128": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "DUP3", - "path": "10" - }, - "1129": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "ADD", - "path": "10" - }, - "1130": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "MSTORE", - "path": "10" - }, - "1131": { - "op": "PUSH19", - "value": "0x1253925517D110551057D513D3D7D4D3505313" - }, - "1151": { - "op": "PUSH1", - "value": "0x6A" - }, - "1153": { - "op": "SHL" - }, - "1154": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "PUSH1", - "path": "10", - "value": "0x44" - }, - "1156": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "DUP3", - "path": "10" - }, - "1157": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "ADD", - "path": "10" - }, - "1158": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "MSTORE", - "path": "10" - }, - "1159": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "SWAP1", - "path": "10" - }, - "1160": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "MLOAD", - "path": "10" - }, - "1161": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "SWAP1", - "path": "10" - }, - "1162": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "DUP2", - "path": "10" - }, - "1163": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "SWAP1", - "path": "10" - }, - "1164": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "SUB", - "path": "10" - }, - "1165": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "PUSH1", - "path": "10", - "value": "0x64" - }, - "1167": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "ADD", - "path": "10" - }, - "1168": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "SWAP1", - "path": "10" - }, - "1169": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "REVERT", - "path": "10" - }, - "1170": { - "fn": "ProxySupport.initialize", - "offset": [1666, 1729], - "op": "JUMPDEST", - "path": "10" - }, - "1171": { - "fn": "ProxySupport.initialize", - "offset": [1739, 1757], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "1173": { - "fn": "ProxySupport.initialize", - "offset": [1771, 1803], - "op": "PUSH2", - "path": "10", - "value": "0x4A0" - }, - "1176": { - "fn": "ProxySupport.initialize", - "offset": [1786, 1802], - "op": "DUP3", - "path": "10" - }, - "1177": { - "fn": "ProxySupport.initialize", - "offset": [1776, 1785], - "op": "DUP5", - "path": "10" - }, - "1178": { - "fn": "ProxySupport.initialize", - "offset": [1771, 1775], - "op": "DUP7", - "path": "10" - }, - "1179": { - "fn": "ProxySupport.initialize", - "offset": [1771, 1775], - "op": "DUP9", - "path": "10" - }, - "1180": { - "fn": "ProxySupport.initialize", - "offset": [1771, 1803], - "op": "PUSH2", - "path": "10", - "value": "0x1959" - }, - "1183": { - "fn": "ProxySupport.initialize", - "jump": "i", - "offset": [1771, 1803], - "op": "JUMP", - "path": "10" - }, - "1184": { - "fn": "ProxySupport.initialize", - "offset": [1771, 1803], - "op": "JUMPDEST", - "path": "10" - }, - "1185": { - "fn": "ProxySupport.initialize", - "offset": [1760, 1815], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "1187": { - "fn": "ProxySupport.initialize", - "offset": [1760, 1815], - "op": "DUP2", - "path": "10" - }, - "1188": { - "fn": "ProxySupport.initialize", - "offset": [1760, 1815], - "op": "LT", - "path": "10" - }, - "1189": { - "fn": "ProxySupport.initialize", - "offset": [1760, 1815], - "op": "ISZERO", - "path": "10" - }, - "1190": { - "fn": "ProxySupport.initialize", - "offset": [1760, 1815], - "op": "PUSH2", - "path": "10", - "value": "0x4AE" - }, - "1193": { - "fn": "ProxySupport.initialize", - "offset": [1760, 1815], - "op": "JUMPI", - "path": "10" - }, - "1194": { - "fn": "ProxySupport.initialize", - "offset": [1760, 1815], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "1196": { - "fn": "ProxySupport.initialize", - "offset": [1760, 1815], - "op": "DUP1", - "path": "10" - }, - "1197": { - "fn": "ProxySupport.initialize", - "offset": [1760, 1815], - "op": "REVERT", - "path": "10" - }, - "1198": { - "fn": "ProxySupport.initialize", - "offset": [1760, 1815], - "op": "JUMPDEST", - "path": "10" - }, - "1199": { - "op": "POP" - }, - "1200": { - "fn": "ProxySupport.initialize", - "offset": [1760, 1815], - "op": "CALLDATALOAD", - "path": "10" - }, - "1201": { - "op": "PUSH1", - "value": "0x1" - }, - "1203": { - "op": "PUSH1", - "value": "0x1" - }, - "1205": { - "op": "PUSH1", - "value": "0xA0" - }, - "1207": { - "op": "SHL" - }, - "1208": { - "op": "SUB" - }, - "1209": { - "fn": "ProxySupport.initialize", - "offset": [1760, 1815], - "op": "AND", - "path": "10" - }, - "1210": { - "fn": "ProxySupport.initialize", - "offset": [1760, 1815], - "op": "SWAP1", - "path": "10" - }, - "1211": { - "op": "POP" - }, - "1212": { - "fn": "ProxySupport.initialize", - "offset": [1826, 1861], - "op": "CALLDATASIZE", - "path": "10" - }, - "1213": { - "fn": "ProxySupport.initialize", - "offset": [1826, 1861], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "1215": { - "fn": "ProxySupport.initialize", - "offset": [1864, 1880], - "op": "PUSH2", - "path": "10", - "value": "0x4CA" - }, - "1218": { - "fn": "ProxySupport.initialize", - "offset": [1870, 1879], - "op": "DUP6", - "path": "10" - }, - "1219": { - "fn": "ProxySupport.initialize", - "offset": [1826, 1861], - "op": "DUP3", - "path": "10" - }, - "1220": { - "fn": "ProxySupport.initialize", - "offset": [1864, 1868], - "op": "DUP9", - "path": "10" - }, - "1221": { - "fn": "ProxySupport.initialize", - "offset": [1864, 1868], - "op": "DUP11", - "path": "10" - }, - "1222": { - "fn": "ProxySupport.initialize", - "offset": [1864, 1880], - "op": "PUSH2", - "path": "10", - "value": "0x1959" - }, - "1225": { - "fn": "ProxySupport.initialize", - "jump": "i", - "offset": [1864, 1880], - "op": "JUMP", - "path": "10" - }, - "1226": { - "fn": "ProxySupport.initialize", - "offset": [1864, 1880], - "op": "JUMPDEST", - "path": "10" - }, - "1227": { - "fn": "ProxySupport.initialize", - "offset": [1826, 1880], - "op": "SWAP2", - "path": "10" - }, - "1228": { - "fn": "ProxySupport.initialize", - "offset": [1826, 1880], - "op": "POP", - "path": "10" - }, - "1229": { - "fn": "ProxySupport.initialize", - "offset": [1826, 1880], - "op": "SWAP2", - "path": "10" - }, - "1230": { - "fn": "ProxySupport.initialize", - "offset": [1826, 1880], - "op": "POP", - "path": "10" - }, - "1231": { - "fn": "ProxySupport.initialize", - "offset": [1891, 1940], - "op": "PUSH2", - "path": "10", - "statement": 6, - "value": "0x4D8" - }, - "1234": { - "fn": "ProxySupport.initialize", - "offset": [1919, 1939], - "op": "DUP3", - "path": "10" - }, - "1235": { - "fn": "ProxySupport.initialize", - "offset": [1919, 1939], - "op": "DUP3", - "path": "10" - }, - "1236": { - "fn": "ProxySupport.initialize", - "offset": [1891, 1918], - "op": "PUSH2", - "path": "10", - "value": "0x39B" - }, - "1239": { - "fn": "ProxySupport.initialize", - "jump": "i", - "offset": [1891, 1940], - "op": "JUMP", - "path": "10" - }, - "1240": { - "fn": "ProxySupport.initialize", - "offset": [1891, 1940], - "op": "JUMPDEST", - "path": "10" - }, - "1241": { - "fn": "ProxySupport.initialize", - "offset": [1951, 1974], - "op": "CALLDATASIZE", - "path": "10" - }, - "1242": { - "fn": "ProxySupport.initialize", - "offset": [1951, 1974], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "1244": { - "fn": "ProxySupport.initialize", - "offset": [1977, 2000], - "op": "PUSH2", - "path": "10", - "value": "0x4E7" - }, - "1247": { - "fn": "ProxySupport.initialize", - "offset": [1977, 1981], - "op": "DUP9", - "path": "10" - }, - "1248": { - "fn": "ProxySupport.initialize", - "offset": [1982, 1998], - "op": "DUP8", - "path": "10" - }, - "1249": { - "fn": "ProxySupport.initialize", - "offset": [1977, 1981], - "op": "DUP2", - "path": "10" - }, - "1250": { - "fn": "ProxySupport.initialize", - "offset": [1977, 1981], - "op": "DUP13", - "path": "10" - }, - "1251": { - "fn": "ProxySupport.initialize", - "offset": [1977, 2000], - "op": "PUSH2", - "path": "10", - "value": "0x1959" - }, - "1254": { - "fn": "ProxySupport.initialize", - "jump": "i", - "offset": [1977, 2000], - "op": "JUMP", - "path": "10" - }, - "1255": { - "fn": "ProxySupport.initialize", - "offset": [1977, 2000], - "op": "JUMPDEST", - "path": "10" - }, - "1256": { - "fn": "ProxySupport.initialize", - "offset": [1951, 2000], - "op": "SWAP1", - "path": "10" - }, - "1257": { - "fn": "ProxySupport.initialize", - "offset": [1951, 2000], - "op": "SWAP3", - "path": "10" - }, - "1258": { - "op": "POP" - }, - "1259": { - "fn": "ProxySupport.initialize", - "offset": [1951, 2000], - "op": "SWAP1", - "path": "10" - }, - "1260": { - "op": "POP" - }, - "1261": { - "op": "PUSH1", - "value": "0x1" - }, - "1263": { - "op": "PUSH1", - "value": "0x1" - }, - "1265": { - "op": "PUSH1", - "value": "0xA0" - }, - "1267": { - "op": "SHL" - }, - "1268": { - "op": "SUB" - }, - "1269": { - "fn": "ProxySupport.initialize", - "offset": [2095, 2121], - "op": "DUP6", - "path": "10" - }, - "1270": { - "fn": "ProxySupport.initialize", - "offset": [2095, 2121], - "op": "AND", - "path": "10" - }, - "1271": { - "branch": 91, - "fn": "ProxySupport.initialize", - "offset": [2095, 2121], - "op": "ISZERO", - "path": "10" - }, - "1272": { - "fn": "ProxySupport.initialize", - "offset": [2091, 2213], - "op": "PUSH2", - "path": "10", - "value": "0x512" - }, - "1275": { - "branch": 91, - "fn": "ProxySupport.initialize", - "offset": [2091, 2213], - "op": "JUMPI", - "path": "10" - }, - "1276": { - "fn": "ProxySupport.initialize", - "offset": [2137, 2182], - "op": "PUSH2", - "path": "10", - "statement": 7, - "value": "0x506" - }, - "1279": { - "fn": "ProxySupport.initialize", - "offset": [2161, 2171], - "op": "DUP6", - "path": "10" - }, - "1280": { - "fn": "ProxySupport.initialize", - "offset": [2173, 2181], - "op": "DUP4", - "path": "10" - }, - "1281": { - "fn": "ProxySupport.initialize", - "offset": [2173, 2181], - "op": "DUP4", - "path": "10" - }, - "1282": { - "fn": "ProxySupport.initialize", - "offset": [2137, 2160], - "op": "PUSH2", - "path": "10", - "value": "0xB2F" - }, - "1285": { - "fn": "ProxySupport.initialize", - "jump": "i", - "offset": [2137, 2182], - "op": "JUMP", - "path": "10" - }, - "1286": { - "fn": "ProxySupport.initialize", - "offset": [2137, 2182], - "op": "JUMPDEST", - "path": "10" - }, - "1287": { - "fn": "ProxySupport.initialize", - "offset": [2196, 2203], - "op": "POP", - "path": "10", - "statement": 8 - }, - "1288": { - "fn": "ProxySupport.initialize", - "offset": [2196, 2203], - "op": "POP", - "path": "10" - }, - "1289": { - "fn": "ProxySupport.initialize", - "offset": [2196, 2203], - "op": "POP", - "path": "10" - }, - "1290": { - "fn": "ProxySupport.initialize", - "offset": [2196, 2203], - "op": "POP", - "path": "10" - }, - "1291": { - "fn": "ProxySupport.initialize", - "offset": [2196, 2203], - "op": "POP", - "path": "10" - }, - "1292": { - "fn": "ProxySupport.initialize", - "offset": [2196, 2203], - "op": "POP", - "path": "10" - }, - "1293": { - "fn": "ProxySupport.initialize", - "offset": [2196, 2203], - "op": "POP", - "path": "10" - }, - "1294": { - "fn": "ProxySupport.initialize", - "offset": [2196, 2203], - "op": "PUSH2", - "path": "10", - "value": "0x39B" - }, - "1297": { - "fn": "ProxySupport.initialize", - "offset": [2196, 2203], - "op": "JUMP", - "path": "10" - }, - "1298": { - "fn": "ProxySupport.initialize", - "offset": [2091, 2213], - "op": "JUMPDEST", - "path": "10" - }, - "1299": { - "fn": "ProxySupport.initialize", - "offset": [2227, 2242], - "op": "PUSH2", - "path": "10", - "value": "0x51A" - }, - "1302": { - "fn": "ProxySupport.initialize", - "offset": [2227, 2240], - "op": "PUSH2", - "path": "10", - "value": "0xD86" - }, - "1305": { - "fn": "ProxySupport.initialize", - "jump": "i", - "offset": [2227, 2242], - "op": "JUMP", - "path": "10" - }, - "1306": { - "branch": 92, - "fn": "ProxySupport.initialize", - "offset": [2227, 2242], - "op": "JUMPDEST", - "path": "10" - }, - "1307": { - "fn": "ProxySupport.initialize", - "offset": [2223, 2505], - "op": "ISZERO", - "path": "10" - }, - "1308": { - "fn": "ProxySupport.initialize", - "offset": [2223, 2505], - "op": "PUSH2", - "path": "10", - "value": "0x56E" - }, - "1311": { - "branch": 92, - "fn": "ProxySupport.initialize", - "offset": [2223, 2505], - "op": "JUMPI", - "path": "10" - }, - "1312": { - "fn": "ProxySupport.initialize", - "offset": [2266, 2286], - "op": "DUP1", - "path": "10", - "statement": 9 - }, - "1313": { - "branch": 93, - "fn": "ProxySupport.initialize", - "offset": [2266, 2286], - "op": "ISZERO", - "path": "10" - }, - "1314": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "PUSH2", - "path": "10", - "value": "0x569" - }, - "1317": { - "branch": 93, - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "JUMPI", - "path": "10" - }, - "1318": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "PUSH1", - "path": "10", - "value": "0x40" - }, - "1320": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "DUP1", - "path": "10" - }, - "1321": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "MLOAD", - "path": "10" - }, - "1322": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "1326": { - "op": "PUSH1", - "value": "0xE5" - }, - "1328": { - "op": "SHL" - }, - "1329": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "DUP2", - "path": "10" - }, - "1330": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "MSTORE", - "path": "10" - }, - "1331": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "1333": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "PUSH1", - "path": "10", - "value": "0x4" - }, - "1335": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "DUP3", - "path": "10" - }, - "1336": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "ADD", - "path": "10" - }, - "1337": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "MSTORE", - "path": "10" - }, - "1338": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "PUSH1", - "path": "10", - "value": "0x14" - }, - "1340": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "PUSH1", - "path": "10", - "value": "0x24" - }, - "1342": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "DUP3", - "path": "10" - }, - "1343": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "ADD", - "path": "10" - }, - "1344": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "MSTORE", - "path": "10" - }, - "1345": { - "op": "PUSH20", - "value": "0x554E45585045435445445F494E49545F44415441" - }, - "1366": { - "op": "PUSH1", - "value": "0x60" - }, - "1368": { - "op": "SHL" - }, - "1369": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "PUSH1", - "path": "10", - "value": "0x44" - }, - "1371": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "DUP3", - "path": "10" - }, - "1372": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "ADD", - "path": "10" - }, - "1373": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "MSTORE", - "path": "10" - }, - "1374": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "SWAP1", - "path": "10" - }, - "1375": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "MLOAD", - "path": "10" - }, - "1376": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "SWAP1", - "path": "10" - }, - "1377": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "DUP2", - "path": "10" - }, - "1378": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "SWAP1", - "path": "10" - }, - "1379": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "SUB", - "path": "10" - }, - "1380": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "PUSH1", - "path": "10", - "value": "0x64" - }, - "1382": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "ADD", - "path": "10" - }, - "1383": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "SWAP1", - "path": "10" - }, - "1384": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "REVERT", - "path": "10" - }, - "1385": { - "fn": "ProxySupport.initialize", - "offset": [2258, 2311], - "op": "JUMPDEST", - "path": "10" - }, - "1386": { - "fn": "ProxySupport.initialize", - "offset": [2223, 2505], - "op": "PUSH2", - "path": "10", - "value": "0x58A" - }, - "1389": { - "fn": "ProxySupport.initialize", - "offset": [2223, 2505], - "op": "JUMP", - "path": "10" - }, - "1390": { - "fn": "ProxySupport.initialize", - "offset": [2223, 2505], - "op": "JUMPDEST", - "path": "10" - }, - "1391": { - "fn": "ProxySupport.initialize", - "offset": [2391, 2417], - "op": "PUSH2", - "path": "10", - "statement": 10, - "value": "0x578" - }, - "1394": { - "fn": "ProxySupport.initialize", - "offset": [2408, 2416], - "op": "DUP3", - "path": "10" - }, - "1395": { - "fn": "ProxySupport.initialize", - "offset": [2408, 2416], - "op": "DUP3", - "path": "10" - }, - "1396": { - "fn": "ProxySupport.initialize", - "offset": [2391, 2407], - "op": "PUSH2", - "path": "10", - "value": "0xDA1" - }, - "1399": { - "fn": "ProxySupport.initialize", - "jump": "i", - "offset": [2391, 2417], - "op": "JUMP", - "path": "10" - }, - "1400": { - "fn": "ProxySupport.initialize", - "offset": [2391, 2417], - "op": "JUMPDEST", - "path": "10" - }, - "1401": { - "fn": "ProxySupport.initialize", - "offset": [2431, 2464], - "op": "PUSH2", - "path": "10", - "statement": 11, - "value": "0x582" - }, - "1404": { - "fn": "ProxySupport.initialize", - "offset": [2455, 2463], - "op": "DUP3", - "path": "10" - }, - "1405": { - "fn": "ProxySupport.initialize", - "offset": [2455, 2463], - "op": "DUP3", - "path": "10" - }, - "1406": { - "fn": "ProxySupport.initialize", - "offset": [2431, 2454], - "op": "PUSH2", - "path": "10", - "value": "0xDEA" - }, - "1409": { - "fn": "ProxySupport.initialize", - "jump": "i", - "offset": [2431, 2464], - "op": "JUMP", - "path": "10" - }, - "1410": { - "fn": "ProxySupport.initialize", - "offset": [2431, 2464], - "op": "JUMPDEST", - "path": "10" - }, - "1411": { - "fn": "ProxySupport.initialize", - "offset": [2478, 2494], - "op": "PUSH2", - "path": "10", - "statement": 12, - "value": "0x58A" - }, - "1414": { - "fn": "ProxySupport.initialize", - "offset": [2478, 2492], - "op": "PUSH2", - "path": "10", - "value": "0xE2D" - }, - "1417": { - "fn": "ProxySupport.initialize", - "jump": "i", - "offset": [2478, 2494], - "op": "JUMP", - "path": "10" - }, - "1418": { - "fn": "ProxySupport.initialize", - "offset": [2478, 2494], - "op": "JUMPDEST", - "path": "10" - }, - "1419": { - "offset": [1244, 1245], - "op": "POP", - "path": "5" - }, - "1420": { - "fn": "ProxySupport.initialize", - "offset": [1244, 1245], - "op": "POP", - "path": "5" - }, - "1421": { - "fn": "ProxySupport.initialize", - "offset": [1244, 1245], - "op": "POP", - "path": "5" - }, - "1422": { - "fn": "ProxySupport.initialize", - "offset": [1244, 1245], - "op": "POP", - "path": "5" - }, - "1423": { - "fn": "ProxySupport.initialize", - "offset": [1244, 1245], - "op": "POP", - "path": "5" - }, - "1424": { - "fn": "ProxySupport.initialize", - "offset": [1244, 1245], - "op": "POP", - "path": "5" - }, - "1425": { - "fn": "ProxySupport.initialize", - "offset": [1244, 1245], - "op": "POP", - "path": "5" - }, - "1426": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "POP", - "path": "10" - }, - "1427": { - "fn": "ProxySupport.initialize", - "offset": [1483, 2511], - "op": "POP", - "path": "10" - }, - "1428": { - "fn": "ProxySupport.initialize", - "jump": "o", - "offset": [1483, 2511], - "op": "JUMP", - "path": "10" - }, - "1429": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [872, 992], - "op": "JUMPDEST", - "path": "34" - }, - "1430": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [951, 985], - "op": "PUSH2", - "path": "34", - "statement": 13, - "value": "0x3BA" - }, - "1433": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [966, 984], - "op": "DUP2", - "path": "34" - }, - "1434": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "offset": [951, 965], - "op": "PUSH2", - "path": "34", - "value": "0xEAF" - }, - "1437": { - "fn": "StarknetGovernance.starknetRemoveGovernor", - "jump": "i", - "offset": [951, 985], - "op": "JUMP", - "path": "34" - }, - "1438": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [2946, 3128], - "op": "JUMPDEST", - "path": "28" - }, - "1439": { - "offset": [434, 456], - "op": "PUSH2", - "path": "8", - "value": "0x5A7" - }, - "1442": { - "offset": [445, 455], - "op": "CALLER", - "path": "8" - }, - "1443": { - "offset": [434, 444], - "op": "PUSH2", - "path": "8", - "value": "0xB00" - }, - "1446": { - "jump": "i", - "offset": [434, 456], - "op": "JUMP", - "path": "8" - }, - "1447": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [434, 456], - "op": "JUMPDEST", - "path": "8" - }, - "1448": { - "offset": [426, 476], - "op": "PUSH2", - "path": "8", - "value": "0x5EA" - }, - "1451": { - "offset": [426, 476], - "op": "JUMPI", - "path": "8" - }, - "1452": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x40" - }, - "1454": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "DUP1", - "path": "8" - }, - "1455": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "MLOAD", - "path": "8" - }, - "1456": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "1460": { - "op": "PUSH1", - "value": "0xE5" - }, - "1462": { - "op": "SHL" - }, - "1463": { - "offset": [426, 476], - "op": "DUP2", - "path": "8" - }, - "1464": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "1465": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x20" - }, - "1467": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x4" - }, - "1469": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "1470": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "1471": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "1472": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0xF" - }, - "1474": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x24" - }, - "1476": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "1477": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "1478": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "1479": { - "op": "PUSH15", - "value": "0x4F4E4C595F474F5645524E414E4345" - }, - "1495": { - "op": "PUSH1", - "value": "0x88" - }, - "1497": { - "op": "SHL" - }, - "1498": { - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x44" - }, - "1500": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "1501": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "1502": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "1503": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "1504": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "MLOAD", - "path": "8" - }, - "1505": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "1506": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "DUP2", - "path": "8" - }, - "1507": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "1508": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "SUB", - "path": "8" - }, - "1509": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x64" - }, - "1511": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "1512": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "1513": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "REVERT", - "path": "8" - }, - "1514": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [426, 476], - "op": "JUMPDEST", - "path": "8" - }, - "1515": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "PUSH1", - "path": "28", - "statement": 14, - "value": "0x40" - }, - "1517": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "DUP1", - "path": "28" - }, - "1518": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "MLOAD", - "path": "28" - }, - "1519": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "DUP3", - "path": "28" - }, - "1520": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "DUP2", - "path": "28" - }, - "1521": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "MSTORE", - "path": "28" - }, - "1522": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "SWAP1", - "path": "28" - }, - "1523": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "MLOAD", - "path": "28" - }, - "1524": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "PUSH32", - "path": "28", - "value": "0xA9AEC19EC61C04AE0A4A1498AB6CE04CBD68B3D54C47888A45EB2BD37CAF06BC" - }, - "1557": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "SWAP2", - "path": "28" - }, - "1558": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "DUP2", - "path": "28" - }, - "1559": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "SWAP1", - "path": "28" - }, - "1560": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "SUB", - "path": "28" - }, - "1561": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "1563": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "ADD", - "path": "28" - }, - "1564": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "SWAP1", - "path": "28" - }, - "1565": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3039, 3078], - "op": "LOG1", - "path": "28" - }, - "1566": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3088, 3121], - "op": "PUSH2", - "path": "28", - "statement": 15, - "value": "0x3BA" - }, - "1569": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3104, 3120], - "op": "DUP2", - "path": "28" - }, - "1570": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "offset": [3088, 3103], - "op": "PUSH2", - "path": "28", - "value": "0xFFC" - }, - "1573": { - "fn": "StarknetTokenBridge.setMaxTotalBalance", - "jump": "i", - "offset": [3088, 3121], - "op": "JUMP", - "path": "28" - }, - "1574": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [750, 866], - "op": "JUMPDEST", - "path": "34" - }, - "1575": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [827, 859], - "op": "PUSH2", - "path": "34", - "statement": 16, - "value": "0x3BA" - }, - "1578": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [847, 858], - "op": "DUP2", - "path": "34" - }, - "1579": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "offset": [827, 846], - "op": "PUSH2", - "path": "34", - "value": "0x101E" - }, - "1582": { - "fn": "StarknetGovernance.starknetNominateNewGovernor", - "jump": "i", - "offset": [827, 859], - "op": "JUMP", - "path": "34" - }, - "1583": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "offset": [998, 1078], - "op": "JUMPDEST", - "path": "34" - }, - "1584": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "offset": [1053, 1071], - "op": "PUSH2", - "path": "34", - "statement": 17, - "value": "0x637" - }, - "1587": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "offset": [1053, 1069], - "op": "PUSH2", - "path": "34", - "value": "0x111B" - }, - "1590": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "jump": "i", - "offset": [1053, 1071], - "op": "JUMP", - "path": "34" - }, - "1591": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "offset": [1053, 1071], - "op": "JUMPDEST", - "path": "34" - }, - "1592": { - "fn": "StarknetGovernance.starknetAcceptGovernance", - "jump": "o", - "offset": [998, 1078], - "op": "JUMP", - "path": "34" - }, - "1593": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2665, 2940], - "op": "JUMPDEST", - "path": "28" - }, - "1594": { - "offset": [2461, 2478], - "op": "PUSH2", - "path": "28", - "value": "0x641" - }, - "1597": { - "offset": [2461, 2476], - "op": "PUSH2", - "path": "28", - "value": "0x11E8" - }, - "1600": { - "jump": "i", - "offset": [2461, 2478], - "op": "JUMP", - "path": "28" - }, - "1601": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2461, 2478], - "op": "JUMPDEST", - "path": "28" - }, - "1602": { - "offset": [2461, 2483], - "op": "ISZERO", - "path": "28" - }, - "1603": { - "offset": [2453, 2517], - "op": "PUSH2", - "path": "28", - "value": "0x693" - }, - "1606": { - "offset": [2453, 2517], - "op": "JUMPI", - "path": "28" - }, - "1607": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "1609": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "DUP1", - "path": "28" - }, - "1610": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "MLOAD", - "path": "28" - }, - "1611": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "1615": { - "op": "PUSH1", - "value": "0xE5" - }, - "1617": { - "op": "SHL" - }, - "1618": { - "offset": [2453, 2517], - "op": "DUP2", - "path": "28" - }, - "1619": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "MSTORE", - "path": "28" - }, - "1620": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "1622": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "1624": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "DUP3", - "path": "28" - }, - "1625": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "ADD", - "path": "28" - }, - "1626": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "MSTORE", - "path": "28" - }, - "1627": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "PUSH1", - "path": "28", - "value": "0x1D" - }, - "1629": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "PUSH1", - "path": "28", - "value": "0x24" - }, - "1631": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "DUP3", - "path": "28" - }, - "1632": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "ADD", - "path": "28" - }, - "1633": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "MSTORE", - "path": "28" - }, - "1634": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "PUSH32", - "path": "28", - "value": "0x4C325F544F4B454E5F434F4E54524143545F414C52454144595F534554000000" - }, - "1667": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "PUSH1", - "path": "28", - "value": "0x44" - }, - "1669": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "DUP3", - "path": "28" - }, - "1670": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "ADD", - "path": "28" - }, - "1671": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "MSTORE", - "path": "28" - }, - "1672": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "SWAP1", - "path": "28" - }, - "1673": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "MLOAD", - "path": "28" - }, - "1674": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "SWAP1", - "path": "28" - }, - "1675": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "DUP2", - "path": "28" - }, - "1676": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "SWAP1", - "path": "28" - }, - "1677": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "SUB", - "path": "28" - }, - "1678": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "PUSH1", - "path": "28", - "value": "0x64" - }, - "1680": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "ADD", - "path": "28" - }, - "1681": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "SWAP1", - "path": "28" - }, - "1682": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "REVERT", - "path": "28" - }, - "1683": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2453, 2517], - "op": "JUMPDEST", - "path": "28" - }, - "1684": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2791, 2807], - "op": "DUP1", - "path": "28" - }, - "1685": { - "offset": [2260, 2274], - "op": "DUP1", - "path": "28" - }, - "1686": { - "offset": [2252, 2302], - "op": "PUSH2", - "path": "28", - "value": "0x6E0" - }, - "1689": { - "offset": [2252, 2302], - "op": "JUMPI", - "path": "28" - }, - "1690": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "1692": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "DUP1", - "path": "28" - }, - "1693": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "MLOAD", - "path": "28" - }, - "1694": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "1698": { - "op": "PUSH1", - "value": "0xE5" - }, - "1700": { - "op": "SHL" - }, - "1701": { - "offset": [2252, 2302], - "op": "DUP2", - "path": "28" - }, - "1702": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "MSTORE", - "path": "28" - }, - "1703": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "1705": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "1707": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "DUP3", - "path": "28" - }, - "1708": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "ADD", - "path": "28" - }, - "1709": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "MSTORE", - "path": "28" - }, - "1710": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "PUSH1", - "path": "28", - "value": "0x17" - }, - "1712": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "PUSH1", - "path": "28", - "value": "0x24" - }, - "1714": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "DUP3", - "path": "28" - }, - "1715": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "ADD", - "path": "28" - }, - "1716": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "MSTORE", - "path": "28" - }, - "1717": { - "op": "PUSH23", - "value": "0x4C325F414444524553535F4F55545F4F465F52414E4745" - }, - "1741": { - "op": "PUSH1", - "value": "0x48" - }, - "1743": { - "op": "SHL" - }, - "1744": { - "offset": [2252, 2302], - "op": "PUSH1", - "path": "28", - "value": "0x44" - }, - "1746": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "DUP3", - "path": "28" - }, - "1747": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "ADD", - "path": "28" - }, - "1748": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "MSTORE", - "path": "28" - }, - "1749": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "SWAP1", - "path": "28" - }, - "1750": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "MLOAD", - "path": "28" - }, - "1751": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "SWAP1", - "path": "28" - }, - "1752": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "DUP2", - "path": "28" - }, - "1753": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "SWAP1", - "path": "28" - }, - "1754": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "SUB", - "path": "28" - }, - "1755": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "PUSH1", - "path": "28", - "value": "0x64" - }, - "1757": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "ADD", - "path": "28" - }, - "1758": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "SWAP1", - "path": "28" - }, - "1759": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "REVERT", - "path": "28" - }, - "1760": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2252, 2302], - "op": "JUMPDEST", - "path": "28" - }, - "1761": { - "op": "PUSH1", - "value": "0x1" - }, - "1763": { - "op": "PUSH8", - "value": "0x800000000000011" - }, - "1772": { - "op": "PUSH1", - "value": "0xC0" - }, - "1774": { - "op": "SHL" - }, - "1775": { - "op": "ADD" - }, - "1776": { - "offset": [2320, 2329], - "op": "DUP2", - "path": "28" - }, - "1777": { - "offset": [2320, 2358], - "op": "LT", - "path": "28" - }, - "1778": { - "offset": [2312, 2386], - "op": "PUSH2", - "path": "28", - "value": "0x73C" - }, - "1781": { - "offset": [2312, 2386], - "op": "JUMPI", - "path": "28" - }, - "1782": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "1784": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "DUP1", - "path": "28" - }, - "1785": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "MLOAD", - "path": "28" - }, - "1786": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "1790": { - "op": "PUSH1", - "value": "0xE5" - }, - "1792": { - "op": "SHL" - }, - "1793": { - "offset": [2312, 2386], - "op": "DUP2", - "path": "28" - }, - "1794": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "MSTORE", - "path": "28" - }, - "1795": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "1797": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "1799": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "DUP3", - "path": "28" - }, - "1800": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "ADD", - "path": "28" - }, - "1801": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "MSTORE", - "path": "28" - }, - "1802": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "PUSH1", - "path": "28", - "value": "0x17" - }, - "1804": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "PUSH1", - "path": "28", - "value": "0x24" - }, - "1806": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "DUP3", - "path": "28" - }, - "1807": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "ADD", - "path": "28" - }, - "1808": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "MSTORE", - "path": "28" - }, - "1809": { - "op": "PUSH23", - "value": "0x4C325F414444524553535F4F55545F4F465F52414E4745" - }, - "1833": { - "op": "PUSH1", - "value": "0x48" - }, - "1835": { - "op": "SHL" - }, - "1836": { - "offset": [2312, 2386], - "op": "PUSH1", - "path": "28", - "value": "0x44" - }, - "1838": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "DUP3", - "path": "28" - }, - "1839": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "ADD", - "path": "28" - }, - "1840": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "MSTORE", - "path": "28" - }, - "1841": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "SWAP1", - "path": "28" - }, - "1842": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "MLOAD", - "path": "28" - }, - "1843": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "SWAP1", - "path": "28" - }, - "1844": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "DUP2", - "path": "28" - }, - "1845": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "SWAP1", - "path": "28" - }, - "1846": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "SUB", - "path": "28" - }, - "1847": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "PUSH1", - "path": "28", - "value": "0x64" - }, - "1849": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "ADD", - "path": "28" - }, - "1850": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "SWAP1", - "path": "28" - }, - "1851": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "REVERT", - "path": "28" - }, - "1852": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2312, 2386], - "op": "JUMPDEST", - "path": "28" - }, - "1853": { - "offset": [434, 456], - "op": "PUSH2", - "path": "8", - "value": "0x745" - }, - "1856": { - "offset": [445, 455], - "op": "CALLER", - "path": "8" - }, - "1857": { - "offset": [434, 444], - "op": "PUSH2", - "path": "8", - "value": "0xB00" - }, - "1860": { - "jump": "i", - "offset": [434, 456], - "op": "JUMP", - "path": "8" - }, - "1861": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [434, 456], - "op": "JUMPDEST", - "path": "8" - }, - "1862": { - "offset": [426, 476], - "op": "PUSH2", - "path": "8", - "value": "0x788" - }, - "1865": { - "offset": [426, 476], - "op": "JUMPI", - "path": "8" - }, - "1866": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x40" - }, - "1868": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "DUP1", - "path": "8" - }, - "1869": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "MLOAD", - "path": "8" - }, - "1870": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "1874": { - "op": "PUSH1", - "value": "0xE5" - }, - "1876": { - "op": "SHL" - }, - "1877": { - "offset": [426, 476], - "op": "DUP2", - "path": "8" - }, - "1878": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "1879": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x20" - }, - "1881": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x4" - }, - "1883": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "1884": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "1885": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "1886": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0xF" - }, - "1888": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x24" - }, - "1890": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "1891": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "1892": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "1893": { - "op": "PUSH15", - "value": "0x4F4E4C595F474F5645524E414E4345" - }, - "1909": { - "op": "PUSH1", - "value": "0x88" - }, - "1911": { - "op": "SHL" - }, - "1912": { - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x44" - }, - "1914": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "1915": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "1916": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "1917": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "1918": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "MLOAD", - "path": "8" - }, - "1919": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "1920": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "DUP2", - "path": "8" - }, - "1921": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "1922": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "SUB", - "path": "8" - }, - "1923": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x64" - }, - "1925": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "1926": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "1927": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "REVERT", - "path": "8" - }, - "1928": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [426, 476], - "op": "JUMPDEST", - "path": "8" - }, - "1929": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "PUSH1", - "path": "28", - "statement": 18, - "value": "0x40" - }, - "1931": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "DUP1", - "path": "28" - }, - "1932": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "MLOAD", - "path": "28" - }, - "1933": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "DUP4", - "path": "28" - }, - "1934": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "DUP2", - "path": "28" - }, - "1935": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "MSTORE", - "path": "28" - }, - "1936": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "SWAP1", - "path": "28" - }, - "1937": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "MLOAD", - "path": "28" - }, - "1938": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "PUSH32", - "path": "28", - "value": "0x49774A785AFE45B60857497C0AFF8733F202CA7E75329AD6408073564EFEA6DF" - }, - "1971": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "SWAP2", - "path": "28" - }, - "1972": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "DUP2", - "path": "28" - }, - "1973": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "SWAP1", - "path": "28" - }, - "1974": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "SUB", - "path": "28" - }, - "1975": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "1977": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "ADD", - "path": "28" - }, - "1978": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "SWAP1", - "path": "28" - }, - "1979": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2851, 2890], - "op": "LOG1", - "path": "28" - }, - "1980": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2900, 2933], - "op": "PUSH2", - "path": "28", - "statement": 19, - "value": "0x39B" - }, - "1983": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2916, 2932], - "op": "DUP3", - "path": "28" - }, - "1984": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "offset": [2900, 2915], - "op": "PUSH2", - "path": "28", - "value": "0x1210" - }, - "1987": { - "fn": "StarknetTokenBridge.setL2TokenContract", - "jump": "i", - "offset": [2900, 2933], - "op": "JUMP", - "path": "28" - }, - "1988": { - "fn": "StarknetEthBridge.deposit", - "offset": [308, 583], - "op": "JUMPDEST", - "path": "27" - }, - "1989": { - "fn": "StarknetEthBridge.deposit", - "offset": [489, 506], - "op": "PUSH2", - "path": "27", - "statement": 20, - "value": "0x7CC" - }, - "1992": { - "fn": "StarknetEthBridge.deposit", - "offset": [489, 504], - "op": "PUSH2", - "path": "27", - "value": "0x1232" - }, - "1995": { - "fn": "StarknetEthBridge.deposit", - "jump": "i", - "offset": [489, 506], - "op": "JUMP", - "path": "27" - }, - "1996": { - "fn": "StarknetEthBridge.deposit", - "offset": [489, 506], - "op": "JUMPDEST", - "path": "27" - }, - "1997": { - "fn": "StarknetEthBridge.deposit", - "offset": [464, 485], - "op": "SELFBALANCE", - "path": "27" - }, - "1998": { - "fn": "StarknetEthBridge.deposit", - "offset": [464, 506], - "op": "GT", - "path": "27" - }, - "1999": { - "branch": 78, - "fn": "StarknetEthBridge.deposit", - "offset": [464, 506], - "op": "ISZERO", - "path": "27" - }, - "2000": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "PUSH2", - "path": "27", - "value": "0x817" - }, - "2003": { - "branch": 78, - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "JUMPI", - "path": "27" - }, - "2004": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "PUSH1", - "path": "27", - "value": "0x40" - }, - "2006": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "DUP1", - "path": "27" - }, - "2007": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "MLOAD", - "path": "27" - }, - "2008": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "2012": { - "op": "PUSH1", - "value": "0xE5" - }, - "2014": { - "op": "SHL" - }, - "2015": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "DUP2", - "path": "27" - }, - "2016": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "MSTORE", - "path": "27" - }, - "2017": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "PUSH1", - "path": "27", - "value": "0x20" - }, - "2019": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "PUSH1", - "path": "27", - "value": "0x4" - }, - "2021": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "DUP3", - "path": "27" - }, - "2022": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "ADD", - "path": "27" - }, - "2023": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "MSTORE", - "path": "27" - }, - "2024": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "PUSH1", - "path": "27", - "value": "0x14" - }, - "2026": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "PUSH1", - "path": "27", - "value": "0x24" - }, - "2028": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "DUP3", - "path": "27" - }, - "2029": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "ADD", - "path": "27" - }, - "2030": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "MSTORE", - "path": "27" - }, - "2031": { - "op": "PUSH20", - "value": "0x13505617D09053105390D157D15610D151511151" - }, - "2052": { - "op": "PUSH1", - "value": "0x62" - }, - "2054": { - "op": "SHL" - }, - "2055": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "PUSH1", - "path": "27", - "value": "0x44" - }, - "2057": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "DUP3", - "path": "27" - }, - "2058": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "ADD", - "path": "27" - }, - "2059": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "MSTORE", - "path": "27" - }, - "2060": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "SWAP1", - "path": "27" - }, - "2061": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "MLOAD", - "path": "27" - }, - "2062": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "SWAP1", - "path": "27" - }, - "2063": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "DUP2", - "path": "27" - }, - "2064": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "SWAP1", - "path": "27" - }, - "2065": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "SUB", - "path": "27" - }, - "2066": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "PUSH1", - "path": "27", - "value": "0x64" - }, - "2068": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "ADD", - "path": "27" - }, - "2069": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "SWAP1", - "path": "27" - }, - "2070": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "REVERT", - "path": "27" - }, - "2071": { - "fn": "StarknetEthBridge.deposit", - "offset": [456, 531], - "op": "JUMPDEST", - "path": "27" - }, - "2072": { - "fn": "StarknetEthBridge.deposit", - "offset": [541, 576], - "op": "PUSH2", - "path": "27", - "statement": 21, - "value": "0x3BA" - }, - "2075": { - "fn": "StarknetEthBridge.deposit", - "offset": [553, 562], - "op": "CALLVALUE", - "path": "27" - }, - "2076": { - "fn": "StarknetEthBridge.deposit", - "offset": [564, 575], - "op": "DUP3", - "path": "27" - }, - "2077": { - "fn": "StarknetEthBridge.deposit", - "offset": [541, 552], - "op": "PUSH2", - "path": "27", - "value": "0x1255" - }, - "2080": { - "fn": "StarknetEthBridge.deposit", - "jump": "i", - "offset": [541, 576], - "op": "JUMP", - "path": "27" - }, - "2081": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3134, 3286], - "op": "JUMPDEST", - "path": "28" - }, - "2082": { - "offset": [434, 456], - "op": "PUSH2", - "path": "8", - "value": "0x82A" - }, - "2085": { - "offset": [445, 455], - "op": "CALLER", - "path": "8" - }, - "2086": { - "offset": [434, 444], - "op": "PUSH2", - "path": "8", - "value": "0xB00" - }, - "2089": { - "jump": "i", - "offset": [434, 456], - "op": "JUMP", - "path": "8" - }, - "2090": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [434, 456], - "op": "JUMPDEST", - "path": "8" - }, - "2091": { - "offset": [426, 476], - "op": "PUSH2", - "path": "8", - "value": "0x86D" - }, - "2094": { - "offset": [426, 476], - "op": "JUMPI", - "path": "8" - }, - "2095": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x40" - }, - "2097": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "DUP1", - "path": "8" - }, - "2098": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "MLOAD", - "path": "8" - }, - "2099": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "2103": { - "op": "PUSH1", - "value": "0xE5" - }, - "2105": { - "op": "SHL" - }, - "2106": { - "offset": [426, 476], - "op": "DUP2", - "path": "8" - }, - "2107": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "2108": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x20" - }, - "2110": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x4" - }, - "2112": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "2113": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "2114": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "2115": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0xF" - }, - "2117": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x24" - }, - "2119": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "2120": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "2121": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "2122": { - "op": "PUSH15", - "value": "0x4F4E4C595F474F5645524E414E4345" - }, - "2138": { - "op": "PUSH1", - "value": "0x88" - }, - "2140": { - "op": "SHL" - }, - "2141": { - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x44" - }, - "2143": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "2144": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "2145": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "2146": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "2147": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "MLOAD", - "path": "8" - }, - "2148": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "2149": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "DUP2", - "path": "8" - }, - "2150": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "2151": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "SUB", - "path": "8" - }, - "2152": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x64" - }, - "2154": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "2155": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "2156": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "REVERT", - "path": "8" - }, - "2157": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [426, 476], - "op": "JUMPDEST", - "path": "8" - }, - "2158": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "PUSH1", - "path": "28", - "statement": 22, - "value": "0x40" - }, - "2160": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "DUP1", - "path": "28" - }, - "2161": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "MLOAD", - "path": "28" - }, - "2162": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "DUP3", - "path": "28" - }, - "2163": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "DUP2", - "path": "28" - }, - "2164": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "MSTORE", - "path": "28" - }, - "2165": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "SWAP1", - "path": "28" - }, - "2166": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "MLOAD", - "path": "28" - }, - "2167": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "PUSH32", - "path": "28", - "value": "0xAF474B5AFCF11BD99DC9FC7F499E6AB368D650BF7EF23993F0D61BD9AD762651" - }, - "2200": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "SWAP2", - "path": "28" - }, - "2201": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "DUP2", - "path": "28" - }, - "2202": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "SWAP1", - "path": "28" - }, - "2203": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "SUB", - "path": "28" - }, - "2204": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2206": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "ADD", - "path": "28" - }, - "2207": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "SWAP1", - "path": "28" - }, - "2208": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3217, 3246], - "op": "LOG1", - "path": "28" - }, - "2209": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3256, 3279], - "op": "PUSH2", - "path": "28", - "statement": 23, - "value": "0x3BA" - }, - "2212": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3267, 3278], - "op": "DUP2", - "path": "28" - }, - "2213": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "offset": [3256, 3266], - "op": "PUSH2", - "path": "28", - "value": "0x1543" - }, - "2216": { - "fn": "StarknetTokenBridge.setMaxDeposit", - "jump": "i", - "offset": [3256, 3279], - "op": "JUMP", - "path": "28" - }, - "2217": { - "fn": "StarknetGovernance.starknetCancelNomination", - "offset": [1084, 1164], - "op": "JUMPDEST", - "path": "34" - }, - "2218": { - "fn": "StarknetGovernance.starknetCancelNomination", - "offset": [1139, 1157], - "op": "PUSH2", - "path": "34", - "statement": 24, - "value": "0x637" - }, - "2221": { - "fn": "StarknetGovernance.starknetCancelNomination", - "offset": [1139, 1155], - "op": "PUSH2", - "path": "34", - "value": "0x1565" - }, - "2224": { - "fn": "StarknetGovernance.starknetCancelNomination", - "jump": "i", - "offset": [1139, 1157], - "op": "JUMP", - "path": "34" - }, - "2225": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3857, 4296], - "op": "JUMPDEST", - "path": "28" - }, - "2226": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "PUSH1", - "path": "28", - "statement": 25, - "value": "0x40" - }, - "2228": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "DUP1", - "path": "28" - }, - "2229": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "MLOAD", - "path": "28" - }, - "2230": { - "op": "PUSH1", - "value": "0x1" - }, - "2232": { - "op": "PUSH1", - "value": "0x1" - }, - "2234": { - "op": "PUSH1", - "value": "0xA0" - }, - "2236": { - "op": "SHL" - }, - "2237": { - "op": "SUB" - }, - "2238": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "DUP4", - "path": "28" - }, - "2239": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "AND", - "path": "28" - }, - "2240": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "DUP2", - "path": "28" - }, - "2241": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "MSTORE", - "path": "28" - }, - "2242": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2244": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "DUP2", - "path": "28" - }, - "2245": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "ADD", - "path": "28" - }, - "2246": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "DUP5", - "path": "28" - }, - "2247": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "SWAP1", - "path": "28" - }, - "2248": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "MSTORE", - "path": "28" - }, - "2249": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "DUP2", - "path": "28" - }, - "2250": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "MLOAD", - "path": "28" - }, - "2251": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "PUSH32", - "path": "28", - "value": "0xB4214C8C54FC7442F36D3682F59AEBAF09358A4431835B30EFB29D52CF9E1E91" - }, - "2284": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "SWAP3", - "path": "28" - }, - "2285": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "SWAP2", - "path": "28" - }, - "2286": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "DUP2", - "path": "28" - }, - "2287": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "SWAP1", - "path": "28" - }, - "2288": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "SUB", - "path": "28" - }, - "2289": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "SWAP1", - "path": "28" - }, - "2290": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "SWAP2", - "path": "28" - }, - "2291": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "ADD", - "path": "28" - }, - "2292": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "SWAP1", - "path": "28" - }, - "2293": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3940, 3972], - "op": "LOG1", - "path": "28" - }, - "2294": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "2296": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "DUP1", - "path": "28" - }, - "2297": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "MLOAD", - "path": "28" - }, - "2298": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4024, 4025], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "2300": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "DUP1", - "path": "28" - }, - "2301": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "DUP3", - "path": "28" - }, - "2302": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "MSTORE", - "path": "28" - }, - "2303": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "PUSH1", - "path": "28", - "value": "0xA0" - }, - "2305": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "DUP3", - "path": "28" - }, - "2306": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "ADD", - "path": "28" - }, - "2307": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "SWAP1", - "path": "28" - }, - "2308": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "SWAP3", - "path": "28" - }, - "2309": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "MSTORE", - "path": "28" - }, - "2310": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3983, 4007], - "op": "PUSH1", - "path": "28", - "value": "0x60" - }, - "2312": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3983, 4007], - "op": "SWAP2", - "path": "28" - }, - "2313": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2315": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "DUP3", - "path": "28" - }, - "2316": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "ADD", - "path": "28" - }, - "2317": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "PUSH1", - "path": "28", - "value": "0x80" - }, - "2319": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "DUP1", - "path": "28" - }, - "2320": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "CALLDATASIZE", - "path": "28" - }, - "2321": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "DUP4", - "path": "28" - }, - "2322": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "CALLDATACOPY", - "path": "28" - }, - "2323": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "ADD", - "path": "28" - }, - "2324": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "SWAP1", - "path": "28" - }, - "2325": { - "op": "POP" - }, - "2326": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4010, 4026], - "op": "POP", - "path": "28" - }, - "2327": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3983, 4026], - "op": "SWAP1", - "path": "28" - }, - "2328": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [3983, 4026], - "op": "POP", - "path": "28" - }, - "2329": { - "offset": [2140, 2141], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "2331": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4043], - "op": "DUP2", - "path": "28", - "statement": 26 - }, - "2332": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4044, 4045], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "2334": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4046], - "op": "DUP2", - "path": "28" - }, - "2335": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4046], - "op": "MLOAD", - "path": "28" - }, - "2336": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4046], - "op": "DUP2", - "path": "28" - }, - "2337": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4046], - "op": "LT", - "path": "28" - }, - "2338": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4046], - "op": "PUSH2", - "path": "28", - "value": "0x927" - }, - "2341": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4046], - "op": "JUMPI", - "path": "28" - }, - "2342": { - "dev": "Index out of range", - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4046], - "op": "INVALID", - "path": "28" - }, - "2343": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4046], - "op": "JUMPDEST", - "path": "28" - }, - "2344": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4046], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2346": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4046], - "op": "MUL", - "path": "28" - }, - "2347": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4046], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2349": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4046], - "op": "ADD", - "path": "28" - }, - "2350": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4046], - "op": "ADD", - "path": "28" - }, - "2351": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4071], - "op": "DUP2", - "path": "28" - }, - "2352": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4071], - "op": "DUP2", - "path": "28" - }, - "2353": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4071], - "op": "MSTORE", - "path": "28" - }, - "2354": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4071], - "op": "POP", - "path": "28" - }, - "2355": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4036, 4071], - "op": "POP", - "path": "28" - }, - "2356": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4102, 4111], - "op": "DUP2", - "path": "28", - "statement": 27 - }, - "2357": { - "op": "PUSH1", - "value": "0x1" - }, - "2359": { - "op": "PUSH1", - "value": "0x1" - }, - "2361": { - "op": "PUSH1", - "value": "0xA0" - }, - "2363": { - "op": "SHL" - }, - "2364": { - "op": "SUB" - }, - "2365": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4094, 4112], - "op": "AND", - "path": "28" - }, - "2366": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4088], - "op": "DUP2", - "path": "28" - }, - "2367": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4089, 4090], - "op": "PUSH1", - "path": "28", - "value": "0x1" - }, - "2369": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "DUP2", - "path": "28" - }, - "2370": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "MLOAD", - "path": "28" - }, - "2371": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "DUP2", - "path": "28" - }, - "2372": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "LT", - "path": "28" - }, - "2373": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "PUSH2", - "path": "28", - "value": "0x94A" - }, - "2376": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "JUMPI", - "path": "28" - }, - "2377": { - "dev": "Index out of range", - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "INVALID", - "path": "28" - }, - "2378": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "JUMPDEST", - "path": "28" - }, - "2379": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2381": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "SWAP1", - "path": "28" - }, - "2382": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "DUP2", - "path": "28" - }, - "2383": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "MUL", - "path": "28" - }, - "2384": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "SWAP2", - "path": "28" - }, - "2385": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "SWAP1", - "path": "28" - }, - "2386": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "SWAP2", - "path": "28" - }, - "2387": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "ADD", - "path": "28" - }, - "2388": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4091], - "op": "ADD", - "path": "28" - }, - "2389": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4081, 4112], - "op": "MSTORE", - "path": "28" - }, - "2390": { - "op": "PUSH1", - "value": "0x1" - }, - "2392": { - "op": "PUSH1", - "value": "0x80" - }, - "2394": { - "op": "SHL" - }, - "2395": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4135, 4141], - "op": "DUP4", - "path": "28", - "statement": 28 - }, - "2396": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4135, 4161], - "op": "MOD", - "path": "28" - }, - "2397": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4129], - "op": "DUP2", - "path": "28" - }, - "2398": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4130, 4131], - "op": "PUSH1", - "path": "28", - "value": "0x2" - }, - "2400": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "DUP2", - "path": "28" - }, - "2401": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "MLOAD", - "path": "28" - }, - "2402": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "DUP2", - "path": "28" - }, - "2403": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "LT", - "path": "28" - }, - "2404": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "PUSH2", - "path": "28", - "value": "0x969" - }, - "2407": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "JUMPI", - "path": "28" - }, - "2408": { - "dev": "Index out of range", - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "INVALID", - "path": "28" - }, - "2409": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "JUMPDEST", - "path": "28" - }, - "2410": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2412": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "SWAP1", - "path": "28" - }, - "2413": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "DUP2", - "path": "28" - }, - "2414": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "MUL", - "path": "28" - }, - "2415": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "SWAP2", - "path": "28" - }, - "2416": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "SWAP1", - "path": "28" - }, - "2417": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "SWAP2", - "path": "28" - }, - "2418": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "ADD", - "path": "28" - }, - "2419": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4132], - "op": "ADD", - "path": "28" - }, - "2420": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4122, 4161], - "op": "MSTORE", - "path": "28" - }, - "2421": { - "op": "PUSH1", - "value": "0x1" - }, - "2423": { - "op": "PUSH1", - "value": "0x80" - }, - "2425": { - "op": "SHL" - }, - "2426": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4184, 4190], - "op": "DUP4", - "path": "28", - "statement": 29 - }, - "2427": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4184, 4210], - "op": "DIV", - "path": "28" - }, - "2428": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4178], - "op": "DUP2", - "path": "28" - }, - "2429": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4179, 4180], - "op": "PUSH1", - "path": "28", - "value": "0x3" - }, - "2431": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4181], - "op": "DUP2", - "path": "28" - }, - "2432": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4181], - "op": "MLOAD", - "path": "28" - }, - "2433": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4181], - "op": "DUP2", - "path": "28" - }, - "2434": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4181], - "op": "LT", - "path": "28" - }, - "2435": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4181], - "op": "PUSH2", - "path": "28", - "value": "0x988" - }, - "2438": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4181], - "op": "JUMPI", - "path": "28" - }, - "2439": { - "dev": "Index out of range", - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4181], - "op": "INVALID", - "path": "28" - }, - "2440": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4181], - "op": "JUMPDEST", - "path": "28" - }, - "2441": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4181], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2443": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4181], - "op": "MUL", - "path": "28" - }, - "2444": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4181], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2446": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4181], - "op": "ADD", - "path": "28" - }, - "2447": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4181], - "op": "ADD", - "path": "28" - }, - "2448": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4210], - "op": "DUP2", - "path": "28" - }, - "2449": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4210], - "op": "DUP2", - "path": "28" - }, - "2450": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4210], - "op": "MSTORE", - "path": "28" - }, - "2451": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4210], - "op": "POP", - "path": "28" - }, - "2452": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4171, 4210], - "op": "POP", - "path": "28" - }, - "2453": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4240], - "op": "PUSH2", - "path": "28", - "statement": 30, - "value": "0x99C" - }, - "2456": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4238], - "op": "PUSH2", - "path": "28", - "value": "0x15FC" - }, - "2459": { - "fn": "StarknetTokenBridge.consumeMessage", - "jump": "i", - "offset": [4221, 4240], - "op": "JUMP", - "path": "28" - }, - "2460": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4240], - "op": "JUMPDEST", - "path": "28" - }, - "2461": { - "op": "PUSH1", - "value": "0x1" - }, - "2463": { - "op": "PUSH1", - "value": "0x1" - }, - "2465": { - "op": "PUSH1", - "value": "0xA0" - }, - "2467": { - "op": "SHL" - }, - "2468": { - "op": "SUB" - }, - "2469": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4261], - "op": "AND", - "path": "28" - }, - "2470": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4261], - "op": "PUSH4", - "path": "28", - "value": "0x2C9DD5C0" - }, - "2475": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4262, 4279], - "op": "PUSH2", - "path": "28", - "value": "0x9B2" - }, - "2478": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4262, 4277], - "op": "PUSH2", - "path": "28", - "value": "0x11E8" - }, - "2481": { - "fn": "StarknetTokenBridge.consumeMessage", - "jump": "i", - "offset": [4262, 4279], - "op": "JUMP", - "path": "28" - }, - "2482": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4262, 4279], - "op": "JUMPDEST", - "path": "28" - }, - "2483": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4281, 4288], - "op": "DUP4", - "path": "28" - }, - "2484": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "2486": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "MLOAD", - "path": "28" - }, - "2487": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP4", - "path": "28" - }, - "2488": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH4", - "path": "28", - "value": "0xFFFFFFFF" - }, - "2493": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "AND", - "path": "28" - }, - "2494": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0xE0" - }, - "2496": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "SHL", - "path": "28" - }, - "2497": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP2", - "path": "28" - }, - "2498": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "MSTORE", - "path": "28" - }, - "2499": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "2501": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ADD", - "path": "28" - }, - "2502": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP1", - "path": "28" - }, - "2503": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP4", - "path": "28" - }, - "2504": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP2", - "path": "28" - }, - "2505": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "MSTORE", - "path": "28" - }, - "2506": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2508": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ADD", - "path": "28" - }, - "2509": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP1", - "path": "28" - }, - "2510": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2512": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ADD", - "path": "28" - }, - "2513": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP3", - "path": "28" - }, - "2514": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP2", - "path": "28" - }, - "2515": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "SUB", - "path": "28" - }, - "2516": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP3", - "path": "28" - }, - "2517": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "MSTORE", - "path": "28" - }, - "2518": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP4", - "path": "28" - }, - "2519": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP2", - "path": "28" - }, - "2520": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP2", - "path": "28" - }, - "2521": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "MLOAD", - "path": "28" - }, - "2522": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP2", - "path": "28" - }, - "2523": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "MSTORE", - "path": "28" - }, - "2524": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2526": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ADD", - "path": "28" - }, - "2527": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "SWAP2", - "path": "28" - }, - "2528": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2529": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP1", - "path": "28" - }, - "2530": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "MLOAD", - "path": "28" - }, - "2531": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "SWAP1", - "path": "28" - }, - "2532": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2534": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ADD", - "path": "28" - }, - "2535": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "SWAP1", - "path": "28" - }, - "2536": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2538": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "MUL", - "path": "28" - }, - "2539": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP1", - "path": "28" - }, - "2540": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP4", - "path": "28" - }, - "2541": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP4", - "path": "28" - }, - "2542": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "2544": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "JUMPDEST", - "path": "28" - }, - "2545": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP4", - "path": "28" - }, - "2546": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP2", - "path": "28" - }, - "2547": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "LT", - "path": "28" - }, - "2548": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ISZERO", - "path": "28" - }, - "2549": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH2", - "path": "28", - "value": "0xA08" - }, - "2552": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "JUMPI", - "path": "28" - }, - "2553": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP2", - "path": "28" - }, - "2554": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP2", - "path": "28" - }, - "2555": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ADD", - "path": "28" - }, - "2556": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "MLOAD", - "path": "28" - }, - "2557": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP4", - "path": "28" - }, - "2558": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP3", - "path": "28" - }, - "2559": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ADD", - "path": "28" - }, - "2560": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "MSTORE", - "path": "28" - }, - "2561": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2563": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ADD", - "path": "28" - }, - "2564": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH2", - "path": "28", - "value": "0x9F0" - }, - "2567": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "JUMP", - "path": "28" - }, - "2568": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "JUMPDEST", - "path": "28" - }, - "2569": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2570": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2571": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2572": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2573": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "SWAP1", - "path": "28" - }, - "2574": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2575": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ADD", - "path": "28" - }, - "2576": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "SWAP4", - "path": "28" - }, - "2577": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2578": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2579": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2580": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2581": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2583": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "2585": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "MLOAD", - "path": "28" - }, - "2586": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP1", - "path": "28" - }, - "2587": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP4", - "path": "28" - }, - "2588": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "SUB", - "path": "28" - }, - "2589": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP2", - "path": "28" - }, - "2590": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "2592": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP8", - "path": "28" - }, - "2593": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP1", - "path": "28" - }, - "2594": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "EXTCODESIZE", - "path": "28" - }, - "2595": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ISZERO", - "path": "28" - }, - "2596": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP1", - "path": "28" - }, - "2597": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ISZERO", - "path": "28" - }, - "2598": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH2", - "path": "28", - "value": "0xA2E" - }, - "2601": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "JUMPI", - "path": "28" - }, - "2602": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "2604": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP1", - "path": "28" - }, - "2605": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "REVERT", - "path": "28" - }, - "2606": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "JUMPDEST", - "path": "28" - }, - "2607": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2608": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "GAS", - "path": "28" - }, - "2609": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "CALL", - "path": "28" - }, - "2610": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ISZERO", - "path": "28" - }, - "2611": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP1", - "path": "28" - }, - "2612": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ISZERO", - "path": "28" - }, - "2613": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH2", - "path": "28", - "value": "0xA42" - }, - "2616": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "JUMPI", - "path": "28" - }, - "2617": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "RETURNDATASIZE", - "path": "28" - }, - "2618": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "2620": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP1", - "path": "28" - }, - "2621": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "RETURNDATACOPY", - "path": "28" - }, - "2622": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "RETURNDATASIZE", - "path": "28" - }, - "2623": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "2625": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "REVERT", - "path": "28" - }, - "2626": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "JUMPDEST", - "path": "28" - }, - "2627": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2628": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2629": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2630": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "POP", - "path": "28" - }, - "2631": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "2633": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "MLOAD", - "path": "28" - }, - "2634": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "RETURNDATASIZE", - "path": "28" - }, - "2635": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "2637": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP2", - "path": "28" - }, - "2638": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "LT", - "path": "28" - }, - "2639": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "ISZERO", - "path": "28" - }, - "2640": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH2", - "path": "28", - "value": "0xA58" - }, - "2643": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "JUMPI", - "path": "28" - }, - "2644": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "2646": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "DUP1", - "path": "28" - }, - "2647": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "REVERT", - "path": "28" - }, - "2648": { - "fn": "StarknetTokenBridge.consumeMessage", - "offset": [4221, 4289], - "op": "JUMPDEST", - "path": "28" - }, - "2649": { - "op": "POP" - }, - "2650": { - "op": "POP" - }, - "2651": { - "op": "POP" - }, - "2652": { - "op": "POP" - }, - "2653": { - "op": "POP" - }, - "2654": { - "fn": "StarknetTokenBridge.consumeMessage", - "jump": "o", - "offset": [3857, 4296], - "op": "JUMP", - "path": "28" - }, - "2655": { - "fn": "Addresses.performEthTransfer", - "offset": [357, 575], - "op": "JUMPDEST", - "path": "11" - }, - "2656": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "PUSH1", - "path": "11", - "value": "0x40" - }, - "2658": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "MLOAD", - "path": "11" - }, - "2659": { - "fn": "Addresses.performEthTransfer", - "offset": [440, 452], - "op": "PUSH1", - "path": "11", - "value": "0x0" - }, - "2661": { - "fn": "Addresses.performEthTransfer", - "offset": [440, 452], - "op": "SWAP1", - "path": "11" - }, - "2662": { - "op": "PUSH1", - "value": "0x1" - }, - "2664": { - "op": "PUSH1", - "value": "0x1" - }, - "2666": { - "op": "PUSH1", - "value": "0xA0" - }, - "2668": { - "op": "SHL" - }, - "2669": { - "op": "SUB" - }, - "2670": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 472], - "op": "DUP5", - "path": "11" - }, - "2671": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 472], - "op": "AND", - "path": "11" - }, - "2672": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 472], - "op": "SWAP1", - "path": "11" - }, - "2673": { - "fn": "Addresses.performEthTransfer", - "offset": [480, 486], - "op": "DUP4", - "path": "11" - }, - "2674": { - "fn": "Addresses.performEthTransfer", - "offset": [480, 486], - "op": "SWAP1", - "path": "11" - }, - "2675": { - "fn": "Addresses.performEthTransfer", - "offset": [440, 452], - "op": "DUP4", - "path": "11" - }, - "2676": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "DUP2", - "path": "11" - }, - "2677": { - "fn": "Addresses.performEthTransfer", - "offset": [440, 452], - "op": "DUP2", - "path": "11" - }, - "2678": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "DUP2", - "path": "11" - }, - "2679": { - "fn": "Addresses.performEthTransfer", - "offset": [480, 486], - "op": "DUP6", - "path": "11" - }, - "2680": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 472], - "op": "DUP8", - "path": "11" - }, - "2681": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "GAS", - "path": "11" - }, - "2682": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "CALL", - "path": "11" - }, - "2683": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "SWAP3", - "path": "11" - }, - "2684": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "POP", - "path": "11" - }, - "2685": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "POP", - "path": "11" - }, - "2686": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "POP", - "path": "11" - }, - "2687": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "RETURNDATASIZE", - "path": "11" - }, - "2688": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "DUP1", - "path": "11" - }, - "2689": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "PUSH1", - "path": "11", - "value": "0x0" - }, - "2691": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "DUP2", - "path": "11" - }, - "2692": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "EQ", - "path": "11" - }, - "2693": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "PUSH2", - "path": "11", - "value": "0xAAA" - }, - "2696": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "JUMPI", - "path": "11" - }, - "2697": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "PUSH1", - "path": "11", - "value": "0x40" - }, - "2699": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "MLOAD", - "path": "11" - }, - "2700": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "SWAP2", - "path": "11" - }, - "2701": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "POP", - "path": "11" - }, - "2702": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "PUSH1", - "path": "11", - "value": "0x1F" - }, - "2704": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "NOT", - "path": "11" - }, - "2705": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "PUSH1", - "path": "11", - "value": "0x3F" - }, - "2707": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "RETURNDATASIZE", - "path": "11" - }, - "2708": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "ADD", - "path": "11" - }, - "2709": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "AND", - "path": "11" - }, - "2710": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "DUP3", - "path": "11" - }, - "2711": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "ADD", - "path": "11" - }, - "2712": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "PUSH1", - "path": "11", - "value": "0x40" - }, - "2714": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "MSTORE", - "path": "11" - }, - "2715": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "RETURNDATASIZE", - "path": "11" - }, - "2716": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "DUP3", - "path": "11" - }, - "2717": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "MSTORE", - "path": "11" - }, - "2718": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "RETURNDATASIZE", - "path": "11" - }, - "2719": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "PUSH1", - "path": "11", - "value": "0x0" - }, - "2721": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "PUSH1", - "path": "11", - "value": "0x20" - }, - "2723": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "DUP5", - "path": "11" - }, - "2724": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "ADD", - "path": "11" - }, - "2725": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "RETURNDATACOPY", - "path": "11" - }, - "2726": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "PUSH2", - "path": "11", - "value": "0xAAF" - }, - "2729": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "JUMP", - "path": "11" - }, - "2730": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "JUMPDEST", - "path": "11" - }, - "2731": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "PUSH1", - "path": "11", - "value": "0x60" - }, - "2733": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "SWAP2", - "path": "11" - }, - "2734": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "POP", - "path": "11" - }, - "2735": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "JUMPDEST", - "path": "11" - }, - "2736": { - "fn": "Addresses.performEthTransfer", - "offset": [458, 491], - "op": "POP", - "path": "11" - }, - "2737": { - "fn": "Addresses.performEthTransfer", - "offset": [439, 491], - "op": "POP", - "path": "11" - }, - "2738": { - "fn": "Addresses.performEthTransfer", - "offset": [439, 491], - "op": "SWAP1", - "path": "11" - }, - "2739": { - "fn": "Addresses.performEthTransfer", - "offset": [439, 491], - "op": "POP", - "path": "11" - }, - "2740": { - "branch": 79, - "fn": "Addresses.performEthTransfer", - "offset": [537, 544], - "op": "DUP1", - "path": "11", - "statement": 31 - }, - "2741": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "PUSH2", - "path": "11", - "value": "0xAFB" - }, - "2744": { - "branch": 79, - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "JUMPI", - "path": "11" - }, - "2745": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "PUSH1", - "path": "11", - "value": "0x40" - }, - "2747": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "DUP1", - "path": "11" - }, - "2748": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "MLOAD", - "path": "11" - }, - "2749": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "2753": { - "op": "PUSH1", - "value": "0xE5" - }, - "2755": { - "op": "SHL" - }, - "2756": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "DUP2", - "path": "11" - }, - "2757": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "MSTORE", - "path": "11" - }, - "2758": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "PUSH1", - "path": "11", - "value": "0x20" - }, - "2760": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "PUSH1", - "path": "11", - "value": "0x4" - }, - "2762": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "DUP3", - "path": "11" - }, - "2763": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "ADD", - "path": "11" - }, - "2764": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "MSTORE", - "path": "11" - }, - "2765": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "PUSH1", - "path": "11", - "value": "0x13" - }, - "2767": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "PUSH1", - "path": "11", - "value": "0x24" - }, - "2769": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "DUP3", - "path": "11" - }, - "2770": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "ADD", - "path": "11" - }, - "2771": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "MSTORE", - "path": "11" - }, - "2772": { - "op": "PUSH19", - "value": "0x11551217D514905394D1915497D19052531151" - }, - "2792": { - "op": "PUSH1", - "value": "0x6A" - }, - "2794": { - "op": "SHL" - }, - "2795": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "PUSH1", - "path": "11", - "value": "0x44" - }, - "2797": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "DUP3", - "path": "11" - }, - "2798": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "ADD", - "path": "11" - }, - "2799": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "MSTORE", - "path": "11" - }, - "2800": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "SWAP1", - "path": "11" - }, - "2801": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "MLOAD", - "path": "11" - }, - "2802": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "SWAP1", - "path": "11" - }, - "2803": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "DUP2", - "path": "11" - }, - "2804": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "SWAP1", - "path": "11" - }, - "2805": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "SUB", - "path": "11" - }, - "2806": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "PUSH1", - "path": "11", - "value": "0x64" - }, - "2808": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "ADD", - "path": "11" - }, - "2809": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "SWAP1", - "path": "11" - }, - "2810": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "REVERT", - "path": "11" - }, - "2811": { - "fn": "Addresses.performEthTransfer", - "offset": [529, 568], - "op": "JUMPDEST", - "path": "11" - }, - "2812": { - "fn": "Addresses.performEthTransfer", - "offset": [357, 575], - "op": "POP", - "path": "11" - }, - "2813": { - "fn": "Addresses.performEthTransfer", - "offset": [357, 575], - "op": "POP", - "path": "11" - }, - "2814": { - "fn": "Addresses.performEthTransfer", - "offset": [357, 575], - "op": "POP", - "path": "11" - }, - "2815": { - "fn": "Addresses.performEthTransfer", - "jump": "o", - "offset": [357, 575], - "op": "JUMP", - "path": "11" - }, - "2816": { - "fn": "Governance.isGovernor", - "offset": [1840, 2044], - "op": "JUMPDEST", - "path": "1" - }, - "2817": { - "fn": "Governance.isGovernor", - "offset": [1914, 1918], - "op": "PUSH1", - "path": "1", - "value": "0x0" - }, - "2819": { - "fn": "Governance.isGovernor", - "offset": [1930, 1962], - "op": "DUP1", - "path": "1" - }, - "2820": { - "fn": "Governance.isGovernor", - "offset": [1965, 1984], - "op": "PUSH2", - "path": "1", - "value": "0xB0B" - }, - "2823": { - "fn": "Governance.isGovernor", - "offset": [1965, 1982], - "op": "PUSH2", - "path": "1", - "value": "0x161F" - }, - "2826": { - "fn": "Governance.isGovernor", - "jump": "i", - "offset": [1965, 1984], - "op": "JUMP", - "path": "1" - }, - "2827": { - "fn": "Governance.isGovernor", - "offset": [1965, 1984], - "op": "JUMPDEST", - "path": "1" - }, - "2828": { - "op": "PUSH1", - "value": "0x1" - }, - "2830": { - "op": "PUSH1", - "value": "0x1" - }, - "2832": { - "op": "PUSH1", - "value": "0xA0" - }, - "2834": { - "op": "SHL" - }, - "2835": { - "op": "SUB" - }, - "2836": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "SWAP4", - "path": "1", - "statement": 32 - }, - "2837": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "SWAP1", - "path": "1" - }, - "2838": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "SWAP4", - "path": "1" - }, - "2839": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "AND", - "path": "1" - }, - "2840": { - "fn": "Governance.isGovernor", - "offset": [2001, 2023], - "op": "PUSH1", - "path": "1", - "value": "0x0" - }, - "2842": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "SWAP1", - "path": "1" - }, - "2843": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "DUP2", - "path": "1" - }, - "2844": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "MSTORE", - "path": "1" - }, - "2845": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "2847": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "SWAP4", - "path": "1" - }, - "2848": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "SWAP1", - "path": "1" - }, - "2849": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "SWAP4", - "path": "1" - }, - "2850": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "MSTORE", - "path": "1" - }, - "2851": { - "op": "POP" - }, - "2852": { - "op": "POP" - }, - "2853": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "PUSH1", - "path": "1", - "value": "0x40" - }, - "2855": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "SWAP1", - "path": "1" - }, - "2856": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "KECCAK256", - "path": "1" - }, - "2857": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "SLOAD", - "path": "1" - }, - "2858": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "PUSH1", - "path": "1", - "value": "0xFF" - }, - "2860": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "AND", - "path": "1" - }, - "2861": { - "fn": "Governance.isGovernor", - "offset": [2001, 2037], - "op": "SWAP1", - "path": "1" - }, - "2862": { - "fn": "Governance.isGovernor", - "jump": "o", - "offset": [1840, 2044], - "op": "JUMP", - "path": "1" - }, - "2863": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2517, 3057], - "op": "JUMPDEST", - "path": "10" - }, - "2864": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2645, 2681], - "op": "PUSH2", - "path": "10", - "statement": 33, - "value": "0xB41" - }, - "2867": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2645, 2668], - "op": "DUP4", - "path": "10" - }, - "2868": { - "op": "PUSH1", - "value": "0x1" - }, - "2870": { - "op": "PUSH1", - "value": "0x1" - }, - "2872": { - "op": "PUSH1", - "value": "0xA0" - }, - "2874": { - "op": "SHL" - }, - "2875": { - "op": "SUB" - }, - "2876": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2645, 2679], - "op": "AND", - "path": "10" - }, - "2877": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2645, 2679], - "op": "PUSH2", - "path": "10", - "value": "0x16CE" - }, - "2880": { - "fn": "ProxySupport.callExternalInitializer", - "jump": "i", - "offset": [2645, 2681], - "op": "JUMP", - "path": "10" - }, - "2881": { - "branch": 94, - "fn": "ProxySupport.callExternalInitializer", - "offset": [2645, 2681], - "op": "JUMPDEST", - "path": "10" - }, - "2882": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "PUSH2", - "path": "10", - "value": "0xB87" - }, - "2885": { - "branch": 94, - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "JUMPI", - "path": "10" - }, - "2886": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "PUSH1", - "path": "10", - "value": "0x40" - }, - "2888": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "DUP1", - "path": "10" - }, - "2889": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "MLOAD", - "path": "10" - }, - "2890": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "2894": { - "op": "PUSH1", - "value": "0xE5" - }, - "2896": { - "op": "SHL" - }, - "2897": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "DUP2", - "path": "10" - }, - "2898": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "MSTORE", - "path": "10" - }, - "2899": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "2901": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "PUSH1", - "path": "10", - "value": "0x4" - }, - "2903": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "DUP3", - "path": "10" - }, - "2904": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "ADD", - "path": "10" - }, - "2905": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "MSTORE", - "path": "10" - }, - "2906": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "PUSH1", - "path": "10", - "value": "0x12" - }, - "2908": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "PUSH1", - "path": "10", - "value": "0x24" - }, - "2910": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "DUP3", - "path": "10" - }, - "2911": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "ADD", - "path": "10" - }, - "2912": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "MSTORE", - "path": "10" - }, - "2913": { - "op": "PUSH18", - "value": "0x115250D7D393D517D057D0D3D395149050D5" - }, - "2932": { - "op": "PUSH1", - "value": "0x72" - }, - "2934": { - "op": "SHL" - }, - "2935": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "PUSH1", - "path": "10", - "value": "0x44" - }, - "2937": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "DUP3", - "path": "10" - }, - "2938": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "ADD", - "path": "10" - }, - "2939": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "MSTORE", - "path": "10" - }, - "2940": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "SWAP1", - "path": "10" - }, - "2941": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "MLOAD", - "path": "10" - }, - "2942": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "SWAP1", - "path": "10" - }, - "2943": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "DUP2", - "path": "10" - }, - "2944": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "SWAP1", - "path": "10" - }, - "2945": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "SUB", - "path": "10" - }, - "2946": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "PUSH1", - "path": "10", - "value": "0x64" - }, - "2948": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "ADD", - "path": "10" - }, - "2949": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "SWAP1", - "path": "10" - }, - "2950": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "REVERT", - "path": "10" - }, - "2951": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2637, 2704], - "op": "JUMPDEST", - "path": "10" - }, - "2952": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2785, 2797], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "2954": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2799, 2822], - "op": "PUSH1", - "path": "10", - "value": "0x60" - }, - "2956": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2849], - "op": "DUP5", - "path": "10" - }, - "2957": { - "op": "PUSH1", - "value": "0x1" - }, - "2959": { - "op": "PUSH1", - "value": "0x1" - }, - "2961": { - "op": "PUSH1", - "value": "0xA0" - }, - "2963": { - "op": "SHL" - }, - "2964": { - "op": "SUB" - }, - "2965": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2862], - "op": "AND", - "path": "10" - }, - "2966": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2899, 2923], - "op": "PUSH4", - "path": "10", - "value": "0x439FAB91" - }, - "2971": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2899, 2923], - "op": "PUSH1", - "path": "10", - "value": "0xE0" - }, - "2973": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2899, 2923], - "op": "SHL", - "path": "10" - }, - "2974": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2925, 2932], - "op": "DUP6", - "path": "10" - }, - "2975": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2925, 2932], - "op": "DUP6", - "path": "10" - }, - "2976": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "PUSH1", - "path": "10", - "value": "0x40" - }, - "2978": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "MLOAD", - "path": "10" - }, - "2979": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "PUSH1", - "path": "10", - "value": "0x24" - }, - "2981": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "ADD", - "path": "10" - }, - "2982": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP1", - "path": "10" - }, - "2983": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP1", - "path": "10" - }, - "2984": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "2986": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "ADD", - "path": "10" - }, - "2987": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP3", - "path": "10" - }, - "2988": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP2", - "path": "10" - }, - "2989": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SUB", - "path": "10" - }, - "2990": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP3", - "path": "10" - }, - "2991": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "MSTORE", - "path": "10" - }, - "2992": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP5", - "path": "10" - }, - "2993": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP5", - "path": "10" - }, - "2994": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP3", - "path": "10" - }, - "2995": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP2", - "path": "10" - }, - "2996": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP2", - "path": "10" - }, - "2997": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "MSTORE", - "path": "10" - }, - "2998": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3000": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "ADD", - "path": "10" - }, - "3001": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP3", - "path": "10" - }, - "3002": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "POP", - "path": "10" - }, - "3003": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP1", - "path": "10" - }, - "3004": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP3", - "path": "10" - }, - "3005": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP5", - "path": "10" - }, - "3006": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "CALLDATACOPY", - "path": "10" - }, - "3007": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "3009": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP4", - "path": "10" - }, - "3010": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP3", - "path": "10" - }, - "3011": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "ADD", - "path": "10" - }, - "3012": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "MSTORE", - "path": "10" - }, - "3013": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "PUSH1", - "path": "10", - "value": "0x40" - }, - "3015": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP1", - "path": "10" - }, - "3016": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "MLOAD", - "path": "10" - }, - "3017": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "PUSH1", - "path": "10", - "value": "0x1F" - }, - "3019": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP1", - "path": "10" - }, - "3020": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP3", - "path": "10" - }, - "3021": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "ADD", - "path": "10" - }, - "3022": { - "op": "PUSH1", - "value": "0x1F" - }, - "3024": { - "op": "NOT" - }, - "3025": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP1", - "path": "10" - }, - "3026": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP2", - "path": "10" - }, - "3027": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "AND", - "path": "10" - }, - "3028": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP1", - "path": "10" - }, - "3029": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP5", - "path": "10" - }, - "3030": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "ADD", - "path": "10" - }, - "3031": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP3", - "path": "10" - }, - "3032": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP2", - "path": "10" - }, - "3033": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SUB", - "path": "10" - }, - "3034": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP1", - "path": "10" - }, - "3035": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP5", - "path": "10" - }, - "3036": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "ADD", - "path": "10" - }, - "3037": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP3", - "path": "10" - }, - "3038": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "MSTORE", - "path": "10" - }, - "3039": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP3", - "path": "10" - }, - "3040": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP4", - "path": "10" - }, - "3041": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "MSTORE", - "path": "10" - }, - "3042": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3044": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP2", - "path": "10" - }, - "3045": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "ADD", - "path": "10" - }, - "3046": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP1", - "path": "10" - }, - "3047": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "MLOAD", - "path": "10" - }, - "3048": { - "op": "PUSH1", - "value": "0x1" - }, - "3050": { - "op": "PUSH1", - "value": "0x1" - }, - "3052": { - "op": "PUSH1", - "value": "0xE0" - }, - "3054": { - "op": "SHL" - }, - "3055": { - "op": "SUB" - }, - "3056": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "AND", - "path": "10" - }, - "3057": { - "op": "PUSH1", - "value": "0x1" - }, - "3059": { - "op": "PUSH1", - "value": "0x1" - }, - "3061": { - "op": "PUSH1", - "value": "0xE0" - }, - "3063": { - "op": "SHL" - }, - "3064": { - "op": "SUB" - }, - "3065": { - "op": "NOT" - }, - "3066": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP1", - "path": "10" - }, - "3067": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP10", - "path": "10" - }, - "3068": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "AND", - "path": "10" - }, - "3069": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP9", - "path": "10" - }, - "3070": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP1", - "path": "10" - }, - "3071": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP9", - "path": "10" - }, - "3072": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "OR", - "path": "10" - }, - "3073": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP9", - "path": "10" - }, - "3074": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "MSTORE", - "path": "10" - }, - "3075": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP2", - "path": "10" - }, - "3076": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "MLOAD", - "path": "10" - }, - "3077": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP3", - "path": "10" - }, - "3078": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "MLOAD", - "path": "10" - }, - "3079": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP3", - "path": "10" - }, - "3080": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP8", - "path": "10" - }, - "3081": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP1", - "path": "10" - }, - "3082": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP7", - "path": "10" - }, - "3083": { - "op": "POP" - }, - "3084": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP7", - "path": "10" - }, - "3085": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP6", - "path": "10" - }, - "3086": { - "op": "POP" - }, - "3087": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "SWAP4", - "path": "10" - }, - "3088": { - "op": "POP" - }, - "3089": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP1", - "path": "10" - }, - "3090": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP2", - "path": "10" - }, - "3091": { - "op": "POP" - }, - "3092": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP2", - "path": "10" - }, - "3093": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP1", - "path": "10" - }, - "3094": { - "op": "POP" - }, - "3095": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP4", - "path": "10" - }, - "3096": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2876, 2933], - "op": "DUP4", - "path": "10" - }, - "3097": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "JUMPDEST", - "path": "10" - }, - "3098": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3100": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP4", - "path": "10" - }, - "3101": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "LT", - "path": "10" - }, - "3102": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH2", - "path": "10", - "value": "0xC38" - }, - "3105": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "JUMPI", - "path": "10" - }, - "3106": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP1", - "path": "10" - }, - "3107": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "MLOAD", - "path": "10" - }, - "3108": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP3", - "path": "10" - }, - "3109": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "MSTORE", - "path": "10" - }, - "3110": { - "op": "PUSH1", - "value": "0x1F" - }, - "3112": { - "op": "NOT" - }, - "3113": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP1", - "path": "10" - }, - "3114": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP3", - "path": "10" - }, - "3115": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "ADD", - "path": "10" - }, - "3116": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP2", - "path": "10" - }, - "3117": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3119": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP2", - "path": "10" - }, - "3120": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP3", - "path": "10" - }, - "3121": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "ADD", - "path": "10" - }, - "3122": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP2", - "path": "10" - }, - "3123": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "ADD", - "path": "10" - }, - "3124": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH2", - "path": "10", - "value": "0xC19" - }, - "3127": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "JUMP", - "path": "10" - }, - "3128": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "JUMPDEST", - "path": "10" - }, - "3129": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH1", - "path": "10", - "value": "0x1" - }, - "3131": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP4", - "path": "10" - }, - "3132": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3134": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SUB", - "path": "10" - }, - "3135": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH2", - "path": "10", - "value": "0x100" - }, - "3138": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "EXP", - "path": "10" - }, - "3139": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SUB", - "path": "10" - }, - "3140": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP1", - "path": "10" - }, - "3141": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "NOT", - "path": "10" - }, - "3142": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP3", - "path": "10" - }, - "3143": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "MLOAD", - "path": "10" - }, - "3144": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "AND", - "path": "10" - }, - "3145": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP2", - "path": "10" - }, - "3146": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP5", - "path": "10" - }, - "3147": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "MLOAD", - "path": "10" - }, - "3148": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "AND", - "path": "10" - }, - "3149": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP1", - "path": "10" - }, - "3150": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP3", - "path": "10" - }, - "3151": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "OR", - "path": "10" - }, - "3152": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP6", - "path": "10" - }, - "3153": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "MSTORE", - "path": "10" - }, - "3154": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "POP", - "path": "10" - }, - "3155": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "POP", - "path": "10" - }, - "3156": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "POP", - "path": "10" - }, - "3157": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "POP", - "path": "10" - }, - "3158": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "POP", - "path": "10" - }, - "3159": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "POP", - "path": "10" - }, - "3160": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP1", - "path": "10" - }, - "3161": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "POP", - "path": "10" - }, - "3162": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "ADD", - "path": "10" - }, - "3163": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP2", - "path": "10" - }, - "3164": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "POP", - "path": "10" - }, - "3165": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "POP", - "path": "10" - }, - "3166": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "3168": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH1", - "path": "10", - "value": "0x40" - }, - "3170": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "MLOAD", - "path": "10" - }, - "3171": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP1", - "path": "10" - }, - "3172": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP4", - "path": "10" - }, - "3173": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SUB", - "path": "10" - }, - "3174": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP2", - "path": "10" - }, - "3175": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP6", - "path": "10" - }, - "3176": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "GAS", - "path": "10" - }, - "3177": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DELEGATECALL", - "path": "10" - }, - "3178": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP2", - "path": "10" - }, - "3179": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "POP", - "path": "10" - }, - "3180": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "POP", - "path": "10" - }, - "3181": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "RETURNDATASIZE", - "path": "10" - }, - "3182": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP1", - "path": "10" - }, - "3183": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "3185": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP2", - "path": "10" - }, - "3186": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "EQ", - "path": "10" - }, - "3187": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH2", - "path": "10", - "value": "0xC98" - }, - "3190": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "JUMPI", - "path": "10" - }, - "3191": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH1", - "path": "10", - "value": "0x40" - }, - "3193": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "MLOAD", - "path": "10" - }, - "3194": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP2", - "path": "10" - }, - "3195": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "POP", - "path": "10" - }, - "3196": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH1", - "path": "10", - "value": "0x1F" - }, - "3198": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "NOT", - "path": "10" - }, - "3199": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH1", - "path": "10", - "value": "0x3F" - }, - "3201": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "RETURNDATASIZE", - "path": "10" - }, - "3202": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "ADD", - "path": "10" - }, - "3203": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "AND", - "path": "10" - }, - "3204": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP3", - "path": "10" - }, - "3205": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "ADD", - "path": "10" - }, - "3206": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH1", - "path": "10", - "value": "0x40" - }, - "3208": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "MSTORE", - "path": "10" - }, - "3209": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "RETURNDATASIZE", - "path": "10" - }, - "3210": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP3", - "path": "10" - }, - "3211": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "MSTORE", - "path": "10" - }, - "3212": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "RETURNDATASIZE", - "path": "10" - }, - "3213": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "3215": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3217": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "DUP5", - "path": "10" - }, - "3218": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "ADD", - "path": "10" - }, - "3219": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "RETURNDATACOPY", - "path": "10" - }, - "3220": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH2", - "path": "10", - "value": "0xC9D" - }, - "3223": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "JUMP", - "path": "10" - }, - "3224": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "JUMPDEST", - "path": "10" - }, - "3225": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "PUSH1", - "path": "10", - "value": "0x60" - }, - "3227": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "SWAP2", - "path": "10" - }, - "3228": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "POP", - "path": "10" - }, - "3229": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "JUMPDEST", - "path": "10" - }, - "3230": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2826, 2943], - "op": "POP", - "path": "10" - }, - "3231": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2784, 2943], - "op": "SWAP2", - "path": "10" - }, - "3232": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2784, 2943], - "op": "POP", - "path": "10" - }, - "3233": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2784, 2943], - "op": "SWAP2", - "path": "10" - }, - "3234": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2784, 2943], - "op": "POP", - "path": "10" - }, - "3235": { - "branch": 95, - "fn": "ProxySupport.callExternalInitializer", - "offset": [2961, 2968], - "op": "DUP2", - "path": "10", - "statement": 34 - }, - "3236": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2977, 2987], - "op": "DUP2", - "path": "10" - }, - "3237": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SWAP1", - "path": "10" - }, - "3238": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH2", - "path": "10", - "value": "0xD2D" - }, - "3241": { - "branch": 95, - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "JUMPI", - "path": "10" - }, - "3242": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH1", - "path": "10", - "value": "0x40" - }, - "3244": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "MLOAD", - "path": "10" - }, - "3245": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "3249": { - "op": "PUSH1", - "value": "0xE5" - }, - "3251": { - "op": "SHL" - }, - "3252": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP2", - "path": "10" - }, - "3253": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "MSTORE", - "path": "10" - }, - "3254": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH1", - "path": "10", - "value": "0x4" - }, - "3256": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "ADD", - "path": "10" - }, - "3257": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP1", - "path": "10" - }, - "3258": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP1", - "path": "10" - }, - "3259": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3261": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "ADD", - "path": "10" - }, - "3262": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP3", - "path": "10" - }, - "3263": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP2", - "path": "10" - }, - "3264": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SUB", - "path": "10" - }, - "3265": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP3", - "path": "10" - }, - "3266": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "MSTORE", - "path": "10" - }, - "3267": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP4", - "path": "10" - }, - "3268": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP2", - "path": "10" - }, - "3269": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP2", - "path": "10" - }, - "3270": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "MLOAD", - "path": "10" - }, - "3271": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP2", - "path": "10" - }, - "3272": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "MSTORE", - "path": "10" - }, - "3273": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3275": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "ADD", - "path": "10" - }, - "3276": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SWAP2", - "path": "10" - }, - "3277": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "POP", - "path": "10" - }, - "3278": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP1", - "path": "10" - }, - "3279": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "MLOAD", - "path": "10" - }, - "3280": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SWAP1", - "path": "10" - }, - "3281": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3283": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "ADD", - "path": "10" - }, - "3284": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SWAP1", - "path": "10" - }, - "3285": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP1", - "path": "10" - }, - "3286": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP4", - "path": "10" - }, - "3287": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP4", - "path": "10" - }, - "3288": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "3290": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "JUMPDEST", - "path": "10" - }, - "3291": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP4", - "path": "10" - }, - "3292": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP2", - "path": "10" - }, - "3293": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "LT", - "path": "10" - }, - "3294": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "ISZERO", - "path": "10" - }, - "3295": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH2", - "path": "10", - "value": "0xCF2" - }, - "3298": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "JUMPI", - "path": "10" - }, - "3299": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP2", - "path": "10" - }, - "3300": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP2", - "path": "10" - }, - "3301": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "ADD", - "path": "10" - }, - "3302": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "MLOAD", - "path": "10" - }, - "3303": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP4", - "path": "10" - }, - "3304": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP3", - "path": "10" - }, - "3305": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "ADD", - "path": "10" - }, - "3306": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "MSTORE", - "path": "10" - }, - "3307": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3309": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "ADD", - "path": "10" - }, - "3310": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH2", - "path": "10", - "value": "0xCDA" - }, - "3313": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "JUMP", - "path": "10" - }, - "3314": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "JUMPDEST", - "path": "10" - }, - "3315": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "POP", - "path": "10" - }, - "3316": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "POP", - "path": "10" - }, - "3317": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "POP", - "path": "10" - }, - "3318": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "POP", - "path": "10" - }, - "3319": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SWAP1", - "path": "10" - }, - "3320": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "POP", - "path": "10" - }, - "3321": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SWAP1", - "path": "10" - }, - "3322": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP2", - "path": "10" - }, - "3323": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "ADD", - "path": "10" - }, - "3324": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SWAP1", - "path": "10" - }, - "3325": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH1", - "path": "10", - "value": "0x1F" - }, - "3327": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "AND", - "path": "10" - }, - "3328": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP1", - "path": "10" - }, - "3329": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "ISZERO", - "path": "10" - }, - "3330": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH2", - "path": "10", - "value": "0xD1F" - }, - "3333": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "JUMPI", - "path": "10" - }, - "3334": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP1", - "path": "10" - }, - "3335": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP3", - "path": "10" - }, - "3336": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SUB", - "path": "10" - }, - "3337": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP1", - "path": "10" - }, - "3338": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "MLOAD", - "path": "10" - }, - "3339": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH1", - "path": "10", - "value": "0x1" - }, - "3341": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP4", - "path": "10" - }, - "3342": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3344": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SUB", - "path": "10" - }, - "3345": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH2", - "path": "10", - "value": "0x100" - }, - "3348": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "EXP", - "path": "10" - }, - "3349": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SUB", - "path": "10" - }, - "3350": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "NOT", - "path": "10" - }, - "3351": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "AND", - "path": "10" - }, - "3352": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP2", - "path": "10" - }, - "3353": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "MSTORE", - "path": "10" - }, - "3354": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3356": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "ADD", - "path": "10" - }, - "3357": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SWAP2", - "path": "10" - }, - "3358": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "POP", - "path": "10" - }, - "3359": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "JUMPDEST", - "path": "10" - }, - "3360": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "POP", - "path": "10" - }, - "3361": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SWAP3", - "path": "10" - }, - "3362": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "POP", - "path": "10" - }, - "3363": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "POP", - "path": "10" - }, - "3364": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "POP", - "path": "10" - }, - "3365": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "PUSH1", - "path": "10", - "value": "0x40" - }, - "3367": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "MLOAD", - "path": "10" - }, - "3368": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "DUP1", - "path": "10" - }, - "3369": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SWAP2", - "path": "10" - }, - "3370": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SUB", - "path": "10" - }, - "3371": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "SWAP1", - "path": "10" - }, - "3372": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "REVERT", - "path": "10" - }, - "3373": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2953, 2989], - "op": "JUMPDEST", - "path": "10" - }, - "3374": { - "op": "POP" - }, - "3375": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [3007, 3024], - "op": "DUP1", - "path": "10", - "statement": 35 - }, - "3376": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [3007, 3024], - "op": "MLOAD", - "path": "10" - }, - "3377": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [3007, 3017], - "op": "DUP2", - "path": "10" - }, - "3378": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [3007, 3017], - "op": "SWAP1", - "path": "10" - }, - "3379": { - "branch": 96, - "fn": "ProxySupport.callExternalInitializer", - "offset": [3007, 3029], - "op": "ISZERO", - "path": "10" - }, - "3380": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "PUSH2", - "path": "10", - "value": "0xD7E" - }, - "3383": { - "branch": 96, - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "JUMPI", - "path": "10" - }, - "3384": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "PUSH1", - "path": "10", - "value": "0x40" - }, - "3386": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "MLOAD", - "path": "10" - }, - "3387": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "3391": { - "op": "PUSH1", - "value": "0xE5" - }, - "3393": { - "op": "SHL" - }, - "3394": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP2", - "path": "10" - }, - "3395": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "MSTORE", - "path": "10" - }, - "3396": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3398": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "PUSH1", - "path": "10", - "value": "0x4" - }, - "3400": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP3", - "path": "10" - }, - "3401": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "ADD", - "path": "10" - }, - "3402": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP2", - "path": "10" - }, - "3403": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP2", - "path": "10" - }, - "3404": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "MSTORE", - "path": "10" - }, - "3405": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP4", - "path": "10" - }, - "3406": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "MLOAD", - "path": "10" - }, - "3407": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "PUSH1", - "path": "10", - "value": "0x24" - }, - "3409": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP5", - "path": "10" - }, - "3410": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "ADD", - "path": "10" - }, - "3411": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "MSTORE", - "path": "10" - }, - "3412": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP4", - "path": "10" - }, - "3413": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "MLOAD", - "path": "10" - }, - "3414": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "SWAP1", - "path": "10" - }, - "3415": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "SWAP3", - "path": "10" - }, - "3416": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP4", - "path": "10" - }, - "3417": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "SWAP3", - "path": "10" - }, - "3418": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "PUSH1", - "path": "10", - "value": "0x44" - }, - "3420": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "SWAP1", - "path": "10" - }, - "3421": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "SWAP2", - "path": "10" - }, - "3422": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "ADD", - "path": "10" - }, - "3423": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "SWAP2", - "path": "10" - }, - "3424": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "SWAP1", - "path": "10" - }, - "3425": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP6", - "path": "10" - }, - "3426": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "ADD", - "path": "10" - }, - "3427": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "SWAP1", - "path": "10" - }, - "3428": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP1", - "path": "10" - }, - "3429": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP4", - "path": "10" - }, - "3430": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP4", - "path": "10" - }, - "3431": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "PUSH1", - "path": "10", - "value": "0x0" - }, - "3433": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP4", - "path": "10" - }, - "3434": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "ISZERO", - "path": "10" - }, - "3435": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "PUSH2", - "path": "10", - "value": "0xCF2" - }, - "3438": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "JUMPI", - "path": "10" - }, - "3439": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP2", - "path": "10" - }, - "3440": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP2", - "path": "10" - }, - "3441": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "ADD", - "path": "10" - }, - "3442": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "MLOAD", - "path": "10" - }, - "3443": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP4", - "path": "10" - }, - "3444": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "DUP3", - "path": "10" - }, - "3445": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "ADD", - "path": "10" - }, - "3446": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "MSTORE", - "path": "10" - }, - "3447": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "PUSH1", - "path": "10", - "value": "0x20" - }, - "3449": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "ADD", - "path": "10" - }, - "3450": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "PUSH2", - "path": "10", - "value": "0xCDA" - }, - "3453": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "JUMP", - "path": "10" - }, - "3454": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "JUMPDEST", - "path": "10" - }, - "3455": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2999, 3050], - "op": "POP", - "path": "10" - }, - "3456": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2517, 3057], - "op": "POP", - "path": "10" - }, - "3457": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2517, 3057], - "op": "POP", - "path": "10" - }, - "3458": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2517, 3057], - "op": "POP", - "path": "10" - }, - "3459": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2517, 3057], - "op": "POP", - "path": "10" - }, - "3460": { - "fn": "ProxySupport.callExternalInitializer", - "offset": [2517, 3057], - "op": "POP", - "path": "10" - }, - "3461": { - "fn": "ProxySupport.callExternalInitializer", - "jump": "o", - "offset": [2517, 3057], - "op": "JUMP", - "path": "10" - }, - "3462": { - "fn": "StarknetTokenBridge.isInitialized", - "offset": [971, 1102], - "op": "JUMPDEST", - "path": "28" - }, - "3463": { - "fn": "StarknetTokenBridge.isInitialized", - "offset": [1028, 1032], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "3465": { - "fn": "StarknetTokenBridge.isInitialized", - "offset": [1028, 1032], - "op": "DUP1", - "path": "28" - }, - "3466": { - "fn": "StarknetTokenBridge.isInitialized", - "offset": [1051, 1070], - "op": "PUSH2", - "path": "28", - "statement": 36, - "value": "0xD91" - }, - "3469": { - "fn": "StarknetTokenBridge.isInitialized", - "offset": [1051, 1068], - "op": "PUSH2", - "path": "28", - "value": "0x15FC" - }, - "3472": { - "fn": "StarknetTokenBridge.isInitialized", - "jump": "i", - "offset": [1051, 1070], - "op": "JUMP", - "path": "28" - }, - "3473": { - "fn": "StarknetTokenBridge.isInitialized", - "offset": [1051, 1070], - "op": "JUMPDEST", - "path": "28" - }, - "3474": { - "op": "PUSH1", - "value": "0x1" - }, - "3476": { - "op": "PUSH1", - "value": "0x1" - }, - "3478": { - "op": "PUSH1", - "value": "0xA0" - }, - "3480": { - "op": "SHL" - }, - "3481": { - "op": "SUB" - }, - "3482": { - "fn": "StarknetTokenBridge.isInitialized", - "offset": [1051, 1095], - "op": "AND", - "path": "28" - }, - "3483": { - "fn": "StarknetTokenBridge.isInitialized", - "offset": [1051, 1095], - "op": "EQ", - "path": "28" - }, - "3484": { - "fn": "StarknetTokenBridge.isInitialized", - "offset": [1051, 1095], - "op": "ISZERO", - "path": "28" - }, - "3485": { - "fn": "StarknetTokenBridge.isInitialized", - "offset": [1044, 1095], - "op": "SWAP1", - "path": "28" - }, - "3486": { - "fn": "StarknetTokenBridge.isInitialized", - "offset": [1044, 1095], - "op": "POP", - "path": "28" - }, - "3487": { - "fn": "StarknetTokenBridge.isInitialized", - "offset": [971, 1102], - "op": "SWAP1", - "path": "28" - }, - "3488": { - "fn": "StarknetTokenBridge.isInitialized", - "jump": "o", - "offset": [971, 1102], - "op": "JUMP", - "path": "28" - }, - "3489": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1209, 1343], - "op": "JUMPDEST", - "path": "28" - }, - "3490": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1312, 1314], - "op": "PUSH1", - "path": "28", - "statement": 37, - "value": "0x40" - }, - "3492": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1297, 1314], - "op": "DUP2", - "path": "28" - }, - "3493": { - "branch": 97, - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1297, 1314], - "op": "EQ", - "path": "28" - }, - "3494": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "PUSH2", - "path": "28", - "value": "0x39B" - }, - "3497": { - "branch": 97, - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "JUMPI", - "path": "28" - }, - "3498": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "3500": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "DUP1", - "path": "28" - }, - "3501": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "MLOAD", - "path": "28" - }, - "3502": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "3506": { - "op": "PUSH1", - "value": "0xE5" - }, - "3508": { - "op": "SHL" - }, - "3509": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "DUP2", - "path": "28" - }, - "3510": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "MSTORE", - "path": "28" - }, - "3511": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "3513": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "3515": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "DUP3", - "path": "28" - }, - "3516": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "ADD", - "path": "28" - }, - "3517": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "MSTORE", - "path": "28" - }, - "3518": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "PUSH1", - "path": "28", - "value": "0x11" - }, - "3520": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "PUSH1", - "path": "28", - "value": "0x24" - }, - "3522": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "DUP3", - "path": "28" - }, - "3523": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "ADD", - "path": "28" - }, - "3524": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "MSTORE", - "path": "28" - }, - "3525": { - "op": "PUSH17", - "value": "0x494C4C4547414C5F444154415F53495A45" - }, - "3543": { - "op": "PUSH1", - "value": "0x78" - }, - "3545": { - "op": "SHL" - }, - "3546": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "PUSH1", - "path": "28", - "value": "0x44" - }, - "3548": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "DUP3", - "path": "28" - }, - "3549": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "ADD", - "path": "28" - }, - "3550": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "MSTORE", - "path": "28" - }, - "3551": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "SWAP1", - "path": "28" - }, - "3552": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "MLOAD", - "path": "28" - }, - "3553": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "SWAP1", - "path": "28" - }, - "3554": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "DUP2", - "path": "28" - }, - "3555": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "SWAP1", - "path": "28" - }, - "3556": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "SUB", - "path": "28" - }, - "3557": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "PUSH1", - "path": "28", - "value": "0x64" - }, - "3559": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "ADD", - "path": "28" - }, - "3560": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "SWAP1", - "path": "28" - }, - "3561": { - "fn": "StarknetTokenBridge.validateInitData", - "offset": [1289, 1336], - "op": "REVERT", - "path": "28" - }, - "3562": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1605, 1924], - "op": "JUMPDEST", - "path": "28" - }, - "3563": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1688, 1709], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "3565": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1711, 1748], - "op": "DUP1", - "path": "28" - }, - "3566": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1776, 1780], - "op": "DUP4", - "path": "28" - }, - "3567": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1776, 1780], - "op": "DUP4", - "path": "28" - }, - "3568": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "3570": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "DUP2", - "path": "28" - }, - "3571": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "LT", - "path": "28" - }, - "3572": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "ISZERO", - "path": "28" - }, - "3573": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "PUSH2", - "path": "28", - "value": "0xDFD" - }, - "3576": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "JUMPI", - "path": "28" - }, - "3577": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "3579": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "DUP1", - "path": "28" - }, - "3580": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "REVERT", - "path": "28" - }, - "3581": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "JUMPDEST", - "path": "28" - }, - "3582": { - "op": "POP" - }, - "3583": { - "op": "PUSH1", - "value": "0x1" - }, - "3585": { - "op": "PUSH1", - "value": "0x1" - }, - "3587": { - "op": "PUSH1", - "value": "0xA0" - }, - "3589": { - "op": "SHL" - }, - "3590": { - "op": "SUB" - }, - "3591": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "DUP2", - "path": "28" - }, - "3592": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "CALLDATALOAD", - "path": "28" - }, - "3593": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "DUP2", - "path": "28" - }, - "3594": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "AND", - "path": "28" - }, - "3595": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "SWAP4", - "path": "28" - }, - "3596": { - "op": "POP" - }, - "3597": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "3599": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "SWAP1", - "path": "28" - }, - "3600": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "SWAP2", - "path": "28" - }, - "3601": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "ADD", - "path": "28" - }, - "3602": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "CALLDATALOAD", - "path": "28" - }, - "3603": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "AND", - "path": "28" - }, - "3604": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "SWAP1", - "path": "28" - }, - "3605": { - "op": "POP" - }, - "3606": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1843, 1870], - "op": "PUSH2", - "path": "28", - "statement": 38, - "value": "0xE1E" - }, - "3609": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1752, 1833], - "op": "DUP3", - "path": "28" - }, - "3610": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1843, 1855], - "op": "PUSH2", - "path": "28", - "value": "0x16D4" - }, - "3613": { - "fn": "StarknetTokenBridge.initializeContractState", - "jump": "i", - "offset": [1843, 1870], - "op": "JUMP", - "path": "28" - }, - "3614": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1843, 1870], - "op": "JUMPDEST", - "path": "28" - }, - "3615": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1880, 1917], - "op": "PUSH2", - "path": "28", - "statement": 39, - "value": "0xE27" - }, - "3618": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1898, 1916], - "op": "DUP2", - "path": "28" - }, - "3619": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1880, 1897], - "op": "PUSH2", - "path": "28", - "value": "0x16F6" - }, - "3622": { - "fn": "StarknetTokenBridge.initializeContractState", - "jump": "i", - "offset": [1880, 1917], - "op": "JUMP", - "path": "28" - }, - "3623": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1880, 1917], - "op": "JUMPDEST", - "path": "28" - }, - "3624": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1605, 1924], - "op": "POP", - "path": "28" - }, - "3625": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1605, 1924], - "op": "POP", - "path": "28" - }, - "3626": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1605, 1924], - "op": "POP", - "path": "28" - }, - "3627": { - "fn": "StarknetTokenBridge.initializeContractState", - "offset": [1605, 1924], - "op": "POP", - "path": "28" - }, - "3628": { - "fn": "StarknetTokenBridge.initializeContractState", - "jump": "o", - "offset": [1605, 1924], - "op": "JUMP", - "path": "28" - }, - "3629": { - "fn": "Governance.initGovernance", - "offset": [1529, 1834], - "op": "JUMPDEST", - "path": "1" - }, - "3630": { - "fn": "Governance.initGovernance", - "offset": [1574, 1606], - "op": "PUSH1", - "path": "1", - "value": "0x0" - }, - "3632": { - "fn": "Governance.initGovernance", - "offset": [1609, 1628], - "op": "PUSH2", - "path": "1", - "value": "0xE37" - }, - "3635": { - "fn": "Governance.initGovernance", - "offset": [1609, 1626], - "op": "PUSH2", - "path": "1", - "value": "0x161F" - }, - "3638": { - "fn": "Governance.initGovernance", - "jump": "i", - "offset": [1609, 1628], - "op": "JUMP", - "path": "1" - }, - "3639": { - "fn": "Governance.initGovernance", - "offset": [1609, 1628], - "op": "JUMPDEST", - "path": "1" - }, - "3640": { - "fn": "Governance.initGovernance", - "offset": [1647, 1662], - "op": "PUSH1", - "path": "1", - "statement": 40, - "value": "0x1" - }, - "3642": { - "fn": "Governance.initGovernance", - "offset": [1647, 1662], - "op": "DUP2", - "path": "1" - }, - "3643": { - "fn": "Governance.initGovernance", - "offset": [1647, 1662], - "op": "ADD", - "path": "1" - }, - "3644": { - "fn": "Governance.initGovernance", - "offset": [1647, 1662], - "op": "SLOAD", - "path": "1" - }, - "3645": { - "fn": "Governance.initGovernance", - "offset": [1647, 1662], - "op": "SWAP1", - "path": "1" - }, - "3646": { - "fn": "Governance.initGovernance", - "offset": [1647, 1662], - "op": "SWAP2", - "path": "1" - }, - "3647": { - "op": "POP" - }, - "3648": { - "op": "PUSH1", - "value": "0x1" - }, - "3650": { - "op": "PUSH1", - "value": "0xA0" - }, - "3652": { - "op": "SHL" - }, - "3653": { - "fn": "Governance.initGovernance", - "offset": [1647, 1662], - "op": "SWAP1", - "path": "1" - }, - "3654": { - "fn": "Governance.initGovernance", - "offset": [1647, 1662], - "op": "DIV", - "path": "1" - }, - "3655": { - "fn": "Governance.initGovernance", - "offset": [1647, 1662], - "op": "PUSH1", - "path": "1", - "value": "0xFF" - }, - "3657": { - "fn": "Governance.initGovernance", - "offset": [1647, 1662], - "op": "AND", - "path": "1" - }, - "3658": { - "branch": 81, - "fn": "Governance.initGovernance", - "offset": [1646, 1662], - "op": "ISZERO", - "path": "1" - }, - "3659": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "PUSH2", - "path": "1", - "value": "0xE91" - }, - "3662": { - "branch": 81, - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "JUMPI", - "path": "1" - }, - "3663": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "PUSH1", - "path": "1", - "value": "0x40" - }, - "3665": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "DUP1", - "path": "1" - }, - "3666": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "MLOAD", - "path": "1" - }, - "3667": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "3671": { - "op": "PUSH1", - "value": "0xE5" - }, - "3673": { - "op": "SHL" - }, - "3674": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "DUP2", - "path": "1" - }, - "3675": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "MSTORE", - "path": "1" - }, - "3676": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "3678": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "PUSH1", - "path": "1", - "value": "0x4" - }, - "3680": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "DUP3", - "path": "1" - }, - "3681": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "ADD", - "path": "1" - }, - "3682": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "MSTORE", - "path": "1" - }, - "3683": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "PUSH1", - "path": "1", - "value": "0x13" - }, - "3685": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "PUSH1", - "path": "1", - "value": "0x24" - }, - "3687": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "DUP3", - "path": "1" - }, - "3688": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "ADD", - "path": "1" - }, - "3689": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "MSTORE", - "path": "1" - }, - "3690": { - "op": "PUSH19", - "value": "0x1053149150511657D253925512505312569151" - }, - "3710": { - "op": "PUSH1", - "value": "0x6A" - }, - "3712": { - "op": "SHL" - }, - "3713": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "PUSH1", - "path": "1", - "value": "0x44" - }, - "3715": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "DUP3", - "path": "1" - }, - "3716": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "ADD", - "path": "1" - }, - "3717": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "MSTORE", - "path": "1" - }, - "3718": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "SWAP1", - "path": "1" - }, - "3719": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "MLOAD", - "path": "1" - }, - "3720": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "SWAP1", - "path": "1" - }, - "3721": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "DUP2", - "path": "1" - }, - "3722": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "SWAP1", - "path": "1" - }, - "3723": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "SUB", - "path": "1" - }, - "3724": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "PUSH1", - "path": "1", - "value": "0x64" - }, - "3726": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "ADD", - "path": "1" - }, - "3727": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "SWAP1", - "path": "1" - }, - "3728": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "REVERT", - "path": "1" - }, - "3729": { - "fn": "Governance.initGovernance", - "offset": [1638, 1686], - "op": "JUMPDEST", - "path": "1" - }, - "3730": { - "fn": "Governance.initGovernance", - "offset": [1714, 1718], - "op": "PUSH1", - "path": "1", - "statement": 41, - "value": "0x1" - }, - "3732": { - "fn": "Governance.initGovernance", - "offset": [1696, 1711], - "op": "DUP2", - "path": "1" - }, - "3733": { - "fn": "Governance.initGovernance", - "offset": [1696, 1711], - "op": "ADD", - "path": "1" - }, - "3734": { - "fn": "Governance.initGovernance", - "offset": [1696, 1718], - "op": "DUP1", - "path": "1" - }, - "3735": { - "fn": "Governance.initGovernance", - "offset": [1696, 1718], - "op": "SLOAD", - "path": "1" - }, - "3736": { - "op": "PUSH1", - "value": "0xFF" - }, - "3738": { - "op": "PUSH1", - "value": "0xA0" - }, - "3740": { - "op": "SHL" - }, - "3741": { - "op": "NOT" - }, - "3742": { - "fn": "Governance.initGovernance", - "offset": [1696, 1718], - "op": "AND", - "path": "1" - }, - "3743": { - "op": "PUSH1", - "value": "0x1" - }, - "3745": { - "op": "PUSH1", - "value": "0xA0" - }, - "3747": { - "op": "SHL" - }, - "3748": { - "fn": "Governance.initGovernance", - "offset": [1696, 1718], - "op": "OR", - "path": "1" - }, - "3749": { - "fn": "Governance.initGovernance", - "offset": [1696, 1718], - "op": "SWAP1", - "path": "1" - }, - "3750": { - "fn": "Governance.initGovernance", - "offset": [1696, 1718], - "op": "SSTORE", - "path": "1" - }, - "3751": { - "fn": "Governance.initGovernance", - "offset": [1804, 1827], - "op": "PUSH2", - "path": "1", - "statement": 42, - "value": "0x3BA" - }, - "3754": { - "fn": "Governance.initGovernance", - "offset": [1816, 1826], - "op": "CALLER", - "path": "1" - }, - "3755": { - "fn": "Governance.initGovernance", - "offset": [1804, 1815], - "op": "PUSH2", - "path": "1", - "value": "0x1718" - }, - "3758": { - "fn": "Governance.initGovernance", - "jump": "i", - "offset": [1804, 1827], - "op": "JUMP", - "path": "1" - }, - "3759": { - "fn": "Governance.removeGovernor", - "offset": [3747, 4147], - "op": "JUMPDEST", - "path": "1" - }, - "3760": { - "offset": [434, 456], - "op": "PUSH2", - "path": "8", - "value": "0xEB8" - }, - "3763": { - "offset": [445, 455], - "op": "CALLER", - "path": "8" - }, - "3764": { - "offset": [434, 444], - "op": "PUSH2", - "path": "8", - "value": "0xB00" - }, - "3767": { - "jump": "i", - "offset": [434, 456], - "op": "JUMP", - "path": "8" - }, - "3768": { - "fn": "Governance.removeGovernor", - "offset": [434, 456], - "op": "JUMPDEST", - "path": "8" - }, - "3769": { - "offset": [426, 476], - "op": "PUSH2", - "path": "8", - "value": "0xEFB" - }, - "3772": { - "offset": [426, 476], - "op": "JUMPI", - "path": "8" - }, - "3773": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x40" - }, - "3775": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "DUP1", - "path": "8" - }, - "3776": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "MLOAD", - "path": "8" - }, - "3777": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "3781": { - "op": "PUSH1", - "value": "0xE5" - }, - "3783": { - "op": "SHL" - }, - "3784": { - "offset": [426, 476], - "op": "DUP2", - "path": "8" - }, - "3785": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "3786": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x20" - }, - "3788": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x4" - }, - "3790": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "3791": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "3792": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "3793": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0xF" - }, - "3795": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x24" - }, - "3797": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "3798": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "3799": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "3800": { - "op": "PUSH15", - "value": "0x4F4E4C595F474F5645524E414E4345" - }, - "3816": { - "op": "PUSH1", - "value": "0x88" - }, - "3818": { - "op": "SHL" - }, - "3819": { - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x44" - }, - "3821": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "3822": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "3823": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "3824": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "3825": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "MLOAD", - "path": "8" - }, - "3826": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "3827": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "DUP2", - "path": "8" - }, - "3828": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "3829": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "SUB", - "path": "8" - }, - "3830": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x64" - }, - "3832": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "3833": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "3834": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "REVERT", - "path": "8" - }, - "3835": { - "fn": "Governance.removeGovernor", - "offset": [426, 476], - "op": "JUMPDEST", - "path": "8" - }, - "3836": { - "fn": "Governance.removeGovernor", - "offset": [3841, 3851], - "op": "CALLER", - "path": "1", - "statement": 43 - }, - "3837": { - "op": "PUSH1", - "value": "0x1" - }, - "3839": { - "op": "PUSH1", - "value": "0x1" - }, - "3841": { - "op": "PUSH1", - "value": "0xA0" - }, - "3843": { - "op": "SHL" - }, - "3844": { - "op": "SUB" - }, - "3845": { - "fn": "Governance.removeGovernor", - "offset": [3841, 3873], - "op": "DUP3", - "path": "1" - }, - "3846": { - "fn": "Governance.removeGovernor", - "offset": [3841, 3873], - "op": "AND", - "path": "1" - }, - "3847": { - "fn": "Governance.removeGovernor", - "offset": [3841, 3873], - "op": "EQ", - "path": "1" - }, - "3848": { - "branch": 82, - "fn": "Governance.removeGovernor", - "offset": [3841, 3873], - "op": "ISZERO", - "path": "1" - }, - "3849": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "PUSH2", - "path": "1", - "value": "0xF50" - }, - "3852": { - "branch": 82, - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "JUMPI", - "path": "1" - }, - "3853": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "PUSH1", - "path": "1", - "value": "0x40" - }, - "3855": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "DUP1", - "path": "1" - }, - "3856": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "MLOAD", - "path": "1" - }, - "3857": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "3861": { - "op": "PUSH1", - "value": "0xE5" - }, - "3863": { - "op": "SHL" - }, - "3864": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "DUP2", - "path": "1" - }, - "3865": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "MSTORE", - "path": "1" - }, - "3866": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "3868": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "PUSH1", - "path": "1", - "value": "0x4" - }, - "3870": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "DUP3", - "path": "1" - }, - "3871": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "ADD", - "path": "1" - }, - "3872": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "MSTORE", - "path": "1" - }, - "3873": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "PUSH1", - "path": "1", - "value": "0x14" - }, - "3875": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "PUSH1", - "path": "1", - "value": "0x24" - }, - "3877": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "DUP3", - "path": "1" - }, - "3878": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "ADD", - "path": "1" - }, - "3879": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "MSTORE", - "path": "1" - }, - "3880": { - "op": "PUSH20", - "value": "0x474F5645524E4F525F53454C465F52454D4F5645" - }, - "3901": { - "op": "PUSH1", - "value": "0x60" - }, - "3903": { - "op": "SHL" - }, - "3904": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "PUSH1", - "path": "1", - "value": "0x44" - }, - "3906": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "DUP3", - "path": "1" - }, - "3907": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "ADD", - "path": "1" - }, - "3908": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "MSTORE", - "path": "1" - }, - "3909": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "SWAP1", - "path": "1" - }, - "3910": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "MLOAD", - "path": "1" - }, - "3911": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "SWAP1", - "path": "1" - }, - "3912": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "DUP2", - "path": "1" - }, - "3913": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "SWAP1", - "path": "1" - }, - "3914": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "SUB", - "path": "1" - }, - "3915": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "PUSH1", - "path": "1", - "value": "0x64" - }, - "3917": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "ADD", - "path": "1" - }, - "3918": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "SWAP1", - "path": "1" - }, - "3919": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "REVERT", - "path": "1" - }, - "3920": { - "fn": "Governance.removeGovernor", - "offset": [3833, 3898], - "op": "JUMPDEST", - "path": "1" - }, - "3921": { - "fn": "Governance.removeGovernor", - "offset": [3908, 3940], - "op": "PUSH1", - "path": "1", - "value": "0x0" - }, - "3923": { - "fn": "Governance.removeGovernor", - "offset": [3943, 3962], - "op": "PUSH2", - "path": "1", - "value": "0xF5A" - }, - "3926": { - "fn": "Governance.removeGovernor", - "offset": [3943, 3960], - "op": "PUSH2", - "path": "1", - "value": "0x161F" - }, - "3929": { - "fn": "Governance.removeGovernor", - "jump": "i", - "offset": [3943, 3962], - "op": "JUMP", - "path": "1" - }, - "3930": { - "fn": "Governance.removeGovernor", - "offset": [3943, 3962], - "op": "JUMPDEST", - "path": "1" - }, - "3931": { - "fn": "Governance.removeGovernor", - "offset": [3908, 3962], - "op": "SWAP1", - "path": "1" - }, - "3932": { - "fn": "Governance.removeGovernor", - "offset": [3908, 3962], - "op": "POP", - "path": "1" - }, - "3933": { - "fn": "Governance.removeGovernor", - "offset": [3980, 4010], - "op": "PUSH2", - "path": "1", - "statement": 44, - "value": "0xF65" - }, - "3936": { - "fn": "Governance.removeGovernor", - "offset": [3991, 4009], - "op": "DUP3", - "path": "1" - }, - "3937": { - "fn": "Governance.removeGovernor", - "offset": [3980, 3990], - "op": "PUSH2", - "path": "1", - "value": "0xB00" - }, - "3940": { - "fn": "Governance.removeGovernor", - "jump": "i", - "offset": [3980, 4010], - "op": "JUMP", - "path": "1" - }, - "3941": { - "branch": 83, - "fn": "Governance.removeGovernor", - "offset": [3980, 4010], - "op": "JUMPDEST", - "path": "1" - }, - "3942": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "PUSH2", - "path": "1", - "value": "0xFA5" - }, - "3945": { - "branch": 83, - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "JUMPI", - "path": "1" - }, - "3946": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "PUSH1", - "path": "1", - "value": "0x40" - }, - "3948": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "DUP1", - "path": "1" - }, - "3949": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "MLOAD", - "path": "1" - }, - "3950": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "3954": { - "op": "PUSH1", - "value": "0xE5" - }, - "3956": { - "op": "SHL" - }, - "3957": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "DUP2", - "path": "1" - }, - "3958": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "MSTORE", - "path": "1" - }, - "3959": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "3961": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "PUSH1", - "path": "1", - "value": "0x4" - }, - "3963": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "DUP3", - "path": "1" - }, - "3964": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "ADD", - "path": "1" - }, - "3965": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "MSTORE", - "path": "1" - }, - "3966": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "PUSH1", - "path": "1", - "value": "0xC" - }, - "3968": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "PUSH1", - "path": "1", - "value": "0x24" - }, - "3970": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "DUP3", - "path": "1" - }, - "3971": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "ADD", - "path": "1" - }, - "3972": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "MSTORE", - "path": "1" - }, - "3973": { - "op": "PUSH12", - "value": "0x2727AA2FA3A7AB22A92727A9" - }, - "3986": { - "op": "PUSH1", - "value": "0xA1" - }, - "3988": { - "op": "SHL" - }, - "3989": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "PUSH1", - "path": "1", - "value": "0x44" - }, - "3991": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "DUP3", - "path": "1" - }, - "3992": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "ADD", - "path": "1" - }, - "3993": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "MSTORE", - "path": "1" - }, - "3994": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "SWAP1", - "path": "1" - }, - "3995": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "MLOAD", - "path": "1" - }, - "3996": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "SWAP1", - "path": "1" - }, - "3997": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "DUP2", - "path": "1" - }, - "3998": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "SWAP1", - "path": "1" - }, - "3999": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "SUB", - "path": "1" - }, - "4000": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "PUSH1", - "path": "1", - "value": "0x64" - }, - "4002": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "ADD", - "path": "1" - }, - "4003": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "SWAP1", - "path": "1" - }, - "4004": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "REVERT", - "path": "1" - }, - "4005": { - "fn": "Governance.removeGovernor", - "offset": [3972, 4027], - "op": "JUMPDEST", - "path": "1" - }, - "4006": { - "op": "PUSH1", - "value": "0x1" - }, - "4008": { - "op": "PUSH1", - "value": "0x1" - }, - "4010": { - "op": "PUSH1", - "value": "0xA0" - }, - "4012": { - "op": "SHL" - }, - "4013": { - "op": "SUB" - }, - "4014": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4079], - "op": "DUP3", - "path": "1", - "statement": 45 - }, - "4015": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4079], - "op": "AND", - "path": "1" - }, - "4016": { - "fn": "Governance.removeGovernor", - "offset": [4082, 4087], - "op": "PUSH1", - "path": "1", - "value": "0x0" - }, - "4018": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4079], - "op": "DUP2", - "path": "1" - }, - "4019": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4079], - "op": "DUP2", - "path": "1" - }, - "4020": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4079], - "op": "MSTORE", - "path": "1" - }, - "4021": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4079], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "4023": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4079], - "op": "DUP4", - "path": "1" - }, - "4024": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4079], - "op": "DUP2", - "path": "1" - }, - "4025": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4079], - "op": "MSTORE", - "path": "1" - }, - "4026": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4079], - "op": "PUSH1", - "path": "1", - "value": "0x40" - }, - "4028": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4079], - "op": "SWAP2", - "path": "1" - }, - "4029": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4079], - "op": "DUP3", - "path": "1" - }, - "4030": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4079], - "op": "SWAP1", - "path": "1" - }, - "4031": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4079], - "op": "KECCAK256", - "path": "1" - }, - "4032": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4087], - "op": "DUP1", - "path": "1" - }, - "4033": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4087], - "op": "SLOAD", - "path": "1" - }, - "4034": { - "op": "PUSH1", - "value": "0xFF" - }, - "4036": { - "op": "NOT" - }, - "4037": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4087], - "op": "AND", - "path": "1" - }, - "4038": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4087], - "op": "SWAP1", - "path": "1" - }, - "4039": { - "fn": "Governance.removeGovernor", - "offset": [4037, 4087], - "op": "SSTORE", - "path": "1" - }, - "4040": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "DUP2", - "path": "1", - "statement": 46 - }, - "4041": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "MLOAD", - "path": "1" - }, - "4042": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "SWAP3", - "path": "1" - }, - "4043": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "DUP4", - "path": "1" - }, - "4044": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "MSTORE", - "path": "1" - }, - "4045": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "SWAP1", - "path": "1" - }, - "4046": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "MLOAD", - "path": "1" - }, - "4047": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "PUSH32", - "path": "1", - "value": "0xD75F94825E770B8B512BE8E74759E252AD00E102E38F50CCE2F7C6F868A29599" - }, - "4080": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "SWAP3", - "path": "1" - }, - "4081": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "DUP2", - "path": "1" - }, - "4082": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "SWAP1", - "path": "1" - }, - "4083": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "SUB", - "path": "1" - }, - "4084": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "SWAP1", - "path": "1" - }, - "4085": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "SWAP2", - "path": "1" - }, - "4086": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "ADD", - "path": "1" - }, - "4087": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "SWAP1", - "path": "1" - }, - "4088": { - "fn": "Governance.removeGovernor", - "offset": [4102, 4140], - "op": "LOG1", - "path": "1" - }, - "4089": { - "offset": [486, 487], - "op": "POP", - "path": "8" - }, - "4090": { - "fn": "Governance.removeGovernor", - "offset": [3747, 4147], - "op": "POP", - "path": "1" - }, - "4091": { - "fn": "Governance.removeGovernor", - "jump": "o", - "offset": [3747, 4147], - "op": "JUMP", - "path": "1" - }, - "4092": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1858, 1979], - "op": "JUMPDEST", - "path": "29" - }, - "4093": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1917, 1972], - "op": "PUSH2", - "path": "29", - "statement": 47, - "value": "0x3BA" - }, - "4096": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "4098": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "MLOAD", - "path": "29" - }, - "4099": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "DUP1", - "path": "29" - }, - "4100": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "PUSH1", - "path": "29", - "value": "0x60" - }, - "4102": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "ADD", - "path": "29" - }, - "4103": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "4105": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "MSTORE", - "path": "29" - }, - "4106": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "DUP1", - "path": "29" - }, - "4107": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "PUSH1", - "path": "29", - "value": "0x27" - }, - "4109": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "DUP2", - "path": "29" - }, - "4110": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "MSTORE", - "path": "29" - }, - "4111": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "PUSH1", - "path": "29", - "value": "0x20" - }, - "4113": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "ADD", - "path": "29" - }, - "4114": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "PUSH2", - "path": "29", - "value": "0x19F5" - }, - "4117": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "PUSH1", - "path": "29", - "value": "0x27" - }, - "4119": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "SWAP2", - "path": "29" - }, - "4120": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1943, 1964], - "op": "CODECOPY", - "path": "29" - }, - "4121": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1966, 1971], - "op": "DUP3", - "path": "29" - }, - "4122": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1917, 1942], - "op": "PUSH2", - "path": "29", - "value": "0x1798" - }, - "4125": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "jump": "i", - "offset": [1917, 1972], - "op": "JUMP", - "path": "29" - }, - "4126": { - "fn": "Governance.nominateNewGovernor", - "offset": [2332, 2633], - "op": "JUMPDEST", - "path": "1" - }, - "4127": { - "offset": [434, 456], - "op": "PUSH2", - "path": "8", - "value": "0x1027" - }, - "4130": { - "offset": [445, 455], - "op": "CALLER", - "path": "8" - }, - "4131": { - "offset": [434, 444], - "op": "PUSH2", - "path": "8", - "value": "0xB00" - }, - "4134": { - "jump": "i", - "offset": [434, 456], - "op": "JUMP", - "path": "8" - }, - "4135": { - "fn": "Governance.nominateNewGovernor", - "offset": [434, 456], - "op": "JUMPDEST", - "path": "8" - }, - "4136": { - "offset": [426, 476], - "op": "PUSH2", - "path": "8", - "value": "0x106A" - }, - "4139": { - "offset": [426, 476], - "op": "JUMPI", - "path": "8" - }, - "4140": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x40" - }, - "4142": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "DUP1", - "path": "8" - }, - "4143": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "MLOAD", - "path": "8" - }, - "4144": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "4148": { - "op": "PUSH1", - "value": "0xE5" - }, - "4150": { - "op": "SHL" - }, - "4151": { - "offset": [426, 476], - "op": "DUP2", - "path": "8" - }, - "4152": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "4153": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x20" - }, - "4155": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x4" - }, - "4157": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "4158": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "4159": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "4160": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0xF" - }, - "4162": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x24" - }, - "4164": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "4165": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "4166": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "4167": { - "op": "PUSH15", - "value": "0x4F4E4C595F474F5645524E414E4345" - }, - "4183": { - "op": "PUSH1", - "value": "0x88" - }, - "4185": { - "op": "SHL" - }, - "4186": { - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x44" - }, - "4188": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "4189": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "4190": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "4191": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "4192": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "MLOAD", - "path": "8" - }, - "4193": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "4194": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "DUP2", - "path": "8" - }, - "4195": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "4196": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "SUB", - "path": "8" - }, - "4197": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x64" - }, - "4199": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "4200": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "4201": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "REVERT", - "path": "8" - }, - "4202": { - "fn": "Governance.nominateNewGovernor", - "offset": [426, 476], - "op": "JUMPDEST", - "path": "8" - }, - "4203": { - "fn": "Governance.nominateNewGovernor", - "offset": [2416, 2448], - "op": "PUSH1", - "path": "1", - "value": "0x0" - }, - "4205": { - "fn": "Governance.nominateNewGovernor", - "offset": [2451, 2470], - "op": "PUSH2", - "path": "1", - "value": "0x1074" - }, - "4208": { - "fn": "Governance.nominateNewGovernor", - "offset": [2451, 2468], - "op": "PUSH2", - "path": "1", - "value": "0x161F" - }, - "4211": { - "fn": "Governance.nominateNewGovernor", - "jump": "i", - "offset": [2451, 2470], - "op": "JUMP", - "path": "1" - }, - "4212": { - "fn": "Governance.nominateNewGovernor", - "offset": [2451, 2470], - "op": "JUMPDEST", - "path": "1" - }, - "4213": { - "fn": "Governance.nominateNewGovernor", - "offset": [2416, 2470], - "op": "SWAP1", - "path": "1" - }, - "4214": { - "fn": "Governance.nominateNewGovernor", - "offset": [2416, 2470], - "op": "POP", - "path": "1" - }, - "4215": { - "fn": "Governance.nominateNewGovernor", - "offset": [2489, 2512], - "op": "PUSH2", - "path": "1", - "statement": 48, - "value": "0x107F" - }, - "4218": { - "fn": "Governance.nominateNewGovernor", - "offset": [2500, 2511], - "op": "DUP3", - "path": "1" - }, - "4219": { - "fn": "Governance.nominateNewGovernor", - "offset": [2489, 2499], - "op": "PUSH2", - "path": "1", - "value": "0xB00" - }, - "4222": { - "fn": "Governance.nominateNewGovernor", - "jump": "i", - "offset": [2489, 2512], - "op": "JUMP", - "path": "1" - }, - "4223": { - "fn": "Governance.nominateNewGovernor", - "offset": [2489, 2512], - "op": "JUMPDEST", - "path": "1" - }, - "4224": { - "branch": 84, - "fn": "Governance.nominateNewGovernor", - "offset": [2488, 2512], - "op": "ISZERO", - "path": "1" - }, - "4225": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "PUSH2", - "path": "1", - "value": "0x10C4" - }, - "4228": { - "branch": 84, - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "JUMPI", - "path": "1" - }, - "4229": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "PUSH1", - "path": "1", - "value": "0x40" - }, - "4231": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "DUP1", - "path": "1" - }, - "4232": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "MLOAD", - "path": "1" - }, - "4233": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "4237": { - "op": "PUSH1", - "value": "0xE5" - }, - "4239": { - "op": "SHL" - }, - "4240": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "DUP2", - "path": "1" - }, - "4241": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "MSTORE", - "path": "1" - }, - "4242": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "4244": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "PUSH1", - "path": "1", - "value": "0x4" - }, - "4246": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "DUP3", - "path": "1" - }, - "4247": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "ADD", - "path": "1" - }, - "4248": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "MSTORE", - "path": "1" - }, - "4249": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "PUSH1", - "path": "1", - "value": "0x10" - }, - "4251": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "PUSH1", - "path": "1", - "value": "0x24" - }, - "4253": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "DUP3", - "path": "1" - }, - "4254": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "ADD", - "path": "1" - }, - "4255": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "MSTORE", - "path": "1" - }, - "4256": { - "op": "PUSH16", - "value": "0x20A62922A0A22CAFA3A7AB22A92727A9" - }, - "4273": { - "op": "PUSH1", - "value": "0x81" - }, - "4275": { - "op": "SHL" - }, - "4276": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "PUSH1", - "path": "1", - "value": "0x44" - }, - "4278": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "DUP3", - "path": "1" - }, - "4279": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "ADD", - "path": "1" - }, - "4280": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "MSTORE", - "path": "1" - }, - "4281": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "SWAP1", - "path": "1" - }, - "4282": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "MLOAD", - "path": "1" - }, - "4283": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "SWAP1", - "path": "1" - }, - "4284": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "DUP2", - "path": "1" - }, - "4285": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "SWAP1", - "path": "1" - }, - "4286": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "SUB", - "path": "1" - }, - "4287": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "PUSH1", - "path": "1", - "value": "0x64" - }, - "4289": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "ADD", - "path": "1" - }, - "4290": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "SWAP1", - "path": "1" - }, - "4291": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "REVERT", - "path": "1" - }, - "4292": { - "fn": "Governance.nominateNewGovernor", - "offset": [2480, 2533], - "op": "JUMPDEST", - "path": "1" - }, - "4293": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2564], - "op": "PUSH1", - "path": "1", - "statement": 49, - "value": "0x1" - }, - "4295": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2564], - "op": "DUP2", - "path": "1" - }, - "4296": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2564], - "op": "ADD", - "path": "1" - }, - "4297": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2578], - "op": "DUP1", - "path": "1" - }, - "4298": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2578], - "op": "SLOAD", - "path": "1" - }, - "4299": { - "op": "PUSH1", - "value": "0x1" - }, - "4301": { - "op": "PUSH1", - "value": "0x1" - }, - "4303": { - "op": "PUSH1", - "value": "0xA0" - }, - "4305": { - "op": "SHL" - }, - "4306": { - "op": "SUB" - }, - "4307": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2578], - "op": "DUP5", - "path": "1" - }, - "4308": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2578], - "op": "AND", - "path": "1" - }, - "4309": { - "op": "PUSH1", - "value": "0x1" - }, - "4311": { - "op": "PUSH1", - "value": "0x1" - }, - "4313": { - "op": "PUSH1", - "value": "0xA0" - }, - "4315": { - "op": "SHL" - }, - "4316": { - "op": "SUB" - }, - "4317": { - "op": "NOT" - }, - "4318": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2578], - "op": "SWAP1", - "path": "1" - }, - "4319": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2578], - "op": "SWAP2", - "path": "1" - }, - "4320": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2578], - "op": "AND", - "path": "1" - }, - "4321": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2578], - "op": "DUP2", - "path": "1" - }, - "4322": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2578], - "op": "OR", - "path": "1" - }, - "4323": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2578], - "op": "SWAP1", - "path": "1" - }, - "4324": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2578], - "op": "SWAP2", - "path": "1" - }, - "4325": { - "fn": "Governance.nominateNewGovernor", - "offset": [2543, 2578], - "op": "SSTORE", - "path": "1" - }, - "4326": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "PUSH1", - "path": "1", - "statement": 50, - "value": "0x40" - }, - "4328": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "DUP1", - "path": "1" - }, - "4329": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "MLOAD", - "path": "1" - }, - "4330": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "SWAP2", - "path": "1" - }, - "4331": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "DUP3", - "path": "1" - }, - "4332": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "MSTORE", - "path": "1" - }, - "4333": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "MLOAD", - "path": "1" - }, - "4334": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "PUSH32", - "path": "1", - "value": "0x6166272C8D3F5F579082F2827532732F97195007983BB5B83AC12C56700B01A6" - }, - "4367": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "SWAP2", - "path": "1" - }, - "4368": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "DUP2", - "path": "1" - }, - "4369": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "SWAP1", - "path": "1" - }, - "4370": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "SUB", - "path": "1" - }, - "4371": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "4373": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "ADD", - "path": "1" - }, - "4374": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "SWAP1", - "path": "1" - }, - "4375": { - "fn": "Governance.nominateNewGovernor", - "offset": [2593, 2626], - "op": "LOG1", - "path": "1" - }, - "4376": { - "offset": [486, 487], - "op": "POP", - "path": "8" - }, - "4377": { - "fn": "Governance.nominateNewGovernor", - "offset": [2332, 2633], - "op": "POP", - "path": "1" - }, - "4378": { - "fn": "Governance.nominateNewGovernor", - "jump": "o", - "offset": [2332, 2633], - "op": "JUMP", - "path": "1" - }, - "4379": { - "fn": "Governance.acceptGovernance", - "offset": [3193, 3690], - "op": "JUMPDEST", - "path": "1" - }, - "4380": { - "fn": "Governance.acceptGovernance", - "offset": [3321, 3353], - "op": "PUSH1", - "path": "1", - "value": "0x0" - }, - "4382": { - "fn": "Governance.acceptGovernance", - "offset": [3356, 3375], - "op": "PUSH2", - "path": "1", - "value": "0x1125" - }, - "4385": { - "fn": "Governance.acceptGovernance", - "offset": [3356, 3373], - "op": "PUSH2", - "path": "1", - "value": "0x161F" - }, - "4388": { - "fn": "Governance.acceptGovernance", - "jump": "i", - "offset": [3356, 3375], - "op": "JUMP", - "path": "1" - }, - "4389": { - "fn": "Governance.acceptGovernance", - "offset": [3356, 3375], - "op": "JUMPDEST", - "path": "1" - }, - "4390": { - "fn": "Governance.acceptGovernance", - "offset": [3407, 3428], - "op": "PUSH1", - "path": "1", - "statement": 51, - "value": "0x1" - }, - "4392": { - "fn": "Governance.acceptGovernance", - "offset": [3407, 3428], - "op": "DUP2", - "path": "1" - }, - "4393": { - "fn": "Governance.acceptGovernance", - "offset": [3407, 3428], - "op": "ADD", - "path": "1" - }, - "4394": { - "fn": "Governance.acceptGovernance", - "offset": [3407, 3428], - "op": "SLOAD", - "path": "1" - }, - "4395": { - "fn": "Governance.acceptGovernance", - "offset": [3407, 3428], - "op": "SWAP1", - "path": "1" - }, - "4396": { - "fn": "Governance.acceptGovernance", - "offset": [3407, 3428], - "op": "SWAP2", - "path": "1" - }, - "4397": { - "op": "POP" - }, - "4398": { - "op": "PUSH1", - "value": "0x1" - }, - "4400": { - "op": "PUSH1", - "value": "0x1" - }, - "4402": { - "op": "PUSH1", - "value": "0xA0" - }, - "4404": { - "op": "SHL" - }, - "4405": { - "op": "SUB" - }, - "4406": { - "fn": "Governance.acceptGovernance", - "offset": [3407, 3428], - "op": "AND", - "path": "1" - }, - "4407": { - "fn": "Governance.acceptGovernance", - "offset": [3393, 3403], - "op": "CALLER", - "path": "1" - }, - "4408": { - "branch": 85, - "fn": "Governance.acceptGovernance", - "offset": [3393, 3428], - "op": "EQ", - "path": "1" - }, - "4409": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "PUSH2", - "path": "1", - "value": "0x1189" - }, - "4412": { - "branch": 85, - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "JUMPI", - "path": "1" - }, - "4413": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "PUSH1", - "path": "1", - "value": "0x40" - }, - "4415": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "DUP1", - "path": "1" - }, - "4416": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "MLOAD", - "path": "1" - }, - "4417": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "4421": { - "op": "PUSH1", - "value": "0xE5" - }, - "4423": { - "op": "SHL" - }, - "4424": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "DUP2", - "path": "1" - }, - "4425": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "MSTORE", - "path": "1" - }, - "4426": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "4428": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "PUSH1", - "path": "1", - "value": "0x4" - }, - "4430": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "DUP3", - "path": "1" - }, - "4431": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "ADD", - "path": "1" - }, - "4432": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "MSTORE", - "path": "1" - }, - "4433": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "PUSH1", - "path": "1", - "value": "0x17" - }, - "4435": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "PUSH1", - "path": "1", - "value": "0x24" - }, - "4437": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "DUP3", - "path": "1" - }, - "4438": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "ADD", - "path": "1" - }, - "4439": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "MSTORE", - "path": "1" - }, - "4440": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "PUSH32", - "path": "1", - "value": "0x4F4E4C595F43414E4449444154455F474F5645524E4F52000000000000000000" - }, - "4473": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "PUSH1", - "path": "1", - "value": "0x44" - }, - "4475": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "DUP3", - "path": "1" - }, - "4476": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "ADD", - "path": "1" - }, - "4477": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "MSTORE", - "path": "1" - }, - "4478": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "SWAP1", - "path": "1" - }, - "4479": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "MLOAD", - "path": "1" - }, - "4480": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "SWAP1", - "path": "1" - }, - "4481": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "DUP2", - "path": "1" - }, - "4482": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "SWAP1", - "path": "1" - }, - "4483": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "SUB", - "path": "1" - }, - "4484": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "PUSH1", - "path": "1", - "value": "0x64" - }, - "4486": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "ADD", - "path": "1" - }, - "4487": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "SWAP1", - "path": "1" - }, - "4488": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "REVERT", - "path": "1" - }, - "4489": { - "fn": "Governance.acceptGovernance", - "offset": [3385, 3456], - "op": "JUMPDEST", - "path": "1" - }, - "4490": { - "fn": "Governance.acceptGovernance", - "offset": [3504, 3525], - "op": "PUSH1", - "path": "1", - "statement": 52, - "value": "0x1" - }, - "4492": { - "fn": "Governance.acceptGovernance", - "offset": [3504, 3525], - "op": "DUP2", - "path": "1" - }, - "4493": { - "fn": "Governance.acceptGovernance", - "offset": [3504, 3525], - "op": "ADD", - "path": "1" - }, - "4494": { - "fn": "Governance.acceptGovernance", - "offset": [3504, 3525], - "op": "SLOAD", - "path": "1" - }, - "4495": { - "fn": "Governance.acceptGovernance", - "offset": [3492, 3526], - "op": "PUSH2", - "path": "1", - "value": "0x11A0" - }, - "4498": { - "fn": "Governance.acceptGovernance", - "offset": [3492, 3526], - "op": "SWAP1", - "path": "1" - }, - "4499": { - "op": "PUSH1", - "value": "0x1" - }, - "4501": { - "op": "PUSH1", - "value": "0x1" - }, - "4503": { - "op": "PUSH1", - "value": "0xA0" - }, - "4505": { - "op": "SHL" - }, - "4506": { - "op": "SUB" - }, - "4507": { - "fn": "Governance.acceptGovernance", - "offset": [3504, 3525], - "op": "AND", - "path": "1" - }, - "4508": { - "fn": "Governance.acceptGovernance", - "offset": [3492, 3503], - "op": "PUSH2", - "path": "1", - "value": "0x1718" - }, - "4511": { - "fn": "Governance.acceptGovernance", - "jump": "i", - "offset": [3492, 3526], - "op": "JUMP", - "path": "1" - }, - "4512": { - "fn": "Governance.acceptGovernance", - "offset": [3492, 3526], - "op": "JUMPDEST", - "path": "1" - }, - "4513": { - "fn": "Governance.acceptGovernance", - "offset": [3536, 3557], - "op": "PUSH1", - "path": "1", - "statement": 53, - "value": "0x1" - }, - "4515": { - "fn": "Governance.acceptGovernance", - "offset": [3536, 3557], - "op": "DUP2", - "path": "1" - }, - "4516": { - "fn": "Governance.acceptGovernance", - "offset": [3536, 3557], - "op": "ADD", - "path": "1" - }, - "4517": { - "fn": "Governance.acceptGovernance", - "offset": [3536, 3572], - "op": "DUP1", - "path": "1" - }, - "4518": { - "fn": "Governance.acceptGovernance", - "offset": [3536, 3572], - "op": "SLOAD", - "path": "1" - }, - "4519": { - "op": "PUSH1", - "value": "0x1" - }, - "4521": { - "op": "PUSH1", - "value": "0x1" - }, - "4523": { - "op": "PUSH1", - "value": "0xA0" - }, - "4525": { - "op": "SHL" - }, - "4526": { - "op": "SUB" - }, - "4527": { - "op": "NOT" - }, - "4528": { - "fn": "Governance.acceptGovernance", - "offset": [3536, 3572], - "op": "AND", - "path": "1" - }, - "4529": { - "fn": "Governance.acceptGovernance", - "offset": [3536, 3572], - "op": "SWAP1", - "path": "1" - }, - "4530": { - "fn": "Governance.acceptGovernance", - "offset": [3536, 3572], - "op": "SSTORE", - "path": "1" - }, - "4531": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "PUSH1", - "path": "1", - "statement": 54, - "value": "0x40" - }, - "4533": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "DUP1", - "path": "1" - }, - "4534": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "MLOAD", - "path": "1" - }, - "4535": { - "fn": "Governance.acceptGovernance", - "offset": [3672, 3682], - "op": "CALLER", - "path": "1" - }, - "4536": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "DUP2", - "path": "1" - }, - "4537": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "MSTORE", - "path": "1" - }, - "4538": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "SWAP1", - "path": "1" - }, - "4539": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "MLOAD", - "path": "1" - }, - "4540": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "PUSH32", - "path": "1", - "value": "0xCFB473E6C03F9A29DDAF990E736FA3DE5188A0BD85D684F5B6E164EBFBFFF5D2" - }, - "4573": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "SWAP2", - "path": "1" - }, - "4574": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "DUP2", - "path": "1" - }, - "4575": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "SWAP1", - "path": "1" - }, - "4576": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "SUB", - "path": "1" - }, - "4577": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "4579": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "ADD", - "path": "1" - }, - "4580": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "SWAP1", - "path": "1" - }, - "4581": { - "fn": "Governance.acceptGovernance", - "offset": [3649, 3683], - "op": "LOG1", - "path": "1" - }, - "4582": { - "fn": "Governance.acceptGovernance", - "offset": [3193, 3690], - "op": "POP", - "path": "1" - }, - "4583": { - "fn": "Governance.acceptGovernance", - "jump": "o", - "offset": [3193, 3690], - "op": "JUMP", - "path": "1" - }, - "4584": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [896, 1018], - "op": "JUMPDEST", - "path": "29" - }, - "4585": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [946, 953], - "op": "PUSH1", - "path": "29", - "value": "0x0" - }, - "4587": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [972, 1011], - "op": "PUSH2", - "path": "29", - "statement": 55, - "value": "0x120B" - }, - "4590": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "4592": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "MLOAD", - "path": "29" - }, - "4593": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "DUP1", - "path": "29" - }, - "4594": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "PUSH1", - "path": "29", - "value": "0x60" - }, - "4596": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "ADD", - "path": "29" - }, - "4597": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "4599": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "MSTORE", - "path": "29" - }, - "4600": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "DUP1", - "path": "29" - }, - "4601": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "PUSH1", - "path": "29", - "value": "0x27" - }, - "4603": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "DUP2", - "path": "29" - }, - "4604": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "MSTORE", - "path": "29" - }, - "4605": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "PUSH1", - "path": "29", - "value": "0x20" - }, - "4607": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "ADD", - "path": "29" - }, - "4608": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "PUSH2", - "path": "29", - "value": "0x19CE" - }, - "4611": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "PUSH1", - "path": "29", - "value": "0x27" - }, - "4613": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "SWAP2", - "path": "29" - }, - "4614": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [998, 1010], - "op": "CODECOPY", - "path": "29" - }, - "4615": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [972, 997], - "op": "PUSH2", - "path": "29", - "value": "0x1812" - }, - "4618": { - "fn": "StarknetTokenStorage.l2TokenContract", - "jump": "i", - "offset": [972, 1011], - "op": "JUMP", - "path": "29" - }, - "4619": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [972, 1011], - "op": "JUMPDEST", - "path": "29" - }, - "4620": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [965, 1011], - "op": "SWAP1", - "path": "29" - }, - "4621": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [965, 1011], - "op": "POP", - "path": "29" - }, - "4622": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [896, 1018], - "op": "SWAP1", - "path": "29" - }, - "4623": { - "fn": "StarknetTokenStorage.l2TokenContract", - "jump": "o", - "offset": [896, 1018], - "op": "JUMP", - "path": "29" - }, - "4624": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1620, 1736], - "op": "JUMPDEST", - "path": "29" - }, - "4625": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1679, 1729], - "op": "PUSH2", - "path": "29", - "statement": 56, - "value": "0x3BA" - }, - "4628": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "4630": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "MLOAD", - "path": "29" - }, - "4631": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "DUP1", - "path": "29" - }, - "4632": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "PUSH1", - "path": "29", - "value": "0x60" - }, - "4634": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "ADD", - "path": "29" - }, - "4635": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "4637": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "MSTORE", - "path": "29" - }, - "4638": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "DUP1", - "path": "29" - }, - "4639": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "PUSH1", - "path": "29", - "value": "0x27" - }, - "4641": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "DUP2", - "path": "29" - }, - "4642": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "MSTORE", - "path": "29" - }, - "4643": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "PUSH1", - "path": "29", - "value": "0x20" - }, - "4645": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "ADD", - "path": "29" - }, - "4646": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "PUSH2", - "path": "29", - "value": "0x19CE" - }, - "4649": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "PUSH1", - "path": "29", - "value": "0x27" - }, - "4651": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "SWAP2", - "path": "29" - }, - "4652": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1709, 1721], - "op": "CODECOPY", - "path": "29" - }, - "4653": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1723, 1728], - "op": "DUP3", - "path": "29" - }, - "4654": { - "fn": "StarknetTokenStorage.l2TokenContract", - "offset": [1679, 1708], - "op": "PUSH2", - "path": "29", - "value": "0x188F" - }, - "4657": { - "fn": "StarknetTokenStorage.l2TokenContract", - "jump": "i", - "offset": [1679, 1729], - "op": "JUMP", - "path": "29" - }, - "4658": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1150, 1281], - "op": "JUMPDEST", - "path": "29" - }, - "4659": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1200, 1207], - "op": "PUSH1", - "path": "29", - "value": "0x0" - }, - "4661": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1226, 1274], - "op": "PUSH2", - "path": "29", - "statement": 57, - "value": "0x120B" - }, - "4664": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "4666": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "MLOAD", - "path": "29" - }, - "4667": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "DUP1", - "path": "29" - }, - "4668": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "PUSH1", - "path": "29", - "value": "0x60" - }, - "4670": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "ADD", - "path": "29" - }, - "4671": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "4673": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "MSTORE", - "path": "29" - }, - "4674": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "DUP1", - "path": "29" - }, - "4675": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "PUSH1", - "path": "29", - "value": "0x27" - }, - "4677": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "DUP2", - "path": "29" - }, - "4678": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "MSTORE", - "path": "29" - }, - "4679": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "PUSH1", - "path": "29", - "value": "0x20" - }, - "4681": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "ADD", - "path": "29" - }, - "4682": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "PUSH2", - "path": "29", - "value": "0x19F5" - }, - "4685": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "PUSH1", - "path": "29", - "value": "0x27" - }, - "4687": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "SWAP2", - "path": "29" - }, - "4688": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1252, 1273], - "op": "CODECOPY", - "path": "29" - }, - "4689": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "offset": [1226, 1251], - "op": "PUSH2", - "path": "29", - "value": "0x1812" - }, - "4692": { - "fn": "StarknetTokenStorage.maxTotalBalance", - "jump": "i", - "offset": [1226, 1274], - "op": "JUMP", - "path": "29" - }, - "4693": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3292, 3851], - "op": "JUMPDEST", - "path": "28" - }, - "4694": { - "offset": [2589, 2606], - "op": "PUSH2", - "path": "28", - "value": "0x125D" - }, - "4697": { - "offset": [2589, 2604], - "op": "PUSH2", - "path": "28", - "value": "0x11E8" - }, - "4700": { - "jump": "i", - "offset": [2589, 2606], - "op": "JUMP", - "path": "28" - }, - "4701": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2589, 2606], - "op": "JUMPDEST", - "path": "28" - }, - "4702": { - "offset": [2581, 2641], - "op": "PUSH2", - "path": "28", - "value": "0x12AE" - }, - "4705": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "JUMPI", - "path": "28" - }, - "4706": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "4708": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "DUP1", - "path": "28" - }, - "4709": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "MLOAD", - "path": "28" - }, - "4710": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "4714": { - "op": "PUSH1", - "value": "0xE5" - }, - "4716": { - "op": "SHL" - }, - "4717": { - "offset": [2581, 2641], - "op": "DUP2", - "path": "28" - }, - "4718": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "MSTORE", - "path": "28" - }, - "4719": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "4721": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "4723": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "DUP3", - "path": "28" - }, - "4724": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "ADD", - "path": "28" - }, - "4725": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "MSTORE", - "path": "28" - }, - "4726": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "PUSH1", - "path": "28", - "value": "0x19" - }, - "4728": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "PUSH1", - "path": "28", - "value": "0x24" - }, - "4730": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "DUP3", - "path": "28" - }, - "4731": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "ADD", - "path": "28" - }, - "4732": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "MSTORE", - "path": "28" - }, - "4733": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "PUSH32", - "path": "28", - "value": "0x4C325F544F4B454E5F434F4E54524143545F4E4F545F53455400000000000000" - }, - "4766": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "PUSH1", - "path": "28", - "value": "0x44" - }, - "4768": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "DUP3", - "path": "28" - }, - "4769": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "ADD", - "path": "28" - }, - "4770": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "MSTORE", - "path": "28" - }, - "4771": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "SWAP1", - "path": "28" - }, - "4772": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "MLOAD", - "path": "28" - }, - "4773": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "SWAP1", - "path": "28" - }, - "4774": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "DUP2", - "path": "28" - }, - "4775": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "SWAP1", - "path": "28" - }, - "4776": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "SUB", - "path": "28" - }, - "4777": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "PUSH1", - "path": "28", - "value": "0x64" - }, - "4779": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "ADD", - "path": "28" - }, - "4780": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "SWAP1", - "path": "28" - }, - "4781": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "REVERT", - "path": "28" - }, - "4782": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2581, 2641], - "op": "JUMPDEST", - "path": "28" - }, - "4783": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3419, 3430], - "op": "DUP1", - "path": "28" - }, - "4784": { - "offset": [2260, 2274], - "op": "DUP1", - "path": "28" - }, - "4785": { - "offset": [2252, 2302], - "op": "PUSH2", - "path": "28", - "value": "0x12FB" - }, - "4788": { - "offset": [2252, 2302], - "op": "JUMPI", - "path": "28" - }, - "4789": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "4791": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "DUP1", - "path": "28" - }, - "4792": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "MLOAD", - "path": "28" - }, - "4793": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "4797": { - "op": "PUSH1", - "value": "0xE5" - }, - "4799": { - "op": "SHL" - }, - "4800": { - "offset": [2252, 2302], - "op": "DUP2", - "path": "28" - }, - "4801": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "MSTORE", - "path": "28" - }, - "4802": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "4804": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "4806": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "DUP3", - "path": "28" - }, - "4807": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "ADD", - "path": "28" - }, - "4808": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "MSTORE", - "path": "28" - }, - "4809": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "PUSH1", - "path": "28", - "value": "0x17" - }, - "4811": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "PUSH1", - "path": "28", - "value": "0x24" - }, - "4813": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "DUP3", - "path": "28" - }, - "4814": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "ADD", - "path": "28" - }, - "4815": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "MSTORE", - "path": "28" - }, - "4816": { - "op": "PUSH23", - "value": "0x4C325F414444524553535F4F55545F4F465F52414E4745" - }, - "4840": { - "op": "PUSH1", - "value": "0x48" - }, - "4842": { - "op": "SHL" - }, - "4843": { - "offset": [2252, 2302], - "op": "PUSH1", - "path": "28", - "value": "0x44" - }, - "4845": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "DUP3", - "path": "28" - }, - "4846": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "ADD", - "path": "28" - }, - "4847": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "MSTORE", - "path": "28" - }, - "4848": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "SWAP1", - "path": "28" - }, - "4849": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "MLOAD", - "path": "28" - }, - "4850": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "SWAP1", - "path": "28" - }, - "4851": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "DUP2", - "path": "28" - }, - "4852": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "SWAP1", - "path": "28" - }, - "4853": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "SUB", - "path": "28" - }, - "4854": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "PUSH1", - "path": "28", - "value": "0x64" - }, - "4856": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "ADD", - "path": "28" - }, - "4857": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "SWAP1", - "path": "28" - }, - "4858": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "REVERT", - "path": "28" - }, - "4859": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2252, 2302], - "op": "JUMPDEST", - "path": "28" - }, - "4860": { - "op": "PUSH1", - "value": "0x1" - }, - "4862": { - "op": "PUSH8", - "value": "0x800000000000011" - }, - "4871": { - "op": "PUSH1", - "value": "0xC0" - }, - "4873": { - "op": "SHL" - }, - "4874": { - "op": "ADD" - }, - "4875": { - "offset": [2320, 2329], - "op": "DUP2", - "path": "28" - }, - "4876": { - "offset": [2320, 2358], - "op": "LT", - "path": "28" - }, - "4877": { - "offset": [2312, 2386], - "op": "PUSH2", - "path": "28", - "value": "0x1357" - }, - "4880": { - "offset": [2312, 2386], - "op": "JUMPI", - "path": "28" - }, - "4881": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "4883": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "DUP1", - "path": "28" - }, - "4884": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "MLOAD", - "path": "28" - }, - "4885": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "4889": { - "op": "PUSH1", - "value": "0xE5" - }, - "4891": { - "op": "SHL" - }, - "4892": { - "offset": [2312, 2386], - "op": "DUP2", - "path": "28" - }, - "4893": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "MSTORE", - "path": "28" - }, - "4894": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "4896": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "4898": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "DUP3", - "path": "28" - }, - "4899": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "ADD", - "path": "28" - }, - "4900": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "MSTORE", - "path": "28" - }, - "4901": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "PUSH1", - "path": "28", - "value": "0x17" - }, - "4903": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "PUSH1", - "path": "28", - "value": "0x24" - }, - "4905": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "DUP3", - "path": "28" - }, - "4906": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "ADD", - "path": "28" - }, - "4907": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "MSTORE", - "path": "28" - }, - "4908": { - "op": "PUSH23", - "value": "0x4C325F414444524553535F4F55545F4F465F52414E4745" - }, - "4932": { - "op": "PUSH1", - "value": "0x48" - }, - "4934": { - "op": "SHL" - }, - "4935": { - "offset": [2312, 2386], - "op": "PUSH1", - "path": "28", - "value": "0x44" - }, - "4937": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "DUP3", - "path": "28" - }, - "4938": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "ADD", - "path": "28" - }, - "4939": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "MSTORE", - "path": "28" - }, - "4940": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "SWAP1", - "path": "28" - }, - "4941": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "MLOAD", - "path": "28" - }, - "4942": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "SWAP1", - "path": "28" - }, - "4943": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "DUP2", - "path": "28" - }, - "4944": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "SWAP1", - "path": "28" - }, - "4945": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "SUB", - "path": "28" - }, - "4946": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "PUSH1", - "path": "28", - "value": "0x64" - }, - "4948": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "ADD", - "path": "28" - }, - "4949": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "SWAP1", - "path": "28" - }, - "4950": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "REVERT", - "path": "28" - }, - "4951": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [2312, 2386], - "op": "JUMPDEST", - "path": "28" - }, - "4952": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3464, 3476], - "op": "PUSH2", - "path": "28", - "statement": 58, - "value": "0x135F" - }, - "4955": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3464, 3474], - "op": "PUSH2", - "path": "28", - "value": "0x18E2" - }, - "4958": { - "fn": "StarknetTokenBridge.sendMessage", - "jump": "i", - "offset": [3464, 3476], - "op": "JUMP", - "path": "28" - }, - "4959": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3464, 3476], - "op": "JUMPDEST", - "path": "28" - }, - "4960": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3454, 3460], - "op": "DUP4", - "path": "28" - }, - "4961": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3454, 3476], - "op": "GT", - "path": "28" - }, - "4962": { - "branch": 98, - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3454, 3476], - "op": "ISZERO", - "path": "28" - }, - "4963": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "PUSH2", - "path": "28", - "value": "0x139D" - }, - "4966": { - "branch": 98, - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "JUMPI", - "path": "28" - }, - "4967": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "4969": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "MLOAD", - "path": "28" - }, - "4970": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "4974": { - "op": "PUSH1", - "value": "0xE5" - }, - "4976": { - "op": "SHL" - }, - "4977": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "DUP2", - "path": "28" - }, - "4978": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "MSTORE", - "path": "28" - }, - "4979": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "4981": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "ADD", - "path": "28" - }, - "4982": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "DUP1", - "path": "28" - }, - "4983": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "DUP1", - "path": "28" - }, - "4984": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "4986": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "ADD", - "path": "28" - }, - "4987": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "DUP3", - "path": "28" - }, - "4988": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "DUP2", - "path": "28" - }, - "4989": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "SUB", - "path": "28" - }, - "4990": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "DUP3", - "path": "28" - }, - "4991": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "MSTORE", - "path": "28" - }, - "4992": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "PUSH1", - "path": "28", - "value": "0x24" - }, - "4994": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "DUP2", - "path": "28" - }, - "4995": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "MSTORE", - "path": "28" - }, - "4996": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "4998": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "ADD", - "path": "28" - }, - "4999": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "DUP1", - "path": "28" - }, - "5000": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "PUSH2", - "path": "28", - "value": "0x19AA" - }, - "5003": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "PUSH1", - "path": "28", - "value": "0x24" - }, - "5005": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "SWAP2", - "path": "28" - }, - "5006": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "CODECOPY", - "path": "28" - }, - "5007": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "5009": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "ADD", - "path": "28" - }, - "5010": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "SWAP2", - "path": "28" - }, - "5011": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "POP", - "path": "28" - }, - "5012": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "POP", - "path": "28" - }, - "5013": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "5015": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "MLOAD", - "path": "28" - }, - "5016": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "DUP1", - "path": "28" - }, - "5017": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "SWAP2", - "path": "28" - }, - "5018": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "SUB", - "path": "28" - }, - "5019": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "SWAP1", - "path": "28" - }, - "5020": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "REVERT", - "path": "28" - }, - "5021": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3446, 3517], - "op": "JUMPDEST", - "path": "28" - }, - "5022": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "PUSH1", - "path": "28", - "statement": 59, - "value": "0x40" - }, - "5024": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "DUP1", - "path": "28" - }, - "5025": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "MLOAD", - "path": "28" - }, - "5026": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3543, 3553], - "op": "CALLER", - "path": "28" - }, - "5027": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "DUP2", - "path": "28" - }, - "5028": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "MSTORE", - "path": "28" - }, - "5029": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "5031": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "DUP2", - "path": "28" - }, - "5032": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "ADD", - "path": "28" - }, - "5033": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "DUP6", - "path": "28" - }, - "5034": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "SWAP1", - "path": "28" - }, - "5035": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "MSTORE", - "path": "28" - }, - "5036": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "DUP1", - "path": "28" - }, - "5037": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "DUP3", - "path": "28" - }, - "5038": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "ADD", - "path": "28" - }, - "5039": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "DUP5", - "path": "28" - }, - "5040": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "SWAP1", - "path": "28" - }, - "5041": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "MSTORE", - "path": "28" - }, - "5042": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "SWAP1", - "path": "28" - }, - "5043": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "MLOAD", - "path": "28" - }, - "5044": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "PUSH32", - "path": "28", - "value": "0x9DBB0E7DDA3E09710CE75B801ADDC87CF9D9C6C581641B3275FCA409AD086C62" - }, - "5077": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "SWAP2", - "path": "28" - }, - "5078": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "DUP2", - "path": "28" - }, - "5079": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "SWAP1", - "path": "28" - }, - "5080": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "SUB", - "path": "28" - }, - "5081": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "PUSH1", - "path": "28", - "value": "0x60" - }, - "5083": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "ADD", - "path": "28" - }, - "5084": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "SWAP1", - "path": "28" - }, - "5085": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3532, 3575], - "op": "LOG1", - "path": "28" - }, - "5086": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "5088": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "DUP1", - "path": "28" - }, - "5089": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "MLOAD", - "path": "28" - }, - "5090": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3627, 3628], - "op": "PUSH1", - "path": "28", - "value": "0x3" - }, - "5092": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "DUP1", - "path": "28" - }, - "5093": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "DUP3", - "path": "28" - }, - "5094": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "MSTORE", - "path": "28" - }, - "5095": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "PUSH1", - "path": "28", - "value": "0x80" - }, - "5097": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "DUP3", - "path": "28" - }, - "5098": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "ADD", - "path": "28" - }, - "5099": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "SWAP1", - "path": "28" - }, - "5100": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "SWAP3", - "path": "28" - }, - "5101": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "MSTORE", - "path": "28" - }, - "5102": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3586, 3610], - "op": "PUSH1", - "path": "28", - "value": "0x60" - }, - "5104": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3586, 3610], - "op": "SWAP2", - "path": "28" - }, - "5105": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "5107": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "DUP3", - "path": "28" - }, - "5108": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "ADD", - "path": "28" - }, - "5109": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3586, 3610], - "op": "DUP4", - "path": "28" - }, - "5110": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3586, 3610], - "op": "DUP1", - "path": "28" - }, - "5111": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "CALLDATASIZE", - "path": "28" - }, - "5112": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "DUP4", - "path": "28" - }, - "5113": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "CALLDATACOPY", - "path": "28" - }, - "5114": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "ADD", - "path": "28" - }, - "5115": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "SWAP1", - "path": "28" - }, - "5116": { - "op": "POP" - }, - "5117": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3613, 3629], - "op": "POP", - "path": "28" - }, - "5118": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3586, 3629], - "op": "SWAP1", - "path": "28" - }, - "5119": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3586, 3629], - "op": "POP", - "path": "28" - }, - "5120": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3652, 3663], - "op": "DUP3", - "path": "28", - "statement": 60 - }, - "5121": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3646], - "op": "DUP2", - "path": "28" - }, - "5122": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3647, 3648], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "5124": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "DUP2", - "path": "28" - }, - "5125": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "MLOAD", - "path": "28" - }, - "5126": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "DUP2", - "path": "28" - }, - "5127": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "LT", - "path": "28" - }, - "5128": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "PUSH2", - "path": "28", - "value": "0x140D" - }, - "5131": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "JUMPI", - "path": "28" - }, - "5132": { - "dev": "Index out of range", - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "INVALID", - "path": "28" - }, - "5133": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "JUMPDEST", - "path": "28" - }, - "5134": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "5136": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "SWAP1", - "path": "28" - }, - "5137": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "DUP2", - "path": "28" - }, - "5138": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "MUL", - "path": "28" - }, - "5139": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "SWAP2", - "path": "28" - }, - "5140": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "SWAP1", - "path": "28" - }, - "5141": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "SWAP2", - "path": "28" - }, - "5142": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "ADD", - "path": "28" - }, - "5143": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3649], - "op": "ADD", - "path": "28" - }, - "5144": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3639, 3663], - "op": "MSTORE", - "path": "28" - }, - "5145": { - "op": "PUSH1", - "value": "0x1" - }, - "5147": { - "op": "PUSH1", - "value": "0x80" - }, - "5149": { - "op": "SHL" - }, - "5150": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3686, 3692], - "op": "DUP5", - "path": "28", - "statement": 61 - }, - "5151": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3686, 3712], - "op": "MOD", - "path": "28" - }, - "5152": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3680], - "op": "DUP2", - "path": "28" - }, - "5153": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3681, 3682], - "op": "PUSH1", - "path": "28", - "value": "0x1" - }, - "5155": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "DUP2", - "path": "28" - }, - "5156": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "MLOAD", - "path": "28" - }, - "5157": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "DUP2", - "path": "28" - }, - "5158": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "LT", - "path": "28" - }, - "5159": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "PUSH2", - "path": "28", - "value": "0x142C" - }, - "5162": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "JUMPI", - "path": "28" - }, - "5163": { - "dev": "Index out of range", - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "INVALID", - "path": "28" - }, - "5164": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "JUMPDEST", - "path": "28" - }, - "5165": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "5167": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "SWAP1", - "path": "28" - }, - "5168": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "DUP2", - "path": "28" - }, - "5169": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "MUL", - "path": "28" - }, - "5170": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "SWAP2", - "path": "28" - }, - "5171": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "SWAP1", - "path": "28" - }, - "5172": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "SWAP2", - "path": "28" - }, - "5173": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "ADD", - "path": "28" - }, - "5174": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3683], - "op": "ADD", - "path": "28" - }, - "5175": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3673, 3712], - "op": "MSTORE", - "path": "28" - }, - "5176": { - "op": "PUSH1", - "value": "0x1" - }, - "5178": { - "op": "PUSH1", - "value": "0x80" - }, - "5180": { - "op": "SHL" - }, - "5181": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3735, 3741], - "op": "DUP5", - "path": "28", - "statement": 62 - }, - "5182": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3735, 3761], - "op": "DIV", - "path": "28" - }, - "5183": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3729], - "op": "DUP2", - "path": "28" - }, - "5184": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3730, 3731], - "op": "PUSH1", - "path": "28", - "value": "0x2" - }, - "5186": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3732], - "op": "DUP2", - "path": "28" - }, - "5187": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3732], - "op": "MLOAD", - "path": "28" - }, - "5188": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3732], - "op": "DUP2", - "path": "28" - }, - "5189": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3732], - "op": "LT", - "path": "28" - }, - "5190": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3732], - "op": "PUSH2", - "path": "28", - "value": "0x144B" - }, - "5193": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3732], - "op": "JUMPI", - "path": "28" - }, - "5194": { - "dev": "Index out of range", - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3732], - "op": "INVALID", - "path": "28" - }, - "5195": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3732], - "op": "JUMPDEST", - "path": "28" - }, - "5196": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3732], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "5198": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3732], - "op": "MUL", - "path": "28" - }, - "5199": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3732], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "5201": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3732], - "op": "ADD", - "path": "28" - }, - "5202": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3732], - "op": "ADD", - "path": "28" - }, - "5203": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3761], - "op": "DUP2", - "path": "28" - }, - "5204": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3761], - "op": "DUP2", - "path": "28" - }, - "5205": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3761], - "op": "MSTORE", - "path": "28" - }, - "5206": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3761], - "op": "POP", - "path": "28" - }, - "5207": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3722, 3761], - "op": "POP", - "path": "28" - }, - "5208": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3790], - "op": "PUSH2", - "path": "28", - "statement": 63, - "value": "0x145F" - }, - "5211": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3788], - "op": "PUSH2", - "path": "28", - "value": "0x15FC" - }, - "5214": { - "fn": "StarknetTokenBridge.sendMessage", - "jump": "i", - "offset": [3771, 3790], - "op": "JUMP", - "path": "28" - }, - "5215": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3790], - "op": "JUMPDEST", - "path": "28" - }, - "5216": { - "op": "PUSH1", - "value": "0x1" - }, - "5218": { - "op": "PUSH1", - "value": "0x1" - }, - "5220": { - "op": "PUSH1", - "value": "0xA0" - }, - "5222": { - "op": "SHL" - }, - "5223": { - "op": "SUB" - }, - "5224": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3806], - "op": "AND", - "path": "28" - }, - "5225": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3806], - "op": "PUSH4", - "path": "28", - "value": "0x3E3AA6C5" - }, - "5230": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3807, 3824], - "op": "PUSH2", - "path": "28", - "value": "0x1475" - }, - "5233": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3807, 3822], - "op": "PUSH2", - "path": "28", - "value": "0x11E8" - }, - "5236": { - "fn": "StarknetTokenBridge.sendMessage", - "jump": "i", - "offset": [3807, 3824], - "op": "JUMP", - "path": "28" - }, - "5237": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3807, 3824], - "op": "JUMPDEST", - "path": "28" - }, - "5238": { - "offset": [2016, 2092], - "op": "PUSH32", - "path": "28", - "value": "0x2D757788A8D8D6F21D1CD40BCE38A8222D70654214E96FF95D8086E684FBEE5" - }, - "5271": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3836, 3843], - "op": "DUP5", - "path": "28" - }, - "5272": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "5274": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "MLOAD", - "path": "28" - }, - "5275": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP5", - "path": "28" - }, - "5276": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH4", - "path": "28", - "value": "0xFFFFFFFF" - }, - "5281": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "AND", - "path": "28" - }, - "5282": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0xE0" - }, - "5284": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "SHL", - "path": "28" - }, - "5285": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP2", - "path": "28" - }, - "5286": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "MSTORE", - "path": "28" - }, - "5287": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x4" - }, - "5289": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ADD", - "path": "28" - }, - "5290": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP1", - "path": "28" - }, - "5291": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP5", - "path": "28" - }, - "5292": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP2", - "path": "28" - }, - "5293": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "MSTORE", - "path": "28" - }, - "5294": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "5296": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ADD", - "path": "28" - }, - "5297": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP4", - "path": "28" - }, - "5298": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP2", - "path": "28" - }, - "5299": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "MSTORE", - "path": "28" - }, - "5300": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "5302": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ADD", - "path": "28" - }, - "5303": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP1", - "path": "28" - }, - "5304": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "5306": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ADD", - "path": "28" - }, - "5307": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP3", - "path": "28" - }, - "5308": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP2", - "path": "28" - }, - "5309": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "SUB", - "path": "28" - }, - "5310": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP3", - "path": "28" - }, - "5311": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "MSTORE", - "path": "28" - }, - "5312": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP4", - "path": "28" - }, - "5313": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP2", - "path": "28" - }, - "5314": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP2", - "path": "28" - }, - "5315": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "MLOAD", - "path": "28" - }, - "5316": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP2", - "path": "28" - }, - "5317": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "MSTORE", - "path": "28" - }, - "5318": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "5320": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ADD", - "path": "28" - }, - "5321": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "SWAP2", - "path": "28" - }, - "5322": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "5323": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP1", - "path": "28" - }, - "5324": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "MLOAD", - "path": "28" - }, - "5325": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "SWAP1", - "path": "28" - }, - "5326": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "5328": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ADD", - "path": "28" - }, - "5329": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "SWAP1", - "path": "28" - }, - "5330": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "5332": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "MUL", - "path": "28" - }, - "5333": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP1", - "path": "28" - }, - "5334": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP4", - "path": "28" - }, - "5335": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP4", - "path": "28" - }, - "5336": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "5338": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "JUMPDEST", - "path": "28" - }, - "5339": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP4", - "path": "28" - }, - "5340": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP2", - "path": "28" - }, - "5341": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "LT", - "path": "28" - }, - "5342": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ISZERO", - "path": "28" - }, - "5343": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH2", - "path": "28", - "value": "0x14F2" - }, - "5346": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "JUMPI", - "path": "28" - }, - "5347": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP2", - "path": "28" - }, - "5348": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP2", - "path": "28" - }, - "5349": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ADD", - "path": "28" - }, - "5350": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "MLOAD", - "path": "28" - }, - "5351": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP4", - "path": "28" - }, - "5352": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP3", - "path": "28" - }, - "5353": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ADD", - "path": "28" - }, - "5354": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "MSTORE", - "path": "28" - }, - "5355": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "5357": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ADD", - "path": "28" - }, - "5358": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH2", - "path": "28", - "value": "0x14DA" - }, - "5361": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "JUMP", - "path": "28" - }, - "5362": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "JUMPDEST", - "path": "28" - }, - "5363": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "5364": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "5365": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "5366": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "5367": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "SWAP1", - "path": "28" - }, - "5368": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "5369": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ADD", - "path": "28" - }, - "5370": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "SWAP5", - "path": "28" - }, - "5371": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "5372": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "5373": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "5374": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "5375": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "5376": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "5378": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "5380": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "MLOAD", - "path": "28" - }, - "5381": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP1", - "path": "28" - }, - "5382": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP4", - "path": "28" - }, - "5383": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "SUB", - "path": "28" - }, - "5384": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP2", - "path": "28" - }, - "5385": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "5387": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP8", - "path": "28" - }, - "5388": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP1", - "path": "28" - }, - "5389": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "EXTCODESIZE", - "path": "28" - }, - "5390": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ISZERO", - "path": "28" - }, - "5391": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP1", - "path": "28" - }, - "5392": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ISZERO", - "path": "28" - }, - "5393": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH2", - "path": "28", - "value": "0x1519" - }, - "5396": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "JUMPI", - "path": "28" - }, - "5397": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "5399": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP1", - "path": "28" - }, - "5400": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "REVERT", - "path": "28" - }, - "5401": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "JUMPDEST", - "path": "28" - }, - "5402": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "5403": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "GAS", - "path": "28" - }, - "5404": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "CALL", - "path": "28" - }, - "5405": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ISZERO", - "path": "28" - }, - "5406": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP1", - "path": "28" - }, - "5407": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ISZERO", - "path": "28" - }, - "5408": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH2", - "path": "28", - "value": "0x152D" - }, - "5411": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "JUMPI", - "path": "28" - }, - "5412": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "RETURNDATASIZE", - "path": "28" - }, - "5413": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "5415": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP1", - "path": "28" - }, - "5416": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "RETURNDATACOPY", - "path": "28" - }, - "5417": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "RETURNDATASIZE", - "path": "28" - }, - "5418": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "5420": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "REVERT", - "path": "28" - }, - "5421": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "JUMPDEST", - "path": "28" - }, - "5422": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "5423": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "5424": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "5425": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "POP", - "path": "28" - }, - "5426": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x40" - }, - "5428": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "MLOAD", - "path": "28" - }, - "5429": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "RETURNDATASIZE", - "path": "28" - }, - "5430": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x20" - }, - "5432": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP2", - "path": "28" - }, - "5433": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "LT", - "path": "28" - }, - "5434": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "ISZERO", - "path": "28" - }, - "5435": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH2", - "path": "28", - "value": "0xD7E" - }, - "5438": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "JUMPI", - "path": "28" - }, - "5439": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "PUSH1", - "path": "28", - "value": "0x0" - }, - "5441": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "DUP1", - "path": "28" - }, - "5442": { - "fn": "StarknetTokenBridge.sendMessage", - "offset": [3771, 3844], - "op": "REVERT", - "path": "28" - }, - "5443": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1742, 1852], - "op": "JUMPDEST", - "path": "29" - }, - "5444": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1796, 1845], - "op": "PUSH2", - "path": "29", - "statement": 64, - "value": "0x3BA" - }, - "5447": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "5449": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "MLOAD", - "path": "29" - }, - "5450": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "DUP1", - "path": "29" - }, - "5451": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "PUSH1", - "path": "29", - "value": "0x60" - }, - "5453": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "ADD", - "path": "29" - }, - "5454": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "5456": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "MSTORE", - "path": "29" - }, - "5457": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "DUP1", - "path": "29" - }, - "5458": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "PUSH1", - "path": "29", - "value": "0x21" - }, - "5460": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "DUP2", - "path": "29" - }, - "5461": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "MSTORE", - "path": "29" - }, - "5462": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "PUSH1", - "path": "29", - "value": "0x20" - }, - "5464": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "ADD", - "path": "29" - }, - "5465": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "PUSH2", - "path": "29", - "value": "0x1A1C" - }, - "5468": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "PUSH1", - "path": "29", - "value": "0x21" - }, - "5470": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "SWAP2", - "path": "29" - }, - "5471": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1822, 1837], - "op": "CODECOPY", - "path": "29" - }, - "5472": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1839, 1844], - "op": "DUP3", - "path": "29" - }, - "5473": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1796, 1821], - "op": "PUSH2", - "path": "29", - "value": "0x1798" - }, - "5476": { - "fn": "StarknetTokenStorage.maxDeposit", - "jump": "i", - "offset": [1796, 1845], - "op": "JUMP", - "path": "29" - }, - "5477": { - "fn": "Governance.cancelNomination", - "offset": [2118, 2326], - "op": "JUMPDEST", - "path": "1" - }, - "5478": { - "offset": [434, 456], - "op": "PUSH2", - "path": "8", - "value": "0x156E" - }, - "5481": { - "offset": [445, 455], - "op": "CALLER", - "path": "8" - }, - "5482": { - "offset": [434, 444], - "op": "PUSH2", - "path": "8", - "value": "0xB00" - }, - "5485": { - "jump": "i", - "offset": [434, 456], - "op": "JUMP", - "path": "8" - }, - "5486": { - "branch": 87, - "fn": "Governance.cancelNomination", - "offset": [434, 456], - "op": "JUMPDEST", - "path": "8" - }, - "5487": { - "offset": [426, 476], - "op": "PUSH2", - "path": "8", - "value": "0x15B1" - }, - "5490": { - "branch": 87, - "offset": [426, 476], - "op": "JUMPI", - "path": "8" - }, - "5491": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x40" - }, - "5493": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "DUP1", - "path": "8" - }, - "5494": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "MLOAD", - "path": "8" - }, - "5495": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "5499": { - "op": "PUSH1", - "value": "0xE5" - }, - "5501": { - "op": "SHL" - }, - "5502": { - "offset": [426, 476], - "op": "DUP2", - "path": "8" - }, - "5503": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "5504": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x20" - }, - "5506": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x4" - }, - "5508": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "5509": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "5510": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "5511": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0xF" - }, - "5513": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x24" - }, - "5515": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "5516": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "5517": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "5518": { - "op": "PUSH15", - "value": "0x4F4E4C595F474F5645524E414E4345" - }, - "5534": { - "op": "PUSH1", - "value": "0x88" - }, - "5536": { - "op": "SHL" - }, - "5537": { - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x44" - }, - "5539": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "DUP3", - "path": "8" - }, - "5540": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "5541": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "MSTORE", - "path": "8" - }, - "5542": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "5543": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "MLOAD", - "path": "8" - }, - "5544": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "5545": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "DUP2", - "path": "8" - }, - "5546": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "5547": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "SUB", - "path": "8" - }, - "5548": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "PUSH1", - "path": "8", - "value": "0x64" - }, - "5550": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "ADD", - "path": "8" - }, - "5551": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "SWAP1", - "path": "8" - }, - "5552": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "REVERT", - "path": "8" - }, - "5553": { - "fn": "Governance.cancelNomination", - "offset": [426, 476], - "op": "JUMPDEST", - "path": "8" - }, - "5554": { - "fn": "Governance.cancelNomination", - "offset": [2180, 2212], - "op": "PUSH1", - "path": "1", - "value": "0x0" - }, - "5556": { - "fn": "Governance.cancelNomination", - "offset": [2215, 2234], - "op": "PUSH2", - "path": "1", - "value": "0x15BB" - }, - "5559": { - "fn": "Governance.cancelNomination", - "offset": [2215, 2232], - "op": "PUSH2", - "path": "1", - "value": "0x161F" - }, - "5562": { - "fn": "Governance.cancelNomination", - "jump": "i", - "offset": [2215, 2234], - "op": "JUMP", - "path": "1" - }, - "5563": { - "fn": "Governance.cancelNomination", - "offset": [2215, 2234], - "op": "JUMPDEST", - "path": "1" - }, - "5564": { - "fn": "Governance.cancelNomination", - "offset": [2244, 2265], - "op": "PUSH1", - "path": "1", - "statement": 65, - "value": "0x1" - }, - "5566": { - "fn": "Governance.cancelNomination", - "offset": [2244, 2265], - "op": "DUP2", - "path": "1" - }, - "5567": { - "fn": "Governance.cancelNomination", - "offset": [2244, 2265], - "op": "ADD", - "path": "1" - }, - "5568": { - "fn": "Governance.cancelNomination", - "offset": [2244, 2280], - "op": "DUP1", - "path": "1" - }, - "5569": { - "fn": "Governance.cancelNomination", - "offset": [2244, 2280], - "op": "SLOAD", - "path": "1" - }, - "5570": { - "op": "PUSH1", - "value": "0x1" - }, - "5572": { - "op": "PUSH1", - "value": "0x1" - }, - "5574": { - "op": "PUSH1", - "value": "0xA0" - }, - "5576": { - "op": "SHL" - }, - "5577": { - "op": "SUB" - }, - "5578": { - "op": "NOT" - }, - "5579": { - "fn": "Governance.cancelNomination", - "offset": [2244, 2280], - "op": "AND", - "path": "1" - }, - "5580": { - "fn": "Governance.cancelNomination", - "offset": [2244, 2280], - "op": "SWAP1", - "path": "1" - }, - "5581": { - "fn": "Governance.cancelNomination", - "offset": [2244, 2280], - "op": "SSTORE", - "path": "1" - }, - "5582": { - "fn": "Governance.cancelNomination", - "offset": [2295, 2319], - "op": "PUSH1", - "path": "1", - "statement": 66, - "value": "0x40" - }, - "5584": { - "fn": "Governance.cancelNomination", - "offset": [2295, 2319], - "op": "MLOAD", - "path": "1" - }, - "5585": { - "fn": "Governance.cancelNomination", - "offset": [2180, 2234], - "op": "SWAP1", - "path": "1" - }, - "5586": { - "fn": "Governance.cancelNomination", - "offset": [2180, 2234], - "op": "SWAP2", - "path": "1" - }, - "5587": { - "op": "POP" - }, - "5588": { - "fn": "Governance.cancelNomination", - "offset": [2295, 2319], - "op": "PUSH32", - "path": "1", - "value": "0x7A8DC7DD7FFFB43C4807438FA62729225156941E641FD877938F4EDADE3429F5" - }, - "5621": { - "fn": "Governance.cancelNomination", - "offset": [2295, 2319], - "op": "SWAP1", - "path": "1" - }, - "5622": { - "fn": "Governance.cancelNomination", - "offset": [2276, 2279], - "op": "PUSH1", - "path": "1", - "value": "0x0" - }, - "5624": { - "fn": "Governance.cancelNomination", - "offset": [2276, 2279], - "op": "SWAP1", - "path": "1" - }, - "5625": { - "fn": "Governance.cancelNomination", - "offset": [2295, 2319], - "op": "LOG1", - "path": "1" - }, - "5626": { - "offset": [486, 487], - "op": "POP", - "path": "8" - }, - "5627": { - "fn": "Governance.cancelNomination", - "jump": "o", - "offset": [2118, 2326], - "op": "JUMP", - "path": "1" - }, - "5628": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1287, 1455], - "op": "JUMPDEST", - "path": "29" - }, - "5629": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1339, 1357], - "op": "PUSH1", - "path": "29", - "value": "0x0" - }, - "5631": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1395, 1447], - "op": "PUSH2", - "path": "29", - "statement": 67, - "value": "0x120B" - }, - "5634": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "5636": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "MLOAD", - "path": "29" - }, - "5637": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "DUP1", - "path": "29" - }, - "5638": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "PUSH1", - "path": "29", - "value": "0x60" - }, - "5640": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "ADD", - "path": "29" - }, - "5641": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "5643": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "MSTORE", - "path": "29" - }, - "5644": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "DUP1", - "path": "29" - }, - "5645": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "PUSH1", - "path": "29", - "value": "0x28" - }, - "5647": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "DUP2", - "path": "29" - }, - "5648": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "MSTORE", - "path": "29" - }, - "5649": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "PUSH1", - "path": "29", - "value": "0x20" - }, - "5651": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "ADD", - "path": "29" - }, - "5652": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "PUSH2", - "path": "29", - "value": "0x1982" - }, - "5655": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "PUSH1", - "path": "29", - "value": "0x28" - }, - "5657": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "SWAP2", - "path": "29" - }, - "5658": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1424, 1446], - "op": "CODECOPY", - "path": "29" - }, - "5659": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1395, 1423], - "op": "PUSH2", - "path": "29", - "value": "0x1812" - }, - "5662": { - "fn": "StarknetTokenStorage.messagingContract", - "jump": "i", - "offset": [1395, 1447], - "op": "JUMP", - "path": "29" - }, - "5663": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [361, 611], - "op": "JUMPDEST", - "path": "34" - }, - "5664": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [422, 454], - "op": "PUSH1", - "path": "34", - "value": "0x0" - }, - "5666": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [466, 482], - "op": "DUP1", - "path": "34" - }, - "5667": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "PUSH1", - "path": "34", - "value": "0x40" - }, - "5669": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "MLOAD", - "path": "34" - }, - "5670": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "DUP1", - "path": "34" - }, - "5671": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "PUSH1", - "path": "34", - "value": "0x40" - }, - "5673": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "ADD", - "path": "34" - }, - "5674": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "PUSH1", - "path": "34", - "value": "0x40" - }, - "5676": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "MSTORE", - "path": "34" - }, - "5677": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "DUP1", - "path": "34" - }, - "5678": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "PUSH1", - "path": "34", - "value": "0x1C" - }, - "5680": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "DUP2", - "path": "34" - }, - "5681": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "MSTORE", - "path": "34" - }, - "5682": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "PUSH1", - "path": "34", - "value": "0x20" - }, - "5684": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "ADD", - "path": "34" - }, - "5685": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "PUSH32", - "path": "34", - "value": "0x535441524B4E45545F312E305F474F5645524E414E43455F494E464F00000000" - }, - "5718": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "DUP2", - "path": "34" - }, - "5719": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "MSTORE", - "path": "34" - }, - "5720": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [512, 540], - "op": "POP", - "path": "34" - }, - "5721": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "PUSH1", - "path": "34", - "value": "0x40" - }, - "5723": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "MLOAD", - "path": "34" - }, - "5724": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "PUSH1", - "path": "34", - "value": "0x20" - }, - "5726": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "ADD", - "path": "34" - }, - "5727": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP1", - "path": "34" - }, - "5728": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP3", - "path": "34" - }, - "5729": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP1", - "path": "34" - }, - "5730": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "MLOAD", - "path": "34" - }, - "5731": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "SWAP1", - "path": "34" - }, - "5732": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "PUSH1", - "path": "34", - "value": "0x20" - }, - "5734": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "ADD", - "path": "34" - }, - "5735": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "SWAP1", - "path": "34" - }, - "5736": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP1", - "path": "34" - }, - "5737": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP4", - "path": "34" - }, - "5738": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP4", - "path": "34" - }, - "5739": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "JUMPDEST", - "path": "34" - }, - "5740": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "PUSH1", - "path": "34", - "value": "0x20" - }, - "5742": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP4", - "path": "34" - }, - "5743": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "LT", - "path": "34" - }, - "5744": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "PUSH2", - "path": "34", - "value": "0x168A" - }, - "5747": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "JUMPI", - "path": "34" - }, - "5748": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP1", - "path": "34" - }, - "5749": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "MLOAD", - "path": "34" - }, - "5750": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP3", - "path": "34" - }, - "5751": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "MSTORE", - "path": "34" - }, - "5752": { - "op": "PUSH1", - "value": "0x1F" - }, - "5754": { - "op": "NOT" - }, - "5755": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "SWAP1", - "path": "34" - }, - "5756": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "SWAP3", - "path": "34" - }, - "5757": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "ADD", - "path": "34" - }, - "5758": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "SWAP2", - "path": "34" - }, - "5759": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "PUSH1", - "path": "34", - "value": "0x20" - }, - "5761": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "SWAP2", - "path": "34" - }, - "5762": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP3", - "path": "34" - }, - "5763": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "ADD", - "path": "34" - }, - "5764": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "SWAP2", - "path": "34" - }, - "5765": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "ADD", - "path": "34" - }, - "5766": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "PUSH2", - "path": "34", - "value": "0x166B" - }, - "5769": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "JUMP", - "path": "34" - }, - "5770": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "JUMPDEST", - "path": "34" - }, - "5771": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "PUSH1", - "path": "34", - "value": "0x1" - }, - "5773": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP4", - "path": "34" - }, - "5774": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "PUSH1", - "path": "34", - "value": "0x20" - }, - "5776": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "SUB", - "path": "34" - }, - "5777": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "PUSH2", - "path": "34", - "value": "0x100" - }, - "5780": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "EXP", - "path": "34" - }, - "5781": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "SUB", - "path": "34" - }, - "5782": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP1", - "path": "34" - }, - "5783": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "NOT", - "path": "34" - }, - "5784": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP3", - "path": "34" - }, - "5785": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "MLOAD", - "path": "34" - }, - "5786": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "AND", - "path": "34" - }, - "5787": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP2", - "path": "34" - }, - "5788": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP5", - "path": "34" - }, - "5789": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "MLOAD", - "path": "34" - }, - "5790": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "AND", - "path": "34" - }, - "5791": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP1", - "path": "34" - }, - "5792": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP3", - "path": "34" - }, - "5793": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "OR", - "path": "34" - }, - "5794": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP6", - "path": "34" - }, - "5795": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "MSTORE", - "path": "34" - }, - "5796": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "POP", - "path": "34" - }, - "5797": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "POP", - "path": "34" - }, - "5798": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "POP", - "path": "34" - }, - "5799": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "POP", - "path": "34" - }, - "5800": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "POP", - "path": "34" - }, - "5801": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "POP", - "path": "34" - }, - "5802": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "SWAP1", - "path": "34" - }, - "5803": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "POP", - "path": "34" - }, - "5804": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "ADD", - "path": "34" - }, - "5805": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "SWAP2", - "path": "34" - }, - "5806": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "POP", - "path": "34" - }, - "5807": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "POP", - "path": "34" - }, - "5808": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "PUSH1", - "path": "34", - "value": "0x40" - }, - "5810": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "MLOAD", - "path": "34" - }, - "5811": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "PUSH1", - "path": "34", - "value": "0x20" - }, - "5813": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP2", - "path": "34" - }, - "5814": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP4", - "path": "34" - }, - "5815": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "SUB", - "path": "34" - }, - "5816": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "SUB", - "path": "34" - }, - "5817": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "DUP2", - "path": "34" - }, - "5818": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "MSTORE", - "path": "34" - }, - "5819": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "SWAP1", - "path": "34" - }, - "5820": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "PUSH1", - "path": "34", - "value": "0x40" - }, - "5822": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [495, 541], - "op": "MSTORE", - "path": "34" - }, - "5823": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [485, 542], - "op": "DUP1", - "path": "34" - }, - "5824": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [485, 542], - "op": "MLOAD", - "path": "34" - }, - "5825": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [485, 542], - "op": "SWAP1", - "path": "34" - }, - "5826": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [485, 542], - "op": "PUSH1", - "path": "34", - "value": "0x20" - }, - "5828": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [485, 542], - "op": "ADD", - "path": "34" - }, - "5829": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [485, 542], - "op": "KECCAK256", - "path": "34" - }, - "5830": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [466, 542], - "op": "SWAP1", - "path": "34" - }, - "5831": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [466, 542], - "op": "POP", - "path": "34" - }, - "5832": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [587, 595], - "op": "DUP1", - "path": "34" - }, - "5833": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [575, 595], - "op": "SWAP2", - "path": "34" - }, - "5834": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [575, 595], - "op": "POP", - "path": "34" - }, - "5835": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [561, 605], - "op": "POP", - "path": "34" - }, - "5836": { - "fn": "StarknetGovernance.getGovernanceInfo", - "offset": [561, 605], - "op": "SWAP1", - "path": "34" - }, - "5837": { - "fn": "StarknetGovernance.getGovernanceInfo", - "jump": "o", - "offset": [561, 605], - "op": "JUMP", - "path": "34" - }, - "5838": { - "fn": "Addresses.isContract", - "offset": [161, 351], - "op": "JUMPDEST", - "path": "11" - }, - "5839": { - "fn": "Addresses.isContract", - "offset": [290, 310], - "op": "EXTCODESIZE", - "path": "11" - }, - "5840": { - "fn": "Addresses.isContract", - "offset": [336, 344], - "op": "ISZERO", - "path": "11", - "statement": 68 - }, - "5841": { - "fn": "Addresses.isContract", - "offset": [336, 344], - "op": "ISZERO", - "path": "11" - }, - "5842": { - "fn": "Addresses.isContract", - "offset": [336, 344], - "op": "SWAP1", - "path": "11" - }, - "5843": { - "fn": "Addresses.isContract", - "jump": "o", - "offset": [161, 351], - "op": "JUMP", - "path": "11" - }, - "5844": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1485, 1614], - "op": "JUMPDEST", - "path": "29" - }, - "5845": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1545, 1607], - "op": "PUSH2", - "path": "29", - "statement": 69, - "value": "0x3BA" - }, - "5848": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "5850": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "MLOAD", - "path": "29" - }, - "5851": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "DUP1", - "path": "29" - }, - "5852": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "PUSH1", - "path": "29", - "value": "0x60" - }, - "5854": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "ADD", - "path": "29" - }, - "5855": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "5857": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "MSTORE", - "path": "29" - }, - "5858": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "DUP1", - "path": "29" - }, - "5859": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "PUSH1", - "path": "29", - "value": "0x29" - }, - "5861": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "DUP2", - "path": "29" - }, - "5862": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "MSTORE", - "path": "29" - }, - "5863": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "PUSH1", - "path": "29", - "value": "0x20" - }, - "5865": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "ADD", - "path": "29" - }, - "5866": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "PUSH2", - "path": "29", - "value": "0x1A3D" - }, - "5869": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "PUSH1", - "path": "29", - "value": "0x29" - }, - "5871": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "SWAP2", - "path": "29" - }, - "5872": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1578, 1595], - "op": "CODECOPY", - "path": "29" - }, - "5873": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1597, 1606], - "op": "DUP3", - "path": "29" - }, - "5874": { - "fn": "StarknetTokenStorage.bridgedToken", - "offset": [1545, 1577], - "op": "PUSH2", - "path": "29", - "value": "0x1905" - }, - "5877": { - "fn": "StarknetTokenStorage.bridgedToken", - "jump": "i", - "offset": [1545, 1607], - "op": "JUMP", - "path": "29" - }, - "5878": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [1985, 2144], - "op": "JUMPDEST", - "path": "29" - }, - "5879": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2061, 2137], - "op": "PUSH2", - "path": "29", - "statement": 70, - "value": "0x3BA" - }, - "5882": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "5884": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "MLOAD", - "path": "29" - }, - "5885": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "DUP1", - "path": "29" - }, - "5886": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "PUSH1", - "path": "29", - "value": "0x60" - }, - "5888": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "ADD", - "path": "29" - }, - "5889": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "5891": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "MSTORE", - "path": "29" - }, - "5892": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "DUP1", - "path": "29" - }, - "5893": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "PUSH1", - "path": "29", - "value": "0x28" - }, - "5895": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "DUP2", - "path": "29" - }, - "5896": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "MSTORE", - "path": "29" - }, - "5897": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "PUSH1", - "path": "29", - "value": "0x20" - }, - "5899": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "ADD", - "path": "29" - }, - "5900": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "PUSH2", - "path": "29", - "value": "0x1982" - }, - "5903": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "PUSH1", - "path": "29", - "value": "0x28" - }, - "5905": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "SWAP2", - "path": "29" - }, - "5906": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2094, 2116], - "op": "CODECOPY", - "path": "29" - }, - "5907": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2126, 2135], - "op": "DUP3", - "path": "29" - }, - "5908": { - "fn": "StarknetTokenStorage.messagingContract", - "offset": [2061, 2093], - "op": "PUSH2", - "path": "29", - "value": "0x1905" - }, - "5911": { - "fn": "StarknetTokenStorage.messagingContract", - "jump": "i", - "offset": [2061, 2137], - "op": "JUMP", - "path": "29" - }, - "5912": { - "fn": "Governance.addGovernor", - "offset": [2951, 3187], - "op": "JUMPDEST", - "path": "1" - }, - "5913": { - "fn": "Governance.addGovernor", - "offset": [3020, 3043], - "op": "PUSH2", - "path": "1", - "statement": 71, - "value": "0x1721" - }, - "5916": { - "fn": "Governance.addGovernor", - "offset": [3031, 3042], - "op": "DUP2", - "path": "1" - }, - "5917": { - "fn": "Governance.addGovernor", - "offset": [3020, 3030], - "op": "PUSH2", - "path": "1", - "value": "0xB00" - }, - "5920": { - "fn": "Governance.addGovernor", - "jump": "i", - "offset": [3020, 3043], - "op": "JUMP", - "path": "1" - }, - "5921": { - "fn": "Governance.addGovernor", - "offset": [3020, 3043], - "op": "JUMPDEST", - "path": "1" - }, - "5922": { - "branch": 86, - "fn": "Governance.addGovernor", - "offset": [3019, 3043], - "op": "ISZERO", - "path": "1" - }, - "5923": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "PUSH2", - "path": "1", - "value": "0x1766" - }, - "5926": { - "branch": 86, - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "JUMPI", - "path": "1" - }, - "5927": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "PUSH1", - "path": "1", - "value": "0x40" - }, - "5929": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "DUP1", - "path": "1" - }, - "5930": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "MLOAD", - "path": "1" - }, - "5931": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "5935": { - "op": "PUSH1", - "value": "0xE5" - }, - "5937": { - "op": "SHL" - }, - "5938": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "DUP2", - "path": "1" - }, - "5939": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "MSTORE", - "path": "1" - }, - "5940": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "5942": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "PUSH1", - "path": "1", - "value": "0x4" - }, - "5944": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "DUP3", - "path": "1" - }, - "5945": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "ADD", - "path": "1" - }, - "5946": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "MSTORE", - "path": "1" - }, - "5947": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "PUSH1", - "path": "1", - "value": "0x10" - }, - "5949": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "PUSH1", - "path": "1", - "value": "0x24" - }, - "5951": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "DUP3", - "path": "1" - }, - "5952": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "ADD", - "path": "1" - }, - "5953": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "MSTORE", - "path": "1" - }, - "5954": { - "op": "PUSH16", - "value": "0x20A62922A0A22CAFA3A7AB22A92727A9" - }, - "5971": { - "op": "PUSH1", - "value": "0x81" - }, - "5973": { - "op": "SHL" - }, - "5974": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "PUSH1", - "path": "1", - "value": "0x44" - }, - "5976": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "DUP3", - "path": "1" - }, - "5977": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "ADD", - "path": "1" - }, - "5978": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "MSTORE", - "path": "1" - }, - "5979": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "SWAP1", - "path": "1" - }, - "5980": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "MLOAD", - "path": "1" - }, - "5981": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "SWAP1", - "path": "1" - }, - "5982": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "DUP2", - "path": "1" - }, - "5983": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "SWAP1", - "path": "1" - }, - "5984": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "SUB", - "path": "1" - }, - "5985": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "PUSH1", - "path": "1", - "value": "0x64" - }, - "5987": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "ADD", - "path": "1" - }, - "5988": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "SWAP1", - "path": "1" - }, - "5989": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "REVERT", - "path": "1" - }, - "5990": { - "fn": "Governance.addGovernor", - "offset": [3011, 3064], - "op": "JUMPDEST", - "path": "1" - }, - "5991": { - "fn": "Governance.addGovernor", - "offset": [3074, 3106], - "op": "PUSH1", - "path": "1", - "value": "0x0" - }, - "5993": { - "fn": "Governance.addGovernor", - "offset": [3109, 3128], - "op": "PUSH2", - "path": "1", - "value": "0x1770" - }, - "5996": { - "fn": "Governance.addGovernor", - "offset": [3109, 3126], - "op": "PUSH2", - "path": "1", - "value": "0x161F" - }, - "5999": { - "fn": "Governance.addGovernor", - "jump": "i", - "offset": [3109, 3128], - "op": "JUMP", - "path": "1" - }, - "6000": { - "fn": "Governance.addGovernor", - "offset": [3109, 3128], - "op": "JUMPDEST", - "path": "1" - }, - "6001": { - "op": "PUSH1", - "value": "0x1" - }, - "6003": { - "op": "PUSH1", - "value": "0x1" - }, - "6005": { - "op": "PUSH1", - "value": "0xA0" - }, - "6007": { - "op": "SHL" - }, - "6008": { - "op": "SUB" - }, - "6009": { - "fn": "Governance.addGovernor", - "offset": [3138, 3173], - "op": "SWAP1", - "path": "1", - "statement": 72 - }, - "6010": { - "fn": "Governance.addGovernor", - "offset": [3138, 3173], - "op": "SWAP3", - "path": "1" - }, - "6011": { - "fn": "Governance.addGovernor", - "offset": [3138, 3173], - "op": "AND", - "path": "1" - }, - "6012": { - "fn": "Governance.addGovernor", - "offset": [3138, 3160], - "op": "PUSH1", - "path": "1", - "value": "0x0" - }, - "6014": { - "fn": "Governance.addGovernor", - "offset": [3138, 3173], - "op": "SWAP1", - "path": "1" - }, - "6015": { - "fn": "Governance.addGovernor", - "offset": [3138, 3173], - "op": "DUP2", - "path": "1" - }, - "6016": { - "fn": "Governance.addGovernor", - "offset": [3138, 3173], - "op": "MSTORE", - "path": "1" - }, - "6017": { - "fn": "Governance.addGovernor", - "offset": [3138, 3173], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "6019": { - "fn": "Governance.addGovernor", - "offset": [3138, 3173], - "op": "SWAP3", - "path": "1" - }, - "6020": { - "fn": "Governance.addGovernor", - "offset": [3138, 3173], - "op": "SWAP1", - "path": "1" - }, - "6021": { - "fn": "Governance.addGovernor", - "offset": [3138, 3173], - "op": "SWAP3", - "path": "1" - }, - "6022": { - "fn": "Governance.addGovernor", - "offset": [3138, 3173], - "op": "MSTORE", - "path": "1" - }, - "6023": { - "op": "POP" - }, - "6024": { - "fn": "Governance.addGovernor", - "offset": [3138, 3173], - "op": "PUSH1", - "path": "1", - "value": "0x40" - }, - "6026": { - "fn": "Governance.addGovernor", - "offset": [3138, 3173], - "op": "SWAP1", - "path": "1" - }, - "6027": { - "fn": "Governance.addGovernor", - "offset": [3138, 3173], - "op": "KECCAK256", - "path": "1" - }, - "6028": { - "fn": "Governance.addGovernor", - "offset": [3138, 3180], - "op": "DUP1", - "path": "1" - }, - "6029": { - "fn": "Governance.addGovernor", - "offset": [3138, 3180], - "op": "SLOAD", - "path": "1" - }, - "6030": { - "op": "PUSH1", - "value": "0xFF" - }, - "6032": { - "op": "NOT" - }, - "6033": { - "fn": "Governance.addGovernor", - "offset": [3138, 3180], - "op": "AND", - "path": "1" - }, - "6034": { - "fn": "Governance.addGovernor", - "offset": [3176, 3180], - "op": "PUSH1", - "path": "1", - "value": "0x1" - }, - "6036": { - "fn": "Governance.addGovernor", - "offset": [3138, 3180], - "op": "OR", - "path": "1" - }, - "6037": { - "fn": "Governance.addGovernor", - "offset": [3138, 3180], - "op": "SWAP1", - "path": "1" - }, - "6038": { - "fn": "Governance.addGovernor", - "offset": [3138, 3180], - "op": "SSTORE", - "path": "1" - }, - "6039": { - "fn": "Governance.addGovernor", - "jump": "o", - "offset": [2951, 3187], - "op": "JUMP", - "path": "1" - }, - "6040": { - "fn": "NamedStorage.setUintValue", - "offset": [1379, 1571], - "op": "JUMPDEST", - "path": "0" - }, - "6041": { - "fn": "NamedStorage.setUintValue", - "offset": [1455, 1467], - "op": "PUSH1", - "path": "0", - "value": "0x0" - }, - "6043": { - "fn": "NamedStorage.setUintValue", - "offset": [1497, 1501], - "op": "DUP3", - "path": "0" - }, - "6044": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "PUSH1", - "path": "0", - "value": "0x40" - }, - "6046": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "MLOAD", - "path": "0" - }, - "6047": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "6049": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "ADD", - "path": "0" - }, - "6050": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP1", - "path": "0" - }, - "6051": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP3", - "path": "0" - }, - "6052": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP1", - "path": "0" - }, - "6053": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "MLOAD", - "path": "0" - }, - "6054": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "SWAP1", - "path": "0" - }, - "6055": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "6057": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "ADD", - "path": "0" - }, - "6058": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "SWAP1", - "path": "0" - }, - "6059": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP1", - "path": "0" - }, - "6060": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP4", - "path": "0" - }, - "6061": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP4", - "path": "0" - }, - "6062": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "JUMPDEST", - "path": "0" - }, - "6063": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "6065": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP4", - "path": "0" - }, - "6066": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "LT", - "path": "0" - }, - "6067": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "PUSH2", - "path": "0", - "value": "0x17CD" - }, - "6070": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "JUMPI", - "path": "0" - }, - "6071": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP1", - "path": "0" - }, - "6072": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "MLOAD", - "path": "0" - }, - "6073": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP3", - "path": "0" - }, - "6074": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "MSTORE", - "path": "0" - }, - "6075": { - "op": "PUSH1", - "value": "0x1F" - }, - "6077": { - "op": "NOT" - }, - "6078": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "SWAP1", - "path": "0" - }, - "6079": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "SWAP3", - "path": "0" - }, - "6080": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "ADD", - "path": "0" - }, - "6081": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "SWAP2", - "path": "0" - }, - "6082": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "6084": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "SWAP2", - "path": "0" - }, - "6085": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP3", - "path": "0" - }, - "6086": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "ADD", - "path": "0" - }, - "6087": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "SWAP2", - "path": "0" - }, - "6088": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "ADD", - "path": "0" - }, - "6089": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "PUSH2", - "path": "0", - "value": "0x17AE" - }, - "6092": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "JUMP", - "path": "0" - }, - "6093": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "JUMPDEST", - "path": "0" - }, - "6094": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "PUSH1", - "path": "0", - "value": "0x1" - }, - "6096": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP4", - "path": "0" - }, - "6097": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "6099": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "SUB", - "path": "0" - }, - "6100": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "PUSH2", - "path": "0", - "value": "0x100" - }, - "6103": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "EXP", - "path": "0" - }, - "6104": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "SUB", - "path": "0" - }, - "6105": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP1", - "path": "0" - }, - "6106": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "NOT", - "path": "0" - }, - "6107": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP3", - "path": "0" - }, - "6108": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "MLOAD", - "path": "0" - }, - "6109": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "AND", - "path": "0" - }, - "6110": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP2", - "path": "0" - }, - "6111": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP5", - "path": "0" - }, - "6112": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "MLOAD", - "path": "0" - }, - "6113": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "AND", - "path": "0" - }, - "6114": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP1", - "path": "0" - }, - "6115": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP3", - "path": "0" - }, - "6116": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "OR", - "path": "0" - }, - "6117": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP6", - "path": "0" - }, - "6118": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "MSTORE", - "path": "0" - }, - "6119": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "POP", - "path": "0" - }, - "6120": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "POP", - "path": "0" - }, - "6121": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "POP", - "path": "0" - }, - "6122": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "POP", - "path": "0" - }, - "6123": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "POP", - "path": "0" - }, - "6124": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "POP", - "path": "0" - }, - "6125": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "SWAP1", - "path": "0" - }, - "6126": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "POP", - "path": "0" - }, - "6127": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "ADD", - "path": "0" - }, - "6128": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "SWAP2", - "path": "0" - }, - "6129": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "POP", - "path": "0" - }, - "6130": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "POP", - "path": "0" - }, - "6131": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "PUSH1", - "path": "0", - "value": "0x40" - }, - "6133": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "MLOAD", - "path": "0" - }, - "6134": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "6136": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP2", - "path": "0" - }, - "6137": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP4", - "path": "0" - }, - "6138": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "SUB", - "path": "0" - }, - "6139": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "SUB", - "path": "0" - }, - "6140": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "DUP2", - "path": "0" - }, - "6141": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "MSTORE", - "path": "0" - }, - "6142": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "SWAP1", - "path": "0" - }, - "6143": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "PUSH1", - "path": "0", - "value": "0x40" - }, - "6145": { - "fn": "NamedStorage.setUintValue", - "offset": [1480, 1502], - "op": "MSTORE", - "path": "0" - }, - "6146": { - "fn": "NamedStorage.setUintValue", - "offset": [1470, 1503], - "op": "DUP1", - "path": "0" - }, - "6147": { - "fn": "NamedStorage.setUintValue", - "offset": [1470, 1503], - "op": "MLOAD", - "path": "0" - }, - "6148": { - "fn": "NamedStorage.setUintValue", - "offset": [1470, 1503], - "op": "SWAP1", - "path": "0" - }, - "6149": { - "fn": "NamedStorage.setUintValue", - "offset": [1470, 1503], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "6151": { - "fn": "NamedStorage.setUintValue", - "offset": [1470, 1503], - "op": "ADD", - "path": "0" - }, - "6152": { - "fn": "NamedStorage.setUintValue", - "offset": [1470, 1503], - "op": "KECCAK256", - "path": "0" - }, - "6153": { - "fn": "NamedStorage.setUintValue", - "offset": [1455, 1503], - "op": "SWAP1", - "path": "0" - }, - "6154": { - "fn": "NamedStorage.setUintValue", - "offset": [1455, 1503], - "op": "POP", - "path": "0" - }, - "6155": { - "fn": "NamedStorage.setUintValue", - "offset": [1549, 1554], - "op": "DUP2", - "path": "0" - }, - "6156": { - "fn": "NamedStorage.setUintValue", - "offset": [1543, 1547], - "op": "DUP2", - "path": "0" - }, - "6157": { - "fn": "NamedStorage.setUintValue", - "offset": [1536, 1555], - "op": "SSTORE", - "path": "0" - }, - "6158": { - "fn": "NamedStorage.setUintValue", - "offset": [1522, 1565], - "op": "POP", - "path": "0" - }, - "6159": { - "fn": "NamedStorage.setUintValue", - "offset": [1522, 1565], - "op": "POP", - "path": "0" - }, - "6160": { - "fn": "NamedStorage.setUintValue", - "offset": [1522, 1565], - "op": "POP", - "path": "0" - }, - "6161": { - "fn": "NamedStorage.setUintValue", - "jump": "o", - "offset": [1522, 1565], - "op": "JUMP", - "path": "0" - }, - "6162": { - "fn": "NamedStorage.getUintValue", - "offset": [1164, 1373], - "op": "JUMPDEST", - "path": "0" - }, - "6163": { - "fn": "NamedStorage.getUintValue", - "offset": [1229, 1243], - "op": "PUSH1", - "path": "0", - "value": "0x0" - }, - "6165": { - "fn": "NamedStorage.getUintValue", - "offset": [1255, 1267], - "op": "DUP1", - "path": "0" - }, - "6166": { - "fn": "NamedStorage.getUintValue", - "offset": [1297, 1301], - "op": "DUP3", - "path": "0" - }, - "6167": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "PUSH1", - "path": "0", - "value": "0x40" - }, - "6169": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "MLOAD", - "path": "0" - }, - "6170": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "6172": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "ADD", - "path": "0" - }, - "6173": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "DUP1", - "path": "0" - }, - "6174": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "DUP3", - "path": "0" - }, - "6175": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "DUP1", - "path": "0" - }, - "6176": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "MLOAD", - "path": "0" - }, - "6177": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "SWAP1", - "path": "0" - }, - "6178": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "6180": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "ADD", - "path": "0" - }, - "6181": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "SWAP1", - "path": "0" - }, - "6182": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "DUP1", - "path": "0" - }, - "6183": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "DUP4", - "path": "0" - }, - "6184": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "DUP4", - "path": "0" - }, - "6185": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "JUMPDEST", - "path": "0" - }, - "6186": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "6188": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "DUP4", - "path": "0" - }, - "6189": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "LT", - "path": "0" - }, - "6190": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "PUSH2", - "path": "0", - "value": "0x1848" - }, - "6193": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "JUMPI", - "path": "0" - }, - "6194": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "DUP1", - "path": "0" - }, - "6195": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "MLOAD", - "path": "0" - }, - "6196": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "DUP3", - "path": "0" - }, - "6197": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "MSTORE", - "path": "0" - }, - "6198": { - "op": "PUSH1", - "value": "0x1F" - }, - "6200": { - "op": "NOT" - }, - "6201": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "SWAP1", - "path": "0" - }, - "6202": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "SWAP3", - "path": "0" - }, - "6203": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "ADD", - "path": "0" - }, - "6204": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "SWAP2", - "path": "0" - }, - "6205": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "6207": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "SWAP2", - "path": "0" - }, - "6208": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "DUP3", - "path": "0" - }, - "6209": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "ADD", - "path": "0" - }, - "6210": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "SWAP2", - "path": "0" - }, - "6211": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "ADD", - "path": "0" - }, - "6212": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "PUSH2", - "path": "0", - "value": "0x1829" - }, - "6215": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "JUMP", - "path": "0" - }, - "6216": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "JUMPDEST", - "path": "0" - }, - "6217": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "PUSH1", - "path": "0", - "value": "0x1" - }, - "6219": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "DUP4", - "path": "0" - }, - "6220": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "6222": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "SUB", - "path": "0" - }, - "6223": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "PUSH2", - "path": "0", - "value": "0x100" - }, - "6226": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "EXP", - "path": "0" - }, - "6227": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "SUB", - "path": "0" - }, - "6228": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "DUP1", - "path": "0" - }, - "6229": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "NOT", - "path": "0" - }, - "6230": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "DUP3", - "path": "0" - }, - "6231": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "MLOAD", - "path": "0" - }, - "6232": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "AND", - "path": "0" - }, - "6233": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "DUP2", - "path": "0" - }, - "6234": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "DUP5", - "path": "0" - }, - "6235": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "MLOAD", - "path": "0" - }, - "6236": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "AND", - "path": "0" - }, - "6237": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "DUP1", - "path": "0" - }, - "6238": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "DUP3", - "path": "0" - }, - "6239": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "OR", - "path": "0" - }, - "6240": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "DUP6", - "path": "0" - }, - "6241": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "MSTORE", - "path": "0" - }, - "6242": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "POP", - "path": "0" - }, - "6243": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "POP", - "path": "0" - }, - "6244": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "POP", - "path": "0" - }, - "6245": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "POP", - "path": "0" - }, - "6246": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "POP", - "path": "0" - }, - "6247": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "POP", - "path": "0" - }, - "6248": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "SWAP1", - "path": "0" - }, - "6249": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "POP", - "path": "0" - }, - "6250": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "ADD", - "path": "0" - }, - "6251": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "SWAP2", - "path": "0" - }, - "6252": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "POP", - "path": "0" - }, - "6253": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "POP", - "path": "0" - }, - "6254": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "PUSH1", - "path": "0", - "value": "0x40" - }, - "6256": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "MLOAD", - "path": "0" - }, - "6257": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "6259": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "DUP2", - "path": "0" - }, - "6260": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "DUP4", - "path": "0" - }, - "6261": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "SUB", - "path": "0" - }, - "6262": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "SUB", - "path": "0" - }, - "6263": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "DUP2", - "path": "0" - }, - "6264": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "MSTORE", - "path": "0" - }, - "6265": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "SWAP1", - "path": "0" - }, - "6266": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "PUSH1", - "path": "0", - "value": "0x40" - }, - "6268": { - "fn": "NamedStorage.getUintValue", - "offset": [1280, 1302], - "op": "MSTORE", - "path": "0" - }, - "6269": { - "fn": "NamedStorage.getUintValue", - "offset": [1270, 1303], - "op": "DUP1", - "path": "0" - }, - "6270": { - "fn": "NamedStorage.getUintValue", - "offset": [1270, 1303], - "op": "MLOAD", - "path": "0" - }, - "6271": { - "fn": "NamedStorage.getUintValue", - "offset": [1270, 1303], - "op": "SWAP1", - "path": "0" - }, - "6272": { - "fn": "NamedStorage.getUintValue", - "offset": [1270, 1303], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "6274": { - "fn": "NamedStorage.getUintValue", - "offset": [1270, 1303], - "op": "ADD", - "path": "0" - }, - "6275": { - "fn": "NamedStorage.getUintValue", - "offset": [1270, 1303], - "op": "KECCAK256", - "path": "0" - }, - "6276": { - "fn": "NamedStorage.getUintValue", - "offset": [1255, 1303], - "op": "SWAP1", - "path": "0" - }, - "6277": { - "fn": "NamedStorage.getUintValue", - "offset": [1255, 1303], - "op": "POP", - "path": "0" - }, - "6278": { - "fn": "NamedStorage.getUintValue", - "offset": [1352, 1356], - "op": "DUP1", - "path": "0" - }, - "6279": { - "fn": "NamedStorage.getUintValue", - "offset": [1346, 1357], - "op": "SLOAD", - "path": "0" - }, - "6280": { - "fn": "NamedStorage.getUintValue", - "offset": [1336, 1357], - "op": "SWAP2", - "path": "0" - }, - "6281": { - "fn": "NamedStorage.getUintValue", - "offset": [1336, 1357], - "op": "POP", - "path": "0" - }, - "6282": { - "fn": "NamedStorage.getUintValue", - "offset": [1322, 1367], - "op": "POP", - "path": "0" - }, - "6283": { - "fn": "NamedStorage.getUintValue", - "offset": [1322, 1367], - "op": "SWAP2", - "path": "0" - }, - "6284": { - "fn": "NamedStorage.getUintValue", - "offset": [1322, 1367], - "op": "SWAP1", - "path": "0" - }, - "6285": { - "fn": "NamedStorage.getUintValue", - "offset": [1322, 1367], - "op": "POP", - "path": "0" - }, - "6286": { - "fn": "NamedStorage.getUintValue", - "jump": "o", - "offset": [1322, 1367], - "op": "JUMP", - "path": "0" - }, - "6287": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1577, 1746], - "op": "JUMPDEST", - "path": "0" - }, - "6288": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1665, 1683], - "op": "PUSH2", - "path": "0", - "statement": 73, - "value": "0x1898" - }, - "6291": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1678, 1682], - "op": "DUP3", - "path": "0" - }, - "6292": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1665, 1677], - "op": "PUSH2", - "path": "0", - "value": "0x1812" - }, - "6295": { - "fn": "NamedStorage.setUintValueOnce", - "jump": "i", - "offset": [1665, 1683], - "op": "JUMP", - "path": "0" - }, - "6296": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1665, 1683], - "op": "JUMPDEST", - "path": "0" - }, - "6297": { - "branch": 88, - "fn": "NamedStorage.setUintValueOnce", - "offset": [1665, 1688], - "op": "ISZERO", - "path": "0" - }, - "6298": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "PUSH2", - "path": "0", - "value": "0x18D8" - }, - "6301": { - "branch": 88, - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "JUMPI", - "path": "0" - }, - "6302": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "PUSH1", - "path": "0", - "value": "0x40" - }, - "6304": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "DUP1", - "path": "0" - }, - "6305": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "MLOAD", - "path": "0" - }, - "6306": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "6310": { - "op": "PUSH1", - "value": "0xE5" - }, - "6312": { - "op": "SHL" - }, - "6313": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "DUP2", - "path": "0" - }, - "6314": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "MSTORE", - "path": "0" - }, - "6315": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "6317": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "PUSH1", - "path": "0", - "value": "0x4" - }, - "6319": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "DUP3", - "path": "0" - }, - "6320": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "ADD", - "path": "0" - }, - "6321": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "MSTORE", - "path": "0" - }, - "6322": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "PUSH1", - "path": "0", - "value": "0xB" - }, - "6324": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "PUSH1", - "path": "0", - "value": "0x24" - }, - "6326": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "DUP3", - "path": "0" - }, - "6327": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "ADD", - "path": "0" - }, - "6328": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "MSTORE", - "path": "0" - }, - "6329": { - "op": "PUSH11", - "value": "0x1053149150511657D4D155" - }, - "6341": { - "op": "PUSH1", - "value": "0xAA" - }, - "6343": { - "op": "SHL" - }, - "6344": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "PUSH1", - "path": "0", - "value": "0x44" - }, - "6346": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "DUP3", - "path": "0" - }, - "6347": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "ADD", - "path": "0" - }, - "6348": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "MSTORE", - "path": "0" - }, - "6349": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "SWAP1", - "path": "0" - }, - "6350": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "MLOAD", - "path": "0" - }, - "6351": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "SWAP1", - "path": "0" - }, - "6352": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "DUP2", - "path": "0" - }, - "6353": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "SWAP1", - "path": "0" - }, - "6354": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "SUB", - "path": "0" - }, - "6355": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "PUSH1", - "path": "0", - "value": "0x64" - }, - "6357": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "ADD", - "path": "0" - }, - "6358": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "SWAP1", - "path": "0" - }, - "6359": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "REVERT", - "path": "0" - }, - "6360": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1657, 1704], - "op": "JUMPDEST", - "path": "0" - }, - "6361": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1714, 1739], - "op": "PUSH2", - "path": "0", - "statement": 74, - "value": "0x39B" - }, - "6364": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1727, 1731], - "op": "DUP3", - "path": "0" - }, - "6365": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1733, 1738], - "op": "DUP3", - "path": "0" - }, - "6366": { - "fn": "NamedStorage.setUintValueOnce", - "offset": [1714, 1726], - "op": "PUSH2", - "path": "0", - "value": "0x1798" - }, - "6369": { - "fn": "NamedStorage.setUintValueOnce", - "jump": "i", - "offset": [1714, 1739], - "op": "JUMP", - "path": "0" - }, - "6370": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1024, 1144], - "op": "JUMPDEST", - "path": "29" - }, - "6371": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1069, 1076], - "op": "PUSH1", - "path": "29", - "value": "0x0" - }, - "6373": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1095, 1137], - "op": "PUSH2", - "path": "29", - "statement": 75, - "value": "0x120B" - }, - "6376": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "6378": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "MLOAD", - "path": "29" - }, - "6379": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "DUP1", - "path": "29" - }, - "6380": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "PUSH1", - "path": "29", - "value": "0x60" - }, - "6382": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "ADD", - "path": "29" - }, - "6383": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "PUSH1", - "path": "29", - "value": "0x40" - }, - "6385": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "MSTORE", - "path": "29" - }, - "6386": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "DUP1", - "path": "29" - }, - "6387": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "PUSH1", - "path": "29", - "value": "0x21" - }, - "6389": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "DUP2", - "path": "29" - }, - "6390": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "MSTORE", - "path": "29" - }, - "6391": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "PUSH1", - "path": "29", - "value": "0x20" - }, - "6393": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "ADD", - "path": "29" - }, - "6394": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "PUSH2", - "path": "29", - "value": "0x1A1C" - }, - "6397": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "PUSH1", - "path": "29", - "value": "0x21" - }, - "6399": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "SWAP2", - "path": "29" - }, - "6400": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1121, 1136], - "op": "CODECOPY", - "path": "29" - }, - "6401": { - "fn": "StarknetTokenStorage.maxDeposit", - "offset": [1095, 1120], - "op": "PUSH2", - "path": "29", - "value": "0x1812" - }, - "6404": { - "fn": "StarknetTokenStorage.maxDeposit", - "jump": "i", - "offset": [1095, 1137], - "op": "JUMP", - "path": "29" - }, - "6405": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2171, 2360], - "op": "JUMPDEST", - "path": "0" - }, - "6406": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2295, 2298], - "op": "PUSH1", - "path": "0", - "statement": 76, - "value": "0x0" - }, - "6408": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2262, 2283], - "op": "PUSH2", - "path": "0", - "value": "0x1910" - }, - "6411": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2278, 2282], - "op": "DUP4", - "path": "0" - }, - "6412": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2262, 2277], - "op": "PUSH2", - "path": "0", - "value": "0x1812" - }, - "6415": { - "fn": "NamedStorage.setAddressValueOnce", - "jump": "i", - "offset": [2262, 2283], - "op": "JUMP", - "path": "0" - }, - "6416": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2262, 2283], - "op": "JUMPDEST", - "path": "0" - }, - "6417": { - "op": "PUSH1", - "value": "0x1" - }, - "6419": { - "op": "PUSH1", - "value": "0x1" - }, - "6421": { - "op": "PUSH1", - "value": "0xA0" - }, - "6423": { - "op": "SHL" - }, - "6424": { - "op": "SUB" - }, - "6425": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2262, 2299], - "op": "AND", - "path": "0" - }, - "6426": { - "branch": 89, - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2262, 2299], - "op": "EQ", - "path": "0" - }, - "6427": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "PUSH2", - "path": "0", - "value": "0x18D8" - }, - "6430": { - "branch": 89, - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "JUMPI", - "path": "0" - }, - "6431": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "PUSH1", - "path": "0", - "value": "0x40" - }, - "6433": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "DUP1", - "path": "0" - }, - "6434": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "MLOAD", - "path": "0" - }, - "6435": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "6439": { - "op": "PUSH1", - "value": "0xE5" - }, - "6441": { - "op": "SHL" - }, - "6442": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "DUP2", - "path": "0" - }, - "6443": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "MSTORE", - "path": "0" - }, - "6444": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "6446": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "PUSH1", - "path": "0", - "value": "0x4" - }, - "6448": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "DUP3", - "path": "0" - }, - "6449": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "ADD", - "path": "0" - }, - "6450": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "MSTORE", - "path": "0" - }, - "6451": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "PUSH1", - "path": "0", - "value": "0xB" - }, - "6453": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "PUSH1", - "path": "0", - "value": "0x24" - }, - "6455": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "DUP3", - "path": "0" - }, - "6456": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "ADD", - "path": "0" - }, - "6457": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "MSTORE", - "path": "0" - }, - "6458": { - "op": "PUSH11", - "value": "0x1053149150511657D4D155" - }, - "6470": { - "op": "PUSH1", - "value": "0xAA" - }, - "6472": { - "op": "SHL" - }, - "6473": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "PUSH1", - "path": "0", - "value": "0x44" - }, - "6475": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "DUP3", - "path": "0" - }, - "6476": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "ADD", - "path": "0" - }, - "6477": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "MSTORE", - "path": "0" - }, - "6478": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "SWAP1", - "path": "0" - }, - "6479": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "MLOAD", - "path": "0" - }, - "6480": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "SWAP1", - "path": "0" - }, - "6481": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "DUP2", - "path": "0" - }, - "6482": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "SWAP1", - "path": "0" - }, - "6483": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "SUB", - "path": "0" - }, - "6484": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "PUSH1", - "path": "0", - "value": "0x64" - }, - "6486": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "ADD", - "path": "0" - }, - "6487": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "SWAP1", - "path": "0" - }, - "6488": { - "fn": "NamedStorage.setAddressValueOnce", - "offset": [2254, 2315], - "op": "REVERT", - "path": "0" - }, - "6489": { - "op": "JUMPDEST" - }, - "6490": { - "op": "PUSH1", - "value": "0x0" - }, - "6492": { - "op": "DUP1" - }, - "6493": { - "op": "DUP6" - }, - "6494": { - "op": "DUP6" - }, - "6495": { - "op": "GT" - }, - "6496": { - "op": "ISZERO" - }, - "6497": { - "op": "PUSH2", - "value": "0x1968" - }, - "6500": { - "op": "JUMPI" - }, - "6501": { - "op": "DUP2" - }, - "6502": { - "op": "DUP3" - }, - "6503": { - "op": "REVERT" - }, - "6504": { - "op": "JUMPDEST" - }, - "6505": { - "op": "DUP4" - }, - "6506": { - "op": "DUP7" - }, - "6507": { - "op": "GT" - }, - "6508": { - "op": "ISZERO" - }, - "6509": { - "op": "PUSH2", - "value": "0x1974" - }, - "6512": { - "op": "JUMPI" - }, - "6513": { - "op": "DUP2" - }, - "6514": { - "op": "DUP3" - }, - "6515": { - "op": "REVERT" - }, - "6516": { - "op": "JUMPDEST" - }, - "6517": { - "op": "POP" - }, - "6518": { - "op": "POP" - }, - "6519": { - "op": "DUP3" - }, - "6520": { - "op": "ADD" - }, - "6521": { - "op": "SWAP4" - }, - "6522": { - "op": "SWAP2" - }, - "6523": { - "op": "SWAP1" - }, - "6524": { - "op": "SWAP3" - }, - "6525": { - "op": "SUB" - }, - "6526": { - "op": "SWAP2" - }, - "6527": { - "op": "POP" - }, - "6528": { - "op": "JUMP" - } - }, - "sha1": "ac499d2dcd4852bd750ce503eb657bdf09c7ec01", - "source": "// SPDX-License-Identifier: Apache-2.0.\npragma solidity ^0.6.12;\n\nimport \"contracts/scalable-dex/contracts/src/libraries/Common.sol\";\nimport \"contracts/starkware/starknet/apps/token/solidity/StarknetTokenBridge.sol\";\n\ncontract StarknetEthBridge is StarknetTokenBridge {\n using Addresses for address;\n\n function deposit(uint256 l2Recipient) external payable {\n // The msg.value in this transaction was already credited to the contract.\n require(address(this).balance <= maxTotalBalance(), \"MAX_BALANCE_EXCEEDED\");\n sendMessage(msg.value, l2Recipient);\n }\n\n function withdraw(uint256 amount, address recipient) public override {\n consumeMessage(amount, recipient);\n // Make sure we don't accidentally burn funds.\n require(recipient != address(0x0), \"INVALID_RECIPIENT\");\n recipient.performEthTransfer(amount);\n }\n}\n", - "sourceMap": "218:658:27:-:0;;;;;;;;;;;;;711:12:5;747:4;753:15;770:9;736:44;;;;;;-1:-1:-1;;;;;736:44:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;726:55;;;;;;711:70;;815:4;791:28;;;;;;865:2;859:4;852:16;838:40;218:658:27;;;;;;;;;", - "sourcePath": "contracts/starkware/starknet/apps/token/solidity/StarknetEthBridge.sol", - "type": "contract" -} diff --git a/src/contracts/StarknetMessaging/StarknetMessaging.js b/src/contracts/StarknetMessaging/StarknetMessaging.js deleted file mode 100644 index 03021b42..00000000 --- a/src/contracts/StarknetMessaging/StarknetMessaging.js +++ /dev/null @@ -1,6 +0,0 @@ -import {web3} from '../../web3'; -import {abi} from './StarknetMessaging.json'; - -const address = ''; - -export const starkNetMessaging = new web3.eth.Contract(abi, address); diff --git a/src/contracts/StarknetMessaging/StarknetMessaging.json b/src/contracts/StarknetMessaging/StarknetMessaging.json deleted file mode 100644 index 7825fee2..00000000 --- a/src/contracts/StarknetMessaging/StarknetMessaging.json +++ /dev/null @@ -1,7911 +0,0 @@ -{ - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "from_address", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "to_address", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "payload", - "type": "uint256[]" - } - ], - "name": "ConsumedMessageToL1", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from_address", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "to_address", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "selector", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "payload", - "type": "uint256[]" - } - ], - "name": "ConsumedMessageToL2", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "from_address", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "to_address", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "payload", - "type": "uint256[]" - } - ], - "name": "LogMessageToL1", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from_address", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "to_address", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "selector", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "payload", - "type": "uint256[]" - } - ], - "name": "LogMessageToL2", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "from_address", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "payload", - "type": "uint256[]" - } - ], - "name": "consumeMessageFromL2", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "msgHash", - "type": "bytes32" - } - ], - "name": "l1ToL2Messages", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "msgHash", - "type": "bytes32" - } - ], - "name": "l2ToL1Messages", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "to_address", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "selector", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "payload", - "type": "uint256[]" - } - ], - "name": "sendMessageToL2", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "allSourcePaths": { - "0": "contracts/common-contracts/src/libraries/NamedStorage.sol", - "31": "contracts/starkware/starknet/eth/IStarknetMessaging.sol", - "35": "contracts/starkware/starknet/eth/StarknetMessaging.sol" - }, - "ast": { - "absolutePath": "contracts/starkware/starknet/eth/StarknetMessaging.sol", - "exportedSymbols": { - "StarknetMessaging": [4525] - }, - "id": 4526, - "license": "Apache-2.0.", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 4352, - "literals": ["solidity", "^", "0.6", ".12"], - "nodeType": "PragmaDirective", - "src": "40:24:35" - }, - { - "absolutePath": "contracts/starkware/starknet/eth/IStarknetMessaging.sol", - "file": "./IStarknetMessaging.sol", - "id": 4353, - "nodeType": "ImportDirective", - "scope": 4526, - "sourceUnit": 3587, - "src": "66:34:35", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "contracts/common-contracts/src/libraries/NamedStorage.sol", - "file": "contracts/common-contracts/src/libraries/NamedStorage.sol", - "id": 4354, - "nodeType": "ImportDirective", - "scope": 4526, - "sourceUnit": 218, - "src": "101:67:35", - "symbolAliases": [], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 4356, - "name": "IStarknetMessaging", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 3586, - "src": "450:18:35", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IStarknetMessaging_$3586", - "typeString": "contract IStarknetMessaging" - } - }, - "id": 4357, - "nodeType": "InheritanceSpecifier", - "src": "450:18:35" - } - ], - "contractDependencies": [3586], - "contractKind": "contract", - "documentation": { - "id": 4355, - "nodeType": "StructuredDocumentation", - "src": "170:249:35", - "text": "Implements sending messages to L2 by adding them to a pipe and consuming messages from L2 by\nremoving them from a different pipe. A deriving contract can handle the former pipe and add items\nto the latter pipe while interacting with L2." - }, - "fullyImplemented": true, - "id": 4525, - "linearizedBaseContracts": [4525, 3586], - "name": "StarknetMessaging", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": true, - "documentation": { - "id": 4358, - "nodeType": "StructuredDocumentation", - "src": "475:60:35", - "text": "Random slot storage elements and accessors." - }, - "id": 4361, - "mutability": "constant", - "name": "L1L2_MESSAGE_MAP_TAG", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 4525, - "src": "540:76:35", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 4359, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "540:6:35", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4d41505050494e47", - "id": 4360, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "579:37:35", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_56df6e8156d8c5dcfab61a3ec93019fb35c5c27047a05e80b01ba1b74d449411", - "typeString": "literal_string \"STARKNET_1.0_MSGING_L1TOL2_MAPPPING\"" - }, - "value": "STARKNET_1.0_MSGING_L1TOL2_MAPPPING" - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 4364, - "mutability": "constant", - "name": "L2L1_MESSAGE_MAP_TAG", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 4525, - "src": "622:76:35", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 4362, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "622:6:35", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "535441524b4e45545f312e305f4d5347494e475f4c32544f4c315f4d41505050494e47", - "id": 4363, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "661:37:35", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_cbc7abc335240960b5bc2cd0381440eb03dc62f362591b8f8e40b047737c8c1a", - "typeString": "literal_string \"STARKNET_1.0_MSGING_L2TOL1_MAPPPING\"" - }, - "value": "STARKNET_1.0_MSGING_L2TOL1_MAPPPING" - }, - "visibility": "internal" - }, - { - "body": { - "id": 4376, - "nodeType": "Block", - "src": "778:49:35", - "statements": [ - { - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 4371, - "name": "l1ToL2Messages", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4403, - "src": "795:14:35", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_mapping$_t_bytes32_$_t_uint256_$_$", - "typeString": "function () pure returns (mapping(bytes32 => uint256))" - } - }, - "id": 4372, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "795:16:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - } - }, - "id": 4374, - "indexExpression": { - "argumentTypes": null, - "id": 4373, - "name": "msgHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4366, - "src": "812:7:35", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "795:25:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 4370, - "id": 4375, - "nodeType": "Return", - "src": "788:32:35" - } - ] - }, - "documentation": null, - "functionSelector": "77c7d7a9", - "id": 4377, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "l1ToL2Messages", - "nodeType": "FunctionDefinition", - "overrides": null, - "parameters": { - "id": 4367, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4366, - "mutability": "mutable", - "name": "msgHash", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 4377, - "src": "729:15:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 4365, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "729:7:35", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "728:17:35" - }, - "returnParameters": { - "id": 4370, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4369, - "mutability": "mutable", - "name": "", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 4377, - "src": "769:7:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4368, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "769:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "768:9:35" - }, - "scope": 4525, - "src": "705:122:35", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 4389, - "nodeType": "Block", - "src": "906:49:35", - "statements": [ - { - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 4384, - "name": "l2ToL1Messages", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4416, - "src": "923:14:35", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_mapping$_t_bytes32_$_t_uint256_$_$", - "typeString": "function () pure returns (mapping(bytes32 => uint256))" - } - }, - "id": 4385, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "923:16:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - } - }, - "id": 4387, - "indexExpression": { - "argumentTypes": null, - "id": 4386, - "name": "msgHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4379, - "src": "940:7:35", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "923:25:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 4383, - "id": 4388, - "nodeType": "Return", - "src": "916:32:35" - } - ] - }, - "documentation": null, - "functionSelector": "a46efaf3", - "id": 4390, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "l2ToL1Messages", - "nodeType": "FunctionDefinition", - "overrides": null, - "parameters": { - "id": 4380, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4379, - "mutability": "mutable", - "name": "msgHash", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 4390, - "src": "857:15:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 4378, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "857:7:35", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "856:17:35" - }, - "returnParameters": { - "id": 4383, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4382, - "mutability": "mutable", - "name": "", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 4390, - "src": "897:7:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4381, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "897:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "896:9:35" - }, - "scope": 4525, - "src": "833:122:35", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 4402, - "nodeType": "Block", - "src": "1047:82:35", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 4399, - "name": "L1L2_MESSAGE_MAP_TAG", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4361, - "src": "1101:20:35", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "expression": { - "argumentTypes": null, - "id": 4397, - "name": "NamedStorage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 217, - "src": "1064:12:35", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_NamedStorage_$217_$", - "typeString": "type(library NamedStorage)" - } - }, - "id": 4398, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "bytes32ToUint256Mapping", - "nodeType": "MemberAccess", - "referencedDeclaration": 21, - "src": "1064:36:35", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_mapping$_t_bytes32_$_t_uint256_$_$", - "typeString": "function (string memory) pure returns (mapping(bytes32 => uint256))" - } - }, - "id": 4400, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1064:58:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - } - }, - "functionReturnParameters": 4396, - "id": 4401, - "nodeType": "Return", - "src": "1057:65:35" - } - ] - }, - "documentation": null, - "id": 4403, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "l1ToL2Messages", - "nodeType": "FunctionDefinition", - "overrides": null, - "parameters": { - "id": 4391, - "nodeType": "ParameterList", - "parameters": [], - "src": "984:2:35" - }, - "returnParameters": { - "id": 4396, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4395, - "mutability": "mutable", - "name": "", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 4403, - "src": "1010:35:35", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - }, - "typeName": { - "id": 4394, - "keyType": { - "id": 4392, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1018:7:35", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Mapping", - "src": "1010:27:35", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - }, - "valueType": { - "id": 4393, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1029:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1009:37:35" - }, - "scope": 4525, - "src": "961:168:35", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 4415, - "nodeType": "Block", - "src": "1221:82:35", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 4412, - "name": "L2L1_MESSAGE_MAP_TAG", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4364, - "src": "1275:20:35", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "expression": { - "argumentTypes": null, - "id": 4410, - "name": "NamedStorage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 217, - "src": "1238:12:35", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_NamedStorage_$217_$", - "typeString": "type(library NamedStorage)" - } - }, - "id": 4411, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "bytes32ToUint256Mapping", - "nodeType": "MemberAccess", - "referencedDeclaration": 21, - "src": "1238:36:35", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_mapping$_t_bytes32_$_t_uint256_$_$", - "typeString": "function (string memory) pure returns (mapping(bytes32 => uint256))" - } - }, - "id": 4413, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1238:58:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - } - }, - "functionReturnParameters": 4409, - "id": 4414, - "nodeType": "Return", - "src": "1231:65:35" - } - ] - }, - "documentation": null, - "id": 4416, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "l2ToL1Messages", - "nodeType": "FunctionDefinition", - "overrides": null, - "parameters": { - "id": 4404, - "nodeType": "ParameterList", - "parameters": [], - "src": "1158:2:35" - }, - "returnParameters": { - "id": 4409, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4408, - "mutability": "mutable", - "name": "", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 4416, - "src": "1184:35:35", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - }, - "typeName": { - "id": 4407, - "keyType": { - "id": 4405, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1192:7:35", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Mapping", - "src": "1184:27:35", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - }, - "valueType": { - "id": 4406, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1203:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1183:37:35" - }, - "scope": 4525, - "src": "1135:168:35", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [3574], - "body": { - "id": 4467, - "nodeType": "Block", - "src": "1522:374:35", - "statements": [ - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 4431, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "1552:3:35", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 4432, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1552:10:35", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 4433, - "name": "to_address", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4419, - "src": "1564:10:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 4434, - "name": "selector", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4421, - "src": "1576:8:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 4435, - "name": "payload", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4424, - "src": "1586:7:35", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", - "typeString": "uint256[] calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", - "typeString": "uint256[] calldata" - } - ], - "id": 4430, - "name": "LogMessageToL2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3541, - "src": "1537:14:35", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$", - "typeString": "function (address,uint256,uint256,uint256[] memory)" - } - }, - "id": 4436, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1537:57:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4437, - "nodeType": "EmitStatement", - "src": "1532:62:35" - }, - { - "assignments": [4439], - "declarations": [ - { - "constant": false, - "id": 4439, - "mutability": "mutable", - "name": "msgHash", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 4467, - "src": "1686:15:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 4438, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1686:7:35", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 4457, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 4445, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "1752:3:35", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 4446, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1752:10:35", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "id": 4444, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1744:7:35", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 4443, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1744:7:35", - "typeDescriptions": { - "typeIdentifier": null, - "typeString": null - } - } - }, - "id": 4447, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1744:19:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 4448, - "name": "to_address", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4419, - "src": "1765:10:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4452, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 4449, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1777:1:35", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 4450, - "name": "payload", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4424, - "src": "1781:7:35", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", - "typeString": "uint256[] calldata" - } - }, - "id": 4451, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1781:14:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1777:18:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 4453, - "name": "selector", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4421, - "src": "1797:8:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 4454, - "name": "payload", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4424, - "src": "1807:7:35", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", - "typeString": "uint256[] calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", - "typeString": "uint256[] calldata" - } - ], - "expression": { - "argumentTypes": null, - "id": 4441, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "1727:3:35", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 4442, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "encodePacked", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1727:16:35", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 4455, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1727:88:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 4440, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "1704:9:35", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 4456, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1704:121:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1686:139:35" - }, - { - "expression": { - "argumentTypes": null, - "id": 4463, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 4458, - "name": "l1ToL2Messages", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4403, - "src": "1835:14:35", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_mapping$_t_bytes32_$_t_uint256_$_$", - "typeString": "function () pure returns (mapping(bytes32 => uint256))" - } - }, - "id": 4459, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1835:16:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - } - }, - "id": 4461, - "indexExpression": { - "argumentTypes": null, - "id": 4460, - "name": "msgHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4439, - "src": "1852:7:35", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "1835:25:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "31", - "id": 4462, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1864:1:35", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "1835:30:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4464, - "nodeType": "ExpressionStatement", - "src": "1835:30:35" - }, - { - "expression": { - "argumentTypes": null, - "id": 4465, - "name": "msgHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4439, - "src": "1882:7:35", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 4429, - "id": 4466, - "nodeType": "Return", - "src": "1875:14:35" - } - ] - }, - "documentation": { - "id": 4417, - "nodeType": "StructuredDocumentation", - "src": "1309:51:35", - "text": "Sends a message to an L2 contract." - }, - "functionSelector": "3e3aa6c5", - "id": 4468, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "sendMessageToL2", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 4426, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "1495:8:35" - }, - "parameters": { - "id": 4425, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4419, - "mutability": "mutable", - "name": "to_address", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 4468, - "src": "1399:18:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4418, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1399:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 4421, - "mutability": "mutable", - "name": "selector", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 4468, - "src": "1427:16:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4420, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1427:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 4424, - "mutability": "mutable", - "name": "payload", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 4468, - "src": "1453:26:35", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", - "typeString": "uint256[]" - }, - "typeName": { - "baseType": { - "id": 4422, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1453:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4423, - "length": null, - "nodeType": "ArrayTypeName", - "src": "1453:9:35", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1389:96:35" - }, - "returnParameters": { - "id": 4429, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4428, - "mutability": "mutable", - "name": "", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 4468, - "src": "1513:7:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 4427, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1513:7:35", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1512:9:35" - }, - "scope": 4525, - "src": "1365:531:35", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [3585], - "body": { - "id": 4523, - "nodeType": "Block", - "src": "2161:356:35", - "statements": [ - { - "assignments": [4481], - "declarations": [ - { - "constant": false, - "id": 4481, - "mutability": "mutable", - "name": "msgHash", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 4523, - "src": "2171:15:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 4480, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2171:7:35", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 4496, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 4485, - "name": "from_address", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4471, - "src": "2229:12:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 4488, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "2251:3:35", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 4489, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2251:10:35", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "id": 4487, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2243:7:35", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 4486, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2243:7:35", - "typeDescriptions": { - "typeIdentifier": null, - "typeString": null - } - } - }, - "id": 4490, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2243:19:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 4491, - "name": "payload", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4474, - "src": "2264:7:35", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", - "typeString": "uint256[] calldata" - } - }, - "id": 4492, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2264:14:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 4493, - "name": "payload", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4474, - "src": "2280:7:35", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", - "typeString": "uint256[] calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", - "typeString": "uint256[] calldata" - } - ], - "expression": { - "argumentTypes": null, - "id": 4483, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "2212:3:35", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 4484, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "encodePacked", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2212:16:35", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 4494, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2212:76:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 4482, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "2189:9:35", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 4495, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2189:109:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2171:127:35" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4503, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 4498, - "name": "l2ToL1Messages", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4416, - "src": "2317:14:35", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_mapping$_t_bytes32_$_t_uint256_$_$", - "typeString": "function () pure returns (mapping(bytes32 => uint256))" - } - }, - "id": 4499, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2317:16:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - } - }, - "id": 4501, - "indexExpression": { - "argumentTypes": null, - "id": 4500, - "name": "msgHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4481, - "src": "2334:7:35", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2317:25:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 4502, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2345:1:35", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "2317:29:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "494e56414c49445f4d4553534147455f544f5f434f4e53554d45", - "id": 4504, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2348:28:35", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_c033f391b5e4a8a647eb9e27dd2cb79e7636b1247d32add7af730d1fb34669d3", - "typeString": "literal_string \"INVALID_MESSAGE_TO_CONSUME\"" - }, - "value": "INVALID_MESSAGE_TO_CONSUME" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_c033f391b5e4a8a647eb9e27dd2cb79e7636b1247d32add7af730d1fb34669d3", - "typeString": "literal_string \"INVALID_MESSAGE_TO_CONSUME\"" - } - ], - "id": 4497, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [-18, -18], - "referencedDeclaration": -18, - "src": "2309:7:35", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 4505, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2309:68:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4506, - "nodeType": "ExpressionStatement", - "src": "2309:68:35" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 4508, - "name": "from_address", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4471, - "src": "2412:12:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 4509, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "2426:3:35", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 4510, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2426:10:35", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 4511, - "name": "payload", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4474, - "src": "2438:7:35", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", - "typeString": "uint256[] calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", - "typeString": "uint256[] calldata" - } - ], - "id": 4507, - "name": "ConsumedMessageToL1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3550, - "src": "2392:19:35", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$", - "typeString": "function (uint256,address,uint256[] memory)" - } - }, - "id": 4512, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2392:54:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4513, - "nodeType": "EmitStatement", - "src": "2387:59:35" - }, - { - "expression": { - "argumentTypes": null, - "id": 4519, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 4514, - "name": "l2ToL1Messages", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4416, - "src": "2456:14:35", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_mapping$_t_bytes32_$_t_uint256_$_$", - "typeString": "function () pure returns (mapping(bytes32 => uint256))" - } - }, - "id": 4515, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2456:16:35", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - } - }, - "id": 4517, - "indexExpression": { - "argumentTypes": null, - "id": 4516, - "name": "msgHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4481, - "src": "2473:7:35", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2456:25:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "-=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "31", - "id": 4518, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2485:1:35", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "2456:30:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4520, - "nodeType": "ExpressionStatement", - "src": "2456:30:35" - }, - { - "expression": { - "argumentTypes": null, - "id": 4521, - "name": "msgHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4481, - "src": "2503:7:35", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 4479, - "id": 4522, - "nodeType": "Return", - "src": "2496:14:35" - } - ] - }, - "documentation": { - "id": 4469, - "nodeType": "StructuredDocumentation", - "src": "1902:110:35", - "text": "Consumes a message that was sent from an L2 contract.\nReturns the hash of the message." - }, - "functionSelector": "2c9dd5c0", - "id": 4524, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "consumeMessageFromL2", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 4476, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "2122:8:35" - }, - "parameters": { - "id": 4475, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4471, - "mutability": "mutable", - "name": "from_address", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 4524, - "src": "2047:20:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4470, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2047:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 4474, - "mutability": "mutable", - "name": "payload", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 4524, - "src": "2069:26:35", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", - "typeString": "uint256[]" - }, - "typeName": { - "baseType": { - "id": 4472, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2069:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4473, - "length": null, - "nodeType": "ArrayTypeName", - "src": "2069:9:35", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2046:50:35" - }, - "returnParameters": { - "id": 4479, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4478, - "mutability": "mutable", - "name": "", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 4524, - "src": "2148:7:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 4477, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2148:7:35", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2147:9:35" - }, - "scope": 4525, - "src": "2017:500:35", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 4526, - "src": "420:2099:35" - } - ], - "src": "40:2480:35" - }, - "bytecode": "608060405234801561001057600080fd5b50610550806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80632c9dd5c0146100515780633e3aa6c5146100da57806377c7d7a914610156578063a46efaf314610173575b600080fd5b6100c86004803603604081101561006757600080fd5b8135919081019060408101602082013564010000000081111561008957600080fd5b82018360208201111561009b57600080fd5b803590602001918460208302840111640100000000831117156100bd57600080fd5b509092509050610190565b60408051918252519081900360200190f35b6100c8600480360360608110156100f057600080fd5b81359160208101359181019060608101604082013564010000000081111561011757600080fd5b82018360208201111561012957600080fd5b8035906020019184602083028401116401000000008311171561014b57600080fd5b5090925090506102ef565b6100c86004803603602081101561016c57600080fd5b50356103f0565b6100c86004803603602081101561018957600080fd5b503561040b565b60008084336001600160a01b031685859050868660405160200180868152602001858152602001848152602001838360200280828437808301925050509550505050505060405160208183030381529060405280519060200120905060006101f6610411565b6000838152602091909152604090205411610258576040805162461bcd60e51b815260206004820152601a60248201527f494e56414c49445f4d4553534147455f544f5f434f4e53554d45000000000000604482015290519081900360640190fd5b336001600160a01b0316857f7a06c571aa77f34d9706c51e5d8122b5595aebeaa34233bfe866f22befb973b1868660405180806020018281038252848482818152602001925060200280828437600083820152604051601f909101601f19169092018290039550909350505050a360016102d0610411565b6000838152602091909152604090208054919091039055949350505050565b60008385336001600160a01b03167f474d2456b41fc1146ae05ba36e794e448efd2f172a9128ca1c8c6dbdb22b62f7868660405180806020018281038252848482818152602001925060200280828437600083820152604051601f909101601f19169092018290039550909350505050a46000336001600160a01b031686858590506001018787876040516020018087815260200186815260200185815260200184815260200183836020028082843780830192505050965050505050505060405160208183030381529060405280519060200120905060016103d0610439565b600083815260209190915260409020805490910190559050949350505050565b60006103fa610439565b600092835260205250604090205490565b60006103fa5b60006104346040518060600160405280602381526020016104f860239139610458565b905090565b60006104346040518060600160405280602381526020016104d5602391395b600080826040516020018082805190602001908083835b6020831061048e5780518252601f19909201916020918201910161046f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508091505091905056fe535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4d41505050494e47535441524b4e45545f312e305f4d5347494e475f4c32544f4c315f4d41505050494e47a26469706673582212202f1939c4fb2205d451cdf55dedd0d692abbbadb3f765bb5962c7e04f5297e2b464736f6c634300060c0033", - "bytecodeSha1": "35a273b05fa7f64547bfb941071f659d7a018a85", - "compiler": { - "evm_version": "istanbul", - "optimizer": { - "enabled": true, - "runs": 200 - }, - "version": "0.6.12+commit.27d51765" - }, - "contractName": "StarknetMessaging", - "coverageMap": { - "branches": { - "0": {}, - "31": {}, - "35": { - "StarknetMessaging.consumeMessageFromL2": { - "9": [2317, 2346, true] - } - } - }, - "statements": { - "0": {}, - "31": {}, - "35": { - "StarknetMessaging.consumeMessageFromL2": { - "0": [2309, 2377], - "1": [2387, 2446], - "2": [2456, 2486] - }, - "StarknetMessaging.l1ToL2Messages": { - "5": [788, 820], - "8": [1057, 1122] - }, - "StarknetMessaging.l2ToL1Messages": { - "6": [916, 948], - "7": [1231, 1296] - }, - "StarknetMessaging.sendMessageToL2": { - "3": [1532, 1594], - "4": [1835, 1865] - } - } - } - }, - "dependencies": ["IStarknetMessaging", "NamedStorage"], - "deployedBytecode": "608060405234801561001057600080fd5b506004361061004c5760003560e01c80632c9dd5c0146100515780633e3aa6c5146100da57806377c7d7a914610156578063a46efaf314610173575b600080fd5b6100c86004803603604081101561006757600080fd5b8135919081019060408101602082013564010000000081111561008957600080fd5b82018360208201111561009b57600080fd5b803590602001918460208302840111640100000000831117156100bd57600080fd5b509092509050610190565b60408051918252519081900360200190f35b6100c8600480360360608110156100f057600080fd5b81359160208101359181019060608101604082013564010000000081111561011757600080fd5b82018360208201111561012957600080fd5b8035906020019184602083028401116401000000008311171561014b57600080fd5b5090925090506102ef565b6100c86004803603602081101561016c57600080fd5b50356103f0565b6100c86004803603602081101561018957600080fd5b503561040b565b60008084336001600160a01b031685859050868660405160200180868152602001858152602001848152602001838360200280828437808301925050509550505050505060405160208183030381529060405280519060200120905060006101f6610411565b6000838152602091909152604090205411610258576040805162461bcd60e51b815260206004820152601a60248201527f494e56414c49445f4d4553534147455f544f5f434f4e53554d45000000000000604482015290519081900360640190fd5b336001600160a01b0316857f7a06c571aa77f34d9706c51e5d8122b5595aebeaa34233bfe866f22befb973b1868660405180806020018281038252848482818152602001925060200280828437600083820152604051601f909101601f19169092018290039550909350505050a360016102d0610411565b6000838152602091909152604090208054919091039055949350505050565b60008385336001600160a01b03167f474d2456b41fc1146ae05ba36e794e448efd2f172a9128ca1c8c6dbdb22b62f7868660405180806020018281038252848482818152602001925060200280828437600083820152604051601f909101601f19169092018290039550909350505050a46000336001600160a01b031686858590506001018787876040516020018087815260200186815260200185815260200184815260200183836020028082843780830192505050965050505050505060405160208183030381529060405280519060200120905060016103d0610439565b600083815260209190915260409020805490910190559050949350505050565b60006103fa610439565b600092835260205250604090205490565b60006103fa5b60006104346040518060600160405280602381526020016104f860239139610458565b905090565b60006104346040518060600160405280602381526020016104d5602391395b600080826040516020018082805190602001908083835b6020831061048e5780518252601f19909201916020918201910161046f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508091505091905056fe535441524b4e45545f312e305f4d5347494e475f4c31544f4c325f4d41505050494e47535441524b4e45545f312e305f4d5347494e475f4c32544f4c315f4d41505050494e47a26469706673582212202f1939c4fb2205d451cdf55dedd0d692abbbadb3f765bb5962c7e04f5297e2b464736f6c634300060c0033", - "deployedSourceMap": "420:2099:35:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2017:500;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2017:500:35;;-1:-1:-1;2017:500:35;-1:-1:-1;2017:500:35;:::i;:::-;;;;;;;;;;;;;;;;1365:531;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1365:531:35;;-1:-1:-1;1365:531:35;-1:-1:-1;1365:531:35;:::i;705:122::-;;;;;;;;;;;;;;;;-1:-1:-1;705:122:35;;:::i;833:::-;;;;;;;;;;;;;;;;-1:-1:-1;833:122:35;;:::i;2017:500::-;2148:7;2171:15;2229:12;2251:10;-1:-1:-1;;;;;2243:19:35;2264:7;;:14;;2280:7;;2212:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2189:109;;;;;;2171:127;;2345:1;2317:16;:14;:16::i;:::-;:25;;;;;;;;;;;;;:29;2309:68;;;;;-1:-1:-1;;;2309:68:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;2426:10;-1:-1:-1;;;;;2392:54:35;2412:12;2392:54;2438:7;;2392:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2392:54:35;;;;;;;;-1:-1:-1;2392:54:35;;-1:-1:-1;;;;2392:54:35;2485:1;2456:16;:14;:16::i;:::-;:25;;;;;;;;;;;;:30;;;;;;;;:25;2017:500;-1:-1:-1;;;;2017:500:35:o;1365:531::-;1513:7;1576:8;1564:10;1552;-1:-1:-1;;;;;1537:57:35;;1586:7;;1537:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1537:57:35;;;;;;;;-1:-1:-1;1537:57:35;;-1:-1:-1;;;;1537:57:35;1686:15;1752:10;-1:-1:-1;;;;;1744:19:35;1765:10;1781:7;;:14;;1777:1;:18;1797:8;1807:7;;1727:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1704:121;;;;;;1686:139;;1864:1;1835:16;:14;:16::i;:::-;:25;;;;;;;;;;;;:30;;;;;;;1852:7;-1:-1:-1;1365:531:35;;;;;;:::o;705:122::-;769:7;795:16;:14;:16::i;:::-;:25;;;;;;-1:-1:-1;795:25:35;;;;;705:122::o;833:::-;897:7;923:16;1135:168;1184:35;1238:58;1275:20;;;;;;;;;;;;;;;;;1238:36;:58::i;:::-;1231:65;;1135:168;:::o;961:::-;1010:35;1064:58;1101:20;;;;;;;;;;;;;;;;;258:298:0;358:50;424:16;470:4;453:22;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;453:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;443:33;;;;;;424:52;;532:8;509:31;;495:55;;;;:::o", - "language": "Solidity", - "natspec": { - "kind": "dev", - "methods": { - "consumeMessageFromL2(uint256,uint256[])": { - "notice": "Consumes a message that was sent from an L2 contract. Returns the hash of the message." - }, - "sendMessageToL2(uint256,uint256,uint256[])": { - "notice": "Sends a message to an L2 contract." - } - }, - "notice": "Implements sending messages to L2 by adding them to a pipe and consuming messages from L2 by removing them from a different pipe. A deriving contract can handle the former pipe and add items to the latter pipe while interacting with L2.", - "version": 1 - }, - "offset": [420, 2519], - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2C9DD5C0 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x3E3AA6C5 EQ PUSH2 0xDA JUMPI DUP1 PUSH4 0x77C7D7A9 EQ PUSH2 0x156 JUMPI DUP1 PUSH4 0xA46EFAF3 EQ PUSH2 0x173 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xBD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x190 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xC8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0x60 DUP2 ADD PUSH1 0x40 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x117 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x129 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x14B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x2EF JUMP JUMPDEST PUSH2 0xC8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x16C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x3F0 JUMP JUMPDEST PUSH2 0xC8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x189 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x40B JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP6 SWAP1 POP DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY DUP1 DUP4 ADD SWAP3 POP POP POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0x1F6 PUSH2 0x411 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD GT PUSH2 0x258 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F4D4553534147455F544F5F434F4E53554D45000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH32 0x7A06C571AA77F34D9706C51E5D8122B5595AEBEAA34233BFE866F22BEFB973B1 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP3 ADD DUP3 SWAP1 SUB SWAP6 POP SWAP1 SWAP4 POP POP POP POP LOG3 PUSH1 0x1 PUSH2 0x2D0 PUSH2 0x411 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD SWAP2 SWAP1 SWAP2 SUB SWAP1 SSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 DUP6 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x474D2456B41FC1146AE05BA36E794E448EFD2F172A9128CA1C8C6DBDB22B62F7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP3 ADD DUP3 SWAP1 SUB SWAP6 POP SWAP1 SWAP4 POP POP POP POP LOG4 PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 DUP6 DUP6 SWAP1 POP PUSH1 0x1 ADD DUP8 DUP8 DUP8 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY DUP1 DUP4 ADD SWAP3 POP POP POP SWAP7 POP POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x1 PUSH2 0x3D0 PUSH2 0x439 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 ADD SWAP1 SSTORE SWAP1 POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FA PUSH2 0x439 JUMP JUMPDEST PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x20 MSTORE POP PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FA JUMPDEST PUSH1 0x0 PUSH2 0x434 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x4F8 PUSH1 0x23 SWAP2 CODECOPY PUSH2 0x458 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x434 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x4D5 PUSH1 0x23 SWAP2 CODECOPY JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x48E JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x46F JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP DUP1 SWAP2 POP POP SWAP2 SWAP1 POP JUMP INVALID MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F BALANCE 0x2E ADDRESS 0x5F 0x4D MSTORE8 SELFBALANCE 0x49 0x4E SELFBALANCE 0x5F 0x4C BALANCE SLOAD 0x4F 0x4C ORIGIN 0x5F 0x4D COINBASE POP POP POP 0x49 0x4E SELFBALANCE MSTORE8 SLOAD COINBASE MSTORE 0x4B 0x4E GASLIMIT SLOAD 0x5F BALANCE 0x2E ADDRESS 0x5F 0x4D MSTORE8 SELFBALANCE 0x49 0x4E SELFBALANCE 0x5F 0x4C ORIGIN SLOAD 0x4F 0x4C BALANCE 0x5F 0x4D COINBASE POP POP POP 0x49 0x4E SELFBALANCE LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2F NOT CODECOPY 0xC4 0xFB 0x22 SDIV 0xD4 MLOAD 0xCD CREATE2 0x5D 0xED 0xD0 0xD6 SWAP3 0xAB 0xBB 0xAD 0xB3 0xF7 PUSH6 0xBB5962C7E04F MSTORE SWAP8 0xE2 0xB4 PUSH5 0x736F6C6343 STOP MOD 0xC STOP CALLER ", - "pcMap": { - "0": { - "offset": [420, 2519], - "op": "PUSH1", - "path": "35", - "value": "0x80" - }, - "2": { - "fn": null, - "offset": [420, 2519], - "op": "PUSH1", - "path": "35", - "value": "0x40" - }, - "4": { - "fn": null, - "offset": [420, 2519], - "op": "MSTORE", - "path": "35" - }, - "5": { - "fn": null, - "offset": [420, 2519], - "op": "CALLVALUE", - "path": "35" - }, - "6": { - "fn": null, - "offset": [420, 2519], - "op": "DUP1", - "path": "35" - }, - "7": { - "fn": null, - "offset": [420, 2519], - "op": "ISZERO", - "path": "35" - }, - "8": { - "fn": null, - "offset": [420, 2519], - "op": "PUSH2", - "path": "35", - "value": "0x10" - }, - "11": { - "fn": null, - "offset": [420, 2519], - "op": "JUMPI", - "path": "35" - }, - "12": { - "fn": null, - "offset": [420, 2519], - "op": "PUSH1", - "path": "35", - "value": "0x0" - }, - "14": { - "fn": null, - "offset": [420, 2519], - "op": "DUP1", - "path": "35" - }, - "15": { - "dev": "Cannot send ether to nonpayable function", - "fn": null, - "offset": [420, 2519], - "op": "REVERT", - "path": "35" - }, - "16": { - "fn": null, - "offset": [420, 2519], - "op": "JUMPDEST", - "path": "35" - }, - "17": { - "fn": null, - "offset": [420, 2519], - "op": "POP", - "path": "35" - }, - "18": { - "fn": null, - "offset": [420, 2519], - "op": "PUSH1", - "path": "35", - "value": "0x4" - }, - "20": { - "fn": null, - "offset": [420, 2519], - "op": "CALLDATASIZE", - "path": "35" - }, - "21": { - "fn": null, - "offset": [420, 2519], - "op": "LT", - "path": "35" - }, - "22": { - "fn": null, - "offset": [420, 2519], - "op": "PUSH2", - "path": "35", - "value": "0x4C" - }, - "25": { - "fn": null, - "offset": [420, 2519], - "op": "JUMPI", - "path": "35" - }, - "26": { - "fn": null, - "offset": [420, 2519], - "op": "PUSH1", - "path": "35", - "value": "0x0" - }, - "28": { - "fn": null, - "offset": [420, 2519], - "op": "CALLDATALOAD", - "path": "35" - }, - "29": { - "fn": null, - "offset": [420, 2519], - "op": "PUSH1", - "path": "35", - "value": "0xE0" - }, - "31": { - "fn": null, - "offset": [420, 2519], - "op": "SHR", - "path": "35" - }, - "32": { - "fn": null, - "offset": [420, 2519], - "op": "DUP1", - "path": "35" - }, - "33": { - "fn": null, - "offset": [420, 2519], - "op": "PUSH4", - "path": "35", - "value": "0x2C9DD5C0" - }, - "38": { - "fn": null, - "offset": [420, 2519], - "op": "EQ", - "path": "35" - }, - "39": { - "fn": null, - "offset": [420, 2519], - "op": "PUSH2", - "path": "35", - "value": "0x51" - }, - "42": { - "fn": null, - "offset": [420, 2519], - "op": "JUMPI", - "path": "35" - }, - "43": { - "fn": null, - "offset": [420, 2519], - "op": "DUP1", - "path": "35" - }, - "44": { - "fn": null, - "offset": [420, 2519], - "op": "PUSH4", - "path": "35", - "value": "0x3E3AA6C5" - }, - "49": { - "fn": null, - "offset": [420, 2519], - "op": "EQ", - "path": "35" - }, - "50": { - "fn": null, - "offset": [420, 2519], - "op": "PUSH2", - "path": "35", - "value": "0xDA" - }, - "53": { - "fn": null, - "offset": [420, 2519], - "op": "JUMPI", - "path": "35" - }, - "54": { - "fn": null, - "offset": [420, 2519], - "op": "DUP1", - "path": "35" - }, - "55": { - "fn": null, - "offset": [420, 2519], - "op": "PUSH4", - "path": "35", - "value": "0x77C7D7A9" - }, - "60": { - "fn": null, - "offset": [420, 2519], - "op": "EQ", - "path": "35" - }, - "61": { - "fn": null, - "offset": [420, 2519], - "op": "PUSH2", - "path": "35", - "value": "0x156" - }, - "64": { - "fn": null, - "offset": [420, 2519], - "op": "JUMPI", - "path": "35" - }, - "65": { - "fn": null, - "offset": [420, 2519], - "op": "DUP1", - "path": "35" - }, - "66": { - "fn": null, - "offset": [420, 2519], - "op": "PUSH4", - "path": "35", - "value": "0xA46EFAF3" - }, - "71": { - "fn": null, - "offset": [420, 2519], - "op": "EQ", - "path": "35" - }, - "72": { - "fn": null, - "offset": [420, 2519], - "op": "PUSH2", - "path": "35", - "value": "0x173" - }, - "75": { - "fn": null, - "offset": [420, 2519], - "op": "JUMPI", - "path": "35" - }, - "76": { - "fn": null, - "offset": [420, 2519], - "op": "JUMPDEST", - "path": "35" - }, - "77": { - "fn": null, - "offset": [420, 2519], - "op": "PUSH1", - "path": "35", - "value": "0x0" - }, - "79": { - "fn": null, - "offset": [420, 2519], - "op": "DUP1", - "path": "35" - }, - "80": { - "first_revert": true, - "fn": null, - "offset": [420, 2519], - "op": "REVERT", - "path": "35" - }, - "81": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "JUMPDEST", - "path": "35" - }, - "82": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "PUSH2", - "path": "35", - "value": "0xC8" - }, - "85": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "PUSH1", - "path": "35", - "value": "0x4" - }, - "87": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "DUP1", - "path": "35" - }, - "88": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "CALLDATASIZE", - "path": "35" - }, - "89": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "SUB", - "path": "35" - }, - "90": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "PUSH1", - "path": "35", - "value": "0x40" - }, - "92": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "DUP2", - "path": "35" - }, - "93": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "LT", - "path": "35" - }, - "94": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "ISZERO", - "path": "35" - }, - "95": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "PUSH2", - "path": "35", - "value": "0x67" - }, - "98": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "JUMPI", - "path": "35" - }, - "99": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "PUSH1", - "path": "35", - "value": "0x0" - }, - "101": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "DUP1", - "path": "35" - }, - "102": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "REVERT", - "path": "35" - }, - "103": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "JUMPDEST", - "path": "35" - }, - "104": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "DUP2", - "path": "35" - }, - "105": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "CALLDATALOAD", - "path": "35" - }, - "106": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "SWAP2", - "path": "35" - }, - "107": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "SWAP1", - "path": "35" - }, - "108": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "DUP2", - "path": "35" - }, - "109": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "ADD", - "path": "35" - }, - "110": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "SWAP1", - "path": "35" - }, - "111": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "PUSH1", - "path": "35", - "value": "0x40" - }, - "113": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "DUP2", - "path": "35" - }, - "114": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "ADD", - "path": "35" - }, - "115": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "117": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "DUP3", - "path": "35" - }, - "118": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "ADD", - "path": "35" - }, - "119": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "CALLDATALOAD", - "path": "35" - }, - "120": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "PUSH5", - "path": "35", - "value": "0x100000000" - }, - "126": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "DUP2", - "path": "35" - }, - "127": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "GT", - "path": "35" - }, - "128": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "ISZERO", - "path": "35" - }, - "129": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "PUSH2", - "path": "35", - "value": "0x89" - }, - "132": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "JUMPI", - "path": "35" - }, - "133": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "PUSH1", - "path": "35", - "value": "0x0" - }, - "135": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "DUP1", - "path": "35" - }, - "136": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "REVERT", - "path": "35" - }, - "137": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "JUMPDEST", - "path": "35" - }, - "138": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "DUP3", - "path": "35" - }, - "139": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "ADD", - "path": "35" - }, - "140": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "DUP4", - "path": "35" - }, - "141": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "143": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "DUP3", - "path": "35" - }, - "144": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "ADD", - "path": "35" - }, - "145": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "GT", - "path": "35" - }, - "146": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "ISZERO", - "path": "35" - }, - "147": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "PUSH2", - "path": "35", - "value": "0x9B" - }, - "150": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "JUMPI", - "path": "35" - }, - "151": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "PUSH1", - "path": "35", - "value": "0x0" - }, - "153": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "DUP1", - "path": "35" - }, - "154": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "REVERT", - "path": "35" - }, - "155": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "JUMPDEST", - "path": "35" - }, - "156": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "DUP1", - "path": "35" - }, - "157": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "CALLDATALOAD", - "path": "35" - }, - "158": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "SWAP1", - "path": "35" - }, - "159": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "161": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "ADD", - "path": "35" - }, - "162": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "SWAP2", - "path": "35" - }, - "163": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "DUP5", - "path": "35" - }, - "164": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "166": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "DUP4", - "path": "35" - }, - "167": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "MUL", - "path": "35" - }, - "168": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "DUP5", - "path": "35" - }, - "169": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "ADD", - "path": "35" - }, - "170": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "GT", - "path": "35" - }, - "171": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "PUSH5", - "path": "35", - "value": "0x100000000" - }, - "177": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "DUP4", - "path": "35" - }, - "178": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "GT", - "path": "35" - }, - "179": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "OR", - "path": "35" - }, - "180": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "ISZERO", - "path": "35" - }, - "181": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "PUSH2", - "path": "35", - "value": "0xBD" - }, - "184": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "JUMPI", - "path": "35" - }, - "185": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "PUSH1", - "path": "35", - "value": "0x0" - }, - "187": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "DUP1", - "path": "35" - }, - "188": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "REVERT", - "path": "35" - }, - "189": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "JUMPDEST", - "path": "35" - }, - "190": { - "op": "POP" - }, - "191": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "SWAP1", - "path": "35" - }, - "192": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "SWAP3", - "path": "35" - }, - "193": { - "op": "POP" - }, - "194": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "SWAP1", - "path": "35" - }, - "195": { - "op": "POP" - }, - "196": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "PUSH2", - "path": "35", - "value": "0x190" - }, - "199": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "jump": "i", - "offset": [2017, 2517], - "op": "JUMP", - "path": "35" - }, - "200": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "JUMPDEST", - "path": "35" - }, - "201": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "PUSH1", - "path": "35", - "value": "0x40" - }, - "203": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "DUP1", - "path": "35" - }, - "204": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "MLOAD", - "path": "35" - }, - "205": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "SWAP2", - "path": "35" - }, - "206": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "DUP3", - "path": "35" - }, - "207": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "MSTORE", - "path": "35" - }, - "208": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "MLOAD", - "path": "35" - }, - "209": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "SWAP1", - "path": "35" - }, - "210": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "DUP2", - "path": "35" - }, - "211": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "SWAP1", - "path": "35" - }, - "212": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "SUB", - "path": "35" - }, - "213": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "215": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "ADD", - "path": "35" - }, - "216": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "SWAP1", - "path": "35" - }, - "217": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "RETURN", - "path": "35" - }, - "218": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "JUMPDEST", - "path": "35" - }, - "219": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "PUSH2", - "path": "35", - "value": "0xC8" - }, - "222": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "PUSH1", - "path": "35", - "value": "0x4" - }, - "224": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "DUP1", - "path": "35" - }, - "225": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "CALLDATASIZE", - "path": "35" - }, - "226": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "SUB", - "path": "35" - }, - "227": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "PUSH1", - "path": "35", - "value": "0x60" - }, - "229": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "DUP2", - "path": "35" - }, - "230": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "LT", - "path": "35" - }, - "231": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "ISZERO", - "path": "35" - }, - "232": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "PUSH2", - "path": "35", - "value": "0xF0" - }, - "235": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "JUMPI", - "path": "35" - }, - "236": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "PUSH1", - "path": "35", - "value": "0x0" - }, - "238": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "DUP1", - "path": "35" - }, - "239": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "REVERT", - "path": "35" - }, - "240": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "JUMPDEST", - "path": "35" - }, - "241": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "DUP2", - "path": "35" - }, - "242": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "CALLDATALOAD", - "path": "35" - }, - "243": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "SWAP2", - "path": "35" - }, - "244": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "246": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "DUP2", - "path": "35" - }, - "247": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "ADD", - "path": "35" - }, - "248": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "CALLDATALOAD", - "path": "35" - }, - "249": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "SWAP2", - "path": "35" - }, - "250": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "DUP2", - "path": "35" - }, - "251": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "ADD", - "path": "35" - }, - "252": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "SWAP1", - "path": "35" - }, - "253": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "PUSH1", - "path": "35", - "value": "0x60" - }, - "255": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "DUP2", - "path": "35" - }, - "256": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "ADD", - "path": "35" - }, - "257": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "PUSH1", - "path": "35", - "value": "0x40" - }, - "259": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "DUP3", - "path": "35" - }, - "260": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "ADD", - "path": "35" - }, - "261": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "CALLDATALOAD", - "path": "35" - }, - "262": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "PUSH5", - "path": "35", - "value": "0x100000000" - }, - "268": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "DUP2", - "path": "35" - }, - "269": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "GT", - "path": "35" - }, - "270": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "ISZERO", - "path": "35" - }, - "271": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "PUSH2", - "path": "35", - "value": "0x117" - }, - "274": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "JUMPI", - "path": "35" - }, - "275": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "PUSH1", - "path": "35", - "value": "0x0" - }, - "277": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "DUP1", - "path": "35" - }, - "278": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "REVERT", - "path": "35" - }, - "279": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "JUMPDEST", - "path": "35" - }, - "280": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "DUP3", - "path": "35" - }, - "281": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "ADD", - "path": "35" - }, - "282": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "DUP4", - "path": "35" - }, - "283": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "285": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "DUP3", - "path": "35" - }, - "286": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "ADD", - "path": "35" - }, - "287": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "GT", - "path": "35" - }, - "288": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "ISZERO", - "path": "35" - }, - "289": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "PUSH2", - "path": "35", - "value": "0x129" - }, - "292": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "JUMPI", - "path": "35" - }, - "293": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "PUSH1", - "path": "35", - "value": "0x0" - }, - "295": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "DUP1", - "path": "35" - }, - "296": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "REVERT", - "path": "35" - }, - "297": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "JUMPDEST", - "path": "35" - }, - "298": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "DUP1", - "path": "35" - }, - "299": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "CALLDATALOAD", - "path": "35" - }, - "300": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "SWAP1", - "path": "35" - }, - "301": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "303": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "ADD", - "path": "35" - }, - "304": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "SWAP2", - "path": "35" - }, - "305": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "DUP5", - "path": "35" - }, - "306": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "308": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "DUP4", - "path": "35" - }, - "309": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "MUL", - "path": "35" - }, - "310": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "DUP5", - "path": "35" - }, - "311": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "ADD", - "path": "35" - }, - "312": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "GT", - "path": "35" - }, - "313": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "PUSH5", - "path": "35", - "value": "0x100000000" - }, - "319": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "DUP4", - "path": "35" - }, - "320": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "GT", - "path": "35" - }, - "321": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "OR", - "path": "35" - }, - "322": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "ISZERO", - "path": "35" - }, - "323": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "PUSH2", - "path": "35", - "value": "0x14B" - }, - "326": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "JUMPI", - "path": "35" - }, - "327": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "PUSH1", - "path": "35", - "value": "0x0" - }, - "329": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "DUP1", - "path": "35" - }, - "330": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "REVERT", - "path": "35" - }, - "331": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "JUMPDEST", - "path": "35" - }, - "332": { - "op": "POP" - }, - "333": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "SWAP1", - "path": "35" - }, - "334": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "SWAP3", - "path": "35" - }, - "335": { - "op": "POP" - }, - "336": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "SWAP1", - "path": "35" - }, - "337": { - "op": "POP" - }, - "338": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "PUSH2", - "path": "35", - "value": "0x2EF" - }, - "341": { - "fn": "StarknetMessaging.sendMessageToL2", - "jump": "i", - "offset": [1365, 1896], - "op": "JUMP", - "path": "35" - }, - "342": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [705, 827], - "op": "JUMPDEST", - "path": "35" - }, - "343": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [705, 827], - "op": "PUSH2", - "path": "35", - "value": "0xC8" - }, - "346": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [705, 827], - "op": "PUSH1", - "path": "35", - "value": "0x4" - }, - "348": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [705, 827], - "op": "DUP1", - "path": "35" - }, - "349": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [705, 827], - "op": "CALLDATASIZE", - "path": "35" - }, - "350": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [705, 827], - "op": "SUB", - "path": "35" - }, - "351": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [705, 827], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "353": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [705, 827], - "op": "DUP2", - "path": "35" - }, - "354": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [705, 827], - "op": "LT", - "path": "35" - }, - "355": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [705, 827], - "op": "ISZERO", - "path": "35" - }, - "356": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [705, 827], - "op": "PUSH2", - "path": "35", - "value": "0x16C" - }, - "359": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [705, 827], - "op": "JUMPI", - "path": "35" - }, - "360": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [705, 827], - "op": "PUSH1", - "path": "35", - "value": "0x0" - }, - "362": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [705, 827], - "op": "DUP1", - "path": "35" - }, - "363": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [705, 827], - "op": "REVERT", - "path": "35" - }, - "364": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [705, 827], - "op": "JUMPDEST", - "path": "35" - }, - "365": { - "op": "POP" - }, - "366": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [705, 827], - "op": "CALLDATALOAD", - "path": "35" - }, - "367": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [705, 827], - "op": "PUSH2", - "path": "35", - "value": "0x3F0" - }, - "370": { - "fn": "StarknetMessaging.l1ToL2Messages", - "jump": "i", - "offset": [705, 827], - "op": "JUMP", - "path": "35" - }, - "371": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [833, 955], - "op": "JUMPDEST", - "path": "35" - }, - "372": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [833, 955], - "op": "PUSH2", - "path": "35", - "value": "0xC8" - }, - "375": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [833, 955], - "op": "PUSH1", - "path": "35", - "value": "0x4" - }, - "377": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [833, 955], - "op": "DUP1", - "path": "35" - }, - "378": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [833, 955], - "op": "CALLDATASIZE", - "path": "35" - }, - "379": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [833, 955], - "op": "SUB", - "path": "35" - }, - "380": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [833, 955], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "382": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [833, 955], - "op": "DUP2", - "path": "35" - }, - "383": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [833, 955], - "op": "LT", - "path": "35" - }, - "384": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [833, 955], - "op": "ISZERO", - "path": "35" - }, - "385": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [833, 955], - "op": "PUSH2", - "path": "35", - "value": "0x189" - }, - "388": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [833, 955], - "op": "JUMPI", - "path": "35" - }, - "389": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [833, 955], - "op": "PUSH1", - "path": "35", - "value": "0x0" - }, - "391": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [833, 955], - "op": "DUP1", - "path": "35" - }, - "392": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [833, 955], - "op": "REVERT", - "path": "35" - }, - "393": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [833, 955], - "op": "JUMPDEST", - "path": "35" - }, - "394": { - "op": "POP" - }, - "395": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [833, 955], - "op": "CALLDATALOAD", - "path": "35" - }, - "396": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [833, 955], - "op": "PUSH2", - "path": "35", - "value": "0x40B" - }, - "399": { - "fn": "StarknetMessaging.l2ToL1Messages", - "jump": "i", - "offset": [833, 955], - "op": "JUMP", - "path": "35" - }, - "400": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "JUMPDEST", - "path": "35" - }, - "401": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2148, 2155], - "op": "PUSH1", - "path": "35", - "value": "0x0" - }, - "403": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2171, 2186], - "op": "DUP1", - "path": "35" - }, - "404": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2229, 2241], - "op": "DUP5", - "path": "35" - }, - "405": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2251, 2261], - "op": "CALLER", - "path": "35" - }, - "406": { - "op": "PUSH1", - "value": "0x1" - }, - "408": { - "op": "PUSH1", - "value": "0x1" - }, - "410": { - "op": "PUSH1", - "value": "0xA0" - }, - "412": { - "op": "SHL" - }, - "413": { - "op": "SUB" - }, - "414": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2243, 2262], - "op": "AND", - "path": "35" - }, - "415": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2264, 2271], - "op": "DUP6", - "path": "35" - }, - "416": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2264, 2271], - "op": "DUP6", - "path": "35" - }, - "417": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2264, 2278], - "op": "SWAP1", - "path": "35" - }, - "418": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2264, 2278], - "op": "POP", - "path": "35" - }, - "419": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2280, 2287], - "op": "DUP7", - "path": "35" - }, - "420": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2280, 2287], - "op": "DUP7", - "path": "35" - }, - "421": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "PUSH1", - "path": "35", - "value": "0x40" - }, - "423": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "MLOAD", - "path": "35" - }, - "424": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "426": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "ADD", - "path": "35" - }, - "427": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "DUP1", - "path": "35" - }, - "428": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "DUP7", - "path": "35" - }, - "429": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "DUP2", - "path": "35" - }, - "430": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "MSTORE", - "path": "35" - }, - "431": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "433": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "ADD", - "path": "35" - }, - "434": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "DUP6", - "path": "35" - }, - "435": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "DUP2", - "path": "35" - }, - "436": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "MSTORE", - "path": "35" - }, - "437": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "439": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "ADD", - "path": "35" - }, - "440": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "DUP5", - "path": "35" - }, - "441": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "DUP2", - "path": "35" - }, - "442": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "MSTORE", - "path": "35" - }, - "443": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "445": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "ADD", - "path": "35" - }, - "446": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "DUP4", - "path": "35" - }, - "447": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "DUP4", - "path": "35" - }, - "448": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "450": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "MUL", - "path": "35" - }, - "451": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "DUP1", - "path": "35" - }, - "452": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "DUP3", - "path": "35" - }, - "453": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "DUP5", - "path": "35" - }, - "454": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "CALLDATACOPY", - "path": "35" - }, - "455": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "DUP1", - "path": "35" - }, - "456": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "DUP4", - "path": "35" - }, - "457": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "ADD", - "path": "35" - }, - "458": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "SWAP3", - "path": "35" - }, - "459": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "POP", - "path": "35" - }, - "460": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "POP", - "path": "35" - }, - "461": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "POP", - "path": "35" - }, - "462": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "SWAP6", - "path": "35" - }, - "463": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "POP", - "path": "35" - }, - "464": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "POP", - "path": "35" - }, - "465": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "POP", - "path": "35" - }, - "466": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "POP", - "path": "35" - }, - "467": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "POP", - "path": "35" - }, - "468": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "POP", - "path": "35" - }, - "469": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "PUSH1", - "path": "35", - "value": "0x40" - }, - "471": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "MLOAD", - "path": "35" - }, - "472": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "474": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "DUP2", - "path": "35" - }, - "475": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "DUP4", - "path": "35" - }, - "476": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "SUB", - "path": "35" - }, - "477": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "SUB", - "path": "35" - }, - "478": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "DUP2", - "path": "35" - }, - "479": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "MSTORE", - "path": "35" - }, - "480": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "SWAP1", - "path": "35" - }, - "481": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "PUSH1", - "path": "35", - "value": "0x40" - }, - "483": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2212, 2288], - "op": "MSTORE", - "path": "35" - }, - "484": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2189, 2298], - "op": "DUP1", - "path": "35" - }, - "485": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2189, 2298], - "op": "MLOAD", - "path": "35" - }, - "486": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2189, 2298], - "op": "SWAP1", - "path": "35" - }, - "487": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2189, 2298], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "489": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2189, 2298], - "op": "ADD", - "path": "35" - }, - "490": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2189, 2298], - "op": "KECCAK256", - "path": "35" - }, - "491": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2171, 2298], - "op": "SWAP1", - "path": "35" - }, - "492": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2171, 2298], - "op": "POP", - "path": "35" - }, - "493": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2345, 2346], - "op": "PUSH1", - "path": "35", - "statement": 0, - "value": "0x0" - }, - "495": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2317, 2333], - "op": "PUSH2", - "path": "35", - "value": "0x1F6" - }, - "498": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2317, 2331], - "op": "PUSH2", - "path": "35", - "value": "0x411" - }, - "501": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "jump": "i", - "offset": [2317, 2333], - "op": "JUMP", - "path": "35" - }, - "502": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2317, 2333], - "op": "JUMPDEST", - "path": "35" - }, - "503": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2317, 2342], - "op": "PUSH1", - "path": "35", - "value": "0x0" - }, - "505": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2317, 2342], - "op": "DUP4", - "path": "35" - }, - "506": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2317, 2342], - "op": "DUP2", - "path": "35" - }, - "507": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2317, 2342], - "op": "MSTORE", - "path": "35" - }, - "508": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2317, 2342], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "510": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2317, 2342], - "op": "SWAP2", - "path": "35" - }, - "511": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2317, 2342], - "op": "SWAP1", - "path": "35" - }, - "512": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2317, 2342], - "op": "SWAP2", - "path": "35" - }, - "513": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2317, 2342], - "op": "MSTORE", - "path": "35" - }, - "514": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2317, 2342], - "op": "PUSH1", - "path": "35", - "value": "0x40" - }, - "516": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2317, 2342], - "op": "SWAP1", - "path": "35" - }, - "517": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2317, 2342], - "op": "KECCAK256", - "path": "35" - }, - "518": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2317, 2342], - "op": "SLOAD", - "path": "35" - }, - "519": { - "branch": 9, - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2317, 2346], - "op": "GT", - "path": "35" - }, - "520": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "PUSH2", - "path": "35", - "value": "0x258" - }, - "523": { - "branch": 9, - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "JUMPI", - "path": "35" - }, - "524": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "PUSH1", - "path": "35", - "value": "0x40" - }, - "526": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "DUP1", - "path": "35" - }, - "527": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "MLOAD", - "path": "35" - }, - "528": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "532": { - "op": "PUSH1", - "value": "0xE5" - }, - "534": { - "op": "SHL" - }, - "535": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "DUP2", - "path": "35" - }, - "536": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "MSTORE", - "path": "35" - }, - "537": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "539": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "PUSH1", - "path": "35", - "value": "0x4" - }, - "541": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "DUP3", - "path": "35" - }, - "542": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "ADD", - "path": "35" - }, - "543": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "MSTORE", - "path": "35" - }, - "544": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "PUSH1", - "path": "35", - "value": "0x1A" - }, - "546": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "PUSH1", - "path": "35", - "value": "0x24" - }, - "548": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "DUP3", - "path": "35" - }, - "549": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "ADD", - "path": "35" - }, - "550": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "MSTORE", - "path": "35" - }, - "551": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "PUSH32", - "path": "35", - "value": "0x494E56414C49445F4D4553534147455F544F5F434F4E53554D45000000000000" - }, - "584": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "PUSH1", - "path": "35", - "value": "0x44" - }, - "586": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "DUP3", - "path": "35" - }, - "587": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "ADD", - "path": "35" - }, - "588": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "MSTORE", - "path": "35" - }, - "589": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "SWAP1", - "path": "35" - }, - "590": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "MLOAD", - "path": "35" - }, - "591": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "SWAP1", - "path": "35" - }, - "592": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "DUP2", - "path": "35" - }, - "593": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "SWAP1", - "path": "35" - }, - "594": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "SUB", - "path": "35" - }, - "595": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "PUSH1", - "path": "35", - "value": "0x64" - }, - "597": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "ADD", - "path": "35" - }, - "598": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "SWAP1", - "path": "35" - }, - "599": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "REVERT", - "path": "35" - }, - "600": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2309, 2377], - "op": "JUMPDEST", - "path": "35" - }, - "601": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2426, 2436], - "op": "CALLER", - "path": "35", - "statement": 1 - }, - "602": { - "op": "PUSH1", - "value": "0x1" - }, - "604": { - "op": "PUSH1", - "value": "0x1" - }, - "606": { - "op": "PUSH1", - "value": "0xA0" - }, - "608": { - "op": "SHL" - }, - "609": { - "op": "SUB" - }, - "610": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "AND", - "path": "35" - }, - "611": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2412, 2424], - "op": "DUP6", - "path": "35" - }, - "612": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "PUSH32", - "path": "35", - "value": "0x7A06C571AA77F34D9706C51E5D8122B5595AEBEAA34233BFE866F22BEFB973B1" - }, - "645": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2438, 2445], - "op": "DUP7", - "path": "35" - }, - "646": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2438, 2445], - "op": "DUP7", - "path": "35" - }, - "647": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "PUSH1", - "path": "35", - "value": "0x40" - }, - "649": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "MLOAD", - "path": "35" - }, - "650": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "DUP1", - "path": "35" - }, - "651": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "DUP1", - "path": "35" - }, - "652": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "654": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "ADD", - "path": "35" - }, - "655": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "DUP3", - "path": "35" - }, - "656": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "DUP2", - "path": "35" - }, - "657": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "SUB", - "path": "35" - }, - "658": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "DUP3", - "path": "35" - }, - "659": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "MSTORE", - "path": "35" - }, - "660": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "DUP5", - "path": "35" - }, - "661": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "DUP5", - "path": "35" - }, - "662": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "DUP3", - "path": "35" - }, - "663": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "DUP2", - "path": "35" - }, - "664": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "DUP2", - "path": "35" - }, - "665": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "MSTORE", - "path": "35" - }, - "666": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "668": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "ADD", - "path": "35" - }, - "669": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "SWAP3", - "path": "35" - }, - "670": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "POP", - "path": "35" - }, - "671": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "673": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "MUL", - "path": "35" - }, - "674": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "DUP1", - "path": "35" - }, - "675": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "DUP3", - "path": "35" - }, - "676": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "DUP5", - "path": "35" - }, - "677": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "CALLDATACOPY", - "path": "35" - }, - "678": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "PUSH1", - "path": "35", - "value": "0x0" - }, - "680": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "DUP4", - "path": "35" - }, - "681": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "DUP3", - "path": "35" - }, - "682": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "ADD", - "path": "35" - }, - "683": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "MSTORE", - "path": "35" - }, - "684": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "PUSH1", - "path": "35", - "value": "0x40" - }, - "686": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "MLOAD", - "path": "35" - }, - "687": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "PUSH1", - "path": "35", - "value": "0x1F" - }, - "689": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "SWAP1", - "path": "35" - }, - "690": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "SWAP2", - "path": "35" - }, - "691": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "ADD", - "path": "35" - }, - "692": { - "op": "PUSH1", - "value": "0x1F" - }, - "694": { - "op": "NOT" - }, - "695": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "AND", - "path": "35" - }, - "696": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "SWAP1", - "path": "35" - }, - "697": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "SWAP3", - "path": "35" - }, - "698": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "ADD", - "path": "35" - }, - "699": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "DUP3", - "path": "35" - }, - "700": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "SWAP1", - "path": "35" - }, - "701": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "SUB", - "path": "35" - }, - "702": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "SWAP6", - "path": "35" - }, - "703": { - "op": "POP" - }, - "704": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "SWAP1", - "path": "35" - }, - "705": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "SWAP4", - "path": "35" - }, - "706": { - "op": "POP" - }, - "707": { - "op": "POP" - }, - "708": { - "op": "POP" - }, - "709": { - "op": "POP" - }, - "710": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2392, 2446], - "op": "LOG3", - "path": "35" - }, - "711": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2485, 2486], - "op": "PUSH1", - "path": "35", - "statement": 2, - "value": "0x1" - }, - "713": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2456, 2472], - "op": "PUSH2", - "path": "35", - "value": "0x2D0" - }, - "716": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2456, 2470], - "op": "PUSH2", - "path": "35", - "value": "0x411" - }, - "719": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "jump": "i", - "offset": [2456, 2472], - "op": "JUMP", - "path": "35" - }, - "720": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2456, 2472], - "op": "JUMPDEST", - "path": "35" - }, - "721": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2456, 2481], - "op": "PUSH1", - "path": "35", - "value": "0x0" - }, - "723": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2456, 2481], - "op": "DUP4", - "path": "35" - }, - "724": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2456, 2481], - "op": "DUP2", - "path": "35" - }, - "725": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2456, 2481], - "op": "MSTORE", - "path": "35" - }, - "726": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2456, 2481], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "728": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2456, 2481], - "op": "SWAP2", - "path": "35" - }, - "729": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2456, 2481], - "op": "SWAP1", - "path": "35" - }, - "730": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2456, 2481], - "op": "SWAP2", - "path": "35" - }, - "731": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2456, 2481], - "op": "MSTORE", - "path": "35" - }, - "732": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2456, 2481], - "op": "PUSH1", - "path": "35", - "value": "0x40" - }, - "734": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2456, 2481], - "op": "SWAP1", - "path": "35" - }, - "735": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2456, 2481], - "op": "KECCAK256", - "path": "35" - }, - "736": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2456, 2486], - "op": "DUP1", - "path": "35" - }, - "737": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2456, 2486], - "op": "SLOAD", - "path": "35" - }, - "738": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2456, 2486], - "op": "SWAP2", - "path": "35" - }, - "739": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2456, 2486], - "op": "SWAP1", - "path": "35" - }, - "740": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2456, 2486], - "op": "SWAP2", - "path": "35" - }, - "741": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2456, 2486], - "op": "SUB", - "path": "35" - }, - "742": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2456, 2486], - "op": "SWAP1", - "path": "35" - }, - "743": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2456, 2486], - "op": "SSTORE", - "path": "35" - }, - "744": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2456, 2481], - "op": "SWAP5", - "path": "35" - }, - "745": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "offset": [2017, 2517], - "op": "SWAP4", - "path": "35" - }, - "746": { - "op": "POP" - }, - "747": { - "op": "POP" - }, - "748": { - "op": "POP" - }, - "749": { - "op": "POP" - }, - "750": { - "fn": "StarknetMessaging.consumeMessageFromL2", - "jump": "o", - "offset": [2017, 2517], - "op": "JUMP", - "path": "35" - }, - "751": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "JUMPDEST", - "path": "35" - }, - "752": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1513, 1520], - "op": "PUSH1", - "path": "35", - "value": "0x0" - }, - "754": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1576, 1584], - "op": "DUP4", - "path": "35", - "statement": 3 - }, - "755": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1564, 1574], - "op": "DUP6", - "path": "35" - }, - "756": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1552, 1562], - "op": "CALLER", - "path": "35" - }, - "757": { - "op": "PUSH1", - "value": "0x1" - }, - "759": { - "op": "PUSH1", - "value": "0x1" - }, - "761": { - "op": "PUSH1", - "value": "0xA0" - }, - "763": { - "op": "SHL" - }, - "764": { - "op": "SUB" - }, - "765": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "AND", - "path": "35" - }, - "766": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "PUSH32", - "path": "35", - "value": "0x474D2456B41FC1146AE05BA36E794E448EFD2F172A9128CA1C8C6DBDB22B62F7" - }, - "799": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1586, 1593], - "op": "DUP7", - "path": "35" - }, - "800": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1586, 1593], - "op": "DUP7", - "path": "35" - }, - "801": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "PUSH1", - "path": "35", - "value": "0x40" - }, - "803": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "MLOAD", - "path": "35" - }, - "804": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "DUP1", - "path": "35" - }, - "805": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "DUP1", - "path": "35" - }, - "806": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "808": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "ADD", - "path": "35" - }, - "809": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "DUP3", - "path": "35" - }, - "810": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "DUP2", - "path": "35" - }, - "811": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "SUB", - "path": "35" - }, - "812": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "DUP3", - "path": "35" - }, - "813": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "MSTORE", - "path": "35" - }, - "814": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "DUP5", - "path": "35" - }, - "815": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "DUP5", - "path": "35" - }, - "816": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "DUP3", - "path": "35" - }, - "817": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "DUP2", - "path": "35" - }, - "818": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "DUP2", - "path": "35" - }, - "819": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "MSTORE", - "path": "35" - }, - "820": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "822": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "ADD", - "path": "35" - }, - "823": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "SWAP3", - "path": "35" - }, - "824": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "POP", - "path": "35" - }, - "825": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "827": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "MUL", - "path": "35" - }, - "828": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "DUP1", - "path": "35" - }, - "829": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "DUP3", - "path": "35" - }, - "830": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "DUP5", - "path": "35" - }, - "831": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "CALLDATACOPY", - "path": "35" - }, - "832": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "PUSH1", - "path": "35", - "value": "0x0" - }, - "834": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "DUP4", - "path": "35" - }, - "835": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "DUP3", - "path": "35" - }, - "836": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "ADD", - "path": "35" - }, - "837": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "MSTORE", - "path": "35" - }, - "838": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "PUSH1", - "path": "35", - "value": "0x40" - }, - "840": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "MLOAD", - "path": "35" - }, - "841": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "PUSH1", - "path": "35", - "value": "0x1F" - }, - "843": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "SWAP1", - "path": "35" - }, - "844": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "SWAP2", - "path": "35" - }, - "845": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "ADD", - "path": "35" - }, - "846": { - "op": "PUSH1", - "value": "0x1F" - }, - "848": { - "op": "NOT" - }, - "849": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "AND", - "path": "35" - }, - "850": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "SWAP1", - "path": "35" - }, - "851": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "SWAP3", - "path": "35" - }, - "852": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "ADD", - "path": "35" - }, - "853": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "DUP3", - "path": "35" - }, - "854": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "SWAP1", - "path": "35" - }, - "855": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "SUB", - "path": "35" - }, - "856": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "SWAP6", - "path": "35" - }, - "857": { - "op": "POP" - }, - "858": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "SWAP1", - "path": "35" - }, - "859": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "SWAP4", - "path": "35" - }, - "860": { - "op": "POP" - }, - "861": { - "op": "POP" - }, - "862": { - "op": "POP" - }, - "863": { - "op": "POP" - }, - "864": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1537, 1594], - "op": "LOG4", - "path": "35" - }, - "865": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1686, 1701], - "op": "PUSH1", - "path": "35", - "value": "0x0" - }, - "867": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1752, 1762], - "op": "CALLER", - "path": "35" - }, - "868": { - "op": "PUSH1", - "value": "0x1" - }, - "870": { - "op": "PUSH1", - "value": "0x1" - }, - "872": { - "op": "PUSH1", - "value": "0xA0" - }, - "874": { - "op": "SHL" - }, - "875": { - "op": "SUB" - }, - "876": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1744, 1763], - "op": "AND", - "path": "35" - }, - "877": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1765, 1775], - "op": "DUP7", - "path": "35" - }, - "878": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1781, 1788], - "op": "DUP6", - "path": "35" - }, - "879": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1781, 1788], - "op": "DUP6", - "path": "35" - }, - "880": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1781, 1795], - "op": "SWAP1", - "path": "35" - }, - "881": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1781, 1795], - "op": "POP", - "path": "35" - }, - "882": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1777, 1778], - "op": "PUSH1", - "path": "35", - "value": "0x1" - }, - "884": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1777, 1795], - "op": "ADD", - "path": "35" - }, - "885": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1797, 1805], - "op": "DUP8", - "path": "35" - }, - "886": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1807, 1814], - "op": "DUP8", - "path": "35" - }, - "887": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1807, 1814], - "op": "DUP8", - "path": "35" - }, - "888": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "PUSH1", - "path": "35", - "value": "0x40" - }, - "890": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "MLOAD", - "path": "35" - }, - "891": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "893": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "ADD", - "path": "35" - }, - "894": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "DUP1", - "path": "35" - }, - "895": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "DUP8", - "path": "35" - }, - "896": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "DUP2", - "path": "35" - }, - "897": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "MSTORE", - "path": "35" - }, - "898": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "900": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "ADD", - "path": "35" - }, - "901": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "DUP7", - "path": "35" - }, - "902": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "DUP2", - "path": "35" - }, - "903": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "MSTORE", - "path": "35" - }, - "904": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "906": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "ADD", - "path": "35" - }, - "907": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "DUP6", - "path": "35" - }, - "908": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "DUP2", - "path": "35" - }, - "909": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "MSTORE", - "path": "35" - }, - "910": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "912": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "ADD", - "path": "35" - }, - "913": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "DUP5", - "path": "35" - }, - "914": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "DUP2", - "path": "35" - }, - "915": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "MSTORE", - "path": "35" - }, - "916": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "918": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "ADD", - "path": "35" - }, - "919": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "DUP4", - "path": "35" - }, - "920": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "DUP4", - "path": "35" - }, - "921": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "923": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "MUL", - "path": "35" - }, - "924": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "DUP1", - "path": "35" - }, - "925": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "DUP3", - "path": "35" - }, - "926": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "DUP5", - "path": "35" - }, - "927": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "CALLDATACOPY", - "path": "35" - }, - "928": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "DUP1", - "path": "35" - }, - "929": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "DUP4", - "path": "35" - }, - "930": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "ADD", - "path": "35" - }, - "931": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "SWAP3", - "path": "35" - }, - "932": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "POP", - "path": "35" - }, - "933": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "POP", - "path": "35" - }, - "934": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "POP", - "path": "35" - }, - "935": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "SWAP7", - "path": "35" - }, - "936": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "POP", - "path": "35" - }, - "937": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "POP", - "path": "35" - }, - "938": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "POP", - "path": "35" - }, - "939": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "POP", - "path": "35" - }, - "940": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "POP", - "path": "35" - }, - "941": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "POP", - "path": "35" - }, - "942": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "POP", - "path": "35" - }, - "943": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "PUSH1", - "path": "35", - "value": "0x40" - }, - "945": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "MLOAD", - "path": "35" - }, - "946": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "948": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "DUP2", - "path": "35" - }, - "949": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "DUP4", - "path": "35" - }, - "950": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "SUB", - "path": "35" - }, - "951": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "SUB", - "path": "35" - }, - "952": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "DUP2", - "path": "35" - }, - "953": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "MSTORE", - "path": "35" - }, - "954": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "SWAP1", - "path": "35" - }, - "955": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "PUSH1", - "path": "35", - "value": "0x40" - }, - "957": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1727, 1815], - "op": "MSTORE", - "path": "35" - }, - "958": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1704, 1825], - "op": "DUP1", - "path": "35" - }, - "959": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1704, 1825], - "op": "MLOAD", - "path": "35" - }, - "960": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1704, 1825], - "op": "SWAP1", - "path": "35" - }, - "961": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1704, 1825], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "963": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1704, 1825], - "op": "ADD", - "path": "35" - }, - "964": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1704, 1825], - "op": "KECCAK256", - "path": "35" - }, - "965": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1686, 1825], - "op": "SWAP1", - "path": "35" - }, - "966": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1686, 1825], - "op": "POP", - "path": "35" - }, - "967": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1864, 1865], - "op": "PUSH1", - "path": "35", - "statement": 4, - "value": "0x1" - }, - "969": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1835, 1851], - "op": "PUSH2", - "path": "35", - "value": "0x3D0" - }, - "972": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1835, 1849], - "op": "PUSH2", - "path": "35", - "value": "0x439" - }, - "975": { - "fn": "StarknetMessaging.sendMessageToL2", - "jump": "i", - "offset": [1835, 1851], - "op": "JUMP", - "path": "35" - }, - "976": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1835, 1851], - "op": "JUMPDEST", - "path": "35" - }, - "977": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1835, 1860], - "op": "PUSH1", - "path": "35", - "value": "0x0" - }, - "979": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1835, 1860], - "op": "DUP4", - "path": "35" - }, - "980": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1835, 1860], - "op": "DUP2", - "path": "35" - }, - "981": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1835, 1860], - "op": "MSTORE", - "path": "35" - }, - "982": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1835, 1860], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "984": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1835, 1860], - "op": "SWAP2", - "path": "35" - }, - "985": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1835, 1860], - "op": "SWAP1", - "path": "35" - }, - "986": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1835, 1860], - "op": "SWAP2", - "path": "35" - }, - "987": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1835, 1860], - "op": "MSTORE", - "path": "35" - }, - "988": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1835, 1860], - "op": "PUSH1", - "path": "35", - "value": "0x40" - }, - "990": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1835, 1860], - "op": "SWAP1", - "path": "35" - }, - "991": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1835, 1860], - "op": "KECCAK256", - "path": "35" - }, - "992": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1835, 1865], - "op": "DUP1", - "path": "35" - }, - "993": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1835, 1865], - "op": "SLOAD", - "path": "35" - }, - "994": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1835, 1865], - "op": "SWAP1", - "path": "35" - }, - "995": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1835, 1865], - "op": "SWAP2", - "path": "35" - }, - "996": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1835, 1865], - "op": "ADD", - "path": "35" - }, - "997": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1835, 1865], - "op": "SWAP1", - "path": "35" - }, - "998": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1835, 1865], - "op": "SSTORE", - "path": "35" - }, - "999": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1852, 1859], - "op": "SWAP1", - "path": "35" - }, - "1000": { - "op": "POP" - }, - "1001": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "SWAP5", - "path": "35" - }, - "1002": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "SWAP4", - "path": "35" - }, - "1003": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "POP", - "path": "35" - }, - "1004": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "POP", - "path": "35" - }, - "1005": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "POP", - "path": "35" - }, - "1006": { - "fn": "StarknetMessaging.sendMessageToL2", - "offset": [1365, 1896], - "op": "POP", - "path": "35" - }, - "1007": { - "fn": "StarknetMessaging.sendMessageToL2", - "jump": "o", - "offset": [1365, 1896], - "op": "JUMP", - "path": "35" - }, - "1008": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [705, 827], - "op": "JUMPDEST", - "path": "35" - }, - "1009": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [769, 776], - "op": "PUSH1", - "path": "35", - "value": "0x0" - }, - "1011": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [795, 811], - "op": "PUSH2", - "path": "35", - "statement": 5, - "value": "0x3FA" - }, - "1014": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [795, 809], - "op": "PUSH2", - "path": "35", - "value": "0x439" - }, - "1017": { - "fn": "StarknetMessaging.l1ToL2Messages", - "jump": "i", - "offset": [795, 811], - "op": "JUMP", - "path": "35" - }, - "1018": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [795, 811], - "op": "JUMPDEST", - "path": "35" - }, - "1019": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [795, 820], - "op": "PUSH1", - "path": "35", - "value": "0x0" - }, - "1021": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [795, 820], - "op": "SWAP3", - "path": "35" - }, - "1022": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [795, 820], - "op": "DUP4", - "path": "35" - }, - "1023": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [795, 820], - "op": "MSTORE", - "path": "35" - }, - "1024": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [795, 820], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "1026": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [795, 820], - "op": "MSTORE", - "path": "35" - }, - "1027": { - "op": "POP" - }, - "1028": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [795, 820], - "op": "PUSH1", - "path": "35", - "value": "0x40" - }, - "1030": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [795, 820], - "op": "SWAP1", - "path": "35" - }, - "1031": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [795, 820], - "op": "KECCAK256", - "path": "35" - }, - "1032": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [795, 820], - "op": "SLOAD", - "path": "35" - }, - "1033": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [795, 820], - "op": "SWAP1", - "path": "35" - }, - "1034": { - "fn": "StarknetMessaging.l1ToL2Messages", - "jump": "o", - "offset": [705, 827], - "op": "JUMP", - "path": "35" - }, - "1035": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [833, 955], - "op": "JUMPDEST", - "path": "35" - }, - "1036": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [897, 904], - "op": "PUSH1", - "path": "35", - "value": "0x0" - }, - "1038": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [923, 939], - "op": "PUSH2", - "path": "35", - "statement": 6, - "value": "0x3FA" - }, - "1041": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [1135, 1303], - "op": "JUMPDEST", - "path": "35" - }, - "1042": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [1184, 1219], - "op": "PUSH1", - "path": "35", - "value": "0x0" - }, - "1044": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [1238, 1296], - "op": "PUSH2", - "path": "35", - "statement": 7, - "value": "0x434" - }, - "1047": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [1275, 1295], - "op": "PUSH1", - "path": "35", - "value": "0x40" - }, - "1049": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [1275, 1295], - "op": "MLOAD", - "path": "35" - }, - "1050": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [1275, 1295], - "op": "DUP1", - "path": "35" - }, - "1051": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [1275, 1295], - "op": "PUSH1", - "path": "35", - "value": "0x60" - }, - "1053": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [1275, 1295], - "op": "ADD", - "path": "35" - }, - "1054": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [1275, 1295], - "op": "PUSH1", - "path": "35", - "value": "0x40" - }, - "1056": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [1275, 1295], - "op": "MSTORE", - "path": "35" - }, - "1057": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [1275, 1295], - "op": "DUP1", - "path": "35" - }, - "1058": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [1275, 1295], - "op": "PUSH1", - "path": "35", - "value": "0x23" - }, - "1060": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [1275, 1295], - "op": "DUP2", - "path": "35" - }, - "1061": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [1275, 1295], - "op": "MSTORE", - "path": "35" - }, - "1062": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [1275, 1295], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "1064": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [1275, 1295], - "op": "ADD", - "path": "35" - }, - "1065": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [1275, 1295], - "op": "PUSH2", - "path": "35", - "value": "0x4F8" - }, - "1068": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [1275, 1295], - "op": "PUSH1", - "path": "35", - "value": "0x23" - }, - "1070": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [1275, 1295], - "op": "SWAP2", - "path": "35" - }, - "1071": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [1275, 1295], - "op": "CODECOPY", - "path": "35" - }, - "1072": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [1238, 1274], - "op": "PUSH2", - "path": "35", - "value": "0x458" - }, - "1075": { - "fn": "StarknetMessaging.l2ToL1Messages", - "jump": "i", - "offset": [1238, 1296], - "op": "JUMP", - "path": "35" - }, - "1076": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [1238, 1296], - "op": "JUMPDEST", - "path": "35" - }, - "1077": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [1231, 1296], - "op": "SWAP1", - "path": "35" - }, - "1078": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [1231, 1296], - "op": "POP", - "path": "35" - }, - "1079": { - "fn": "StarknetMessaging.l2ToL1Messages", - "offset": [1135, 1303], - "op": "SWAP1", - "path": "35" - }, - "1080": { - "fn": "StarknetMessaging.l2ToL1Messages", - "jump": "o", - "offset": [1135, 1303], - "op": "JUMP", - "path": "35" - }, - "1081": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [961, 1129], - "op": "JUMPDEST", - "path": "35" - }, - "1082": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [1010, 1045], - "op": "PUSH1", - "path": "35", - "value": "0x0" - }, - "1084": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [1064, 1122], - "op": "PUSH2", - "path": "35", - "statement": 8, - "value": "0x434" - }, - "1087": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [1101, 1121], - "op": "PUSH1", - "path": "35", - "value": "0x40" - }, - "1089": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [1101, 1121], - "op": "MLOAD", - "path": "35" - }, - "1090": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [1101, 1121], - "op": "DUP1", - "path": "35" - }, - "1091": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [1101, 1121], - "op": "PUSH1", - "path": "35", - "value": "0x60" - }, - "1093": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [1101, 1121], - "op": "ADD", - "path": "35" - }, - "1094": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [1101, 1121], - "op": "PUSH1", - "path": "35", - "value": "0x40" - }, - "1096": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [1101, 1121], - "op": "MSTORE", - "path": "35" - }, - "1097": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [1101, 1121], - "op": "DUP1", - "path": "35" - }, - "1098": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [1101, 1121], - "op": "PUSH1", - "path": "35", - "value": "0x23" - }, - "1100": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [1101, 1121], - "op": "DUP2", - "path": "35" - }, - "1101": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [1101, 1121], - "op": "MSTORE", - "path": "35" - }, - "1102": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [1101, 1121], - "op": "PUSH1", - "path": "35", - "value": "0x20" - }, - "1104": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [1101, 1121], - "op": "ADD", - "path": "35" - }, - "1105": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [1101, 1121], - "op": "PUSH2", - "path": "35", - "value": "0x4D5" - }, - "1108": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [1101, 1121], - "op": "PUSH1", - "path": "35", - "value": "0x23" - }, - "1110": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [1101, 1121], - "op": "SWAP2", - "path": "35" - }, - "1111": { - "fn": "StarknetMessaging.l1ToL2Messages", - "offset": [1101, 1121], - "op": "CODECOPY", - "path": "35" - }, - "1112": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [258, 556], - "op": "JUMPDEST", - "path": "0" - }, - "1113": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [358, 408], - "op": "PUSH1", - "path": "0", - "value": "0x0" - }, - "1115": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [424, 440], - "op": "DUP1", - "path": "0" - }, - "1116": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [470, 474], - "op": "DUP3", - "path": "0" - }, - "1117": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "PUSH1", - "path": "0", - "value": "0x40" - }, - "1119": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "MLOAD", - "path": "0" - }, - "1120": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "1122": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "ADD", - "path": "0" - }, - "1123": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "DUP1", - "path": "0" - }, - "1124": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "DUP3", - "path": "0" - }, - "1125": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "DUP1", - "path": "0" - }, - "1126": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "MLOAD", - "path": "0" - }, - "1127": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "SWAP1", - "path": "0" - }, - "1128": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "1130": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "ADD", - "path": "0" - }, - "1131": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "SWAP1", - "path": "0" - }, - "1132": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "DUP1", - "path": "0" - }, - "1133": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "DUP4", - "path": "0" - }, - "1134": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "DUP4", - "path": "0" - }, - "1135": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "JUMPDEST", - "path": "0" - }, - "1136": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "1138": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "DUP4", - "path": "0" - }, - "1139": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "LT", - "path": "0" - }, - "1140": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "PUSH2", - "path": "0", - "value": "0x48E" - }, - "1143": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "JUMPI", - "path": "0" - }, - "1144": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "DUP1", - "path": "0" - }, - "1145": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "MLOAD", - "path": "0" - }, - "1146": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "DUP3", - "path": "0" - }, - "1147": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "MSTORE", - "path": "0" - }, - "1148": { - "op": "PUSH1", - "value": "0x1F" - }, - "1150": { - "op": "NOT" - }, - "1151": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "SWAP1", - "path": "0" - }, - "1152": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "SWAP3", - "path": "0" - }, - "1153": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "ADD", - "path": "0" - }, - "1154": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "SWAP2", - "path": "0" - }, - "1155": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "1157": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "SWAP2", - "path": "0" - }, - "1158": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "DUP3", - "path": "0" - }, - "1159": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "ADD", - "path": "0" - }, - "1160": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "SWAP2", - "path": "0" - }, - "1161": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "ADD", - "path": "0" - }, - "1162": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "PUSH2", - "path": "0", - "value": "0x46F" - }, - "1165": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "JUMP", - "path": "0" - }, - "1166": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "JUMPDEST", - "path": "0" - }, - "1167": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "PUSH1", - "path": "0", - "value": "0x1" - }, - "1169": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "DUP4", - "path": "0" - }, - "1170": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "1172": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "SUB", - "path": "0" - }, - "1173": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "PUSH2", - "path": "0", - "value": "0x100" - }, - "1176": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "EXP", - "path": "0" - }, - "1177": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "SUB", - "path": "0" - }, - "1178": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "DUP1", - "path": "0" - }, - "1179": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "NOT", - "path": "0" - }, - "1180": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "DUP3", - "path": "0" - }, - "1181": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "MLOAD", - "path": "0" - }, - "1182": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "AND", - "path": "0" - }, - "1183": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "DUP2", - "path": "0" - }, - "1184": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "DUP5", - "path": "0" - }, - "1185": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "MLOAD", - "path": "0" - }, - "1186": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "AND", - "path": "0" - }, - "1187": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "DUP1", - "path": "0" - }, - "1188": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "DUP3", - "path": "0" - }, - "1189": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "OR", - "path": "0" - }, - "1190": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "DUP6", - "path": "0" - }, - "1191": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "MSTORE", - "path": "0" - }, - "1192": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "POP", - "path": "0" - }, - "1193": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "POP", - "path": "0" - }, - "1194": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "POP", - "path": "0" - }, - "1195": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "POP", - "path": "0" - }, - "1196": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "POP", - "path": "0" - }, - "1197": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "POP", - "path": "0" - }, - "1198": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "SWAP1", - "path": "0" - }, - "1199": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "POP", - "path": "0" - }, - "1200": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "ADD", - "path": "0" - }, - "1201": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "SWAP2", - "path": "0" - }, - "1202": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "POP", - "path": "0" - }, - "1203": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "POP", - "path": "0" - }, - "1204": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "PUSH1", - "path": "0", - "value": "0x40" - }, - "1206": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "MLOAD", - "path": "0" - }, - "1207": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "1209": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "DUP2", - "path": "0" - }, - "1210": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "DUP4", - "path": "0" - }, - "1211": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "SUB", - "path": "0" - }, - "1212": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "SUB", - "path": "0" - }, - "1213": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "DUP2", - "path": "0" - }, - "1214": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "MSTORE", - "path": "0" - }, - "1215": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "SWAP1", - "path": "0" - }, - "1216": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "PUSH1", - "path": "0", - "value": "0x40" - }, - "1218": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [453, 475], - "op": "MSTORE", - "path": "0" - }, - "1219": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [443, 476], - "op": "DUP1", - "path": "0" - }, - "1220": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [443, 476], - "op": "MLOAD", - "path": "0" - }, - "1221": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [443, 476], - "op": "SWAP1", - "path": "0" - }, - "1222": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [443, 476], - "op": "PUSH1", - "path": "0", - "value": "0x20" - }, - "1224": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [443, 476], - "op": "ADD", - "path": "0" - }, - "1225": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [443, 476], - "op": "KECCAK256", - "path": "0" - }, - "1226": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [424, 476], - "op": "SWAP1", - "path": "0" - }, - "1227": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [424, 476], - "op": "POP", - "path": "0" - }, - "1228": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [532, 540], - "op": "DUP1", - "path": "0" - }, - "1229": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [509, 540], - "op": "SWAP2", - "path": "0" - }, - "1230": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [509, 540], - "op": "POP", - "path": "0" - }, - "1231": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [495, 550], - "op": "POP", - "path": "0" - }, - "1232": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [495, 550], - "op": "SWAP2", - "path": "0" - }, - "1233": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [495, 550], - "op": "SWAP1", - "path": "0" - }, - "1234": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "offset": [495, 550], - "op": "POP", - "path": "0" - }, - "1235": { - "fn": "NamedStorage.bytes32ToUint256Mapping", - "jump": "o", - "offset": [495, 550], - "op": "JUMP", - "path": "0" - } - }, - "sha1": "38417e6940d7e638497154b57e8e6209ddc76fc3", - "source": "// SPDX-License-Identifier: Apache-2.0.\npragma solidity ^0.6.12;\n\nimport \"./IStarknetMessaging.sol\";\nimport \"contracts/common-contracts/src/libraries/NamedStorage.sol\";\n\n/**\n Implements sending messages to L2 by adding them to a pipe and consuming messages from L2 by\n removing them from a different pipe. A deriving contract can handle the former pipe and add items\n to the latter pipe while interacting with L2.\n*/\ncontract StarknetMessaging is IStarknetMessaging {\n /**\n Random slot storage elements and accessors.\n */\n string constant L1L2_MESSAGE_MAP_TAG = \"STARKNET_1.0_MSGING_L1TOL2_MAPPPING\";\n string constant L2L1_MESSAGE_MAP_TAG = \"STARKNET_1.0_MSGING_L2TOL1_MAPPPING\";\n\n function l1ToL2Messages(bytes32 msgHash) external view returns (uint256) {\n return l1ToL2Messages()[msgHash];\n }\n\n function l2ToL1Messages(bytes32 msgHash) external view returns (uint256) {\n return l2ToL1Messages()[msgHash];\n }\n\n function l1ToL2Messages() internal pure returns (mapping(bytes32 => uint256) storage) {\n return NamedStorage.bytes32ToUint256Mapping(L1L2_MESSAGE_MAP_TAG);\n }\n\n function l2ToL1Messages() internal pure returns (mapping(bytes32 => uint256) storage) {\n return NamedStorage.bytes32ToUint256Mapping(L2L1_MESSAGE_MAP_TAG);\n }\n\n /**\n Sends a message to an L2 contract.\n */\n function sendMessageToL2(\n uint256 to_address,\n uint256 selector,\n uint256[] calldata payload\n ) external override returns (bytes32) {\n emit LogMessageToL2(msg.sender, to_address, selector, payload);\n // Note that the selector (a single integer) is prepended to the payload.\n bytes32 msgHash = keccak256(\n abi.encodePacked(uint256(msg.sender), to_address, 1 + payload.length, selector, payload)\n );\n l1ToL2Messages()[msgHash] += 1;\n return msgHash;\n }\n\n /**\n Consumes a message that was sent from an L2 contract.\n\n Returns the hash of the message.\n */\n function consumeMessageFromL2(uint256 from_address, uint256[] calldata payload)\n external\n override\n returns (bytes32)\n {\n bytes32 msgHash = keccak256(\n abi.encodePacked(from_address, uint256(msg.sender), payload.length, payload)\n );\n\n require(l2ToL1Messages()[msgHash] > 0, \"INVALID_MESSAGE_TO_CONSUME\");\n emit ConsumedMessageToL1(from_address, msg.sender, payload);\n l2ToL1Messages()[msgHash] -= 1;\n return msgHash;\n }\n}\n", - "sourceMap": "420:2099:35:-:0;;;;;;;;;;;;;;;;;;;", - "sourcePath": "contracts/starkware/starknet/eth/StarknetMessaging.sol", - "type": "contract" -} diff --git a/src/contracts/index.js b/src/contracts/index.js deleted file mode 100644 index 4788ba19..00000000 --- a/src/contracts/index.js +++ /dev/null @@ -1,4 +0,0 @@ -export * from './ERC20/ERC20'; -export * from './StarknetMessaging/StarknetMessaging'; -export * from './StarknetERC20Bridge/StarknetERC20Bridge'; -export * from './StarknetEthBridge/StarknetEthBridge'; diff --git a/src/hooks/index.js b/src/hooks/index.js index d89aff8b..5fbc607b 100644 --- a/src/hooks/index.js +++ b/src/hooks/index.js @@ -4,4 +4,5 @@ export * from './useWindowSize'; export * from './useVars'; export * from './useColors'; export * from './useTokens'; +export * from './useContract'; export * from './useWalletHandlerProvider'; diff --git a/src/hooks/useContract.js b/src/hooks/useContract.js new file mode 100644 index 00000000..bbc969f4 --- /dev/null +++ b/src/hooks/useContract.js @@ -0,0 +1,81 @@ +import {useMemo} from 'react'; + +import {ERC20_ABI, ERC20_BRIDGE_ABI, ETH_BRIDGE_ABI, MESSAGING_ABI} from '../abis/ethereum'; +import {STARKNET_ERC20_ABI, STARKNET_ERC20_BRIDGE_ABI} from '../abis/starknet'; +import {useTransferData} from '../components/Features/Transfer/Transfer/Transfer.hooks'; +import { + ERC20_BRIDGE_CONTRACT_ADDRESS, + ETH_BRIDGE_CONTRACT_ADDRESS, + MESSAGING_CONTRACT_ADDRESS +} from '../config/contracts/contracts.ethereum'; +import {STARKNET_ERC20_BRIDGE_CONTRACT_ADDRESS} from '../config/contracts/contracts.starknet'; +import {useCombineWallets} from '../providers/CombineWalletsProvider/hooks'; +import {getContract, getStarknetContract} from '../utils/contract'; + +export const useContract = (addressOrAddressMap, ABI) => { + const {chainId} = useCombineWallets(); + + return useMemo(() => { + if (!addressOrAddressMap || !ABI || !chainId) return null; + let address; + if (typeof addressOrAddressMap === 'string') { + address = addressOrAddressMap; + } else { + address = addressOrAddressMap[chainId]; + } + if (!address) return null; + try { + return getContract(address, ABI); + } catch (ex) { + return null; + } + }, [addressOrAddressMap, ABI, chainId]); +}; + +export const useStarknetContract = (addressOrAddressMap, ABI) => { + const {chainId} = useCombineWallets(); + + return useMemo(() => { + if (!addressOrAddressMap || !ABI || !chainId) return null; + let address; + if (typeof addressOrAddressMap === 'string') { + address = addressOrAddressMap; + } else { + address = addressOrAddressMap[chainId]; + } + if (!address) return null; + try { + return getStarknetContract(address, ABI); + } catch (ex) { + return null; + } + }, [addressOrAddressMap, ABI, chainId]); +}; + +export const useTokenContract = tokenAddresses => { + const tokenContract = useContract(tokenAddresses, ERC20_ABI); + const starknetTokenContract = useStarknetContract(tokenAddresses, STARKNET_ERC20_ABI); + const {isEthereum} = useTransferData(); + return useMemo(() => (isEthereum ? tokenContract : starknetTokenContract), [isEthereum]); +}; + +export const useTokenBridgeContract = () => { + const tokenBridgeContract = useContract(ERC20_BRIDGE_CONTRACT_ADDRESS, ERC20_BRIDGE_ABI); + const starknetTokenBridgeContract = useContract( + STARKNET_ERC20_BRIDGE_CONTRACT_ADDRESS, + STARKNET_ERC20_BRIDGE_ABI + ); + const {isEthereum} = useTransferData(); + return useMemo( + () => (isEthereum ? tokenBridgeContract : starknetTokenBridgeContract), + [isEthereum] + ); +}; + +export const useEthBridgeContract = () => { + return useContract(ETH_BRIDGE_CONTRACT_ADDRESS, ETH_BRIDGE_ABI); +}; + +export const useMessagingContract = () => { + return useContract(MESSAGING_CONTRACT_ADDRESS, MESSAGING_ABI); +}; diff --git a/src/hooks/useTokenBalance.js b/src/hooks/useTokenBalance.js new file mode 100644 index 00000000..51cff214 --- /dev/null +++ b/src/hooks/useTokenBalance.js @@ -0,0 +1,24 @@ +import {useCallback} from 'react'; +import {uint256} from 'starknet'; + +import {useTransferData} from '../components/Features/Transfer/Transfer/Transfer.hooks'; +import {callContract, callStarknetContract} from '../utils/contract'; +import {web3} from '../web3'; +import {useTokenContract} from './useContract'; + +export const useTokenBalance = tokenAddresses => { + const contract = useTokenContract(tokenAddresses); + const {isEthereum} = useTransferData(); + + return useCallback( + async account => { + if (isEthereum) { + const balance = await callContract(contract, 'balanceOf', [account]); + return Number(web3.utils.fromWei(balance)); + } + const {balance} = await callStarknetContract(contract, 'balance_of', [{account}]); + return uint256.uint256ToBN(balance).toNumber(); + }, + [isEthereum] + ); +}; diff --git a/src/hooks/useTokens.js b/src/hooks/useTokens.js index 0154af0f..59adb11a 100644 --- a/src/hooks/useTokens.js +++ b/src/hooks/useTokens.js @@ -1,97 +1,16 @@ -import {getStarknet} from '@argent/get-starknet'; import {useEffect, useState} from 'react'; -import {Contract, uint256} from 'starknet'; import {useTransferData} from '../components/Features/Transfer/Transfer/Transfer.hooks'; -import {createERC20Contract} from '../contracts'; -import {abi} from '../contracts/ERC20/ERC20_STARKNET.json'; -import {ChainType, NetworkType} from '../enums'; -import {useCombineWallets} from '../providers/CombineWalletsProvider/hooks'; -import {web3} from '../web3'; +import TokensEthereum from '../config/tokens/tokens.ethereum'; +import TokensStarknet from '../config/tokens/tokens.starknet'; export const useTokens = () => { const {action, isEthereum} = useTransferData(); - const {account, chainName} = useCombineWallets(); - const [tokensData, setTokensData] = useState([]); - const [isLoading, setIsLoading] = useState(true); - const [error, setError] = useState(null); + const [tokens, setTokens] = useState([]); - useEffect(async () => { - setIsLoading(true); - setError(null); - try { - let tokens = []; - if (isEthereum) { - tokens = await getL1Tokens(); - readBalances(tokens, getL1TokenBalance); - } else { - tokens = await getL2Tokens(); - readBalances(tokens, getL2TokenBalance); - } - setTokensData(tokens); - } catch (err) { - setError(err); - } finally { - setIsLoading(false); - } + useEffect(() => { + setTokens(isEthereum ? TokensEthereum : TokensStarknet); }, [action]); - const getL1Tokens = async () => { - const fileName = - chainName === ChainType.MAIN.name ? 'ethereum.json' : `ethereum.${chainName}.json`; - return [NetworkType.ETHEREUM, ...(await import(`../config/tokens/${fileName}`)).default]; - }; - - const getL2Tokens = async () => { - const fileName = - chainName === ChainType.MAIN.name ? 'starknet.json' : `starknet.${chainName}.json`; - return [...(await import(`../config/tokens/${fileName}`)).default]; - }; - - const getL1TokenBalance = async token => { - let balance; - const {symbol, address} = token; - if (symbol === NetworkType.ETHEREUM.symbol) { - balance = await web3.eth.getBalance(account); - } else { - const contract = createERC20Contract(address); - balance = await contract.methods.balanceOf(account).call(); - } - return formatBalance(balance); - }; - - const getL2TokenBalance = async token => { - const {address} = token; - const starknet = getStarknet(); - const contract = new Contract(abi, address, starknet.provider); - const response = await contract.call('balance_of', {account}); - const {balance} = response; - const balanceAsBN = uint256.uint256ToBN(balance); - return balanceAsBN.toNumber(); - }; - - const formatBalance = balance => Number(web3.utils.fromWei(balance)); - - const readBalances = (tokens, getBalanceHandler) => { - const promises = []; - tokens.forEach(token => promises.push(getBalanceHandler(token))); - waitForBalance(tokens, promises); - }; - - const waitForBalance = (tokens, promises) => { - Promise.all(promises).then(balances => { - const tokensWithBalance = []; - balances.forEach((balance, index) => { - const token = {...tokens[index], balance}; - tokensWithBalance.push(token); - }); - setTokensData(tokensWithBalance); - }); - }; - - return { - error, - isLoading, - tokensData - }; + return tokens; }; diff --git a/src/hooks/useWalletHandlerProvider.js b/src/hooks/useWalletHandlerProvider.js index 3241ae5f..fc9bebe4 100644 --- a/src/hooks/useWalletHandlerProvider.js +++ b/src/hooks/useWalletHandlerProvider.js @@ -1,6 +1,6 @@ import {useEffect, useState} from 'react'; -import wallets from '../config/wallets.json'; +import WalletsConfig from '../config/wallets.js'; import {ArgentHandler, MetaMaskHandler} from '../services'; const SUPPORTED_HANDLERS_REGISTRY = { @@ -13,7 +13,7 @@ export const useWalletHandlerProvider = () => { useEffect(() => { const walletHandlers = []; - wallets.forEach(walletConfig => { + WalletsConfig.forEach(walletConfig => { const {id} = walletConfig; const WalletHandler = SUPPORTED_HANDLERS_REGISTRY[id]; if (WalletHandler) { diff --git a/src/providers/CombineWalletsProvider/CombineWalletsProvider.js b/src/providers/CombineWalletsProvider/CombineWalletsProvider.js index e16b21a6..80b2eb3e 100644 --- a/src/providers/CombineWalletsProvider/CombineWalletsProvider.js +++ b/src/providers/CombineWalletsProvider/CombineWalletsProvider.js @@ -8,6 +8,7 @@ import { useIsStarknet } from '../../components/Features/Transfer/Transfer/Transfer.hooks'; import {WalletStatus} from '../../enums'; +import {web3} from '../../web3'; import {CombineWalletsContext} from './context'; import {actions, initialState, reducer} from './reducer'; @@ -82,7 +83,8 @@ export const CombineWalletsProvider = ({children}) => { chainId, error: serialError, chainName: networkName, - isConnected: isConnected() + isConnected: isConnected(), + library: web3 }); }; @@ -92,8 +94,8 @@ export const CombineWalletsProvider = ({children}) => { try { await enable(); status = WalletStatus.CONNECTED; - } catch (err) { - error = err; + } catch (ex) { + error = ex; status = WalletStatus.ERROR; } finally { updateStarknetWallet({ @@ -102,7 +104,8 @@ export const CombineWalletsProvider = ({children}) => { error, isConnected: isStarknetConnected, account: selectedAddress, - chainName: networkName + chainName: networkName, + library: getStarknet() }); } }; diff --git a/src/providers/combine-providers.js b/src/providers/combine-providers.js index b5881d18..ca6e8f54 100644 --- a/src/providers/combine-providers.js +++ b/src/providers/combine-providers.js @@ -1,6 +1,7 @@ import React from 'react'; export const combineProviders = providers => + /* eslint-disable-next-line react/display-name, react/prop-types */ providers.reduce((Combined, Provider) => ({children}) => ( <Combined> <Provider>{children}</Provider> diff --git a/src/services/storage-manager.js b/src/services/storage-manager.js index e28c0991..092d7c17 100644 --- a/src/services/storage-manager.js +++ b/src/services/storage-manager.js @@ -12,7 +12,7 @@ export const StorageManager = { if (item) { try { return JSON.parse(item); - } catch (e) { + } catch (ex) { return item; } } diff --git a/src/utils/contract.js b/src/utils/contract.js new file mode 100644 index 00000000..e3ef76ae --- /dev/null +++ b/src/utils/contract.js @@ -0,0 +1,33 @@ +import {getStarknet} from '@argent/get-starknet'; +import {Contract} from 'starknet'; + +import {web3} from '../web3'; + +export const getContract = (address, ABI) => new web3.eth.Contract(ABI, address); + +export const callContract = async (contract, method, args) => { + try { + return await contract.methods?.[method](...args).call(); + } catch (ex) { + return ex; + } +}; + +export const sendTransaction = async (contract, method, args, account) => { + try { + return contract.methods?.[method](...args).send({from: account}); + } catch (ex) { + return ex; + } +}; + +export const getStarknetContract = (address, ABI) => + new Contract(ABI, address, getStarknet().provider); + +export const callStarknetContract = async (contract, method, args) => { + try { + return await contract.call(method, ...args); + } catch (ex) { + return ex; + } +}; diff --git a/src/utils/string.js b/src/utils/string.js index 591f3cee..98b05664 100644 --- a/src/utils/string.js +++ b/src/utils/string.js @@ -13,7 +13,7 @@ export const evaluate = (template, model) => { res = res.replace(reg, value); } return res; - } catch (e) { + } catch (ex) { return ''; } }; From c5250d9a260c4dea4feba73f1122167ba66a19a2 Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Thu, 9 Dec 2021 12:28:32 +0000 Subject: [PATCH 008/211] chore(release): 0.0.2-0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b88f0f2f..ee0108f9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starknet-bridge", - "version": "0.0.1", + "version": "0.0.2-0", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 73743ff6246f8e72219ed1f248759fa7bb2c31aa Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Mon, 13 Dec 2021 12:22:25 +0200 Subject: [PATCH 009/211] refactor(header): chain name label [skip ci] --- src/components/Containers/Header/Header.js | 8 +++- .../Containers/Header/Header.module.scss | 38 ++++++++++++++----- 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/src/components/Containers/Header/Header.js b/src/components/Containers/Header/Header.js index 06f67ee6..30e2b9c4 100644 --- a/src/components/Containers/Header/Header.js +++ b/src/components/Containers/Header/Header.js @@ -17,13 +17,17 @@ export const Header = () => { return ( <div className={toClasses(styles.header, 'row')}> <div className={toClasses(styles.left, 'row')}> - <img alt="" height={STARKNET_LOGO_SIZE} src={StarkNetLogoPath} /> + <div className={toClasses(styles.logo, 'row')}> + <img alt="" height={STARKNET_LOGO_SIZE} src={StarkNetLogoPath} /> + <div className={styles.bridge}>Bridge</div> + </div> {chainName && ( - <div className={styles.chain}> + <div className={toClasses(styles.chain, 'row')}> {chainName !== ChainType.MAIN.name && CHAIN_TXT(chainName)} </div> )} </div> + <div className={toClasses(styles.right, 'row')}> {isConnected && ( <WalletButton account={account} logoPath={config?.logoPath} onClick={showAccountMenu} /> diff --git a/src/components/Containers/Header/Header.module.scss b/src/components/Containers/Header/Header.module.scss index 5ccc6ce7..7b8ea6f1 100644 --- a/src/components/Containers/Header/Header.module.scss +++ b/src/components/Containers/Header/Header.module.scss @@ -2,7 +2,8 @@ $height: $--header-height; $background-color: $--color-alpha-5; -$chain-color: $--color-beta; +$chain-color: $--color-white-1; +$bridge-color: $--color-beta; .header { height: #{$height}px; @@ -11,17 +12,34 @@ $chain-color: $--color-beta; padding: 0 40px; background: $background-color; box-shadow: 0 4px 30px rgba(0, 0, 0, 0.05); - - .chain { - color: $chain-color; - margin: 5px 10px 0 10px; - font-size: 15px; - font-weight: 500; - opacity: 0.8; - text-transform: capitalize; - } + transition: 0.3s ease-in-out; .left { + display: flex; + flex-direction: column; + align-items: flex-start; + + .logo { + transition: 0.3s ease-in-out; + .bridge { + transition: 0.3s ease-in-out; + font-family: $--primary-font; + margin-left: 8px; + font-weight: bold; + font-size: 26px; + line-height: 1; + color: $bridge-color; + } + } + + .chain { + transition: 0.3s ease-in-out; + color: $chain-color; + font-size: 13px; + font-weight: 500; + opacity: 0.6; + text-transform: capitalize; + } } .right { From 4fd1d92f486b6773a3b918a766a7adb0e16e7f6e Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 14 Dec 2021 11:19:43 +0200 Subject: [PATCH 010/211] fix: bug fixes [skip ci] --- src/abis/ethereum/erc20.json | 13 ++ src/abis/starknet/erc20.json | 143 +++++++++++++----- src/api/bridge.js | 9 ++ src/api/erc20.js | 17 +++ src/assets/svg/icons/close.svg | 3 + src/components/Containers/Header/Header.js | 48 +++++- .../Containers/Header/Header.module.scss | 7 + src/components/Containers/Main/Main.js | 9 +- .../Account/Account/Account.constants.js | 5 +- .../Features/Account/Account/Account.js | 26 +++- .../Account/TransferLog/TransferLog.js | 4 +- src/components/Features/Bridge/Bridge.js | 6 +- .../Features/Bridge/Bridge.slice.js | 2 +- src/components/Features/Login/Login/Login.js | 42 ++--- .../Features/Login/Login/Login.strings.js | 3 + .../ModalProvider.hooks.js | 26 ++-- .../{ModalProvider => }/ModalProvider.js | 8 +- .../ModalProvider.selectors.js | 0 .../ModalProvider.slice.js | 1 + .../WalletConnectionModal.js | 28 ---- .../WalletConnectionModal.module.scss | 5 - .../WalletConnectionModal.strings.js | 4 - .../Features/ModalProvider/index.js | 2 - .../SelectTokenRow/SelectTokenRow.js | 15 +- .../Transfer/Transfer/Transfer.hooks.js | 3 +- .../Features/Transfer/Transfer/Transfer.js | 60 ++++++-- .../Transfer/Transfer/Transfer.strings.js | 1 + .../Transfer/TransferButton/TransferButton.js | 8 +- src/components/Features/index.js | 2 +- src/components/UI/Button/Button.js | 12 +- src/components/UI/Button/Button.module.scss | 4 + src/components/UI/Circle/Circle.module.scss | 1 + .../UI/Modal/ModalHeader/ModalHeader.js | 10 +- .../Modal/ModalHeader/ModalHeader.module.scss | 8 + .../UI/ProgressModal/ProgressModal.js | 27 ++++ .../ProgressModal/ProgressModal.module.scss | 5 + .../TransactionSubmittedModal.constants.js | 7 + .../TransactionSubmittedModal.js | 53 +++++++ .../TransactionSubmittedModal.strings.js | 1 + .../UI/WalletButton/WalletButton.js | 4 +- src/components/UI/index.js | 2 + src/config/tokens/tokens.starknet.js | 3 +- src/enums/ChainType.js | 2 +- src/enums/TransactionStatus.js | 5 + src/enums/index.js | 1 + src/hooks/index.js | 3 + src/hooks/useContract.js | 6 +- src/hooks/useLogger.js | 3 + src/hooks/useTokenBalance.js | 2 +- src/hooks/useTransferToStarknet.js | 80 ++++++++++ src/index.js | 8 + .../CombineWalletsProvider/context.js | 29 ---- src/providers/CombineWalletsProvider/hooks.js | 41 ----- .../TransactionsProvider.js | 37 +++++ src/providers/TransactionsProvider/context.js | 8 + src/providers/TransactionsProvider/hooks.js | 9 ++ src/providers/TransactionsProvider/reducer.js | 19 +++ .../WalletsProvider.js} | 68 +++++---- src/providers/WalletsProvider/context.js | 14 ++ src/providers/WalletsProvider/hooks.js | 51 +++++++ .../reducer.js | 29 ++-- src/providers/index.js | 6 +- src/store/store.js | 2 +- src/styles/colors.module.scss | 1 + src/utils/browser.js | 7 + src/utils/contract.js | 12 ++ src/utils/hash.js | 64 ++++++++ src/utils/index.js | 10 ++ src/utils/wallet.js | 2 +- 69 files changed, 861 insertions(+), 295 deletions(-) create mode 100644 src/api/bridge.js create mode 100644 src/api/erc20.js create mode 100644 src/assets/svg/icons/close.svg rename src/components/Features/ModalProvider/{ModalProvider => }/ModalProvider.hooks.js (58%) rename src/components/Features/ModalProvider/{ModalProvider => }/ModalProvider.js (78%) rename src/components/Features/ModalProvider/{ModalProvider => }/ModalProvider.selectors.js (100%) rename src/components/Features/ModalProvider/{ModalProvider => }/ModalProvider.slice.js (96%) delete mode 100644 src/components/Features/ModalProvider/WalletConnectionModal/WalletConnectionModal.js delete mode 100644 src/components/Features/ModalProvider/WalletConnectionModal/WalletConnectionModal.module.scss delete mode 100644 src/components/Features/ModalProvider/WalletConnectionModal/WalletConnectionModal.strings.js delete mode 100644 src/components/Features/ModalProvider/index.js create mode 100644 src/components/UI/ProgressModal/ProgressModal.js create mode 100644 src/components/UI/ProgressModal/ProgressModal.module.scss create mode 100644 src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.constants.js create mode 100644 src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.js create mode 100644 src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.strings.js create mode 100644 src/enums/TransactionStatus.js create mode 100644 src/hooks/useLogger.js create mode 100644 src/hooks/useTransferToStarknet.js delete mode 100644 src/providers/CombineWalletsProvider/context.js delete mode 100644 src/providers/CombineWalletsProvider/hooks.js create mode 100644 src/providers/TransactionsProvider/TransactionsProvider.js create mode 100644 src/providers/TransactionsProvider/context.js create mode 100644 src/providers/TransactionsProvider/hooks.js create mode 100644 src/providers/TransactionsProvider/reducer.js rename src/providers/{CombineWalletsProvider/CombineWalletsProvider.js => WalletsProvider/WalletsProvider.js} (70%) create mode 100644 src/providers/WalletsProvider/context.js create mode 100644 src/providers/WalletsProvider/hooks.js rename src/providers/{CombineWalletsProvider => WalletsProvider}/reducer.js (78%) create mode 100644 src/utils/hash.js diff --git a/src/abis/ethereum/erc20.json b/src/abis/ethereum/erc20.json index d192cb03..f13d777b 100644 --- a/src/abis/ethereum/erc20.json +++ b/src/abis/ethereum/erc20.json @@ -229,5 +229,18 @@ ], "stateMutability": "nonpayable", "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "decimals", + "outputs": [ + { + "name": "", + "type": "uint8" + } + ], + "payable": false, + "type": "function" } ] diff --git a/src/abis/starknet/erc20.json b/src/abis/starknet/erc20.json index 03bf07af..520d570e 100644 --- a/src/abis/starknet/erc20.json +++ b/src/abis/starknet/erc20.json @@ -18,6 +18,14 @@ }, { "inputs": [ + { + "name": "name", + "type": "felt" + }, + { + "name": "symbol", + "type": "felt" + }, { "name": "governance_account_address", "type": "felt" @@ -29,10 +37,34 @@ }, { "inputs": [], - "name": "governance_address", + "name": "governance", + "outputs": [ + { + "name": "governance", + "type": "felt" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "permittedMinter", + "outputs": [ + { + "name": "minter", + "type": "felt" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", "outputs": [ { - "name": "res", + "name": "name", "type": "felt" } ], @@ -41,16 +73,40 @@ }, { "inputs": [], - "name": "total_supply", + "name": "symbol", "outputs": [ { - "name": "res", + "name": "symbol", + "type": "felt" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "name": "totalSupply", "type": "Uint256" } ], "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "name": "decimals", + "type": "felt" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -58,7 +114,7 @@ "type": "felt" } ], - "name": "balance_of", + "name": "balanceOf", "outputs": [ { "name": "balance", @@ -82,25 +138,13 @@ "name": "allowance", "outputs": [ { - "name": "allowance", + "name": "remaining", "type": "Uint256" } ], "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "permitted_minter", - "outputs": [ - { - "name": "res", - "type": "felt" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -108,14 +152,14 @@ "type": "felt" } ], - "name": "set_permitted_minter", + "name": "setPermittedMinter", "outputs": [], "type": "function" }, { "inputs": [ { - "name": "account", + "name": "recipient", "type": "felt" }, { @@ -123,7 +167,7 @@ "type": "Uint256" } ], - "name": "permissioned_mint", + "name": "permissionedMint", "outputs": [], "type": "function" }, @@ -138,7 +182,7 @@ "type": "Uint256" } ], - "name": "permissioned_burn", + "name": "permissionedBurn", "outputs": [], "type": "function" }, @@ -154,13 +198,22 @@ } ], "name": "transfer", - "outputs": [], + "outputs": [ + { + "name": "success", + "type": "felt" + } + ], "type": "function" }, { "inputs": [ { - "name": "spender", + "name": "sender", + "type": "felt" + }, + { + "name": "recipient", "type": "felt" }, { @@ -168,18 +221,19 @@ "type": "Uint256" } ], - "name": "approve", - "outputs": [], + "name": "transferFrom", + "outputs": [ + { + "name": "success", + "type": "felt" + } + ], "type": "function" }, { "inputs": [ { - "name": "sender", - "type": "felt" - }, - { - "name": "recipient", + "name": "spender", "type": "felt" }, { @@ -187,8 +241,13 @@ "type": "Uint256" } ], - "name": "transfer_from", - "outputs": [], + "name": "approve", + "outputs": [ + { + "name": "success", + "type": "felt" + } + ], "type": "function" }, { @@ -202,8 +261,13 @@ "type": "Uint256" } ], - "name": "increase_allowance", - "outputs": [], + "name": "increaseAllowance", + "outputs": [ + { + "name": "success", + "type": "felt" + } + ], "type": "function" }, { @@ -217,8 +281,13 @@ "type": "Uint256" } ], - "name": "decrease_allowance", - "outputs": [], + "name": "decreaseAllowance", + "outputs": [ + { + "name": "success", + "type": "felt" + } + ], "type": "function" } ] diff --git a/src/api/bridge.js b/src/api/bridge.js new file mode 100644 index 00000000..10248afe --- /dev/null +++ b/src/api/bridge.js @@ -0,0 +1,9 @@ +import {sendTransaction} from '../utils/contract'; + +export const deposit = async (contract, fromAddress, toAddress, amount) => { + try { + return await sendTransaction(contract, 'deposit', [amount, toAddress], fromAddress); + } catch (ex) { + return Promise.reject(ex); + } +}; diff --git a/src/api/erc20.js b/src/api/erc20.js new file mode 100644 index 00000000..19a46f1e --- /dev/null +++ b/src/api/erc20.js @@ -0,0 +1,17 @@ +import {callContract, sendTransaction} from '../utils/contract'; + +export const approve = async (contract, toAddress, fromAddress, amount) => { + try { + return await sendTransaction(contract, 'approve', [toAddress, amount], fromAddress); + } catch (ex) { + return Promise.reject(ex); + } +}; + +export const balanceOf = async (contract, address) => { + try { + return await callContract(contract, 'balanceOf', [], address); + } catch (ex) { + return Promise.reject(ex); + } +}; diff --git a/src/assets/svg/icons/close.svg b/src/assets/svg/icons/close.svg new file mode 100644 index 00000000..b5e983ce --- /dev/null +++ b/src/assets/svg/icons/close.svg @@ -0,0 +1,3 @@ +<svg width="8" height="9" viewBox="0 0 8 9" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M8 1.65603L7.21702 0.873047L4 4.09007L0.782979 0.873047L0 1.65603L3.21702 4.87305L0 8.09007L0.782979 8.87305L4 5.65603L7.21702 8.87305L8 8.09007L4.78298 4.87305L8 1.65603Z" fill="#5F666C"/> +</svg> diff --git a/src/components/Containers/Header/Header.js b/src/components/Containers/Header/Header.js index 30e2b9c4..1c06c073 100644 --- a/src/components/Containers/Header/Header.js +++ b/src/components/Containers/Header/Header.js @@ -1,18 +1,45 @@ import React from 'react'; import StarkNetLogoPath from '../../../assets/img/starknet.png'; -import {ChainType} from '../../../enums'; -import {useCombineWallets} from '../../../providers/CombineWalletsProvider/hooks'; +import {ChainType, NetworkType} from '../../../enums'; +import { + useWallets, + useEthereumWallet, + useStarknetWallet +} from '../../../providers/WalletsProvider/hooks'; import {toClasses} from '../../../utils'; import {useBridgeActions} from '../../Features/Bridge/Bridge.hooks'; +import {useIsEthereum, useIsStarknet} from '../../Features/Transfer/Transfer/Transfer.hooks'; import {WalletButton} from '../../UI'; import {STARKNET_LOGO_SIZE} from './Header.constants'; import styles from './Header.module.scss'; import {CHAIN_TXT} from './Header.strings'; export const Header = () => { - const {chainName, account, isConnected, config} = useCombineWallets(); + const {chainName} = useWallets(); const {showAccountMenu} = useBridgeActions(); + const [, setEthereum] = useIsEthereum(); + const [, setStarknet] = useIsStarknet(); + const { + account: ethereumAccount, + isConnected: isEthereumConnected, + config: ethereumConfig + } = useEthereumWallet(); + const { + account: starknetAccount, + isConnected: isStarknetConnected, + config: starknetConfig + } = useStarknetWallet(); + + const onStarknetWalletButtonClick = () => { + setStarknet(); + showAccountMenu(); + }; + + const onEthereumWalletButtonClick = () => { + setEthereum(); + showAccountMenu(); + }; return ( <div className={toClasses(styles.header, 'row')}> @@ -29,8 +56,19 @@ export const Header = () => { </div> <div className={toClasses(styles.right, 'row')}> - {isConnected && ( - <WalletButton account={account} logoPath={config?.logoPath} onClick={showAccountMenu} /> + {isEthereumConnected && ( + <WalletButton + account={ethereumAccount} + logoPath={ethereumConfig?.logoPath} + onClick={onEthereumWalletButtonClick} + /> + )} + {isStarknetConnected && ( + <WalletButton + account={starknetAccount} + logoPath={starknetConfig?.logoPath} + onClick={onStarknetWalletButtonClick} + /> )} </div> </div> diff --git a/src/components/Containers/Header/Header.module.scss b/src/components/Containers/Header/Header.module.scss index 7b8ea6f1..fdc6155a 100644 --- a/src/components/Containers/Header/Header.module.scss +++ b/src/components/Containers/Header/Header.module.scss @@ -21,6 +21,7 @@ $bridge-color: $--color-beta; .logo { transition: 0.3s ease-in-out; + .bridge { transition: 0.3s ease-in-out; font-family: $--primary-font; @@ -38,10 +39,16 @@ $bridge-color: $--color-beta; font-size: 13px; font-weight: 500; opacity: 0.6; + margin-top: 2px; text-transform: capitalize; } } .right { + button { + &:not(:last-child) { + margin-right: 10px; + } + } } } diff --git a/src/components/Containers/Main/Main.js b/src/components/Containers/Main/Main.js index 4193fea6..67296a6d 100644 --- a/src/components/Containers/Main/Main.js +++ b/src/components/Containers/Main/Main.js @@ -1,15 +1,16 @@ import React, {useEffect, useState} from 'react'; import {useVars, useWindowSize} from '../../../hooks'; -import {useCombineWallets} from '../../../providers/CombineWalletsProvider/hooks'; +import {useEthereumWallet, useStarknetWallet} from '../../../providers/WalletsProvider/hooks'; import {Bridge} from '../../Features'; -import {Login} from '../../Features/Login/Login/Login'; +import {Login} from '../../Features/Login'; import styles from './Main.module.scss'; export const Main = () => { const windowSize = useWindowSize(); const {mainOffset} = useVars(); - const {isConnected} = useCombineWallets(); + const {isConnected: isEthereumConnected} = useEthereumWallet(); + const {isConnected: isStarknetConnected} = useStarknetWallet(); const [height, setHeight] = useState(null); useEffect(() => { @@ -18,7 +19,7 @@ export const Main = () => { return ( <main className={styles.main} style={{height}}> - {isConnected ? <Bridge /> : <Login />} + {isEthereumConnected && isStarknetConnected ? <Bridge /> : <Login />} </main> ); }; diff --git a/src/components/Features/Account/Account/Account.constants.js b/src/components/Features/Account/Account/Account.constants.js index 440d765b..6ae51e06 100644 --- a/src/components/Features/Account/Account/Account.constants.js +++ b/src/components/Features/Account/Account/Account.constants.js @@ -4,10 +4,11 @@ export const LINKS = { ETHERSCAN: { text: 'etherscan', url: (chainName, account) => - evaluate('https://{{chainName}}.etherscan.io/address/{{account}}', {chainName, account}) + evaluate('https://{{chainName}}etherscan.io/address/{{account}}', {chainName, account}) }, VOYAGER: { text: 'voyager', - url: account => evaluate('https://voyager.online/contract/{{account}}', {account}) + url: (chainName, account) => + evaluate('https://{{chainName}}voyager.online/contract/{{account}}', {account}) } }; diff --git a/src/components/Features/Account/Account/Account.js b/src/components/Features/Account/Account/Account.js index fb86cd6a..9f656bb9 100644 --- a/src/components/Features/Account/Account/Account.js +++ b/src/components/Features/Account/Account/Account.js @@ -1,20 +1,34 @@ import React from 'react'; -import {useCombineWallets} from '../../../../providers/CombineWalletsProvider/hooks'; +import {toChainName} from '../../../../enums'; +import {useTransactions} from '../../../../providers/TransactionsProvider/hooks'; +import {useWallets} from '../../../../providers/WalletsProvider/hooks'; import {BackButton, Menu, MenuTitle} from '../../../UI'; import {useBridgeActions} from '../../Bridge/Bridge.hooks'; import {useTransferData} from '../../Transfer/Transfer/Transfer.hooks'; import {LinkButton} from '../LinkButton/LinkButton'; -import {AccountAddress, LogoutButton, TransferLogContainer} from '../index'; +import {AccountAddress, LogoutButton, TransferLog, TransferLogContainer} from '../index'; import {LINKS} from './Account.constants'; import styles from './Account.module.scss'; import {TITLE_TXT} from './Account.strings'; export const Account = () => { + const transactions = useTransactions(); const {showTransferMenu} = useBridgeActions(); - const {account, chainName, resetWallet} = useCombineWallets(); + const {account, chainId, resetWallet} = useWallets(); const {isEthereum, isStarknet} = useTransferData(); + const renderTransactions = () => { + return transactions.length + ? transactions.map((tx, index) => { + return <TransferLog key={index} />; + }) + : null; + }; + + let chainName = toChainName(chainId); + chainName += chainName && '.'; + return ( <Menu> <div className={styles.account}> @@ -24,8 +38,10 @@ export const Account = () => { {isEthereum && ( <LinkButton text={LINKS.ETHERSCAN.text} url={LINKS.ETHERSCAN.url(chainName, account)} /> )} - {isStarknet && <LinkButton text={LINKS.VOYAGER.text} url={LINKS.VOYAGER.url(account)} />} - <TransferLogContainer /> + {isStarknet && ( + <LinkButton text={LINKS.VOYAGER.text} url={LINKS.VOYAGER.url(chainName, account)} /> + )} + <TransferLogContainer>{renderTransactions()}</TransferLogContainer> {isEthereum && <LogoutButton onClick={resetWallet} />} </div> </Menu> diff --git a/src/components/Features/Account/TransferLog/TransferLog.js b/src/components/Features/Account/TransferLog/TransferLog.js index 854dda6b..4dccb9bc 100644 --- a/src/components/Features/Account/TransferLog/TransferLog.js +++ b/src/components/Features/Account/TransferLog/TransferLog.js @@ -18,14 +18,14 @@ export const TransferLog = ({name, symbol, amount, timestamp}) => ( <div className={styles.amount}> {amount} {symbol.toUpperCase()} </div> - <hr /> </div> + <hr /> </> ); TransferLog.propTypes = { name: PropTypes.string, symbol: PropTypes.string, - amount: PropTypes.number, + amount: PropTypes.string, timestamp: PropTypes.number }; diff --git a/src/components/Features/Bridge/Bridge.js b/src/components/Features/Bridge/Bridge.js index 6f58e646..95aac58c 100644 --- a/src/components/Features/Bridge/Bridge.js +++ b/src/components/Features/Bridge/Bridge.js @@ -1,9 +1,9 @@ import React from 'react'; import {MenuType} from '../../../enums'; -import {Account} from '../Account/Account/Account'; -import {SelectToken} from '../SelectToken/SelectToken/SelectToken'; -import {Transfer} from '../Transfer/Transfer/Transfer'; +import {Account} from '../Account'; +import {SelectToken} from '../SelectToken'; +import {Transfer} from '../Transfer'; import {useBridgeData} from './Bridge.hooks'; import styles from './Bridge.module.scss'; diff --git a/src/components/Features/Bridge/Bridge.slice.js b/src/components/Features/Bridge/Bridge.slice.js index 2b9787e4..2f86d126 100644 --- a/src/components/Features/Bridge/Bridge.slice.js +++ b/src/components/Features/Bridge/Bridge.slice.js @@ -16,6 +16,6 @@ const bridgeSlice = createSlice({ } }); -export const {showMenuAction, setTokensAction, resetAction} = bridgeSlice.actions; +export const {showMenuAction, resetAction} = bridgeSlice.actions; export default bridgeSlice.reducer; diff --git a/src/components/Features/Login/Login/Login.js b/src/components/Features/Login/Login/Login.js index 9a99f556..241facee 100644 --- a/src/components/Features/Login/Login/Login.js +++ b/src/components/Features/Login/Login/Login.js @@ -3,39 +3,38 @@ import {ChainUnsupportedError} from 'use-wallet'; import {NetworkType, toChainName, WalletStatus, WalletType} from '../../../../enums'; import {useWalletHandlerProvider} from '../../../../hooks'; -import {useCombineWallets} from '../../../../providers/CombineWalletsProvider/hooks'; -import {capitalize, toClasses} from '../../../../utils'; -import {BackButton, Menu} from '../../../UI'; import { - useHideModal, - useWalletConnectionModal -} from '../../ModalProvider/ModalProvider/ModalProvider.hooks'; -import {useTransferData} from '../../Transfer/Transfer/Transfer.hooks'; + useWallets, + useEthereumWallet, + useStarknetWallet +} from '../../../../providers/WalletsProvider/hooks'; +import {capitalize, toClasses} from '../../../../utils'; +import {Menu} from '../../../UI'; +import {useHideModal, useProgressModal} from '../../ModalProvider/ModalProvider.hooks'; import {WalletLogin} from '../WalletLogin/WalletLogin'; import {MODAL_TIMEOUT_DURATION} from './Login.constants'; import styles from './Login.module.scss'; -import {DOWNLOAD_TEXT, SUBTITLE_TXT, TITLE_TXT} from './Login.strings'; +import {DOWNLOAD_TEXT, MODAL_TXT, SUBTITLE_TXT, TITLE_TXT} from './Login.strings'; export const Login = () => { - const {isEthereum, isStarknet} = useTransferData(); - const [walletType, setWalletType] = useState( - isEthereum ? WalletType.ETHEREUM : WalletType.STARKNET - ); const [selectedWalletName, setSelectedWalletName] = useState(''); const [errorMsg, setErrorMsg] = useState(''); + const [walletType, setWalletType] = useState(WalletType.ETHEREUM); const modalTimeoutId = useRef(null); const hideModal = useHideModal(); - const showWalletConnectionModal = useWalletConnectionModal(); - const {status, error, connectWallet, swapWallets} = useCombineWallets(); + const showProgressModal = useProgressModal(); + const {status, error} = useWallets(); const {getWalletHandlers} = useWalletHandlerProvider(); + const {connectWallet: connectEthereumWallet, isConnected} = useEthereumWallet(); + const {connectWallet: connectStarknetWallet} = useStarknetWallet(); useEffect(() => { - error && handleError(error); - }, [error]); + isConnected && setWalletType(WalletType.STARKNET); + }, [isConnected]); useEffect(() => { - setWalletType(isEthereum ? WalletType.ETHEREUM : WalletType.STARKNET); - }, [isEthereum]); + error && handleError(error); + }, [error]); useEffect(() => { switch (status) { @@ -63,7 +62,9 @@ export const Login = () => { } const {config} = walletHandler; setSelectedWalletName(config.name); - return connectWallet(config); + return walletType === WalletType.ETHEREUM + ? connectEthereumWallet(config) + : connectStarknetWallet(config); }; const onDownloadClick = () => { @@ -86,7 +87,7 @@ export const Login = () => { const maybeShowModal = () => { maybeHideModal(); modalTimeoutId.current = setTimeout(() => { - showWalletConnectionModal(selectedWalletName); + showProgressModal(selectedWalletName, MODAL_TXT(selectedWalletName)); }, MODAL_TIMEOUT_DURATION); }; @@ -119,7 +120,6 @@ export const Login = () => { <Menu> <div className={toClasses(styles.login, 'center')}> <div className={styles.content}> - {isStarknet && <BackButton onClick={swapWallets} />} <div className={styles.title}>{TITLE_TXT}</div> <p> {SUBTITLE_TXT( diff --git a/src/components/Features/Login/Login/Login.strings.js b/src/components/Features/Login/Login/Login.strings.js index 2ad03a76..0dbd9b30 100644 --- a/src/components/Features/Login/Login/Login.strings.js +++ b/src/components/Features/Login/Login/Login.strings.js @@ -6,3 +6,6 @@ export const SUBTITLE_TXT = networkName => evaluate('Please select {{networkName}} wallet to connect with this dApp:', {networkName}); export const DOWNLOAD_TEXT = ['Don’t have a wallet?', 'Download Here']; + +export const MODAL_TXT = walletName => + evaluate('Waiting for confirmation from {{walletName}}', {walletName}); diff --git a/src/components/Features/ModalProvider/ModalProvider/ModalProvider.hooks.js b/src/components/Features/ModalProvider/ModalProvider.hooks.js similarity index 58% rename from src/components/Features/ModalProvider/ModalProvider/ModalProvider.hooks.js rename to src/components/Features/ModalProvider/ModalProvider.hooks.js index a0a4d6da..47d84516 100644 --- a/src/components/Features/ModalProvider/ModalProvider/ModalProvider.hooks.js +++ b/src/components/Features/ModalProvider/ModalProvider.hooks.js @@ -1,7 +1,7 @@ import {useCallback} from 'react'; import {useDispatch, useSelector} from 'react-redux'; -import {ModalType} from '../../../UI/Modal/Modal/Modal.constants'; +import {ModalType} from '../../UI/Modal/Modal/Modal.constants'; import {selectModal} from './ModalProvider.selectors'; import {hideModalAction, showModalAction} from './ModalProvider.slice'; @@ -16,17 +16,18 @@ export const useHideModal = () => { }, [dispatch]); }; -export const useWalletConnectionModal = () => { +export const useProgressModal = () => { const dispatch = useDispatch(); return useCallback( - walletName => { + (title, message, type = ModalType.INFO) => { dispatch( showModalAction({ - componentPath: 'Features/ModalProvider/WalletConnectionModal/WalletConnectionModal', + componentPath: 'UI/ProgressModal/ProgressModal', componentProps: { - walletName + message }, - title: walletName + title, + type }) ); }, @@ -34,15 +35,18 @@ export const useWalletConnectionModal = () => { ); }; -export const useErrorModal = () => { +export const useTransactionSubmittedModal = () => { const dispatch = useDispatch(); return useCallback( - error => { + transactionHash => { dispatch( showModalAction({ - title: error.name, - body: error.message, - type: ModalType.ERROR + componentPath: 'UI/TransactionSubmittedModal/TransactionSubmittedModal', + componentProps: { + transactionHash + }, + title: 'Transaction submitted', + isClosable: true }) ); }, diff --git a/src/components/Features/ModalProvider/ModalProvider/ModalProvider.js b/src/components/Features/ModalProvider/ModalProvider.js similarity index 78% rename from src/components/Features/ModalProvider/ModalProvider/ModalProvider.js rename to src/components/Features/ModalProvider/ModalProvider.js index 688d8230..eca45f2f 100644 --- a/src/components/Features/ModalProvider/ModalProvider/ModalProvider.js +++ b/src/components/Features/ModalProvider/ModalProvider.js @@ -1,17 +1,17 @@ import React, {lazy, Suspense} from 'react'; -import {Loading, Modal, ModalBody, ModalFooter, ModalHeader, ModalTitle} from '../../../UI'; -import {LoadingSize} from '../../../UI/Loading/Loading.enums'; +import {Loading, Modal, ModalBody, ModalFooter, ModalHeader, ModalTitle} from '../../UI'; +import {LoadingSize} from '../../UI/Loading/Loading.enums'; import {useHideModal, useModal} from './ModalProvider.hooks'; export const ModalProvider = () => { const {modal} = useModal(); - const {handleOnClose} = useHideModal(); + const handleOnClose = useHideModal(); const CustomComponent = lazy(() => import(`../../${modal.componentPath}`)); return ( <Modal show={modal.show} size={modal.size} type={modal.type}> - <ModalHeader type={modal.type} onClose={handleOnClose}> + <ModalHeader type={modal.type} isClosable={modal.isClosable} onClose={handleOnClose}> {modal.title && <ModalTitle>{modal.title}</ModalTitle>} </ModalHeader> <ModalBody type={modal.type}> diff --git a/src/components/Features/ModalProvider/ModalProvider/ModalProvider.selectors.js b/src/components/Features/ModalProvider/ModalProvider.selectors.js similarity index 100% rename from src/components/Features/ModalProvider/ModalProvider/ModalProvider.selectors.js rename to src/components/Features/ModalProvider/ModalProvider.selectors.js diff --git a/src/components/Features/ModalProvider/ModalProvider/ModalProvider.slice.js b/src/components/Features/ModalProvider/ModalProvider.slice.js similarity index 96% rename from src/components/Features/ModalProvider/ModalProvider/ModalProvider.slice.js rename to src/components/Features/ModalProvider/ModalProvider.slice.js index c4d0752c..372a9c71 100644 --- a/src/components/Features/ModalProvider/ModalProvider/ModalProvider.slice.js +++ b/src/components/Features/ModalProvider/ModalProvider.slice.js @@ -5,6 +5,7 @@ const initialState = { componentPath: '', componentProps: null, withButtons: false, + isClosable: false, body: '' }; diff --git a/src/components/Features/ModalProvider/WalletConnectionModal/WalletConnectionModal.js b/src/components/Features/ModalProvider/WalletConnectionModal/WalletConnectionModal.js deleted file mode 100644 index abf818a2..00000000 --- a/src/components/Features/ModalProvider/WalletConnectionModal/WalletConnectionModal.js +++ /dev/null @@ -1,28 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; - -import {useColors} from '../../../../hooks'; -import {toClasses} from '../../../../utils'; -import {Loading} from '../../../UI'; -import {LoadingSize} from '../../../UI/Loading/Loading.enums'; -import styles from './WalletConnectionModal.module.scss'; -import {BODY_TXT} from './WalletConnectionModal.strings'; - -const WalletConnectionModal = ({walletName}) => { - const {colorBeta} = useColors(); - - return ( - <div className={styles.walletConnectionModal}> - <div>{BODY_TXT(walletName)}</div> - <div className={toClasses(styles.loading, 'center')}> - <Loading color={colorBeta} size={LoadingSize.LARGE} /> - </div> - </div> - ); -}; - -WalletConnectionModal.propTypes = { - walletName: PropTypes.string -}; - -export default WalletConnectionModal; diff --git a/src/components/Features/ModalProvider/WalletConnectionModal/WalletConnectionModal.module.scss b/src/components/Features/ModalProvider/WalletConnectionModal/WalletConnectionModal.module.scss deleted file mode 100644 index 21237730..00000000 --- a/src/components/Features/ModalProvider/WalletConnectionModal/WalletConnectionModal.module.scss +++ /dev/null @@ -1,5 +0,0 @@ -.walletConnectionModal { - .loading { - margin-top: 30px; - } -} diff --git a/src/components/Features/ModalProvider/WalletConnectionModal/WalletConnectionModal.strings.js b/src/components/Features/ModalProvider/WalletConnectionModal/WalletConnectionModal.strings.js deleted file mode 100644 index 7faac418..00000000 --- a/src/components/Features/ModalProvider/WalletConnectionModal/WalletConnectionModal.strings.js +++ /dev/null @@ -1,4 +0,0 @@ -import {evaluate} from '../../../../utils'; - -export const BODY_TXT = walletName => - evaluate('Waiting for confirmation from {{walletName}}', {walletName}); diff --git a/src/components/Features/ModalProvider/index.js b/src/components/Features/ModalProvider/index.js deleted file mode 100644 index a26824d3..00000000 --- a/src/components/Features/ModalProvider/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export * from './ModalProvider/ModalProvider'; -export * from './WalletConnectionModal/WalletConnectionModal'; diff --git a/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js b/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js index 1ef15c7d..89d61254 100644 --- a/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js +++ b/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js @@ -2,7 +2,7 @@ import PropTypes from 'prop-types'; import React, {useEffect, useState} from 'react'; import {useTokenBalance} from '../../../../hooks/useTokenBalance'; -import {useCombineWallets} from '../../../../providers/CombineWalletsProvider/hooks'; +import {useWallets} from '../../../../providers/WalletsProvider/hooks'; import {formatBalance, toClasses} from '../../../../utils'; import {CryptoLogo, Loading} from '../../../UI'; import {CryptoLogoSize} from '../../../UI/CryptoLogo/CryptoLogo.enums'; @@ -10,24 +10,27 @@ import {LoadingSize} from '../../../UI/Loading/Loading.enums'; import styles from './SelectTokenRow.module.scss'; export const SelectTokenRow = ({tokenData, onClick}) => { - const {name, symbol, address} = tokenData; - const {account} = useCombineWallets(); - const [, setError] = useState(null); + const [mounted, setMounted] = useState(true); + const [error, setError] = useState(null); const [isLoading, setIsLoading] = useState(true); const [balance, setBalance] = useState(null); + const {name, symbol, address} = tokenData; + const {account} = useWallets(); const getBalance = useTokenBalance(address); useEffect(async () => { setIsLoading(true); setError(null); try { - const bal = await getBalance(account); - setBalance(bal); + const tokenBalance = await getBalance(account); + if (!mounted) return; + setBalance(tokenBalance); } catch (ex) { setError(ex); } finally { setIsLoading(false); } + return () => setMounted(false); }, []); return ( diff --git a/src/components/Features/Transfer/Transfer/Transfer.hooks.js b/src/components/Features/Transfer/Transfer/Transfer.hooks.js index 41d7cbdb..9abb810d 100644 --- a/src/components/Features/Transfer/Transfer/Transfer.hooks.js +++ b/src/components/Features/Transfer/Transfer/Transfer.hooks.js @@ -30,7 +30,8 @@ export const useTransferData = () => ({ export const useAmount = () => { const amount = useSelector(getCurrentAmountSelector); const setAmount = useSetAmount(); - return [amount, setAmount]; + const clearAmount = () => setAmount(''); + return [amount, setAmount, clearAmount]; }; export const useIsEthereum = () => { diff --git a/src/components/Features/Transfer/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer/Transfer.js index ed009acf..da6d0aab 100644 --- a/src/components/Features/Transfer/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer/Transfer.js @@ -1,39 +1,61 @@ import React, {useEffect, useState} from 'react'; import {ActionType, NetworkType} from '../../../../enums'; +import {useTransferToStarknet} from '../../../../hooks'; import {Menu} from '../../../UI'; import {useBridgeActions} from '../../Bridge/Bridge.hooks'; +import { + useProgressModal, + useTransactionSubmittedModal +} from '../../ModalProvider/ModalProvider.hooks'; import {TransferMenuTab} from '../TransferMenuTab/TransferMenuTab'; import {NetworkMenu, NetworkSwap, TokenInput, TransferButton} from '../index'; import {useAmount, useIsEthereum, useIsStarknet, useTransferData} from './Transfer.hooks'; import styles from './Transfer.module.scss'; -import {INSUFFICIENT_BALANCE_ERROR_MSG} from './Transfer.strings.js'; +import { + INSUFFICIENT_BALANCE_ERROR_MSG, + TRANSFER_TO_STARKNET_MODAL_TITLE +} from './Transfer.strings.js'; export const Transfer = () => { - const [hasError, setHasError] = useState(false); const [isButtonDisabled, setIsButtonDisabled] = useState(true); - const [errorMsg, setErrorMsg] = useState(''); - const {action, selectedToken, fromNetwork, toNetwork} = useTransferData(); - const {showSelectTokenMenu} = useBridgeActions(); + const [error, setError] = useState(null); const [isEthereum, setEthereum] = useIsEthereum(); const [isStarknet, setStarknet] = useIsStarknet(); - const [amount, setAmount] = useAmount(); + const [amount, setAmount, clearAmount] = useAmount(); + const {action, selectedToken, fromNetwork, toNetwork} = useTransferData(); + const {showSelectTokenMenu} = useBridgeActions(); + const {transferData, transferToStarknet, transferError, isTransferring, transferProgress} = + useTransferToStarknet(selectedToken); + const showProgressModal = useProgressModal(); + const showTransactionSubmittedModal = useTransactionSubmittedModal(); useEffect(() => { - setAmount(''); + if (isTransferring) { + showProgressModal(TRANSFER_TO_STARKNET_MODAL_TITLE, transferProgress.message); + } else if (transferError) { + // TODO: show error modal + } else if (transferData) { + const [receipt, event] = transferData; + clearAmount(); + showTransactionSubmittedModal(receipt.transactionHash); + // TODO: add tx store and calc tx hash from msg hash + } + }, [transferProgress, transferData, transferError, isTransferring, amount]); + + useEffect(() => { + clearAmount(); }, [selectedToken]); useEffect(() => { + setError(null); if (Math.ceil(amount) === 0) { - setHasError(false); setIsButtonDisabled(true); } else { if (amount > selectedToken.balance) { - setHasError(true); + setError(INSUFFICIENT_BALANCE_ERROR_MSG); setIsButtonDisabled(true); - setErrorMsg(INSUFFICIENT_BALANCE_ERROR_MSG); } else { - setHasError(false); setIsButtonDisabled(false); } } @@ -51,6 +73,12 @@ export const Transfer = () => { isEthereum ? setStarknet() : setEthereum(); }; + const onTransferClick = async () => { + if (isEthereum) { + return transferToStarknet(amount); + } + }; + const renderTabs = () => { return Object.values(ActionType).map((tab, index) => { return ( @@ -75,15 +103,19 @@ export const Transfer = () => { <div className={styles.container}> <NetworkMenu networkData={fromNetwork} title="from" tokenData={selectedToken}> <TokenInput - hasError={hasError} + hasError={!!error} selectedToken={selectedToken} value={amount} onInputChange={onInputChange} onMaxClick={onMaxClick} onTokenSelect={showSelectTokenMenu} /> - {hasError && <div className={styles.errorMsg}>{errorMsg}</div>} - <TransferButton isDisabled={isButtonDisabled} onClick={() => {}} /> + {error && <div className={styles.errorMsg}>{error}</div>} + <TransferButton + isDisabled={isButtonDisabled} + isLoading={isTransferring} + onClick={onTransferClick} + /> <NetworkSwap isFlipped={isStarknet} onClick={onSwapClick} /> </NetworkMenu> <NetworkMenu networkData={toNetwork} title="to" tokenData={selectedToken} /> diff --git a/src/components/Features/Transfer/Transfer/Transfer.strings.js b/src/components/Features/Transfer/Transfer/Transfer.strings.js index 4ce0ec4d..cfd42b73 100644 --- a/src/components/Features/Transfer/Transfer/Transfer.strings.js +++ b/src/components/Features/Transfer/Transfer/Transfer.strings.js @@ -1 +1,2 @@ export const INSUFFICIENT_BALANCE_ERROR_MSG = 'Insufficient balance'; +export const TRANSFER_TO_STARKNET_MODAL_TITLE = 'Transferring to StarkNet'; diff --git a/src/components/Features/Transfer/TransferButton/TransferButton.js b/src/components/Features/Transfer/TransferButton/TransferButton.js index 7c6f8aed..20cd84c8 100644 --- a/src/components/Features/Transfer/TransferButton/TransferButton.js +++ b/src/components/Features/Transfer/TransferButton/TransferButton.js @@ -5,7 +5,7 @@ import {useColors} from '../../../../hooks'; import {Button} from '../../../UI'; import {BTN_TXT} from './TransferButton.strings'; -export const TransferButton = ({onClick, isDisabled}) => { +export const TransferButton = props => { const {colorBeta, colorWhite} = useColors(); return ( @@ -14,19 +14,19 @@ export const TransferButton = ({onClick, isDisabled}) => { colorBorder={colorBeta} colorText={colorWhite} height={50} - isDisabled={isDisabled} style={{ width: '100%', borderRadius: '7px', fontSize: '16px' }} text={BTN_TXT} - onClick={onClick} + {...props} /> ); }; TransferButton.propTypes = { onClick: PropTypes.func, - isDisabled: PropTypes.bool + isDisabled: PropTypes.bool, + isLoading: PropTypes.bool }; diff --git a/src/components/Features/index.js b/src/components/Features/index.js index 7ecfe3c4..e3ca4f10 100644 --- a/src/components/Features/index.js +++ b/src/components/Features/index.js @@ -1,5 +1,5 @@ export * from './Account'; -export * from './ModalProvider'; export * from './SelectToken'; export * from './Transfer'; export * from './Bridge/Bridge'; +export * from './ModalProvider/ModalProvider'; diff --git a/src/components/UI/Button/Button.js b/src/components/UI/Button/Button.js index 1ed867f6..ef0bf706 100644 --- a/src/components/UI/Button/Button.js +++ b/src/components/UI/Button/Button.js @@ -2,6 +2,8 @@ import PropTypes from 'prop-types'; import React, {useState} from 'react'; import {toClasses} from '../../../utils'; +import {Loading} from '../Loading/Loading'; +import {LoadingSize} from '../Loading/Loading.enums'; import styles from './Button.module.scss'; export const Button = ({ @@ -18,6 +20,7 @@ export const Button = ({ colorBorderHover, style, isDisabled, + isLoading, onClick }) => { const [isHover, setIsHover] = useState(false); @@ -32,14 +35,18 @@ export const Button = ({ return ( <button - className={toClasses(styles.button, isDisabled && styles.isDisabled)} + className={toClasses( + styles.button, + isDisabled && styles.isDisabled, + isLoading && styles.isLoading + )} style={styleObj} onClick={onClick} onMouseEnter={() => setIsHover(true)} onMouseLeave={() => setIsHover(false)} > {iconAlign === 'left' && icon} - {text} + {isLoading ? <Loading size={LoadingSize.SMALL} /> : text} {iconAlign === 'right' && icon} </button> ); @@ -59,6 +66,7 @@ Button.propTypes = { icon: PropTypes.object, iconAlign: PropTypes.string, isDisabled: PropTypes.bool, + isLoading: PropTypes.bool, onClick: PropTypes.func, children: PropTypes.oneOfType([PropTypes.array, PropTypes.object]) }; diff --git a/src/components/UI/Button/Button.module.scss b/src/components/UI/Button/Button.module.scss index 0d2813c5..3dd28bcf 100644 --- a/src/components/UI/Button/Button.module.scss +++ b/src/components/UI/Button/Button.module.scss @@ -20,6 +20,10 @@ opacity: 0.3; } + &.isLoading { + pointer-events: none; + } + img, svg { margin-right: 10px; diff --git a/src/components/UI/Circle/Circle.module.scss b/src/components/UI/Circle/Circle.module.scss index d3025358..cf218b94 100644 --- a/src/components/UI/Circle/Circle.module.scss +++ b/src/components/UI/Circle/Circle.module.scss @@ -7,4 +7,5 @@ $default-background-color: linear-gradient(0deg, rgba(255, 255, 255, 0.2), rgba( margin: 0 10px 0 0; background: $default-background-color; border-radius: 50%; + display: flex; } diff --git a/src/components/UI/Modal/ModalHeader/ModalHeader.js b/src/components/UI/Modal/ModalHeader/ModalHeader.js index b162a859..8f29c8dc 100644 --- a/src/components/UI/Modal/ModalHeader/ModalHeader.js +++ b/src/components/UI/Modal/ModalHeader/ModalHeader.js @@ -1,15 +1,21 @@ import PropTypes from 'prop-types'; import React from 'react'; +import {ReactComponent as CloseIcon} from '../../../../assets/svg/icons/close.svg'; import {toClasses} from '../../../../utils'; import {ModalType} from '../Modal/Modal.constants'; import styles from './ModalHeader.module.scss'; -export const ModalHeader = ({type = ModalType.INFO, children}) => ( - <div className={toClasses(styles.modalHeader, styles[type])}>{children}</div> +export const ModalHeader = ({type = ModalType.INFO, isClosable, onClose, children}) => ( + <div className={toClasses(styles.modalHeader, styles[type])}> + {children} + {isClosable && <CloseIcon onClick={onClose} />} + </div> ); ModalHeader.propTypes = { type: PropTypes.string, + isClosable: PropTypes.bool, + onClose: PropTypes.func, children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) }; diff --git a/src/components/UI/Modal/ModalHeader/ModalHeader.module.scss b/src/components/UI/Modal/ModalHeader/ModalHeader.module.scss index f85601ea..97cf4fa4 100644 --- a/src/components/UI/Modal/ModalHeader/ModalHeader.module.scss +++ b/src/components/UI/Modal/ModalHeader/ModalHeader.module.scss @@ -3,6 +3,14 @@ $error-color: $--color-error; .modalHeader { + display: flex; + justify-content: space-between; + align-items: center; + + svg { + cursor: pointer; + } + &.error { color: $error-color; } diff --git a/src/components/UI/ProgressModal/ProgressModal.js b/src/components/UI/ProgressModal/ProgressModal.js new file mode 100644 index 00000000..519ee1b1 --- /dev/null +++ b/src/components/UI/ProgressModal/ProgressModal.js @@ -0,0 +1,27 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {useColors} from '../../../hooks'; +import {toClasses} from '../../../utils'; +import {LoadingSize} from '../Loading/Loading.enums'; +import {Loading} from '../index'; +import styles from './ProgressModal.module.scss'; + +const ProgressModal = ({message}) => { + const {colorBeta} = useColors(); + + return ( + <div className={styles.progressModal}> + <div>{message}</div> + <div className={toClasses(styles.loading, 'center')}> + <Loading color={colorBeta} size={LoadingSize.LARGE} /> + </div> + </div> + ); +}; + +ProgressModal.propTypes = { + walletName: PropTypes.string +}; + +export default ProgressModal; diff --git a/src/components/UI/ProgressModal/ProgressModal.module.scss b/src/components/UI/ProgressModal/ProgressModal.module.scss new file mode 100644 index 00000000..f684097d --- /dev/null +++ b/src/components/UI/ProgressModal/ProgressModal.module.scss @@ -0,0 +1,5 @@ +.progressModal { + .loading { + margin-top: 40px; + } +} diff --git a/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.constants.js b/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.constants.js new file mode 100644 index 00000000..142992b8 --- /dev/null +++ b/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.constants.js @@ -0,0 +1,7 @@ +import {evaluate} from '../../../utils'; + +export const ETHERSCAN_TX_URL = (chainName, transactionHash) => + evaluate('https://{{chainName}}etherscan.io/tx/{{transactionHash}}', { + chainName, + transactionHash + }); diff --git a/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.js b/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.js new file mode 100644 index 00000000..75b551c7 --- /dev/null +++ b/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.js @@ -0,0 +1,53 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {ReactComponent as EtherscanLogo} from '../../../assets/svg/etherscan.svg'; +import {toChainName} from '../../../enums'; +import {useColors} from '../../../hooks'; +import {useWallets} from '../../../providers/WalletsProvider/hooks'; +import {openInNewTab} from '../../../utils'; +import {Button} from '../Button/Button'; +import {Circle} from '../Circle/Circle'; +import {ETHERSCAN_TX_URL} from './TransactionSubmittedModal.constants'; +import {BTN_TEXT} from './TransactionSubmittedModal.strings'; + +const TransactionSubmittedModal = ({transactionHash}) => { + const {colorAlpha3, colorWhite, colorWhite1} = useColors(); + const {chainId} = useWallets(); + + const onClick = () => { + let chainName = toChainName(chainId); + chainName += chainName && '.'; + openInNewTab(ETHERSCAN_TX_URL(chainName, transactionHash)); + }; + + return ( + <div className="center"> + <br /> + <Button + colorBackground={colorWhite} + colorBorder={colorAlpha3} + colorText={colorAlpha3} + text={BTN_TEXT} + icon={ + <Circle size={40} color={colorWhite1}> + <EtherscanLogo style={{margin: 'auto'}} /> + </Circle> + } + onClick={onClick} + style={{ + borderRadius: '7px', + borderWidth: '2px', + fontSize: '16px', + height: '60px' + }} + /> + </div> + ); +}; + +TransactionSubmittedModal.propTypes = { + transactionHash: PropTypes.string +}; + +export default TransactionSubmittedModal; diff --git a/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.strings.js b/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.strings.js new file mode 100644 index 00000000..04b7db19 --- /dev/null +++ b/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.strings.js @@ -0,0 +1 @@ +export const BTN_TEXT = 'view on etherscan'; diff --git a/src/components/UI/WalletButton/WalletButton.js b/src/components/UI/WalletButton/WalletButton.js index d54a9050..c70f1138 100644 --- a/src/components/UI/WalletButton/WalletButton.js +++ b/src/components/UI/WalletButton/WalletButton.js @@ -2,7 +2,7 @@ import PropTypes from 'prop-types'; import React from 'react'; import {useColors} from '../../../hooks'; -import {formatAddress} from '../../../utils'; +import {shortenAddress} from '../../../utils'; import {Button, DynamicIcon} from '../index'; import {WALLET_LOGO_SIZE} from './WalletButton.constants'; import {BTN_TXT} from './WalletButton.strings'; @@ -18,7 +18,7 @@ export const WalletButton = ({account, logoPath, onClick}) => { height={40} icon={<DynamicIcon path={logoPath} size={WALLET_LOGO_SIZE} />} style={{borderWidth: '2px'}} - text={BTN_TXT(formatAddress(account))} + text={BTN_TXT(shortenAddress(account))} onClick={onClick} /> ); diff --git a/src/components/UI/index.js b/src/components/UI/index.js index 50eb6ddb..059953ff 100644 --- a/src/components/UI/index.js +++ b/src/components/UI/index.js @@ -16,3 +16,5 @@ export * from './Modal/ModalTitle/ModalTitle'; export * from './Modal/ModalFooter/ModalFooter'; export * from './Input/Input'; export * from './WalletButton/WalletButton'; +export * from './ProgressModal/ProgressModal'; +export * from './TransactionSubmittedModal/TransactionSubmittedModal'; diff --git a/src/config/tokens/tokens.starknet.js b/src/config/tokens/tokens.starknet.js index 44aa4101..d3833f7c 100644 --- a/src/config/tokens/tokens.starknet.js +++ b/src/config/tokens/tokens.starknet.js @@ -4,7 +4,8 @@ export default [ { address: { [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x06ebb42ca1b237cd92fcc677d9ff02ffadcc3c66d5748f6ebd795b531c51266c' + // [ChainType.GOERLI.id]: '0x06ebb42ca1b237cd92fcc677d9ff02ffadcc3c66d5748f6ebd795b531c51266c' + [ChainType.GOERLI.id]: '0x021eb73bd66eb18c37ec7b1e2567bc3fa8ba9ac0d391b53745a5f9d483217595' }, name: 'ERC20 StarkNet Token', symbol: 'E20ST' diff --git a/src/enums/ChainType.js b/src/enums/ChainType.js index f414f05a..e70c5118 100644 --- a/src/enums/ChainType.js +++ b/src/enums/ChainType.js @@ -27,5 +27,5 @@ export const ChainType = { export const toChainName = id => { const key = Object.keys(ChainType).find(key => ChainType[key].id === id); - return key && ChainType[key].name; + return ChainType[key].name === ChainType.MAIN.name ? '' : ChainType[key].name; }; diff --git a/src/enums/TransactionStatus.js b/src/enums/TransactionStatus.js new file mode 100644 index 00000000..03ec4954 --- /dev/null +++ b/src/enums/TransactionStatus.js @@ -0,0 +1,5 @@ +export const TransactionStatus = { + PENDING: 0, + ACCEPTED_ON_L2: 1, + ACCEPTED_ON_L1: 2 +}; diff --git a/src/enums/index.js b/src/enums/index.js index f80e9fad..582743b8 100644 --- a/src/enums/index.js +++ b/src/enums/index.js @@ -4,3 +4,4 @@ export * from './ActionType'; export * from './NetworkType'; export * from './WalletType'; export * from './WalletStatus'; +export * from './TransactionStatus'; diff --git a/src/hooks/index.js b/src/hooks/index.js index 5fbc607b..e1dfa591 100644 --- a/src/hooks/index.js +++ b/src/hooks/index.js @@ -5,4 +5,7 @@ export * from './useVars'; export * from './useColors'; export * from './useTokens'; export * from './useContract'; +export * from './useLogger'; +export * from './useTransferToStarknet'; export * from './useWalletHandlerProvider'; +export * from './useTransferToStarknet'; diff --git a/src/hooks/useContract.js b/src/hooks/useContract.js index bbc969f4..d2614a14 100644 --- a/src/hooks/useContract.js +++ b/src/hooks/useContract.js @@ -9,11 +9,11 @@ import { MESSAGING_CONTRACT_ADDRESS } from '../config/contracts/contracts.ethereum'; import {STARKNET_ERC20_BRIDGE_CONTRACT_ADDRESS} from '../config/contracts/contracts.starknet'; -import {useCombineWallets} from '../providers/CombineWalletsProvider/hooks'; +import {useWallets} from '../providers/WalletsProvider/hooks'; import {getContract, getStarknetContract} from '../utils/contract'; export const useContract = (addressOrAddressMap, ABI) => { - const {chainId} = useCombineWallets(); + const {chainId} = useWallets(); return useMemo(() => { if (!addressOrAddressMap || !ABI || !chainId) return null; @@ -33,7 +33,7 @@ export const useContract = (addressOrAddressMap, ABI) => { }; export const useStarknetContract = (addressOrAddressMap, ABI) => { - const {chainId} = useCombineWallets(); + const {chainId} = useWallets(); return useMemo(() => { if (!addressOrAddressMap || !ABI || !chainId) return null; diff --git a/src/hooks/useLogger.js b/src/hooks/useLogger.js new file mode 100644 index 00000000..739c44bd --- /dev/null +++ b/src/hooks/useLogger.js @@ -0,0 +1,3 @@ +import {getLogger} from '../services'; + +export const useLogger = name => getLogger(name); diff --git a/src/hooks/useTokenBalance.js b/src/hooks/useTokenBalance.js index 51cff214..7564565d 100644 --- a/src/hooks/useTokenBalance.js +++ b/src/hooks/useTokenBalance.js @@ -16,7 +16,7 @@ export const useTokenBalance = tokenAddresses => { const balance = await callContract(contract, 'balanceOf', [account]); return Number(web3.utils.fromWei(balance)); } - const {balance} = await callStarknetContract(contract, 'balance_of', [{account}]); + const {balance} = await callStarknetContract(contract, 'balanceOf', [{account}]); return uint256.uint256ToBN(balance).toNumber(); }, [isEthereum] diff --git a/src/hooks/useTransferToStarknet.js b/src/hooks/useTransferToStarknet.js new file mode 100644 index 00000000..365aebc8 --- /dev/null +++ b/src/hooks/useTransferToStarknet.js @@ -0,0 +1,80 @@ +import {useCallback, useState} from 'react'; + +import {deposit} from '../api/bridge'; +import {approve} from '../api/erc20'; +import {ERC20_BRIDGE_CONTRACT_ADDRESS} from '../config/contracts/contracts.ethereum'; +import {useWallets, useStarknetWallet} from '../providers/WalletsProvider/hooks'; +import {listenOnce} from '../utils/contract'; +import {web3} from '../web3'; +import {useMessagingContract, useTokenBridgeContract, useTokenContract} from './useContract'; + +const PROGRESS = { + approval: symbol => ({ + type: 'approval', + message: `Requesting permission to access your ${symbol} funds` + }), + deposit: (amount, symbol) => ({ + type: 'deposit', + message: `Depositing ${amount} ${symbol} to StarkNet` + }) +}; + +export const useTransferToStarknet = tokenData => { + const {address, symbol} = tokenData; + const [isLoading, setIsLoading] = useState(false); + const [data, setData] = useState(null); + const [progress, setProgress] = useState(null); + const [error, setError] = useState(null); + const {account, chainId} = useWallets(); + const {account: starknetAccount} = useStarknetWallet(); + const tokenContract = useTokenContract(address); + const tokenBridgeContract = useTokenBridgeContract(); + const messagingContract = useMessagingContract(); + + const waitForLogMessageToL2 = () => { + return new Promise((resolve, reject) => { + listenOnce(messagingContract, 'LogMessageToL2', (error, event) => { + if (error) { + reject(error); + } + resolve(event); + }); + }); + }; + + const transferToStarknet = useCallback( + async amount => { + setError(null); + setData(null); + setProgress(null); + setIsLoading(false); + try { + setIsLoading(true); + const amountNumber = Number(amount); + const amountBN = web3.utils.toBN(amountNumber); + setProgress(PROGRESS.approval(symbol)); + await approve(tokenContract, ERC20_BRIDGE_CONTRACT_ADDRESS[chainId], account, amountNumber); + setProgress(PROGRESS.deposit(amountBN, symbol)); + const depositPromise = deposit(tokenBridgeContract, account, starknetAccount, amountBN); + const depositEvent = await waitForLogMessageToL2(); + const depositReceipt = await depositPromise; + setIsLoading(false); + setProgress(null); + setData([depositReceipt, depositEvent]); + } catch (ex) { + setIsLoading(false); + setProgress(null); + setError(ex); + } + }, + [account, starknetAccount, tokenContract] + ); + + return { + isTransferring: isLoading, + transferProgress: progress, + transferError: error, + transferData: data, + transferToStarknet + }; +}; diff --git a/src/index.js b/src/index.js index f0f34593..52e82815 100644 --- a/src/index.js +++ b/src/index.js @@ -5,6 +5,14 @@ import {App} from './App'; import {ModalProvider} from './components/Features'; import './index.scss'; import {Providers} from './providers'; +import {getLogger, setLogLevel} from './services'; +import {getUrlParameter, printPackageInfo} from './utils'; + +printPackageInfo(process.env.REACT_APP_NAME, process.env.REACT_APP_VERSION, '#734d7e'); + +if (process.env.NODE_ENV === 'development' || getUrlParameter('debugApp')) { + setLogLevel(getLogger().DEBUG); +} ReactDOM.render( <Providers> diff --git a/src/providers/CombineWalletsProvider/context.js b/src/providers/CombineWalletsProvider/context.js deleted file mode 100644 index a3c21e48..00000000 --- a/src/providers/CombineWalletsProvider/context.js +++ /dev/null @@ -1,29 +0,0 @@ -import {createContext} from 'react'; - -import {WalletStatus} from '../../enums'; - -export const CombineWalletsContext = createContext({ - ethereumWallet: { - library: null, - account: '', - isConnected: false, - status: WalletStatus.DISCONNECTED, - chainName: '', - chainId: -1, - error: null, - config: null - }, - starknetWallet: { - library: null, - account: '', - isConnected: false, - status: WalletStatus.DISCONNECTED, - chainName: '', - chainId: -1, - error: null, - config: null - }, - connectWallet: () => {}, - resetWallet: () => {}, - swapWallets: () => {} -}); diff --git a/src/providers/CombineWalletsProvider/hooks.js b/src/providers/CombineWalletsProvider/hooks.js deleted file mode 100644 index 9aa4c1ec..00000000 --- a/src/providers/CombineWalletsProvider/hooks.js +++ /dev/null @@ -1,41 +0,0 @@ -import {useCallback, useContext} from 'react'; - -import {useTransferData} from '../../components/Features/Transfer/Transfer/Transfer.hooks'; -import {CombineWalletsContext} from './context'; - -export const useCombineWallets = () => { - const combineWallets = useContext(CombineWalletsContext); - const {isEthereum} = useTransferData(); - - const getActiveWallet = () => - isEthereum ? combineWallets.ethereumWallet : combineWallets.starknetWallet; - - const connectWallet = useCallback(walletConfig => combineWallets.connectWallet(walletConfig), []); - - const resetWallet = useCallback(() => combineWallets.resetWallet(), []); - - const swapWallets = useCallback(() => combineWallets.swapWallets(), []); - - return { - ...getActiveWallet(), - connectWallet, - resetWallet, - swapWallets - }; -}; - -export const useEthereumWallet = () => { - const combineWallets = useContext(CombineWalletsContext); - - return { - ...combineWallets.ethereumWallet - }; -}; - -export const useStarknetWallet = () => { - const combineWallets = useContext(CombineWalletsContext); - - return { - ...combineWallets.starknetWallet - }; -}; diff --git a/src/providers/TransactionsProvider/TransactionsProvider.js b/src/providers/TransactionsProvider/TransactionsProvider.js new file mode 100644 index 00000000..102bed46 --- /dev/null +++ b/src/providers/TransactionsProvider/TransactionsProvider.js @@ -0,0 +1,37 @@ +import PropTypes from 'prop-types'; +import React, {useEffect, useReducer} from 'react'; + +import {StorageManager} from '../../services'; +import {TransactionsContext} from './context'; +import {actions, initialState, reducer} from './reducer'; + +const LOCAL_STORAGE_KEY = 'STARKNET_BRIDGE_TXS'; + +export const TransactionsProvider = ({children}) => { + const [state, dispatch] = useReducer(reducer, initialState); + + useEffect(() => { + const storedTxs = StorageManager.getItem(LOCAL_STORAGE_KEY); + if (storedTxs) { + setTransactions(storedTxs); + } + }, []); + + const setTransactions = payload => { + dispatch({ + type: actions.SET_TRANSACTIONS, + payload + }); + }; + + const context = { + transactions: state, + setTransactions + }; + + return <TransactionsContext.Provider value={context}>{children}</TransactionsContext.Provider>; +}; + +TransactionsProvider.propTypes = { + children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) +}; diff --git a/src/providers/TransactionsProvider/context.js b/src/providers/TransactionsProvider/context.js new file mode 100644 index 00000000..786592ed --- /dev/null +++ b/src/providers/TransactionsProvider/context.js @@ -0,0 +1,8 @@ +import {createContext} from 'react'; + +import {initialState} from './reducer'; + +export const TransactionsContext = createContext({ + ...initialState, + setTransactions: () => {} +}); diff --git a/src/providers/TransactionsProvider/hooks.js b/src/providers/TransactionsProvider/hooks.js new file mode 100644 index 00000000..d023156a --- /dev/null +++ b/src/providers/TransactionsProvider/hooks.js @@ -0,0 +1,9 @@ +import {useContext} from 'react'; + +import {TransactionsContext} from './context'; + +export const useTransactions = () => { + const {transactions} = useContext(TransactionsContext); + + return transactions; +}; diff --git a/src/providers/TransactionsProvider/reducer.js b/src/providers/TransactionsProvider/reducer.js new file mode 100644 index 00000000..695dc960 --- /dev/null +++ b/src/providers/TransactionsProvider/reducer.js @@ -0,0 +1,19 @@ +export const actions = { + SET_TRANSACTIONS: 'Transactions/SET_TRANSACTIONS', + ADD_TRANSACTION: 'Transactions/ADD_TRANSACTION' +}; + +export const initialState = []; + +export const reducer = (state, action) => { + switch (action.type) { + case actions.SET_TRANSACTIONS: + return action.payload; + + case actions.ADD_TRANSACTION: + return [...state.transactions, action.payload]; + + default: + return state; + } +}; diff --git a/src/providers/CombineWalletsProvider/CombineWalletsProvider.js b/src/providers/WalletsProvider/WalletsProvider.js similarity index 70% rename from src/providers/CombineWalletsProvider/CombineWalletsProvider.js rename to src/providers/WalletsProvider/WalletsProvider.js index 80b2eb3e..6923787c 100644 --- a/src/providers/CombineWalletsProvider/CombineWalletsProvider.js +++ b/src/providers/WalletsProvider/WalletsProvider.js @@ -9,13 +9,11 @@ import { } from '../../components/Features/Transfer/Transfer/Transfer.hooks'; import {WalletStatus} from '../../enums'; import {web3} from '../../web3'; -import {CombineWalletsContext} from './context'; +import {WalletsContext} from './context'; import {actions, initialState, reducer} from './reducer'; -export const CombineWalletsProvider = ({children}) => { +export const WalletsProvider = ({children}) => { const [state, dispatch] = useReducer(reducer, initialState); - const [ethereumPendingWalletConfig, setEthereumPendingWalletConfig] = useState({}); - const [starknetPendingWalletConfig, setStarknetPendingWalletConfig] = useState({}); const {status, connect, reset, isConnected, error, account, chainId, networkName} = useWallet(); const {selectedAddress, isConnected: isStarknetConnected, enable} = getStarknet(); const [isEthereum, setEthereum] = useIsEthereum(); @@ -23,45 +21,47 @@ export const CombineWalletsProvider = ({children}) => { // Handles starknet wallet changes useEffect(async () => { - if (isStarknet) { - if (isStarknetConnected && !state.starknetWallet.config) { - setStarknetWalletConfig(starknetPendingWalletConfig); - } - await maybeUpdateStarknetWallet(); - } + (isStarknet || state.starknetWallet.config) && (await maybeUpdateStarknetWallet()); }, [selectedAddress, isStarknetConnected]); // Handles ethereum wallet changes useEffect(async () => { - if (isEthereum) { - if (isConnected() && !state.ethereumWallet.config) { - setEthereumWalletConfig(ethereumPendingWalletConfig); - } - maybeUpdateEthereumWallet(); - } + (isEthereum || state.ethereumWallet.config) && maybeUpdateEthereumWallet(); }, [status, error, account, chainId, networkName]); const connectWallet = async walletConfig => { if (isEthereum) { - setEthereumPendingWalletConfig(walletConfig); - const {connectorId} = walletConfig; - await connect(connectorId); - maybeUpdateEthereumWallet(); - } else { - setStarknetPendingWalletConfig(walletConfig); - await getStarknet({showModal: true}).enable(); - await maybeUpdateStarknetWallet(); + return connectEthereumWallet(walletConfig); } + return connectStarknetWallet(walletConfig); + }; + + const connectEthereumWallet = async walletConfig => { + const {connectorId} = walletConfig; + await connect(connectorId); + setEthereumWalletConfig(walletConfig); + }; + + const connectStarknetWallet = async walletConfig => { + await getStarknet({showModal: true}).enable(); + setStarknetWalletConfig(walletConfig); }; const resetWallet = () => { if (isEthereum) { - setEthereumWalletConfig(null); - return reset(); - } else { - setStarknetWalletConfig(null); - return null; + return resetEthereumWallet(); } + return resetStarknetWallet(); + }; + + const resetEthereumWallet = () => { + setEthereumWalletConfig(null); + return reset(); + }; + + const resetStarknetWallet = () => { + setStarknetWalletConfig(null); + return null; }; const swapWallets = async () => { @@ -143,15 +143,17 @@ export const CombineWalletsProvider = ({children}) => { const context = { ...state, connectWallet, + connectEthereumWallet, + connectStarknetWallet, resetWallet, + resetEthereumWallet, + resetStarknetWallet, swapWallets }; - return ( - <CombineWalletsContext.Provider value={context}>{children}</CombineWalletsContext.Provider> - ); + return <WalletsContext.Provider value={context}>{children}</WalletsContext.Provider>; }; -CombineWalletsProvider.propTypes = { +WalletsProvider.propTypes = { children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) }; diff --git a/src/providers/WalletsProvider/context.js b/src/providers/WalletsProvider/context.js new file mode 100644 index 00000000..dc4e7db0 --- /dev/null +++ b/src/providers/WalletsProvider/context.js @@ -0,0 +1,14 @@ +import {createContext} from 'react'; + +import {initialState} from './reducer'; + +export const WalletsContext = createContext({ + ...initialState, + connectEthereumWallet: () => {}, + connectStarknetWallet: () => {}, + connectWallet: () => {}, + resetWallet: () => {}, + resetEthereumWallet: () => {}, + resetStarknetWallet: () => {}, + swapWallets: () => {} +}); diff --git a/src/providers/WalletsProvider/hooks.js b/src/providers/WalletsProvider/hooks.js new file mode 100644 index 00000000..338ad757 --- /dev/null +++ b/src/providers/WalletsProvider/hooks.js @@ -0,0 +1,51 @@ +import {useCallback, useContext, useEffect, useState} from 'react'; + +import {useTransferData} from '../../components/Features/Transfer/Transfer/Transfer.hooks'; +import {WalletsContext} from './context'; + +export const useWallets = () => { + const wallets = useContext(WalletsContext); + const [activeWallet, setActiveWallet] = useState(wallets.ethereumWallet); + const {isEthereum} = useTransferData(); + + useEffect(() => { + setActiveWallet(isEthereum ? wallets.ethereumWallet : wallets.starknetWallet); + }, [isEthereum]); + + const connectWallet = useCallback(walletConfig => wallets.connectWallet(walletConfig), []); + const resetWallet = useCallback(() => wallets.resetWallet(), []); + const swapWallets = useCallback(() => wallets.swapWallets(), []); + + return { + ...activeWallet, + connectWallet, + resetWallet, + swapWallets + }; +}; + +export const useEthereumWallet = () => { + const wallets = useContext(WalletsContext); + const connectWallet = useCallback( + walletConfig => wallets.connectEthereumWallet(walletConfig), + [] + ); + + return { + connectWallet, + ...wallets.ethereumWallet + }; +}; + +export const useStarknetWallet = () => { + const wallets = useContext(WalletsContext); + const connectWallet = useCallback( + walletConfig => wallets.connectStarknetWallet(walletConfig), + [] + ); + + return { + connectWallet, + ...wallets.starknetWallet + }; +}; diff --git a/src/providers/CombineWalletsProvider/reducer.js b/src/providers/WalletsProvider/reducer.js similarity index 78% rename from src/providers/CombineWalletsProvider/reducer.js rename to src/providers/WalletsProvider/reducer.js index f4de0951..43ecc6d7 100644 --- a/src/providers/CombineWalletsProvider/reducer.js +++ b/src/providers/WalletsProvider/reducer.js @@ -7,26 +7,23 @@ export const actions = { SET_STARKNET_WALLET_CONFIG: 'CombineWallets/SET_STARKNET_WALLET_CONFIG' }; +const initialWalletState = { + library: null, + account: '', + isConnected: false, + status: WalletStatus.DISCONNECTED, + chainName: '', + chainId: -1, + error: null, + config: null +}; + export const initialState = { ethereumWallet: { - library: null, - account: '', - isConnected: false, - status: WalletStatus.DISCONNECTED, - chainName: '', - chainId: -1, - error: null, - config: null + ...initialWalletState }, starknetWallet: { - library: null, - account: '', - isConnected: false, - status: WalletStatus.DISCONNECTED, - chainName: '', - chainId: -1, - error: null, - config: null + ...initialWalletState } }; diff --git a/src/providers/index.js b/src/providers/index.js index 9bb6fe35..40fa8934 100644 --- a/src/providers/index.js +++ b/src/providers/index.js @@ -1,10 +1,12 @@ -import {CombineWalletsProvider} from './CombineWalletsProvider/CombineWalletsProvider'; import {StoreProvider} from './StoreProvider/StoreProvider'; +import {TransactionsProvider} from './TransactionsProvider/TransactionsProvider'; import {UseWalletProvider} from './UseWalletProvider/UseWalletProvider'; +import {WalletsProvider} from './WalletsProvider/WalletsProvider'; import {combineProviders} from './combine-providers'; export const Providers = combineProviders([ StoreProvider, UseWalletProvider, - CombineWalletsProvider + WalletsProvider, + TransactionsProvider ]); diff --git a/src/store/store.js b/src/store/store.js index f5516d80..c3d2877f 100644 --- a/src/store/store.js +++ b/src/store/store.js @@ -1,7 +1,7 @@ import {configureStore} from '@reduxjs/toolkit'; import bridge from '../components/Features/Bridge/Bridge.slice'; -import modal from '../components/Features/ModalProvider/ModalProvider/ModalProvider.slice'; +import modal from '../components/Features/ModalProvider/ModalProvider.slice'; import transfer from '../components/Features/Transfer/Transfer/Transfer.slice'; export const store = configureStore({ diff --git a/src/styles/colors.module.scss b/src/styles/colors.module.scss index ae78c4c8..3cb18d80 100644 --- a/src/styles/colors.module.scss +++ b/src/styles/colors.module.scss @@ -20,6 +20,7 @@ $--color-error: #da4646; :export { colorBlack: $--color-black; colorWhite: $--color-white; + colorWhite1: $--color-white-1; colorBeta: $--color-beta; colorAlpha3: $--color-alpha-3; colorAlpha5: $--color-alpha-5; diff --git a/src/utils/browser.js b/src/utils/browser.js index 1a6d8843..9a2a5a3b 100644 --- a/src/utils/browser.js +++ b/src/utils/browser.js @@ -1,3 +1,10 @@ export const openInNewTab = url => { window.open(url, '_blank').focus(); }; + +export const getUrlParameter = name => { + name = name.replace(/[[]/, '[').replace(/[\]]/, '\\]'); + const regex = new RegExp('[\\?&]' + name + '=([^&#]*)'); + const results = regex.exec(location.search); + return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' ')); +}; diff --git a/src/utils/contract.js b/src/utils/contract.js index e3ef76ae..388d23ae 100644 --- a/src/utils/contract.js +++ b/src/utils/contract.js @@ -21,6 +21,18 @@ export const sendTransaction = async (contract, method, args, account) => { } }; +export const listen = async (contract, event, callback) => { + try { + contract.events?.[event]({}, (error, event) => callback(error, event)); + } catch (ex) { + callback(ex); + } +}; + +export const listenOnce = async (contract, event, callback) => { + contract.once(event, null, (error, event) => callback(error, event)); +}; + export const getStarknetContract = (address, ABI) => new Contract(ABI, address, getStarknet().provider); diff --git a/src/utils/hash.js b/src/utils/hash.js new file mode 100644 index 00000000..dd808451 --- /dev/null +++ b/src/utils/hash.js @@ -0,0 +1,64 @@ +import {hash} from 'starknet'; + +const message = { + from_address: '0x70BaacDe3C91b64f00D37a9B07Bf294600655fD2', + payload: [ + '2078603289626043341054635759994245207449861009813861793671178142800190780834', + '69', + '0' + ], + selector: '1285101517810983806491589552491143496277809242732141897358598292095611420389', + to_address: '3069768452457587449196331700965303301050740196780238415314752610503277885727' + // 0x49872a1113409880832c25e4fa331bbfcb1864850605a49ce8779d2b66635a2 - user contract + // 0x06c96d68401b740dbca6fb352262ea7d5026373ad5988b785f06ebc2aa23391f - bridge +}; + +export const txHash = msg => { + // convert to bytes and then BN (as py works) + const txHashPrefix = 'invoke'; // expected: 115923154332517 + const chainId = 'TESTNET'; // expected: 23720122242712916; + const calldataHash = hash.hashCalldata(msg.payload); + return hash.computeHashOnElements([ + txHashPrefix, + msg.to_address, + msg.selector, + calldataHash, + chainId + ]); +}; + +/* +MAINNET = from_bytes(b"MAINNET") +TESTNET = from_bytes(b"TESTNET") +*/ + +/* + TransactionType.DEPLOY: b"deploy", + TransactionType.INVOKE_FUNCTION: b"invoke", + */ + +/* +def from_bytes( + value: bytes, byte_order: Optional[str] = None, signed: Optional[bool] = None +) -> int: + """ + Converts the given bytes object (parsed according to the given byte order) to an integer. + Default byte order is 'big'. + """ + if byte_order is None: + byte_order = "big" + + if signed is None: + signed = False + + return int.from_bytes(value, byteorder=byte_order, signed=signed) + + */ + +/* + + +{"blockHash":"0xafba3867db9b97dd74bae081dcbcf511eb177a2c89fd8a4c8962153905c734d5","blockNumber":6015914,"contractAddress":null,"cumulativeGasUsed":636794,"effectiveGasPrice":"0x9502f907","from":"0x16fb96a5fa0427af0c8f7cf1eb4870231c8154b6","gasUsed":101395,"logsBloom":"0x00000000000000000000000000000000002000000000000000000000000000040000002000000000001000001000000000000000001008000000000000200080004000000000000000000008000000000000000000000000000000000008000000000408000100000000000000000000000000000000100000000010200000000000000000000000000000000000000000000000040000000000000080000000020000000000000000000001000000000000000000000000000000000100000200000202008000000000000000000000000000000084000000000000000000000010000000000000000010000000000000000002000000000000040000000000","status":true,"to":"0x70baacde3c91b64f00d37a9b07bf294600655fd2","transactionHash":"0x804a7bf3cdf295cd72d1ecb5bc3c1bfd2703a6c3e2dfb9c529116afd89d4a0ef","transactionIndex":3,"type":"0x2","events":{"0":{"address":"0xe4C2493C66e068D65Cf1C38a2d7bDa25d9f08980","blockHash":"0xafba3867db9b97dd74bae081dcbcf511eb177a2c89fd8a4c8962153905c734d5","blockNumber":6015914,"logIndex":16,"removed":false,"transactionHash":"0x804a7bf3cdf295cd72d1ecb5bc3c1bfd2703a6c3e2dfb9c529116afd89d4a0ef","transactionIndex":3,"id":"log_14e0478b","returnValues":{},"signature":null,"raw":{"data":"0x0000000000000000000000000000000000000000000000000000000000000045","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x00000000000000000000000016fb96a5fa0427af0c8f7cf1eb4870231c8154b6","0x00000000000000000000000070baacde3c91b64f00d37a9b07bf294600655fd2"]}},"1":{"address":"0xe4C2493C66e068D65Cf1C38a2d7bDa25d9f08980","blockHash":"0xafba3867db9b97dd74bae081dcbcf511eb177a2c89fd8a4c8962153905c734d5","blockNumber":6015914,"logIndex":17,"removed":false,"transactionHash":"0x804a7bf3cdf295cd72d1ecb5bc3c1bfd2703a6c3e2dfb9c529116afd89d4a0ef","transactionIndex":3,"id":"log_95009332","returnValues":{},"signature":null,"raw":{"data":"0x0000000000000000000000000000000000000000000000000000000000000000","topics":["0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","0x00000000000000000000000016fb96a5fa0427af0c8f7cf1eb4870231c8154b6","0x00000000000000000000000070baacde3c91b64f00d37a9b07bf294600655fd2"]}},"2":{"address":"0xde29d060D45901Fb19ED6C6e959EB22d8626708e","blockHash":"0xafba3867db9b97dd74bae081dcbcf511eb177a2c89fd8a4c8962153905c734d5","blockNumber":6015914,"logIndex":19,"removed":false,"transactionHash":"0x804a7bf3cdf295cd72d1ecb5bc3c1bfd2703a6c3e2dfb9c529116afd89d4a0ef","transactionIndex":3,"id":"log_c99c0301","returnValues":{},"signature":null,"raw":{"data":"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003049872a1113409880832c25e4fa331bbfcb1864850605a49ce8779d2b66635a200000000000000000000000000000000000000000000000000000000000000450000000000000000000000000000000000000000000000000000000000000000","topics":["0x474d2456b41fc1146ae05ba36e794e448efd2f172a9128ca1c8c6dbdb22b62f7","0x00000000000000000000000070baacde3c91b64f00d37a9b07bf294600655fd2","0x06c96d68401b740dbca6fb352262ea7d5026373ad5988b785f06ebc2aa23391f","0x02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5"]}},"LogDeposit":{"address":"0x70BaacDe3C91b64f00D37a9B07Bf294600655fD2","blockHash":"0xafba3867db9b97dd74bae081dcbcf511eb177a2c89fd8a4c8962153905c734d5","blockNumber":6015914,"logIndex":18,"removed":false,"transactionHash":"0x804a7bf3cdf295cd72d1ecb5bc3c1bfd2703a6c3e2dfb9c529116afd89d4a0ef","transactionIndex":3,"id":"log_e3d711f5","returnValues":{"0":"0x16Fb96a5fa0427Af0C8F7cF1eB4870231c8154B6","1":"69","2":"2078603289626043341054635759994245207449861009813861793671178142800190780834","sender":"0x16Fb96a5fa0427Af0C8F7cF1eB4870231c8154B6","amount":"69","l2Recipient":"2078603289626043341054635759994245207449861009813861793671178142800190780834"},"event":"LogDeposit","signature":"0x9dbb0e7dda3e09710ce75b801addc87cf9d9c6c581641b3275fca409ad086c62","raw":{"data":"0x00000000000000000000000016fb96a5fa0427af0c8f7cf1eb4870231c8154b60000000000000000000000000000000000000000000000000000000000000045049872a1113409880832c25e4fa331bbfcb1864850605a49ce8779d2b66635a2","topics":["0x9dbb0e7dda3e09710ce75b801addc87cf9d9c6c581641b3275fca409ad086c62"]}}}} + + + */ diff --git a/src/utils/index.js b/src/utils/index.js index 8780ac87..9e5ddd6d 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -1,3 +1,13 @@ +import {getLogger, getLogLevel, setLogLevel} from '../services'; + export * from './wallet'; export * from './browser'; export * from './string'; +export * from './hash'; + +export const printPackageInfo = (name, version, color) => { + const currentLogLevel = getLogLevel(); + setLogLevel(getLogger().INFO); + getLogger().info(`%c ${name} v${version}`, `color: ${color || '#ff98f9'}; font-size: large`); + setLogLevel(currentLogLevel); +}; diff --git a/src/utils/wallet.js b/src/utils/wallet.js index 4ff426d0..66d024c2 100644 --- a/src/utils/wallet.js +++ b/src/utils/wallet.js @@ -1,6 +1,6 @@ export const formatBalance = balance => parseFloat(balance.toFixed(5)); -export const formatAddress = account => { +export const shortenAddress = account => { if (account) { return `${account.substring(0, 5)}...${account.substring(account.length - 3)}`; } From 8dae7be31ee23d032ddc27b8626239a5683455f3 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 14 Dec 2021 15:00:31 +0200 Subject: [PATCH 011/211] feat: support transfer ETH to starknet [skip ci] --- src/abis/ethereum/erc20-bridge.json | 6 +- src/abis/ethereum/eth-bridge.json | 6 +- .../{erc20-bridge.json => bridge.json} | 0 src/abis/starknet/index.js | 2 +- src/api/bridge.js | 21 ++++- src/api/erc20.js | 30 +++++- .../SelectTokenRow/SelectTokenRow.js | 4 +- .../Features/Transfer/Transfer/Transfer.js | 13 ++- .../contracts.ethereum.js | 7 +- src/config/addresses/index.js | 3 + src/config/addresses/tokens.ethereum.js | 16 ++++ src/config/addresses/tokens.starknet.js | 28 ++++++ src/config/contracts/contracts.starknet.js | 11 --- src/config/tokens/tokens.ethereum.js | 28 ------ src/config/tokens/tokens.starknet.js | 13 --- src/hooks/useContract.js | 26 ++---- src/hooks/useTokenBalance.js | 16 +--- src/hooks/useTokens.js | 10 +- src/hooks/useTransferToStarknet.js | 93 ++++++++++++------- src/utils/contract.js | 8 +- src/utils/hash.js | 64 ------------- src/utils/index.js | 2 +- src/utils/token.js | 3 + 23 files changed, 195 insertions(+), 215 deletions(-) rename src/abis/starknet/{erc20-bridge.json => bridge.json} (100%) rename src/config/{contracts => addresses}/contracts.ethereum.js (59%) create mode 100644 src/config/addresses/index.js create mode 100644 src/config/addresses/tokens.ethereum.js create mode 100644 src/config/addresses/tokens.starknet.js delete mode 100644 src/config/contracts/contracts.starknet.js delete mode 100644 src/config/tokens/tokens.ethereum.js delete mode 100644 src/config/tokens/tokens.starknet.js delete mode 100644 src/utils/hash.js create mode 100644 src/utils/token.js diff --git a/src/abis/ethereum/erc20-bridge.json b/src/abis/ethereum/erc20-bridge.json index 51e3d895..a303ef24 100644 --- a/src/abis/ethereum/erc20-bridge.json +++ b/src/abis/ethereum/erc20-bridge.json @@ -79,7 +79,7 @@ "type": "uint256" } ], - "name": "LogSetL2TokenContract", + "name": "LogSetL2TokenBridge", "type": "event" }, { @@ -175,11 +175,11 @@ "inputs": [ { "internalType": "uint256", - "name": "l2TokenContract_", + "name": "l2TokenBridge_", "type": "uint256" } ], - "name": "setL2TokenContract", + "name": "setL2TokenBridge", "outputs": [], "stateMutability": "nonpayable", "type": "function" diff --git a/src/abis/ethereum/eth-bridge.json b/src/abis/ethereum/eth-bridge.json index 6d96ed4f..85c0ed78 100644 --- a/src/abis/ethereum/eth-bridge.json +++ b/src/abis/ethereum/eth-bridge.json @@ -79,7 +79,7 @@ "type": "uint256" } ], - "name": "LogSetL2TokenContract", + "name": "LogSetL2TokenBridge", "type": "event" }, { @@ -170,11 +170,11 @@ "inputs": [ { "internalType": "uint256", - "name": "l2TokenContract_", + "name": "l2TokenBridge_", "type": "uint256" } ], - "name": "setL2TokenContract", + "name": "setL2TokenBridge", "outputs": [], "stateMutability": "nonpayable", "type": "function" diff --git a/src/abis/starknet/erc20-bridge.json b/src/abis/starknet/bridge.json similarity index 100% rename from src/abis/starknet/erc20-bridge.json rename to src/abis/starknet/bridge.json diff --git a/src/abis/starknet/index.js b/src/abis/starknet/index.js index e63b29b2..045a4e90 100644 --- a/src/abis/starknet/index.js +++ b/src/abis/starknet/index.js @@ -1,2 +1,2 @@ export * as STARKNET_ERC20_ABI from './erc20.json'; -export * as STARKNET_ERC20_BRIDGE_ABI from './erc20-bridge.json'; +export * as STARKNET_BRIDGE_ABI from './bridge.json'; diff --git a/src/api/bridge.js b/src/api/bridge.js index 10248afe..75806a8e 100644 --- a/src/api/bridge.js +++ b/src/api/bridge.js @@ -1,8 +1,25 @@ import {sendTransaction} from '../utils/contract'; +import {web3} from '../web3'; -export const deposit = async (contract, fromAddress, toAddress, amount) => { +export const depositToken = async (l2Recipient, amount, bridgeContract, from) => { try { - return await sendTransaction(contract, 'deposit', [amount, toAddress], fromAddress); + return await sendTransaction( + bridgeContract, + 'deposit', + [web3.utils.toWei(amount, 'ether'), l2Recipient], + {from} + ); + } catch (ex) { + return Promise.reject(ex); + } +}; + +export const depositEth = async (l2Recipient, value, ethBridgeContract, from) => { + try { + return await sendTransaction(ethBridgeContract, 'deposit', [l2Recipient], { + from, + value: web3.utils.toWei(value, 'ether') + }); } catch (ex) { return Promise.reject(ex); } diff --git a/src/api/erc20.js b/src/api/erc20.js index 19a46f1e..45ff481f 100644 --- a/src/api/erc20.js +++ b/src/api/erc20.js @@ -1,16 +1,36 @@ -import {callContract, sendTransaction} from '../utils/contract'; +import {uint256} from 'starknet'; -export const approve = async (contract, toAddress, fromAddress, amount) => { +import {callContract, callStarknetContract, sendTransaction} from '../utils/contract'; +import {web3} from '../web3'; + +export const approve = async (spender, value, contract, from, isEthereum = true) => { + try { + if (isEthereum) { + return await sendTransaction(contract, 'approve', [spender, web3.utils.toWei(value)], {from}); + } + } catch (ex) { + return Promise.reject(ex); + } +}; + +export const getTokenBalance = async (account, contract, isEthereum = true) => { try { - return await sendTransaction(contract, 'approve', [toAddress, amount], fromAddress); + if (isEthereum) { + const balance = await callContract(contract, 'balanceOf', [account]); + return Number(web3.utils.fromWei(balance)); + } else { + const {balance} = await callStarknetContract(contract, 'balanceOf', [{account}]); + return uint256.uint256ToBN(balance).toNumber(); + } } catch (ex) { return Promise.reject(ex); } }; -export const balanceOf = async (contract, address) => { +export const getEthBalance = async account => { try { - return await callContract(contract, 'balanceOf', [], address); + const balance = await web3.eth.getBalance(account); + return Number(web3.utils.fromWei(balance)); } catch (ex) { return Promise.reject(ex); } diff --git a/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js b/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js index 89d61254..1032e586 100644 --- a/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js +++ b/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js @@ -10,13 +10,13 @@ import {LoadingSize} from '../../../UI/Loading/Loading.enums'; import styles from './SelectTokenRow.module.scss'; export const SelectTokenRow = ({tokenData, onClick}) => { + const {name, symbol, tokenAddress} = tokenData; const [mounted, setMounted] = useState(true); const [error, setError] = useState(null); const [isLoading, setIsLoading] = useState(true); const [balance, setBalance] = useState(null); - const {name, symbol, address} = tokenData; const {account} = useWallets(); - const getBalance = useTokenBalance(address); + const getBalance = useTokenBalance(tokenAddress); useEffect(async () => { setIsLoading(true); diff --git a/src/components/Features/Transfer/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer/Transfer.js index da6d0aab..74216adf 100644 --- a/src/components/Features/Transfer/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer/Transfer.js @@ -2,6 +2,7 @@ import React, {useEffect, useState} from 'react'; import {ActionType, NetworkType} from '../../../../enums'; import {useTransferToStarknet} from '../../../../hooks'; +import {isEth} from '../../../../utils'; import {Menu} from '../../../UI'; import {useBridgeActions} from '../../Bridge/Bridge.hooks'; import { @@ -25,8 +26,14 @@ export const Transfer = () => { const [amount, setAmount, clearAmount] = useAmount(); const {action, selectedToken, fromNetwork, toNetwork} = useTransferData(); const {showSelectTokenMenu} = useBridgeActions(); - const {transferData, transferToStarknet, transferError, isTransferring, transferProgress} = - useTransferToStarknet(selectedToken); + const { + transferData, + transferEthToStarknet, + transferTokenToStarknet, + transferError, + isTransferring, + transferProgress + } = useTransferToStarknet(selectedToken); const showProgressModal = useProgressModal(); const showTransactionSubmittedModal = useTransactionSubmittedModal(); @@ -75,7 +82,7 @@ export const Transfer = () => { const onTransferClick = async () => { if (isEthereum) { - return transferToStarknet(amount); + return isEth(selectedToken) ? transferEthToStarknet(amount) : transferTokenToStarknet(amount); } }; diff --git a/src/config/contracts/contracts.ethereum.js b/src/config/addresses/contracts.ethereum.js similarity index 59% rename from src/config/contracts/contracts.ethereum.js rename to src/config/addresses/contracts.ethereum.js index 0dd78f92..33b05e16 100644 --- a/src/config/contracts/contracts.ethereum.js +++ b/src/config/addresses/contracts.ethereum.js @@ -1,13 +1,8 @@ import {ChainType} from '../../enums'; -export const ERC20_BRIDGE_CONTRACT_ADDRESS = { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x70BaacDe3C91b64f00D37a9B07Bf294600655fD2' -}; - export const ETH_BRIDGE_CONTRACT_ADDRESS = { [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '' + [ChainType.GOERLI.id]: '0x7419275fe04ab65c9c9FB8bCB21601A4A34BF1b9' }; export const MESSAGING_CONTRACT_ADDRESS = { diff --git a/src/config/addresses/index.js b/src/config/addresses/index.js new file mode 100644 index 00000000..4aedc4df --- /dev/null +++ b/src/config/addresses/index.js @@ -0,0 +1,3 @@ +export * from './contracts.ethereum'; +export * from './tokens.ethereum'; +export * from './tokens.starknet'; diff --git a/src/config/addresses/tokens.ethereum.js b/src/config/addresses/tokens.ethereum.js new file mode 100644 index 00000000..83582c09 --- /dev/null +++ b/src/config/addresses/tokens.ethereum.js @@ -0,0 +1,16 @@ +import {ChainType} from '../../enums'; + +export const EthereumTokens = [ + { + bridgeAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x5542fd7dc64008978B50Ccb56274a00DEF2B57FE' + }, + tokenAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0xe4C2493C66e068D65Cf1C38a2d7bDa25d9f08980' + }, + name: 'ERC20 StarkNet Token', + symbol: 'E20ST' + } +]; diff --git a/src/config/addresses/tokens.starknet.js b/src/config/addresses/tokens.starknet.js new file mode 100644 index 00000000..bc64fe7c --- /dev/null +++ b/src/config/addresses/tokens.starknet.js @@ -0,0 +1,28 @@ +import {ChainType, NetworkType} from '../../enums'; + +export const StarknetTokens = [ + { + bridgeAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x012291a5bcd1b08e237047277a6055aec5a33d0e15610f869d517575ca983a82' + }, + tokenAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x03188903406daaaedd123598a8bd1f5dbec34720089037f4bf1473e51857e190' + }, + name: NetworkType.ETHEREUM.name, + symbol: NetworkType.ETHEREUM.symbol + }, + { + bridgeAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x0061f462a8a2ea511189e4ec73d115ef65fad071e643e99644818249604a525d' + }, + tokenAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x021eb73bd66eb18c37ec7b1e2567bc3fa8ba9ac0d391b53745a5f9d483217595' + }, + name: 'ERC20 StarkNet Token', + symbol: 'E20ST' + } +]; diff --git a/src/config/contracts/contracts.starknet.js b/src/config/contracts/contracts.starknet.js deleted file mode 100644 index 6a5a46e8..00000000 --- a/src/config/contracts/contracts.starknet.js +++ /dev/null @@ -1,11 +0,0 @@ -import {ChainType} from '../../enums'; - -export const STARKNET_ERC20_BRIDGE_CONTRACT_ADDRESS = { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x06c96d68401b740dbca6fb352262ea7d5026373ad5988b785f06ebc2aa23391f' -}; - -export const STARKNET_ETH_BRIDGE_CONTRACT_ADDRESS = { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '' -}; diff --git a/src/config/tokens/tokens.ethereum.js b/src/config/tokens/tokens.ethereum.js deleted file mode 100644 index ebc417cd..00000000 --- a/src/config/tokens/tokens.ethereum.js +++ /dev/null @@ -1,28 +0,0 @@ -import {ChainType} from '../../enums'; - -export default [ - { - address: { - [ChainType.MAIN.id]: '0x2b591e99afe9f32eaa6214f7b7629768c40eeb39', - [ChainType.GOERLI.id]: '0xce87904b5fce1ced9e548c061d0ceb9950401758' - }, - name: 'HEX', - symbol: 'HEX' - }, - { - address: { - [ChainType.MAIN.id]: '0x6b175474e89094c44da98b954eedeac495271d0f', - [ChainType.GOERLI.id]: '0x0b788e8d159c1959bd8dde838790df79d015ee57' - }, - name: 'Dai Stablecoin', - symbol: 'DAI' - }, - { - address: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0xe4C2493C66e068D65Cf1C38a2d7bDa25d9f08980' - }, - name: 'ERC20 StarkNet Token', - symbol: 'E20ST' - } -]; diff --git a/src/config/tokens/tokens.starknet.js b/src/config/tokens/tokens.starknet.js deleted file mode 100644 index d3833f7c..00000000 --- a/src/config/tokens/tokens.starknet.js +++ /dev/null @@ -1,13 +0,0 @@ -import {ChainType} from '../../enums'; - -export default [ - { - address: { - [ChainType.MAIN.id]: '', - // [ChainType.GOERLI.id]: '0x06ebb42ca1b237cd92fcc677d9ff02ffadcc3c66d5748f6ebd795b531c51266c' - [ChainType.GOERLI.id]: '0x021eb73bd66eb18c37ec7b1e2567bc3fa8ba9ac0d391b53745a5f9d483217595' - }, - name: 'ERC20 StarkNet Token', - symbol: 'E20ST' - } -]; diff --git a/src/hooks/useContract.js b/src/hooks/useContract.js index d2614a14..c77b0924 100644 --- a/src/hooks/useContract.js +++ b/src/hooks/useContract.js @@ -1,14 +1,9 @@ import {useMemo} from 'react'; import {ERC20_ABI, ERC20_BRIDGE_ABI, ETH_BRIDGE_ABI, MESSAGING_ABI} from '../abis/ethereum'; -import {STARKNET_ERC20_ABI, STARKNET_ERC20_BRIDGE_ABI} from '../abis/starknet'; +import {STARKNET_ERC20_ABI, STARKNET_BRIDGE_ABI} from '../abis/starknet'; import {useTransferData} from '../components/Features/Transfer/Transfer/Transfer.hooks'; -import { - ERC20_BRIDGE_CONTRACT_ADDRESS, - ETH_BRIDGE_CONTRACT_ADDRESS, - MESSAGING_CONTRACT_ADDRESS -} from '../config/contracts/contracts.ethereum'; -import {STARKNET_ERC20_BRIDGE_CONTRACT_ADDRESS} from '../config/contracts/contracts.starknet'; +import {ETH_BRIDGE_CONTRACT_ADDRESS, MESSAGING_CONTRACT_ADDRESS} from '../config/addresses'; import {useWallets} from '../providers/WalletsProvider/hooks'; import {getContract, getStarknetContract} from '../utils/contract'; @@ -59,12 +54,9 @@ export const useTokenContract = tokenAddresses => { return useMemo(() => (isEthereum ? tokenContract : starknetTokenContract), [isEthereum]); }; -export const useTokenBridgeContract = () => { - const tokenBridgeContract = useContract(ERC20_BRIDGE_CONTRACT_ADDRESS, ERC20_BRIDGE_ABI); - const starknetTokenBridgeContract = useContract( - STARKNET_ERC20_BRIDGE_CONTRACT_ADDRESS, - STARKNET_ERC20_BRIDGE_ABI - ); +export const useTokenBridgeContract = bridgeAddress => { + const tokenBridgeContract = useContract(bridgeAddress, ERC20_BRIDGE_ABI); + const starknetTokenBridgeContract = useContract(bridgeAddress, STARKNET_BRIDGE_ABI); const {isEthereum} = useTransferData(); return useMemo( () => (isEthereum ? tokenBridgeContract : starknetTokenBridgeContract), @@ -72,10 +64,6 @@ export const useTokenBridgeContract = () => { ); }; -export const useEthBridgeContract = () => { - return useContract(ETH_BRIDGE_CONTRACT_ADDRESS, ETH_BRIDGE_ABI); -}; +export const useEthBridgeContract = () => useContract(ETH_BRIDGE_CONTRACT_ADDRESS, ETH_BRIDGE_ABI); -export const useMessagingContract = () => { - return useContract(MESSAGING_CONTRACT_ADDRESS, MESSAGING_ABI); -}; +export const useMessagingContract = () => useContract(MESSAGING_CONTRACT_ADDRESS, MESSAGING_ABI); diff --git a/src/hooks/useTokenBalance.js b/src/hooks/useTokenBalance.js index 7564565d..0f8245ca 100644 --- a/src/hooks/useTokenBalance.js +++ b/src/hooks/useTokenBalance.js @@ -1,9 +1,7 @@ import {useCallback} from 'react'; -import {uint256} from 'starknet'; +import {getEthBalance, getTokenBalance} from '../api/erc20'; import {useTransferData} from '../components/Features/Transfer/Transfer/Transfer.hooks'; -import {callContract, callStarknetContract} from '../utils/contract'; -import {web3} from '../web3'; import {useTokenContract} from './useContract'; export const useTokenBalance = tokenAddresses => { @@ -11,14 +9,10 @@ export const useTokenBalance = tokenAddresses => { const {isEthereum} = useTransferData(); return useCallback( - async account => { - if (isEthereum) { - const balance = await callContract(contract, 'balanceOf', [account]); - return Number(web3.utils.fromWei(balance)); - } - const {balance} = await callStarknetContract(contract, 'balanceOf', [{account}]); - return uint256.uint256ToBN(balance).toNumber(); - }, + async account => + !tokenAddresses && isEthereum + ? await getEthBalance(account) + : await getTokenBalance(account, contract, isEthereum), [isEthereum] ); }; diff --git a/src/hooks/useTokens.js b/src/hooks/useTokens.js index 59adb11a..eff88d4d 100644 --- a/src/hooks/useTokens.js +++ b/src/hooks/useTokens.js @@ -1,15 +1,17 @@ -import {useEffect, useState} from 'react'; +import {useEffect, useMemo, useState} from 'react'; import {useTransferData} from '../components/Features/Transfer/Transfer/Transfer.hooks'; -import TokensEthereum from '../config/tokens/tokens.ethereum'; -import TokensStarknet from '../config/tokens/tokens.starknet'; +import {EthereumTokens, StarknetTokens} from '../config/addresses'; +import {NetworkType} from '../enums'; export const useTokens = () => { const {action, isEthereum} = useTransferData(); const [tokens, setTokens] = useState([]); + const memoizedStarknetTokens = useMemo(() => StarknetTokens, []); + const memoizedEthereumTokens = useMemo(() => [NetworkType.ETHEREUM, ...EthereumTokens], []); useEffect(() => { - setTokens(isEthereum ? TokensEthereum : TokensStarknet); + setTokens(isEthereum ? memoizedEthereumTokens : memoizedStarknetTokens); }, [action]); return tokens; diff --git a/src/hooks/useTransferToStarknet.js b/src/hooks/useTransferToStarknet.js index 365aebc8..d4bb131b 100644 --- a/src/hooks/useTransferToStarknet.js +++ b/src/hooks/useTransferToStarknet.js @@ -1,12 +1,15 @@ import {useCallback, useState} from 'react'; -import {deposit} from '../api/bridge'; +import {depositEth, depositToken} from '../api/bridge'; import {approve} from '../api/erc20'; -import {ERC20_BRIDGE_CONTRACT_ADDRESS} from '../config/contracts/contracts.ethereum'; -import {useWallets, useStarknetWallet} from '../providers/WalletsProvider/hooks'; +import {useStarknetWallet, useWallets} from '../providers/WalletsProvider/hooks'; import {listenOnce} from '../utils/contract'; -import {web3} from '../web3'; -import {useMessagingContract, useTokenBridgeContract, useTokenContract} from './useContract'; +import { + useEthBridgeContract, + useMessagingContract, + useTokenBridgeContract, + useTokenContract +} from './useContract'; const PROGRESS = { approval: symbol => ({ @@ -20,15 +23,16 @@ const PROGRESS = { }; export const useTransferToStarknet = tokenData => { - const {address, symbol} = tokenData; + const {tokenAddress, bridgeAddress, symbol} = tokenData; const [isLoading, setIsLoading] = useState(false); const [data, setData] = useState(null); const [progress, setProgress] = useState(null); const [error, setError] = useState(null); - const {account, chainId} = useWallets(); + const {account: ethereumAccount, chainId} = useWallets(); const {account: starknetAccount} = useStarknetWallet(); - const tokenContract = useTokenContract(address); - const tokenBridgeContract = useTokenBridgeContract(); + const tokenContract = useTokenContract(tokenAddress); + const tokenBridgeContract = useTokenBridgeContract(bridgeAddress); + const ethBridgeContract = useEthBridgeContract(); const messagingContract = useMessagingContract(); const waitForLogMessageToL2 = () => { @@ -42,39 +46,58 @@ export const useTransferToStarknet = tokenData => { }); }; - const transferToStarknet = useCallback( - async amount => { - setError(null); - setData(null); - setProgress(null); - setIsLoading(false); - try { - setIsLoading(true); - const amountNumber = Number(amount); - const amountBN = web3.utils.toBN(amountNumber); + const transferEthToStarknet = useCallback( + async amount => transferToStarknet(amount, depositEth, ethBridgeContract, false), + [ethereumAccount, starknetAccount, tokenContract] + ); + + const transferTokenToStarknet = useCallback( + async amount => transferToStarknet(amount, depositToken, tokenBridgeContract, true), + [ethereumAccount, starknetAccount, tokenContract] + ); + + const transferToStarknet = async (amount, depositHandler, bridgeContract, withApproval) => { + try { + resetState(); + setIsLoading(true); + let approvalPromise = Promise.resolve(); + if (withApproval) { setProgress(PROGRESS.approval(symbol)); - await approve(tokenContract, ERC20_BRIDGE_CONTRACT_ADDRESS[chainId], account, amountNumber); - setProgress(PROGRESS.deposit(amountBN, symbol)); - const depositPromise = deposit(tokenBridgeContract, account, starknetAccount, amountBN); - const depositEvent = await waitForLogMessageToL2(); - const depositReceipt = await depositPromise; - setIsLoading(false); - setProgress(null); - setData([depositReceipt, depositEvent]); - } catch (ex) { - setIsLoading(false); - setProgress(null); - setError(ex); + approvalPromise = approve(bridgeAddress[chainId], amount, tokenContract, ethereumAccount); } - }, - [account, starknetAccount, tokenContract] - ); + await approvalPromise; + setProgress(PROGRESS.deposit(amount, symbol)); + const depositPromise = depositHandler( + starknetAccount, + amount, + bridgeContract, + ethereumAccount + ); + const depositEvent = await waitForLogMessageToL2(); + const depositReceipt = await depositPromise; + setIsLoading(false); + setProgress(null); + setData([depositReceipt, depositEvent]); + } catch (ex) { + setIsLoading(false); + setProgress(null); + setError(ex); + } + }; + + const resetState = () => { + setError(null); + setData(null); + setProgress(null); + setIsLoading(false); + }; return { isTransferring: isLoading, transferProgress: progress, transferError: error, transferData: data, - transferToStarknet + transferTokenToStarknet, + transferEthToStarknet }; }; diff --git a/src/utils/contract.js b/src/utils/contract.js index 388d23ae..1636149b 100644 --- a/src/utils/contract.js +++ b/src/utils/contract.js @@ -5,7 +5,7 @@ import {web3} from '../web3'; export const getContract = (address, ABI) => new web3.eth.Contract(ABI, address); -export const callContract = async (contract, method, args) => { +export const callContract = async (contract, method, args = []) => { try { return await contract.methods?.[method](...args).call(); } catch (ex) { @@ -13,9 +13,9 @@ export const callContract = async (contract, method, args) => { } }; -export const sendTransaction = async (contract, method, args, account) => { +export const sendTransaction = async (contract, method, args = [], options = {}) => { try { - return contract.methods?.[method](...args).send({from: account}); + return contract.methods?.[method](...args).send(options); } catch (ex) { return ex; } @@ -36,7 +36,7 @@ export const listenOnce = async (contract, event, callback) => { export const getStarknetContract = (address, ABI) => new Contract(ABI, address, getStarknet().provider); -export const callStarknetContract = async (contract, method, args) => { +export const callStarknetContract = async (contract, method, args = []) => { try { return await contract.call(method, ...args); } catch (ex) { diff --git a/src/utils/hash.js b/src/utils/hash.js deleted file mode 100644 index dd808451..00000000 --- a/src/utils/hash.js +++ /dev/null @@ -1,64 +0,0 @@ -import {hash} from 'starknet'; - -const message = { - from_address: '0x70BaacDe3C91b64f00D37a9B07Bf294600655fD2', - payload: [ - '2078603289626043341054635759994245207449861009813861793671178142800190780834', - '69', - '0' - ], - selector: '1285101517810983806491589552491143496277809242732141897358598292095611420389', - to_address: '3069768452457587449196331700965303301050740196780238415314752610503277885727' - // 0x49872a1113409880832c25e4fa331bbfcb1864850605a49ce8779d2b66635a2 - user contract - // 0x06c96d68401b740dbca6fb352262ea7d5026373ad5988b785f06ebc2aa23391f - bridge -}; - -export const txHash = msg => { - // convert to bytes and then BN (as py works) - const txHashPrefix = 'invoke'; // expected: 115923154332517 - const chainId = 'TESTNET'; // expected: 23720122242712916; - const calldataHash = hash.hashCalldata(msg.payload); - return hash.computeHashOnElements([ - txHashPrefix, - msg.to_address, - msg.selector, - calldataHash, - chainId - ]); -}; - -/* -MAINNET = from_bytes(b"MAINNET") -TESTNET = from_bytes(b"TESTNET") -*/ - -/* - TransactionType.DEPLOY: b"deploy", - TransactionType.INVOKE_FUNCTION: b"invoke", - */ - -/* -def from_bytes( - value: bytes, byte_order: Optional[str] = None, signed: Optional[bool] = None -) -> int: - """ - Converts the given bytes object (parsed according to the given byte order) to an integer. - Default byte order is 'big'. - """ - if byte_order is None: - byte_order = "big" - - if signed is None: - signed = False - - return int.from_bytes(value, byteorder=byte_order, signed=signed) - - */ - -/* - - -{"blockHash":"0xafba3867db9b97dd74bae081dcbcf511eb177a2c89fd8a4c8962153905c734d5","blockNumber":6015914,"contractAddress":null,"cumulativeGasUsed":636794,"effectiveGasPrice":"0x9502f907","from":"0x16fb96a5fa0427af0c8f7cf1eb4870231c8154b6","gasUsed":101395,"logsBloom":"0x00000000000000000000000000000000002000000000000000000000000000040000002000000000001000001000000000000000001008000000000000200080004000000000000000000008000000000000000000000000000000000008000000000408000100000000000000000000000000000000100000000010200000000000000000000000000000000000000000000000040000000000000080000000020000000000000000000001000000000000000000000000000000000100000200000202008000000000000000000000000000000084000000000000000000000010000000000000000010000000000000000002000000000000040000000000","status":true,"to":"0x70baacde3c91b64f00d37a9b07bf294600655fd2","transactionHash":"0x804a7bf3cdf295cd72d1ecb5bc3c1bfd2703a6c3e2dfb9c529116afd89d4a0ef","transactionIndex":3,"type":"0x2","events":{"0":{"address":"0xe4C2493C66e068D65Cf1C38a2d7bDa25d9f08980","blockHash":"0xafba3867db9b97dd74bae081dcbcf511eb177a2c89fd8a4c8962153905c734d5","blockNumber":6015914,"logIndex":16,"removed":false,"transactionHash":"0x804a7bf3cdf295cd72d1ecb5bc3c1bfd2703a6c3e2dfb9c529116afd89d4a0ef","transactionIndex":3,"id":"log_14e0478b","returnValues":{},"signature":null,"raw":{"data":"0x0000000000000000000000000000000000000000000000000000000000000045","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x00000000000000000000000016fb96a5fa0427af0c8f7cf1eb4870231c8154b6","0x00000000000000000000000070baacde3c91b64f00d37a9b07bf294600655fd2"]}},"1":{"address":"0xe4C2493C66e068D65Cf1C38a2d7bDa25d9f08980","blockHash":"0xafba3867db9b97dd74bae081dcbcf511eb177a2c89fd8a4c8962153905c734d5","blockNumber":6015914,"logIndex":17,"removed":false,"transactionHash":"0x804a7bf3cdf295cd72d1ecb5bc3c1bfd2703a6c3e2dfb9c529116afd89d4a0ef","transactionIndex":3,"id":"log_95009332","returnValues":{},"signature":null,"raw":{"data":"0x0000000000000000000000000000000000000000000000000000000000000000","topics":["0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","0x00000000000000000000000016fb96a5fa0427af0c8f7cf1eb4870231c8154b6","0x00000000000000000000000070baacde3c91b64f00d37a9b07bf294600655fd2"]}},"2":{"address":"0xde29d060D45901Fb19ED6C6e959EB22d8626708e","blockHash":"0xafba3867db9b97dd74bae081dcbcf511eb177a2c89fd8a4c8962153905c734d5","blockNumber":6015914,"logIndex":19,"removed":false,"transactionHash":"0x804a7bf3cdf295cd72d1ecb5bc3c1bfd2703a6c3e2dfb9c529116afd89d4a0ef","transactionIndex":3,"id":"log_c99c0301","returnValues":{},"signature":null,"raw":{"data":"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003049872a1113409880832c25e4fa331bbfcb1864850605a49ce8779d2b66635a200000000000000000000000000000000000000000000000000000000000000450000000000000000000000000000000000000000000000000000000000000000","topics":["0x474d2456b41fc1146ae05ba36e794e448efd2f172a9128ca1c8c6dbdb22b62f7","0x00000000000000000000000070baacde3c91b64f00d37a9b07bf294600655fd2","0x06c96d68401b740dbca6fb352262ea7d5026373ad5988b785f06ebc2aa23391f","0x02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5"]}},"LogDeposit":{"address":"0x70BaacDe3C91b64f00D37a9B07Bf294600655fD2","blockHash":"0xafba3867db9b97dd74bae081dcbcf511eb177a2c89fd8a4c8962153905c734d5","blockNumber":6015914,"logIndex":18,"removed":false,"transactionHash":"0x804a7bf3cdf295cd72d1ecb5bc3c1bfd2703a6c3e2dfb9c529116afd89d4a0ef","transactionIndex":3,"id":"log_e3d711f5","returnValues":{"0":"0x16Fb96a5fa0427Af0C8F7cF1eB4870231c8154B6","1":"69","2":"2078603289626043341054635759994245207449861009813861793671178142800190780834","sender":"0x16Fb96a5fa0427Af0C8F7cF1eB4870231c8154B6","amount":"69","l2Recipient":"2078603289626043341054635759994245207449861009813861793671178142800190780834"},"event":"LogDeposit","signature":"0x9dbb0e7dda3e09710ce75b801addc87cf9d9c6c581641b3275fca409ad086c62","raw":{"data":"0x00000000000000000000000016fb96a5fa0427af0c8f7cf1eb4870231c8154b60000000000000000000000000000000000000000000000000000000000000045049872a1113409880832c25e4fa331bbfcb1864850605a49ce8779d2b66635a2","topics":["0x9dbb0e7dda3e09710ce75b801addc87cf9d9c6c581641b3275fca409ad086c62"]}}}} - - - */ diff --git a/src/utils/index.js b/src/utils/index.js index 9e5ddd6d..1bde144b 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -3,7 +3,7 @@ import {getLogger, getLogLevel, setLogLevel} from '../services'; export * from './wallet'; export * from './browser'; export * from './string'; -export * from './hash'; +export * from './token'; export const printPackageInfo = (name, version, color) => { const currentLogLevel = getLogLevel(); diff --git a/src/utils/token.js b/src/utils/token.js new file mode 100644 index 00000000..3a2914ec --- /dev/null +++ b/src/utils/token.js @@ -0,0 +1,3 @@ +import {NetworkType} from '../enums'; + +export const isEth = tokenData => tokenData.symbol === NetworkType.ETHEREUM.symbol; From c69e926a06ccaaba78cd5aeaf7f531bff19e217e Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 14 Dec 2021 16:01:20 +0200 Subject: [PATCH 012/211] fix: transfer eth to starknet [skip ci] --- .../Containers/Header/Header.module.scss | 5 ++- .../Features/Transfer/Transfer/Transfer.js | 3 +- src/hooks/useTransferToStarknet.js | 34 ++++++++----------- 3 files changed, 19 insertions(+), 23 deletions(-) diff --git a/src/components/Containers/Header/Header.module.scss b/src/components/Containers/Header/Header.module.scss index fdc6155a..6f466db5 100644 --- a/src/components/Containers/Header/Header.module.scss +++ b/src/components/Containers/Header/Header.module.scss @@ -25,9 +25,8 @@ $bridge-color: $--color-beta; .bridge { transition: 0.3s ease-in-out; font-family: $--primary-font; - margin-left: 8px; - font-weight: bold; - font-size: 26px; + margin-left: 5px; + font-size: 25px; line-height: 1; color: $bridge-color; } diff --git a/src/components/Features/Transfer/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer/Transfer.js index 74216adf..42cda4a1 100644 --- a/src/components/Features/Transfer/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer/Transfer.js @@ -39,7 +39,8 @@ export const Transfer = () => { useEffect(() => { if (isTransferring) { - showProgressModal(TRANSFER_TO_STARKNET_MODAL_TITLE, transferProgress.message); + transferProgress && + showProgressModal(TRANSFER_TO_STARKNET_MODAL_TITLE, transferProgress.message); } else if (transferError) { // TODO: show error modal } else if (transferData) { diff --git a/src/hooks/useTransferToStarknet.js b/src/hooks/useTransferToStarknet.js index d4bb131b..2f0f7f4d 100644 --- a/src/hooks/useTransferToStarknet.js +++ b/src/hooks/useTransferToStarknet.js @@ -2,7 +2,7 @@ import {useCallback, useState} from 'react'; import {depositEth, depositToken} from '../api/bridge'; import {approve} from '../api/erc20'; -import {useStarknetWallet, useWallets} from '../providers/WalletsProvider/hooks'; +import {useEthereumWallet, useStarknetWallet, useWallets} from '../providers/WalletsProvider/hooks'; import {listenOnce} from '../utils/contract'; import { useEthBridgeContract, @@ -35,6 +35,16 @@ export const useTransferToStarknet = tokenData => { const ethBridgeContract = useEthBridgeContract(); const messagingContract = useMessagingContract(); + const transferEthToStarknet = useCallback( + async amount => transferToStarknet(amount, depositEth, ethBridgeContract, false), + [ethereumAccount, starknetAccount, tokenContract] + ); + + const transferTokenToStarknet = useCallback( + async amount => transferToStarknet(amount, depositToken, tokenBridgeContract, true), + [ethereumAccount, starknetAccount, tokenContract] + ); + const waitForLogMessageToL2 = () => { return new Promise((resolve, reject) => { listenOnce(messagingContract, 'LogMessageToL2', (error, event) => { @@ -46,19 +56,12 @@ export const useTransferToStarknet = tokenData => { }); }; - const transferEthToStarknet = useCallback( - async amount => transferToStarknet(amount, depositEth, ethBridgeContract, false), - [ethereumAccount, starknetAccount, tokenContract] - ); - - const transferTokenToStarknet = useCallback( - async amount => transferToStarknet(amount, depositToken, tokenBridgeContract, true), - [ethereumAccount, starknetAccount, tokenContract] - ); - const transferToStarknet = async (amount, depositHandler, bridgeContract, withApproval) => { + setError(null); + setData(null); + setProgress(null); + setIsLoading(false); try { - resetState(); setIsLoading(true); let approvalPromise = Promise.resolve(); if (withApproval) { @@ -85,13 +88,6 @@ export const useTransferToStarknet = tokenData => { } }; - const resetState = () => { - setError(null); - setData(null); - setProgress(null); - setIsLoading(false); - }; - return { isTransferring: isLoading, transferProgress: progress, From 9ea5759cd0d46af1d9dc0e57029c797c94a4d919 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 14 Dec 2021 23:52:42 +0200 Subject: [PATCH 013/211] fix: bug fixes [skip ci] --- src/components/Containers/Header/Header.js | 2 +- .../Features/Account/Account/Account.js | 2 +- .../Account/LogoutButton/LogoutButton.js | 6 +- .../Features/ModalProvider/ModalProvider.js | 2 +- .../SelectTokenRow/SelectTokenRow.js | 6 +- .../EthereumNetwork/EthereumNetwork.js | 61 +++++++++ .../EthereumNetwork.strings.js} | 1 - .../Transfer/NetworkMenu/NetworkMenu.js | 109 ++++++++++++++-- .../NetworkMenu/NetworkMenu.module.scss | 14 +++ .../NetworkMenu/NetworkMenu.strings.js | 3 + .../NetworkSwap/NetworkSwap.module.scss | 2 +- .../StarknetNetwork/StarknetNetwork.js | 30 +++++ .../Transfer/TokenBalance/TokenBalance.js | 22 ++-- .../Transfer/TokenSelector/TokenSelector.js | 15 +-- .../Features/Transfer/Transfer/Transfer.js | 117 +++--------------- .../Transfer/Transfer/Transfer.module.scss | 14 --- .../Transfer/Transfer/Transfer.slice.js | 6 +- src/components/Features/Transfer/index.js | 4 +- .../UI/ProgressModal/ProgressModal.js | 2 +- .../TransactionSubmittedModal.js | 6 +- src/hooks/useContract.js | 23 +++- src/hooks/useIsLoading.js | 2 +- src/hooks/useTokenBalance.js | 35 ++++-- src/hooks/useTokens.js | 26 +++- src/hooks/useTransferToStarknet.js | 16 +-- .../WalletsProvider/WalletsProvider.js | 2 +- src/providers/WalletsProvider/hooks.js | 8 +- src/utils/network.js | 0 28 files changed, 346 insertions(+), 190 deletions(-) create mode 100644 src/components/Features/Transfer/EthereumNetwork/EthereumNetwork.js rename src/components/Features/Transfer/{Transfer/Transfer.strings.js => EthereumNetwork/EthereumNetwork.strings.js} (52%) create mode 100644 src/components/Features/Transfer/NetworkMenu/NetworkMenu.strings.js create mode 100644 src/components/Features/Transfer/StarknetNetwork/StarknetNetwork.js create mode 100644 src/utils/network.js diff --git a/src/components/Containers/Header/Header.js b/src/components/Containers/Header/Header.js index 1c06c073..ef0baf66 100644 --- a/src/components/Containers/Header/Header.js +++ b/src/components/Containers/Header/Header.js @@ -1,7 +1,7 @@ import React from 'react'; import StarkNetLogoPath from '../../../assets/img/starknet.png'; -import {ChainType, NetworkType} from '../../../enums'; +import {ChainType} from '../../../enums'; import { useWallets, useEthereumWallet, diff --git a/src/components/Features/Account/Account/Account.js b/src/components/Features/Account/Account/Account.js index 9f656bb9..e1bd3b44 100644 --- a/src/components/Features/Account/Account/Account.js +++ b/src/components/Features/Account/Account/Account.js @@ -42,7 +42,7 @@ export const Account = () => { <LinkButton text={LINKS.VOYAGER.text} url={LINKS.VOYAGER.url(chainName, account)} /> )} <TransferLogContainer>{renderTransactions()}</TransferLogContainer> - {isEthereum && <LogoutButton onClick={resetWallet} />} + <LogoutButton isDisabled={isStarknet} onClick={resetWallet} /> </div> </Menu> ); diff --git a/src/components/Features/Account/LogoutButton/LogoutButton.js b/src/components/Features/Account/LogoutButton/LogoutButton.js index 08aed9ca..9d6a16b0 100644 --- a/src/components/Features/Account/LogoutButton/LogoutButton.js +++ b/src/components/Features/Account/LogoutButton/LogoutButton.js @@ -5,7 +5,7 @@ import {useColors} from '../../../../hooks'; import {Button} from '../../../UI'; import {BTN_TXT} from './LogoutButton.strings'; -export const LogoutButton = ({onClick}) => { +export const LogoutButton = ({onClick, isDisabled}) => { const {colorAlpha5, colorWhite} = useColors(); return ( @@ -14,6 +14,7 @@ export const LogoutButton = ({onClick}) => { colorBorder={colorAlpha5} colorText={colorWhite} height={50} + isDisabled={isDisabled} style={{ marginTop: '25px', width: '100%', @@ -27,5 +28,6 @@ export const LogoutButton = ({onClick}) => { }; LogoutButton.propTypes = { - onClick: PropTypes.func + onClick: PropTypes.func, + isDisabled: PropTypes.bool }; diff --git a/src/components/Features/ModalProvider/ModalProvider.js b/src/components/Features/ModalProvider/ModalProvider.js index eca45f2f..83a43a20 100644 --- a/src/components/Features/ModalProvider/ModalProvider.js +++ b/src/components/Features/ModalProvider/ModalProvider.js @@ -11,7 +11,7 @@ export const ModalProvider = () => { return ( <Modal show={modal.show} size={modal.size} type={modal.type}> - <ModalHeader type={modal.type} isClosable={modal.isClosable} onClose={handleOnClose}> + <ModalHeader isClosable={modal.isClosable} type={modal.type} onClose={handleOnClose}> {modal.title && <ModalTitle>{modal.title}</ModalTitle>} </ModalHeader> <ModalBody type={modal.type}> diff --git a/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js b/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js index 1032e586..2da86de3 100644 --- a/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js +++ b/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js @@ -12,17 +12,17 @@ import styles from './SelectTokenRow.module.scss'; export const SelectTokenRow = ({tokenData, onClick}) => { const {name, symbol, tokenAddress} = tokenData; const [mounted, setMounted] = useState(true); - const [error, setError] = useState(null); + const [, setError] = useState(null); const [isLoading, setIsLoading] = useState(true); const [balance, setBalance] = useState(null); const {account} = useWallets(); - const getBalance = useTokenBalance(tokenAddress); + const getBalance = useTokenBalance(tokenAddress, account); useEffect(async () => { setIsLoading(true); setError(null); try { - const tokenBalance = await getBalance(account); + const tokenBalance = await getBalance(); if (!mounted) return; setBalance(tokenBalance); } catch (ex) { diff --git a/src/components/Features/Transfer/EthereumNetwork/EthereumNetwork.js b/src/components/Features/Transfer/EthereumNetwork/EthereumNetwork.js new file mode 100644 index 00000000..408af34e --- /dev/null +++ b/src/components/Features/Transfer/EthereumNetwork/EthereumNetwork.js @@ -0,0 +1,61 @@ +import PropTypes from 'prop-types'; +import React, {useEffect} from 'react'; + +import {NetworkType} from '../../../../enums'; +import {useEthereumToken, useTransferToStarknet} from '../../../../hooks'; +import {useEthereumTokenBalance} from '../../../../hooks/useTokenBalance'; +import {useEthereumWallet} from '../../../../providers/WalletsProvider/hooks'; +import {isEth} from '../../../../utils'; +import { + useHideModal, + useProgressModal, + useTransactionSubmittedModal +} from '../../ModalProvider/ModalProvider.hooks'; +import {useAmount, useTransferData} from '../Transfer/Transfer.hooks'; +import {NetworkMenu} from '../index'; +import {TRANSFER_TO_STARKNET_MODAL_TITLE} from './EthereumNetwork.strings'; + +export const EthereumNetwork = ({isTarget}) => { + const {selectedToken} = useTransferData(); + const {account} = useEthereumWallet(); + const [amount, , clearAmount] = useAmount(); + const hideModal = useHideModal(); + const showProgressModal = useProgressModal(); + const showTransactionSubmittedModal = useTransactionSubmittedModal(); + const ethereumTokenData = useEthereumToken(selectedToken.symbol); + const getEthereumBalance = useEthereumTokenBalance(ethereumTokenData.tokenAddress, account); + + const {transferEthToStarknet, transferTokenToStarknet, data, error, isLoading, progress} = + useTransferToStarknet(selectedToken); + + useEffect(() => { + if (isLoading) { + progress && showProgressModal(TRANSFER_TO_STARKNET_MODAL_TITLE, progress.message); + } else if (error) { + // TODO: show error modal + hideModal(); + } else if (data) { + const [receipt, event] = data; + clearAmount(); + showTransactionSubmittedModal(receipt.transactionHash); + // TODO: add tx to store and calc tx hash from msg hash + } + }, [progress, data, error, isLoading, amount]); + + const onTransferClick = async () => + isEth(selectedToken) ? transferEthToStarknet(amount) : transferTokenToStarknet(amount); + + return ( + <NetworkMenu + getBalance={getEthereumBalance} + isTarget={isTarget} + isTransferring={isLoading} + networkData={NetworkType.ETHEREUM} + onTransferClick={onTransferClick} + /> + ); +}; + +EthereumNetwork.propTypes = { + isTarget: PropTypes.bool +}; diff --git a/src/components/Features/Transfer/Transfer/Transfer.strings.js b/src/components/Features/Transfer/EthereumNetwork/EthereumNetwork.strings.js similarity index 52% rename from src/components/Features/Transfer/Transfer/Transfer.strings.js rename to src/components/Features/Transfer/EthereumNetwork/EthereumNetwork.strings.js index cfd42b73..a62e584c 100644 --- a/src/components/Features/Transfer/Transfer/Transfer.strings.js +++ b/src/components/Features/Transfer/EthereumNetwork/EthereumNetwork.strings.js @@ -1,2 +1 @@ -export const INSUFFICIENT_BALANCE_ERROR_MSG = 'Insufficient balance'; export const TRANSFER_TO_STARKNET_MODAL_TITLE = 'Transferring to StarkNet'; diff --git a/src/components/Features/Transfer/NetworkMenu/NetworkMenu.js b/src/components/Features/Transfer/NetworkMenu/NetworkMenu.js index cc3da100..e0937769 100644 --- a/src/components/Features/Transfer/NetworkMenu/NetworkMenu.js +++ b/src/components/Features/Transfer/NetworkMenu/NetworkMenu.js @@ -1,25 +1,110 @@ import PropTypes from 'prop-types'; -import React from 'react'; +import React, {useEffect, useState} from 'react'; import {Badge} from '../../../UI'; +import {useBridgeActions} from '../../Bridge/Bridge.hooks'; import {NetworkTitle} from '../NetworkTitle/NetworkTitle'; import {TokenBalance} from '../TokenBalance/TokenBalance'; +import {TokenInput} from '../TokenInput/TokenInput'; +import {useAmount, useTransferActions, useTransferData} from '../Transfer/Transfer.hooks'; +import {TransferButton} from '../TransferButton/TransferButton'; import styles from './NetworkMenu.module.scss'; +import {FROM, INSUFFICIENT_BALANCE_ERROR_MSG, TO} from './NetworkMenu.strings'; -export const NetworkMenu = ({title, networkData, tokenData, children}) => ( - <div className={styles.networkMenu}> - <Badge text={title} /> - <div className={styles.networkContainer}> - <NetworkTitle networkData={networkData} /> - <TokenBalance balance={tokenData.balance} symbol={tokenData.symbol} /> +export const NetworkMenu = ({ + networkData, + isTarget, + isTransferring, + getBalance, + onTransferClick, + children +}) => { + const [isButtonDisabled, setIsButtonDisabled] = useState(true); + const [error, setError] = useState(null); + const [balance, setBalance] = useState(null); + const [amount, setAmount] = useAmount(); + const {action, selectedToken} = useTransferData(); + const {selectToken} = useTransferActions(); + const {showSelectTokenMenu} = useBridgeActions(); + const [mounted, setMounted] = useState(true); + + useEffect(async () => { + if (isTarget || selectedToken.balance === null) { + try { + const tokenBalance = await getBalance(); + if (!mounted) return; + selectToken({...selectedToken, balance: tokenBalance}); + setBalance(tokenBalance); + } catch (ex) { + setError(ex); + } + } else { + setBalance(selectedToken.balance); + } + return () => setMounted(false); + }, [action]); + + useEffect(() => { + if (!isTarget) { + setError(null); + if (Math.ceil(amount) === 0) { + setIsButtonDisabled(true); + } else { + if (amount > selectedToken.balance) { + setError(INSUFFICIENT_BALANCE_ERROR_MSG); + setIsButtonDisabled(true); + } else { + setIsButtonDisabled(false); + } + } + } + }, [amount, action]); + + const onMaxClick = () => { + setAmount(selectedToken.balance); + }; + + const onInputChange = event => { + setAmount(event.target.value); + }; + + return ( + <div className={styles.networkMenu}> + <Badge text={isTarget ? TO : FROM} /> + <div className={styles.networkContainer}> + <NetworkTitle networkData={networkData} /> + <TokenBalance balance={balance} symbol={selectedToken.symbol} /> + </div> + <div className={styles.transferContainer}> + {!isTarget && ( + <> + <TokenInput + hasError={!!error} + selectedToken={selectedToken} + value={amount} + onInputChange={onInputChange} + onMaxClick={onMaxClick} + onTokenSelect={showSelectTokenMenu} + /> + {error && <div className={styles.errorMsg}>{error}</div>} + <TransferButton + isDisabled={isButtonDisabled} + isLoading={isTransferring} + onClick={onTransferClick} + /> + </> + )} + </div> + {children} </div> - {children} - </div> -); + ); +}; NetworkMenu.propTypes = { - title: PropTypes.string, networkData: PropTypes.object, - tokenData: PropTypes.object, + isTarget: PropTypes.bool, + isTransferring: PropTypes.bool, + getBalance: PropTypes.func, + onTransferClick: PropTypes.func, children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) }; diff --git a/src/components/Features/Transfer/NetworkMenu/NetworkMenu.module.scss b/src/components/Features/Transfer/NetworkMenu/NetworkMenu.module.scss index e2e80db8..72c90b19 100644 --- a/src/components/Features/Transfer/NetworkMenu/NetworkMenu.module.scss +++ b/src/components/Features/Transfer/NetworkMenu/NetworkMenu.module.scss @@ -2,6 +2,7 @@ $background-color: $--color-alpha-1; $box-shadow-color: rgba(0, 0, 0, 0.1); +$error-msg-color: $--color-error; .networkMenu { background: $background-color; @@ -16,4 +17,17 @@ $box-shadow-color: rgba(0, 0, 0, 0.1); justify-content: space-between; align-items: center; } + + .transferContainer { + height: 100%; + display: flex; + flex-direction: column; + transition: 0.3s ease-in-out; + + .errorMsg { + font-size: 12px; + line-height: 24px; + color: $error-msg-color; + } + } } diff --git a/src/components/Features/Transfer/NetworkMenu/NetworkMenu.strings.js b/src/components/Features/Transfer/NetworkMenu/NetworkMenu.strings.js new file mode 100644 index 00000000..9e644fbe --- /dev/null +++ b/src/components/Features/Transfer/NetworkMenu/NetworkMenu.strings.js @@ -0,0 +1,3 @@ +export const TO = 'to'; +export const FROM = 'from'; +export const INSUFFICIENT_BALANCE_ERROR_MSG = 'Insufficient balance'; diff --git a/src/components/Features/Transfer/NetworkSwap/NetworkSwap.module.scss b/src/components/Features/Transfer/NetworkSwap/NetworkSwap.module.scss index 376a2889..e759fd25 100644 --- a/src/components/Features/Transfer/NetworkSwap/NetworkSwap.module.scss +++ b/src/components/Features/Transfer/NetworkSwap/NetworkSwap.module.scss @@ -1,6 +1,6 @@ .networkSwap { position: absolute; - margin: 10px auto auto auto; + margin: -20px auto auto auto; z-index: 1; left: 50%; transform: translate(-50%); diff --git a/src/components/Features/Transfer/StarknetNetwork/StarknetNetwork.js b/src/components/Features/Transfer/StarknetNetwork/StarknetNetwork.js new file mode 100644 index 00000000..a29db79e --- /dev/null +++ b/src/components/Features/Transfer/StarknetNetwork/StarknetNetwork.js @@ -0,0 +1,30 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {NetworkType} from '../../../../enums'; +import {useStarknetToken} from '../../../../hooks'; +import {useStarknetTokenBalance} from '../../../../hooks/useTokenBalance'; +import {useEthereumWallet} from '../../../../providers/WalletsProvider/hooks'; +import {useTransferData} from '../Transfer/Transfer.hooks'; +import {NetworkMenu} from '../index'; + +export const StarknetNetwork = ({isTarget}) => { + const {selectedToken} = useTransferData(); + const {account} = useEthereumWallet(); + const starknetTokenData = useStarknetToken(selectedToken.symbol); + const getStarknetBalance = useStarknetTokenBalance(starknetTokenData.tokenAddress, account); + + return ( + <NetworkMenu + getBalance={getStarknetBalance} + isTarget={isTarget} + isTransferring={false} + networkData={NetworkType.STARKNET} + onTransferClick={() => {}} + /> + ); +}; + +StarknetNetwork.propTypes = { + isTarget: PropTypes.bool +}; diff --git a/src/components/Features/Transfer/TokenBalance/TokenBalance.js b/src/components/Features/Transfer/TokenBalance/TokenBalance.js index 69e070c8..f410f6a5 100644 --- a/src/components/Features/Transfer/TokenBalance/TokenBalance.js +++ b/src/components/Features/Transfer/TokenBalance/TokenBalance.js @@ -8,20 +8,26 @@ import {LoadingSize} from '../../../UI/Loading/Loading.enums'; import styles from './TokenBalance.module.scss'; import {TITLE_TXT} from './TokenBalance.strings'; -export const TokenBalance = ({symbol, balance}) => { - const isLoading = useIsLoading(symbol); +export const TokenBalance = ({balance, symbol}) => { + const isLoading = useIsLoading(balance); return ( <div className={styles.tokenBalance}> - {isLoading && <Loading size={LoadingSize.SMALL} />} - {!isLoading && ( + <span>{TITLE_TXT}</span> + + {isLoading && ( <> - <span>{TITLE_TXT}</span> - <div className={styles.balance}> - {formatBalance(balance)} {symbol} - </div> + <br /> + <center> + <Loading size={LoadingSize.SMALL} /> + </center> </> )} + {!isLoading && ( + <div className={styles.balance}> + {formatBalance(balance)} {symbol} + </div> + )} </div> ); }; diff --git a/src/components/Features/Transfer/TokenSelector/TokenSelector.js b/src/components/Features/Transfer/TokenSelector/TokenSelector.js index 7c345599..8c8f51ff 100644 --- a/src/components/Features/Transfer/TokenSelector/TokenSelector.js +++ b/src/components/Features/Transfer/TokenSelector/TokenSelector.js @@ -2,25 +2,18 @@ import PropTypes from 'prop-types'; import React from 'react'; import {ReactComponent as DownArrowIcon} from '../../../../assets/svg/icons/collapse.svg'; -import {useColors, useIsLoading} from '../../../../hooks'; -import {CryptoLogo, Icon, Loading} from '../../../UI'; +import {useColors} from '../../../../hooks'; +import {CryptoLogo, Icon} from '../../../UI'; import {CryptoLogoSize} from '../../../UI/CryptoLogo/CryptoLogo.enums'; -import {LoadingSize} from '../../../UI/Loading/Loading.enums'; import styles from './TokenSelector.module.scss'; export const TokenSelector = ({tokenData, onClick}) => { const {colorAlpha3} = useColors(); - const isLoading = useIsLoading(tokenData.symbol); return ( <div className={styles.tokenSelector} onClick={onClick}> - {isLoading && <Loading size={LoadingSize.SMALL} />} - {!isLoading && ( - <> - <CryptoLogo color={colorAlpha3} size={CryptoLogoSize.SMALL} symbol={tokenData?.symbol} /> - {tokenData.symbol} - </> - )} + <CryptoLogo color={colorAlpha3} size={CryptoLogoSize.SMALL} symbol={tokenData?.symbol} /> + {tokenData.symbol} <Icon isClickable={true}> <DownArrowIcon /> </Icon> diff --git a/src/components/Features/Transfer/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer/Transfer.js index 42cda4a1..66ef656c 100644 --- a/src/components/Features/Transfer/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer/Transfer.js @@ -1,91 +1,23 @@ -import React, {useEffect, useState} from 'react'; +import React, {useEffect} from 'react'; import {ActionType, NetworkType} from '../../../../enums'; -import {useTransferToStarknet} from '../../../../hooks'; -import {isEth} from '../../../../utils'; import {Menu} from '../../../UI'; -import {useBridgeActions} from '../../Bridge/Bridge.hooks'; -import { - useProgressModal, - useTransactionSubmittedModal -} from '../../ModalProvider/ModalProvider.hooks'; +import {EthereumNetwork} from '../EthereumNetwork/EthereumNetwork'; +import {NetworkSwap} from '../NetworkSwap/NetworkSwap'; +import {StarknetNetwork} from '../StarknetNetwork/StarknetNetwork'; import {TransferMenuTab} from '../TransferMenuTab/TransferMenuTab'; -import {NetworkMenu, NetworkSwap, TokenInput, TransferButton} from '../index'; -import {useAmount, useIsEthereum, useIsStarknet, useTransferData} from './Transfer.hooks'; +import {useIsEthereum, useIsStarknet, useTransferActions, useTransferData} from './Transfer.hooks'; import styles from './Transfer.module.scss'; -import { - INSUFFICIENT_BALANCE_ERROR_MSG, - TRANSFER_TO_STARKNET_MODAL_TITLE -} from './Transfer.strings.js'; export const Transfer = () => { - const [isButtonDisabled, setIsButtonDisabled] = useState(true); - const [error, setError] = useState(null); const [isEthereum, setEthereum] = useIsEthereum(); const [isStarknet, setStarknet] = useIsStarknet(); - const [amount, setAmount, clearAmount] = useAmount(); - const {action, selectedToken, fromNetwork, toNetwork} = useTransferData(); - const {showSelectTokenMenu} = useBridgeActions(); - const { - transferData, - transferEthToStarknet, - transferTokenToStarknet, - transferError, - isTransferring, - transferProgress - } = useTransferToStarknet(selectedToken); - const showProgressModal = useProgressModal(); - const showTransactionSubmittedModal = useTransactionSubmittedModal(); + const {action, selectedToken} = useTransferData(); + const {selectToken} = useTransferActions(); useEffect(() => { - if (isTransferring) { - transferProgress && - showProgressModal(TRANSFER_TO_STARKNET_MODAL_TITLE, transferProgress.message); - } else if (transferError) { - // TODO: show error modal - } else if (transferData) { - const [receipt, event] = transferData; - clearAmount(); - showTransactionSubmittedModal(receipt.transactionHash); - // TODO: add tx store and calc tx hash from msg hash - } - }, [transferProgress, transferData, transferError, isTransferring, amount]); - - useEffect(() => { - clearAmount(); - }, [selectedToken]); - - useEffect(() => { - setError(null); - if (Math.ceil(amount) === 0) { - setIsButtonDisabled(true); - } else { - if (amount > selectedToken.balance) { - setError(INSUFFICIENT_BALANCE_ERROR_MSG); - setIsButtonDisabled(true); - } else { - setIsButtonDisabled(false); - } - } - }, [amount, action]); - - const onMaxClick = () => { - setAmount(selectedToken.balance); - }; - - const onInputChange = event => { - setAmount(event.target.value); - }; - - const onSwapClick = () => { - isEthereum ? setStarknet() : setEthereum(); - }; - - const onTransferClick = async () => { - if (isEthereum) { - return isEth(selectedToken) ? transferEthToStarknet(amount) : transferTokenToStarknet(amount); - } - }; + selectToken({...selectedToken, balance: null}); + }, [action]); const renderTabs = () => { return Object.values(ActionType).map((tab, index) => { @@ -104,30 +36,21 @@ export const Transfer = () => { }); }; + const onSwapClick = () => { + !isEthereum ? setEthereum() : setStarknet(); + }; + + const renderEthereumNetwork = isTarget => <EthereumNetwork isTarget={isTarget} />; + + const renderStarknetNetwork = isTarget => <StarknetNetwork isTarget={isTarget} />; + return ( <Menu> <div className={styles.transfer}> <div className={styles.tabsContainer}>{renderTabs()}</div> - <div className={styles.container}> - <NetworkMenu networkData={fromNetwork} title="from" tokenData={selectedToken}> - <TokenInput - hasError={!!error} - selectedToken={selectedToken} - value={amount} - onInputChange={onInputChange} - onMaxClick={onMaxClick} - onTokenSelect={showSelectTokenMenu} - /> - {error && <div className={styles.errorMsg}>{error}</div>} - <TransferButton - isDisabled={isButtonDisabled} - isLoading={isTransferring} - onClick={onTransferClick} - /> - <NetworkSwap isFlipped={isStarknet} onClick={onSwapClick} /> - </NetworkMenu> - <NetworkMenu networkData={toNetwork} title="to" tokenData={selectedToken} /> - </div> + {isEthereum ? renderEthereumNetwork() : renderStarknetNetwork()} + <NetworkSwap isFlipped={isStarknet} onClick={onSwapClick} /> + {isEthereum ? renderStarknetNetwork(true) : renderEthereumNetwork(true)} </div> </Menu> ); diff --git a/src/components/Features/Transfer/Transfer/Transfer.module.scss b/src/components/Features/Transfer/Transfer/Transfer.module.scss index cdce1dc4..56d67cfd 100644 --- a/src/components/Features/Transfer/Transfer/Transfer.module.scss +++ b/src/components/Features/Transfer/Transfer/Transfer.module.scss @@ -1,7 +1,6 @@ @import '../../../../index'; $background-color: $--color-alpha-1; -$error-msg-color: $--color-error; .transfer { .tabsContainer { @@ -10,17 +9,4 @@ $error-msg-color: $--color-error; border-radius: 10px; padding: 10px; } - - .container { - height: 100%; - display: flex; - flex-direction: column; - transition: 0.3s ease-in-out; - - .errorMsg { - font-size: 12px; - line-height: 24px; - color: $error-msg-color; - } - } } diff --git a/src/components/Features/Transfer/Transfer/Transfer.slice.js b/src/components/Features/Transfer/Transfer/Transfer.slice.js index acc936e8..6b19ea76 100644 --- a/src/components/Features/Transfer/Transfer/Transfer.slice.js +++ b/src/components/Features/Transfer/Transfer/Transfer.slice.js @@ -3,7 +3,11 @@ import {createSlice} from '@reduxjs/toolkit'; import {ActionType, NetworkType} from '../../../../enums'; const initialState = { - selectedToken: {balance: 0, name: NetworkType.ETHEREUM.name, symbol: NetworkType.ETHEREUM.symbol}, + selectedToken: { + balance: null, + name: NetworkType.ETHEREUM.name, + symbol: NetworkType.ETHEREUM.symbol + }, action: ActionType.TRANSFER_TO_STARKNET, depositAmount: '', withdrawAmount: '' diff --git a/src/components/Features/Transfer/index.js b/src/components/Features/Transfer/index.js index 8e43f464..ab855d77 100644 --- a/src/components/Features/Transfer/index.js +++ b/src/components/Features/Transfer/index.js @@ -7,4 +7,6 @@ export * from './TokenBalance/TokenBalance'; export * from './TokenInput/TokenInput'; export * from './TokenSelector/TokenSelector'; export * from './TransferButton/TransferButton'; -export * from './TransferMenuTab/TransferMenuTab.module.scss'; +export * from './TransferMenuTab/TransferMenuTab'; +export * from './StarknetNetwork/StarknetNetwork'; +export * from './EthereumNetwork/EthereumNetwork'; diff --git a/src/components/UI/ProgressModal/ProgressModal.js b/src/components/UI/ProgressModal/ProgressModal.js index 519ee1b1..82f476f1 100644 --- a/src/components/UI/ProgressModal/ProgressModal.js +++ b/src/components/UI/ProgressModal/ProgressModal.js @@ -21,7 +21,7 @@ const ProgressModal = ({message}) => { }; ProgressModal.propTypes = { - walletName: PropTypes.string + message: PropTypes.string }; export default ProgressModal; diff --git a/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.js b/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.js index 75b551c7..4076c359 100644 --- a/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.js +++ b/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.js @@ -28,19 +28,19 @@ const TransactionSubmittedModal = ({transactionHash}) => { colorBackground={colorWhite} colorBorder={colorAlpha3} colorText={colorAlpha3} - text={BTN_TEXT} icon={ - <Circle size={40} color={colorWhite1}> + <Circle color={colorWhite1} size={40}> <EtherscanLogo style={{margin: 'auto'}} /> </Circle> } - onClick={onClick} style={{ borderRadius: '7px', borderWidth: '2px', fontSize: '16px', height: '60px' }} + text={BTN_TEXT} + onClick={onClick} /> </div> ); diff --git a/src/hooks/useContract.js b/src/hooks/useContract.js index c77b0924..a8030f00 100644 --- a/src/hooks/useContract.js +++ b/src/hooks/useContract.js @@ -1,7 +1,7 @@ import {useMemo} from 'react'; import {ERC20_ABI, ERC20_BRIDGE_ABI, ETH_BRIDGE_ABI, MESSAGING_ABI} from '../abis/ethereum'; -import {STARKNET_ERC20_ABI, STARKNET_BRIDGE_ABI} from '../abis/starknet'; +import {STARKNET_BRIDGE_ABI, STARKNET_ERC20_ABI} from '../abis/starknet'; import {useTransferData} from '../components/Features/Transfer/Transfer/Transfer.hooks'; import {ETH_BRIDGE_CONTRACT_ADDRESS, MESSAGING_CONTRACT_ADDRESS} from '../config/addresses'; import {useWallets} from '../providers/WalletsProvider/hooks'; @@ -48,22 +48,35 @@ export const useStarknetContract = (addressOrAddressMap, ABI) => { }; export const useTokenContract = tokenAddresses => { - const tokenContract = useContract(tokenAddresses, ERC20_ABI); - const starknetTokenContract = useStarknetContract(tokenAddresses, STARKNET_ERC20_ABI); + const tokenContract = useEthereumTokenContract(tokenAddresses); + const starknetTokenContract = useStarknetTokenContract(tokenAddresses); const {isEthereum} = useTransferData(); + return useMemo(() => (isEthereum ? tokenContract : starknetTokenContract), [isEthereum]); }; export const useTokenBridgeContract = bridgeAddress => { - const tokenBridgeContract = useContract(bridgeAddress, ERC20_BRIDGE_ABI); - const starknetTokenBridgeContract = useContract(bridgeAddress, STARKNET_BRIDGE_ABI); + const tokenBridgeContract = useEthereumTokenBridgeContract(bridgeAddress); + const starknetTokenBridgeContract = useStarknetTokenBridgeContract(bridgeAddress); const {isEthereum} = useTransferData(); + return useMemo( () => (isEthereum ? tokenBridgeContract : starknetTokenBridgeContract), [isEthereum] ); }; +export const useStarknetTokenContract = tokenAddresses => + useStarknetContract(tokenAddresses, STARKNET_ERC20_ABI); + +export const useEthereumTokenContract = tokenAddresses => useContract(tokenAddresses, ERC20_ABI); + export const useEthBridgeContract = () => useContract(ETH_BRIDGE_CONTRACT_ADDRESS, ETH_BRIDGE_ABI); export const useMessagingContract = () => useContract(MESSAGING_CONTRACT_ADDRESS, MESSAGING_ABI); + +export const useStarknetTokenBridgeContract = bridgeAddress => + useContract(bridgeAddress, STARKNET_BRIDGE_ABI); + +export const useEthereumTokenBridgeContract = bridgeAddress => + useContract(bridgeAddress, ERC20_BRIDGE_ABI); diff --git a/src/hooks/useIsLoading.js b/src/hooks/useIsLoading.js index 366cccc5..7eeacf3f 100644 --- a/src/hooks/useIsLoading.js +++ b/src/hooks/useIsLoading.js @@ -8,7 +8,7 @@ export const useIsLoading = deps => { useEffect(() => { if (!isConnected()) { setIsLoading(false); - } else if (deps) { + } else if (deps != null) { setIsLoading(false); } else { setIsLoading(true); diff --git a/src/hooks/useTokenBalance.js b/src/hooks/useTokenBalance.js index 0f8245ca..71993b49 100644 --- a/src/hooks/useTokenBalance.js +++ b/src/hooks/useTokenBalance.js @@ -2,17 +2,36 @@ import {useCallback} from 'react'; import {getEthBalance, getTokenBalance} from '../api/erc20'; import {useTransferData} from '../components/Features/Transfer/Transfer/Transfer.hooks'; -import {useTokenContract} from './useContract'; +import {useEthereumTokenContract, useStarknetTokenContract} from './useContract'; -export const useTokenBalance = tokenAddresses => { - const contract = useTokenContract(tokenAddresses); +export const useTokenBalance = (tokenAddresses, account) => { + const getStarknetBalanceCallback = useStarknetTokenBalance(tokenAddresses, account); + const getEthereumBalanceCallback = useEthereumTokenBalance(tokenAddresses, account); const {isEthereum} = useTransferData(); return useCallback( - async account => - !tokenAddresses && isEthereum - ? await getEthBalance(account) - : await getTokenBalance(account, contract, isEthereum), - [isEthereum] + () => (isEthereum ? getEthereumBalanceCallback() : getStarknetBalanceCallback()), + [isEthereum, tokenAddresses, account] + ); +}; + +export const useStarknetTokenBalance = (tokenAddresses, account) => { + const contract = useStarknetTokenContract(tokenAddresses); + + return useCallback( + async () => await getTokenBalance(account, contract, false), + [tokenAddresses, account] + ); +}; + +export const useEthereumTokenBalance = (tokenAddresses, account) => { + const contract = useEthereumTokenContract(tokenAddresses); + + return useCallback( + async () => + tokenAddresses + ? await getTokenBalance(account, contract, true) + : await getEthBalance(account), + [tokenAddresses, account] ); }; diff --git a/src/hooks/useTokens.js b/src/hooks/useTokens.js index eff88d4d..45442519 100644 --- a/src/hooks/useTokens.js +++ b/src/hooks/useTokens.js @@ -5,14 +5,30 @@ import {EthereumTokens, StarknetTokens} from '../config/addresses'; import {NetworkType} from '../enums'; export const useTokens = () => { - const {action, isEthereum} = useTransferData(); + const {isEthereum} = useTransferData(); const [tokens, setTokens] = useState([]); - const memoizedStarknetTokens = useMemo(() => StarknetTokens, []); - const memoizedEthereumTokens = useMemo(() => [NetworkType.ETHEREUM, ...EthereumTokens], []); + const ethereumTokens = useEthereumTokens(); + const starknetTokens = useStarknetTokens(); useEffect(() => { - setTokens(isEthereum ? memoizedEthereumTokens : memoizedStarknetTokens); - }, [action]); + setTokens(isEthereum ? ethereumTokens : starknetTokens); + }, [isEthereum]); return tokens; }; + +export const useStarknetTokens = () => useMemo(() => StarknetTokens, []); + +export const useEthereumTokens = () => useMemo(() => [NetworkType.ETHEREUM, ...EthereumTokens], []); + +export const useStarknetToken = symbol => { + const starknetTokens = useStarknetTokens(); + + return useMemo(() => starknetTokens.find(token => token.symbol === symbol), [symbol]); +}; + +export const useEthereumToken = symbol => { + const ethereumTokens = useEthereumTokens(); + + return useMemo(() => ethereumTokens.find(token => token.symbol === symbol), [symbol]); +}; diff --git a/src/hooks/useTransferToStarknet.js b/src/hooks/useTransferToStarknet.js index 2f0f7f4d..fbc01cb2 100644 --- a/src/hooks/useTransferToStarknet.js +++ b/src/hooks/useTransferToStarknet.js @@ -2,7 +2,7 @@ import {useCallback, useState} from 'react'; import {depositEth, depositToken} from '../api/bridge'; import {approve} from '../api/erc20'; -import {useEthereumWallet, useStarknetWallet, useWallets} from '../providers/WalletsProvider/hooks'; +import {useStarknetWallet, useWallets} from '../providers/WalletsProvider/hooks'; import {listenOnce} from '../utils/contract'; import { useEthBridgeContract, @@ -76,11 +76,11 @@ export const useTransferToStarknet = tokenData => { bridgeContract, ethereumAccount ); - const depositEvent = await waitForLogMessageToL2(); - const depositReceipt = await depositPromise; + const depositEventPromise = waitForLogMessageToL2(); + const results = await Promise.all([depositPromise, depositEventPromise]); setIsLoading(false); setProgress(null); - setData([depositReceipt, depositEvent]); + setData(results); } catch (ex) { setIsLoading(false); setProgress(null); @@ -89,10 +89,10 @@ export const useTransferToStarknet = tokenData => { }; return { - isTransferring: isLoading, - transferProgress: progress, - transferError: error, - transferData: data, + isLoading, + progress, + error, + data, transferTokenToStarknet, transferEthToStarknet }; diff --git a/src/providers/WalletsProvider/WalletsProvider.js b/src/providers/WalletsProvider/WalletsProvider.js index 6923787c..b2bc73df 100644 --- a/src/providers/WalletsProvider/WalletsProvider.js +++ b/src/providers/WalletsProvider/WalletsProvider.js @@ -1,6 +1,6 @@ import {getStarknet} from '@argent/get-starknet'; import PropTypes from 'prop-types'; -import React, {useEffect, useReducer, useState} from 'react'; +import React, {useEffect, useReducer} from 'react'; import {useWallet} from 'use-wallet'; import { diff --git a/src/providers/WalletsProvider/hooks.js b/src/providers/WalletsProvider/hooks.js index 338ad757..abc7276c 100644 --- a/src/providers/WalletsProvider/hooks.js +++ b/src/providers/WalletsProvider/hooks.js @@ -8,14 +8,14 @@ export const useWallets = () => { const [activeWallet, setActiveWallet] = useState(wallets.ethereumWallet); const {isEthereum} = useTransferData(); - useEffect(() => { - setActiveWallet(isEthereum ? wallets.ethereumWallet : wallets.starknetWallet); - }, [isEthereum]); - const connectWallet = useCallback(walletConfig => wallets.connectWallet(walletConfig), []); const resetWallet = useCallback(() => wallets.resetWallet(), []); const swapWallets = useCallback(() => wallets.swapWallets(), []); + useEffect(() => { + setActiveWallet(isEthereum ? wallets.ethereumWallet : wallets.starknetWallet); + }, [isEthereum]); + return { ...activeWallet, connectWallet, diff --git a/src/utils/network.js b/src/utils/network.js new file mode 100644 index 00000000..e69de29b From 7828d53b34fc4efc15df6670f771dba55ceacf5c Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 14 Dec 2021 23:57:32 +0200 Subject: [PATCH 014/211] fix: run input checking effect only on amount change [skip ci] --- .../Transfer/NetworkMenu/NetworkMenu.js | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/components/Features/Transfer/NetworkMenu/NetworkMenu.js b/src/components/Features/Transfer/NetworkMenu/NetworkMenu.js index e0937769..969dfb99 100644 --- a/src/components/Features/Transfer/NetworkMenu/NetworkMenu.js +++ b/src/components/Features/Transfer/NetworkMenu/NetworkMenu.js @@ -45,20 +45,18 @@ export const NetworkMenu = ({ }, [action]); useEffect(() => { - if (!isTarget) { - setError(null); - if (Math.ceil(amount) === 0) { + setError(null); + if (Math.ceil(amount) === 0) { + setIsButtonDisabled(true); + } else { + if (amount > selectedToken.balance) { + setError(INSUFFICIENT_BALANCE_ERROR_MSG); setIsButtonDisabled(true); } else { - if (amount > selectedToken.balance) { - setError(INSUFFICIENT_BALANCE_ERROR_MSG); - setIsButtonDisabled(true); - } else { - setIsButtonDisabled(false); - } + setIsButtonDisabled(false); } } - }, [amount, action]); + }, [amount]); const onMaxClick = () => { setAmount(selectedToken.balance); From 8efa0ba8706fbcffbfb5f71cdfc3efbc63e79ec1 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Thu, 16 Dec 2021 01:25:50 +0200 Subject: [PATCH 015/211] feat: tokens provider [skip ci] --- src/hooks/useTokens.js | 34 -------- .../TokensProvider/TokensProvider.js | 79 +++++++++++++++++++ src/providers/TokensProvider/context.js | 7 ++ src/providers/TokensProvider/hooks.js | 40 ++++++++++ src/providers/TokensProvider/reducer.js | 41 ++++++++++ 5 files changed, 167 insertions(+), 34 deletions(-) delete mode 100644 src/hooks/useTokens.js create mode 100644 src/providers/TokensProvider/TokensProvider.js create mode 100644 src/providers/TokensProvider/context.js create mode 100644 src/providers/TokensProvider/hooks.js create mode 100644 src/providers/TokensProvider/reducer.js diff --git a/src/hooks/useTokens.js b/src/hooks/useTokens.js deleted file mode 100644 index 45442519..00000000 --- a/src/hooks/useTokens.js +++ /dev/null @@ -1,34 +0,0 @@ -import {useEffect, useMemo, useState} from 'react'; - -import {useTransferData} from '../components/Features/Transfer/Transfer/Transfer.hooks'; -import {EthereumTokens, StarknetTokens} from '../config/addresses'; -import {NetworkType} from '../enums'; - -export const useTokens = () => { - const {isEthereum} = useTransferData(); - const [tokens, setTokens] = useState([]); - const ethereumTokens = useEthereumTokens(); - const starknetTokens = useStarknetTokens(); - - useEffect(() => { - setTokens(isEthereum ? ethereumTokens : starknetTokens); - }, [isEthereum]); - - return tokens; -}; - -export const useStarknetTokens = () => useMemo(() => StarknetTokens, []); - -export const useEthereumTokens = () => useMemo(() => [NetworkType.ETHEREUM, ...EthereumTokens], []); - -export const useStarknetToken = symbol => { - const starknetTokens = useStarknetTokens(); - - return useMemo(() => starknetTokens.find(token => token.symbol === symbol), [symbol]); -}; - -export const useEthereumToken = symbol => { - const ethereumTokens = useEthereumTokens(); - - return useMemo(() => ethereumTokens.find(token => token.symbol === symbol), [symbol]); -}; diff --git a/src/providers/TokensProvider/TokensProvider.js b/src/providers/TokensProvider/TokensProvider.js new file mode 100644 index 00000000..272c133c --- /dev/null +++ b/src/providers/TokensProvider/TokensProvider.js @@ -0,0 +1,79 @@ +import React, {useEffect, useReducer} from 'react'; + +import {useEthereumTokensBalances, useStarknetTokensBalances} from '../../hooks/useTokenBalance'; +import {useEthereumWallet, useStarknetWallet} from '../WalletsProvider/hooks'; +import {TokensContext} from './context'; +import {actions, initialState, reducer} from './reducer'; + +export const TokensProvider = ({children}) => { + const [state, dispatch] = useReducer(reducer, initialState); + const {account: ethereumAccount} = useEthereumWallet(); + const {account: starknetAccount} = useStarknetWallet(); + const getEthereumBalances = useEthereumTokensBalances( + state.ethereumTokens.map(token => token.tokenAddress), + ethereumAccount + ); + const getStarknetBalances = useStarknetTokensBalances( + state.starknetTokens.map(token => token.tokenAddress), + starknetAccount + ); + + useEffect(() => { + fetchEthereumTokensBalances(); + fetchStarknetTokensBalances(); + }, []); + + const fetchEthereumTokensBalances = () => { + for (let index = 0; index < state.ethereumTokens.length; index++) { + const getBalance = getEthereumBalances[index]; + updateEthereumTokenState(index, {isLoading: true}); + getBalance() + .then(balance => { + updateEthereumTokenState(index, {balance, isLoading: false}); + }) + .catch(() => { + updateEthereumTokenState(index, {balance: null, isLoading: false}); + }); + } + }; + + const fetchStarknetTokensBalances = () => { + for (let index = 0; index < state.starknetTokens.length; index++) { + const getBalance = getStarknetBalances[index]; + updateStarknetTokenState(index, {isLoading: true}); + getBalance() + .then(balance => { + updateStarknetTokenState(index, {balance, isLoading: false}); + }) + .catch(() => { + updateStarknetTokenState(index, {balance: null, isLoading: false}); + }); + } + }; + + const updateEthereumTokenState = (index, args) => { + dispatch({ + type: actions.UPDATE_ETHEREUM_TOKEN_STATE, + payload: { + index, + args + } + }); + }; + + const updateStarknetTokenState = (index, args) => { + dispatch({ + type: actions.UPDATE_STARKNET_TOKEN_STATE, + payload: { + index, + args + } + }); + }; + + const context = { + ...state + }; + + return <TokensContext.Provider value={context}>{children}</TokensContext.Provider>; +}; diff --git a/src/providers/TokensProvider/context.js b/src/providers/TokensProvider/context.js new file mode 100644 index 00000000..06c9b667 --- /dev/null +++ b/src/providers/TokensProvider/context.js @@ -0,0 +1,7 @@ +import {createContext} from 'react'; + +import {initialState} from './reducer'; + +export const TokensContext = createContext({ + ...initialState +}); diff --git a/src/providers/TokensProvider/hooks.js b/src/providers/TokensProvider/hooks.js new file mode 100644 index 00000000..a1d1bc75 --- /dev/null +++ b/src/providers/TokensProvider/hooks.js @@ -0,0 +1,40 @@ +import {useContext, useEffect, useMemo, useState} from 'react'; + +import {useTransferData} from '../../components/Features/Transfer/Transfer/Transfer.hooks'; +import {TokensContext} from './context'; + +export const useTokens = () => { + const {isEthereum} = useTransferData(); + const {starknetTokens, ethereumTokens} = useContext(TokensContext); + const [tokens, setTokens] = useState(isEthereum ? ethereumTokens : starknetTokens); + + useEffect(() => { + setTokens(isEthereum ? ethereumTokens : starknetTokens); + }, [isEthereum, starknetTokens, ethereumTokens]); + + return {tokens, starknetTokens, ethereumTokens}; +}; + +export const useStarknetTokens = () => { + const {starknetTokens} = useContext(TokensContext); + + return starknetTokens; +}; + +export const useEthereumTokens = () => { + const {ethereumTokens} = useContext(TokensContext); + + return ethereumTokens; +}; + +export const useStarknetToken = symbol => { + const starknetTokens = useStarknetTokens(); + + return useMemo(() => starknetTokens.find(token => token.symbol === symbol), [symbol]); +}; + +export const useEthereumToken = symbol => { + const ethereumTokens = useEthereumTokens(); + + return useMemo(() => ethereumTokens.find(token => token.symbol === symbol), [symbol]); +}; diff --git a/src/providers/TokensProvider/reducer.js b/src/providers/TokensProvider/reducer.js new file mode 100644 index 00000000..3cee011e --- /dev/null +++ b/src/providers/TokensProvider/reducer.js @@ -0,0 +1,41 @@ +import {EthereumTokens, StarknetTokens} from '../../config/addresses'; +import {NetworkType} from '../../enums'; + +export const actions = { + UPDATE_ETHEREUM_TOKEN_STATE: 'Tokens/UPDATE_ETHEREUM_TOKEN_STATE', + UPDATE_STARKNET_TOKEN_STATE: 'Tokens/UPDATE_STARKNET_TOKEN_STATE' +}; + +function getUpdatedTokens(tokens, payload) { + const {index, args} = payload; + const tokenData = {...tokens[index], ...args}; + const tokensCopy = [...tokens]; + tokensCopy[index] = tokenData; + return tokensCopy; +} + +export const initialState = { + ethereumTokens: [NetworkType.ETHEREUM, ...EthereumTokens], + starknetTokens: StarknetTokens +}; + +export const reducer = (state, action) => { + switch (action.type) { + case actions.UPDATE_ETHEREUM_TOKEN_STATE: { + return { + ...state, + ethereumTokens: getUpdatedTokens(state.ethereumTokens, action.payload) + }; + } + + case actions.UPDATE_STARKNET_TOKEN_STATE: { + return { + ...state, + starknetTokens: getUpdatedTokens(state.starknetTokens, action.payload) + }; + } + + default: + return state; + } +}; From e2b5016235056e05b5446e2da2777b9160d31d3b Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Thu, 16 Dec 2021 02:04:05 +0200 Subject: [PATCH 016/211] refactor: netowrks [skip ci] --- src/api/erc20.js | 7 +- src/components/Containers/Main/Main.js | 9 +- .../Account/Account/Account.constants.js | 9 +- .../Features/Login/Login/Login.strings.js | 4 +- .../SelectToken/SelectToken/SelectToken.js | 5 +- .../SelectTokenRow/SelectTokenRow.js | 29 +---- .../EthereumNetwork/EthereumNetwork.js | 33 +++-- .../Transfer/NetworkMenu/NetworkMenu.js | 123 +++++++++--------- .../StarknetNetwork/StarknetNetwork.js | 28 ++-- .../Transfer/TokenBalance/TokenBalance.js | 9 +- .../Transfer/TokenInput/TokenInput.js | 6 +- .../Transfer/Transfer/Transfer.hooks.js | 2 + .../Features/Transfer/Transfer/Transfer.js | 17 +-- .../Transfer/Transfer/Transfer.selectors.js | 14 ++ .../Transfer/Transfer/Transfer.slice.js | 19 +-- src/components/UI/DynamicIcon/DynamicIcon.js | 27 ++-- src/hooks/index.js | 3 +- src/hooks/useContract.js | 48 ++++--- src/hooks/useFetchData.js | 34 +++++ src/hooks/usePrevious.js | 11 ++ src/hooks/useTokenBalance.js | 42 +++++- .../TokensProvider/TokensProvider.js | 57 ++++---- src/providers/TokensProvider/context.js | 4 +- .../WalletsProvider/WalletsProvider.js | 6 +- src/utils/wallet.js | 3 +- 25 files changed, 317 insertions(+), 232 deletions(-) create mode 100644 src/hooks/useFetchData.js create mode 100644 src/hooks/usePrevious.js diff --git a/src/api/erc20.js b/src/api/erc20.js index 45ff481f..a20b1370 100644 --- a/src/api/erc20.js +++ b/src/api/erc20.js @@ -1,4 +1,4 @@ -import {uint256} from 'starknet'; +import {number, uint256} from 'starknet'; import {callContract, callStarknetContract, sendTransaction} from '../utils/contract'; import {web3} from '../web3'; @@ -20,7 +20,10 @@ export const getTokenBalance = async (account, contract, isEthereum = true) => { return Number(web3.utils.fromWei(balance)); } else { const {balance} = await callStarknetContract(contract, 'balanceOf', [{account}]); - return uint256.uint256ToBN(balance).toNumber(); + const {decimals} = await callStarknetContract(contract, 'decimals'); + const decimalsNumber = number.toBN(decimals).toNumber(); + const bnString = uint256.uint256ToBN(balance).toString(); + return bnString / Math.pow(10, decimalsNumber); } } catch (ex) { return Promise.reject(ex); diff --git a/src/components/Containers/Main/Main.js b/src/components/Containers/Main/Main.js index 67296a6d..6f4d065b 100644 --- a/src/components/Containers/Main/Main.js +++ b/src/components/Containers/Main/Main.js @@ -1,6 +1,7 @@ import React, {useEffect, useState} from 'react'; import {useVars, useWindowSize} from '../../../hooks'; +import {TokensProvider} from '../../../providers/TokensProvider/TokensProvider'; import {useEthereumWallet, useStarknetWallet} from '../../../providers/WalletsProvider/hooks'; import {Bridge} from '../../Features'; import {Login} from '../../Features/Login'; @@ -19,7 +20,13 @@ export const Main = () => { return ( <main className={styles.main} style={{height}}> - {isEthereumConnected && isStarknetConnected ? <Bridge /> : <Login />} + {isEthereumConnected && isStarknetConnected ? ( + <TokensProvider> + <Bridge /> + </TokensProvider> + ) : ( + <Login /> + )} </main> ); }; diff --git a/src/components/Features/Account/Account/Account.constants.js b/src/components/Features/Account/Account/Account.constants.js index 6ae51e06..eb2b4078 100644 --- a/src/components/Features/Account/Account/Account.constants.js +++ b/src/components/Features/Account/Account/Account.constants.js @@ -4,11 +4,16 @@ export const LINKS = { ETHERSCAN: { text: 'etherscan', url: (chainName, account) => - evaluate('https://{{chainName}}etherscan.io/address/{{account}}', {chainName, account}) + evaluate('https://{{chainName}}etherscan.io/address/{{account}}', { + chainName, + account + }) }, VOYAGER: { text: 'voyager', url: (chainName, account) => - evaluate('https://{{chainName}}voyager.online/contract/{{account}}', {account}) + evaluate('https://{{chainName}}voyager.online/contract/{{account}}', { + account + }) } }; diff --git a/src/components/Features/Login/Login/Login.strings.js b/src/components/Features/Login/Login/Login.strings.js index 0dbd9b30..10ad7d16 100644 --- a/src/components/Features/Login/Login/Login.strings.js +++ b/src/components/Features/Login/Login/Login.strings.js @@ -3,7 +3,9 @@ import {evaluate} from '../../../../utils'; export const TITLE_TXT = 'Login'; export const SUBTITLE_TXT = networkName => - evaluate('Please select {{networkName}} wallet to connect with this dApp:', {networkName}); + evaluate('Please select {{networkName}} wallet to connect with this dApp:', { + networkName + }); export const DOWNLOAD_TEXT = ['Don’t have a wallet?', 'Download Here']; diff --git a/src/components/Features/SelectToken/SelectToken/SelectToken.js b/src/components/Features/SelectToken/SelectToken/SelectToken.js index 7abb077d..60403fb9 100644 --- a/src/components/Features/SelectToken/SelectToken/SelectToken.js +++ b/src/components/Features/SelectToken/SelectToken/SelectToken.js @@ -2,7 +2,8 @@ import React, {useEffect, useState} from 'react'; import EthereumLogo from '../../../../assets/svg/tokens/eth.svg'; import StarkNetLogo from '../../../../assets/svg/tokens/starknet.svg'; -import {useColors, useTokens} from '../../../../hooks'; +import {useColors} from '../../../../hooks'; +import {useTokens} from '../../../../providers/TokensProvider/hooks'; import {BackButton, Menu, MenuTitle} from '../../../UI'; import {useBridgeActions} from '../../Bridge/Bridge.hooks'; import {useTransferActions, useTransferData} from '../../Transfer/Transfer/Transfer.hooks'; @@ -12,7 +13,7 @@ import styles from './SelectToken.module.scss'; import {TITLE_TXT} from './SelectToken.strings'; export const SelectToken = () => { - const tokens = useTokens(); + const {tokens} = useTokens(); const {colorBeta} = useColors(); const {showTransferMenu} = useBridgeActions(); const {isEthereum, fromNetwork} = useTransferData(); diff --git a/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js b/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js index 2da86de3..1abd6ef5 100644 --- a/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js +++ b/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js @@ -1,8 +1,6 @@ import PropTypes from 'prop-types'; -import React, {useEffect, useState} from 'react'; +import React from 'react'; -import {useTokenBalance} from '../../../../hooks/useTokenBalance'; -import {useWallets} from '../../../../providers/WalletsProvider/hooks'; import {formatBalance, toClasses} from '../../../../utils'; import {CryptoLogo, Loading} from '../../../UI'; import {CryptoLogoSize} from '../../../UI/CryptoLogo/CryptoLogo.enums'; @@ -10,33 +8,12 @@ import {LoadingSize} from '../../../UI/Loading/Loading.enums'; import styles from './SelectTokenRow.module.scss'; export const SelectTokenRow = ({tokenData, onClick}) => { - const {name, symbol, tokenAddress} = tokenData; - const [mounted, setMounted] = useState(true); - const [, setError] = useState(null); - const [isLoading, setIsLoading] = useState(true); - const [balance, setBalance] = useState(null); - const {account} = useWallets(); - const getBalance = useTokenBalance(tokenAddress, account); - - useEffect(async () => { - setIsLoading(true); - setError(null); - try { - const tokenBalance = await getBalance(); - if (!mounted) return; - setBalance(tokenBalance); - } catch (ex) { - setError(ex); - } finally { - setIsLoading(false); - } - return () => setMounted(false); - }, []); + const {name, symbol, balance, isLoading} = tokenData; return ( <div className={toClasses(styles.selectTokenRow, isLoading && styles.isLoading)} - onClick={() => onClick({...tokenData, balance})} + onClick={() => onClick(tokenData)} > <hr /> <div className={styles.data}> diff --git a/src/components/Features/Transfer/EthereumNetwork/EthereumNetwork.js b/src/components/Features/Transfer/EthereumNetwork/EthereumNetwork.js index 408af34e..a6574884 100644 --- a/src/components/Features/Transfer/EthereumNetwork/EthereumNetwork.js +++ b/src/components/Features/Transfer/EthereumNetwork/EthereumNetwork.js @@ -1,10 +1,8 @@ -import PropTypes from 'prop-types'; -import React, {useEffect} from 'react'; +import React, {useEffect, useState} from 'react'; import {NetworkType} from '../../../../enums'; -import {useEthereumToken, useTransferToStarknet} from '../../../../hooks'; -import {useEthereumTokenBalance} from '../../../../hooks/useTokenBalance'; -import {useEthereumWallet} from '../../../../providers/WalletsProvider/hooks'; +import {useTransferToStarknet} from '../../../../hooks'; +import {useTokens} from '../../../../providers/TokensProvider/hooks'; import {isEth} from '../../../../utils'; import { useHideModal, @@ -15,18 +13,21 @@ import {useAmount, useTransferData} from '../Transfer/Transfer.hooks'; import {NetworkMenu} from '../index'; import {TRANSFER_TO_STARKNET_MODAL_TITLE} from './EthereumNetwork.strings'; -export const EthereumNetwork = ({isTarget}) => { - const {selectedToken} = useTransferData(); - const {account} = useEthereumWallet(); +export const EthereumNetwork = () => { + const {isEthereum, selectedEthereumToken} = useTransferData(); + const {ethereumTokens} = useTokens(); + const [tokenData, setTokenData] = useState(selectedEthereumToken || ethereumTokens[0]); const [amount, , clearAmount] = useAmount(); const hideModal = useHideModal(); const showProgressModal = useProgressModal(); const showTransactionSubmittedModal = useTransactionSubmittedModal(); - const ethereumTokenData = useEthereumToken(selectedToken.symbol); - const getEthereumBalance = useEthereumTokenBalance(ethereumTokenData.tokenAddress, account); + + useEffect(() => { + setTokenData(selectedEthereumToken || ethereumTokens[0]); + }, [ethereumTokens]); const {transferEthToStarknet, transferTokenToStarknet, data, error, isLoading, progress} = - useTransferToStarknet(selectedToken); + useTransferToStarknet(tokenData); useEffect(() => { if (isLoading) { @@ -43,19 +44,15 @@ export const EthereumNetwork = ({isTarget}) => { }, [progress, data, error, isLoading, amount]); const onTransferClick = async () => - isEth(selectedToken) ? transferEthToStarknet(amount) : transferTokenToStarknet(amount); + isEth(tokenData) ? transferEthToStarknet(amount) : transferTokenToStarknet(amount); return ( <NetworkMenu - getBalance={getEthereumBalance} - isTarget={isTarget} + isTarget={!isEthereum} isTransferring={isLoading} networkData={NetworkType.ETHEREUM} + tokenData={tokenData} onTransferClick={onTransferClick} /> ); }; - -EthereumNetwork.propTypes = { - isTarget: PropTypes.bool -}; diff --git a/src/components/Features/Transfer/NetworkMenu/NetworkMenu.js b/src/components/Features/Transfer/NetworkMenu/NetworkMenu.js index 969dfb99..d6f6c23e 100644 --- a/src/components/Features/Transfer/NetworkMenu/NetworkMenu.js +++ b/src/components/Features/Transfer/NetworkMenu/NetworkMenu.js @@ -6,60 +6,72 @@ import {useBridgeActions} from '../../Bridge/Bridge.hooks'; import {NetworkTitle} from '../NetworkTitle/NetworkTitle'; import {TokenBalance} from '../TokenBalance/TokenBalance'; import {TokenInput} from '../TokenInput/TokenInput'; -import {useAmount, useTransferActions, useTransferData} from '../Transfer/Transfer.hooks'; +import {useAmount} from '../Transfer/Transfer.hooks'; import {TransferButton} from '../TransferButton/TransferButton'; import styles from './NetworkMenu.module.scss'; import {FROM, INSUFFICIENT_BALANCE_ERROR_MSG, TO} from './NetworkMenu.strings'; export const NetworkMenu = ({ networkData, + tokenData, isTarget, isTransferring, - getBalance, onTransferClick, children }) => { - const [isButtonDisabled, setIsButtonDisabled] = useState(true); - const [error, setError] = useState(null); - const [balance, setBalance] = useState(null); + return ( + <div className={styles.networkMenu}> + <Badge text={isTarget ? TO : FROM} /> + <div className={styles.networkContainer}> + <NetworkTitle networkData={networkData} /> + <TokenBalance tokenData={tokenData} /> + </div> + <div className={styles.transferContainer}> + {!isTarget && ( + <TransferContainer + isTransferring={isTransferring} + tokenData={tokenData} + onTransferClick={onTransferClick} + /> + )} + </div> + {children} + </div> + ); +}; + +NetworkMenu.propTypes = { + networkData: PropTypes.object, + tokenData: PropTypes.object, + isTarget: PropTypes.bool, + isTransferring: PropTypes.bool, + onTransferClick: PropTypes.func, + children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) +}; + +const TransferContainer = ({tokenData, isTransferring, onTransferClick}) => { const [amount, setAmount] = useAmount(); - const {action, selectedToken} = useTransferData(); - const {selectToken} = useTransferActions(); const {showSelectTokenMenu} = useBridgeActions(); - const [mounted, setMounted] = useState(true); - - useEffect(async () => { - if (isTarget || selectedToken.balance === null) { - try { - const tokenBalance = await getBalance(); - if (!mounted) return; - selectToken({...selectedToken, balance: tokenBalance}); - setBalance(tokenBalance); - } catch (ex) { - setError(ex); - } - } else { - setBalance(selectedToken.balance); - } - return () => setMounted(false); - }, [action]); + const [hasInputError, setHasInputError] = useState(false); + const [isButtonDisabled, setIsButtonDisabled] = useState(true); + const {balance} = tokenData; useEffect(() => { - setError(null); + setHasInputError(false); if (Math.ceil(amount) === 0) { setIsButtonDisabled(true); } else { - if (amount > selectedToken.balance) { - setError(INSUFFICIENT_BALANCE_ERROR_MSG); + if (amount > balance) { + setHasInputError(true); setIsButtonDisabled(true); } else { setIsButtonDisabled(false); } } - }, [amount]); + }, [amount, balance]); const onMaxClick = () => { - setAmount(selectedToken.balance); + setAmount(balance); }; const onInputChange = event => { @@ -67,42 +79,27 @@ export const NetworkMenu = ({ }; return ( - <div className={styles.networkMenu}> - <Badge text={isTarget ? TO : FROM} /> - <div className={styles.networkContainer}> - <NetworkTitle networkData={networkData} /> - <TokenBalance balance={balance} symbol={selectedToken.symbol} /> - </div> - <div className={styles.transferContainer}> - {!isTarget && ( - <> - <TokenInput - hasError={!!error} - selectedToken={selectedToken} - value={amount} - onInputChange={onInputChange} - onMaxClick={onMaxClick} - onTokenSelect={showSelectTokenMenu} - /> - {error && <div className={styles.errorMsg}>{error}</div>} - <TransferButton - isDisabled={isButtonDisabled} - isLoading={isTransferring} - onClick={onTransferClick} - /> - </> - )} - </div> - {children} - </div> + <> + <TokenInput + hasError={hasInputError} + tokenData={tokenData} + value={amount} + onInputChange={onInputChange} + onMaxClick={onMaxClick} + onTokenSelect={showSelectTokenMenu} + /> + {hasInputError && <div className={styles.errorMsg}>{INSUFFICIENT_BALANCE_ERROR_MSG}</div>} + <TransferButton + isDisabled={isButtonDisabled} + isLoading={isTransferring} + onClick={onTransferClick} + /> + </> ); }; -NetworkMenu.propTypes = { - networkData: PropTypes.object, - isTarget: PropTypes.bool, +TransferContainer.propTypes = { + tokenData: PropTypes.object, isTransferring: PropTypes.bool, - getBalance: PropTypes.func, - onTransferClick: PropTypes.func, - children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) + onTransferClick: PropTypes.func }; diff --git a/src/components/Features/Transfer/StarknetNetwork/StarknetNetwork.js b/src/components/Features/Transfer/StarknetNetwork/StarknetNetwork.js index a29db79e..62f7d4cc 100644 --- a/src/components/Features/Transfer/StarknetNetwork/StarknetNetwork.js +++ b/src/components/Features/Transfer/StarknetNetwork/StarknetNetwork.js @@ -1,30 +1,26 @@ -import PropTypes from 'prop-types'; -import React from 'react'; +import React, {useEffect, useState} from 'react'; import {NetworkType} from '../../../../enums'; -import {useStarknetToken} from '../../../../hooks'; -import {useStarknetTokenBalance} from '../../../../hooks/useTokenBalance'; -import {useEthereumWallet} from '../../../../providers/WalletsProvider/hooks'; +import {useTokens} from '../../../../providers/TokensProvider/hooks'; import {useTransferData} from '../Transfer/Transfer.hooks'; import {NetworkMenu} from '../index'; -export const StarknetNetwork = ({isTarget}) => { - const {selectedToken} = useTransferData(); - const {account} = useEthereumWallet(); - const starknetTokenData = useStarknetToken(selectedToken.symbol); - const getStarknetBalance = useStarknetTokenBalance(starknetTokenData.tokenAddress, account); +export const StarknetNetwork = () => { + const {isStarknet, selectedStarknetToken} = useTransferData(); + const {starknetTokens} = useTokens(); + const [tokenData, setTokenData] = useState(selectedStarknetToken || starknetTokens[0]); + + useEffect(() => { + setTokenData(selectedStarknetToken || starknetTokens[0]); + }, [starknetTokens]); return ( <NetworkMenu - getBalance={getStarknetBalance} - isTarget={isTarget} + isTarget={!isStarknet} isTransferring={false} networkData={NetworkType.STARKNET} + tokenData={tokenData} onTransferClick={() => {}} /> ); }; - -StarknetNetwork.propTypes = { - isTarget: PropTypes.bool -}; diff --git a/src/components/Features/Transfer/TokenBalance/TokenBalance.js b/src/components/Features/Transfer/TokenBalance/TokenBalance.js index f410f6a5..61717992 100644 --- a/src/components/Features/Transfer/TokenBalance/TokenBalance.js +++ b/src/components/Features/Transfer/TokenBalance/TokenBalance.js @@ -1,20 +1,18 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {useIsLoading} from '../../../../hooks'; import {formatBalance} from '../../../../utils'; import {Loading} from '../../../UI'; import {LoadingSize} from '../../../UI/Loading/Loading.enums'; import styles from './TokenBalance.module.scss'; import {TITLE_TXT} from './TokenBalance.strings'; -export const TokenBalance = ({balance, symbol}) => { - const isLoading = useIsLoading(balance); +export const TokenBalance = ({tokenData}) => { + const {symbol, isLoading, balance} = tokenData; return ( <div className={styles.tokenBalance}> <span>{TITLE_TXT}</span> - {isLoading && ( <> <br /> @@ -33,6 +31,5 @@ export const TokenBalance = ({balance, symbol}) => { }; TokenBalance.propTypes = { - symbol: PropTypes.string, - balance: PropTypes.number + tokenData: PropTypes.object }; diff --git a/src/components/Features/Transfer/TokenInput/TokenInput.js b/src/components/Features/Transfer/TokenInput/TokenInput.js index e16ad297..4b064d30 100644 --- a/src/components/Features/Transfer/TokenInput/TokenInput.js +++ b/src/components/Features/Transfer/TokenInput/TokenInput.js @@ -11,7 +11,7 @@ import {INPUT_PLACEHOLDER} from './TokenInput.strings'; export const TokenInput = ({ value, hasError, - selectedToken, + tokenData, onMaxClick, onTokenSelect, onInputChange @@ -28,14 +28,14 @@ export const TokenInput = ({ onChange={onInputChange} /> <MaxButton onClick={onMaxClick} /> - <TokenSelector tokenData={selectedToken} onClick={onTokenSelect} /> + <TokenSelector tokenData={tokenData} onClick={onTokenSelect} /> </div> ); TokenInput.propTypes = { value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), hasError: PropTypes.bool, - selectedToken: PropTypes.object, + tokenData: PropTypes.object, onMaxClick: PropTypes.func, onTokenSelect: PropTypes.func, onInputChange: PropTypes.func diff --git a/src/components/Features/Transfer/Transfer/Transfer.hooks.js b/src/components/Features/Transfer/Transfer/Transfer.hooks.js index 9abb810d..643fac60 100644 --- a/src/components/Features/Transfer/Transfer/Transfer.hooks.js +++ b/src/components/Features/Transfer/Transfer/Transfer.hooks.js @@ -6,6 +6,7 @@ import { fromNetworkSelector, fromStarknetSelector, getCurrentAmountSelector, + getCurrentSelectedTokenSelector, selectTransfer, toNetworkSelector, toStarknetSelector @@ -21,6 +22,7 @@ export const useTransferActions = () => ({ export const useTransferData = () => ({ ...useSelector(selectTransfer), + selectedToken: useSelector(getCurrentSelectedTokenSelector), isEthereum: useSelector(toStarknetSelector), isStarknet: useSelector(fromStarknetSelector), fromNetwork: useSelector(fromNetworkSelector), diff --git a/src/components/Features/Transfer/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer/Transfer.js index 66ef656c..520ba174 100644 --- a/src/components/Features/Transfer/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer/Transfer.js @@ -1,4 +1,4 @@ -import React, {useEffect} from 'react'; +import React from 'react'; import {ActionType, NetworkType} from '../../../../enums'; import {Menu} from '../../../UI'; @@ -6,18 +6,13 @@ import {EthereumNetwork} from '../EthereumNetwork/EthereumNetwork'; import {NetworkSwap} from '../NetworkSwap/NetworkSwap'; import {StarknetNetwork} from '../StarknetNetwork/StarknetNetwork'; import {TransferMenuTab} from '../TransferMenuTab/TransferMenuTab'; -import {useIsEthereum, useIsStarknet, useTransferActions, useTransferData} from './Transfer.hooks'; +import {useIsEthereum, useIsStarknet, useTransferData} from './Transfer.hooks'; import styles from './Transfer.module.scss'; export const Transfer = () => { const [isEthereum, setEthereum] = useIsEthereum(); const [isStarknet, setStarknet] = useIsStarknet(); - const {action, selectedToken} = useTransferData(); - const {selectToken} = useTransferActions(); - - useEffect(() => { - selectToken({...selectedToken, balance: null}); - }, [action]); + const {action} = useTransferData(); const renderTabs = () => { return Object.values(ActionType).map((tab, index) => { @@ -40,9 +35,9 @@ export const Transfer = () => { !isEthereum ? setEthereum() : setStarknet(); }; - const renderEthereumNetwork = isTarget => <EthereumNetwork isTarget={isTarget} />; + const renderEthereumNetwork = () => <EthereumNetwork />; - const renderStarknetNetwork = isTarget => <StarknetNetwork isTarget={isTarget} />; + const renderStarknetNetwork = () => <StarknetNetwork />; return ( <Menu> @@ -50,7 +45,7 @@ export const Transfer = () => { <div className={styles.tabsContainer}>{renderTabs()}</div> {isEthereum ? renderEthereumNetwork() : renderStarknetNetwork()} <NetworkSwap isFlipped={isStarknet} onClick={onSwapClick} /> - {isEthereum ? renderStarknetNetwork(true) : renderEthereumNetwork(true)} + {isEthereum ? renderStarknetNetwork() : renderEthereumNetwork()} </div> </Menu> ); diff --git a/src/components/Features/Transfer/Transfer/Transfer.selectors.js b/src/components/Features/Transfer/Transfer/Transfer.selectors.js index 2f0f27db..9ab837f0 100644 --- a/src/components/Features/Transfer/Transfer/Transfer.selectors.js +++ b/src/components/Features/Transfer/Transfer/Transfer.selectors.js @@ -6,6 +6,10 @@ export const selectTransfer = state => state.transfer; export const selectTransferAction = state => state.transfer.action; +export const selectEthereumToken = state => state.transfer.selectedEthereumToken; + +export const selectStarknetToken = state => state.transfer.selectedStarknetToken; + export const selectWithdrawAmount = state => state.transfer.withdrawAmount; export const selectDepositAmount = state => state.transfer.depositAmount; @@ -37,3 +41,13 @@ export const getCurrentAmountSelector = createSelector( return withdrawAmount; } ); + +export const getCurrentSelectedTokenSelector = createSelector( + [selectTransferAction, selectEthereumToken, selectStarknetToken], + (action, ethereumToken, starknetToken) => { + if (action === ActionType.TRANSFER_TO_STARKNET) { + return ethereumToken; + } + return starknetToken; + } +); diff --git a/src/components/Features/Transfer/Transfer/Transfer.slice.js b/src/components/Features/Transfer/Transfer/Transfer.slice.js index 6b19ea76..065402bf 100644 --- a/src/components/Features/Transfer/Transfer/Transfer.slice.js +++ b/src/components/Features/Transfer/Transfer/Transfer.slice.js @@ -1,14 +1,11 @@ import {createSlice} from '@reduxjs/toolkit'; -import {ActionType, NetworkType} from '../../../../enums'; +import {ActionType} from '../../../../enums'; const initialState = { - selectedToken: { - balance: null, - name: NetworkType.ETHEREUM.name, - symbol: NetworkType.ETHEREUM.symbol - }, action: ActionType.TRANSFER_TO_STARKNET, + selectedEthereumToken: null, + selectedStarknetToken: null, depositAmount: '', withdrawAmount: '' }; @@ -17,12 +14,16 @@ const transferSlice = createSlice({ name: 'transfer', initialState, reducers: { - selectTokenAction(state, action) { - state.selectedToken = action.payload; - }, setTransferAction(state, action) { state.action = action.payload; }, + selectTokenAction(state, action) { + if (state.action === ActionType.TRANSFER_TO_STARKNET) { + state.selectedEthereumToken = action.payload; + } else { + state.selectedStarknetToken = action.payload; + } + }, setAmountAction(state, action) { if (state.action === ActionType.TRANSFER_TO_STARKNET) { state.depositAmount = action.payload; diff --git a/src/components/UI/DynamicIcon/DynamicIcon.js b/src/components/UI/DynamicIcon/DynamicIcon.js index ba227562..15c9c391 100644 --- a/src/components/UI/DynamicIcon/DynamicIcon.js +++ b/src/components/UI/DynamicIcon/DynamicIcon.js @@ -1,26 +1,19 @@ import PropTypes from 'prop-types'; -import React, {useEffect, useRef, useState} from 'react'; +import React, {useEffect, useRef} from 'react'; + +import {useFetchData} from '../../../hooks'; export const DynamicIcon = ({path, size}) => { - const [loading, setLoading] = useState(false); - const [, setError] = useState(null); const ImportedIconRef = useRef(null); + const {data, isLoading} = useFetchData(() => import(`../../../assets/svg/${path}`), [path]); - useEffect(async () => { - setLoading(true); - const importIcon = async () => { - try { - ImportedIconRef.current = (await import(`../../../assets/svg/${path}`)).default; - } catch (ex) { - setError(ex); - } finally { - setLoading(false); - } - }; - await importIcon(); - }, [path]); + useEffect(() => { + if (data) { + ImportedIconRef.current = data.default; + } + }, [data]); - if (!loading && ImportedIconRef.current) { + if (!isLoading && ImportedIconRef.current) { const {current: ImportedIcon} = ImportedIconRef; return <img alt="" height={size} src={ImportedIcon} width={size} />; } diff --git a/src/hooks/index.js b/src/hooks/index.js index e1dfa591..6658f0ef 100644 --- a/src/hooks/index.js +++ b/src/hooks/index.js @@ -3,9 +3,10 @@ export * from './useIsLoading'; export * from './useWindowSize'; export * from './useVars'; export * from './useColors'; -export * from './useTokens'; export * from './useContract'; export * from './useLogger'; export * from './useTransferToStarknet'; export * from './useWalletHandlerProvider'; export * from './useTransferToStarknet'; +export * from './useFetchData'; +export * from './usePrevious'; diff --git a/src/hooks/useContract.js b/src/hooks/useContract.js index a8030f00..5c63ff6e 100644 --- a/src/hooks/useContract.js +++ b/src/hooks/useContract.js @@ -7,27 +7,31 @@ import {ETH_BRIDGE_CONTRACT_ADDRESS, MESSAGING_CONTRACT_ADDRESS} from '../config import {useWallets} from '../providers/WalletsProvider/hooks'; import {getContract, getStarknetContract} from '../utils/contract'; -export const useContract = (addressOrAddressMap, ABI) => { +export const useContracts = (tokensAddresses, ABI, getContractHandler = getContract) => { const {chainId} = useWallets(); return useMemo(() => { - if (!addressOrAddressMap || !ABI || !chainId) return null; - let address; - if (typeof addressOrAddressMap === 'string') { - address = addressOrAddressMap; - } else { - address = addressOrAddressMap[chainId]; - } - if (!address) return null; - try { - return getContract(address, ABI); - } catch (ex) { - return null; - } - }, [addressOrAddressMap, ABI, chainId]); + const contracts = []; + if (!tokensAddresses || !ABI || !chainId) return null; + tokensAddresses.forEach(tokenAddress => { + let contract; + if (tokenAddress) { + const address = tokenAddress[chainId]; + try { + contract = getContractHandler(address, ABI); + } catch (ex) { + contract = null; + } + } else { + contract = null; + } + contracts.push(contract); + }); + return contracts; + }, [tokensAddresses, ABI, chainId]); }; -export const useStarknetContract = (addressOrAddressMap, ABI) => { +export const useContract = (addressOrAddressMap, ABI, getContractHandler = getContract) => { const {chainId} = useWallets(); return useMemo(() => { @@ -40,7 +44,7 @@ export const useStarknetContract = (addressOrAddressMap, ABI) => { } if (!address) return null; try { - return getStarknetContract(address, ABI); + return getContractHandler(address, ABI); } catch (ex) { return null; } @@ -67,16 +71,22 @@ export const useTokenBridgeContract = bridgeAddress => { }; export const useStarknetTokenContract = tokenAddresses => - useStarknetContract(tokenAddresses, STARKNET_ERC20_ABI); + useContract(tokenAddresses, STARKNET_ERC20_ABI, getStarknetContract); + +export const useStarknetTokenContracts = tokensAddresses => + useContracts(tokensAddresses, STARKNET_ERC20_ABI, getStarknetContract); export const useEthereumTokenContract = tokenAddresses => useContract(tokenAddresses, ERC20_ABI); +export const useEthereumTokenContracts = tokensAddresses => + useContracts(tokensAddresses, ERC20_ABI); + export const useEthBridgeContract = () => useContract(ETH_BRIDGE_CONTRACT_ADDRESS, ETH_BRIDGE_ABI); export const useMessagingContract = () => useContract(MESSAGING_CONTRACT_ADDRESS, MESSAGING_ABI); export const useStarknetTokenBridgeContract = bridgeAddress => - useContract(bridgeAddress, STARKNET_BRIDGE_ABI); + useContract(bridgeAddress, STARKNET_BRIDGE_ABI, getStarknetContract); export const useEthereumTokenBridgeContract = bridgeAddress => useContract(bridgeAddress, ERC20_BRIDGE_ABI); diff --git a/src/hooks/useFetchData.js b/src/hooks/useFetchData.js new file mode 100644 index 00000000..fe145d60 --- /dev/null +++ b/src/hooks/useFetchData.js @@ -0,0 +1,34 @@ +import {useEffect, useState} from 'react'; + +export const useFetchData = (func, deps = []) => { + const [isLoading, setIsLoading] = useState(true); + const [data, setData] = useState(null); + const [error, setError] = useState(null); + + useEffect(() => { + async function fetch() { + setIsLoading(true); + setError(null); + try { + const data = await func(); + if (!mounted) return; + setData(data); + setIsLoading(false); + } catch (ex) { + if (!mounted) return; + setError(ex); + setIsLoading(false); + } + } + + let mounted = true; + fetch(); + return () => (mounted = false); + }, deps); + + return { + isLoading, + data, + error + }; +}; diff --git a/src/hooks/usePrevious.js b/src/hooks/usePrevious.js new file mode 100644 index 00000000..c8526289 --- /dev/null +++ b/src/hooks/usePrevious.js @@ -0,0 +1,11 @@ +import {useEffect, useRef} from 'react'; + +export const usePrevious = value => { + const ref = useRef(); + + useEffect(() => { + ref.current = value; + }); + + return ref.current; +}; diff --git a/src/hooks/useTokenBalance.js b/src/hooks/useTokenBalance.js index 71993b49..f9d845bb 100644 --- a/src/hooks/useTokenBalance.js +++ b/src/hooks/useTokenBalance.js @@ -2,7 +2,12 @@ import {useCallback} from 'react'; import {getEthBalance, getTokenBalance} from '../api/erc20'; import {useTransferData} from '../components/Features/Transfer/Transfer/Transfer.hooks'; -import {useEthereumTokenContract, useStarknetTokenContract} from './useContract'; +import { + useEthereumTokenContract, + useEthereumTokenContracts, + useStarknetTokenContract, + useStarknetTokenContracts +} from './useContract'; export const useTokenBalance = (tokenAddresses, account) => { const getStarknetBalanceCallback = useStarknetTokenBalance(tokenAddresses, account); @@ -35,3 +40,38 @@ export const useEthereumTokenBalance = (tokenAddresses, account) => { [tokenAddresses, account] ); }; + +export const useEthereumTokensBalances = (tokensAddresses, account) => { + const contracts = useEthereumTokenContracts(tokensAddresses); + + const callbacks = []; + + contracts.forEach(contract => { + callbacks.push( + useCallback( + async () => + contract ? await getTokenBalance(account, contract, true) : await getEthBalance(account), + [tokensAddresses, account] + ) + ); + }); + + return callbacks; +}; + +export const useStarknetTokensBalances = (tokensAddresses, account) => { + const contracts = useStarknetTokenContracts(tokensAddresses); + + const callbacks = []; + + contracts.forEach(contract => { + callbacks.push( + useCallback( + async () => await getTokenBalance(account, contract, false), + [tokensAddresses, account] + ) + ); + }); + + return callbacks; +}; diff --git a/src/providers/TokensProvider/TokensProvider.js b/src/providers/TokensProvider/TokensProvider.js index 272c133c..3e189cdd 100644 --- a/src/providers/TokensProvider/TokensProvider.js +++ b/src/providers/TokensProvider/TokensProvider.js @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import React, {useEffect, useReducer} from 'react'; import {useEthereumTokensBalances, useStarknetTokensBalances} from '../../hooks/useTokenBalance'; @@ -19,51 +20,43 @@ export const TokensProvider = ({children}) => { ); useEffect(() => { - fetchEthereumTokensBalances(); - fetchStarknetTokensBalances(); + fetchEthereumBalances(); + fetchStarknetBalances(); }, []); - const fetchEthereumTokensBalances = () => { - for (let index = 0; index < state.ethereumTokens.length; index++) { - const getBalance = getEthereumBalances[index]; - updateEthereumTokenState(index, {isLoading: true}); - getBalance() - .then(balance => { - updateEthereumTokenState(index, {balance, isLoading: false}); - }) - .catch(() => { - updateEthereumTokenState(index, {balance: null, isLoading: false}); - }); - } + const fetchEthereumBalances = () => { + fetchTokensBalances(state.ethereumTokens, getEthereumBalances, updateEthereumTokenState); + }; + + const fetchStarknetBalances = () => { + fetchTokensBalances(state.starknetTokens, getStarknetBalances, updateStarknetTokenState); }; - const fetchStarknetTokensBalances = () => { - for (let index = 0; index < state.starknetTokens.length; index++) { - const getBalance = getStarknetBalances[index]; - updateStarknetTokenState(index, {isLoading: true}); + const fetchTokensBalances = (tokens, getBalances, updateState) => { + for (let index = 0; index < tokens.length; index++) { + const getBalance = getBalances[index]; + updateState(index, {isLoading: true}); getBalance() .then(balance => { - updateStarknetTokenState(index, {balance, isLoading: false}); + updateState(index, {balance, isLoading: false}); }) .catch(() => { - updateStarknetTokenState(index, {balance: null, isLoading: false}); + updateState(index, {balance: null, isLoading: false}); }); } }; const updateEthereumTokenState = (index, args) => { - dispatch({ - type: actions.UPDATE_ETHEREUM_TOKEN_STATE, - payload: { - index, - args - } - }); + updateTokenState(actions.UPDATE_ETHEREUM_TOKEN_STATE, index, args); }; const updateStarknetTokenState = (index, args) => { + updateTokenState(actions.UPDATE_STARKNET_TOKEN_STATE, index, args); + }; + + const updateTokenState = (type, index, args) => { dispatch({ - type: actions.UPDATE_STARKNET_TOKEN_STATE, + type, payload: { index, args @@ -72,8 +65,14 @@ export const TokensProvider = ({children}) => { }; const context = { - ...state + ...state, + fetchEthereumBalances, + fetchStarknetBalances }; return <TokensContext.Provider value={context}>{children}</TokensContext.Provider>; }; + +TokensProvider.propTypes = { + children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) +}; diff --git a/src/providers/TokensProvider/context.js b/src/providers/TokensProvider/context.js index 06c9b667..642d8015 100644 --- a/src/providers/TokensProvider/context.js +++ b/src/providers/TokensProvider/context.js @@ -3,5 +3,7 @@ import {createContext} from 'react'; import {initialState} from './reducer'; export const TokensContext = createContext({ - ...initialState + ...initialState, + fetchEthereumBalances: () => {}, + fetchStarknetBalances: () => {} }); diff --git a/src/providers/WalletsProvider/WalletsProvider.js b/src/providers/WalletsProvider/WalletsProvider.js index b2bc73df..cb961275 100644 --- a/src/providers/WalletsProvider/WalletsProvider.js +++ b/src/providers/WalletsProvider/WalletsProvider.js @@ -20,12 +20,12 @@ export const WalletsProvider = ({children}) => { const [isStarknet, setStarknet] = useIsStarknet(); // Handles starknet wallet changes - useEffect(async () => { - (isStarknet || state.starknetWallet.config) && (await maybeUpdateStarknetWallet()); + useEffect(() => { + (isStarknet || state.starknetWallet.config) && maybeUpdateStarknetWallet(); }, [selectedAddress, isStarknetConnected]); // Handles ethereum wallet changes - useEffect(async () => { + useEffect(() => { (isEthereum || state.ethereumWallet.config) && maybeUpdateEthereumWallet(); }, [status, error, account, chainId, networkName]); diff --git a/src/utils/wallet.js b/src/utils/wallet.js index 66d024c2..88f8b9ae 100644 --- a/src/utils/wallet.js +++ b/src/utils/wallet.js @@ -1,4 +1,5 @@ -export const formatBalance = balance => parseFloat(balance.toFixed(5)); +export const formatBalance = balance => + typeof balance === 'number' ? parseFloat(balance.toFixed(5)) : 'N/A'; export const shortenAddress = account => { if (account) { From 31a3cc5a64e55c0c0c8b5f43b5983ba48ae0b67b Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Fri, 17 Dec 2021 22:28:28 +0200 Subject: [PATCH 017/211] feat: transfer from starknet (wip) [skip ci] --- .eslintrc.json | 2 +- package.json | 2 +- src/api/bridge.js | 49 ++++++-- src/api/erc20.js | 39 +++++-- .../SelectToken/SelectToken/SelectToken.js | 2 +- .../EthereumNetwork/EthereumNetwork.js | 14 +-- .../Transfer/NetworkMenu/NetworkMenu.js | 2 +- .../StarknetNetwork/StarknetNetwork.js | 44 +++++-- .../Transfer/Transfer/Transfer.hooks.js | 10 +- .../Features/Transfer/Transfer/Transfer.js | 31 +++-- .../Transfer/Transfer/Transfer.slice.js | 8 +- .../UI/Modal/ModalBody/ModalBody.module.scss | 2 + src/hooks/useTokenBalance.js | 9 -- src/hooks/useTransferFromStarknet.js | 110 ++++++++++++++++++ src/providers/TokensProvider/hooks.js | 28 ++--- src/providers/TokensProvider/reducer.js | 7 +- src/utils/contract.js | 25 +++- src/utils/index.js | 1 + src/utils/network.js | 0 src/utils/number.js | 38 ++++++ src/utils/token.js | 10 +- yarn.lock | 14 ++- 22 files changed, 356 insertions(+), 91 deletions(-) create mode 100644 src/hooks/useTransferFromStarknet.js delete mode 100644 src/utils/network.js create mode 100644 src/utils/number.js diff --git a/.eslintrc.json b/.eslintrc.json index 90eace79..409adc86 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -41,7 +41,7 @@ } ], "prefer-destructuring": [ - "error", + "warn", { "object": true, "array": false diff --git a/package.json b/package.json index ee0108f9..4ef659c7 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "react-dom": "^17.0.2", "react-redux": "^7.2.6", "react-scripts": "4.0.3", - "starknet": "^2.3.1", + "starknet": "^2.5.0", "use-wallet": "^0.13.1", "web3": "^1.6.0" }, diff --git a/src/api/bridge.js b/src/api/bridge.js index 75806a8e..7c0ce386 100644 --- a/src/api/bridge.js +++ b/src/api/bridge.js @@ -1,24 +1,49 @@ -import {sendTransaction} from '../utils/contract'; -import {web3} from '../web3'; +import {toFelt, toUint256, toWei} from '../utils'; +import {invokeStarknetTransaction, sendTransaction} from '../utils/contract'; +import {decimals} from './erc20'; -export const depositToken = async (l2Recipient, amount, bridgeContract, from) => { +export const depositToken = async (recipient, amount, tokenBridgeContract, from) => { try { - return await sendTransaction( - bridgeContract, - 'deposit', - [web3.utils.toWei(amount, 'ether'), l2Recipient], - {from} - ); + return await sendTransaction(tokenBridgeContract, 'deposit', [toWei(amount), recipient], { + from + }); } catch (ex) { return Promise.reject(ex); } }; -export const depositEth = async (l2Recipient, value, ethBridgeContract, from) => { +export const depositEth = async (recipient, amount, ethBridgeContract, from) => { try { - return await sendTransaction(ethBridgeContract, 'deposit', [l2Recipient], { + return await sendTransaction(ethBridgeContract, 'deposit', [recipient], { from, - value: web3.utils.toWei(value, 'ether') + value: toWei(amount) + }); + } catch (ex) { + return Promise.reject(ex); + } +}; + +export const initiateWithdrawToken = async ( + recipient, + amount, + tokenBridgeContract, + tokenContract +) => { + try { + const tokenDecimals = await decimals(tokenContract, false); + return await invokeStarknetTransaction(tokenBridgeContract, 'initiate_withdraw', { + l1Recipient: toFelt(recipient), + amount: toUint256(amount, tokenDecimals) + }); + } catch (ex) { + return Promise.reject(ex); + } +}; + +export const withdrawToken = async (recipient, amount, tokenBridgeContract) => { + try { + return await sendTransaction(tokenBridgeContract, 'withdraw', [toWei(amount), recipient], { + from: recipient }); } catch (ex) { return Promise.reject(ex); diff --git a/src/api/erc20.js b/src/api/erc20.js index a20b1370..81f381ee 100644 --- a/src/api/erc20.js +++ b/src/api/erc20.js @@ -1,12 +1,22 @@ -import {number, uint256} from 'starknet'; - -import {callContract, callStarknetContract, sendTransaction} from '../utils/contract'; +import {fromFelt, fromUint256, fromWei, toFelt, toUint256} from '../utils'; +import { + callContract, + callStarknetContract, + invokeStarknetTransaction, + sendTransaction +} from '../utils/contract'; import {web3} from '../web3'; export const approve = async (spender, value, contract, from, isEthereum = true) => { try { if (isEthereum) { return await sendTransaction(contract, 'approve', [spender, web3.utils.toWei(value)], {from}); + } else { + const tokenDecimals = await decimals(contract, false); + return await invokeStarknetTransaction(contract, 'approve', { + spender: toFelt(spender), + amount: toUint256(value, tokenDecimals) + }); } } catch (ex) { return Promise.reject(ex); @@ -17,13 +27,11 @@ export const getTokenBalance = async (account, contract, isEthereum = true) => { try { if (isEthereum) { const balance = await callContract(contract, 'balanceOf', [account]); - return Number(web3.utils.fromWei(balance)); + return fromWei(balance); } else { const {balance} = await callStarknetContract(contract, 'balanceOf', [{account}]); - const {decimals} = await callStarknetContract(contract, 'decimals'); - const decimalsNumber = number.toBN(decimals).toNumber(); - const bnString = uint256.uint256ToBN(balance).toString(); - return bnString / Math.pow(10, decimalsNumber); + const tokenDecimals = await decimals(contract, false); + return fromUint256(balance, tokenDecimals); } } catch (ex) { return Promise.reject(ex); @@ -33,7 +41,20 @@ export const getTokenBalance = async (account, contract, isEthereum = true) => { export const getEthBalance = async account => { try { const balance = await web3.eth.getBalance(account); - return Number(web3.utils.fromWei(balance)); + return fromWei(balance); + } catch (ex) { + return Promise.reject(ex); + } +}; + +export const decimals = async (contract, isEthereum = true) => { + try { + if (isEthereum) { + // TODO: call ethereum contract decimals + } else { + const {decimals} = await callStarknetContract(contract, 'decimals'); + return fromFelt(decimals); + } } catch (ex) { return Promise.reject(ex); } diff --git a/src/components/Features/SelectToken/SelectToken/SelectToken.js b/src/components/Features/SelectToken/SelectToken/SelectToken.js index 60403fb9..ecda5008 100644 --- a/src/components/Features/SelectToken/SelectToken/SelectToken.js +++ b/src/components/Features/SelectToken/SelectToken/SelectToken.js @@ -13,7 +13,7 @@ import styles from './SelectToken.module.scss'; import {TITLE_TXT} from './SelectToken.strings'; export const SelectToken = () => { - const {tokens} = useTokens(); + const tokens = useTokens(); const {colorBeta} = useColors(); const {showTransferMenu} = useBridgeActions(); const {isEthereum, fromNetwork} = useTransferData(); diff --git a/src/components/Features/Transfer/EthereumNetwork/EthereumNetwork.js b/src/components/Features/Transfer/EthereumNetwork/EthereumNetwork.js index a6574884..02cf0ef6 100644 --- a/src/components/Features/Transfer/EthereumNetwork/EthereumNetwork.js +++ b/src/components/Features/Transfer/EthereumNetwork/EthereumNetwork.js @@ -1,8 +1,8 @@ -import React, {useEffect, useState} from 'react'; +import React, {useEffect} from 'react'; import {NetworkType} from '../../../../enums'; import {useTransferToStarknet} from '../../../../hooks'; -import {useTokens} from '../../../../providers/TokensProvider/hooks'; +import {useEthereumToken} from '../../../../providers/TokensProvider/hooks'; import {isEth} from '../../../../utils'; import { useHideModal, @@ -14,17 +14,13 @@ import {NetworkMenu} from '../index'; import {TRANSFER_TO_STARKNET_MODAL_TITLE} from './EthereumNetwork.strings'; export const EthereumNetwork = () => { - const {isEthereum, selectedEthereumToken} = useTransferData(); - const {ethereumTokens} = useTokens(); - const [tokenData, setTokenData] = useState(selectedEthereumToken || ethereumTokens[0]); const [amount, , clearAmount] = useAmount(); + const {isEthereum, selectedToken} = useTransferData(); const hideModal = useHideModal(); const showProgressModal = useProgressModal(); const showTransactionSubmittedModal = useTransactionSubmittedModal(); - - useEffect(() => { - setTokenData(selectedEthereumToken || ethereumTokens[0]); - }, [ethereumTokens]); + const getEthereumToken = useEthereumToken(); + const tokenData = getEthereumToken(selectedToken.symbol); const {transferEthToStarknet, transferTokenToStarknet, data, error, isLoading, progress} = useTransferToStarknet(tokenData); diff --git a/src/components/Features/Transfer/NetworkMenu/NetworkMenu.js b/src/components/Features/Transfer/NetworkMenu/NetworkMenu.js index d6f6c23e..45aa646c 100644 --- a/src/components/Features/Transfer/NetworkMenu/NetworkMenu.js +++ b/src/components/Features/Transfer/NetworkMenu/NetworkMenu.js @@ -58,7 +58,7 @@ const TransferContainer = ({tokenData, isTransferring, onTransferClick}) => { useEffect(() => { setHasInputError(false); - if (Math.ceil(amount) === 0) { + if (tokenData.isLoading || Math.ceil(amount) === 0) { setIsButtonDisabled(true); } else { if (amount > balance) { diff --git a/src/components/Features/Transfer/StarknetNetwork/StarknetNetwork.js b/src/components/Features/Transfer/StarknetNetwork/StarknetNetwork.js index 62f7d4cc..249cabf8 100644 --- a/src/components/Features/Transfer/StarknetNetwork/StarknetNetwork.js +++ b/src/components/Features/Transfer/StarknetNetwork/StarknetNetwork.js @@ -1,26 +1,50 @@ -import React, {useEffect, useState} from 'react'; +import React, {useEffect} from 'react'; import {NetworkType} from '../../../../enums'; -import {useTokens} from '../../../../providers/TokensProvider/hooks'; -import {useTransferData} from '../Transfer/Transfer.hooks'; +import {useTransferFromStarknet} from '../../../../hooks/useTransferFromStarknet'; +import {useStarknetToken} from '../../../../providers/TokensProvider/hooks'; +import { + useHideModal, + useProgressModal, + useTransactionSubmittedModal +} from '../../ModalProvider/ModalProvider.hooks'; +import {useAmount, useTransferData} from '../Transfer/Transfer.hooks'; import {NetworkMenu} from '../index'; export const StarknetNetwork = () => { - const {isStarknet, selectedStarknetToken} = useTransferData(); - const {starknetTokens} = useTokens(); - const [tokenData, setTokenData] = useState(selectedStarknetToken || starknetTokens[0]); + const [amount, , clearAmount] = useAmount(); + const {isStarknet, selectedToken} = useTransferData(); + const hideModal = useHideModal(); + const showProgressModal = useProgressModal(); + const showTransactionSubmittedModal = useTransactionSubmittedModal(); + const getStarknetToken = useStarknetToken(); + const tokenData = getStarknetToken(selectedToken.symbol); + + const {transferFromStarknet, data, error, isLoading, progress} = + useTransferFromStarknet(tokenData); useEffect(() => { - setTokenData(selectedStarknetToken || starknetTokens[0]); - }, [starknetTokens]); + if (isLoading) { + progress && showProgressModal(progress.type, progress.message); + } else if (error) { + // TODO: show error modal + hideModal(); + } else if (data) { + const [receipt] = data; + clearAmount(); + showTransactionSubmittedModal(receipt.transaction_hash); + } + }, [progress, data, error, isLoading, amount]); + + const onTransferClick = async () => transferFromStarknet(amount); return ( <NetworkMenu isTarget={!isStarknet} - isTransferring={false} + isTransferring={isLoading} networkData={NetworkType.STARKNET} tokenData={tokenData} - onTransferClick={() => {}} + onTransferClick={onTransferClick} /> ); }; diff --git a/src/components/Features/Transfer/Transfer/Transfer.hooks.js b/src/components/Features/Transfer/Transfer/Transfer.hooks.js index 643fac60..b163ef15 100644 --- a/src/components/Features/Transfer/Transfer/Transfer.hooks.js +++ b/src/components/Features/Transfer/Transfer/Transfer.hooks.js @@ -2,6 +2,7 @@ import {useCallback} from 'react'; import {useDispatch, useSelector} from 'react-redux'; import {ActionType} from '../../../../enums'; +import {useEthereumToken, useStarknetToken} from '../../../../providers/TokensProvider/hooks'; import { fromNetworkSelector, fromStarknetSelector, @@ -67,9 +68,16 @@ const useSetActionType = action => { const useSelectToken = () => { const dispatch = useDispatch(); + const setStarknetToken = useStarknetToken(); + const getEthereumToken = useEthereumToken(); return useCallback( token => { - dispatch(selectTokenAction(token)); + dispatch( + selectTokenAction({ + selectedStarknetToken: setStarknetToken(token.symbol), + selectedEthereumToken: getEthereumToken(token.symbol) + }) + ); }, [dispatch] ); diff --git a/src/components/Features/Transfer/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer/Transfer.js index 520ba174..83a41984 100644 --- a/src/components/Features/Transfer/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer/Transfer.js @@ -1,18 +1,26 @@ -import React from 'react'; +import React, {useEffect} from 'react'; import {ActionType, NetworkType} from '../../../../enums'; -import {Menu} from '../../../UI'; +import {useTokens} from '../../../../providers/TokensProvider/hooks'; +import {Loading, Menu} from '../../../UI'; +import {LoadingSize} from '../../../UI/Loading/Loading.enums'; import {EthereumNetwork} from '../EthereumNetwork/EthereumNetwork'; import {NetworkSwap} from '../NetworkSwap/NetworkSwap'; import {StarknetNetwork} from '../StarknetNetwork/StarknetNetwork'; import {TransferMenuTab} from '../TransferMenuTab/TransferMenuTab'; -import {useIsEthereum, useIsStarknet, useTransferData} from './Transfer.hooks'; +import {useIsEthereum, useIsStarknet, useTransferActions, useTransferData} from './Transfer.hooks'; import styles from './Transfer.module.scss'; export const Transfer = () => { const [isEthereum, setEthereum] = useIsEthereum(); const [isStarknet, setStarknet] = useIsStarknet(); - const {action} = useTransferData(); + const {selectedToken, action} = useTransferData(); + const {selectToken} = useTransferActions(); + const tokens = useTokens(); + + useEffect(() => { + !selectedToken && selectToken(tokens[0]); + }, []); const renderTabs = () => { return Object.values(ActionType).map((tab, index) => { @@ -43,9 +51,18 @@ export const Transfer = () => { <Menu> <div className={styles.transfer}> <div className={styles.tabsContainer}>{renderTabs()}</div> - {isEthereum ? renderEthereumNetwork() : renderStarknetNetwork()} - <NetworkSwap isFlipped={isStarknet} onClick={onSwapClick} /> - {isEthereum ? renderStarknetNetwork() : renderEthereumNetwork()} + {!selectedToken && ( + <center> + <Loading size={LoadingSize.EXTRA_LARGE} /> + </center> + )} + {selectedToken && ( + <> + {isEthereum ? renderEthereumNetwork() : renderStarknetNetwork()} + <NetworkSwap isFlipped={isStarknet} onClick={onSwapClick} /> + {isEthereum ? renderStarknetNetwork() : renderEthereumNetwork()} + </> + )} </div> </Menu> ); diff --git a/src/components/Features/Transfer/Transfer/Transfer.slice.js b/src/components/Features/Transfer/Transfer/Transfer.slice.js index 065402bf..68eb18a0 100644 --- a/src/components/Features/Transfer/Transfer/Transfer.slice.js +++ b/src/components/Features/Transfer/Transfer/Transfer.slice.js @@ -18,11 +18,9 @@ const transferSlice = createSlice({ state.action = action.payload; }, selectTokenAction(state, action) { - if (state.action === ActionType.TRANSFER_TO_STARKNET) { - state.selectedEthereumToken = action.payload; - } else { - state.selectedStarknetToken = action.payload; - } + const {selectedStarknetToken, selectedEthereumToken} = action.payload; + state.selectedEthereumToken = selectedEthereumToken; + state.selectedStarknetToken = selectedStarknetToken; }, setAmountAction(state, action) { if (state.action === ActionType.TRANSFER_TO_STARKNET) { diff --git a/src/components/UI/Modal/ModalBody/ModalBody.module.scss b/src/components/UI/Modal/ModalBody/ModalBody.module.scss index 280014a8..a6b91abc 100644 --- a/src/components/UI/Modal/ModalBody/ModalBody.module.scss +++ b/src/components/UI/Modal/ModalBody/ModalBody.module.scss @@ -10,6 +10,8 @@ $error-color: $--color-error; letter-spacing: 0.01em; color: $color; white-space: break-spaces; + overflow: hidden; + text-overflow: ellipsis; &.error { color: $error-color; diff --git a/src/hooks/useTokenBalance.js b/src/hooks/useTokenBalance.js index f9d845bb..6f5bcff3 100644 --- a/src/hooks/useTokenBalance.js +++ b/src/hooks/useTokenBalance.js @@ -13,7 +13,6 @@ export const useTokenBalance = (tokenAddresses, account) => { const getStarknetBalanceCallback = useStarknetTokenBalance(tokenAddresses, account); const getEthereumBalanceCallback = useEthereumTokenBalance(tokenAddresses, account); const {isEthereum} = useTransferData(); - return useCallback( () => (isEthereum ? getEthereumBalanceCallback() : getStarknetBalanceCallback()), [isEthereum, tokenAddresses, account] @@ -22,7 +21,6 @@ export const useTokenBalance = (tokenAddresses, account) => { export const useStarknetTokenBalance = (tokenAddresses, account) => { const contract = useStarknetTokenContract(tokenAddresses); - return useCallback( async () => await getTokenBalance(account, contract, false), [tokenAddresses, account] @@ -31,7 +29,6 @@ export const useStarknetTokenBalance = (tokenAddresses, account) => { export const useEthereumTokenBalance = (tokenAddresses, account) => { const contract = useEthereumTokenContract(tokenAddresses); - return useCallback( async () => tokenAddresses @@ -43,9 +40,7 @@ export const useEthereumTokenBalance = (tokenAddresses, account) => { export const useEthereumTokensBalances = (tokensAddresses, account) => { const contracts = useEthereumTokenContracts(tokensAddresses); - const callbacks = []; - contracts.forEach(contract => { callbacks.push( useCallback( @@ -55,15 +50,12 @@ export const useEthereumTokensBalances = (tokensAddresses, account) => { ) ); }); - return callbacks; }; export const useStarknetTokensBalances = (tokensAddresses, account) => { const contracts = useStarknetTokenContracts(tokensAddresses); - const callbacks = []; - contracts.forEach(contract => { callbacks.push( useCallback( @@ -72,6 +64,5 @@ export const useStarknetTokensBalances = (tokensAddresses, account) => { ) ); }); - return callbacks; }; diff --git a/src/hooks/useTransferFromStarknet.js b/src/hooks/useTransferFromStarknet.js new file mode 100644 index 00000000..a8ed82d9 --- /dev/null +++ b/src/hooks/useTransferFromStarknet.js @@ -0,0 +1,110 @@ +import {useState} from 'react'; + +import {initiateWithdrawToken, withdrawToken} from '../api/bridge'; +import {useEthereumToken} from '../providers/TokensProvider/hooks'; +import {useEthereumWallet, useWallets} from '../providers/WalletsProvider/hooks'; +import {listenOnce, waitForStarknetTransaction} from '../utils/contract'; +import { + useEthereumTokenBridgeContract, + useMessagingContract, + useTokenBridgeContract, + useTokenContract +} from './useContract'; + +const PROGRESS = { + initiateWithdraw: (amount, symbol, sender) => ({ + type: 'Withdrawing from L2', + message: `Initiating withdraw of ${amount} ${symbol} from ${sender}` + }), + waitForAccept: () => ({ + type: 'Transaction received', + message: `Waiting for transaction to be accepted on L2` + }), + waitForEvent: () => ({ + type: 'Accepted on L2', + message: 'Waiting for message to be received on L1' + }), + withdraw: (amount, symbol, recipient) => ({ + type: 'Withdrawing from bridge contract', + message: `Withdrawing ${amount} ${symbol} to ${recipient}` + }) +}; + +export const useTransferFromStarknet = tokenData => { + const {tokenAddress, bridgeAddress, symbol} = tokenData; + const [isLoading, setIsLoading] = useState(false); + const [data, setData] = useState(null); + const [progress, setProgress] = useState(null); + const [error, setError] = useState(null); + const {account: starknetAccount} = useWallets(); + const {account: ethereumAccount} = useEthereumWallet(); + const tokenContract = useTokenContract(tokenAddress); + const ethereumToken = useEthereumToken(symbol); + const starknetTokenBridgeContract = useTokenBridgeContract(bridgeAddress); + const ethereumTokenBridgeContract = useEthereumTokenBridgeContract(ethereumToken.bridgeAddress); + const messagingContract = useMessagingContract(); + + const waitForLogMessageToL1 = () => { + return new Promise((resolve, reject) => { + listenOnce(messagingContract, 'LogMessageToL1', (error, event) => { + if (error) { + reject(error); + } + resolve(event); + }); + }); + }; + + const transferFromStarknet = async amount => { + setError(null); + setData(null); + setProgress(null); + setIsLoading(false); + try { + setIsLoading(true); + + setProgress(PROGRESS.initiateWithdraw(amount, symbol, starknetAccount)); + const initiateWithdrawTxResponse = await initiateWithdrawToken( + ethereumAccount, + amount, + starknetTokenBridgeContract, + tokenContract + ); + + const waitForAcceptPromise = waitForStarknetTransaction( + initiateWithdrawTxResponse.transaction_hash + ); + + const waitForMsgPromise = waitForLogMessageToL1(); + + setProgress(PROGRESS.waitForAccept()); + await waitForAcceptPromise; + + setProgress(PROGRESS.waitForEvent()); + await waitForMsgPromise; + + setProgress(PROGRESS.withdraw(amount, symbol, ethereumAccount)); + const withdrawReceipt = await withdrawToken( + ethereumAccount, + amount, + ethereumTokenBridgeContract, + tokenContract + ); + setIsLoading(false); + setProgress(null); + setData([{}, withdrawReceipt]); + } catch (ex) { + setIsLoading(false); + setProgress(null); + setError(ex); + } + }; + + return { + isLoading, + progress, + error, + data, + transferFromStarknet + }; +}; diff --git a/src/providers/TokensProvider/hooks.js b/src/providers/TokensProvider/hooks.js index a1d1bc75..09dc6285 100644 --- a/src/providers/TokensProvider/hooks.js +++ b/src/providers/TokensProvider/hooks.js @@ -1,4 +1,4 @@ -import {useContext, useEffect, useMemo, useState} from 'react'; +import {useCallback, useContext, useEffect, useMemo, useState} from 'react'; import {useTransferData} from '../../components/Features/Transfer/Transfer/Transfer.hooks'; import {TokensContext} from './context'; @@ -7,34 +7,34 @@ export const useTokens = () => { const {isEthereum} = useTransferData(); const {starknetTokens, ethereumTokens} = useContext(TokensContext); const [tokens, setTokens] = useState(isEthereum ? ethereumTokens : starknetTokens); - useEffect(() => { setTokens(isEthereum ? ethereumTokens : starknetTokens); }, [isEthereum, starknetTokens, ethereumTokens]); - - return {tokens, starknetTokens, ethereumTokens}; + return tokens; }; export const useStarknetTokens = () => { const {starknetTokens} = useContext(TokensContext); - - return starknetTokens; + return useMemo(() => starknetTokens, [starknetTokens]); }; export const useEthereumTokens = () => { const {ethereumTokens} = useContext(TokensContext); - - return ethereumTokens; + return useMemo(() => ethereumTokens, [ethereumTokens]); }; -export const useStarknetToken = symbol => { +export const useStarknetToken = () => { const starknetTokens = useStarknetTokens(); - - return useMemo(() => starknetTokens.find(token => token.symbol === symbol), [symbol]); + return useCallback( + symbol => starknetTokens.find(token => token.symbol === symbol), + [starknetTokens] + ); }; -export const useEthereumToken = symbol => { +export const useEthereumToken = () => { const ethereumTokens = useEthereumTokens(); - - return useMemo(() => ethereumTokens.find(token => token.symbol === symbol), [symbol]); + return useCallback( + symbol => ethereumTokens.find(token => token.symbol === symbol), + [ethereumTokens] + ); }; diff --git a/src/providers/TokensProvider/reducer.js b/src/providers/TokensProvider/reducer.js index 3cee011e..8db82526 100644 --- a/src/providers/TokensProvider/reducer.js +++ b/src/providers/TokensProvider/reducer.js @@ -1,4 +1,4 @@ -import {EthereumTokens, StarknetTokens} from '../../config/addresses'; +import {ETH_BRIDGE_CONTRACT_ADDRESS, EthereumTokens, StarknetTokens} from '../../config/addresses'; import {NetworkType} from '../../enums'; export const actions = { @@ -15,7 +15,10 @@ function getUpdatedTokens(tokens, payload) { } export const initialState = { - ethereumTokens: [NetworkType.ETHEREUM, ...EthereumTokens], + ethereumTokens: [ + {...NetworkType.ETHEREUM, bridgeAddress: ETH_BRIDGE_CONTRACT_ADDRESS}, + ...EthereumTokens + ], starknetTokens: StarknetTokens }; diff --git a/src/utils/contract.js b/src/utils/contract.js index 1636149b..afbe44ce 100644 --- a/src/utils/contract.js +++ b/src/utils/contract.js @@ -1,5 +1,5 @@ import {getStarknet} from '@argent/get-starknet'; -import {Contract} from 'starknet'; +import {compileCalldata, Contract, stark} from 'starknet'; import {web3} from '../web3'; @@ -9,7 +9,7 @@ export const callContract = async (contract, method, args = []) => { try { return await contract.methods?.[method](...args).call(); } catch (ex) { - return ex; + return Promise.reject(ex); } }; @@ -17,7 +17,7 @@ export const sendTransaction = async (contract, method, args = [], options = {}) try { return contract.methods?.[method](...args).send(options); } catch (ex) { - return ex; + return Promise.reject(ex); } }; @@ -40,6 +40,23 @@ export const callStarknetContract = async (contract, method, args = []) => { try { return await contract.call(method, ...args); } catch (ex) { - return ex; + return Promise.reject(ex); } }; + +export const invokeStarknetTransaction = async (contract, method, args = {}) => { + try { + const methodSelector = stark.getSelectorFromName(method); + const compiledCalldata = compileCalldata(args); + return await getStarknet().signer.invokeFunction( + contract.connectedTo, + methodSelector, + compiledCalldata + ); + } catch (ex) { + return Promise.reject(ex); + } +}; + +export const waitForStarknetTransaction = async hash => + await getStarknet().provider.waitForTx(hash); diff --git a/src/utils/index.js b/src/utils/index.js index 1bde144b..56b56d6b 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -4,6 +4,7 @@ export * from './wallet'; export * from './browser'; export * from './string'; export * from './token'; +export * from './number'; export const printPackageInfo = (name, version, color) => { const currentLogLevel = getLogLevel(); diff --git a/src/utils/network.js b/src/utils/network.js deleted file mode 100644 index e69de29b..00000000 diff --git a/src/utils/number.js b/src/utils/number.js new file mode 100644 index 00000000..1471df54 --- /dev/null +++ b/src/utils/number.js @@ -0,0 +1,38 @@ +import {number, uint256} from 'starknet'; + +import {web3} from '../web3'; + +const {uint256ToBN, bnToUint256} = uint256; +const {toBN} = number; + +const TEN_BASE = 10; +const DEFAULT_DECIMALS = 18; + +export const powerOf = decimals => Math.pow(TEN_BASE, decimals); + +export const fromFelt = value => toBN(value).toNumber(); + +export const toFelt = value => toBN(value).toString(); + +export const toUint256 = (value, decimals) => { + const decimalsString = String(toDecimals(value, decimals)); + const bn = number.toBN(decimalsString); + const uint256 = bnToUint256(bn); + return { + type: 'struct', + ...uint256 + }; +}; + +export const fromUint256 = (value, decimals) => { + const bnString = uint256ToBN(value).toString(); + return fromDecimals(bnString, decimals); +}; + +export const toWei = value => web3.utils.toWei(value, 'ether'); + +export const fromWei = value => Number(web3.utils.fromWei(value)); + +export const toDecimals = (value, decimals = DEFAULT_DECIMALS) => value * powerOf(decimals); + +export const fromDecimals = (value, decimals = DEFAULT_DECIMALS) => value / powerOf(decimals); diff --git a/src/utils/token.js b/src/utils/token.js index 3a2914ec..9e621e8d 100644 --- a/src/utils/token.js +++ b/src/utils/token.js @@ -1,3 +1,11 @@ import {NetworkType} from '../enums'; -export const isEth = tokenData => tokenData.symbol === NetworkType.ETHEREUM.symbol; +export const isEth = tokenData => { + let symbol = ''; + if (typeof tokenData === 'object') { + symbol = tokenData.symbol; + } else if (typeof tokenData === 'string') { + symbol = tokenData; + } + return symbol === NetworkType.ETHEREUM.symbol; +}; diff --git a/yarn.lock b/yarn.lock index 5417dee1..aab02aca 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15224,10 +15224,10 @@ standard-version@^9.3.1: stringify-package "^1.0.1" yargs "^16.0.0" -starknet@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/starknet/-/starknet-2.3.1.tgz#6c4ff1d74b2f20f8372fbb616587687756debd30" - integrity sha512-A5/POnt1s5gocVTx4NdrJDekhguLLvLQtgALV2w6sVNiCN8/yT2OIcUHjg1F82FB+vfE8usf2X8ccGyMwQteHw== +starknet@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/starknet/-/starknet-2.5.0.tgz#451e0519567419823214ac967b98c66630b97139" + integrity sha512-vW07z9JcHQVxk6US2nh1A+Z2ZBWlWviy32KTBm7MUzNewT8lgRRrIK9pPH6yWxpAPaRlD/u+7C0Vjp1Nbowtjg== dependencies: axios "^0.23.0" bn.js "^5.2.0" @@ -15237,6 +15237,7 @@ starknet@^2.3.1: json-bigint "^1.0.0" minimalistic-assert "^1.0.1" pako "^2.0.4" + superstruct "^0.15.3" url-join "^4.0.1" static-extend@^0.1.1: @@ -15531,6 +15532,11 @@ stylehacks@^4.0.0: postcss "^7.0.0" postcss-selector-parser "^3.0.0" +superstruct@^0.15.3: + version "0.15.3" + resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.15.3.tgz#07edfc715259ebfe3b4b2e4cb53e8e45b51674a4" + integrity sha512-wilec1Rg3FtKuRjRyCt70g5W29YUEuaLnybdVQUI+VQ7m0bw8k7TzrRv5iYmo6IpjLVrwxP5t3RgjAVqhYh4Fg== + supports-color@8.1.1, supports-color@^8.0.0: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" From f9df5d306bfc219148f689a676d6a4c13b3e917e Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Fri, 17 Dec 2021 23:22:25 +0200 Subject: [PATCH 018/211] refactor: hooks [skip ci] --- src/hooks/useAnimation.js | 2 - src/hooks/useColors.js | 4 +- src/hooks/useContract.js | 37 ++--- src/hooks/useFetchData.js | 3 - src/hooks/useIsLoading.js | 2 - src/hooks/useLogger.js | 4 +- src/hooks/usePrevious.js | 2 - src/hooks/useTokenBalance.js | 34 ++-- src/hooks/useTransfer.js | 221 ++++++++++++++++++++++++++ src/hooks/useTransferFromStarknet.js | 3 +- src/hooks/useVars.js | 4 +- src/hooks/useWalletHandlerProvider.js | 16 +- src/hooks/useWindowSize.js | 1 - 13 files changed, 262 insertions(+), 71 deletions(-) create mode 100644 src/hooks/useTransfer.js diff --git a/src/hooks/useAnimation.js b/src/hooks/useAnimation.js index 1519ade2..337e3ab3 100644 --- a/src/hooks/useAnimation.js +++ b/src/hooks/useAnimation.js @@ -3,7 +3,6 @@ import {useState} from 'react'; export const useAnimation = interval => { const [isAnimate, setIsAnimate] = useState(false); const [timeoutId, setTimeoutId] = useState(null); - const startAnimation = () => { if (typeof timeoutId === 'number') { clearTimeout(timeoutId); @@ -11,6 +10,5 @@ export const useAnimation = interval => { setIsAnimate(true); setTimeoutId(setTimeout(() => setIsAnimate(false), interval)); }; - return [isAnimate, startAnimation]; }; diff --git a/src/hooks/useColors.js b/src/hooks/useColors.js index 1d00d1bf..71a34d85 100644 --- a/src/hooks/useColors.js +++ b/src/hooks/useColors.js @@ -1,3 +1,5 @@ +import {useMemo} from 'react'; + import colors from '../styles/colors.module.scss'; -export const useColors = () => colors; +export const useColors = () => useMemo(() => colors, []); diff --git a/src/hooks/useContract.js b/src/hooks/useContract.js index 5c63ff6e..c668bb1a 100644 --- a/src/hooks/useContract.js +++ b/src/hooks/useContract.js @@ -9,53 +9,39 @@ import {getContract, getStarknetContract} from '../utils/contract'; export const useContracts = (tokensAddresses, ABI, getContractHandler = getContract) => { const {chainId} = useWallets(); - return useMemo(() => { - const contracts = []; - if (!tokensAddresses || !ABI || !chainId) return null; - tokensAddresses.forEach(tokenAddress => { - let contract; - if (tokenAddress) { - const address = tokenAddress[chainId]; + return tokensAddresses.map(tokenAddresses => { + if (tokenAddresses) { try { - contract = getContractHandler(address, ABI); + const address = tokenAddresses[chainId]; + if (!address) return null; + return getContractHandler(address, ABI); } catch (ex) { - contract = null; + return null; } - } else { - contract = null; } - contracts.push(contract); + return null; }); - return contracts; }, [tokensAddresses, ABI, chainId]); }; -export const useContract = (addressOrAddressMap, ABI, getContractHandler = getContract) => { +export const useContract = (addresses, ABI, getContractHandler = getContract) => { const {chainId} = useWallets(); - return useMemo(() => { - if (!addressOrAddressMap || !ABI || !chainId) return null; - let address; - if (typeof addressOrAddressMap === 'string') { - address = addressOrAddressMap; - } else { - address = addressOrAddressMap[chainId]; - } - if (!address) return null; try { + let address = addresses[chainId]; + if (!address) return null; return getContractHandler(address, ABI); } catch (ex) { return null; } - }, [addressOrAddressMap, ABI, chainId]); + }, [addresses, ABI, chainId]); }; export const useTokenContract = tokenAddresses => { const tokenContract = useEthereumTokenContract(tokenAddresses); const starknetTokenContract = useStarknetTokenContract(tokenAddresses); const {isEthereum} = useTransferData(); - return useMemo(() => (isEthereum ? tokenContract : starknetTokenContract), [isEthereum]); }; @@ -63,7 +49,6 @@ export const useTokenBridgeContract = bridgeAddress => { const tokenBridgeContract = useEthereumTokenBridgeContract(bridgeAddress); const starknetTokenBridgeContract = useStarknetTokenBridgeContract(bridgeAddress); const {isEthereum} = useTransferData(); - return useMemo( () => (isEthereum ? tokenBridgeContract : starknetTokenBridgeContract), [isEthereum] diff --git a/src/hooks/useFetchData.js b/src/hooks/useFetchData.js index fe145d60..4fb600d7 100644 --- a/src/hooks/useFetchData.js +++ b/src/hooks/useFetchData.js @@ -4,7 +4,6 @@ export const useFetchData = (func, deps = []) => { const [isLoading, setIsLoading] = useState(true); const [data, setData] = useState(null); const [error, setError] = useState(null); - useEffect(() => { async function fetch() { setIsLoading(true); @@ -20,12 +19,10 @@ export const useFetchData = (func, deps = []) => { setIsLoading(false); } } - let mounted = true; fetch(); return () => (mounted = false); }, deps); - return { isLoading, data, diff --git a/src/hooks/useIsLoading.js b/src/hooks/useIsLoading.js index 7eeacf3f..ae0cc8e8 100644 --- a/src/hooks/useIsLoading.js +++ b/src/hooks/useIsLoading.js @@ -4,7 +4,6 @@ import {useWallet} from 'use-wallet'; export const useIsLoading = deps => { const [isLoading, setIsLoading] = useState(true); const {isConnected, status} = useWallet(); - useEffect(() => { if (!isConnected()) { setIsLoading(false); @@ -14,6 +13,5 @@ export const useIsLoading = deps => { setIsLoading(true); } }, [deps, status]); - return isLoading; }; diff --git a/src/hooks/useLogger.js b/src/hooks/useLogger.js index 739c44bd..b198f35b 100644 --- a/src/hooks/useLogger.js +++ b/src/hooks/useLogger.js @@ -1,3 +1,5 @@ +import {useMemo} from 'react'; + import {getLogger} from '../services'; -export const useLogger = name => getLogger(name); +export const useLogger = name => useMemo(() => getLogger(name), [name]); diff --git a/src/hooks/usePrevious.js b/src/hooks/usePrevious.js index c8526289..63cf9f0d 100644 --- a/src/hooks/usePrevious.js +++ b/src/hooks/usePrevious.js @@ -2,10 +2,8 @@ import {useEffect, useRef} from 'react'; export const usePrevious = value => { const ref = useRef(); - useEffect(() => { ref.current = value; }); - return ref.current; }; diff --git a/src/hooks/useTokenBalance.js b/src/hooks/useTokenBalance.js index 6f5bcff3..bae91fa1 100644 --- a/src/hooks/useTokenBalance.js +++ b/src/hooks/useTokenBalance.js @@ -40,29 +40,21 @@ export const useEthereumTokenBalance = (tokenAddresses, account) => { export const useEthereumTokensBalances = (tokensAddresses, account) => { const contracts = useEthereumTokenContracts(tokensAddresses); - const callbacks = []; - contracts.forEach(contract => { - callbacks.push( - useCallback( - async () => - contract ? await getTokenBalance(account, contract, true) : await getEthBalance(account), - [tokensAddresses, account] - ) - ); - }); - return callbacks; + return contracts.map(contract => + useCallback( + async () => + contract ? await getTokenBalance(account, contract, true) : await getEthBalance(account), + [tokensAddresses, account] + ) + ); }; export const useStarknetTokensBalances = (tokensAddresses, account) => { const contracts = useStarknetTokenContracts(tokensAddresses); - const callbacks = []; - contracts.forEach(contract => { - callbacks.push( - useCallback( - async () => await getTokenBalance(account, contract, false), - [tokensAddresses, account] - ) - ); - }); - return callbacks; + return contracts.map(contract => + useCallback( + async () => await getTokenBalance(account, contract, false), + [tokensAddresses, account] + ) + ); }; diff --git a/src/hooks/useTransfer.js b/src/hooks/useTransfer.js new file mode 100644 index 00000000..5d63f463 --- /dev/null +++ b/src/hooks/useTransfer.js @@ -0,0 +1,221 @@ +import {useCallback, useState} from 'react'; + +import {depositEth, depositToken, initiateWithdrawToken, withdrawToken} from '../api/bridge'; +import {approve} from '../api/erc20'; +import {useEthereumToken} from '../providers/TokensProvider/hooks'; +import {useStarknetWallet, useWallets} from '../providers/WalletsProvider/hooks'; +import {isEth} from '../utils'; +import {listenOnce, waitForStarknetTransaction} from '../utils/contract'; +import { + useEthBridgeContract, + useEthereumTokenBridgeContract, + useMessagingContract, + useTokenBridgeContract, + useTokenContract +} from './useContract'; + +const PROGRESS = { + approval: symbol => ({ + type: 'Approval required', + message: `Requesting permission to access your ${symbol} funds` + }), + deposit: (amount, symbol) => ({ + type: 'Deposit in progress', + message: `Depositing ${amount} ${symbol} to StarkNet` + }), + initiateWithdraw: (amount, symbol, sender) => ({ + type: 'Initiate withdrawal', + message: `Initiating withdrawal of ${amount} ${symbol} from ${sender}` + }), + waitForAccept: () => ({ + type: 'Transaction received', + message: `Waiting for transaction to be accepted on StarkNet` + }), + waitForEvent: () => ({ + type: 'Accepted on StarkNet', + message: 'Waiting for message to be received on Ethereum' + }), + withdraw: (amount, symbol, recipient) => ({ + type: 'Withdrawal in progress', + message: `Withdrawing ${amount} ${symbol} to ${recipient}` + }) +}; + +export const useTransfer = () => { + const [isLoading, setIsLoading] = useState(false); + const [data, setData] = useState(null); + const [progress, setProgress] = useState(null); + const [error, setError] = useState(null); + const {account: ethereumAccount, chainId} = useWallets(); + const {account: starknetAccount} = useStarknetWallet(); + const ethBridgeContract = useEthBridgeContract(); + const messagingContract = useMessagingContract(); + const getTokenContract = useTokenContract(); + const getTokenBridgeContract = useTokenBridgeContract(); + const getEthereumToken = useEthereumToken(); + const getEthereumTokenBridgeContract = useEthereumTokenBridgeContract(); + + const resetState = () => { + setError(null); + setData(null); + setProgress(null); + setIsLoading(false); + }; + + const waitForLogMessageToL2 = () => { + return new Promise((resolve, reject) => { + listenOnce(messagingContract, 'LogMessageToL2', (error, event) => { + if (error) { + reject(error); + } + resolve(event); + }); + }); + }; + + const waitForLogMessageToL1 = () => { + return new Promise((resolve, reject) => { + listenOnce(messagingContract, 'LogMessageToL1', (error, event) => { + if (error) { + reject(error); + } + resolve(event); + }); + }); + }; + + const transferToStarknet = async ( + tokenData, + amount, + depositHandler, + bridgeContract, + tokenContract, + withApproval + ) => { + const {bridgeAddress, symbol} = tokenData; + resetState(); + try { + setIsLoading(true); + let approvalPromise = Promise.resolve(); + if (withApproval) { + setProgress(PROGRESS.approval(symbol)); + approvalPromise = approve(bridgeAddress[chainId], amount, tokenContract, ethereumAccount); + } + await approvalPromise; + setProgress(PROGRESS.deposit(amount, symbol)); + const depositPromise = depositHandler( + starknetAccount, + amount, + bridgeContract, + ethereumAccount + ); + const depositEventPromise = waitForLogMessageToL2(); + const results = await Promise.all([depositPromise, depositEventPromise]); + setIsLoading(false); + setProgress(null); + setData(results); + } catch (ex) { + setIsLoading(false); + setProgress(null); + setError(ex); + } + }; + + const transferFromStarknet = async ( + tokenData, + amount, + bridgeContract, + tokenContract, + ethereumBridgeContract + ) => { + const {symbol} = tokenData; + resetState(); + try { + setIsLoading(true); + setProgress(PROGRESS.initiateWithdraw(amount, symbol, starknetAccount)); + const initiateWithdrawTxResponse = await initiateWithdrawToken( + ethereumAccount, + amount, + bridgeContract, + tokenContract + ); + const waitForAcceptPromise = waitForStarknetTransaction( + initiateWithdrawTxResponse.transaction_hash + ); + const waitForMsgPromise = waitForLogMessageToL1(); + setProgress(PROGRESS.waitForAccept()); + await waitForAcceptPromise; + setProgress(PROGRESS.waitForEvent()); + await waitForMsgPromise; + setProgress(PROGRESS.withdraw(amount, symbol, ethereumAccount)); + const withdrawReceipt = await withdrawToken( + ethereumAccount, + amount, + ethereumBridgeContract, + tokenContract + ); + setIsLoading(false); + setProgress(null); + setData([{}, withdrawReceipt]); + } catch (ex) { + setIsLoading(false); + setProgress(null); + setError(ex); + } + }; + + const transferTokenFromStarknet = useCallback( + async (tokenData, amount) => { + const {tokenAddress, bridgeAddress, symbol} = tokenData; + const ethereumToken = getEthereumToken(symbol); + const tokenContract = getTokenContract(tokenAddress); + const tokenBridgeContract = getTokenBridgeContract(bridgeAddress); + const ethereumTokenBridgeContract = getEthereumTokenBridgeContract( + ethereumToken.bridgeAddress + ); + return await transferFromStarknet( + tokenData, + amount, + tokenBridgeContract, + tokenContract, + ethereumTokenBridgeContract + ); + }, + [ethereumAccount, starknetAccount] + ); + + const transferEthToStarknet = useCallback( + async (tokenData, amount) => { + if (!isEth(tokenData)) return; + return await transferToStarknet(amount, depositEth, ethBridgeContract, null, false); + }, + [ethereumAccount, starknetAccount] + ); + + const transferTokenToStarknet = useCallback( + async (tokenData, amount) => { + const {tokenAddress, bridgeAddress} = tokenData; + const tokenContract = getTokenContract(tokenAddress); + const tokenBridgeContract = getTokenBridgeContract(bridgeAddress); + return await transferToStarknet( + tokenData, + amount, + depositToken, + tokenBridgeContract, + tokenContract, + true + ); + }, + [ethereumAccount, starknetAccount] + ); + + return { + transferTokenToStarknet, + transferEthToStarknet, + transferTokenFromStarknet, + isLoading, + progress, + error, + data + }; +}; diff --git a/src/hooks/useTransferFromStarknet.js b/src/hooks/useTransferFromStarknet.js index a8ed82d9..ae6347ab 100644 --- a/src/hooks/useTransferFromStarknet.js +++ b/src/hooks/useTransferFromStarknet.js @@ -39,8 +39,9 @@ export const useTransferFromStarknet = tokenData => { const {account: starknetAccount} = useWallets(); const {account: ethereumAccount} = useEthereumWallet(); const tokenContract = useTokenContract(tokenAddress); - const ethereumToken = useEthereumToken(symbol); const starknetTokenBridgeContract = useTokenBridgeContract(bridgeAddress); + const getEthereumToken = useEthereumToken(); + const ethereumToken = getEthereumToken(symbol); const ethereumTokenBridgeContract = useEthereumTokenBridgeContract(ethereumToken.bridgeAddress); const messagingContract = useMessagingContract(); diff --git a/src/hooks/useVars.js b/src/hooks/useVars.js index bde237ad..39f2f316 100644 --- a/src/hooks/useVars.js +++ b/src/hooks/useVars.js @@ -1,3 +1,5 @@ +import {useMemo} from 'react'; + import vars from '../styles/variables.module.scss'; -export const useVars = () => vars; +export const useVars = () => useMemo(() => vars, []); diff --git a/src/hooks/useWalletHandlerProvider.js b/src/hooks/useWalletHandlerProvider.js index fc9bebe4..19605591 100644 --- a/src/hooks/useWalletHandlerProvider.js +++ b/src/hooks/useWalletHandlerProvider.js @@ -1,4 +1,4 @@ -import {useEffect, useState} from 'react'; +import {useCallback, useEffect, useState} from 'react'; import WalletsConfig from '../config/wallets.js'; import {ArgentHandler, MetaMaskHandler} from '../services'; @@ -10,7 +10,6 @@ const SUPPORTED_HANDLERS_REGISTRY = { export const useWalletHandlerProvider = () => { const [handlers, setHandlers] = useState([]); - useEffect(() => { const walletHandlers = []; WalletsConfig.forEach(walletConfig => { @@ -22,12 +21,9 @@ export const useWalletHandlerProvider = () => { }); setHandlers(walletHandlers); }, []); - - const getWalletHandlers = type => { - return type ? handlers.filter(walletHandler => walletHandler.config.type === type) : handlers; - }; - - return { - getWalletHandlers - }; + return useCallback( + type => + type ? handlers.filter(walletHandler => walletHandler.config.type === type) : handlers, + [handlers] + ); }; diff --git a/src/hooks/useWindowSize.js b/src/hooks/useWindowSize.js index b0b9c2db..660e2afc 100644 --- a/src/hooks/useWindowSize.js +++ b/src/hooks/useWindowSize.js @@ -12,7 +12,6 @@ export const useWindowSize = () => { height: window.innerHeight }); } - window.addEventListener('resize', handleResize); handleResize(); return () => window.removeEventListener('resize', handleResize); From 7a5548266db64e8366cb0290cf430647e7ca93bd Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Fri, 17 Dec 2021 23:40:54 +0200 Subject: [PATCH 019/211] refactor: starknet/ethereum naming [skip ci] --- src/api/bridge.js | 56 ++++++++++++-------- src/api/erc20.js | 55 ++++++++++--------- src/components/Features/Login/Login/Login.js | 2 +- src/hooks/useContract.js | 12 ++--- src/hooks/useTokenBalance.js | 15 ++---- src/hooks/useTransfer.js | 18 +++---- src/hooks/useTransferFromStarknet.js | 12 ++--- src/hooks/useTransferToStarknet.js | 10 ++-- src/utils/contract.js | 24 +++------ src/utils/number.js | 20 +++---- 10 files changed, 114 insertions(+), 110 deletions(-) diff --git a/src/api/bridge.js b/src/api/bridge.js index 7c0ce386..f658c73e 100644 --- a/src/api/bridge.js +++ b/src/api/bridge.js @@ -1,49 +1,59 @@ -import {toFelt, toUint256, toWei} from '../utils'; -import {invokeStarknetTransaction, sendTransaction} from '../utils/contract'; +import {starknet_toFelt, starknet_toUint256, eth_toWei} from '../utils'; +import {starknet_sendTransaction, eth_sendTransaction} from '../utils/contract'; import {decimals} from './erc20'; -export const depositToken = async (recipient, amount, tokenBridgeContract, from) => { +export const eth_deposit = async (recipient, amount, tokenBridgeContract, from) => { try { - return await sendTransaction(tokenBridgeContract, 'deposit', [toWei(amount), recipient], { - from - }); + return await eth_sendTransaction( + tokenBridgeContract, + 'deposit', + [eth_toWei(amount), recipient], + { + from + } + ); } catch (ex) { return Promise.reject(ex); } }; -export const depositEth = async (recipient, amount, ethBridgeContract, from) => { +export const eth_depositEth = async (recipient, amount, ethBridgeContract, from) => { try { - return await sendTransaction(ethBridgeContract, 'deposit', [recipient], { + return await eth_sendTransaction(ethBridgeContract, 'deposit', [recipient], { from, - value: toWei(amount) + value: eth_toWei(amount) }); } catch (ex) { return Promise.reject(ex); } }; -export const initiateWithdrawToken = async ( - recipient, - amount, - tokenBridgeContract, - tokenContract -) => { +export const eth_withdraw = async (recipient, amount, tokenBridgeContract) => { try { - const tokenDecimals = await decimals(tokenContract, false); - return await invokeStarknetTransaction(tokenBridgeContract, 'initiate_withdraw', { - l1Recipient: toFelt(recipient), - amount: toUint256(amount, tokenDecimals) - }); + return await eth_sendTransaction( + tokenBridgeContract, + 'withdraw', + [eth_toWei(amount), recipient], + { + from: recipient + } + ); } catch (ex) { return Promise.reject(ex); } }; -export const withdrawToken = async (recipient, amount, tokenBridgeContract) => { +export const starknet_initiateWithdraw = async ( + recipient, + amount, + tokenBridgeContract, + tokenContract +) => { try { - return await sendTransaction(tokenBridgeContract, 'withdraw', [toWei(amount), recipient], { - from: recipient + const tokenDecimals = await decimals(tokenContract, false); + return await starknet_sendTransaction(tokenBridgeContract, 'initiate_withdraw', { + l1Recipient: starknet_toFelt(recipient), + amount: starknet_toUint256(amount, tokenDecimals) }); } catch (ex) { return Promise.reject(ex); diff --git a/src/api/erc20.js b/src/api/erc20.js index 81f381ee..134cfe6c 100644 --- a/src/api/erc20.js +++ b/src/api/erc20.js @@ -1,21 +1,28 @@ -import {fromFelt, fromUint256, fromWei, toFelt, toUint256} from '../utils'; import { - callContract, - callStarknetContract, - invokeStarknetTransaction, - sendTransaction + eth_fromWei, + eth_toWei, + starknet_fromFelt, + starknet_fromUint256, + starknet_toFelt, + starknet_toUint256 +} from '../utils'; +import { + eth_callContract, + eth_sendTransaction, + starknet_callContract, + starknet_sendTransaction } from '../utils/contract'; import {web3} from '../web3'; export const approve = async (spender, value, contract, from, isEthereum = true) => { try { if (isEthereum) { - return await sendTransaction(contract, 'approve', [spender, web3.utils.toWei(value)], {from}); + return await eth_sendTransaction(contract, 'approve', [spender, eth_toWei(value)], {from}); } else { const tokenDecimals = await decimals(contract, false); - return await invokeStarknetTransaction(contract, 'approve', { - spender: toFelt(spender), - amount: toUint256(value, tokenDecimals) + return await starknet_sendTransaction(contract, 'approve', { + spender: starknet_toFelt(spender), + amount: starknet_toUint256(value, tokenDecimals) }); } } catch (ex) { @@ -23,38 +30,38 @@ export const approve = async (spender, value, contract, from, isEthereum = true) } }; -export const getTokenBalance = async (account, contract, isEthereum = true) => { +export const balanceOf = async (account, contract, isEthereum = true) => { try { if (isEthereum) { - const balance = await callContract(contract, 'balanceOf', [account]); - return fromWei(balance); + const balance = await eth_callContract(contract, 'balanceOf', [account]); + return eth_fromWei(balance); } else { - const {balance} = await callStarknetContract(contract, 'balanceOf', [{account}]); + const {balance} = await starknet_callContract(contract, 'balanceOf', [{account}]); const tokenDecimals = await decimals(contract, false); - return fromUint256(balance, tokenDecimals); + return starknet_fromUint256(balance, tokenDecimals); } } catch (ex) { return Promise.reject(ex); } }; -export const getEthBalance = async account => { +export const decimals = async (contract, isEthereum = true) => { try { - const balance = await web3.eth.getBalance(account); - return fromWei(balance); + if (isEthereum) { + // TODO: call ethereum contract decimals + } else { + const {decimals} = await starknet_callContract(contract, 'decimals'); + return starknet_fromFelt(decimals); + } } catch (ex) { return Promise.reject(ex); } }; -export const decimals = async (contract, isEthereum = true) => { +export const eth_ethBalanceOf = async account => { try { - if (isEthereum) { - // TODO: call ethereum contract decimals - } else { - const {decimals} = await callStarknetContract(contract, 'decimals'); - return fromFelt(decimals); - } + const balance = await web3.eth.getBalance(account); + return eth_fromWei(balance); } catch (ex) { return Promise.reject(ex); } diff --git a/src/components/Features/Login/Login/Login.js b/src/components/Features/Login/Login/Login.js index 241facee..5b73b3eb 100644 --- a/src/components/Features/Login/Login/Login.js +++ b/src/components/Features/Login/Login/Login.js @@ -24,7 +24,7 @@ export const Login = () => { const hideModal = useHideModal(); const showProgressModal = useProgressModal(); const {status, error} = useWallets(); - const {getWalletHandlers} = useWalletHandlerProvider(); + const getWalletHandlers = useWalletHandlerProvider(); const {connectWallet: connectEthereumWallet, isConnected} = useEthereumWallet(); const {connectWallet: connectStarknetWallet} = useStarknetWallet(); diff --git a/src/hooks/useContract.js b/src/hooks/useContract.js index c668bb1a..155a1b15 100644 --- a/src/hooks/useContract.js +++ b/src/hooks/useContract.js @@ -5,9 +5,9 @@ import {STARKNET_BRIDGE_ABI, STARKNET_ERC20_ABI} from '../abis/starknet'; import {useTransferData} from '../components/Features/Transfer/Transfer/Transfer.hooks'; import {ETH_BRIDGE_CONTRACT_ADDRESS, MESSAGING_CONTRACT_ADDRESS} from '../config/addresses'; import {useWallets} from '../providers/WalletsProvider/hooks'; -import {getContract, getStarknetContract} from '../utils/contract'; +import {eth_getContract, starknet_getContract} from '../utils/contract'; -export const useContracts = (tokensAddresses, ABI, getContractHandler = getContract) => { +export const useContracts = (tokensAddresses, ABI, getContractHandler = eth_getContract) => { const {chainId} = useWallets(); return useMemo(() => { return tokensAddresses.map(tokenAddresses => { @@ -25,7 +25,7 @@ export const useContracts = (tokensAddresses, ABI, getContractHandler = getContr }, [tokensAddresses, ABI, chainId]); }; -export const useContract = (addresses, ABI, getContractHandler = getContract) => { +export const useContract = (addresses, ABI, getContractHandler = eth_getContract) => { const {chainId} = useWallets(); return useMemo(() => { try { @@ -56,10 +56,10 @@ export const useTokenBridgeContract = bridgeAddress => { }; export const useStarknetTokenContract = tokenAddresses => - useContract(tokenAddresses, STARKNET_ERC20_ABI, getStarknetContract); + useContract(tokenAddresses, STARKNET_ERC20_ABI, starknet_getContract); export const useStarknetTokenContracts = tokensAddresses => - useContracts(tokensAddresses, STARKNET_ERC20_ABI, getStarknetContract); + useContracts(tokensAddresses, STARKNET_ERC20_ABI, starknet_getContract); export const useEthereumTokenContract = tokenAddresses => useContract(tokenAddresses, ERC20_ABI); @@ -71,7 +71,7 @@ export const useEthBridgeContract = () => useContract(ETH_BRIDGE_CONTRACT_ADDRES export const useMessagingContract = () => useContract(MESSAGING_CONTRACT_ADDRESS, MESSAGING_ABI); export const useStarknetTokenBridgeContract = bridgeAddress => - useContract(bridgeAddress, STARKNET_BRIDGE_ABI, getStarknetContract); + useContract(bridgeAddress, STARKNET_BRIDGE_ABI, starknet_getContract); export const useEthereumTokenBridgeContract = bridgeAddress => useContract(bridgeAddress, ERC20_BRIDGE_ABI); diff --git a/src/hooks/useTokenBalance.js b/src/hooks/useTokenBalance.js index bae91fa1..406e7dee 100644 --- a/src/hooks/useTokenBalance.js +++ b/src/hooks/useTokenBalance.js @@ -1,6 +1,6 @@ import {useCallback} from 'react'; -import {getEthBalance, getTokenBalance} from '../api/erc20'; +import {eth_ethBalanceOf, balanceOf} from '../api/erc20'; import {useTransferData} from '../components/Features/Transfer/Transfer/Transfer.hooks'; import { useEthereumTokenContract, @@ -22,7 +22,7 @@ export const useTokenBalance = (tokenAddresses, account) => { export const useStarknetTokenBalance = (tokenAddresses, account) => { const contract = useStarknetTokenContract(tokenAddresses); return useCallback( - async () => await getTokenBalance(account, contract, false), + async () => await balanceOf(account, contract, false), [tokenAddresses, account] ); }; @@ -31,9 +31,7 @@ export const useEthereumTokenBalance = (tokenAddresses, account) => { const contract = useEthereumTokenContract(tokenAddresses); return useCallback( async () => - tokenAddresses - ? await getTokenBalance(account, contract, true) - : await getEthBalance(account), + tokenAddresses ? await balanceOf(account, contract, true) : await eth_ethBalanceOf(account), [tokenAddresses, account] ); }; @@ -43,7 +41,7 @@ export const useEthereumTokensBalances = (tokensAddresses, account) => { return contracts.map(contract => useCallback( async () => - contract ? await getTokenBalance(account, contract, true) : await getEthBalance(account), + contract ? await balanceOf(account, contract, true) : await eth_ethBalanceOf(account), [tokensAddresses, account] ) ); @@ -52,9 +50,6 @@ export const useEthereumTokensBalances = (tokensAddresses, account) => { export const useStarknetTokensBalances = (tokensAddresses, account) => { const contracts = useStarknetTokenContracts(tokensAddresses); return contracts.map(contract => - useCallback( - async () => await getTokenBalance(account, contract, false), - [tokensAddresses, account] - ) + useCallback(async () => await balanceOf(account, contract, false), [tokensAddresses, account]) ); }; diff --git a/src/hooks/useTransfer.js b/src/hooks/useTransfer.js index 5d63f463..0bc6d4c0 100644 --- a/src/hooks/useTransfer.js +++ b/src/hooks/useTransfer.js @@ -1,11 +1,11 @@ import {useCallback, useState} from 'react'; -import {depositEth, depositToken, initiateWithdrawToken, withdrawToken} from '../api/bridge'; +import {eth_depositEth, eth_deposit, starknet_initiateWithdraw, eth_withdraw} from '../api/bridge'; import {approve} from '../api/erc20'; import {useEthereumToken} from '../providers/TokensProvider/hooks'; import {useStarknetWallet, useWallets} from '../providers/WalletsProvider/hooks'; import {isEth} from '../utils'; -import {listenOnce, waitForStarknetTransaction} from '../utils/contract'; +import {eth_listenOnce, starknet_waitForTransaction} from '../utils/contract'; import { useEthBridgeContract, useEthereumTokenBridgeContract, @@ -64,7 +64,7 @@ export const useTransfer = () => { const waitForLogMessageToL2 = () => { return new Promise((resolve, reject) => { - listenOnce(messagingContract, 'LogMessageToL2', (error, event) => { + eth_listenOnce(messagingContract, 'LogMessageToL2', (error, event) => { if (error) { reject(error); } @@ -75,7 +75,7 @@ export const useTransfer = () => { const waitForLogMessageToL1 = () => { return new Promise((resolve, reject) => { - listenOnce(messagingContract, 'LogMessageToL1', (error, event) => { + eth_listenOnce(messagingContract, 'LogMessageToL1', (error, event) => { if (error) { reject(error); } @@ -133,13 +133,13 @@ export const useTransfer = () => { try { setIsLoading(true); setProgress(PROGRESS.initiateWithdraw(amount, symbol, starknetAccount)); - const initiateWithdrawTxResponse = await initiateWithdrawToken( + const initiateWithdrawTxResponse = await starknet_initiateWithdraw( ethereumAccount, amount, bridgeContract, tokenContract ); - const waitForAcceptPromise = waitForStarknetTransaction( + const waitForAcceptPromise = starknet_waitForTransaction( initiateWithdrawTxResponse.transaction_hash ); const waitForMsgPromise = waitForLogMessageToL1(); @@ -148,7 +148,7 @@ export const useTransfer = () => { setProgress(PROGRESS.waitForEvent()); await waitForMsgPromise; setProgress(PROGRESS.withdraw(amount, symbol, ethereumAccount)); - const withdrawReceipt = await withdrawToken( + const withdrawReceipt = await eth_withdraw( ethereumAccount, amount, ethereumBridgeContract, @@ -187,7 +187,7 @@ export const useTransfer = () => { const transferEthToStarknet = useCallback( async (tokenData, amount) => { if (!isEth(tokenData)) return; - return await transferToStarknet(amount, depositEth, ethBridgeContract, null, false); + return await transferToStarknet(amount, eth_depositEth, ethBridgeContract, null, false); }, [ethereumAccount, starknetAccount] ); @@ -200,7 +200,7 @@ export const useTransfer = () => { return await transferToStarknet( tokenData, amount, - depositToken, + eth_deposit, tokenBridgeContract, tokenContract, true diff --git a/src/hooks/useTransferFromStarknet.js b/src/hooks/useTransferFromStarknet.js index ae6347ab..b257a0fd 100644 --- a/src/hooks/useTransferFromStarknet.js +++ b/src/hooks/useTransferFromStarknet.js @@ -1,9 +1,9 @@ import {useState} from 'react'; -import {initiateWithdrawToken, withdrawToken} from '../api/bridge'; +import {starknet_initiateWithdraw, eth_withdraw} from '../api/bridge'; import {useEthereumToken} from '../providers/TokensProvider/hooks'; import {useEthereumWallet, useWallets} from '../providers/WalletsProvider/hooks'; -import {listenOnce, waitForStarknetTransaction} from '../utils/contract'; +import {eth_listenOnce, starknet_waitForTransaction} from '../utils/contract'; import { useEthereumTokenBridgeContract, useMessagingContract, @@ -47,7 +47,7 @@ export const useTransferFromStarknet = tokenData => { const waitForLogMessageToL1 = () => { return new Promise((resolve, reject) => { - listenOnce(messagingContract, 'LogMessageToL1', (error, event) => { + eth_listenOnce(messagingContract, 'LogMessageToL1', (error, event) => { if (error) { reject(error); } @@ -65,14 +65,14 @@ export const useTransferFromStarknet = tokenData => { setIsLoading(true); setProgress(PROGRESS.initiateWithdraw(amount, symbol, starknetAccount)); - const initiateWithdrawTxResponse = await initiateWithdrawToken( + const initiateWithdrawTxResponse = await starknet_initiateWithdraw( ethereumAccount, amount, starknetTokenBridgeContract, tokenContract ); - const waitForAcceptPromise = waitForStarknetTransaction( + const waitForAcceptPromise = starknet_waitForTransaction( initiateWithdrawTxResponse.transaction_hash ); @@ -85,7 +85,7 @@ export const useTransferFromStarknet = tokenData => { await waitForMsgPromise; setProgress(PROGRESS.withdraw(amount, symbol, ethereumAccount)); - const withdrawReceipt = await withdrawToken( + const withdrawReceipt = await eth_withdraw( ethereumAccount, amount, ethereumTokenBridgeContract, diff --git a/src/hooks/useTransferToStarknet.js b/src/hooks/useTransferToStarknet.js index fbc01cb2..3d105efb 100644 --- a/src/hooks/useTransferToStarknet.js +++ b/src/hooks/useTransferToStarknet.js @@ -1,9 +1,9 @@ import {useCallback, useState} from 'react'; -import {depositEth, depositToken} from '../api/bridge'; +import {eth_depositEth, eth_deposit} from '../api/bridge'; import {approve} from '../api/erc20'; import {useStarknetWallet, useWallets} from '../providers/WalletsProvider/hooks'; -import {listenOnce} from '../utils/contract'; +import {eth_listenOnce} from '../utils/contract'; import { useEthBridgeContract, useMessagingContract, @@ -36,18 +36,18 @@ export const useTransferToStarknet = tokenData => { const messagingContract = useMessagingContract(); const transferEthToStarknet = useCallback( - async amount => transferToStarknet(amount, depositEth, ethBridgeContract, false), + async amount => transferToStarknet(amount, eth_depositEth, ethBridgeContract, false), [ethereumAccount, starknetAccount, tokenContract] ); const transferTokenToStarknet = useCallback( - async amount => transferToStarknet(amount, depositToken, tokenBridgeContract, true), + async amount => transferToStarknet(amount, eth_deposit, tokenBridgeContract, true), [ethereumAccount, starknetAccount, tokenContract] ); const waitForLogMessageToL2 = () => { return new Promise((resolve, reject) => { - listenOnce(messagingContract, 'LogMessageToL2', (error, event) => { + eth_listenOnce(messagingContract, 'LogMessageToL2', (error, event) => { if (error) { reject(error); } diff --git a/src/utils/contract.js b/src/utils/contract.js index afbe44ce..3a4df662 100644 --- a/src/utils/contract.js +++ b/src/utils/contract.js @@ -3,9 +3,9 @@ import {compileCalldata, Contract, stark} from 'starknet'; import {web3} from '../web3'; -export const getContract = (address, ABI) => new web3.eth.Contract(ABI, address); +export const eth_getContract = (address, ABI) => new web3.eth.Contract(ABI, address); -export const callContract = async (contract, method, args = []) => { +export const eth_callContract = async (contract, method, args = []) => { try { return await contract.methods?.[method](...args).call(); } catch (ex) { @@ -13,7 +13,7 @@ export const callContract = async (contract, method, args = []) => { } }; -export const sendTransaction = async (contract, method, args = [], options = {}) => { +export const eth_sendTransaction = async (contract, method, args = [], options = {}) => { try { return contract.methods?.[method](...args).send(options); } catch (ex) { @@ -21,22 +21,14 @@ export const sendTransaction = async (contract, method, args = [], options = {}) } }; -export const listen = async (contract, event, callback) => { - try { - contract.events?.[event]({}, (error, event) => callback(error, event)); - } catch (ex) { - callback(ex); - } -}; - -export const listenOnce = async (contract, event, callback) => { +export const eth_listenOnce = async (contract, event, callback) => { contract.once(event, null, (error, event) => callback(error, event)); }; -export const getStarknetContract = (address, ABI) => +export const starknet_getContract = (address, ABI) => new Contract(ABI, address, getStarknet().provider); -export const callStarknetContract = async (contract, method, args = []) => { +export const starknet_callContract = async (contract, method, args = []) => { try { return await contract.call(method, ...args); } catch (ex) { @@ -44,7 +36,7 @@ export const callStarknetContract = async (contract, method, args = []) => { } }; -export const invokeStarknetTransaction = async (contract, method, args = {}) => { +export const starknet_sendTransaction = async (contract, method, args = {}) => { try { const methodSelector = stark.getSelectorFromName(method); const compiledCalldata = compileCalldata(args); @@ -58,5 +50,5 @@ export const invokeStarknetTransaction = async (contract, method, args = {}) => } }; -export const waitForStarknetTransaction = async hash => +export const starknet_waitForTransaction = async hash => await getStarknet().provider.waitForTx(hash); diff --git a/src/utils/number.js b/src/utils/number.js index 1471df54..935fbf2e 100644 --- a/src/utils/number.js +++ b/src/utils/number.js @@ -10,11 +10,15 @@ const DEFAULT_DECIMALS = 18; export const powerOf = decimals => Math.pow(TEN_BASE, decimals); -export const fromFelt = value => toBN(value).toNumber(); +export const toDecimals = (value, decimals = DEFAULT_DECIMALS) => value * powerOf(decimals); + +export const fromDecimals = (value, decimals = DEFAULT_DECIMALS) => value / powerOf(decimals); + +export const starknet_fromFelt = value => toBN(value).toNumber(); -export const toFelt = value => toBN(value).toString(); +export const starknet_toFelt = value => toBN(value).toString(); -export const toUint256 = (value, decimals) => { +export const starknet_toUint256 = (value, decimals) => { const decimalsString = String(toDecimals(value, decimals)); const bn = number.toBN(decimalsString); const uint256 = bnToUint256(bn); @@ -24,15 +28,11 @@ export const toUint256 = (value, decimals) => { }; }; -export const fromUint256 = (value, decimals) => { +export const starknet_fromUint256 = (value, decimals) => { const bnString = uint256ToBN(value).toString(); return fromDecimals(bnString, decimals); }; -export const toWei = value => web3.utils.toWei(value, 'ether'); +export const eth_toWei = value => web3.utils.toWei(value, 'ether'); -export const fromWei = value => Number(web3.utils.fromWei(value)); - -export const toDecimals = (value, decimals = DEFAULT_DECIMALS) => value * powerOf(decimals); - -export const fromDecimals = (value, decimals = DEFAULT_DECIMALS) => value / powerOf(decimals); +export const eth_fromWei = value => Number(web3.utils.fromWei(value)); From 36687e5c1b98673e6a58dfba78ec0f7af2eae96c Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Sun, 19 Dec 2021 00:36:37 +0200 Subject: [PATCH 020/211] refactor: useContract hook [skip ci] --- .../EthereumNetwork/EthereumNetwork.js | 54 -------- .../EthereumNetwork.strings.js | 1 - .../StarknetNetwork/StarknetNetwork.js | 50 ------- .../Features/Transfer/Transfer/Transfer.js | 77 ++++++++++- src/components/Features/Transfer/index.js | 2 - src/hooks/index.js | 3 +- src/hooks/useContract.js | 123 +++++++++++------- src/hooks/useTokenBalance.js | 60 +++------ src/hooks/useTransfer.js | 58 ++++----- src/hooks/useTransferFromStarknet.js | 111 ---------------- src/hooks/useTransferToStarknet.js | 99 -------------- .../TokensProvider/TokensProvider.js | 21 +-- 12 files changed, 197 insertions(+), 462 deletions(-) delete mode 100644 src/components/Features/Transfer/EthereumNetwork/EthereumNetwork.js delete mode 100644 src/components/Features/Transfer/EthereumNetwork/EthereumNetwork.strings.js delete mode 100644 src/components/Features/Transfer/StarknetNetwork/StarknetNetwork.js delete mode 100644 src/hooks/useTransferFromStarknet.js delete mode 100644 src/hooks/useTransferToStarknet.js diff --git a/src/components/Features/Transfer/EthereumNetwork/EthereumNetwork.js b/src/components/Features/Transfer/EthereumNetwork/EthereumNetwork.js deleted file mode 100644 index 02cf0ef6..00000000 --- a/src/components/Features/Transfer/EthereumNetwork/EthereumNetwork.js +++ /dev/null @@ -1,54 +0,0 @@ -import React, {useEffect} from 'react'; - -import {NetworkType} from '../../../../enums'; -import {useTransferToStarknet} from '../../../../hooks'; -import {useEthereumToken} from '../../../../providers/TokensProvider/hooks'; -import {isEth} from '../../../../utils'; -import { - useHideModal, - useProgressModal, - useTransactionSubmittedModal -} from '../../ModalProvider/ModalProvider.hooks'; -import {useAmount, useTransferData} from '../Transfer/Transfer.hooks'; -import {NetworkMenu} from '../index'; -import {TRANSFER_TO_STARKNET_MODAL_TITLE} from './EthereumNetwork.strings'; - -export const EthereumNetwork = () => { - const [amount, , clearAmount] = useAmount(); - const {isEthereum, selectedToken} = useTransferData(); - const hideModal = useHideModal(); - const showProgressModal = useProgressModal(); - const showTransactionSubmittedModal = useTransactionSubmittedModal(); - const getEthereumToken = useEthereumToken(); - const tokenData = getEthereumToken(selectedToken.symbol); - - const {transferEthToStarknet, transferTokenToStarknet, data, error, isLoading, progress} = - useTransferToStarknet(tokenData); - - useEffect(() => { - if (isLoading) { - progress && showProgressModal(TRANSFER_TO_STARKNET_MODAL_TITLE, progress.message); - } else if (error) { - // TODO: show error modal - hideModal(); - } else if (data) { - const [receipt, event] = data; - clearAmount(); - showTransactionSubmittedModal(receipt.transactionHash); - // TODO: add tx to store and calc tx hash from msg hash - } - }, [progress, data, error, isLoading, amount]); - - const onTransferClick = async () => - isEth(tokenData) ? transferEthToStarknet(amount) : transferTokenToStarknet(amount); - - return ( - <NetworkMenu - isTarget={!isEthereum} - isTransferring={isLoading} - networkData={NetworkType.ETHEREUM} - tokenData={tokenData} - onTransferClick={onTransferClick} - /> - ); -}; diff --git a/src/components/Features/Transfer/EthereumNetwork/EthereumNetwork.strings.js b/src/components/Features/Transfer/EthereumNetwork/EthereumNetwork.strings.js deleted file mode 100644 index a62e584c..00000000 --- a/src/components/Features/Transfer/EthereumNetwork/EthereumNetwork.strings.js +++ /dev/null @@ -1 +0,0 @@ -export const TRANSFER_TO_STARKNET_MODAL_TITLE = 'Transferring to StarkNet'; diff --git a/src/components/Features/Transfer/StarknetNetwork/StarknetNetwork.js b/src/components/Features/Transfer/StarknetNetwork/StarknetNetwork.js deleted file mode 100644 index 249cabf8..00000000 --- a/src/components/Features/Transfer/StarknetNetwork/StarknetNetwork.js +++ /dev/null @@ -1,50 +0,0 @@ -import React, {useEffect} from 'react'; - -import {NetworkType} from '../../../../enums'; -import {useTransferFromStarknet} from '../../../../hooks/useTransferFromStarknet'; -import {useStarknetToken} from '../../../../providers/TokensProvider/hooks'; -import { - useHideModal, - useProgressModal, - useTransactionSubmittedModal -} from '../../ModalProvider/ModalProvider.hooks'; -import {useAmount, useTransferData} from '../Transfer/Transfer.hooks'; -import {NetworkMenu} from '../index'; - -export const StarknetNetwork = () => { - const [amount, , clearAmount] = useAmount(); - const {isStarknet, selectedToken} = useTransferData(); - const hideModal = useHideModal(); - const showProgressModal = useProgressModal(); - const showTransactionSubmittedModal = useTransactionSubmittedModal(); - const getStarknetToken = useStarknetToken(); - const tokenData = getStarknetToken(selectedToken.symbol); - - const {transferFromStarknet, data, error, isLoading, progress} = - useTransferFromStarknet(tokenData); - - useEffect(() => { - if (isLoading) { - progress && showProgressModal(progress.type, progress.message); - } else if (error) { - // TODO: show error modal - hideModal(); - } else if (data) { - const [receipt] = data; - clearAmount(); - showTransactionSubmittedModal(receipt.transaction_hash); - } - }, [progress, data, error, isLoading, amount]); - - const onTransferClick = async () => transferFromStarknet(amount); - - return ( - <NetworkMenu - isTarget={!isStarknet} - isTransferring={isLoading} - networkData={NetworkType.STARKNET} - tokenData={tokenData} - onTransferClick={onTransferClick} - /> - ); -}; diff --git a/src/components/Features/Transfer/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer/Transfer.js index 83a41984..47f758d3 100644 --- a/src/components/Features/Transfer/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer/Transfer.js @@ -1,27 +1,63 @@ import React, {useEffect} from 'react'; import {ActionType, NetworkType} from '../../../../enums'; -import {useTokens} from '../../../../providers/TokensProvider/hooks'; +import {useTransfer} from '../../../../hooks'; +import { + useEthereumToken, + useStarknetToken, + useTokens +} from '../../../../providers/TokensProvider/hooks'; import {Loading, Menu} from '../../../UI'; import {LoadingSize} from '../../../UI/Loading/Loading.enums'; -import {EthereumNetwork} from '../EthereumNetwork/EthereumNetwork'; +import { + useHideModal, + useProgressModal, + useTransactionSubmittedModal +} from '../../ModalProvider/ModalProvider.hooks'; +import {NetworkMenu} from '../NetworkMenu/NetworkMenu'; import {NetworkSwap} from '../NetworkSwap/NetworkSwap'; -import {StarknetNetwork} from '../StarknetNetwork/StarknetNetwork'; import {TransferMenuTab} from '../TransferMenuTab/TransferMenuTab'; -import {useIsEthereum, useIsStarknet, useTransferActions, useTransferData} from './Transfer.hooks'; +import { + useAmount, + useIsEthereum, + useIsStarknet, + useTransferActions, + useTransferData +} from './Transfer.hooks'; import styles from './Transfer.module.scss'; export const Transfer = () => { const [isEthereum, setEthereum] = useIsEthereum(); const [isStarknet, setStarknet] = useIsStarknet(); + const [amount, , clearAmount] = useAmount(); const {selectedToken, action} = useTransferData(); const {selectToken} = useTransferActions(); const tokens = useTokens(); + const hideModal = useHideModal(); + const showProgressModal = useProgressModal(); + const showTransactionSubmittedModal = useTransactionSubmittedModal(); + const getEthereumToken = useEthereumToken(); + const getStarknetToken = useStarknetToken(); + const {transferTokenToStarknet, transferTokenFromStarknet, data, error, isLoading, progress} = + useTransfer(); useEffect(() => { !selectedToken && selectToken(tokens[0]); }, []); + useEffect(() => { + if (isLoading) { + progress && showProgressModal(progress.type, progress.message); + } else if (error) { + // TODO: show error modal + hideModal(); + } else if (data) { + const [receipt, event] = data; + clearAmount(); + showTransactionSubmittedModal(receipt.transactionHash); + } + }, [progress, data, error, isLoading, amount]); + const renderTabs = () => { return Object.values(ActionType).map((tab, index) => { return ( @@ -40,12 +76,39 @@ export const Transfer = () => { }; const onSwapClick = () => { - !isEthereum ? setEthereum() : setStarknet(); + isStarknet ? setEthereum() : setStarknet(); + }; + + const onTransferClick = async () => { + debugger; + return isEthereum ? transferTokenToStarknet(amount) : transferTokenFromStarknet(amount); }; - const renderEthereumNetwork = () => <EthereumNetwork />; + const renderEthereumNetwork = () => { + const tokenData = getEthereumToken(selectedToken.symbol); + return ( + <NetworkMenu + isTarget={!isEthereum} + isTransferring={isLoading} + networkData={NetworkType.ETHEREUM} + tokenData={tokenData} + onTransferClick={onTransferClick} + /> + ); + }; - const renderStarknetNetwork = () => <StarknetNetwork />; + const renderStarknetNetwork = () => { + const tokenData = getStarknetToken(selectedToken.symbol); + return ( + <NetworkMenu + isTarget={!isStarknet} + isTransferring={isLoading} + networkData={NetworkType.STARKNET} + tokenData={tokenData} + onTransferClick={onTransferClick} + /> + ); + }; return ( <Menu> diff --git a/src/components/Features/Transfer/index.js b/src/components/Features/Transfer/index.js index ab855d77..55a48448 100644 --- a/src/components/Features/Transfer/index.js +++ b/src/components/Features/Transfer/index.js @@ -8,5 +8,3 @@ export * from './TokenInput/TokenInput'; export * from './TokenSelector/TokenSelector'; export * from './TransferButton/TransferButton'; export * from './TransferMenuTab/TransferMenuTab'; -export * from './StarknetNetwork/StarknetNetwork'; -export * from './EthereumNetwork/EthereumNetwork'; diff --git a/src/hooks/index.js b/src/hooks/index.js index 6658f0ef..d80e8ad1 100644 --- a/src/hooks/index.js +++ b/src/hooks/index.js @@ -5,8 +5,7 @@ export * from './useVars'; export * from './useColors'; export * from './useContract'; export * from './useLogger'; -export * from './useTransferToStarknet'; export * from './useWalletHandlerProvider'; -export * from './useTransferToStarknet'; export * from './useFetchData'; export * from './usePrevious'; +export * from './useTransfer'; diff --git a/src/hooks/useContract.js b/src/hooks/useContract.js index 155a1b15..7ea5a0a2 100644 --- a/src/hooks/useContract.js +++ b/src/hooks/useContract.js @@ -1,4 +1,4 @@ -import {useMemo} from 'react'; +import {useCallback, useMemo} from 'react'; import {ERC20_ABI, ERC20_BRIDGE_ABI, ETH_BRIDGE_ABI, MESSAGING_ABI} from '../abis/ethereum'; import {STARKNET_BRIDGE_ABI, STARKNET_ERC20_ABI} from '../abis/starknet'; @@ -7,71 +7,94 @@ import {ETH_BRIDGE_CONTRACT_ADDRESS, MESSAGING_CONTRACT_ADDRESS} from '../config import {useWallets} from '../providers/WalletsProvider/hooks'; import {eth_getContract, starknet_getContract} from '../utils/contract'; -export const useContracts = (tokensAddresses, ABI, getContractHandler = eth_getContract) => { - const {chainId} = useWallets(); - return useMemo(() => { - return tokensAddresses.map(tokenAddresses => { - if (tokenAddresses) { - try { - const address = tokenAddresses[chainId]; - if (!address) return null; - return getContractHandler(address, ABI); - } catch (ex) { - return null; +export const useContracts = (ABI, getContractHandler = eth_getContract) => { + const getContract = useContract(ABI, getContractHandler); + return useCallback( + tokensAddresses => + tokensAddresses.map(tokenAddresses => { + if (tokenAddresses) { + return getContract(tokenAddresses); } - } - return null; - }); - }, [tokensAddresses, ABI, chainId]); + return null; + }), + [ABI] + ); }; -export const useContract = (addresses, ABI, getContractHandler = eth_getContract) => { +export const useContract = (ABI, getContractHandler = eth_getContract) => { const {chainId} = useWallets(); - return useMemo(() => { - try { - let address = addresses[chainId]; - if (!address) return null; - return getContractHandler(address, ABI); - } catch (ex) { - return null; - } - }, [addresses, ABI, chainId]); + return useCallback( + addresses => { + try { + let address = addresses[chainId]; + if (!address) return null; + return getContractHandler(address, ABI); + } catch (ex) { + return null; + } + }, + [ABI, chainId] + ); }; -export const useTokenContract = tokenAddresses => { - const tokenContract = useEthereumTokenContract(tokenAddresses); - const starknetTokenContract = useStarknetTokenContract(tokenAddresses); +export const useTokenContract = () => { + const getTokenContract = useEthereumTokenContract(); + const getStarknetTokenContract = useStarknetTokenContract(); const {isEthereum} = useTransferData(); - return useMemo(() => (isEthereum ? tokenContract : starknetTokenContract), [isEthereum]); + return useCallback( + tokenAddresses => + isEthereum ? getTokenContract(tokenAddresses) : getStarknetTokenContract(tokenAddresses), + [isEthereum] + ); }; -export const useTokenBridgeContract = bridgeAddress => { - const tokenBridgeContract = useEthereumTokenBridgeContract(bridgeAddress); - const starknetTokenBridgeContract = useStarknetTokenBridgeContract(bridgeAddress); +export const useTokenBridgeContract = () => { + const getTokenBridgeContract = useEthereumTokenBridgeContract(); + const getStarknetTokenBridgeContract = useStarknetTokenBridgeContract(); const {isEthereum} = useTransferData(); - return useMemo( - () => (isEthereum ? tokenBridgeContract : starknetTokenBridgeContract), + return useCallback( + bridgeAddress => + isEthereum + ? getTokenBridgeContract(bridgeAddress) + : getStarknetTokenBridgeContract(bridgeAddress), [isEthereum] ); }; -export const useStarknetTokenContract = tokenAddresses => - useContract(tokenAddresses, STARKNET_ERC20_ABI, starknet_getContract); - -export const useStarknetTokenContracts = tokensAddresses => - useContracts(tokensAddresses, STARKNET_ERC20_ABI, starknet_getContract); - -export const useEthereumTokenContract = tokenAddresses => useContract(tokenAddresses, ERC20_ABI); +export const useStarknetTokenContract = () => { + const getContract = useContract(STARKNET_ERC20_ABI, starknet_getContract); + return useCallback(tokenAddresses => getContract(tokenAddresses), []); +}; +export const useStarknetTokenContracts = () => { + const getContracts = useContracts(STARKNET_ERC20_ABI, starknet_getContract); + return useCallback(tokensAddresses => getContracts(tokensAddresses), []); +}; +export const useEthereumTokenContract = () => { + const getContract = useContract(ERC20_ABI); + return useCallback(tokenAddresses => getContract(tokenAddresses), []); +}; -export const useEthereumTokenContracts = tokensAddresses => - useContracts(tokensAddresses, ERC20_ABI); +export const useEthereumTokenContracts = () => { + const getContracts = useContracts(ERC20_ABI); + return useCallback(tokensAddresses => getContracts(tokensAddresses), []); +}; -export const useEthBridgeContract = () => useContract(ETH_BRIDGE_CONTRACT_ADDRESS, ETH_BRIDGE_ABI); +export const useEthBridgeContract = () => { + const getContract = useContract(ETH_BRIDGE_ABI); + return useMemo(() => getContract(ETH_BRIDGE_CONTRACT_ADDRESS), []); +}; -export const useMessagingContract = () => useContract(MESSAGING_CONTRACT_ADDRESS, MESSAGING_ABI); +export const useMessagingContract = () => { + const getContract = useContract(MESSAGING_ABI); + return useMemo(() => getContract(MESSAGING_CONTRACT_ADDRESS), []); +}; -export const useStarknetTokenBridgeContract = bridgeAddress => - useContract(bridgeAddress, STARKNET_BRIDGE_ABI, starknet_getContract); +export const useStarknetTokenBridgeContract = () => { + const getContract = useContract(STARKNET_BRIDGE_ABI, starknet_getContract); + return useCallback(bridgeAddress => getContract(bridgeAddress), []); +}; -export const useEthereumTokenBridgeContract = bridgeAddress => - useContract(bridgeAddress, ERC20_BRIDGE_ABI); +export const useEthereumTokenBridgeContract = () => { + const getContract = useContract(ERC20_BRIDGE_ABI); + return useCallback(bridgeAddress => getContract(bridgeAddress), []); +}; diff --git a/src/hooks/useTokenBalance.js b/src/hooks/useTokenBalance.js index 406e7dee..8955eb10 100644 --- a/src/hooks/useTokenBalance.js +++ b/src/hooks/useTokenBalance.js @@ -1,55 +1,37 @@ import {useCallback} from 'react'; -import {eth_ethBalanceOf, balanceOf} from '../api/erc20'; +import {balanceOf, eth_ethBalanceOf} from '../api/erc20'; import {useTransferData} from '../components/Features/Transfer/Transfer/Transfer.hooks'; -import { - useEthereumTokenContract, - useEthereumTokenContracts, - useStarknetTokenContract, - useStarknetTokenContracts -} from './useContract'; +import {useEthereumTokenContract, useStarknetTokenContract} from './useContract'; -export const useTokenBalance = (tokenAddresses, account) => { - const getStarknetBalanceCallback = useStarknetTokenBalance(tokenAddresses, account); - const getEthereumBalanceCallback = useEthereumTokenBalance(tokenAddresses, account); +export const useTokenBalance = account => { + const getStarknetTokenBalance = useStarknetTokenBalance(account); + const getEthereumTokenBalance = useEthereumTokenBalance(account); const {isEthereum} = useTransferData(); return useCallback( - () => (isEthereum ? getEthereumBalanceCallback() : getStarknetBalanceCallback()), - [isEthereum, tokenAddresses, account] + tokenAddresses => + isEthereum + ? getEthereumTokenBalance(tokenAddresses) + : getStarknetTokenBalance(tokenAddresses), + [isEthereum, account] ); }; -export const useStarknetTokenBalance = (tokenAddresses, account) => { - const contract = useStarknetTokenContract(tokenAddresses); +export const useStarknetTokenBalance = account => { + const getContract = useStarknetTokenContract(); return useCallback( - async () => await balanceOf(account, contract, false), - [tokenAddresses, account] + async tokenAddresses => await balanceOf(account, getContract(tokenAddresses), false), + [account] ); }; -export const useEthereumTokenBalance = (tokenAddresses, account) => { - const contract = useEthereumTokenContract(tokenAddresses); +export const useEthereumTokenBalance = account => { + const getContract = useEthereumTokenContract(); return useCallback( - async () => - tokenAddresses ? await balanceOf(account, contract, true) : await eth_ethBalanceOf(account), - [tokenAddresses, account] - ); -}; - -export const useEthereumTokensBalances = (tokensAddresses, account) => { - const contracts = useEthereumTokenContracts(tokensAddresses); - return contracts.map(contract => - useCallback( - async () => - contract ? await balanceOf(account, contract, true) : await eth_ethBalanceOf(account), - [tokensAddresses, account] - ) - ); -}; - -export const useStarknetTokensBalances = (tokensAddresses, account) => { - const contracts = useStarknetTokenContracts(tokensAddresses); - return contracts.map(contract => - useCallback(async () => await balanceOf(account, contract, false), [tokensAddresses, account]) + async tokenAddresses => + tokenAddresses + ? await balanceOf(account, getContract(tokenAddresses), true) + : await eth_ethBalanceOf(account), + [account] ); }; diff --git a/src/hooks/useTransfer.js b/src/hooks/useTransfer.js index 0bc6d4c0..013ca454 100644 --- a/src/hooks/useTransfer.js +++ b/src/hooks/useTransfer.js @@ -1,7 +1,8 @@ import {useCallback, useState} from 'react'; -import {eth_depositEth, eth_deposit, starknet_initiateWithdraw, eth_withdraw} from '../api/bridge'; +import {eth_deposit, eth_depositEth, eth_withdraw, starknet_initiateWithdraw} from '../api/bridge'; import {approve} from '../api/erc20'; +import {useTransferData} from '../components/Features/Transfer/Transfer/Transfer.hooks'; import {useEthereumToken} from '../providers/TokensProvider/hooks'; import {useStarknetWallet, useWallets} from '../providers/WalletsProvider/hooks'; import {isEth} from '../utils'; @@ -23,9 +24,9 @@ const PROGRESS = { type: 'Deposit in progress', message: `Depositing ${amount} ${symbol} to StarkNet` }), - initiateWithdraw: (amount, symbol, sender) => ({ + initiateWithdraw: (amount, symbol) => ({ type: 'Initiate withdrawal', - message: `Initiating withdrawal of ${amount} ${symbol} from ${sender}` + message: `Initiating withdrawal of ${amount} ${symbol}` }), waitForAccept: () => ({ type: 'Transaction received', @@ -48,6 +49,7 @@ export const useTransfer = () => { const [error, setError] = useState(null); const {account: ethereumAccount, chainId} = useWallets(); const {account: starknetAccount} = useStarknetWallet(); + const {selectedToken} = useTransferData(); const ethBridgeContract = useEthBridgeContract(); const messagingContract = useMessagingContract(); const getTokenContract = useTokenContract(); @@ -85,14 +87,13 @@ export const useTransfer = () => { }; const transferToStarknet = async ( - tokenData, amount, depositHandler, bridgeContract, tokenContract, withApproval ) => { - const {bridgeAddress, symbol} = tokenData; + const {bridgeAddress, symbol} = selectedToken; resetState(); try { setIsLoading(true); @@ -122,17 +123,16 @@ export const useTransfer = () => { }; const transferFromStarknet = async ( - tokenData, amount, bridgeContract, tokenContract, ethereumBridgeContract ) => { - const {symbol} = tokenData; + const {symbol} = selectedToken; resetState(); try { setIsLoading(true); - setProgress(PROGRESS.initiateWithdraw(amount, symbol, starknetAccount)); + setProgress(PROGRESS.initiateWithdraw(amount, symbol)); const initiateWithdrawTxResponse = await starknet_initiateWithdraw( ethereumAccount, amount, @@ -165,8 +165,8 @@ export const useTransfer = () => { }; const transferTokenFromStarknet = useCallback( - async (tokenData, amount) => { - const {tokenAddress, bridgeAddress, symbol} = tokenData; + async amount => { + const {tokenAddress, bridgeAddress, symbol} = selectedToken; const ethereumToken = getEthereumToken(symbol); const tokenContract = getTokenContract(tokenAddress); const tokenBridgeContract = getTokenBridgeContract(bridgeAddress); @@ -174,7 +174,6 @@ export const useTransfer = () => { ethereumToken.bridgeAddress ); return await transferFromStarknet( - tokenData, amount, tokenBridgeContract, tokenContract, @@ -184,34 +183,27 @@ export const useTransfer = () => { [ethereumAccount, starknetAccount] ); - const transferEthToStarknet = useCallback( - async (tokenData, amount) => { - if (!isEth(tokenData)) return; - return await transferToStarknet(amount, eth_depositEth, ethBridgeContract, null, false); - }, - [ethereumAccount, starknetAccount] - ); - const transferTokenToStarknet = useCallback( - async (tokenData, amount) => { - const {tokenAddress, bridgeAddress} = tokenData; - const tokenContract = getTokenContract(tokenAddress); - const tokenBridgeContract = getTokenBridgeContract(bridgeAddress); - return await transferToStarknet( - tokenData, - amount, - eth_deposit, - tokenBridgeContract, - tokenContract, - true - ); + async amount => { + if (!isEth(selectedToken)) { + const {tokenAddress, bridgeAddress} = selectedToken; + const tokenContract = getTokenContract(tokenAddress); + const tokenBridgeContract = getTokenBridgeContract(bridgeAddress); + return await transferToStarknet( + amount, + eth_deposit, + tokenBridgeContract, + tokenContract, + true + ); + } + return await transferToStarknet(amount, eth_depositEth, ethBridgeContract, null, false); }, - [ethereumAccount, starknetAccount] + [ethereumAccount, starknetAccount, selectedToken] ); return { transferTokenToStarknet, - transferEthToStarknet, transferTokenFromStarknet, isLoading, progress, diff --git a/src/hooks/useTransferFromStarknet.js b/src/hooks/useTransferFromStarknet.js deleted file mode 100644 index b257a0fd..00000000 --- a/src/hooks/useTransferFromStarknet.js +++ /dev/null @@ -1,111 +0,0 @@ -import {useState} from 'react'; - -import {starknet_initiateWithdraw, eth_withdraw} from '../api/bridge'; -import {useEthereumToken} from '../providers/TokensProvider/hooks'; -import {useEthereumWallet, useWallets} from '../providers/WalletsProvider/hooks'; -import {eth_listenOnce, starknet_waitForTransaction} from '../utils/contract'; -import { - useEthereumTokenBridgeContract, - useMessagingContract, - useTokenBridgeContract, - useTokenContract -} from './useContract'; - -const PROGRESS = { - initiateWithdraw: (amount, symbol, sender) => ({ - type: 'Withdrawing from L2', - message: `Initiating withdraw of ${amount} ${symbol} from ${sender}` - }), - waitForAccept: () => ({ - type: 'Transaction received', - message: `Waiting for transaction to be accepted on L2` - }), - waitForEvent: () => ({ - type: 'Accepted on L2', - message: 'Waiting for message to be received on L1' - }), - withdraw: (amount, symbol, recipient) => ({ - type: 'Withdrawing from bridge contract', - message: `Withdrawing ${amount} ${symbol} to ${recipient}` - }) -}; - -export const useTransferFromStarknet = tokenData => { - const {tokenAddress, bridgeAddress, symbol} = tokenData; - const [isLoading, setIsLoading] = useState(false); - const [data, setData] = useState(null); - const [progress, setProgress] = useState(null); - const [error, setError] = useState(null); - const {account: starknetAccount} = useWallets(); - const {account: ethereumAccount} = useEthereumWallet(); - const tokenContract = useTokenContract(tokenAddress); - const starknetTokenBridgeContract = useTokenBridgeContract(bridgeAddress); - const getEthereumToken = useEthereumToken(); - const ethereumToken = getEthereumToken(symbol); - const ethereumTokenBridgeContract = useEthereumTokenBridgeContract(ethereumToken.bridgeAddress); - const messagingContract = useMessagingContract(); - - const waitForLogMessageToL1 = () => { - return new Promise((resolve, reject) => { - eth_listenOnce(messagingContract, 'LogMessageToL1', (error, event) => { - if (error) { - reject(error); - } - resolve(event); - }); - }); - }; - - const transferFromStarknet = async amount => { - setError(null); - setData(null); - setProgress(null); - setIsLoading(false); - try { - setIsLoading(true); - - setProgress(PROGRESS.initiateWithdraw(amount, symbol, starknetAccount)); - const initiateWithdrawTxResponse = await starknet_initiateWithdraw( - ethereumAccount, - amount, - starknetTokenBridgeContract, - tokenContract - ); - - const waitForAcceptPromise = starknet_waitForTransaction( - initiateWithdrawTxResponse.transaction_hash - ); - - const waitForMsgPromise = waitForLogMessageToL1(); - - setProgress(PROGRESS.waitForAccept()); - await waitForAcceptPromise; - - setProgress(PROGRESS.waitForEvent()); - await waitForMsgPromise; - - setProgress(PROGRESS.withdraw(amount, symbol, ethereumAccount)); - const withdrawReceipt = await eth_withdraw( - ethereumAccount, - amount, - ethereumTokenBridgeContract, - tokenContract - ); - setIsLoading(false); - setProgress(null); - setData([{}, withdrawReceipt]); - } catch (ex) { - setIsLoading(false); - setProgress(null); - setError(ex); - } - }; - - return { - isLoading, - progress, - error, - data, - transferFromStarknet - }; -}; diff --git a/src/hooks/useTransferToStarknet.js b/src/hooks/useTransferToStarknet.js deleted file mode 100644 index 3d105efb..00000000 --- a/src/hooks/useTransferToStarknet.js +++ /dev/null @@ -1,99 +0,0 @@ -import {useCallback, useState} from 'react'; - -import {eth_depositEth, eth_deposit} from '../api/bridge'; -import {approve} from '../api/erc20'; -import {useStarknetWallet, useWallets} from '../providers/WalletsProvider/hooks'; -import {eth_listenOnce} from '../utils/contract'; -import { - useEthBridgeContract, - useMessagingContract, - useTokenBridgeContract, - useTokenContract -} from './useContract'; - -const PROGRESS = { - approval: symbol => ({ - type: 'approval', - message: `Requesting permission to access your ${symbol} funds` - }), - deposit: (amount, symbol) => ({ - type: 'deposit', - message: `Depositing ${amount} ${symbol} to StarkNet` - }) -}; - -export const useTransferToStarknet = tokenData => { - const {tokenAddress, bridgeAddress, symbol} = tokenData; - const [isLoading, setIsLoading] = useState(false); - const [data, setData] = useState(null); - const [progress, setProgress] = useState(null); - const [error, setError] = useState(null); - const {account: ethereumAccount, chainId} = useWallets(); - const {account: starknetAccount} = useStarknetWallet(); - const tokenContract = useTokenContract(tokenAddress); - const tokenBridgeContract = useTokenBridgeContract(bridgeAddress); - const ethBridgeContract = useEthBridgeContract(); - const messagingContract = useMessagingContract(); - - const transferEthToStarknet = useCallback( - async amount => transferToStarknet(amount, eth_depositEth, ethBridgeContract, false), - [ethereumAccount, starknetAccount, tokenContract] - ); - - const transferTokenToStarknet = useCallback( - async amount => transferToStarknet(amount, eth_deposit, tokenBridgeContract, true), - [ethereumAccount, starknetAccount, tokenContract] - ); - - const waitForLogMessageToL2 = () => { - return new Promise((resolve, reject) => { - eth_listenOnce(messagingContract, 'LogMessageToL2', (error, event) => { - if (error) { - reject(error); - } - resolve(event); - }); - }); - }; - - const transferToStarknet = async (amount, depositHandler, bridgeContract, withApproval) => { - setError(null); - setData(null); - setProgress(null); - setIsLoading(false); - try { - setIsLoading(true); - let approvalPromise = Promise.resolve(); - if (withApproval) { - setProgress(PROGRESS.approval(symbol)); - approvalPromise = approve(bridgeAddress[chainId], amount, tokenContract, ethereumAccount); - } - await approvalPromise; - setProgress(PROGRESS.deposit(amount, symbol)); - const depositPromise = depositHandler( - starknetAccount, - amount, - bridgeContract, - ethereumAccount - ); - const depositEventPromise = waitForLogMessageToL2(); - const results = await Promise.all([depositPromise, depositEventPromise]); - setIsLoading(false); - setProgress(null); - setData(results); - } catch (ex) { - setIsLoading(false); - setProgress(null); - setError(ex); - } - }; - - return { - isLoading, - progress, - error, - data, - transferTokenToStarknet, - transferEthToStarknet - }; -}; diff --git a/src/providers/TokensProvider/TokensProvider.js b/src/providers/TokensProvider/TokensProvider.js index 3e189cdd..c27a61e9 100644 --- a/src/providers/TokensProvider/TokensProvider.js +++ b/src/providers/TokensProvider/TokensProvider.js @@ -1,7 +1,7 @@ import PropTypes from 'prop-types'; import React, {useEffect, useReducer} from 'react'; -import {useEthereumTokensBalances, useStarknetTokensBalances} from '../../hooks/useTokenBalance'; +import {useEthereumTokenBalance, useStarknetTokenBalance} from '../../hooks/useTokenBalance'; import {useEthereumWallet, useStarknetWallet} from '../WalletsProvider/hooks'; import {TokensContext} from './context'; import {actions, initialState, reducer} from './reducer'; @@ -10,14 +10,8 @@ export const TokensProvider = ({children}) => { const [state, dispatch] = useReducer(reducer, initialState); const {account: ethereumAccount} = useEthereumWallet(); const {account: starknetAccount} = useStarknetWallet(); - const getEthereumBalances = useEthereumTokensBalances( - state.ethereumTokens.map(token => token.tokenAddress), - ethereumAccount - ); - const getStarknetBalances = useStarknetTokensBalances( - state.starknetTokens.map(token => token.tokenAddress), - starknetAccount - ); + const getEthereumTokenBalance = useEthereumTokenBalance(ethereumAccount); + const getStarknetTokenBalance = useStarknetTokenBalance(starknetAccount); useEffect(() => { fetchEthereumBalances(); @@ -25,18 +19,17 @@ export const TokensProvider = ({children}) => { }, []); const fetchEthereumBalances = () => { - fetchTokensBalances(state.ethereumTokens, getEthereumBalances, updateEthereumTokenState); + fetchTokensBalances(state.ethereumTokens, getEthereumTokenBalance, updateEthereumTokenState); }; const fetchStarknetBalances = () => { - fetchTokensBalances(state.starknetTokens, getStarknetBalances, updateStarknetTokenState); + fetchTokensBalances(state.starknetTokens, getStarknetTokenBalance, updateStarknetTokenState); }; - const fetchTokensBalances = (tokens, getBalances, updateState) => { + const fetchTokensBalances = (tokens, getBalance, updateState) => { for (let index = 0; index < tokens.length; index++) { - const getBalance = getBalances[index]; updateState(index, {isLoading: true}); - getBalance() + getBalance(tokens[index].tokenAddress) .then(balance => { updateState(index, {balance, isLoading: false}); }) From ca88428415a9b611c4abbeb210c3d386bb3415ed Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Sun, 19 Dec 2021 01:35:40 +0200 Subject: [PATCH 021/211] refactor: move logic to transfer component [skip ci] --- .../SelectToken/SelectToken/SelectToken.js | 3 +- .../Transfer/NetworkMenu/NetworkMenu.js | 87 +-------------- .../NetworkMenu/NetworkMenu.module.scss | 7 -- .../NetworkMenu/NetworkMenu.strings.js | 1 - .../Transfer/Transfer/Transfer.hooks.js | 44 ++++---- .../Features/Transfer/Transfer/Transfer.js | 101 +++++++++++++----- .../Transfer/Transfer/Transfer.module.scss | 7 ++ .../Transfer/Transfer/Transfer.selectors.js | 14 +-- .../Transfer/Transfer/Transfer.slice.js | 7 +- .../Transfer/Transfer/Transfer.strings.js | 1 + src/hooks/useTransfer.js | 4 +- 11 files changed, 118 insertions(+), 158 deletions(-) create mode 100644 src/components/Features/Transfer/Transfer/Transfer.strings.js diff --git a/src/components/Features/SelectToken/SelectToken/SelectToken.js b/src/components/Features/SelectToken/SelectToken/SelectToken.js index ecda5008..47108922 100644 --- a/src/components/Features/SelectToken/SelectToken/SelectToken.js +++ b/src/components/Features/SelectToken/SelectToken/SelectToken.js @@ -25,7 +25,8 @@ export const SelectToken = () => { }, [tokens]); const onTokenSelect = tokenData => { - selectToken(tokenData); + const {symbol} = tokenData; + selectToken(symbol); showTransferMenu(); }; diff --git a/src/components/Features/Transfer/NetworkMenu/NetworkMenu.js b/src/components/Features/Transfer/NetworkMenu/NetworkMenu.js index 45aa646c..37593b0d 100644 --- a/src/components/Features/Transfer/NetworkMenu/NetworkMenu.js +++ b/src/components/Features/Transfer/NetworkMenu/NetworkMenu.js @@ -1,24 +1,13 @@ import PropTypes from 'prop-types'; -import React, {useEffect, useState} from 'react'; +import React from 'react'; import {Badge} from '../../../UI'; -import {useBridgeActions} from '../../Bridge/Bridge.hooks'; import {NetworkTitle} from '../NetworkTitle/NetworkTitle'; import {TokenBalance} from '../TokenBalance/TokenBalance'; -import {TokenInput} from '../TokenInput/TokenInput'; -import {useAmount} from '../Transfer/Transfer.hooks'; -import {TransferButton} from '../TransferButton/TransferButton'; import styles from './NetworkMenu.module.scss'; -import {FROM, INSUFFICIENT_BALANCE_ERROR_MSG, TO} from './NetworkMenu.strings'; +import {FROM, TO} from './NetworkMenu.strings'; -export const NetworkMenu = ({ - networkData, - tokenData, - isTarget, - isTransferring, - onTransferClick, - children -}) => { +export const NetworkMenu = ({networkData, tokenData, isTarget, children}) => { return ( <div className={styles.networkMenu}> <Badge text={isTarget ? TO : FROM} /> @@ -26,16 +15,7 @@ export const NetworkMenu = ({ <NetworkTitle networkData={networkData} /> <TokenBalance tokenData={tokenData} /> </div> - <div className={styles.transferContainer}> - {!isTarget && ( - <TransferContainer - isTransferring={isTransferring} - tokenData={tokenData} - onTransferClick={onTransferClick} - /> - )} - </div> - {children} + <div className={styles.transferContainer}>{children}</div> </div> ); }; @@ -44,62 +24,5 @@ NetworkMenu.propTypes = { networkData: PropTypes.object, tokenData: PropTypes.object, isTarget: PropTypes.bool, - isTransferring: PropTypes.bool, - onTransferClick: PropTypes.func, - children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) -}; - -const TransferContainer = ({tokenData, isTransferring, onTransferClick}) => { - const [amount, setAmount] = useAmount(); - const {showSelectTokenMenu} = useBridgeActions(); - const [hasInputError, setHasInputError] = useState(false); - const [isButtonDisabled, setIsButtonDisabled] = useState(true); - const {balance} = tokenData; - - useEffect(() => { - setHasInputError(false); - if (tokenData.isLoading || Math.ceil(amount) === 0) { - setIsButtonDisabled(true); - } else { - if (amount > balance) { - setHasInputError(true); - setIsButtonDisabled(true); - } else { - setIsButtonDisabled(false); - } - } - }, [amount, balance]); - - const onMaxClick = () => { - setAmount(balance); - }; - - const onInputChange = event => { - setAmount(event.target.value); - }; - - return ( - <> - <TokenInput - hasError={hasInputError} - tokenData={tokenData} - value={amount} - onInputChange={onInputChange} - onMaxClick={onMaxClick} - onTokenSelect={showSelectTokenMenu} - /> - {hasInputError && <div className={styles.errorMsg}>{INSUFFICIENT_BALANCE_ERROR_MSG}</div>} - <TransferButton - isDisabled={isButtonDisabled} - isLoading={isTransferring} - onClick={onTransferClick} - /> - </> - ); -}; - -TransferContainer.propTypes = { - tokenData: PropTypes.object, - isTransferring: PropTypes.bool, - onTransferClick: PropTypes.func + children: PropTypes.any }; diff --git a/src/components/Features/Transfer/NetworkMenu/NetworkMenu.module.scss b/src/components/Features/Transfer/NetworkMenu/NetworkMenu.module.scss index 72c90b19..697d0b75 100644 --- a/src/components/Features/Transfer/NetworkMenu/NetworkMenu.module.scss +++ b/src/components/Features/Transfer/NetworkMenu/NetworkMenu.module.scss @@ -2,7 +2,6 @@ $background-color: $--color-alpha-1; $box-shadow-color: rgba(0, 0, 0, 0.1); -$error-msg-color: $--color-error; .networkMenu { background: $background-color; @@ -23,11 +22,5 @@ $error-msg-color: $--color-error; display: flex; flex-direction: column; transition: 0.3s ease-in-out; - - .errorMsg { - font-size: 12px; - line-height: 24px; - color: $error-msg-color; - } } } diff --git a/src/components/Features/Transfer/NetworkMenu/NetworkMenu.strings.js b/src/components/Features/Transfer/NetworkMenu/NetworkMenu.strings.js index 9e644fbe..d782a5d5 100644 --- a/src/components/Features/Transfer/NetworkMenu/NetworkMenu.strings.js +++ b/src/components/Features/Transfer/NetworkMenu/NetworkMenu.strings.js @@ -1,3 +1,2 @@ export const TO = 'to'; export const FROM = 'from'; -export const INSUFFICIENT_BALANCE_ERROR_MSG = 'Insufficient balance'; diff --git a/src/components/Features/Transfer/Transfer/Transfer.hooks.js b/src/components/Features/Transfer/Transfer/Transfer.hooks.js index b163ef15..0d504e16 100644 --- a/src/components/Features/Transfer/Transfer/Transfer.hooks.js +++ b/src/components/Features/Transfer/Transfer/Transfer.hooks.js @@ -1,4 +1,4 @@ -import {useCallback} from 'react'; +import {useCallback, useMemo} from 'react'; import {useDispatch, useSelector} from 'react-redux'; import {ActionType} from '../../../../enums'; @@ -7,7 +7,7 @@ import { fromNetworkSelector, fromStarknetSelector, getCurrentAmountSelector, - getCurrentSelectedTokenSelector, + selectSymbol, selectTransfer, toNetworkSelector, toStarknetSelector @@ -21,14 +21,27 @@ export const useTransferActions = () => ({ resetTransfer: useResetTransfer() }); -export const useTransferData = () => ({ - ...useSelector(selectTransfer), - selectedToken: useSelector(getCurrentSelectedTokenSelector), - isEthereum: useSelector(toStarknetSelector), - isStarknet: useSelector(fromStarknetSelector), - fromNetwork: useSelector(fromNetworkSelector), - toNetwork: useSelector(toNetworkSelector) -}); +export const useTransferData = () => { + return { + ...useSelector(selectTransfer), + selectedToken: useSelectedToken(), + isEthereum: useSelector(toStarknetSelector), + isStarknet: useSelector(fromStarknetSelector), + fromNetwork: useSelector(fromNetworkSelector), + toNetwork: useSelector(toNetworkSelector) + }; +}; + +export const useSelectedToken = () => { + const symbol = useSelector(selectSymbol); + const isEthereum = useSelector(toStarknetSelector); + const getEthereumToken = useEthereumToken(); + const getStarknetToken = useStarknetToken(); + return useMemo( + () => (isEthereum ? getEthereumToken(symbol) : getStarknetToken(symbol)), + [symbol, isEthereum] + ); +}; export const useAmount = () => { const amount = useSelector(getCurrentAmountSelector); @@ -68,16 +81,9 @@ const useSetActionType = action => { const useSelectToken = () => { const dispatch = useDispatch(); - const setStarknetToken = useStarknetToken(); - const getEthereumToken = useEthereumToken(); return useCallback( - token => { - dispatch( - selectTokenAction({ - selectedStarknetToken: setStarknetToken(token.symbol), - selectedEthereumToken: getEthereumToken(token.symbol) - }) - ); + symbol => { + dispatch(selectTokenAction(symbol)); }, [dispatch] ); diff --git a/src/components/Features/Transfer/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer/Transfer.js index 47f758d3..336437f5 100644 --- a/src/components/Features/Transfer/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer/Transfer.js @@ -1,4 +1,4 @@ -import React, {useEffect} from 'react'; +import React, {useEffect, useState} from 'react'; import {ActionType, NetworkType} from '../../../../enums'; import {useTransfer} from '../../../../hooks'; @@ -9,6 +9,7 @@ import { } from '../../../../providers/TokensProvider/hooks'; import {Loading, Menu} from '../../../UI'; import {LoadingSize} from '../../../UI/Loading/Loading.enums'; +import {useBridgeActions} from '../../Bridge/Bridge.hooks'; import { useHideModal, useProgressModal, @@ -16,6 +17,8 @@ import { } from '../../ModalProvider/ModalProvider.hooks'; import {NetworkMenu} from '../NetworkMenu/NetworkMenu'; import {NetworkSwap} from '../NetworkSwap/NetworkSwap'; +import {TokenInput} from '../TokenInput/TokenInput'; +import {TransferButton} from '../TransferButton/TransferButton'; import {TransferMenuTab} from '../TransferMenuTab/TransferMenuTab'; import { useAmount, @@ -25,24 +28,30 @@ import { useTransferData } from './Transfer.hooks'; import styles from './Transfer.module.scss'; +import {INSUFFICIENT_BALANCE_ERROR_MSG} from './Transfer.strings'; export const Transfer = () => { const [isEthereum, setEthereum] = useIsEthereum(); const [isStarknet, setStarknet] = useIsStarknet(); - const [amount, , clearAmount] = useAmount(); + const [amount, setAmount, clearAmount] = useAmount(); + const [hasInputError, setHasInputError] = useState(false); + const [isButtonDisabled, setIsButtonDisabled] = useState(true); + const {showSelectTokenMenu} = useBridgeActions(); const {selectedToken, action} = useTransferData(); const {selectToken} = useTransferActions(); + const {transferTokenToStarknet, transferTokenFromStarknet, data, error, isLoading, progress} = + useTransfer(); const tokens = useTokens(); const hideModal = useHideModal(); const showProgressModal = useProgressModal(); const showTransactionSubmittedModal = useTransactionSubmittedModal(); const getEthereumToken = useEthereumToken(); const getStarknetToken = useStarknetToken(); - const {transferTokenToStarknet, transferTokenFromStarknet, data, error, isLoading, progress} = - useTransfer(); useEffect(() => { - !selectedToken && selectToken(tokens[0]); + if (!selectedToken) { + selectToken(tokens[0].symbol); + } }, []); useEffect(() => { @@ -52,12 +61,44 @@ export const Transfer = () => { // TODO: show error modal hideModal(); } else if (data) { + // TODO: save tx in local storage const [receipt, event] = data; clearAmount(); showTransactionSubmittedModal(receipt.transactionHash); } }, [progress, data, error, isLoading, amount]); + useEffect(() => { + if (selectedToken) { + setHasInputError(false); + if (selectedToken.isLoading || Math.ceil(amount) === 0) { + setIsButtonDisabled(true); + } else { + if (amount > selectedToken.balance) { + setHasInputError(true); + setIsButtonDisabled(true); + } else { + setIsButtonDisabled(false); + } + } + } + }, [amount, selectedToken]); + + const onMaxClick = () => { + setAmount(selectedToken.balance); + }; + + const onInputChange = event => { + setAmount(event.target.value); + }; + + const onSwapClick = () => { + isStarknet ? setEthereum() : setStarknet(); + }; + + const onTransferClick = async () => + isEthereum ? transferTokenToStarknet(amount) : transferTokenFromStarknet(amount); + const renderTabs = () => { return Object.values(ActionType).map((tab, index) => { return ( @@ -75,38 +116,42 @@ export const Transfer = () => { }); }; - const onSwapClick = () => { - isStarknet ? setEthereum() : setStarknet(); - }; - - const onTransferClick = async () => { - debugger; - return isEthereum ? transferTokenToStarknet(amount) : transferTokenFromStarknet(amount); - }; - const renderEthereumNetwork = () => { const tokenData = getEthereumToken(selectedToken.symbol); return ( - <NetworkMenu - isTarget={!isEthereum} - isTransferring={isLoading} - networkData={NetworkType.ETHEREUM} - tokenData={tokenData} - onTransferClick={onTransferClick} - /> + <NetworkMenu isTarget={!isEthereum} networkData={NetworkType.ETHEREUM} tokenData={tokenData}> + {isEthereum && renderTransferInput()} + </NetworkMenu> ); }; const renderStarknetNetwork = () => { const tokenData = getStarknetToken(selectedToken.symbol); return ( - <NetworkMenu - isTarget={!isStarknet} - isTransferring={isLoading} - networkData={NetworkType.STARKNET} - tokenData={tokenData} - onTransferClick={onTransferClick} - /> + <NetworkMenu isTarget={!isStarknet} networkData={NetworkType.STARKNET} tokenData={tokenData}> + {isStarknet && renderTransferInput()} + </NetworkMenu> + ); + }; + + const renderTransferInput = () => { + return ( + <> + <TokenInput + hasError={hasInputError} + tokenData={selectedToken} + value={amount} + onInputChange={onInputChange} + onMaxClick={onMaxClick} + onTokenSelect={showSelectTokenMenu} + /> + {hasInputError && <div className={styles.errorMsg}>{INSUFFICIENT_BALANCE_ERROR_MSG}</div>} + <TransferButton + isDisabled={isButtonDisabled} + isLoading={isLoading} + onClick={onTransferClick} + /> + </> ); }; diff --git a/src/components/Features/Transfer/Transfer/Transfer.module.scss b/src/components/Features/Transfer/Transfer/Transfer.module.scss index 56d67cfd..3ac73c4a 100644 --- a/src/components/Features/Transfer/Transfer/Transfer.module.scss +++ b/src/components/Features/Transfer/Transfer/Transfer.module.scss @@ -1,6 +1,7 @@ @import '../../../../index'; $background-color: $--color-alpha-1; +$error-msg-color: $--color-error; .transfer { .tabsContainer { @@ -9,4 +10,10 @@ $background-color: $--color-alpha-1; border-radius: 10px; padding: 10px; } + + .errorMsg { + font-size: 12px; + line-height: 24px; + color: $error-msg-color; + } } diff --git a/src/components/Features/Transfer/Transfer/Transfer.selectors.js b/src/components/Features/Transfer/Transfer/Transfer.selectors.js index 9ab837f0..ca064959 100644 --- a/src/components/Features/Transfer/Transfer/Transfer.selectors.js +++ b/src/components/Features/Transfer/Transfer/Transfer.selectors.js @@ -6,9 +6,7 @@ export const selectTransfer = state => state.transfer; export const selectTransferAction = state => state.transfer.action; -export const selectEthereumToken = state => state.transfer.selectedEthereumToken; - -export const selectStarknetToken = state => state.transfer.selectedStarknetToken; +export const selectSymbol = state => state.transfer.symbol; export const selectWithdrawAmount = state => state.transfer.withdrawAmount; @@ -41,13 +39,3 @@ export const getCurrentAmountSelector = createSelector( return withdrawAmount; } ); - -export const getCurrentSelectedTokenSelector = createSelector( - [selectTransferAction, selectEthereumToken, selectStarknetToken], - (action, ethereumToken, starknetToken) => { - if (action === ActionType.TRANSFER_TO_STARKNET) { - return ethereumToken; - } - return starknetToken; - } -); diff --git a/src/components/Features/Transfer/Transfer/Transfer.slice.js b/src/components/Features/Transfer/Transfer/Transfer.slice.js index 68eb18a0..99a8bbc0 100644 --- a/src/components/Features/Transfer/Transfer/Transfer.slice.js +++ b/src/components/Features/Transfer/Transfer/Transfer.slice.js @@ -4,8 +4,7 @@ import {ActionType} from '../../../../enums'; const initialState = { action: ActionType.TRANSFER_TO_STARKNET, - selectedEthereumToken: null, - selectedStarknetToken: null, + symbol: '', depositAmount: '', withdrawAmount: '' }; @@ -18,9 +17,7 @@ const transferSlice = createSlice({ state.action = action.payload; }, selectTokenAction(state, action) { - const {selectedStarknetToken, selectedEthereumToken} = action.payload; - state.selectedEthereumToken = selectedEthereumToken; - state.selectedStarknetToken = selectedStarknetToken; + state.symbol = action.payload; }, setAmountAction(state, action) { if (state.action === ActionType.TRANSFER_TO_STARKNET) { diff --git a/src/components/Features/Transfer/Transfer/Transfer.strings.js b/src/components/Features/Transfer/Transfer/Transfer.strings.js new file mode 100644 index 00000000..4ce0ec4d --- /dev/null +++ b/src/components/Features/Transfer/Transfer/Transfer.strings.js @@ -0,0 +1 @@ +export const INSUFFICIENT_BALANCE_ERROR_MSG = 'Insufficient balance'; diff --git a/src/hooks/useTransfer.js b/src/hooks/useTransfer.js index 013ca454..f9a661bd 100644 --- a/src/hooks/useTransfer.js +++ b/src/hooks/useTransfer.js @@ -2,7 +2,7 @@ import {useCallback, useState} from 'react'; import {eth_deposit, eth_depositEth, eth_withdraw, starknet_initiateWithdraw} from '../api/bridge'; import {approve} from '../api/erc20'; -import {useTransferData} from '../components/Features/Transfer/Transfer/Transfer.hooks'; +import {useSelectedToken} from '../components/Features/Transfer/Transfer/Transfer.hooks'; import {useEthereumToken} from '../providers/TokensProvider/hooks'; import {useStarknetWallet, useWallets} from '../providers/WalletsProvider/hooks'; import {isEth} from '../utils'; @@ -49,7 +49,7 @@ export const useTransfer = () => { const [error, setError] = useState(null); const {account: ethereumAccount, chainId} = useWallets(); const {account: starknetAccount} = useStarknetWallet(); - const {selectedToken} = useTransferData(); + const selectedToken = useSelectedToken(); const ethBridgeContract = useEthBridgeContract(); const messagingContract = useMessagingContract(); const getTokenContract = useTokenContract(); From 0161cff7d01f7b1b9042f8e0770365708776a241 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Sun, 19 Dec 2021 10:50:03 +0200 Subject: [PATCH 022/211] refactor: move components to UI folder [skip ci] --- src/components/Containers/Header/Header.js | 8 ++--- src/components/Containers/Main/Main.js | 7 ++--- .../{Account => }/Account.constants.js | 2 +- .../Features/Account/{Account => }/Account.js | 23 ++++++++++----- .../Account/{Account => }/Account.module.scss | 0 .../Account/{Account => }/Account.strings.js | 0 src/components/Features/Account/index.js | 5 ---- src/components/Features/Bridge/Bridge.js | 4 +-- .../Login/{Login => }/Login.constants.js | 0 .../Features/Login/{Login => }/Login.js | 17 ++++------- .../Login/{Login => }/Login.module.scss | 2 +- .../Login/{Login => }/Login.strings.js | 2 +- src/components/Features/Login/index.js | 2 -- .../{SelectToken => }/SelectToken.js | 16 +++++----- .../{SelectToken => }/SelectToken.module.scss | 2 +- .../{SelectToken => }/SelectToken.strings.js | 0 src/components/Features/SelectToken/index.js | 4 --- .../Transfer/{Transfer => }/Transfer.hooks.js | 4 +-- .../Transfer/{Transfer => }/Transfer.js | 29 +++++++++---------- .../{Transfer => }/Transfer.module.scss | 2 +- .../{Transfer => }/Transfer.selectors.js | 2 +- .../Transfer/{Transfer => }/Transfer.slice.js | 2 +- .../{Transfer => }/Transfer.strings.js | 0 src/components/Features/Transfer/index.js | 10 ------- src/components/Features/index.js | 7 +++-- .../AccountAddress.constants.js | 0 .../AccountAddress/AccountAddress.js | 6 ++-- .../AccountAddress/AccountAddress.module.scss | 2 +- .../AccountAddress/AccountAddress.strings.js | 0 .../Account => UI}/LinkButton/LinkButton.js | 4 +-- .../LinkButton/LinkButton.module.scss | 2 +- .../LogoutButton/LogoutButton.js | 4 +-- .../LogoutButton/LogoutButton.strings.js | 0 .../Transfer => UI}/MaxButton/MaxButton.js | 0 .../MaxButton/MaxButton.module.scss | 2 +- .../MaxButton/MaxButton.strings.js | 0 .../NetworkMenu/NetworkMenu.js | 2 +- .../NetworkMenu/NetworkMenu.module.scss | 2 +- .../NetworkMenu/NetworkMenu.strings.js | 0 .../NetworkSwap/NetworkSwap.js | 8 ++--- .../NetworkSwap/NetworkSwap.module.scss | 0 .../NetworkTitle/NetworkTitle.js | 4 +-- .../NetworkTitle/NetworkTitle.module.scss | 2 +- .../SearchToken/SearchToken.js | 4 +-- .../SearchToken/SearchToken.module.scss | 0 .../SearchToken/SearchToken.strings.js | 0 .../SelectTokenList/SelectTokenList.js | 0 .../SelectTokenList.module.scss | 0 .../SelectTokenRow/SelectTokenRow.js | 8 ++--- .../SelectTokenRow/SelectTokenRow.module.scss | 2 +- .../TokenBalance/TokenBalance.js | 6 ++-- .../TokenBalance/TokenBalance.module.scss | 2 +- .../TokenBalance/TokenBalance.strings.js | 0 .../Transfer => UI}/TokenInput/TokenInput.js | 4 +-- .../TokenInput/TokenInput.module.scss | 2 +- .../TokenInput/TokenInput.strings.js | 0 .../TokenSelector/TokenSelector.js | 8 ++--- .../TokenSelector/TokenSelector.module.scss | 2 +- .../TransactionSubmittedModal.js | 2 +- .../TransferButton/TransferButton.js | 4 +-- .../TransferButton/TransferButton.strings.js | 0 .../Account => UI}/TransferLog/TransferLog.js | 4 +-- .../TransferLog/TransferLog.module.scss | 2 +- .../TransferLogContainer.js | 4 +-- .../TransferLogContainer.module.scss | 2 +- .../TransferLogContainer.strings.js | 0 .../TransferMenuTab/TransferMenuTab.js | 2 +- .../TransferMenuTab.module.scss | 2 +- .../Login => UI}/WalletLogin/WalletLogin.js | 6 ++-- .../WalletLogin/WalletLogin.module.scss | 2 +- src/components/UI/index.js | 17 +++++++++++ src/hooks/useContract.js | 4 +-- src/hooks/useTokenBalance.js | 2 +- src/hooks/useTransfer.js | 6 ++-- .../TokensProvider/TokensProvider.js | 6 ++-- src/providers/TokensProvider/index.js | 4 +++ .../{context.js => tokens-context.js} | 2 +- .../{hooks.js => tokens-hooks.js} | 4 +-- .../{reducer.js => tokens-reducer.js} | 20 ++++++------- .../TransactionsProvider.js | 4 +-- src/providers/TransactionsProvider/index.js | 4 +++ .../{context.js => transactions-context.js} | 2 +- .../{hooks.js => transactions-hooks.js} | 2 +- .../{reducer.js => transactions-reducer.js} | 0 .../WalletProvider.js} | 4 +-- .../WalletsProvider/WalletsProvider.js | 9 ++---- src/providers/WalletsProvider/index.js | 4 +++ .../{context.js => wallets-context.js} | 2 +- .../{hooks.js => wallets-hooks.js} | 4 +-- .../{reducer.js => wallets-reducer.js} | 0 src/providers/index.js | 8 ++--- src/store/store.js | 2 +- 92 files changed, 182 insertions(+), 184 deletions(-) rename src/components/Features/Account/{Account => }/Account.constants.js (89%) rename src/components/Features/Account/{Account => }/Account.js (70%) rename src/components/Features/Account/{Account => }/Account.module.scss (100%) rename src/components/Features/Account/{Account => }/Account.strings.js (100%) delete mode 100644 src/components/Features/Account/index.js rename src/components/Features/Login/{Login => }/Login.constants.js (100%) rename src/components/Features/Login/{Login => }/Login.js (90%) rename src/components/Features/Login/{Login => }/Login.module.scss (98%) rename src/components/Features/Login/{Login => }/Login.strings.js (89%) delete mode 100644 src/components/Features/Login/index.js rename src/components/Features/SelectToken/{SelectToken => }/SelectToken.js (68%) rename src/components/Features/SelectToken/{SelectToken => }/SelectToken.module.scss (93%) rename src/components/Features/SelectToken/{SelectToken => }/SelectToken.strings.js (100%) delete mode 100644 src/components/Features/SelectToken/index.js rename src/components/Features/Transfer/{Transfer => }/Transfer.hooks.js (94%) rename src/components/Features/Transfer/{Transfer => }/Transfer.js (86%) rename src/components/Features/Transfer/{Transfer => }/Transfer.module.scss (91%) rename src/components/Features/Transfer/{Transfer => }/Transfer.selectors.js (95%) rename src/components/Features/Transfer/{Transfer => }/Transfer.slice.js (95%) rename src/components/Features/Transfer/{Transfer => }/Transfer.strings.js (100%) delete mode 100644 src/components/Features/Transfer/index.js rename src/components/{Features/Account => UI}/AccountAddress/AccountAddress.constants.js (100%) rename src/components/{Features/Account => UI}/AccountAddress/AccountAddress.js (84%) rename src/components/{Features/Account => UI}/AccountAddress/AccountAddress.module.scss (95%) rename src/components/{Features/Account => UI}/AccountAddress/AccountAddress.strings.js (100%) rename src/components/{Features/Account => UI}/LinkButton/LinkButton.js (75%) rename src/components/{Features/Account => UI}/LinkButton/LinkButton.module.scss (95%) rename src/components/{Features/Account => UI}/LogoutButton/LogoutButton.js (89%) rename src/components/{Features/Account => UI}/LogoutButton/LogoutButton.strings.js (100%) rename src/components/{Features/Transfer => UI}/MaxButton/MaxButton.js (100%) rename src/components/{Features/Transfer => UI}/MaxButton/MaxButton.module.scss (85%) rename src/components/{Features/Transfer => UI}/MaxButton/MaxButton.strings.js (100%) rename src/components/{Features/Transfer => UI}/NetworkMenu/NetworkMenu.js (96%) rename src/components/{Features/Transfer => UI}/NetworkMenu/NetworkMenu.module.scss (94%) rename src/components/{Features/Transfer => UI}/NetworkMenu/NetworkMenu.strings.js (100%) rename src/components/{Features/Transfer => UI}/NetworkSwap/NetworkSwap.js (74%) rename src/components/{Features/Transfer => UI}/NetworkSwap/NetworkSwap.module.scss (100%) rename src/components/{Features/Transfer => UI}/NetworkTitle/NetworkTitle.js (77%) rename src/components/{Features/Transfer => UI}/NetworkTitle/NetworkTitle.module.scss (85%) rename src/components/{Features/SelectToken => UI}/SearchToken/SearchToken.js (88%) rename src/components/{Features/SelectToken => UI}/SearchToken/SearchToken.module.scss (100%) rename src/components/{Features/SelectToken => UI}/SearchToken/SearchToken.strings.js (100%) rename src/components/{Features/SelectToken => UI}/SelectTokenList/SelectTokenList.js (100%) rename src/components/{Features/SelectToken => UI}/SelectTokenList/SelectTokenList.module.scss (100%) rename src/components/{Features/SelectToken => UI}/SelectTokenRow/SelectTokenRow.js (82%) rename src/components/{Features/SelectToken => UI}/SelectTokenRow/SelectTokenRow.module.scss (98%) rename src/components/{Features/Transfer => UI}/TokenBalance/TokenBalance.js (82%) rename src/components/{Features/Transfer => UI}/TokenBalance/TokenBalance.module.scss (88%) rename src/components/{Features/Transfer => UI}/TokenBalance/TokenBalance.strings.js (100%) rename src/components/{Features/Transfer => UI}/TokenInput/TokenInput.js (92%) rename src/components/{Features/Transfer => UI}/TokenInput/TokenInput.module.scss (93%) rename src/components/{Features/Transfer => UI}/TokenInput/TokenInput.strings.js (100%) rename src/components/{Features/Transfer => UI}/TokenSelector/TokenSelector.js (69%) rename src/components/{Features/Transfer => UI}/TokenSelector/TokenSelector.module.scss (94%) rename src/components/{Features/Transfer => UI}/TransferButton/TransferButton.js (88%) rename src/components/{Features/Transfer => UI}/TransferButton/TransferButton.strings.js (100%) rename src/components/{Features/Account => UI}/TransferLog/TransferLog.js (86%) rename src/components/{Features/Account => UI}/TransferLog/TransferLog.module.scss (94%) rename src/components/{Features/Account => UI}/TransferLogContainer/TransferLogContainer.js (90%) rename src/components/{Features/Account => UI}/TransferLogContainer/TransferLogContainer.module.scss (96%) rename src/components/{Features/Account => UI}/TransferLogContainer/TransferLogContainer.strings.js (100%) rename src/components/{Features/Transfer => UI}/TransferMenuTab/TransferMenuTab.js (90%) rename src/components/{Features/Transfer => UI}/TransferMenuTab/TransferMenuTab.module.scss (95%) rename src/components/{Features/Login => UI}/WalletLogin/WalletLogin.js (81%) rename src/components/{Features/Login => UI}/WalletLogin/WalletLogin.module.scss (97%) create mode 100644 src/providers/TokensProvider/index.js rename src/providers/TokensProvider/{context.js => tokens-context.js} (78%) rename src/providers/TokensProvider/{hooks.js => tokens-hooks.js} (94%) rename src/providers/TokensProvider/{reducer.js => tokens-reducer.js} (82%) create mode 100644 src/providers/TransactionsProvider/index.js rename src/providers/TransactionsProvider/{context.js => transactions-context.js} (72%) rename src/providers/TransactionsProvider/{hooks.js => transactions-hooks.js} (72%) rename src/providers/TransactionsProvider/{reducer.js => transactions-reducer.js} (100%) rename src/providers/{UseWalletProvider/UseWalletProvider.js => WalletProvider/WalletProvider.js} (88%) create mode 100644 src/providers/WalletsProvider/index.js rename src/providers/WalletsProvider/{context.js => wallets-context.js} (86%) rename src/providers/WalletsProvider/{hooks.js => wallets-hooks.js} (94%) rename src/providers/WalletsProvider/{reducer.js => wallets-reducer.js} (100%) diff --git a/src/components/Containers/Header/Header.js b/src/components/Containers/Header/Header.js index ef0baf66..a031cb60 100644 --- a/src/components/Containers/Header/Header.js +++ b/src/components/Containers/Header/Header.js @@ -2,14 +2,10 @@ import React from 'react'; import StarkNetLogoPath from '../../../assets/img/starknet.png'; import {ChainType} from '../../../enums'; -import { - useWallets, - useEthereumWallet, - useStarknetWallet -} from '../../../providers/WalletsProvider/hooks'; +import {useEthereumWallet, useStarknetWallet, useWallets} from '../../../providers/WalletsProvider'; import {toClasses} from '../../../utils'; import {useBridgeActions} from '../../Features/Bridge/Bridge.hooks'; -import {useIsEthereum, useIsStarknet} from '../../Features/Transfer/Transfer/Transfer.hooks'; +import {useIsEthereum, useIsStarknet} from '../../Features/Transfer/Transfer.hooks'; import {WalletButton} from '../../UI'; import {STARKNET_LOGO_SIZE} from './Header.constants'; import styles from './Header.module.scss'; diff --git a/src/components/Containers/Main/Main.js b/src/components/Containers/Main/Main.js index 6f4d065b..a8e3b20b 100644 --- a/src/components/Containers/Main/Main.js +++ b/src/components/Containers/Main/Main.js @@ -1,10 +1,9 @@ import React, {useEffect, useState} from 'react'; import {useVars, useWindowSize} from '../../../hooks'; -import {TokensProvider} from '../../../providers/TokensProvider/TokensProvider'; -import {useEthereumWallet, useStarknetWallet} from '../../../providers/WalletsProvider/hooks'; -import {Bridge} from '../../Features'; -import {Login} from '../../Features/Login'; +import {TokensProvider} from '../../../providers/TokensProvider'; +import {useEthereumWallet, useStarknetWallet} from '../../../providers/WalletsProvider'; +import {Bridge, Login} from '../../Features'; import styles from './Main.module.scss'; export const Main = () => { diff --git a/src/components/Features/Account/Account/Account.constants.js b/src/components/Features/Account/Account.constants.js similarity index 89% rename from src/components/Features/Account/Account/Account.constants.js rename to src/components/Features/Account/Account.constants.js index eb2b4078..febeb0e4 100644 --- a/src/components/Features/Account/Account/Account.constants.js +++ b/src/components/Features/Account/Account.constants.js @@ -1,4 +1,4 @@ -import {evaluate} from '../../../../utils'; +import {evaluate} from '../../../utils'; export const LINKS = { ETHERSCAN: { diff --git a/src/components/Features/Account/Account/Account.js b/src/components/Features/Account/Account.js similarity index 70% rename from src/components/Features/Account/Account/Account.js rename to src/components/Features/Account/Account.js index e1bd3b44..2b486187 100644 --- a/src/components/Features/Account/Account/Account.js +++ b/src/components/Features/Account/Account.js @@ -1,13 +1,20 @@ import React from 'react'; -import {toChainName} from '../../../../enums'; -import {useTransactions} from '../../../../providers/TransactionsProvider/hooks'; -import {useWallets} from '../../../../providers/WalletsProvider/hooks'; -import {BackButton, Menu, MenuTitle} from '../../../UI'; -import {useBridgeActions} from '../../Bridge/Bridge.hooks'; -import {useTransferData} from '../../Transfer/Transfer/Transfer.hooks'; -import {LinkButton} from '../LinkButton/LinkButton'; -import {AccountAddress, LogoutButton, TransferLog, TransferLogContainer} from '../index'; +import {toChainName} from '../../../enums'; +import {useTransactions} from '../../../providers/TransactionsProvider'; +import {useWallets} from '../../../providers/WalletsProvider'; +import { + BackButton, + Menu, + MenuTitle, + AccountAddress, + LogoutButton, + TransferLog, + TransferLogContainer +} from '../../UI'; +import {LinkButton} from '../../UI/LinkButton/LinkButton'; +import {useBridgeActions} from '../Bridge/Bridge.hooks'; +import {useTransferData} from '../Transfer/Transfer.hooks'; import {LINKS} from './Account.constants'; import styles from './Account.module.scss'; import {TITLE_TXT} from './Account.strings'; diff --git a/src/components/Features/Account/Account/Account.module.scss b/src/components/Features/Account/Account.module.scss similarity index 100% rename from src/components/Features/Account/Account/Account.module.scss rename to src/components/Features/Account/Account.module.scss diff --git a/src/components/Features/Account/Account/Account.strings.js b/src/components/Features/Account/Account.strings.js similarity index 100% rename from src/components/Features/Account/Account/Account.strings.js rename to src/components/Features/Account/Account.strings.js diff --git a/src/components/Features/Account/index.js b/src/components/Features/Account/index.js deleted file mode 100644 index 069dc3f1..00000000 --- a/src/components/Features/Account/index.js +++ /dev/null @@ -1,5 +0,0 @@ -export * from './Account/Account'; -export * from './TransferLog/TransferLog'; -export * from './TransferLogContainer/TransferLogContainer'; -export * from './LogoutButton/LogoutButton'; -export * from './AccountAddress/AccountAddress'; diff --git a/src/components/Features/Bridge/Bridge.js b/src/components/Features/Bridge/Bridge.js index 95aac58c..47c77794 100644 --- a/src/components/Features/Bridge/Bridge.js +++ b/src/components/Features/Bridge/Bridge.js @@ -1,9 +1,7 @@ import React from 'react'; +import {Account, SelectToken, Transfer} from '..'; import {MenuType} from '../../../enums'; -import {Account} from '../Account'; -import {SelectToken} from '../SelectToken'; -import {Transfer} from '../Transfer'; import {useBridgeData} from './Bridge.hooks'; import styles from './Bridge.module.scss'; diff --git a/src/components/Features/Login/Login/Login.constants.js b/src/components/Features/Login/Login.constants.js similarity index 100% rename from src/components/Features/Login/Login/Login.constants.js rename to src/components/Features/Login/Login.constants.js diff --git a/src/components/Features/Login/Login/Login.js b/src/components/Features/Login/Login.js similarity index 90% rename from src/components/Features/Login/Login/Login.js rename to src/components/Features/Login/Login.js index 5b73b3eb..bed73935 100644 --- a/src/components/Features/Login/Login/Login.js +++ b/src/components/Features/Login/Login.js @@ -1,17 +1,12 @@ import React, {useEffect, useRef, useState} from 'react'; import {ChainUnsupportedError} from 'use-wallet'; -import {NetworkType, toChainName, WalletStatus, WalletType} from '../../../../enums'; -import {useWalletHandlerProvider} from '../../../../hooks'; -import { - useWallets, - useEthereumWallet, - useStarknetWallet -} from '../../../../providers/WalletsProvider/hooks'; -import {capitalize, toClasses} from '../../../../utils'; -import {Menu} from '../../../UI'; -import {useHideModal, useProgressModal} from '../../ModalProvider/ModalProvider.hooks'; -import {WalletLogin} from '../WalletLogin/WalletLogin'; +import {NetworkType, toChainName, WalletStatus, WalletType} from '../../../enums'; +import {useWalletHandlerProvider} from '../../../hooks'; +import {useEthereumWallet, useStarknetWallet, useWallets} from '../../../providers/WalletsProvider'; +import {capitalize, toClasses} from '../../../utils'; +import {Menu, WalletLogin} from '../../UI'; +import {useHideModal, useProgressModal} from '../ModalProvider/ModalProvider.hooks'; import {MODAL_TIMEOUT_DURATION} from './Login.constants'; import styles from './Login.module.scss'; import {DOWNLOAD_TEXT, MODAL_TXT, SUBTITLE_TXT, TITLE_TXT} from './Login.strings'; diff --git a/src/components/Features/Login/Login/Login.module.scss b/src/components/Features/Login/Login.module.scss similarity index 98% rename from src/components/Features/Login/Login/Login.module.scss rename to src/components/Features/Login/Login.module.scss index 3049282d..c1de3017 100644 --- a/src/components/Features/Login/Login/Login.module.scss +++ b/src/components/Features/Login/Login.module.scss @@ -1,4 +1,4 @@ -@import '../../../../index'; +@import '../../../index'; $background-color: $--color-alpha; $text-color: $--color-white; diff --git a/src/components/Features/Login/Login/Login.strings.js b/src/components/Features/Login/Login.strings.js similarity index 89% rename from src/components/Features/Login/Login/Login.strings.js rename to src/components/Features/Login/Login.strings.js index 10ad7d16..b1f2b2d7 100644 --- a/src/components/Features/Login/Login/Login.strings.js +++ b/src/components/Features/Login/Login.strings.js @@ -1,4 +1,4 @@ -import {evaluate} from '../../../../utils'; +import {evaluate} from '../../../utils'; export const TITLE_TXT = 'Login'; diff --git a/src/components/Features/Login/index.js b/src/components/Features/Login/index.js deleted file mode 100644 index 70f815ea..00000000 --- a/src/components/Features/Login/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export * from './Login/Login'; -export * from './WalletLogin/WalletLogin'; diff --git a/src/components/Features/SelectToken/SelectToken/SelectToken.js b/src/components/Features/SelectToken/SelectToken.js similarity index 68% rename from src/components/Features/SelectToken/SelectToken/SelectToken.js rename to src/components/Features/SelectToken/SelectToken.js index 47108922..fcfe33e6 100644 --- a/src/components/Features/SelectToken/SelectToken/SelectToken.js +++ b/src/components/Features/SelectToken/SelectToken.js @@ -1,14 +1,12 @@ import React, {useEffect, useState} from 'react'; -import EthereumLogo from '../../../../assets/svg/tokens/eth.svg'; -import StarkNetLogo from '../../../../assets/svg/tokens/starknet.svg'; -import {useColors} from '../../../../hooks'; -import {useTokens} from '../../../../providers/TokensProvider/hooks'; -import {BackButton, Menu, MenuTitle} from '../../../UI'; -import {useBridgeActions} from '../../Bridge/Bridge.hooks'; -import {useTransferActions, useTransferData} from '../../Transfer/Transfer/Transfer.hooks'; -import {SearchToken} from '../SearchToken/SearchToken'; -import {SelectTokenList} from '../SelectTokenList/SelectTokenList'; +import EthereumLogo from '../../../assets/svg/tokens/eth.svg'; +import StarkNetLogo from '../../../assets/svg/tokens/starknet.svg'; +import {useColors} from '../../../hooks'; +import {useTokens} from '../../../providers/TokensProvider'; +import {BackButton, Menu, MenuTitle, SearchToken, SelectTokenList} from '../../UI'; +import {useBridgeActions} from '../Bridge/Bridge.hooks'; +import {useTransferActions, useTransferData} from '../Transfer/Transfer.hooks'; import styles from './SelectToken.module.scss'; import {TITLE_TXT} from './SelectToken.strings'; diff --git a/src/components/Features/SelectToken/SelectToken/SelectToken.module.scss b/src/components/Features/SelectToken/SelectToken.module.scss similarity index 93% rename from src/components/Features/SelectToken/SelectToken/SelectToken.module.scss rename to src/components/Features/SelectToken/SelectToken.module.scss index a2fbd934..807c6383 100644 --- a/src/components/Features/SelectToken/SelectToken/SelectToken.module.scss +++ b/src/components/Features/SelectToken/SelectToken.module.scss @@ -1,4 +1,4 @@ -@import '../../../../index'; +@import '../../../index'; $color: $--color-white; $network-color: $--color-beta; diff --git a/src/components/Features/SelectToken/SelectToken/SelectToken.strings.js b/src/components/Features/SelectToken/SelectToken.strings.js similarity index 100% rename from src/components/Features/SelectToken/SelectToken/SelectToken.strings.js rename to src/components/Features/SelectToken/SelectToken.strings.js diff --git a/src/components/Features/SelectToken/index.js b/src/components/Features/SelectToken/index.js deleted file mode 100644 index 190de096..00000000 --- a/src/components/Features/SelectToken/index.js +++ /dev/null @@ -1,4 +0,0 @@ -export * from './SelectToken/SelectToken'; -export * from './SearchToken/SearchToken'; -export * from './SelectTokenList/SelectTokenList'; -export * from './SelectTokenRow/SelectTokenRow'; diff --git a/src/components/Features/Transfer/Transfer/Transfer.hooks.js b/src/components/Features/Transfer/Transfer.hooks.js similarity index 94% rename from src/components/Features/Transfer/Transfer/Transfer.hooks.js rename to src/components/Features/Transfer/Transfer.hooks.js index 0d504e16..80649d39 100644 --- a/src/components/Features/Transfer/Transfer/Transfer.hooks.js +++ b/src/components/Features/Transfer/Transfer.hooks.js @@ -1,8 +1,8 @@ import {useCallback, useMemo} from 'react'; import {useDispatch, useSelector} from 'react-redux'; -import {ActionType} from '../../../../enums'; -import {useEthereumToken, useStarknetToken} from '../../../../providers/TokensProvider/hooks'; +import {ActionType} from '../../../enums'; +import {useEthereumToken, useStarknetToken} from '../../../providers/TokensProvider'; import { fromNetworkSelector, fromStarknetSelector, diff --git a/src/components/Features/Transfer/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer.js similarity index 86% rename from src/components/Features/Transfer/Transfer/Transfer.js rename to src/components/Features/Transfer/Transfer.js index 336437f5..11254e06 100644 --- a/src/components/Features/Transfer/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer.js @@ -1,25 +1,24 @@ import React, {useEffect, useState} from 'react'; -import {ActionType, NetworkType} from '../../../../enums'; -import {useTransfer} from '../../../../hooks'; +import {ActionType, NetworkType} from '../../../enums'; +import {useTransfer} from '../../../hooks'; +import {useEthereumToken, useStarknetToken, useTokens} from '../../../providers/TokensProvider'; import { - useEthereumToken, - useStarknetToken, - useTokens -} from '../../../../providers/TokensProvider/hooks'; -import {Loading, Menu} from '../../../UI'; -import {LoadingSize} from '../../../UI/Loading/Loading.enums'; -import {useBridgeActions} from '../../Bridge/Bridge.hooks'; + Loading, + Menu, + NetworkMenu, + NetworkSwap, + TokenInput, + TransferButton, + TransferMenuTab +} from '../../UI'; +import {LoadingSize} from '../../UI/Loading/Loading.enums'; +import {useBridgeActions} from '../Bridge/Bridge.hooks'; import { useHideModal, useProgressModal, useTransactionSubmittedModal -} from '../../ModalProvider/ModalProvider.hooks'; -import {NetworkMenu} from '../NetworkMenu/NetworkMenu'; -import {NetworkSwap} from '../NetworkSwap/NetworkSwap'; -import {TokenInput} from '../TokenInput/TokenInput'; -import {TransferButton} from '../TransferButton/TransferButton'; -import {TransferMenuTab} from '../TransferMenuTab/TransferMenuTab'; +} from '../ModalProvider/ModalProvider.hooks'; import { useAmount, useIsEthereum, diff --git a/src/components/Features/Transfer/Transfer/Transfer.module.scss b/src/components/Features/Transfer/Transfer.module.scss similarity index 91% rename from src/components/Features/Transfer/Transfer/Transfer.module.scss rename to src/components/Features/Transfer/Transfer.module.scss index 3ac73c4a..83d78dc6 100644 --- a/src/components/Features/Transfer/Transfer/Transfer.module.scss +++ b/src/components/Features/Transfer/Transfer.module.scss @@ -1,4 +1,4 @@ -@import '../../../../index'; +@import '../../../index'; $background-color: $--color-alpha-1; $error-msg-color: $--color-error; diff --git a/src/components/Features/Transfer/Transfer/Transfer.selectors.js b/src/components/Features/Transfer/Transfer.selectors.js similarity index 95% rename from src/components/Features/Transfer/Transfer/Transfer.selectors.js rename to src/components/Features/Transfer/Transfer.selectors.js index ca064959..1f493dd1 100644 --- a/src/components/Features/Transfer/Transfer/Transfer.selectors.js +++ b/src/components/Features/Transfer/Transfer.selectors.js @@ -1,6 +1,6 @@ import {createSelector} from '@reduxjs/toolkit'; -import {ActionType, NetworkType} from '../../../../enums'; +import {ActionType, NetworkType} from '../../../enums'; export const selectTransfer = state => state.transfer; diff --git a/src/components/Features/Transfer/Transfer/Transfer.slice.js b/src/components/Features/Transfer/Transfer.slice.js similarity index 95% rename from src/components/Features/Transfer/Transfer/Transfer.slice.js rename to src/components/Features/Transfer/Transfer.slice.js index 99a8bbc0..18a1b930 100644 --- a/src/components/Features/Transfer/Transfer/Transfer.slice.js +++ b/src/components/Features/Transfer/Transfer.slice.js @@ -1,6 +1,6 @@ import {createSlice} from '@reduxjs/toolkit'; -import {ActionType} from '../../../../enums'; +import {ActionType} from '../../../enums'; const initialState = { action: ActionType.TRANSFER_TO_STARKNET, diff --git a/src/components/Features/Transfer/Transfer/Transfer.strings.js b/src/components/Features/Transfer/Transfer.strings.js similarity index 100% rename from src/components/Features/Transfer/Transfer/Transfer.strings.js rename to src/components/Features/Transfer/Transfer.strings.js diff --git a/src/components/Features/Transfer/index.js b/src/components/Features/Transfer/index.js deleted file mode 100644 index 55a48448..00000000 --- a/src/components/Features/Transfer/index.js +++ /dev/null @@ -1,10 +0,0 @@ -export * from './Transfer/Transfer'; -export * from './MaxButton/MaxButton'; -export * from './NetworkMenu/NetworkMenu'; -export * from './NetworkSwap/NetworkSwap'; -export * from './NetworkTitle/NetworkTitle'; -export * from './TokenBalance/TokenBalance'; -export * from './TokenInput/TokenInput'; -export * from './TokenSelector/TokenSelector'; -export * from './TransferButton/TransferButton'; -export * from './TransferMenuTab/TransferMenuTab'; diff --git a/src/components/Features/index.js b/src/components/Features/index.js index e3ca4f10..38b1eaa9 100644 --- a/src/components/Features/index.js +++ b/src/components/Features/index.js @@ -1,5 +1,6 @@ -export * from './Account'; -export * from './SelectToken'; -export * from './Transfer'; +export * from './Account/Account'; export * from './Bridge/Bridge'; +export * from './Login/Login'; export * from './ModalProvider/ModalProvider'; +export * from './SelectToken/SelectToken'; +export * from './Transfer/Transfer'; diff --git a/src/components/Features/Account/AccountAddress/AccountAddress.constants.js b/src/components/UI/AccountAddress/AccountAddress.constants.js similarity index 100% rename from src/components/Features/Account/AccountAddress/AccountAddress.constants.js rename to src/components/UI/AccountAddress/AccountAddress.constants.js diff --git a/src/components/Features/Account/AccountAddress/AccountAddress.js b/src/components/UI/AccountAddress/AccountAddress.js similarity index 84% rename from src/components/Features/Account/AccountAddress/AccountAddress.js rename to src/components/UI/AccountAddress/AccountAddress.js index 630473ce..8d3d90c7 100644 --- a/src/components/Features/Account/AccountAddress/AccountAddress.js +++ b/src/components/UI/AccountAddress/AccountAddress.js @@ -1,9 +1,9 @@ import PropTypes from 'prop-types'; import React, {useRef} from 'react'; -import {ReactComponent as CopyIcon} from '../../../../assets/svg/icons/copy.svg'; -import {useAnimation} from '../../../../hooks'; -import {toClasses} from '../../../../utils'; +import {ReactComponent as CopyIcon} from '../../../assets/svg/icons/copy.svg'; +import {useAnimation} from '../../../hooks'; +import {toClasses} from '../../../utils'; import {COPIED_ANIMATION_TIMEOUT_INTERVAL} from './AccountAddress.constants'; import styles from './AccountAddress.module.scss'; import {COPIED_MSG_TXT} from './AccountAddress.strings'; diff --git a/src/components/Features/Account/AccountAddress/AccountAddress.module.scss b/src/components/UI/AccountAddress/AccountAddress.module.scss similarity index 95% rename from src/components/Features/Account/AccountAddress/AccountAddress.module.scss rename to src/components/UI/AccountAddress/AccountAddress.module.scss index b5bcaf79..80d9d775 100644 --- a/src/components/Features/Account/AccountAddress/AccountAddress.module.scss +++ b/src/components/UI/AccountAddress/AccountAddress.module.scss @@ -1,4 +1,4 @@ -@import '../../../../index'; +@import '../../../index'; $background-color: $--color-alpha-3; $color: $--color-white-1; diff --git a/src/components/Features/Account/AccountAddress/AccountAddress.strings.js b/src/components/UI/AccountAddress/AccountAddress.strings.js similarity index 100% rename from src/components/Features/Account/AccountAddress/AccountAddress.strings.js rename to src/components/UI/AccountAddress/AccountAddress.strings.js diff --git a/src/components/Features/Account/LinkButton/LinkButton.js b/src/components/UI/LinkButton/LinkButton.js similarity index 75% rename from src/components/Features/Account/LinkButton/LinkButton.js rename to src/components/UI/LinkButton/LinkButton.js index 561913da..dd74c033 100644 --- a/src/components/Features/Account/LinkButton/LinkButton.js +++ b/src/components/UI/LinkButton/LinkButton.js @@ -1,8 +1,8 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {ReactComponent as RedirectIcon} from '../../../../assets/svg/icons/redirect.svg'; -import {openInNewTab} from '../../../../utils'; +import {ReactComponent as RedirectIcon} from '../../../assets/svg/icons/redirect.svg'; +import {openInNewTab} from '../../../utils'; import styles from './LinkButton.module.scss'; export const LinkButton = ({text, url}) => { diff --git a/src/components/Features/Account/LinkButton/LinkButton.module.scss b/src/components/UI/LinkButton/LinkButton.module.scss similarity index 95% rename from src/components/Features/Account/LinkButton/LinkButton.module.scss rename to src/components/UI/LinkButton/LinkButton.module.scss index 19e43d75..7f4692b8 100644 --- a/src/components/Features/Account/LinkButton/LinkButton.module.scss +++ b/src/components/UI/LinkButton/LinkButton.module.scss @@ -1,4 +1,4 @@ -@import '../../../../index'; +@import '../../../index'; $color: $--color-gamma-1; $border-color: $--color-gamma-1; diff --git a/src/components/Features/Account/LogoutButton/LogoutButton.js b/src/components/UI/LogoutButton/LogoutButton.js similarity index 89% rename from src/components/Features/Account/LogoutButton/LogoutButton.js rename to src/components/UI/LogoutButton/LogoutButton.js index 9d6a16b0..a1a4a9ed 100644 --- a/src/components/Features/Account/LogoutButton/LogoutButton.js +++ b/src/components/UI/LogoutButton/LogoutButton.js @@ -1,8 +1,8 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {useColors} from '../../../../hooks'; -import {Button} from '../../../UI'; +import {useColors} from '../../../hooks'; +import {Button} from '../index'; import {BTN_TXT} from './LogoutButton.strings'; export const LogoutButton = ({onClick, isDisabled}) => { diff --git a/src/components/Features/Account/LogoutButton/LogoutButton.strings.js b/src/components/UI/LogoutButton/LogoutButton.strings.js similarity index 100% rename from src/components/Features/Account/LogoutButton/LogoutButton.strings.js rename to src/components/UI/LogoutButton/LogoutButton.strings.js diff --git a/src/components/Features/Transfer/MaxButton/MaxButton.js b/src/components/UI/MaxButton/MaxButton.js similarity index 100% rename from src/components/Features/Transfer/MaxButton/MaxButton.js rename to src/components/UI/MaxButton/MaxButton.js diff --git a/src/components/Features/Transfer/MaxButton/MaxButton.module.scss b/src/components/UI/MaxButton/MaxButton.module.scss similarity index 85% rename from src/components/Features/Transfer/MaxButton/MaxButton.module.scss rename to src/components/UI/MaxButton/MaxButton.module.scss index a6302afc..0495a040 100644 --- a/src/components/Features/Transfer/MaxButton/MaxButton.module.scss +++ b/src/components/UI/MaxButton/MaxButton.module.scss @@ -1,4 +1,4 @@ -@import '../../../../index'; +@import '../../../index'; $color: $--color-white; diff --git a/src/components/Features/Transfer/MaxButton/MaxButton.strings.js b/src/components/UI/MaxButton/MaxButton.strings.js similarity index 100% rename from src/components/Features/Transfer/MaxButton/MaxButton.strings.js rename to src/components/UI/MaxButton/MaxButton.strings.js diff --git a/src/components/Features/Transfer/NetworkMenu/NetworkMenu.js b/src/components/UI/NetworkMenu/NetworkMenu.js similarity index 96% rename from src/components/Features/Transfer/NetworkMenu/NetworkMenu.js rename to src/components/UI/NetworkMenu/NetworkMenu.js index 37593b0d..50c638af 100644 --- a/src/components/Features/Transfer/NetworkMenu/NetworkMenu.js +++ b/src/components/UI/NetworkMenu/NetworkMenu.js @@ -1,9 +1,9 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {Badge} from '../../../UI'; import {NetworkTitle} from '../NetworkTitle/NetworkTitle'; import {TokenBalance} from '../TokenBalance/TokenBalance'; +import {Badge} from '../index'; import styles from './NetworkMenu.module.scss'; import {FROM, TO} from './NetworkMenu.strings'; diff --git a/src/components/Features/Transfer/NetworkMenu/NetworkMenu.module.scss b/src/components/UI/NetworkMenu/NetworkMenu.module.scss similarity index 94% rename from src/components/Features/Transfer/NetworkMenu/NetworkMenu.module.scss rename to src/components/UI/NetworkMenu/NetworkMenu.module.scss index 697d0b75..6dd9369c 100644 --- a/src/components/Features/Transfer/NetworkMenu/NetworkMenu.module.scss +++ b/src/components/UI/NetworkMenu/NetworkMenu.module.scss @@ -1,4 +1,4 @@ -@import '../../../../index'; +@import '../../../index'; $background-color: $--color-alpha-1; $box-shadow-color: rgba(0, 0, 0, 0.1); diff --git a/src/components/Features/Transfer/NetworkMenu/NetworkMenu.strings.js b/src/components/UI/NetworkMenu/NetworkMenu.strings.js similarity index 100% rename from src/components/Features/Transfer/NetworkMenu/NetworkMenu.strings.js rename to src/components/UI/NetworkMenu/NetworkMenu.strings.js diff --git a/src/components/Features/Transfer/NetworkSwap/NetworkSwap.js b/src/components/UI/NetworkSwap/NetworkSwap.js similarity index 74% rename from src/components/Features/Transfer/NetworkSwap/NetworkSwap.js rename to src/components/UI/NetworkSwap/NetworkSwap.js index 3f72181e..e9033153 100644 --- a/src/components/Features/Transfer/NetworkSwap/NetworkSwap.js +++ b/src/components/UI/NetworkSwap/NetworkSwap.js @@ -1,10 +1,10 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {ReactComponent as SwapIcon} from '../../../../assets/svg/icons/swap.svg'; -import {useColors} from '../../../../hooks'; -import {toClasses} from '../../../../utils'; -import {Circle} from '../../../UI'; +import {ReactComponent as SwapIcon} from '../../../assets/svg/icons/swap.svg'; +import {useColors} from '../../../hooks'; +import {toClasses} from '../../../utils'; +import {Circle} from '../index'; import styles from './NetworkSwap.module.scss'; export const NetworkSwap = ({isFlipped, onClick}) => { diff --git a/src/components/Features/Transfer/NetworkSwap/NetworkSwap.module.scss b/src/components/UI/NetworkSwap/NetworkSwap.module.scss similarity index 100% rename from src/components/Features/Transfer/NetworkSwap/NetworkSwap.module.scss rename to src/components/UI/NetworkSwap/NetworkSwap.module.scss diff --git a/src/components/Features/Transfer/NetworkTitle/NetworkTitle.js b/src/components/UI/NetworkTitle/NetworkTitle.js similarity index 77% rename from src/components/Features/Transfer/NetworkTitle/NetworkTitle.js rename to src/components/UI/NetworkTitle/NetworkTitle.js index 0aca071d..919f098a 100644 --- a/src/components/Features/Transfer/NetworkTitle/NetworkTitle.js +++ b/src/components/UI/NetworkTitle/NetworkTitle.js @@ -1,8 +1,8 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {CryptoLogo} from '../../../UI'; -import {CryptoLogoSize} from '../../../UI/CryptoLogo/CryptoLogo.enums'; +import {CryptoLogoSize} from '../CryptoLogo/CryptoLogo.enums'; +import {CryptoLogo} from '../index'; import styles from './NetworkTitle.module.scss'; export const NetworkTitle = ({networkData}) => ( diff --git a/src/components/Features/Transfer/NetworkTitle/NetworkTitle.module.scss b/src/components/UI/NetworkTitle/NetworkTitle.module.scss similarity index 85% rename from src/components/Features/Transfer/NetworkTitle/NetworkTitle.module.scss rename to src/components/UI/NetworkTitle/NetworkTitle.module.scss index f18fa84b..98480fad 100644 --- a/src/components/Features/Transfer/NetworkTitle/NetworkTitle.module.scss +++ b/src/components/UI/NetworkTitle/NetworkTitle.module.scss @@ -1,4 +1,4 @@ -@import '../../../../index'; +@import '../../../index'; $color: $--color-white; diff --git a/src/components/Features/SelectToken/SearchToken/SearchToken.js b/src/components/UI/SearchToken/SearchToken.js similarity index 88% rename from src/components/Features/SelectToken/SearchToken/SearchToken.js rename to src/components/UI/SearchToken/SearchToken.js index dbe7f964..3c9cc526 100644 --- a/src/components/Features/SelectToken/SearchToken/SearchToken.js +++ b/src/components/UI/SearchToken/SearchToken.js @@ -1,8 +1,8 @@ import PropTypes from 'prop-types'; import React, {useEffect, useState} from 'react'; -import {ReactComponent as SearchIcon} from '../../../../assets/svg/icons/search.svg'; -import {Input} from '../../../UI'; +import {ReactComponent as SearchIcon} from '../../../assets/svg/icons/search.svg'; +import {Input} from '../index'; import styles from './SearchToken.module.scss'; import {SEARCH_PLACEHOLDER} from './SearchToken.strings'; diff --git a/src/components/Features/SelectToken/SearchToken/SearchToken.module.scss b/src/components/UI/SearchToken/SearchToken.module.scss similarity index 100% rename from src/components/Features/SelectToken/SearchToken/SearchToken.module.scss rename to src/components/UI/SearchToken/SearchToken.module.scss diff --git a/src/components/Features/SelectToken/SearchToken/SearchToken.strings.js b/src/components/UI/SearchToken/SearchToken.strings.js similarity index 100% rename from src/components/Features/SelectToken/SearchToken/SearchToken.strings.js rename to src/components/UI/SearchToken/SearchToken.strings.js diff --git a/src/components/Features/SelectToken/SelectTokenList/SelectTokenList.js b/src/components/UI/SelectTokenList/SelectTokenList.js similarity index 100% rename from src/components/Features/SelectToken/SelectTokenList/SelectTokenList.js rename to src/components/UI/SelectTokenList/SelectTokenList.js diff --git a/src/components/Features/SelectToken/SelectTokenList/SelectTokenList.module.scss b/src/components/UI/SelectTokenList/SelectTokenList.module.scss similarity index 100% rename from src/components/Features/SelectToken/SelectTokenList/SelectTokenList.module.scss rename to src/components/UI/SelectTokenList/SelectTokenList.module.scss diff --git a/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js b/src/components/UI/SelectTokenRow/SelectTokenRow.js similarity index 82% rename from src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js rename to src/components/UI/SelectTokenRow/SelectTokenRow.js index 1abd6ef5..9b6af42a 100644 --- a/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.js +++ b/src/components/UI/SelectTokenRow/SelectTokenRow.js @@ -1,10 +1,10 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {formatBalance, toClasses} from '../../../../utils'; -import {CryptoLogo, Loading} from '../../../UI'; -import {CryptoLogoSize} from '../../../UI/CryptoLogo/CryptoLogo.enums'; -import {LoadingSize} from '../../../UI/Loading/Loading.enums'; +import {formatBalance, toClasses} from '../../../utils'; +import {CryptoLogoSize} from '../CryptoLogo/CryptoLogo.enums'; +import {LoadingSize} from '../Loading/Loading.enums'; +import {CryptoLogo, Loading} from '../index'; import styles from './SelectTokenRow.module.scss'; export const SelectTokenRow = ({tokenData, onClick}) => { diff --git a/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.module.scss b/src/components/UI/SelectTokenRow/SelectTokenRow.module.scss similarity index 98% rename from src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.module.scss rename to src/components/UI/SelectTokenRow/SelectTokenRow.module.scss index a48afc68..07b874e7 100644 --- a/src/components/Features/SelectToken/SelectTokenRow/SelectTokenRow.module.scss +++ b/src/components/UI/SelectTokenRow/SelectTokenRow.module.scss @@ -1,4 +1,4 @@ -@import '../../../../index'; +@import '../../../index'; $hr-color: rgba(255, 255, 255, 0.05); $symbol-color: $--color-white; diff --git a/src/components/Features/Transfer/TokenBalance/TokenBalance.js b/src/components/UI/TokenBalance/TokenBalance.js similarity index 82% rename from src/components/Features/Transfer/TokenBalance/TokenBalance.js rename to src/components/UI/TokenBalance/TokenBalance.js index 61717992..c608d519 100644 --- a/src/components/Features/Transfer/TokenBalance/TokenBalance.js +++ b/src/components/UI/TokenBalance/TokenBalance.js @@ -1,9 +1,9 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {formatBalance} from '../../../../utils'; -import {Loading} from '../../../UI'; -import {LoadingSize} from '../../../UI/Loading/Loading.enums'; +import {formatBalance} from '../../../utils'; +import {LoadingSize} from '../Loading/Loading.enums'; +import {Loading} from '../index'; import styles from './TokenBalance.module.scss'; import {TITLE_TXT} from './TokenBalance.strings'; diff --git a/src/components/Features/Transfer/TokenBalance/TokenBalance.module.scss b/src/components/UI/TokenBalance/TokenBalance.module.scss similarity index 88% rename from src/components/Features/Transfer/TokenBalance/TokenBalance.module.scss rename to src/components/UI/TokenBalance/TokenBalance.module.scss index ec12b5a7..67c6885d 100644 --- a/src/components/Features/Transfer/TokenBalance/TokenBalance.module.scss +++ b/src/components/UI/TokenBalance/TokenBalance.module.scss @@ -1,4 +1,4 @@ -@import '../../../../index'; +@import '../../../index'; $color: $--color-alpha-6; $balance-color: $--color-white; diff --git a/src/components/Features/Transfer/TokenBalance/TokenBalance.strings.js b/src/components/UI/TokenBalance/TokenBalance.strings.js similarity index 100% rename from src/components/Features/Transfer/TokenBalance/TokenBalance.strings.js rename to src/components/UI/TokenBalance/TokenBalance.strings.js diff --git a/src/components/Features/Transfer/TokenInput/TokenInput.js b/src/components/UI/TokenInput/TokenInput.js similarity index 92% rename from src/components/Features/Transfer/TokenInput/TokenInput.js rename to src/components/UI/TokenInput/TokenInput.js index 4b064d30..dcf84686 100644 --- a/src/components/Features/Transfer/TokenInput/TokenInput.js +++ b/src/components/UI/TokenInput/TokenInput.js @@ -1,10 +1,10 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {toClasses} from '../../../../utils'; -import {Input} from '../../../UI'; +import {toClasses} from '../../../utils'; import {MaxButton} from '../MaxButton/MaxButton'; import {TokenSelector} from '../TokenSelector/TokenSelector'; +import {Input} from '../index'; import styles from './TokenInput.module.scss'; import {INPUT_PLACEHOLDER} from './TokenInput.strings'; diff --git a/src/components/Features/Transfer/TokenInput/TokenInput.module.scss b/src/components/UI/TokenInput/TokenInput.module.scss similarity index 93% rename from src/components/Features/Transfer/TokenInput/TokenInput.module.scss rename to src/components/UI/TokenInput/TokenInput.module.scss index a5780534..94bb0ad8 100644 --- a/src/components/Features/Transfer/TokenInput/TokenInput.module.scss +++ b/src/components/UI/TokenInput/TokenInput.module.scss @@ -1,4 +1,4 @@ -@import '../../../../index'; +@import '../../../index'; $background-color: $--color-alpha-2; $error-color: $--color-error; diff --git a/src/components/Features/Transfer/TokenInput/TokenInput.strings.js b/src/components/UI/TokenInput/TokenInput.strings.js similarity index 100% rename from src/components/Features/Transfer/TokenInput/TokenInput.strings.js rename to src/components/UI/TokenInput/TokenInput.strings.js diff --git a/src/components/Features/Transfer/TokenSelector/TokenSelector.js b/src/components/UI/TokenSelector/TokenSelector.js similarity index 69% rename from src/components/Features/Transfer/TokenSelector/TokenSelector.js rename to src/components/UI/TokenSelector/TokenSelector.js index 8c8f51ff..687b8d7f 100644 --- a/src/components/Features/Transfer/TokenSelector/TokenSelector.js +++ b/src/components/UI/TokenSelector/TokenSelector.js @@ -1,10 +1,10 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {ReactComponent as DownArrowIcon} from '../../../../assets/svg/icons/collapse.svg'; -import {useColors} from '../../../../hooks'; -import {CryptoLogo, Icon} from '../../../UI'; -import {CryptoLogoSize} from '../../../UI/CryptoLogo/CryptoLogo.enums'; +import {ReactComponent as DownArrowIcon} from '../../../assets/svg/icons/collapse.svg'; +import {useColors} from '../../../hooks'; +import {CryptoLogoSize} from '../CryptoLogo/CryptoLogo.enums'; +import {CryptoLogo, Icon} from '../index'; import styles from './TokenSelector.module.scss'; export const TokenSelector = ({tokenData, onClick}) => { diff --git a/src/components/Features/Transfer/TokenSelector/TokenSelector.module.scss b/src/components/UI/TokenSelector/TokenSelector.module.scss similarity index 94% rename from src/components/Features/Transfer/TokenSelector/TokenSelector.module.scss rename to src/components/UI/TokenSelector/TokenSelector.module.scss index d8a11554..30a1d452 100644 --- a/src/components/Features/Transfer/TokenSelector/TokenSelector.module.scss +++ b/src/components/UI/TokenSelector/TokenSelector.module.scss @@ -1,4 +1,4 @@ -@import '../../../../index'; +@import '../../../index'; $color: $--color-alpha-6; $background-color: $--color-alpha-5; diff --git a/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.js b/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.js index 4076c359..d110a6bd 100644 --- a/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.js +++ b/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.js @@ -4,7 +4,7 @@ import React from 'react'; import {ReactComponent as EtherscanLogo} from '../../../assets/svg/etherscan.svg'; import {toChainName} from '../../../enums'; import {useColors} from '../../../hooks'; -import {useWallets} from '../../../providers/WalletsProvider/hooks'; +import {useWallets} from '../../../providers/WalletsProvider'; import {openInNewTab} from '../../../utils'; import {Button} from '../Button/Button'; import {Circle} from '../Circle/Circle'; diff --git a/src/components/Features/Transfer/TransferButton/TransferButton.js b/src/components/UI/TransferButton/TransferButton.js similarity index 88% rename from src/components/Features/Transfer/TransferButton/TransferButton.js rename to src/components/UI/TransferButton/TransferButton.js index 20cd84c8..ec67ad62 100644 --- a/src/components/Features/Transfer/TransferButton/TransferButton.js +++ b/src/components/UI/TransferButton/TransferButton.js @@ -1,8 +1,8 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {useColors} from '../../../../hooks'; -import {Button} from '../../../UI'; +import {useColors} from '../../../hooks'; +import {Button} from '../index'; import {BTN_TXT} from './TransferButton.strings'; export const TransferButton = props => { diff --git a/src/components/Features/Transfer/TransferButton/TransferButton.strings.js b/src/components/UI/TransferButton/TransferButton.strings.js similarity index 100% rename from src/components/Features/Transfer/TransferButton/TransferButton.strings.js rename to src/components/UI/TransferButton/TransferButton.strings.js diff --git a/src/components/Features/Account/TransferLog/TransferLog.js b/src/components/UI/TransferLog/TransferLog.js similarity index 86% rename from src/components/Features/Account/TransferLog/TransferLog.js rename to src/components/UI/TransferLog/TransferLog.js index 4dccb9bc..09edc98c 100644 --- a/src/components/Features/Account/TransferLog/TransferLog.js +++ b/src/components/UI/TransferLog/TransferLog.js @@ -1,8 +1,8 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {CryptoLogo} from '../../../UI'; -import {CryptoLogoSize} from '../../../UI/CryptoLogo/CryptoLogo.enums'; +import {CryptoLogoSize} from '../CryptoLogo/CryptoLogo.enums'; +import {CryptoLogo} from '../index'; import styles from './TransferLog.module.scss'; export const TransferLog = ({name, symbol, amount, timestamp}) => ( diff --git a/src/components/Features/Account/TransferLog/TransferLog.module.scss b/src/components/UI/TransferLog/TransferLog.module.scss similarity index 94% rename from src/components/Features/Account/TransferLog/TransferLog.module.scss rename to src/components/UI/TransferLog/TransferLog.module.scss index 0a7b59dc..c7f439ba 100644 --- a/src/components/Features/Account/TransferLog/TransferLog.module.scss +++ b/src/components/UI/TransferLog/TransferLog.module.scss @@ -1,4 +1,4 @@ -@import '../../../../index'; +@import '../../../index'; $color: $--color-alpha-6; $hr-color: $--color-alpha-3; diff --git a/src/components/Features/Account/TransferLogContainer/TransferLogContainer.js b/src/components/UI/TransferLogContainer/TransferLogContainer.js similarity index 90% rename from src/components/Features/Account/TransferLogContainer/TransferLogContainer.js rename to src/components/UI/TransferLogContainer/TransferLogContainer.js index fd92ef59..81047fb5 100644 --- a/src/components/Features/Account/TransferLogContainer/TransferLogContainer.js +++ b/src/components/UI/TransferLogContainer/TransferLogContainer.js @@ -1,8 +1,8 @@ import PropTypes from 'prop-types'; import React, {useState} from 'react'; -import {ReactComponent as CollapseIcon} from '../../../../assets/svg/icons/collapse.svg'; -import {toClasses} from '../../../../utils'; +import {ReactComponent as CollapseIcon} from '../../../assets/svg/icons/collapse.svg'; +import {toClasses} from '../../../utils'; import styles from './TransferLogContainer.module.scss'; import { EMPTY_MSG_TXT, diff --git a/src/components/Features/Account/TransferLogContainer/TransferLogContainer.module.scss b/src/components/UI/TransferLogContainer/TransferLogContainer.module.scss similarity index 96% rename from src/components/Features/Account/TransferLogContainer/TransferLogContainer.module.scss rename to src/components/UI/TransferLogContainer/TransferLogContainer.module.scss index 665b415e..4ffdbecf 100644 --- a/src/components/Features/Account/TransferLogContainer/TransferLogContainer.module.scss +++ b/src/components/UI/TransferLogContainer/TransferLogContainer.module.scss @@ -1,4 +1,4 @@ -@import '../../../../index'; +@import '../../../index'; $color: $--color-white; $border-color: $--color-alpha-3; diff --git a/src/components/Features/Account/TransferLogContainer/TransferLogContainer.strings.js b/src/components/UI/TransferLogContainer/TransferLogContainer.strings.js similarity index 100% rename from src/components/Features/Account/TransferLogContainer/TransferLogContainer.strings.js rename to src/components/UI/TransferLogContainer/TransferLogContainer.strings.js diff --git a/src/components/Features/Transfer/TransferMenuTab/TransferMenuTab.js b/src/components/UI/TransferMenuTab/TransferMenuTab.js similarity index 90% rename from src/components/Features/Transfer/TransferMenuTab/TransferMenuTab.js rename to src/components/UI/TransferMenuTab/TransferMenuTab.js index 75f37d99..13cf8820 100644 --- a/src/components/Features/Transfer/TransferMenuTab/TransferMenuTab.js +++ b/src/components/UI/TransferMenuTab/TransferMenuTab.js @@ -1,7 +1,7 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {toClasses} from '../../../../utils'; +import {toClasses} from '../../../utils'; import styles from './TransferMenuTab.module.scss'; export const TransferMenuTab = ({text, isActive, onClick}) => ( diff --git a/src/components/Features/Transfer/TransferMenuTab/TransferMenuTab.module.scss b/src/components/UI/TransferMenuTab/TransferMenuTab.module.scss similarity index 95% rename from src/components/Features/Transfer/TransferMenuTab/TransferMenuTab.module.scss rename to src/components/UI/TransferMenuTab/TransferMenuTab.module.scss index e0a0a90f..1be872e5 100644 --- a/src/components/Features/Transfer/TransferMenuTab/TransferMenuTab.module.scss +++ b/src/components/UI/TransferMenuTab/TransferMenuTab.module.scss @@ -1,4 +1,4 @@ -@import '../../../../index'; +@import '../../../index'; $background-color: $--color-alpha-1; $color: $--color-white; diff --git a/src/components/Features/Login/WalletLogin/WalletLogin.js b/src/components/UI/WalletLogin/WalletLogin.js similarity index 81% rename from src/components/Features/Login/WalletLogin/WalletLogin.js rename to src/components/UI/WalletLogin/WalletLogin.js index cd97afa1..c0b601e1 100644 --- a/src/components/Features/Login/WalletLogin/WalletLogin.js +++ b/src/components/UI/WalletLogin/WalletLogin.js @@ -1,9 +1,9 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {ReactComponent as ForwardIcon} from '../../../../assets/svg/icons/forward.svg'; -import {capitalize} from '../../../../utils'; -import {DynamicIcon} from '../../../UI'; +import {ReactComponent as ForwardIcon} from '../../../assets/svg/icons/forward.svg'; +import {capitalize} from '../../../utils'; +import {DynamicIcon} from '../index'; import styles from './WalletLogin.module.scss'; export const WalletLogin = ({name, description, logoPath, onClick}) => ( diff --git a/src/components/Features/Login/WalletLogin/WalletLogin.module.scss b/src/components/UI/WalletLogin/WalletLogin.module.scss similarity index 97% rename from src/components/Features/Login/WalletLogin/WalletLogin.module.scss rename to src/components/UI/WalletLogin/WalletLogin.module.scss index 878d5da6..e3d3fd71 100644 --- a/src/components/Features/Login/WalletLogin/WalletLogin.module.scss +++ b/src/components/UI/WalletLogin/WalletLogin.module.scss @@ -1,4 +1,4 @@ -@import '../../../../index'; +@import '../../../index'; $text-color: $--color-white; $background-color-hover: $--color-alpha-1; diff --git a/src/components/UI/index.js b/src/components/UI/index.js index 059953ff..2a517276 100644 --- a/src/components/UI/index.js +++ b/src/components/UI/index.js @@ -18,3 +18,20 @@ export * from './Input/Input'; export * from './WalletButton/WalletButton'; export * from './ProgressModal/ProgressModal'; export * from './TransactionSubmittedModal/TransactionSubmittedModal'; +export * from './MaxButton/MaxButton'; +export * from './NetworkMenu/NetworkMenu'; +export * from './NetworkSwap/NetworkSwap'; +export * from './NetworkTitle/NetworkTitle'; +export * from './TokenBalance/TokenBalance'; +export * from './TokenInput/TokenInput'; +export * from './TokenSelector/TokenSelector'; +export * from './TransferButton/TransferButton'; +export * from './TransferMenuTab/TransferMenuTab'; +export * from './SearchToken/SearchToken'; +export * from './SelectTokenList/SelectTokenList'; +export * from './SelectTokenRow/SelectTokenRow'; +export * from './WalletLogin/WalletLogin'; +export * from './TransferLog/TransferLog'; +export * from './TransferLogContainer/TransferLogContainer'; +export * from './LogoutButton/LogoutButton'; +export * from './AccountAddress/AccountAddress'; diff --git a/src/hooks/useContract.js b/src/hooks/useContract.js index 7ea5a0a2..222d4e3e 100644 --- a/src/hooks/useContract.js +++ b/src/hooks/useContract.js @@ -2,9 +2,9 @@ import {useCallback, useMemo} from 'react'; import {ERC20_ABI, ERC20_BRIDGE_ABI, ETH_BRIDGE_ABI, MESSAGING_ABI} from '../abis/ethereum'; import {STARKNET_BRIDGE_ABI, STARKNET_ERC20_ABI} from '../abis/starknet'; -import {useTransferData} from '../components/Features/Transfer/Transfer/Transfer.hooks'; +import {useTransferData} from '../components/Features/Transfer/Transfer.hooks'; import {ETH_BRIDGE_CONTRACT_ADDRESS, MESSAGING_CONTRACT_ADDRESS} from '../config/addresses'; -import {useWallets} from '../providers/WalletsProvider/hooks'; +import {useWallets} from '../providers/WalletsProvider'; import {eth_getContract, starknet_getContract} from '../utils/contract'; export const useContracts = (ABI, getContractHandler = eth_getContract) => { diff --git a/src/hooks/useTokenBalance.js b/src/hooks/useTokenBalance.js index 8955eb10..9f237aa1 100644 --- a/src/hooks/useTokenBalance.js +++ b/src/hooks/useTokenBalance.js @@ -1,7 +1,7 @@ import {useCallback} from 'react'; import {balanceOf, eth_ethBalanceOf} from '../api/erc20'; -import {useTransferData} from '../components/Features/Transfer/Transfer/Transfer.hooks'; +import {useTransferData} from '../components/Features/Transfer/Transfer.hooks'; import {useEthereumTokenContract, useStarknetTokenContract} from './useContract'; export const useTokenBalance = account => { diff --git a/src/hooks/useTransfer.js b/src/hooks/useTransfer.js index f9a661bd..89dc9d7a 100644 --- a/src/hooks/useTransfer.js +++ b/src/hooks/useTransfer.js @@ -2,9 +2,9 @@ import {useCallback, useState} from 'react'; import {eth_deposit, eth_depositEth, eth_withdraw, starknet_initiateWithdraw} from '../api/bridge'; import {approve} from '../api/erc20'; -import {useSelectedToken} from '../components/Features/Transfer/Transfer/Transfer.hooks'; -import {useEthereumToken} from '../providers/TokensProvider/hooks'; -import {useStarknetWallet, useWallets} from '../providers/WalletsProvider/hooks'; +import {useSelectedToken} from '../components/Features/Transfer/Transfer.hooks'; +import {useEthereumToken} from '../providers/TokensProvider'; +import {useStarknetWallet, useWallets} from '../providers/WalletsProvider'; import {isEth} from '../utils'; import {eth_listenOnce, starknet_waitForTransaction} from '../utils/contract'; import { diff --git a/src/providers/TokensProvider/TokensProvider.js b/src/providers/TokensProvider/TokensProvider.js index c27a61e9..391f35a6 100644 --- a/src/providers/TokensProvider/TokensProvider.js +++ b/src/providers/TokensProvider/TokensProvider.js @@ -2,9 +2,9 @@ import PropTypes from 'prop-types'; import React, {useEffect, useReducer} from 'react'; import {useEthereumTokenBalance, useStarknetTokenBalance} from '../../hooks/useTokenBalance'; -import {useEthereumWallet, useStarknetWallet} from '../WalletsProvider/hooks'; -import {TokensContext} from './context'; -import {actions, initialState, reducer} from './reducer'; +import {useEthereumWallet, useStarknetWallet} from '../WalletsProvider'; +import {TokensContext} from './tokens-context'; +import {actions, initialState, reducer} from './tokens-reducer'; export const TokensProvider = ({children}) => { const [state, dispatch] = useReducer(reducer, initialState); diff --git a/src/providers/TokensProvider/index.js b/src/providers/TokensProvider/index.js new file mode 100644 index 00000000..e8c90f11 --- /dev/null +++ b/src/providers/TokensProvider/index.js @@ -0,0 +1,4 @@ +export * from './tokens-reducer'; +export * from './tokens-context'; +export * from './tokens-hooks'; +export * from './TokensProvider'; diff --git a/src/providers/TokensProvider/context.js b/src/providers/TokensProvider/tokens-context.js similarity index 78% rename from src/providers/TokensProvider/context.js rename to src/providers/TokensProvider/tokens-context.js index 642d8015..9141eed7 100644 --- a/src/providers/TokensProvider/context.js +++ b/src/providers/TokensProvider/tokens-context.js @@ -1,6 +1,6 @@ import {createContext} from 'react'; -import {initialState} from './reducer'; +import {initialState} from './tokens-reducer'; export const TokensContext = createContext({ ...initialState, diff --git a/src/providers/TokensProvider/hooks.js b/src/providers/TokensProvider/tokens-hooks.js similarity index 94% rename from src/providers/TokensProvider/hooks.js rename to src/providers/TokensProvider/tokens-hooks.js index 09dc6285..d5874f44 100644 --- a/src/providers/TokensProvider/hooks.js +++ b/src/providers/TokensProvider/tokens-hooks.js @@ -1,7 +1,7 @@ import {useCallback, useContext, useEffect, useMemo, useState} from 'react'; -import {useTransferData} from '../../components/Features/Transfer/Transfer/Transfer.hooks'; -import {TokensContext} from './context'; +import {useTransferData} from '../../components/Features/Transfer/Transfer.hooks'; +import {TokensContext} from './tokens-context'; export const useTokens = () => { const {isEthereum} = useTransferData(); diff --git a/src/providers/TokensProvider/reducer.js b/src/providers/TokensProvider/tokens-reducer.js similarity index 82% rename from src/providers/TokensProvider/reducer.js rename to src/providers/TokensProvider/tokens-reducer.js index 8db82526..12e3fe40 100644 --- a/src/providers/TokensProvider/reducer.js +++ b/src/providers/TokensProvider/tokens-reducer.js @@ -6,14 +6,6 @@ export const actions = { UPDATE_STARKNET_TOKEN_STATE: 'Tokens/UPDATE_STARKNET_TOKEN_STATE' }; -function getUpdatedTokens(tokens, payload) { - const {index, args} = payload; - const tokenData = {...tokens[index], ...args}; - const tokensCopy = [...tokens]; - tokensCopy[index] = tokenData; - return tokensCopy; -} - export const initialState = { ethereumTokens: [ {...NetworkType.ETHEREUM, bridgeAddress: ETH_BRIDGE_CONTRACT_ADDRESS}, @@ -22,19 +14,27 @@ export const initialState = { starknetTokens: StarknetTokens }; +const updateTokens = (tokens, payload) => { + const {index, args} = payload; + const tokenData = {...tokens[index], ...args}; + const tokensCopy = [...tokens]; + tokensCopy[index] = tokenData; + return tokensCopy; +}; + export const reducer = (state, action) => { switch (action.type) { case actions.UPDATE_ETHEREUM_TOKEN_STATE: { return { ...state, - ethereumTokens: getUpdatedTokens(state.ethereumTokens, action.payload) + ethereumTokens: updateTokens(state.ethereumTokens, action.payload) }; } case actions.UPDATE_STARKNET_TOKEN_STATE: { return { ...state, - starknetTokens: getUpdatedTokens(state.starknetTokens, action.payload) + starknetTokens: updateTokens(state.starknetTokens, action.payload) }; } diff --git a/src/providers/TransactionsProvider/TransactionsProvider.js b/src/providers/TransactionsProvider/TransactionsProvider.js index 102bed46..ad90c700 100644 --- a/src/providers/TransactionsProvider/TransactionsProvider.js +++ b/src/providers/TransactionsProvider/TransactionsProvider.js @@ -2,8 +2,8 @@ import PropTypes from 'prop-types'; import React, {useEffect, useReducer} from 'react'; import {StorageManager} from '../../services'; -import {TransactionsContext} from './context'; -import {actions, initialState, reducer} from './reducer'; +import {TransactionsContext} from './transactions-context'; +import {actions, initialState, reducer} from './transactions-reducer'; const LOCAL_STORAGE_KEY = 'STARKNET_BRIDGE_TXS'; diff --git a/src/providers/TransactionsProvider/index.js b/src/providers/TransactionsProvider/index.js new file mode 100644 index 00000000..f6831b6c --- /dev/null +++ b/src/providers/TransactionsProvider/index.js @@ -0,0 +1,4 @@ +export * from './transactions-reducer'; +export * from './transactions-context'; +export * from './transactions-hooks'; +export * from './TransactionsProvider'; diff --git a/src/providers/TransactionsProvider/context.js b/src/providers/TransactionsProvider/transactions-context.js similarity index 72% rename from src/providers/TransactionsProvider/context.js rename to src/providers/TransactionsProvider/transactions-context.js index 786592ed..09d867d7 100644 --- a/src/providers/TransactionsProvider/context.js +++ b/src/providers/TransactionsProvider/transactions-context.js @@ -1,6 +1,6 @@ import {createContext} from 'react'; -import {initialState} from './reducer'; +import {initialState} from './transactions-reducer'; export const TransactionsContext = createContext({ ...initialState, diff --git a/src/providers/TransactionsProvider/hooks.js b/src/providers/TransactionsProvider/transactions-hooks.js similarity index 72% rename from src/providers/TransactionsProvider/hooks.js rename to src/providers/TransactionsProvider/transactions-hooks.js index d023156a..b6c145d7 100644 --- a/src/providers/TransactionsProvider/hooks.js +++ b/src/providers/TransactionsProvider/transactions-hooks.js @@ -1,6 +1,6 @@ import {useContext} from 'react'; -import {TransactionsContext} from './context'; +import {TransactionsContext} from './transactions-context'; export const useTransactions = () => { const {transactions} = useContext(TransactionsContext); diff --git a/src/providers/TransactionsProvider/reducer.js b/src/providers/TransactionsProvider/transactions-reducer.js similarity index 100% rename from src/providers/TransactionsProvider/reducer.js rename to src/providers/TransactionsProvider/transactions-reducer.js diff --git a/src/providers/UseWalletProvider/UseWalletProvider.js b/src/providers/WalletProvider/WalletProvider.js similarity index 88% rename from src/providers/UseWalletProvider/UseWalletProvider.js rename to src/providers/WalletProvider/WalletProvider.js index a31fc24d..8ff153cc 100644 --- a/src/providers/UseWalletProvider/UseWalletProvider.js +++ b/src/providers/WalletProvider/WalletProvider.js @@ -9,7 +9,7 @@ import { supportedChainIds } from '../../config/config.json'; -export const UseWalletProvider = ({children}) => ( +export const WalletProvider = ({children}) => ( <UseWalletProviderWrapper autoConnect={autoConnect} connectors={{ @@ -24,6 +24,6 @@ export const UseWalletProvider = ({children}) => ( </UseWalletProviderWrapper> ); -UseWalletProvider.propTypes = { +WalletProvider.propTypes = { children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) }; diff --git a/src/providers/WalletsProvider/WalletsProvider.js b/src/providers/WalletsProvider/WalletsProvider.js index cb961275..f36d8266 100644 --- a/src/providers/WalletsProvider/WalletsProvider.js +++ b/src/providers/WalletsProvider/WalletsProvider.js @@ -3,14 +3,11 @@ import PropTypes from 'prop-types'; import React, {useEffect, useReducer} from 'react'; import {useWallet} from 'use-wallet'; -import { - useIsEthereum, - useIsStarknet -} from '../../components/Features/Transfer/Transfer/Transfer.hooks'; +import {useIsEthereum, useIsStarknet} from '../../components/Features/Transfer/Transfer.hooks'; import {WalletStatus} from '../../enums'; import {web3} from '../../web3'; -import {WalletsContext} from './context'; -import {actions, initialState, reducer} from './reducer'; +import {WalletsContext} from './wallets-context'; +import {actions, initialState, reducer} from './wallets-reducer'; export const WalletsProvider = ({children}) => { const [state, dispatch] = useReducer(reducer, initialState); diff --git a/src/providers/WalletsProvider/index.js b/src/providers/WalletsProvider/index.js new file mode 100644 index 00000000..dda2c834 --- /dev/null +++ b/src/providers/WalletsProvider/index.js @@ -0,0 +1,4 @@ +export * from './wallets-reducer'; +export * from './wallets-context'; +export * from './wallets-hooks'; +export * from './WalletsProvider'; diff --git a/src/providers/WalletsProvider/context.js b/src/providers/WalletsProvider/wallets-context.js similarity index 86% rename from src/providers/WalletsProvider/context.js rename to src/providers/WalletsProvider/wallets-context.js index dc4e7db0..1d4f7f16 100644 --- a/src/providers/WalletsProvider/context.js +++ b/src/providers/WalletsProvider/wallets-context.js @@ -1,6 +1,6 @@ import {createContext} from 'react'; -import {initialState} from './reducer'; +import {initialState} from './wallets-reducer'; export const WalletsContext = createContext({ ...initialState, diff --git a/src/providers/WalletsProvider/hooks.js b/src/providers/WalletsProvider/wallets-hooks.js similarity index 94% rename from src/providers/WalletsProvider/hooks.js rename to src/providers/WalletsProvider/wallets-hooks.js index abc7276c..d0123e77 100644 --- a/src/providers/WalletsProvider/hooks.js +++ b/src/providers/WalletsProvider/wallets-hooks.js @@ -1,7 +1,7 @@ import {useCallback, useContext, useEffect, useState} from 'react'; -import {useTransferData} from '../../components/Features/Transfer/Transfer/Transfer.hooks'; -import {WalletsContext} from './context'; +import {useTransferData} from '../../components/Features/Transfer/Transfer.hooks'; +import {WalletsContext} from './wallets-context'; export const useWallets = () => { const wallets = useContext(WalletsContext); diff --git a/src/providers/WalletsProvider/reducer.js b/src/providers/WalletsProvider/wallets-reducer.js similarity index 100% rename from src/providers/WalletsProvider/reducer.js rename to src/providers/WalletsProvider/wallets-reducer.js diff --git a/src/providers/index.js b/src/providers/index.js index 40fa8934..d2c58759 100644 --- a/src/providers/index.js +++ b/src/providers/index.js @@ -1,12 +1,12 @@ import {StoreProvider} from './StoreProvider/StoreProvider'; -import {TransactionsProvider} from './TransactionsProvider/TransactionsProvider'; -import {UseWalletProvider} from './UseWalletProvider/UseWalletProvider'; -import {WalletsProvider} from './WalletsProvider/WalletsProvider'; +import {TransactionsProvider} from './TransactionsProvider'; +import {WalletProvider} from './WalletProvider/WalletProvider'; +import {WalletsProvider} from './WalletsProvider'; import {combineProviders} from './combine-providers'; export const Providers = combineProviders([ StoreProvider, - UseWalletProvider, + WalletProvider, WalletsProvider, TransactionsProvider ]); diff --git a/src/store/store.js b/src/store/store.js index c3d2877f..46f8bc03 100644 --- a/src/store/store.js +++ b/src/store/store.js @@ -2,7 +2,7 @@ import {configureStore} from '@reduxjs/toolkit'; import bridge from '../components/Features/Bridge/Bridge.slice'; import modal from '../components/Features/ModalProvider/ModalProvider.slice'; -import transfer from '../components/Features/Transfer/Transfer/Transfer.slice'; +import transfer from '../components/Features/Transfer/Transfer.slice'; export const store = configureStore({ reducer: { From 22ce3e146ec362209d1586f88276458ba3a15c7a Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Sun, 19 Dec 2021 23:38:47 +0200 Subject: [PATCH 023/211] feat: transactions provider [skip ci] --- package.json | 1 + src/api/erc20.js | 14 ++- .../Features/Account/Account.constants.js | 19 ---- src/components/Features/Account/Account.js | 23 +++-- .../ModalProvider/ModalProvider.hooks.js | 17 ++++ .../Features/Transfer/Transfer.hooks.js | 8 +- src/components/Features/Transfer/Transfer.js | 22 +++-- .../Features/Transfer/Transfer.module.scss | 2 + .../Features/Transfer/Transfer.strings.js | 1 + .../UI/LinkButton/LinkButton.module.scss | 5 +- src/components/UI/Loading/Loading.js | 6 +- src/components/UI/Loading/Loading.module.scss | 22 +++++ src/components/UI/Loading/Loading.scss | 22 ----- .../UI/ProgressModal/ProgressModal.js | 7 +- .../ProgressModal/ProgressModal.module.scss | 2 +- .../TransactionSubmittedModal.js | 57 ++++++------ .../TransactionSubmittedModal.module.scss | 0 .../TransactionSubmittedModal.strings.js | 4 + src/components/UI/TransferLog/TransferLog.js | 69 ++++++++++----- .../UI/TransferLog/TransferLog.module.scss | 8 ++ .../TransferLogContainer.module.scss | 2 + src/constants.js | 35 ++++++++ src/enums/ChainType.js | 39 ++++----- src/enums/TransactionStatus.js | 9 +- src/hooks/useTransfer.js | 86 +++++++++++-------- .../BlockHashProvider/BlockHashProvider.js | 29 +++++++ .../BlockHashProvider/block-hash-context.js | 3 + .../BlockHashProvider/block-hash-hooks.js | 5 ++ src/providers/BlockHashProvider/index.js | 3 + .../TransactionsProvider.js | 61 +++++++++++-- .../transactions-context.js | 2 +- .../transactions-hooks.js | 16 +++- .../transactions-reducer.js | 2 +- src/providers/index.js | 2 + src/utils/hash.js | 20 +++++ src/utils/index.js | 1 + src/utils/number.js | 17 ++-- yarn.lock | 20 +++++ 38 files changed, 463 insertions(+), 198 deletions(-) delete mode 100644 src/components/Features/Account/Account.constants.js create mode 100644 src/components/UI/Loading/Loading.module.scss delete mode 100644 src/components/UI/Loading/Loading.scss create mode 100644 src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.module.scss create mode 100644 src/constants.js create mode 100644 src/providers/BlockHashProvider/BlockHashProvider.js create mode 100644 src/providers/BlockHashProvider/block-hash-context.js create mode 100644 src/providers/BlockHashProvider/block-hash-hooks.js create mode 100644 src/providers/BlockHashProvider/index.js create mode 100644 src/utils/hash.js diff --git a/package.json b/package.json index 4ef659c7..f48b7506 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,7 @@ "react-redux": "^7.2.6", "react-scripts": "4.0.3", "starknet": "^2.5.0", + "use-deep-compare-effect": "^1.8.1", "use-wallet": "^0.13.1", "web3": "^1.6.0" }, diff --git a/src/api/erc20.js b/src/api/erc20.js index 134cfe6c..6865f94e 100644 --- a/src/api/erc20.js +++ b/src/api/erc20.js @@ -1,6 +1,5 @@ import { eth_fromWei, - eth_toWei, starknet_fromFelt, starknet_fromUint256, starknet_toFelt, @@ -17,7 +16,7 @@ import {web3} from '../web3'; export const approve = async (spender, value, contract, from, isEthereum = true) => { try { if (isEthereum) { - return await eth_sendTransaction(contract, 'approve', [spender, eth_toWei(value)], {from}); + return await eth_sendTransaction(contract, 'approve', [spender, value], {from}); } else { const tokenDecimals = await decimals(contract, false); return await starknet_sendTransaction(contract, 'approve', { @@ -30,6 +29,17 @@ export const approve = async (spender, value, contract, from, isEthereum = true) } }; +export const allowance = async (owner, spender, contract, isEthereum = true) => { + try { + if (isEthereum) { + const allow = await eth_callContract(contract, 'allowance', [owner, spender]); + return eth_fromWei(allow); + } + } catch (ex) { + return Promise.reject(ex); + } +}; + export const balanceOf = async (account, contract, isEthereum = true) => { try { if (isEthereum) { diff --git a/src/components/Features/Account/Account.constants.js b/src/components/Features/Account/Account.constants.js deleted file mode 100644 index febeb0e4..00000000 --- a/src/components/Features/Account/Account.constants.js +++ /dev/null @@ -1,19 +0,0 @@ -import {evaluate} from '../../../utils'; - -export const LINKS = { - ETHERSCAN: { - text: 'etherscan', - url: (chainName, account) => - evaluate('https://{{chainName}}etherscan.io/address/{{account}}', { - chainName, - account - }) - }, - VOYAGER: { - text: 'voyager', - url: (chainName, account) => - evaluate('https://{{chainName}}voyager.online/contract/{{account}}', { - account - }) - } -}; diff --git a/src/components/Features/Account/Account.js b/src/components/Features/Account/Account.js index 2b486187..1d95162d 100644 --- a/src/components/Features/Account/Account.js +++ b/src/components/Features/Account/Account.js @@ -1,41 +1,35 @@ import React from 'react'; -import {toChainName} from '../../../enums'; +import {LINKS} from '../../../constants'; import {useTransactions} from '../../../providers/TransactionsProvider'; import {useWallets} from '../../../providers/WalletsProvider'; import { + AccountAddress, BackButton, + LogoutButton, Menu, MenuTitle, - AccountAddress, - LogoutButton, TransferLog, TransferLogContainer } from '../../UI'; import {LinkButton} from '../../UI/LinkButton/LinkButton'; import {useBridgeActions} from '../Bridge/Bridge.hooks'; import {useTransferData} from '../Transfer/Transfer.hooks'; -import {LINKS} from './Account.constants'; import styles from './Account.module.scss'; import {TITLE_TXT} from './Account.strings'; export const Account = () => { - const transactions = useTransactions(); + const {transactions} = useTransactions(); const {showTransferMenu} = useBridgeActions(); const {account, chainId, resetWallet} = useWallets(); const {isEthereum, isStarknet} = useTransferData(); const renderTransactions = () => { return transactions.length - ? transactions.map((tx, index) => { - return <TransferLog key={index} />; - }) + ? transactions.map((tx, index) => <TransferLog key={index} tx={tx} />) : null; }; - let chainName = toChainName(chainId); - chainName += chainName && '.'; - return ( <Menu> <div className={styles.account}> @@ -43,10 +37,13 @@ export const Account = () => { <MenuTitle text={TITLE_TXT} /> <AccountAddress address={account} /> {isEthereum && ( - <LinkButton text={LINKS.ETHERSCAN.text} url={LINKS.ETHERSCAN.url(chainName, account)} /> + <LinkButton + text={LINKS.ETHERSCAN.text} + url={LINKS.ETHERSCAN.accountUrl(chainId, account)} + /> )} {isStarknet && ( - <LinkButton text={LINKS.VOYAGER.text} url={LINKS.VOYAGER.url(chainName, account)} /> + <LinkButton text={LINKS.VOYAGER.text} url={LINKS.VOYAGER.accountUrl(chainId, account)} /> )} <TransferLogContainer>{renderTransactions()}</TransferLogContainer> <LogoutButton isDisabled={isStarknet} onClick={resetWallet} /> diff --git a/src/components/Features/ModalProvider/ModalProvider.hooks.js b/src/components/Features/ModalProvider/ModalProvider.hooks.js index 47d84516..c1dc9a3b 100644 --- a/src/components/Features/ModalProvider/ModalProvider.hooks.js +++ b/src/components/Features/ModalProvider/ModalProvider.hooks.js @@ -53,3 +53,20 @@ export const useTransactionSubmittedModal = () => { [dispatch] ); }; + +export const useErrorModal = title => { + const dispatch = useDispatch(); + return useCallback( + body => { + dispatch( + showModalAction({ + title, + body, + isClosable: true, + type: ModalType.ERROR + }) + ); + }, + [dispatch] + ); +}; diff --git a/src/components/Features/Transfer/Transfer.hooks.js b/src/components/Features/Transfer/Transfer.hooks.js index 80649d39..38b2096b 100644 --- a/src/components/Features/Transfer/Transfer.hooks.js +++ b/src/components/Features/Transfer/Transfer.hooks.js @@ -35,11 +35,11 @@ export const useTransferData = () => { export const useSelectedToken = () => { const symbol = useSelector(selectSymbol); const isEthereum = useSelector(toStarknetSelector); - const getEthereumToken = useEthereumToken(); - const getStarknetToken = useStarknetToken(); + const ethereumToken = useEthereumToken()(symbol); + const starknetToken = useStarknetToken()(symbol); return useMemo( - () => (isEthereum ? getEthereumToken(symbol) : getStarknetToken(symbol)), - [symbol, isEthereum] + () => (isEthereum ? ethereumToken : starknetToken), + [symbol, isEthereum, ethereumToken, starknetToken] ); }; diff --git a/src/components/Features/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer.js index 11254e06..95294b1a 100644 --- a/src/components/Features/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer.js @@ -3,6 +3,7 @@ import React, {useEffect, useState} from 'react'; import {ActionType, NetworkType} from '../../../enums'; import {useTransfer} from '../../../hooks'; import {useEthereumToken, useStarknetToken, useTokens} from '../../../providers/TokensProvider'; +import {useTransactions} from '../../../providers/TransactionsProvider'; import { Loading, Menu, @@ -15,6 +16,7 @@ import { import {LoadingSize} from '../../UI/Loading/Loading.enums'; import {useBridgeActions} from '../Bridge/Bridge.hooks'; import { + useErrorModal, useHideModal, useProgressModal, useTransactionSubmittedModal @@ -27,7 +29,7 @@ import { useTransferData } from './Transfer.hooks'; import styles from './Transfer.module.scss'; -import {INSUFFICIENT_BALANCE_ERROR_MSG} from './Transfer.strings'; +import {ERROR_MODAL_TITLE, INSUFFICIENT_BALANCE_ERROR_MSG} from './Transfer.strings'; export const Transfer = () => { const [isEthereum, setEthereum] = useIsEthereum(); @@ -38,11 +40,13 @@ export const Transfer = () => { const {showSelectTokenMenu} = useBridgeActions(); const {selectedToken, action} = useTransferData(); const {selectToken} = useTransferActions(); + const {addTransaction} = useTransactions(); const {transferTokenToStarknet, transferTokenFromStarknet, data, error, isLoading, progress} = useTransfer(); const tokens = useTokens(); const hideModal = useHideModal(); const showProgressModal = useProgressModal(); + const showErrorModal = useErrorModal(ERROR_MODAL_TITLE); const showTransactionSubmittedModal = useTransactionSubmittedModal(); const getEthereumToken = useEthereumToken(); const getStarknetToken = useStarknetToken(); @@ -57,15 +61,14 @@ export const Transfer = () => { if (isLoading) { progress && showProgressModal(progress.type, progress.message); } else if (error) { - // TODO: show error modal hideModal(); + showErrorModal(error.message); } else if (data) { - // TODO: save tx in local storage - const [receipt, event] = data; clearAmount(); - showTransactionSubmittedModal(receipt.transactionHash); + addTransaction(data); + showTransactionSubmittedModal(data); } - }, [progress, data, error, isLoading, amount]); + }, [progress, data, error, isLoading]); useEffect(() => { if (selectedToken) { @@ -156,7 +159,12 @@ export const Transfer = () => { return ( <Menu> - <div className={styles.transfer}> + <div + className={styles.transfer} + style={{ + filter: isLoading && 'blur(5px)' + }} + > <div className={styles.tabsContainer}>{renderTabs()}</div> {!selectedToken && ( <center> diff --git a/src/components/Features/Transfer/Transfer.module.scss b/src/components/Features/Transfer/Transfer.module.scss index 83d78dc6..541e0849 100644 --- a/src/components/Features/Transfer/Transfer.module.scss +++ b/src/components/Features/Transfer/Transfer.module.scss @@ -4,6 +4,8 @@ $background-color: $--color-alpha-1; $error-msg-color: $--color-error; .transfer { + transition: 0.3ms ease-in-out; + .tabsContainer { display: flex; background: $background-color; diff --git a/src/components/Features/Transfer/Transfer.strings.js b/src/components/Features/Transfer/Transfer.strings.js index 4ce0ec4d..25e06cda 100644 --- a/src/components/Features/Transfer/Transfer.strings.js +++ b/src/components/Features/Transfer/Transfer.strings.js @@ -1 +1,2 @@ export const INSUFFICIENT_BALANCE_ERROR_MSG = 'Insufficient balance'; +export const ERROR_MODAL_TITLE = 'Transaction error'; diff --git a/src/components/UI/LinkButton/LinkButton.module.scss b/src/components/UI/LinkButton/LinkButton.module.scss index 7f4692b8..4ad2cba8 100644 --- a/src/components/UI/LinkButton/LinkButton.module.scss +++ b/src/components/UI/LinkButton/LinkButton.module.scss @@ -14,7 +14,6 @@ $path-fill-color-hover: $--color-gamma; border-style: solid; border-width: 1px; font-size: 12px; - margin: 10px 10px 10px 0; text-transform: capitalize; display: inline-block; cursor: pointer; @@ -23,6 +22,10 @@ $path-fill-color-hover: $--color-gamma; margin-left: 5px; } + &:not(:last-child) { + margin: 10px 10px 10px 0; + } + &:hover { color: $color-hover; border-color: $border-color-hover; diff --git a/src/components/UI/Loading/Loading.js b/src/components/UI/Loading/Loading.js index 7040b7f1..eff89510 100644 --- a/src/components/UI/Loading/Loading.js +++ b/src/components/UI/Loading/Loading.js @@ -2,7 +2,7 @@ import PropTypes from 'prop-types'; import React, {useEffect, useState} from 'react'; import {Keyframes} from '../KeyFrames/KeyFrames'; -import './Loading.scss'; +import styles from './Loading.module.scss'; export const Loading = ({size, color}) => { const [keyFrameSize, setKeyFrameSize] = useState(size - size / 10); @@ -14,7 +14,7 @@ export const Loading = ({size, color}) => { return ( <> <div - className="lds-ripple" + className={styles.loading} style={{width: `${size}px`, height: `${size}px`, borderColor: color}} > <div style={{borderColor: color}} /> @@ -35,7 +35,7 @@ export const Loading = ({size, color}) => { height: `${keyFrameSize}px`, opacity: 0 }} - name="lds-ripple" + name={styles.loading} /> </> ); diff --git a/src/components/UI/Loading/Loading.module.scss b/src/components/UI/Loading/Loading.module.scss new file mode 100644 index 00000000..2da2d6d6 --- /dev/null +++ b/src/components/UI/Loading/Loading.module.scss @@ -0,0 +1,22 @@ +@import '../../../index'; + +$border-color: $--color-white; + +.loading { + display: inline-block; + position: relative; + width: 80px; + height: 80px; + + div { + position: absolute; + border: 4px solid $border-color; + opacity: 1; + border-radius: 50%; + animation: loading 1s cubic-bezier(0, 0.2, 0.8, 1) infinite; + } + + div:nth-child(2) { + animation-delay: -0.5s; + } +} diff --git a/src/components/UI/Loading/Loading.scss b/src/components/UI/Loading/Loading.scss deleted file mode 100644 index 51b81c11..00000000 --- a/src/components/UI/Loading/Loading.scss +++ /dev/null @@ -1,22 +0,0 @@ -@import '../../../index'; - -$border-color: $--color-white; - -.lds-ripple { - display: inline-block; - position: relative; - width: 80px; - height: 80px; -} - -.lds-ripple div { - position: absolute; - border: 4px solid $border-color; - opacity: 1; - border-radius: 50%; - animation: lds-ripple 1s cubic-bezier(0, 0.2, 0.8, 1) infinite; -} - -.lds-ripple div:nth-child(2) { - animation-delay: -0.5s; -} diff --git a/src/components/UI/ProgressModal/ProgressModal.js b/src/components/UI/ProgressModal/ProgressModal.js index 82f476f1..08f004db 100644 --- a/src/components/UI/ProgressModal/ProgressModal.js +++ b/src/components/UI/ProgressModal/ProgressModal.js @@ -2,7 +2,6 @@ import PropTypes from 'prop-types'; import React from 'react'; import {useColors} from '../../../hooks'; -import {toClasses} from '../../../utils'; import {LoadingSize} from '../Loading/Loading.enums'; import {Loading} from '../index'; import styles from './ProgressModal.module.scss'; @@ -13,8 +12,10 @@ const ProgressModal = ({message}) => { return ( <div className={styles.progressModal}> <div>{message}</div> - <div className={toClasses(styles.loading, 'center')}> - <Loading color={colorBeta} size={LoadingSize.LARGE} /> + <div className={styles.loading}> + <center> + <Loading color={colorBeta} size={LoadingSize.LARGE} /> + </center> </div> </div> ); diff --git a/src/components/UI/ProgressModal/ProgressModal.module.scss b/src/components/UI/ProgressModal/ProgressModal.module.scss index f684097d..bfd23ec2 100644 --- a/src/components/UI/ProgressModal/ProgressModal.module.scss +++ b/src/components/UI/ProgressModal/ProgressModal.module.scss @@ -1,5 +1,5 @@ .progressModal { .loading { - margin-top: 40px; + margin-top: 30px; } } diff --git a/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.js b/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.js index d110a6bd..4d128063 100644 --- a/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.js +++ b/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.js @@ -2,52 +2,55 @@ import PropTypes from 'prop-types'; import React from 'react'; import {ReactComponent as EtherscanLogo} from '../../../assets/svg/etherscan.svg'; -import {toChainName} from '../../../enums'; +import {byChainId} from '../../../enums'; import {useColors} from '../../../hooks'; import {useWallets} from '../../../providers/WalletsProvider'; import {openInNewTab} from '../../../utils'; import {Button} from '../Button/Button'; import {Circle} from '../Circle/Circle'; import {ETHERSCAN_TX_URL} from './TransactionSubmittedModal.constants'; -import {BTN_TEXT} from './TransactionSubmittedModal.strings'; +import {BTN_TEXT, DEPOSIT_MESSAGE_TXT_PARTS} from './TransactionSubmittedModal.strings'; -const TransactionSubmittedModal = ({transactionHash}) => { +const TransactionSubmittedModal = ({tx}) => { const {colorAlpha3, colorWhite, colorWhite1} = useColors(); const {chainId} = useWallets(); const onClick = () => { - let chainName = toChainName(chainId); - chainName += chainName && '.'; - openInNewTab(ETHERSCAN_TX_URL(chainName, transactionHash)); + openInNewTab(ETHERSCAN_TX_URL(byChainId(chainId).blockExplorerUrl, tx.eth_hash)); }; return ( - <div className="center"> - <br /> - <Button - colorBackground={colorWhite} - colorBorder={colorAlpha3} - colorText={colorAlpha3} - icon={ - <Circle color={colorWhite1} size={40}> - <EtherscanLogo style={{margin: 'auto'}} /> - </Circle> - } - style={{ - borderRadius: '7px', - borderWidth: '2px', - fontSize: '16px', - height: '60px' - }} - text={BTN_TEXT} - onClick={onClick} - /> + <div> + <center> + <p> + <b>{DEPOSIT_MESSAGE_TXT_PARTS[0]}</b> + {DEPOSIT_MESSAGE_TXT_PARTS[1]} + </p> + <Button + colorBackground={colorWhite} + colorBorder={colorAlpha3} + colorText={colorAlpha3} + icon={ + <Circle color={colorWhite1} size={40}> + <EtherscanLogo style={{margin: 'auto'}} /> + </Circle> + } + style={{ + borderRadius: '7px', + borderWidth: '2px', + fontSize: '16px', + height: '60px' + }} + text={BTN_TEXT} + onClick={onClick} + /> + </center> </div> ); }; TransactionSubmittedModal.propTypes = { - transactionHash: PropTypes.string + tx: PropTypes.object }; export default TransactionSubmittedModal; diff --git a/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.module.scss b/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.module.scss new file mode 100644 index 00000000..e69de29b diff --git a/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.strings.js b/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.strings.js index 04b7db19..b2607148 100644 --- a/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.strings.js +++ b/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.strings.js @@ -1 +1,5 @@ export const BTN_TEXT = 'view on etherscan'; +export const DEPOSIT_MESSAGE_TXT_PARTS = [ + 'Your transaction has been sent to StarkNet!\n', + "We'll notify you once it's status will be updated." +]; diff --git a/src/components/UI/TransferLog/TransferLog.js b/src/components/UI/TransferLog/TransferLog.js index 09edc98c..f392d374 100644 --- a/src/components/UI/TransferLog/TransferLog.js +++ b/src/components/UI/TransferLog/TransferLog.js @@ -1,31 +1,60 @@ import PropTypes from 'prop-types'; -import React from 'react'; +import React, {useEffect, useState} from 'react'; +import {LINKS} from '../../../constants'; +import {TransactionStatus} from '../../../enums'; +import {useWallets} from '../../../providers/WalletsProvider'; +import {useTransferData} from '../../Features/Transfer/Transfer.hooks'; import {CryptoLogoSize} from '../CryptoLogo/CryptoLogo.enums'; +import {LinkButton} from '../LinkButton/LinkButton'; import {CryptoLogo} from '../index'; import styles from './TransferLog.module.scss'; -export const TransferLog = ({name, symbol, amount, timestamp}) => ( - <> - <div className={styles.transferLog}> - <div className={styles.left}> - <CryptoLogo size={CryptoLogoSize.SMALL} symbol={symbol} /> - <div> - {name} - <div className={styles.data}>{new Date(timestamp).toLocaleString()}</div> +export const TransferLog = ({tx}) => { + const {symbol, timestamp, name, amount, status, eth_hash, starknet_hash} = tx; + const [sign, setSign] = useState(''); + const {action} = useTransferData(); + const {chainId} = useWallets(); + + useEffect(() => { + setSign(tx.type === action ? '-' : '+'); + }, [action]); + + return ( + <> + <div className={styles.transferLog}> + <div className={styles.left}> + <CryptoLogo size={CryptoLogoSize.SMALL} symbol={symbol} /> + <div> + {name} + <div className={styles.data}>{new Date(timestamp).toLocaleString()}</div> + </div> + </div> + <div className={styles.right}> + <div className={styles.amount}> + {sign} {amount} {symbol.toUpperCase()} + </div> + {status !== TransactionStatus.ACCEPTED_ON_L1 ? ( + <div className={styles.data}>{status.replace('_', ' ')}</div> + ) : ( + <div> + <LinkButton + text={LINKS.ETHERSCAN.text} + url={LINKS.ETHERSCAN.txUrl(chainId, eth_hash)} + /> + <LinkButton + text={LINKS.VOYAGER.text} + url={LINKS.VOYAGER.txUrl(chainId, starknet_hash)} + /> + </div> + )} </div> </div> - <div className={styles.amount}> - {amount} {symbol.toUpperCase()} - </div> - </div> - <hr /> - </> -); + <hr /> + </> + ); +}; TransferLog.propTypes = { - name: PropTypes.string, - symbol: PropTypes.string, - amount: PropTypes.string, - timestamp: PropTypes.number + tx: PropTypes.object }; diff --git a/src/components/UI/TransferLog/TransferLog.module.scss b/src/components/UI/TransferLog/TransferLog.module.scss index c7f439ba..8bd49722 100644 --- a/src/components/UI/TransferLog/TransferLog.module.scss +++ b/src/components/UI/TransferLog/TransferLog.module.scss @@ -17,6 +17,14 @@ $hr-color: $--color-alpha-3; .left { display: flex; + align-items: center; + } + + .right { + display: flex; + flex-direction: column; + align-items: flex-end; + justify-content: space-around; } .data { diff --git a/src/components/UI/TransferLogContainer/TransferLogContainer.module.scss b/src/components/UI/TransferLogContainer/TransferLogContainer.module.scss index 4ffdbecf..6462d5a7 100644 --- a/src/components/UI/TransferLogContainer/TransferLogContainer.module.scss +++ b/src/components/UI/TransferLogContainer/TransferLogContainer.module.scss @@ -13,6 +13,8 @@ $view-more-color: $--color-gamma-1; border-style: solid; border-width: 2px; margin: 10px 0; + overflow-y: auto; + max-height: 300px; .title { display: flex; diff --git a/src/constants.js b/src/constants.js new file mode 100644 index 00000000..2c3f29c8 --- /dev/null +++ b/src/constants.js @@ -0,0 +1,35 @@ +import {byChainId} from './enums'; +import {evaluate} from './utils'; + +export const LOCAL_STORAGE_TXS_KEY = 'STARKNET_BRIDGE_TXS'; +export const STARKNET_INVOKE_TX_PREFIX = '115923154332517'; +export const ETHERSCAN_URL = 'etherscan.io'; +export const VOYAGER_URL = 'voyager.online'; +export const LINKS = { + ETHERSCAN: { + text: 'etherscan', + txUrl: (chainId, hash) => + evaluate('{{url}}/tx/{{hash}}', { + url: byChainId(chainId).blockExplorerUrl, + hash + }), + accountUrl: (chainId, account) => + evaluate('{{url}}/address/{{account}}', { + url: byChainId(chainId).blockExplorerUrl, + account + }) + }, + VOYAGER: { + text: 'voyager', + txUrl: (chainId, hash) => + evaluate('{{url}}/tx/{{hash}}', { + url: byChainId(chainId).starknetBlockExplorerUrl, + hash + }), + accountUrl: (chainId, account) => + evaluate('{{url}}/contract/{{account}}', { + url: byChainId(chainId).starknetBlockExplorerUrl, + account + }) + } +}; diff --git a/src/enums/ChainType.js b/src/enums/ChainType.js index e70c5118..8a7dd020 100644 --- a/src/enums/ChainType.js +++ b/src/enums/ChainType.js @@ -1,31 +1,30 @@ +import {ETHERSCAN_URL, VOYAGER_URL} from '../constants'; + export const ChainType = { MAIN: { id: 1, - name: 'main' - }, - MORDEN: { - id: 2, - name: 'morden' - }, - ROPSTEN: { - id: 3, - name: 'ropsten' - }, - RINKEBY: { - id: 4, - name: 'rinkeby' + name: 'main', + blockExplorerUrl: `https://${ETHERSCAN_URL}`, + starknetId: 'SN_MAIN', + starknetIdPrefix: '23448594291968334', + starknetBlockExplorerUrl: `https://${VOYAGER_URL}` }, GOERLI: { id: 5, - name: 'goerli' - }, - KOVAN: { - id: 42, - name: 'kovan' + name: 'goerli', + blockExplorerUrl: `https://goerli.${ETHERSCAN_URL}`, + starknetId: 'SN_GOERLI', + starknetIdPrefix: '1536727068981429685321', + starknetBlockExplorerUrl: `https://goerli.${VOYAGER_URL}` } }; -export const toChainName = id => { +export const byChainId = id => { const key = Object.keys(ChainType).find(key => ChainType[key].id === id); - return ChainType[key].name === ChainType.MAIN.name ? '' : ChainType[key].name; + return ChainType[key]; +}; + +export const toChainName = id => { + const chainData = byChainId(id); + return chainData.name === ChainType.MAIN.name ? '' : chainData.name; }; diff --git a/src/enums/TransactionStatus.js b/src/enums/TransactionStatus.js index 03ec4954..6b297bde 100644 --- a/src/enums/TransactionStatus.js +++ b/src/enums/TransactionStatus.js @@ -1,5 +1,8 @@ export const TransactionStatus = { - PENDING: 0, - ACCEPTED_ON_L2: 1, - ACCEPTED_ON_L1: 2 + REJECTED: 'REJECTED', + NOT_RECEIVED: 'NOT_RECEIVED', + RECEIVED: 'RECEIVED', + PENDING: 'PENDING', + ACCEPTED_ON_L2: 'ACCEPTED_ON_L2', + ACCEPTED_ON_L1: 'ACCEPTED_ON_L1' }; diff --git a/src/hooks/useTransfer.js b/src/hooks/useTransfer.js index 89dc9d7a..afacd8f4 100644 --- a/src/hooks/useTransfer.js +++ b/src/hooks/useTransfer.js @@ -1,11 +1,13 @@ -import {useCallback, useState} from 'react'; +import {useCallback, useEffect, useState} from 'react'; +import {constants, stark} from 'starknet'; import {eth_deposit, eth_depositEth, eth_withdraw, starknet_initiateWithdraw} from '../api/bridge'; -import {approve} from '../api/erc20'; -import {useSelectedToken} from '../components/Features/Transfer/Transfer.hooks'; -import {useEthereumToken} from '../providers/TokensProvider'; +import {allowance, approve} from '../api/erc20'; +import {useSelectedToken, useTransferData} from '../components/Features/Transfer/Transfer.hooks'; +import {ActionType} from '../enums'; +import {useEthereumToken, useStarknetToken} from '../providers/TokensProvider'; import {useStarknetWallet, useWallets} from '../providers/WalletsProvider'; -import {isEth} from '../utils'; +import {hashEquals, isEth, txHash} from '../utils'; import {eth_listenOnce, starknet_waitForTransaction} from '../utils/contract'; import { useEthBridgeContract, @@ -49,28 +51,43 @@ export const useTransfer = () => { const [error, setError] = useState(null); const {account: ethereumAccount, chainId} = useWallets(); const {account: starknetAccount} = useStarknetWallet(); + const {action} = useTransferData(); const selectedToken = useSelectedToken(); const ethBridgeContract = useEthBridgeContract(); const messagingContract = useMessagingContract(); const getTokenContract = useTokenContract(); const getTokenBridgeContract = useTokenBridgeContract(); const getEthereumToken = useEthereumToken(); + const getStarknetToken = useStarknetToken(); const getEthereumTokenBridgeContract = useEthereumTokenBridgeContract(); const resetState = () => { - setError(null); setData(null); + setError(null); setProgress(null); setIsLoading(false); }; const waitForLogMessageToL2 = () => { + const {symbol} = selectedToken; + const snBridgeAddress = getStarknetToken(symbol).bridgeAddress[chainId]; + const ethBridgeAddress = getEthereumToken(symbol).bridgeAddress[chainId]; return new Promise((resolve, reject) => { eth_listenOnce(messagingContract, 'LogMessageToL2', (error, event) => { - if (error) { - reject(error); + const { + returnValues: {to_address, from_address, selector, payload} + } = event; + if ( + hashEquals( + [to_address, from_address, selector], + [snBridgeAddress, ethBridgeAddress, stark.getSelectorFromName('handle_deposit')] + ) + ) { + if (error) { + reject(error); + } + resolve(txHash(from_address, to_address, selector, payload, chainId)); } - resolve(event); }); }); }; @@ -86,23 +103,18 @@ export const useTransfer = () => { }); }; - const transferToStarknet = async ( - amount, - depositHandler, - bridgeContract, - tokenContract, - withApproval - ) => { - const {bridgeAddress, symbol} = selectedToken; + const transferToStarknet = async (amount, depositHandler, bridgeContract, tokenContract) => { + const {bridgeAddress, symbol, name} = selectedToken; resetState(); try { setIsLoading(true); - let approvalPromise = Promise.resolve(); - if (withApproval) { + if (!isEth(symbol)) { setProgress(PROGRESS.approval(symbol)); - approvalPromise = approve(bridgeAddress[chainId], amount, tokenContract, ethereumAccount); + const allow = await allowance(ethereumAccount, bridgeAddress[chainId], tokenContract); + if (allow < amount) { + await approve(bridgeAddress[chainId], constants.MASK_250, tokenContract, ethereumAccount); + } } - await approvalPromise; setProgress(PROGRESS.deposit(amount, symbol)); const depositPromise = depositHandler( starknetAccount, @@ -110,14 +122,22 @@ export const useTransfer = () => { bridgeContract, ethereumAccount ); - const depositEventPromise = waitForLogMessageToL2(); - const results = await Promise.all([depositPromise, depositEventPromise]); + const depositEventPromise = waitForLogMessageToL2(bridgeContract.options.address); + const [{transactionHash}, starknetTxHash] = await Promise.all([ + depositPromise, + depositEventPromise + ]); setIsLoading(false); - setProgress(null); - setData(results); + setData({ + type: ActionType.TRANSFER_TO_STARKNET, + name, + symbol, + amount, + eth_hash: transactionHash, + starknet_hash: starknetTxHash + }); } catch (ex) { setIsLoading(false); - setProgress(null); setError(ex); } }; @@ -189,19 +209,17 @@ export const useTransfer = () => { const {tokenAddress, bridgeAddress} = selectedToken; const tokenContract = getTokenContract(tokenAddress); const tokenBridgeContract = getTokenBridgeContract(bridgeAddress); - return await transferToStarknet( - amount, - eth_deposit, - tokenBridgeContract, - tokenContract, - true - ); + return await transferToStarknet(amount, eth_deposit, tokenBridgeContract, tokenContract); } - return await transferToStarknet(amount, eth_depositEth, ethBridgeContract, null, false); + return await transferToStarknet(amount, eth_depositEth, ethBridgeContract, null); }, [ethereumAccount, starknetAccount, selectedToken] ); + useEffect(() => { + resetState(); + }, [action]); + return { transferTokenToStarknet, transferTokenFromStarknet, diff --git a/src/providers/BlockHashProvider/BlockHashProvider.js b/src/providers/BlockHashProvider/BlockHashProvider.js new file mode 100644 index 00000000..04d4baa3 --- /dev/null +++ b/src/providers/BlockHashProvider/BlockHashProvider.js @@ -0,0 +1,29 @@ +import {getStarknet} from '@argent/get-starknet'; +import PropTypes from 'prop-types'; +import React, {useCallback, useEffect} from 'react'; + +import {pollBlockNumberInterval} from '../../config/config.json'; +import {BlockHashContext} from './block-hash-context'; + +export const BlockHashProvider = ({children}) => { + const [blockHash, setBlockHash] = React.useState(); + + const fetchBlockHash = useCallback(async () => { + const {block_hash} = await getStarknet().provider.getBlock(); + setBlockHash(block_hash); + }, [getStarknet().provider]); + + useEffect(() => { + fetchBlockHash(); + const intervalId = setInterval(() => { + fetchBlockHash(); + }, pollBlockNumberInterval); + return () => clearInterval(intervalId); + }, [fetchBlockHash]); + + return <BlockHashContext.Provider value={blockHash}>{children}</BlockHashContext.Provider>; +}; + +BlockHashProvider.propTypes = { + children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) +}; diff --git a/src/providers/BlockHashProvider/block-hash-context.js b/src/providers/BlockHashProvider/block-hash-context.js new file mode 100644 index 00000000..3a03db2a --- /dev/null +++ b/src/providers/BlockHashProvider/block-hash-context.js @@ -0,0 +1,3 @@ +import {createContext} from 'react'; + +export const BlockHashContext = createContext(undefined); diff --git a/src/providers/BlockHashProvider/block-hash-hooks.js b/src/providers/BlockHashProvider/block-hash-hooks.js new file mode 100644 index 00000000..4a9e7b8e --- /dev/null +++ b/src/providers/BlockHashProvider/block-hash-hooks.js @@ -0,0 +1,5 @@ +import {useContext} from 'react'; + +import {BlockHashContext} from './block-hash-context'; + +export const useBlockHash = () => useContext(BlockHashContext); diff --git a/src/providers/BlockHashProvider/index.js b/src/providers/BlockHashProvider/index.js new file mode 100644 index 00000000..cf3b1ccf --- /dev/null +++ b/src/providers/BlockHashProvider/index.js @@ -0,0 +1,3 @@ +export * from './block-hash-context'; +export * from './block-hash-hooks'; +export * from './BlockHashProvider'; diff --git a/src/providers/TransactionsProvider/TransactionsProvider.js b/src/providers/TransactionsProvider/TransactionsProvider.js index ad90c700..2291aeb8 100644 --- a/src/providers/TransactionsProvider/TransactionsProvider.js +++ b/src/providers/TransactionsProvider/TransactionsProvider.js @@ -1,22 +1,71 @@ +import {getStarknet} from '@argent/get-starknet'; import PropTypes from 'prop-types'; import React, {useEffect, useReducer} from 'react'; +import useDeepCompareEffect from 'use-deep-compare-effect'; +import {LOCAL_STORAGE_TXS_KEY} from '../../constants'; +import {TransactionStatus} from '../../enums'; import {StorageManager} from '../../services'; +import {useBlockHash} from '../BlockHashProvider'; import {TransactionsContext} from './transactions-context'; import {actions, initialState, reducer} from './transactions-reducer'; -const LOCAL_STORAGE_KEY = 'STARKNET_BRIDGE_TXS'; - export const TransactionsProvider = ({children}) => { - const [state, dispatch] = useReducer(reducer, initialState); + const [transactions, dispatch] = useReducer(reducer, initialState); + const blockHash = useBlockHash(); useEffect(() => { - const storedTxs = StorageManager.getItem(LOCAL_STORAGE_KEY); + const storedTxs = StorageManager.getItem(LOCAL_STORAGE_TXS_KEY); if (storedTxs) { setTransactions(storedTxs); } }, []); + useDeepCompareEffect(() => { + const updateTransactions = async () => { + if (!blockHash) { + return; + } + const checkTransaction = async tx => { + console.log(`checking tx status ${tx.starknet_hash}`); + if ([TransactionStatus.REJECTED, TransactionStatus.ACCEPTED_ON_L1].includes(tx.status)) { + return tx; + } + if (tx.lastChecked === blockHash) { + return tx; + } + try { + const newStatus = await getStarknet().provider.getTransactionStatus(tx.starknet_hash); + console.log(`new status ${newStatus.tx_status}`); + return { + ...tx, + status: newStatus.tx_status, + lastChecked: blockHash + }; + } catch (error) { + console.error(`failed to check transaction status: ${tx.hash}`); + } + return tx; + }; + + const newTransactions = []; + for (const tx of transactions) { + const newTransaction = await checkTransaction(tx); + newTransactions.push(newTransaction); + } + StorageManager.setItem(LOCAL_STORAGE_TXS_KEY, transactions); + setTransactions(newTransactions); + }; + updateTransactions(); + }, [blockHash, transactions]); + + const addTransaction = tx => { + dispatch({ + type: actions.ADD_TRANSACTION, + payload: {...tx, timestamp: new Date().getTime()} + }); + }; + const setTransactions = payload => { dispatch({ type: actions.SET_TRANSACTIONS, @@ -25,8 +74,8 @@ export const TransactionsProvider = ({children}) => { }; const context = { - transactions: state, - setTransactions + transactions, + addTransaction }; return <TransactionsContext.Provider value={context}>{children}</TransactionsContext.Provider>; diff --git a/src/providers/TransactionsProvider/transactions-context.js b/src/providers/TransactionsProvider/transactions-context.js index 09d867d7..d6123d1c 100644 --- a/src/providers/TransactionsProvider/transactions-context.js +++ b/src/providers/TransactionsProvider/transactions-context.js @@ -4,5 +4,5 @@ import {initialState} from './transactions-reducer'; export const TransactionsContext = createContext({ ...initialState, - setTransactions: () => {} + addTransaction: tx => tx }); diff --git a/src/providers/TransactionsProvider/transactions-hooks.js b/src/providers/TransactionsProvider/transactions-hooks.js index b6c145d7..67c17bc8 100644 --- a/src/providers/TransactionsProvider/transactions-hooks.js +++ b/src/providers/TransactionsProvider/transactions-hooks.js @@ -1,9 +1,17 @@ -import {useContext} from 'react'; +import {useContext, useEffect, useState} from 'react'; import {TransactionsContext} from './transactions-context'; -export const useTransactions = () => { - const {transactions} = useContext(TransactionsContext); +export const useTransactions = () => useContext(TransactionsContext); - return transactions; +export const useTransaction = hash => { + const {transactions} = useTransactions(); + const [transaction, setTransaction] = useState(); + useEffect(() => { + const storedTransaction = transactions.find(stored => stored.hash === hash); + if (storedTransaction) { + setTransaction(storedTransaction); + } + }, [transactions, hash]); + return transaction; }; diff --git a/src/providers/TransactionsProvider/transactions-reducer.js b/src/providers/TransactionsProvider/transactions-reducer.js index 695dc960..5343d936 100644 --- a/src/providers/TransactionsProvider/transactions-reducer.js +++ b/src/providers/TransactionsProvider/transactions-reducer.js @@ -11,7 +11,7 @@ export const reducer = (state, action) => { return action.payload; case actions.ADD_TRANSACTION: - return [...state.transactions, action.payload]; + return [action.payload, ...state]; default: return state; diff --git a/src/providers/index.js b/src/providers/index.js index d2c58759..5706ce9b 100644 --- a/src/providers/index.js +++ b/src/providers/index.js @@ -1,3 +1,4 @@ +import {BlockHashProvider} from './BlockHashProvider'; import {StoreProvider} from './StoreProvider/StoreProvider'; import {TransactionsProvider} from './TransactionsProvider'; import {WalletProvider} from './WalletProvider/WalletProvider'; @@ -8,5 +9,6 @@ export const Providers = combineProviders([ StoreProvider, WalletProvider, WalletsProvider, + BlockHashProvider, TransactionsProvider ]); diff --git a/src/utils/hash.js b/src/utils/hash.js new file mode 100644 index 00000000..7d953530 --- /dev/null +++ b/src/utils/hash.js @@ -0,0 +1,20 @@ +import {hash, number} from 'starknet'; + +import {STARKNET_INVOKE_TX_PREFIX} from '../constants'; +import {byChainId} from '../enums'; + +export const txHash = (fromAddress, toAddress, selector, payload, chainId) => { + const calldata = [number.hexToDecimalString(fromAddress), ...payload]; + const calldataHash = hash.hashCalldata(calldata); + const {starknetIdPrefix} = byChainId(chainId); + return hash.computeHashOnElements([ + STARKNET_INVOKE_TX_PREFIX, + toAddress, + selector, + calldataHash, + starknetIdPrefix + ]); +}; + +export const hashEquals = (data1, data2) => + hash.computeHashOnElements(data1) === hash.computeHashOnElements(data2); diff --git a/src/utils/index.js b/src/utils/index.js index 56b56d6b..0d3bc121 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -5,6 +5,7 @@ export * from './browser'; export * from './string'; export * from './token'; export * from './number'; +export * from './hash'; export const printPackageInfo = (name, version, color) => { const currentLogLevel = getLogLevel(); diff --git a/src/utils/number.js b/src/utils/number.js index 935fbf2e..1604032a 100644 --- a/src/utils/number.js +++ b/src/utils/number.js @@ -3,24 +3,27 @@ import {number, uint256} from 'starknet'; import {web3} from '../web3'; const {uint256ToBN, bnToUint256} = uint256; -const {toBN} = number; +const {toBN, toHex} = number; -const TEN_BASE = 10; +const TEN = toBN(10); const DEFAULT_DECIMALS = 18; -export const powerOf = decimals => Math.pow(TEN_BASE, decimals); +export const powerOf = (decimals = DEFAULT_DECIMALS) => TEN.pow(toBN(decimals)); -export const toDecimals = (value, decimals = DEFAULT_DECIMALS) => value * powerOf(decimals); +export const toDecimals = (value, decimals = DEFAULT_DECIMALS) => + toBN(value).mul(powerOf(decimals)); -export const fromDecimals = (value, decimals = DEFAULT_DECIMALS) => value / powerOf(decimals); +export const fromDecimals = (value, decimals = DEFAULT_DECIMALS) => + toBN(value).div(powerOf(decimals)); + +export const decimalsToHexString = decimals => toHex(toBN(decimals)); export const starknet_fromFelt = value => toBN(value).toNumber(); export const starknet_toFelt = value => toBN(value).toString(); export const starknet_toUint256 = (value, decimals) => { - const decimalsString = String(toDecimals(value, decimals)); - const bn = number.toBN(decimalsString); + const bn = toDecimals(value, decimals); const uint256 = bnToUint256(bn); return { type: 'struct', diff --git a/yarn.lock b/yarn.lock index aab02aca..2d77073c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1343,6 +1343,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.12.5": + version "7.16.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.5.tgz#7f3e34bf8bdbbadf03fbb7b1ea0d929569c9487a" + integrity sha512-TXWihFIS3Pyv5hzR7j6ihmeLkZfrXGxAr5UfSl8CHf+6q/wpiYDkUau0czckpYG8QmnCIuPpdLtuA9VmuGGyMA== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/template@^7.10.4", "@babel/template@^7.12.13", "@babel/template@^7.16.0", "@babel/template@^7.3.3": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6" @@ -6349,6 +6356,11 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= +dequal@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.2.tgz#85ca22025e3a87e65ef75a7a437b35284a7e319d" + integrity sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug== + des.js@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" @@ -16351,6 +16363,14 @@ usb@^1.6.0: node-addon-api "^4.2.0" node-gyp-build "^4.3.0" +use-deep-compare-effect@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/use-deep-compare-effect/-/use-deep-compare-effect-1.8.1.tgz#ef0ce3b3271edb801da1ec23bf0754ef4189d0c6" + integrity sha512-kbeNVZ9Zkc0RFGpfMN3MNfaKNvcLNyxOAAd9O4CBZ+kCBXXscn9s/4I+8ytUER4RDpEYs5+O6Rs4PqiZ+rHr5Q== + dependencies: + "@babel/runtime" "^7.12.5" + dequal "^2.0.2" + use-wallet@^0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/use-wallet/-/use-wallet-0.13.1.tgz#5239d5163c235681c0440557ceb238290bc2e757" From 4033811c3ff7e9350d10f5d811aa111f8e2c35cd Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Mon, 20 Dec 2021 00:27:16 +0200 Subject: [PATCH 024/211] feat: store and hash object in local storage [skip ci] --- .../TransactionsProvider.js | 8 ++--- src/services/storage-manager.js | 31 +++++++++++++++++-- src/utils/hash.js | 12 +++++++ 3 files changed, 44 insertions(+), 7 deletions(-) diff --git a/src/providers/TransactionsProvider/TransactionsProvider.js b/src/providers/TransactionsProvider/TransactionsProvider.js index 2291aeb8..517a8b6b 100644 --- a/src/providers/TransactionsProvider/TransactionsProvider.js +++ b/src/providers/TransactionsProvider/TransactionsProvider.js @@ -15,9 +15,9 @@ export const TransactionsProvider = ({children}) => { const blockHash = useBlockHash(); useEffect(() => { - const storedTxs = StorageManager.getItem(LOCAL_STORAGE_TXS_KEY); - if (storedTxs) { - setTransactions(storedTxs); + const storedTransactions = StorageManager.getItem(LOCAL_STORAGE_TXS_KEY); + if (storedTransactions) { + setTransactions(storedTransactions); } }, []); @@ -53,7 +53,7 @@ export const TransactionsProvider = ({children}) => { const newTransaction = await checkTransaction(tx); newTransactions.push(newTransaction); } - StorageManager.setItem(LOCAL_STORAGE_TXS_KEY, transactions); + StorageManager.setItem(LOCAL_STORAGE_TXS_KEY, newTransactions); setTransactions(newTransactions); }; updateTransactions(); diff --git a/src/services/storage-manager.js b/src/services/storage-manager.js index 092d7c17..05792d2d 100644 --- a/src/services/storage-manager.js +++ b/src/services/storage-manager.js @@ -1,17 +1,42 @@ +import {b64d, b64e} from '../utils'; + +Storage.prototype.setObjectHash = function (key, myObject) { + const newObject = {}; + Object.keys(myObject).map(function (value) { + newObject[value] = b64e(myObject[value]); + }); + this.setItem(key, b64e(JSON.stringify(newObject))); +}; + +Storage.prototype.getObjectHash = function (key) { + const myObject = this.getItem(key); + if (!myObject) return null; + return ( + b64d(myObject) && + JSON.parse(b64d(myObject), function (key) { + return key ? b64d(this[key]) : this[key]; + }) + ); +}; + export const StorageManager = { setItem: (key, item) => { if (localStorage) { - localStorage.setItem(key, JSON.stringify(item)); + localStorage.setObjectHash(key, JSON.stringify(item)); return true; } return false; }, getItem: key => { if (localStorage) { - const item = localStorage.getItem(key); + const item = localStorage.getObjectHash(key); if (item) { try { - return JSON.parse(item); + return JSON.parse( + Object.entries(item) + .map(c => c[1]) + .join('') + ); } catch (ex) { return item; } diff --git a/src/utils/hash.js b/src/utils/hash.js index 7d953530..377c26ec 100644 --- a/src/utils/hash.js +++ b/src/utils/hash.js @@ -18,3 +18,15 @@ export const txHash = (fromAddress, toAddress, selector, payload, chainId) => { export const hashEquals = (data1, data2) => hash.computeHashOnElements(data1) === hash.computeHashOnElements(data2); + +export const b64e = str => + window.btoa( + encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (match, p1) => + String.fromCharCode('0x' + p1) + ) + ); + +export const b64d = str => + decodeURIComponent( + Array.prototype.map.call(window.atob(str), c => '%' + c.charCodeAt(0).toString(16)).join('') + ); From 584e8296dcfdd21141afd7dfe6d99641db36cd40 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Mon, 20 Dec 2021 11:10:08 +0200 Subject: [PATCH 025/211] refactor: tokens provider [skip ci] --- src/api/erc20.js | 14 +++--- src/api/token.js | 19 ++++++++ src/components/Containers/Header/Header.js | 9 ++-- .../Features/SelectToken/SelectToken.js | 2 +- src/components/Features/Transfer/Transfer.js | 3 +- .../UI/AccountAddress/AccountAddress.js | 2 +- src/enums/ChainType.js | 5 ++- .../TokensProvider/TokensProvider.js | 40 +++++------------ .../TokensProvider/tokens-context.js | 7 +-- src/providers/TokensProvider/tokens-hooks.js | 14 +++--- .../TokensProvider/tokens-reducer.js | 45 +++++++------------ .../TransactionsProvider.js | 2 +- .../WalletsProvider/wallets-hooks.js | 2 +- src/utils/number.js | 10 ++--- 14 files changed, 83 insertions(+), 91 deletions(-) create mode 100644 src/api/token.js diff --git a/src/api/erc20.js b/src/api/erc20.js index 6865f94e..ddbf1c96 100644 --- a/src/api/erc20.js +++ b/src/api/erc20.js @@ -18,10 +18,10 @@ export const approve = async (spender, value, contract, from, isEthereum = true) if (isEthereum) { return await eth_sendTransaction(contract, 'approve', [spender, value], {from}); } else { - const tokenDecimals = await decimals(contract, false); + const dec = await decimals(contract, false); return await starknet_sendTransaction(contract, 'approve', { spender: starknet_toFelt(spender), - amount: starknet_toUint256(value, tokenDecimals) + amount: starknet_toUint256(value, dec) }); } } catch (ex) { @@ -46,9 +46,11 @@ export const balanceOf = async (account, contract, isEthereum = true) => { const balance = await eth_callContract(contract, 'balanceOf', [account]); return eth_fromWei(balance); } else { - const {balance} = await starknet_callContract(contract, 'balanceOf', [{account}]); - const tokenDecimals = await decimals(contract, false); - return starknet_fromUint256(balance, tokenDecimals); + const [{balance}, dec] = await Promise.all([ + starknet_callContract(contract, 'balanceOf', [{account}]), + decimals(contract, false) + ]); + return starknet_fromUint256(balance, dec); } } catch (ex) { return Promise.reject(ex); @@ -58,7 +60,7 @@ export const balanceOf = async (account, contract, isEthereum = true) => { export const decimals = async (contract, isEthereum = true) => { try { if (isEthereum) { - // TODO: call ethereum contract decimals + return await eth_callContract(contract, 'decimals'); } else { const {decimals} = await starknet_callContract(contract, 'decimals'); return starknet_fromFelt(decimals); diff --git a/src/api/token.js b/src/api/token.js new file mode 100644 index 00000000..3e230210 --- /dev/null +++ b/src/api/token.js @@ -0,0 +1,19 @@ +import {DEFAULT_DECIMALS, fromDecimals, starknet_fromUint256} from '../utils'; +import {balanceOf, decimals} from './erc20'; + +export const fetchTokenInfo = async (account, contract, isEthereum = true) => { + try { + let [balance, dec] = await Promise.all([ + balanceOf(account, contract, isEthereum), + decimals(account, contract, isEthereum) + ]); + if (isEthereum) { + balance = fromDecimals(balance, dec); + } else { + balance = starknet_fromUint256(balance, dec); + } + return {balance, decimals: dec || DEFAULT_DECIMALS}; + } catch (ex) { + return Promise.reject(ex); + } +}; diff --git a/src/components/Containers/Header/Header.js b/src/components/Containers/Header/Header.js index a031cb60..72c12e1b 100644 --- a/src/components/Containers/Header/Header.js +++ b/src/components/Containers/Header/Header.js @@ -1,7 +1,6 @@ import React from 'react'; import StarkNetLogoPath from '../../../assets/img/starknet.png'; -import {ChainType} from '../../../enums'; import {useEthereumWallet, useStarknetWallet, useWallets} from '../../../providers/WalletsProvider'; import {toClasses} from '../../../utils'; import {useBridgeActions} from '../../Features/Bridge/Bridge.hooks'; @@ -12,7 +11,7 @@ import styles from './Header.module.scss'; import {CHAIN_TXT} from './Header.strings'; export const Header = () => { - const {chainName} = useWallets(); + const {chainName, isConnected} = useWallets(); const {showAccountMenu} = useBridgeActions(); const [, setEthereum] = useIsEthereum(); const [, setStarknet] = useIsStarknet(); @@ -44,10 +43,8 @@ export const Header = () => { <img alt="" height={STARKNET_LOGO_SIZE} src={StarkNetLogoPath} /> <div className={styles.bridge}>Bridge</div> </div> - {chainName && ( - <div className={toClasses(styles.chain, 'row')}> - {chainName !== ChainType.MAIN.name && CHAIN_TXT(chainName)} - </div> + {isConnected && ( + <div className={toClasses(styles.chain, 'row')}>{CHAIN_TXT(chainName)}</div> )} </div> diff --git a/src/components/Features/SelectToken/SelectToken.js b/src/components/Features/SelectToken/SelectToken.js index fcfe33e6..e2b3e270 100644 --- a/src/components/Features/SelectToken/SelectToken.js +++ b/src/components/Features/SelectToken/SelectToken.js @@ -11,7 +11,7 @@ import styles from './SelectToken.module.scss'; import {TITLE_TXT} from './SelectToken.strings'; export const SelectToken = () => { - const tokens = useTokens(); + const {tokens} = useTokens(); const {colorBeta} = useColors(); const {showTransferMenu} = useBridgeActions(); const {isEthereum, fromNetwork} = useTransferData(); diff --git a/src/components/Features/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer.js index 95294b1a..df5c20cf 100644 --- a/src/components/Features/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer.js @@ -43,7 +43,7 @@ export const Transfer = () => { const {addTransaction} = useTransactions(); const {transferTokenToStarknet, transferTokenFromStarknet, data, error, isLoading, progress} = useTransfer(); - const tokens = useTokens(); + const {tokens, updateTokens} = useTokens(); const hideModal = useHideModal(); const showProgressModal = useProgressModal(); const showErrorModal = useErrorModal(ERROR_MODAL_TITLE); @@ -64,6 +64,7 @@ export const Transfer = () => { hideModal(); showErrorModal(error.message); } else if (data) { + updateTokens(); clearAmount(); addTransaction(data); showTransactionSubmittedModal(data); diff --git a/src/components/UI/AccountAddress/AccountAddress.js b/src/components/UI/AccountAddress/AccountAddress.js index 8d3d90c7..35a3fa66 100644 --- a/src/components/UI/AccountAddress/AccountAddress.js +++ b/src/components/UI/AccountAddress/AccountAddress.js @@ -14,7 +14,7 @@ export const AccountAddress = ({address}) => { const onCopyClick = async () => { const cb = navigator.clipboard; - await cb.writeText(ref.current.innerText); + await cb.writeText(address); startAnimation(); }; diff --git a/src/enums/ChainType.js b/src/enums/ChainType.js index 8a7dd020..4a1be04d 100644 --- a/src/enums/ChainType.js +++ b/src/enums/ChainType.js @@ -26,5 +26,8 @@ export const byChainId = id => { export const toChainName = id => { const chainData = byChainId(id); - return chainData.name === ChainType.MAIN.name ? '' : chainData.name; + if (chainData) { + return chainData.name === ChainType.MAIN.name ? '' : chainData.name; + } + return ''; }; diff --git a/src/providers/TokensProvider/TokensProvider.js b/src/providers/TokensProvider/TokensProvider.js index 391f35a6..e946424e 100644 --- a/src/providers/TokensProvider/TokensProvider.js +++ b/src/providers/TokensProvider/TokensProvider.js @@ -7,49 +7,34 @@ import {TokensContext} from './tokens-context'; import {actions, initialState, reducer} from './tokens-reducer'; export const TokensProvider = ({children}) => { - const [state, dispatch] = useReducer(reducer, initialState); + const [tokens, dispatch] = useReducer(reducer, initialState); const {account: ethereumAccount} = useEthereumWallet(); const {account: starknetAccount} = useStarknetWallet(); const getEthereumTokenBalance = useEthereumTokenBalance(ethereumAccount); const getStarknetTokenBalance = useStarknetTokenBalance(starknetAccount); useEffect(() => { - fetchEthereumBalances(); - fetchStarknetBalances(); + updateTokens(); }, []); - const fetchEthereumBalances = () => { - fetchTokensBalances(state.ethereumTokens, getEthereumTokenBalance, updateEthereumTokenState); - }; - - const fetchStarknetBalances = () => { - fetchTokensBalances(state.starknetTokens, getStarknetTokenBalance, updateStarknetTokenState); - }; - - const fetchTokensBalances = (tokens, getBalance, updateState) => { + const updateTokens = () => { for (let index = 0; index < tokens.length; index++) { - updateState(index, {isLoading: true}); + const token = tokens[index]; + const getBalance = token.isEthereum ? getEthereumTokenBalance : getStarknetTokenBalance; + updateTokenState(index, {isLoading: true}); getBalance(tokens[index].tokenAddress) .then(balance => { - updateState(index, {balance, isLoading: false}); + updateTokenState(index, {balance, isLoading: false}); }) .catch(() => { - updateState(index, {balance: null, isLoading: false}); + updateTokenState(index, {balance: null, isLoading: false}); }); } }; - const updateEthereumTokenState = (index, args) => { - updateTokenState(actions.UPDATE_ETHEREUM_TOKEN_STATE, index, args); - }; - - const updateStarknetTokenState = (index, args) => { - updateTokenState(actions.UPDATE_STARKNET_TOKEN_STATE, index, args); - }; - - const updateTokenState = (type, index, args) => { + const updateTokenState = (index, args) => { dispatch({ - type, + type: actions.UPDATE_TOKEN_STATE, payload: { index, args @@ -58,9 +43,8 @@ export const TokensProvider = ({children}) => { }; const context = { - ...state, - fetchEthereumBalances, - fetchStarknetBalances + tokens, + updateTokens }; return <TokensContext.Provider value={context}>{children}</TokensContext.Provider>; diff --git a/src/providers/TokensProvider/tokens-context.js b/src/providers/TokensProvider/tokens-context.js index 9141eed7..8c4a1357 100644 --- a/src/providers/TokensProvider/tokens-context.js +++ b/src/providers/TokensProvider/tokens-context.js @@ -1,9 +1,6 @@ import {createContext} from 'react'; -import {initialState} from './tokens-reducer'; - export const TokensContext = createContext({ - ...initialState, - fetchEthereumBalances: () => {}, - fetchStarknetBalances: () => {} + tokens: [], + updateTokens: () => {} }); diff --git a/src/providers/TokensProvider/tokens-hooks.js b/src/providers/TokensProvider/tokens-hooks.js index d5874f44..d1a19f43 100644 --- a/src/providers/TokensProvider/tokens-hooks.js +++ b/src/providers/TokensProvider/tokens-hooks.js @@ -5,22 +5,24 @@ import {TokensContext} from './tokens-context'; export const useTokens = () => { const {isEthereum} = useTransferData(); - const {starknetTokens, ethereumTokens} = useContext(TokensContext); + const starknetTokens = useStarknetTokens(); + const ethereumTokens = useEthereumTokens(); + const {updateTokens} = useContext(TokensContext); const [tokens, setTokens] = useState(isEthereum ? ethereumTokens : starknetTokens); useEffect(() => { setTokens(isEthereum ? ethereumTokens : starknetTokens); }, [isEthereum, starknetTokens, ethereumTokens]); - return tokens; + return {tokens, updateTokens}; }; export const useStarknetTokens = () => { - const {starknetTokens} = useContext(TokensContext); - return useMemo(() => starknetTokens, [starknetTokens]); + const {tokens} = useContext(TokensContext); + return useMemo(() => tokens.filter(t => t.isStarknet), [tokens]); }; export const useEthereumTokens = () => { - const {ethereumTokens} = useContext(TokensContext); - return useMemo(() => ethereumTokens, [ethereumTokens]); + const {tokens} = useContext(TokensContext); + return useMemo(() => tokens.filter(t => t.isEthereum), [tokens]); }; export const useStarknetToken = () => { diff --git a/src/providers/TokensProvider/tokens-reducer.js b/src/providers/TokensProvider/tokens-reducer.js index 12e3fe40..1280b76d 100644 --- a/src/providers/TokensProvider/tokens-reducer.js +++ b/src/providers/TokensProvider/tokens-reducer.js @@ -2,40 +2,29 @@ import {ETH_BRIDGE_CONTRACT_ADDRESS, EthereumTokens, StarknetTokens} from '../.. import {NetworkType} from '../../enums'; export const actions = { - UPDATE_ETHEREUM_TOKEN_STATE: 'Tokens/UPDATE_ETHEREUM_TOKEN_STATE', - UPDATE_STARKNET_TOKEN_STATE: 'Tokens/UPDATE_STARKNET_TOKEN_STATE' + UPDATE_TOKEN_STATE: 'Tokens/UPDATE_TOKEN_STATE' }; -export const initialState = { - ethereumTokens: [ - {...NetworkType.ETHEREUM, bridgeAddress: ETH_BRIDGE_CONTRACT_ADDRESS}, - ...EthereumTokens - ], - starknetTokens: StarknetTokens -}; +const ethereumTokens = [ + { + ...NetworkType.ETHEREUM, + bridgeAddress: ETH_BRIDGE_CONTRACT_ADDRESS + }, + ...EthereumTokens +].map(t => ({...t, isEthereum: true})); -const updateTokens = (tokens, payload) => { - const {index, args} = payload; - const tokenData = {...tokens[index], ...args}; - const tokensCopy = [...tokens]; - tokensCopy[index] = tokenData; - return tokensCopy; -}; +const starknetTokens = StarknetTokens.map(t => ({...t, isStarknet: true})); + +export const initialState = [...ethereumTokens, ...starknetTokens]; export const reducer = (state, action) => { switch (action.type) { - case actions.UPDATE_ETHEREUM_TOKEN_STATE: { - return { - ...state, - ethereumTokens: updateTokens(state.ethereumTokens, action.payload) - }; - } - - case actions.UPDATE_STARKNET_TOKEN_STATE: { - return { - ...state, - starknetTokens: updateTokens(state.starknetTokens, action.payload) - }; + case actions.UPDATE_TOKEN_STATE: { + const {index, args} = action.payload; + const token = {...state[index], ...args}; + const tokens = [...state]; + tokens[index] = token; + return tokens; } default: diff --git a/src/providers/TransactionsProvider/TransactionsProvider.js b/src/providers/TransactionsProvider/TransactionsProvider.js index 517a8b6b..a97cfca3 100644 --- a/src/providers/TransactionsProvider/TransactionsProvider.js +++ b/src/providers/TransactionsProvider/TransactionsProvider.js @@ -27,7 +27,6 @@ export const TransactionsProvider = ({children}) => { return; } const checkTransaction = async tx => { - console.log(`checking tx status ${tx.starknet_hash}`); if ([TransactionStatus.REJECTED, TransactionStatus.ACCEPTED_ON_L1].includes(tx.status)) { return tx; } @@ -35,6 +34,7 @@ export const TransactionsProvider = ({children}) => { return tx; } try { + console.log(`checking tx status ${tx.starknet_hash}`); const newStatus = await getStarknet().provider.getTransactionStatus(tx.starknet_hash); console.log(`new status ${newStatus.tx_status}`); return { diff --git a/src/providers/WalletsProvider/wallets-hooks.js b/src/providers/WalletsProvider/wallets-hooks.js index d0123e77..e9f76285 100644 --- a/src/providers/WalletsProvider/wallets-hooks.js +++ b/src/providers/WalletsProvider/wallets-hooks.js @@ -14,7 +14,7 @@ export const useWallets = () => { useEffect(() => { setActiveWallet(isEthereum ? wallets.ethereumWallet : wallets.starknetWallet); - }, [isEthereum]); + }, [isEthereum, wallets]); return { ...activeWallet, diff --git a/src/utils/number.js b/src/utils/number.js index 1604032a..397abf61 100644 --- a/src/utils/number.js +++ b/src/utils/number.js @@ -6,15 +6,13 @@ const {uint256ToBN, bnToUint256} = uint256; const {toBN, toHex} = number; const TEN = toBN(10); -const DEFAULT_DECIMALS = 18; +export const DEFAULT_DECIMALS = 18; export const powerOf = (decimals = DEFAULT_DECIMALS) => TEN.pow(toBN(decimals)); -export const toDecimals = (value, decimals = DEFAULT_DECIMALS) => - toBN(value).mul(powerOf(decimals)); +export const toDecimals = (value, decimals) => toBN(value).mul(powerOf(decimals)); -export const fromDecimals = (value, decimals = DEFAULT_DECIMALS) => - toBN(value).div(powerOf(decimals)); +export const fromDecimals = (value, decimals) => toBN(value).div(powerOf(decimals)); export const decimalsToHexString = decimals => toHex(toBN(decimals)); @@ -33,7 +31,7 @@ export const starknet_toUint256 = (value, decimals) => { export const starknet_fromUint256 = (value, decimals) => { const bnString = uint256ToBN(value).toString(); - return fromDecimals(bnString, decimals); + return fromDecimals(bnString, decimals).toNumber(); }; export const eth_toWei = value => web3.utils.toWei(value, 'ether'); From 25af12ca07f0d7a50738ef53d63348f7ee3ca147 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Mon, 20 Dec 2021 23:25:43 +0200 Subject: [PATCH 026/211] chore: add logs to providers [skip ci] --- .../Containers/Footer/Footer.strings.js | 2 +- .../Containers/Header/Header.strings.js | 3 +- src/components/Features/Account/Account.js | 12 +++--- .../Features/Account/Account.strings.js | 2 +- .../ModalProvider/ModalProvider.hooks.js | 4 +- .../TransactionLog/TransactionLog.js} | 21 +++++----- .../TransactionLog.module.scss} | 2 +- src/components/Features/index.js | 1 + .../Modal/ModalTitle/ModalTitle.module.scss | 1 - .../TransactionLogContainer.js} | 10 ++--- .../TransactionLogContainer.module.scss} | 2 +- .../TransactionLogContainer.strings.js} | 0 .../TransactionSubmittedModal.js | 39 +++++++++++++------ .../TransactionSubmittedModal.module.scss | 0 .../TransactionSubmittedModal.strings.js | 8 ++-- src/components/UI/index.js | 3 +- .../{ => contracts}/contracts.ethereum.js | 2 +- src/config/addresses/index.js | 6 +-- .../addresses/{ => tokens}/tokens.ethereum.js | 2 +- .../addresses/{ => tokens}/tokens.starknet.js | 2 +- src/config/config.json | 6 +-- src/hooks/useLogger.js | 4 +- src/hooks/useTransfer.js | 10 ++--- .../TokensProvider/TokensProvider.js | 33 +++++++++++++--- .../TransactionsProvider.js | 20 +++++++--- .../transactions-context.js | 4 +- src/services/storage-manager.js | 10 ++--- src/utils/date.js | 25 ++++++++++++ src/utils/index.js | 1 + 29 files changed, 149 insertions(+), 86 deletions(-) rename src/components/{UI/TransferLog/TransferLog.js => Features/TransactionLog/TransactionLog.js} (68%) rename src/components/{UI/TransferLog/TransferLog.module.scss => Features/TransactionLog/TransactionLog.module.scss} (97%) rename src/components/UI/{TransferLogContainer/TransferLogContainer.js => TransactionLogContainer/TransactionLogContainer.js} (82%) rename src/components/UI/{TransferLogContainer/TransferLogContainer.module.scss => TransactionLogContainer/TransactionLogContainer.module.scss} (97%) rename src/components/UI/{TransferLogContainer/TransferLogContainer.strings.js => TransactionLogContainer/TransactionLogContainer.strings.js} (100%) delete mode 100644 src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.module.scss rename src/config/addresses/{ => contracts}/contracts.ethereum.js (87%) rename src/config/addresses/{ => tokens}/tokens.ethereum.js (89%) rename src/config/addresses/{ => tokens}/tokens.starknet.js (93%) create mode 100644 src/utils/date.js diff --git a/src/components/Containers/Footer/Footer.strings.js b/src/components/Containers/Footer/Footer.strings.js index 3fb1439e..e3a936f5 100644 --- a/src/components/Containers/Footer/Footer.strings.js +++ b/src/components/Containers/Footer/Footer.strings.js @@ -1 +1 @@ -export const FOOTER_TXT = '© 2021 StarkWare Industries Ltd. All Rights Reserved'; +export const FOOTER_TXT = '© 2022 StarkWare Industries Ltd. All Rights Reserved'; diff --git a/src/components/Containers/Header/Header.strings.js b/src/components/Containers/Header/Header.strings.js index fb4e5777..5041ae83 100644 --- a/src/components/Containers/Header/Header.strings.js +++ b/src/components/Containers/Header/Header.strings.js @@ -1,4 +1,3 @@ import {capitalize, evaluate} from '../../../utils'; -export const CHAIN_TXT = chainName => - capitalize(evaluate('{{chainName}} test network', {chainName})); +export const CHAIN_TXT = chainName => capitalize(evaluate('{{chainName}} testnet', {chainName})); diff --git a/src/components/Features/Account/Account.js b/src/components/Features/Account/Account.js index 1d95162d..8f8f4e62 100644 --- a/src/components/Features/Account/Account.js +++ b/src/components/Features/Account/Account.js @@ -9,11 +9,11 @@ import { LogoutButton, Menu, MenuTitle, - TransferLog, - TransferLogContainer + TransactionLogContainer } from '../../UI'; import {LinkButton} from '../../UI/LinkButton/LinkButton'; import {useBridgeActions} from '../Bridge/Bridge.hooks'; +import {TransactionLog} from '../TransactionLog/TransactionLog'; import {useTransferData} from '../Transfer/Transfer.hooks'; import styles from './Account.module.scss'; import {TITLE_TXT} from './Account.strings'; @@ -22,11 +22,11 @@ export const Account = () => { const {transactions} = useTransactions(); const {showTransferMenu} = useBridgeActions(); const {account, chainId, resetWallet} = useWallets(); - const {isEthereum, isStarknet} = useTransferData(); + const {isEthereum, isStarknet, fromNetwork} = useTransferData(); const renderTransactions = () => { return transactions.length - ? transactions.map((tx, index) => <TransferLog key={index} tx={tx} />) + ? transactions.map((tx, index) => <TransactionLog key={index} tx={tx} />) : null; }; @@ -34,7 +34,7 @@ export const Account = () => { <Menu> <div className={styles.account}> <BackButton onClick={showTransferMenu} /> - <MenuTitle text={TITLE_TXT} /> + <MenuTitle text={TITLE_TXT(fromNetwork.name)} /> <AccountAddress address={account} /> {isEthereum && ( <LinkButton @@ -45,7 +45,7 @@ export const Account = () => { {isStarknet && ( <LinkButton text={LINKS.VOYAGER.text} url={LINKS.VOYAGER.accountUrl(chainId, account)} /> )} - <TransferLogContainer>{renderTransactions()}</TransferLogContainer> + <TransactionLogContainer>{renderTransactions()}</TransactionLogContainer> <LogoutButton isDisabled={isStarknet} onClick={resetWallet} /> </div> </Menu> diff --git a/src/components/Features/Account/Account.strings.js b/src/components/Features/Account/Account.strings.js index 71c43f75..4dd818ee 100644 --- a/src/components/Features/Account/Account.strings.js +++ b/src/components/Features/Account/Account.strings.js @@ -1 +1 @@ -export const TITLE_TXT = 'Account'; +export const TITLE_TXT = network => `${network} Account`; diff --git a/src/components/Features/ModalProvider/ModalProvider.hooks.js b/src/components/Features/ModalProvider/ModalProvider.hooks.js index c1dc9a3b..c71e6b03 100644 --- a/src/components/Features/ModalProvider/ModalProvider.hooks.js +++ b/src/components/Features/ModalProvider/ModalProvider.hooks.js @@ -38,12 +38,12 @@ export const useProgressModal = () => { export const useTransactionSubmittedModal = () => { const dispatch = useDispatch(); return useCallback( - transactionHash => { + tx => { dispatch( showModalAction({ componentPath: 'UI/TransactionSubmittedModal/TransactionSubmittedModal', componentProps: { - transactionHash + tx }, title: 'Transaction submitted', isClosable: true diff --git a/src/components/UI/TransferLog/TransferLog.js b/src/components/Features/TransactionLog/TransactionLog.js similarity index 68% rename from src/components/UI/TransferLog/TransferLog.js rename to src/components/Features/TransactionLog/TransactionLog.js index f392d374..bae5d9f5 100644 --- a/src/components/UI/TransferLog/TransferLog.js +++ b/src/components/Features/TransactionLog/TransactionLog.js @@ -4,13 +4,14 @@ import React, {useEffect, useState} from 'react'; import {LINKS} from '../../../constants'; import {TransactionStatus} from '../../../enums'; import {useWallets} from '../../../providers/WalletsProvider'; -import {useTransferData} from '../../Features/Transfer/Transfer.hooks'; -import {CryptoLogoSize} from '../CryptoLogo/CryptoLogo.enums'; -import {LinkButton} from '../LinkButton/LinkButton'; -import {CryptoLogo} from '../index'; -import styles from './TransferLog.module.scss'; +import {get24Time, getDate} from '../../../utils'; +import {CryptoLogo} from '../../UI'; +import {CryptoLogoSize} from '../../UI/CryptoLogo/CryptoLogo.enums'; +import {LinkButton} from '../../UI/LinkButton/LinkButton'; +import {useTransferData} from '../Transfer/Transfer.hooks'; +import styles from './TransactionLog.module.scss'; -export const TransferLog = ({tx}) => { +export const TransactionLog = ({tx}) => { const {symbol, timestamp, name, amount, status, eth_hash, starknet_hash} = tx; const [sign, setSign] = useState(''); const {action} = useTransferData(); @@ -22,12 +23,12 @@ export const TransferLog = ({tx}) => { return ( <> - <div className={styles.transferLog}> + <div className={styles.transactionLog}> <div className={styles.left}> <CryptoLogo size={CryptoLogoSize.SMALL} symbol={symbol} /> <div> {name} - <div className={styles.data}>{new Date(timestamp).toLocaleString()}</div> + <div className={styles.data}>{`${getDate(timestamp)}, ${get24Time(timestamp)}`}</div> </div> </div> <div className={styles.right}> @@ -35,7 +36,7 @@ export const TransferLog = ({tx}) => { {sign} {amount} {symbol.toUpperCase()} </div> {status !== TransactionStatus.ACCEPTED_ON_L1 ? ( - <div className={styles.data}>{status.replace('_', ' ')}</div> + <div className={styles.data}>{status.replaceAll('_', ' ')}</div> ) : ( <div> <LinkButton @@ -55,6 +56,6 @@ export const TransferLog = ({tx}) => { ); }; -TransferLog.propTypes = { +TransactionLog.propTypes = { tx: PropTypes.object }; diff --git a/src/components/UI/TransferLog/TransferLog.module.scss b/src/components/Features/TransactionLog/TransactionLog.module.scss similarity index 97% rename from src/components/UI/TransferLog/TransferLog.module.scss rename to src/components/Features/TransactionLog/TransactionLog.module.scss index 8bd49722..ffd8e432 100644 --- a/src/components/UI/TransferLog/TransferLog.module.scss +++ b/src/components/Features/TransactionLog/TransactionLog.module.scss @@ -3,7 +3,7 @@ $color: $--color-alpha-6; $hr-color: $--color-alpha-3; -.transferLog { +.transactionLog { display: flex; flex-direction: row; justify-content: space-between; diff --git a/src/components/Features/index.js b/src/components/Features/index.js index 38b1eaa9..ce8046ec 100644 --- a/src/components/Features/index.js +++ b/src/components/Features/index.js @@ -4,3 +4,4 @@ export * from './Login/Login'; export * from './ModalProvider/ModalProvider'; export * from './SelectToken/SelectToken'; export * from './Transfer/Transfer'; +export * from './TransactionLog/TransactionLog'; diff --git a/src/components/UI/Modal/ModalTitle/ModalTitle.module.scss b/src/components/UI/Modal/ModalTitle/ModalTitle.module.scss index bd480206..66240f28 100644 --- a/src/components/UI/Modal/ModalTitle/ModalTitle.module.scss +++ b/src/components/UI/Modal/ModalTitle/ModalTitle.module.scss @@ -5,5 +5,4 @@ font-size: 20px; line-height: 32px; letter-spacing: 0.01em; - text-transform: capitalize; } diff --git a/src/components/UI/TransferLogContainer/TransferLogContainer.js b/src/components/UI/TransactionLogContainer/TransactionLogContainer.js similarity index 82% rename from src/components/UI/TransferLogContainer/TransferLogContainer.js rename to src/components/UI/TransactionLogContainer/TransactionLogContainer.js index 81047fb5..91ab9826 100644 --- a/src/components/UI/TransferLogContainer/TransferLogContainer.js +++ b/src/components/UI/TransactionLogContainer/TransactionLogContainer.js @@ -3,15 +3,15 @@ import React, {useState} from 'react'; import {ReactComponent as CollapseIcon} from '../../../assets/svg/icons/collapse.svg'; import {toClasses} from '../../../utils'; -import styles from './TransferLogContainer.module.scss'; +import styles from './TransactionLogContainer.module.scss'; import { EMPTY_MSG_TXT, OVERVIEW_TXT, TITLE_TXT, VIEW_MORE_TXT -} from './TransferLogContainer.strings'; +} from './TransactionLogContainer.strings'; -export const TransferLogContainer = ({children}) => { +export const TransactionLogContainer = ({children}) => { const [showChildren, setShowChildren] = useState(false); const toggleShowChildren = () => { @@ -34,7 +34,7 @@ export const TransferLogContainer = ({children}) => { }; return ( - <div className={styles.transferLogContainer}> + <div className={styles.transactionLogContainer}> <div className={toClasses(styles.title, showChildren && styles.showChildren)}> {TITLE_TXT} {children && ( @@ -48,6 +48,6 @@ export const TransferLogContainer = ({children}) => { ); }; -TransferLogContainer.propTypes = { +TransactionLogContainer.propTypes = { children: PropTypes.oneOfType([PropTypes.array, PropTypes.object]) }; diff --git a/src/components/UI/TransferLogContainer/TransferLogContainer.module.scss b/src/components/UI/TransactionLogContainer/TransactionLogContainer.module.scss similarity index 97% rename from src/components/UI/TransferLogContainer/TransferLogContainer.module.scss rename to src/components/UI/TransactionLogContainer/TransactionLogContainer.module.scss index 6462d5a7..03f769d7 100644 --- a/src/components/UI/TransferLogContainer/TransferLogContainer.module.scss +++ b/src/components/UI/TransactionLogContainer/TransactionLogContainer.module.scss @@ -5,7 +5,7 @@ $border-color: $--color-alpha-3; $empty-msg-color: $--color-white-1; $view-more-color: $--color-gamma-1; -.transferLogContainer { +.transactionLogContainer { color: $color; padding: 13px; border-radius: 7px; diff --git a/src/components/UI/TransferLogContainer/TransferLogContainer.strings.js b/src/components/UI/TransactionLogContainer/TransactionLogContainer.strings.js similarity index 100% rename from src/components/UI/TransferLogContainer/TransferLogContainer.strings.js rename to src/components/UI/TransactionLogContainer/TransactionLogContainer.strings.js diff --git a/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.js b/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.js index 4d128063..e2546ceb 100644 --- a/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.js +++ b/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.js @@ -2,46 +2,63 @@ import PropTypes from 'prop-types'; import React from 'react'; import {ReactComponent as EtherscanLogo} from '../../../assets/svg/etherscan.svg'; -import {byChainId} from '../../../enums'; +import {ReactComponent as StarknetLogo} from '../../../assets/svg/tokens/starknet.svg'; +import {LINKS} from '../../../constants'; +import {ActionType} from '../../../enums'; import {useColors} from '../../../hooks'; import {useWallets} from '../../../providers/WalletsProvider'; import {openInNewTab} from '../../../utils'; import {Button} from '../Button/Button'; import {Circle} from '../Circle/Circle'; -import {ETHERSCAN_TX_URL} from './TransactionSubmittedModal.constants'; -import {BTN_TEXT, DEPOSIT_MESSAGE_TXT_PARTS} from './TransactionSubmittedModal.strings'; +import {BODY_TXT_PARTS, BTN_TEXT} from './TransactionSubmittedModal.strings'; const TransactionSubmittedModal = ({tx}) => { const {colorAlpha3, colorWhite, colorWhite1} = useColors(); const {chainId} = useWallets(); + const getExplorerName = () => { + return tx.type === ActionType.TRANSFER_TO_STARKNET ? LINKS.ETHERSCAN.text : LINKS.VOYAGER.text; + }; + + const getExplorerUrl = () => { + return tx.type === ActionType.TRANSFER_TO_STARKNET + ? LINKS.ETHERSCAN.txUrl(chainId, tx.eth_hash) + : LINKS.VOYAGER.txUrl(chainId, tx.starknet_hash); + }; + + const getExplorerLogo = () => { + const Logo = tx.type === ActionType.TRANSFER_TO_STARKNET ? EtherscanLogo : StarknetLogo; + return <Logo style={{margin: 'auto'}} />; + }; + const onClick = () => { - openInNewTab(ETHERSCAN_TX_URL(byChainId(chainId).blockExplorerUrl, tx.eth_hash)); + openInNewTab(getExplorerUrl()); }; return ( <div> + <p> + <b>{BODY_TXT_PARTS[0]}</b> + {BODY_TXT_PARTS[1]} + </p> <center> - <p> - <b>{DEPOSIT_MESSAGE_TXT_PARTS[0]}</b> - {DEPOSIT_MESSAGE_TXT_PARTS[1]} - </p> <Button colorBackground={colorWhite} colorBorder={colorAlpha3} colorText={colorAlpha3} icon={ <Circle color={colorWhite1} size={40}> - <EtherscanLogo style={{margin: 'auto'}} /> + {getExplorerLogo()} </Circle> } style={{ borderRadius: '7px', borderWidth: '2px', fontSize: '16px', - height: '60px' + marginTop: '25px', + height: '50px' }} - text={BTN_TEXT} + text={BTN_TEXT(getExplorerName())} onClick={onClick} /> </center> diff --git a/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.module.scss b/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.module.scss deleted file mode 100644 index e69de29b..00000000 diff --git a/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.strings.js b/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.strings.js index b2607148..94220acb 100644 --- a/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.strings.js +++ b/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.strings.js @@ -1,5 +1,5 @@ -export const BTN_TEXT = 'view on etherscan'; -export const DEPOSIT_MESSAGE_TXT_PARTS = [ - 'Your transaction has been sent to StarkNet!\n', - "We'll notify you once it's status will be updated." +export const BTN_TEXT = explorer => `view on ${explorer}`; +export const BODY_TXT_PARTS = [ + `Your transaction has been sent to StarkNet!\n`, + `We'll notify you once it's status will be updated.` ]; diff --git a/src/components/UI/index.js b/src/components/UI/index.js index 2a517276..a960f5f9 100644 --- a/src/components/UI/index.js +++ b/src/components/UI/index.js @@ -31,7 +31,6 @@ export * from './SearchToken/SearchToken'; export * from './SelectTokenList/SelectTokenList'; export * from './SelectTokenRow/SelectTokenRow'; export * from './WalletLogin/WalletLogin'; -export * from './TransferLog/TransferLog'; -export * from './TransferLogContainer/TransferLogContainer'; +export * from './TransactionLogContainer/TransactionLogContainer'; export * from './LogoutButton/LogoutButton'; export * from './AccountAddress/AccountAddress'; diff --git a/src/config/addresses/contracts.ethereum.js b/src/config/addresses/contracts/contracts.ethereum.js similarity index 87% rename from src/config/addresses/contracts.ethereum.js rename to src/config/addresses/contracts/contracts.ethereum.js index 33b05e16..2ffe300e 100644 --- a/src/config/addresses/contracts.ethereum.js +++ b/src/config/addresses/contracts/contracts.ethereum.js @@ -1,4 +1,4 @@ -import {ChainType} from '../../enums'; +import {ChainType} from '../../../enums'; export const ETH_BRIDGE_CONTRACT_ADDRESS = { [ChainType.MAIN.id]: '', diff --git a/src/config/addresses/index.js b/src/config/addresses/index.js index 4aedc4df..f4205e90 100644 --- a/src/config/addresses/index.js +++ b/src/config/addresses/index.js @@ -1,3 +1,3 @@ -export * from './contracts.ethereum'; -export * from './tokens.ethereum'; -export * from './tokens.starknet'; +export * from './contracts/contracts.ethereum'; +export * from './tokens/tokens.ethereum'; +export * from './tokens/tokens.starknet'; diff --git a/src/config/addresses/tokens.ethereum.js b/src/config/addresses/tokens/tokens.ethereum.js similarity index 89% rename from src/config/addresses/tokens.ethereum.js rename to src/config/addresses/tokens/tokens.ethereum.js index 83582c09..97f2748b 100644 --- a/src/config/addresses/tokens.ethereum.js +++ b/src/config/addresses/tokens/tokens.ethereum.js @@ -1,4 +1,4 @@ -import {ChainType} from '../../enums'; +import {ChainType} from '../../../enums'; export const EthereumTokens = [ { diff --git a/src/config/addresses/tokens.starknet.js b/src/config/addresses/tokens/tokens.starknet.js similarity index 93% rename from src/config/addresses/tokens.starknet.js rename to src/config/addresses/tokens/tokens.starknet.js index bc64fe7c..ebc64f68 100644 --- a/src/config/addresses/tokens.starknet.js +++ b/src/config/addresses/tokens/tokens.starknet.js @@ -1,4 +1,4 @@ -import {ChainType, NetworkType} from '../../enums'; +import {ChainType, NetworkType} from '../../../enums'; export const StarknetTokens = [ { diff --git a/src/config/config.json b/src/config/config.json index 510c8f4d..86985e0d 100644 --- a/src/config/config.json +++ b/src/config/config.json @@ -1,6 +1,6 @@ { "autoConnect": false, - "pollBalanceInterval": 2000, - "pollBlockNumberInterval": 5000, - "supportedChainIds": [1, 5] + "pollBalanceInterval": 60000, + "pollBlockNumberInterval": 30000, + "supportedChainIds": [5] } diff --git a/src/hooks/useLogger.js b/src/hooks/useLogger.js index b198f35b..739c44bd 100644 --- a/src/hooks/useLogger.js +++ b/src/hooks/useLogger.js @@ -1,5 +1,3 @@ -import {useMemo} from 'react'; - import {getLogger} from '../services'; -export const useLogger = name => useMemo(() => getLogger(name), [name]); +export const useLogger = name => getLogger(name); diff --git a/src/hooks/useTransfer.js b/src/hooks/useTransfer.js index afacd8f4..665abdcb 100644 --- a/src/hooks/useTransfer.js +++ b/src/hooks/useTransfer.js @@ -19,19 +19,19 @@ import { const PROGRESS = { approval: symbol => ({ - type: 'Approval required', + type: 'Approval Required', message: `Requesting permission to access your ${symbol} funds` }), deposit: (amount, symbol) => ({ - type: 'Deposit in progress', + type: 'Deposit in Progress', message: `Depositing ${amount} ${symbol} to StarkNet` }), initiateWithdraw: (amount, symbol) => ({ - type: 'Initiate withdrawal', + type: 'Initiate Withdrawal', message: `Initiating withdrawal of ${amount} ${symbol}` }), waitForAccept: () => ({ - type: 'Transaction received', + type: 'Transaction Received', message: `Waiting for transaction to be accepted on StarkNet` }), waitForEvent: () => ({ @@ -39,7 +39,7 @@ const PROGRESS = { message: 'Waiting for message to be received on Ethereum' }), withdraw: (amount, symbol, recipient) => ({ - type: 'Withdrawal in progress', + type: 'Withdrawal in Progress', message: `Withdrawing ${amount} ${symbol} to ${recipient}` }) }; diff --git a/src/providers/TokensProvider/TokensProvider.js b/src/providers/TokensProvider/TokensProvider.js index e946424e..41c9363e 100644 --- a/src/providers/TokensProvider/TokensProvider.js +++ b/src/providers/TokensProvider/TokensProvider.js @@ -1,37 +1,56 @@ import PropTypes from 'prop-types'; import React, {useEffect, useReducer} from 'react'; +import {pollBalanceInterval} from '../../config/config.json'; +import {useLogger} from '../../hooks'; import {useEthereumTokenBalance, useStarknetTokenBalance} from '../../hooks/useTokenBalance'; import {useEthereumWallet, useStarknetWallet} from '../WalletsProvider'; import {TokensContext} from './tokens-context'; import {actions, initialState, reducer} from './tokens-reducer'; export const TokensProvider = ({children}) => { + const logger = useLogger(TokensProvider.displayName); const [tokens, dispatch] = useReducer(reducer, initialState); const {account: ethereumAccount} = useEthereumWallet(); const {account: starknetAccount} = useStarknetWallet(); const getEthereumTokenBalance = useEthereumTokenBalance(ethereumAccount); const getStarknetTokenBalance = useStarknetTokenBalance(starknetAccount); - useEffect(() => { - updateTokens(); - }, []); - const updateTokens = () => { + logger.log(`It's time to update tokens balances!`); for (let index = 0; index < tokens.length; index++) { const token = tokens[index]; + if (token.isLoading) { + logger.log('Token already loading, skip balance update'); + break; + } + logger.log(`Update balance for token ${token.symbol}`, {token}); + if (!('balance' in token)) { + updateTokenState(index, {isLoading: true}); + } else { + logger.log(`Token already have a balance of ${token.balance}, don't set isLoading prop`); + } const getBalance = token.isEthereum ? getEthereumTokenBalance : getStarknetTokenBalance; - updateTokenState(index, {isLoading: true}); getBalance(tokens[index].tokenAddress) .then(balance => { + logger.log(`New ${token.symbol} token balance is ${balance}`); updateTokenState(index, {balance, isLoading: false}); }) - .catch(() => { + .catch(ex => { + logger.error(`Failed to fetch token ${token.symbol} balance: ${ex.message}`, {ex}); updateTokenState(index, {balance: null, isLoading: false}); }); } }; + useEffect(() => { + updateTokens(); + const intervalId = setInterval(() => { + updateTokens(); + }, pollBalanceInterval); + return () => clearInterval(intervalId); + }, []); + const updateTokenState = (index, args) => { dispatch({ type: actions.UPDATE_TOKEN_STATE, @@ -50,6 +69,8 @@ export const TokensProvider = ({children}) => { return <TokensContext.Provider value={context}>{children}</TokensContext.Provider>; }; +TokensProvider.displayName = 'TokensProvider'; + TokensProvider.propTypes = { children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) }; diff --git a/src/providers/TransactionsProvider/TransactionsProvider.js b/src/providers/TransactionsProvider/TransactionsProvider.js index a97cfca3..10cb803c 100644 --- a/src/providers/TransactionsProvider/TransactionsProvider.js +++ b/src/providers/TransactionsProvider/TransactionsProvider.js @@ -5,24 +5,27 @@ import useDeepCompareEffect from 'use-deep-compare-effect'; import {LOCAL_STORAGE_TXS_KEY} from '../../constants'; import {TransactionStatus} from '../../enums'; +import {useLogger} from '../../hooks'; import {StorageManager} from '../../services'; import {useBlockHash} from '../BlockHashProvider'; import {TransactionsContext} from './transactions-context'; import {actions, initialState, reducer} from './transactions-reducer'; export const TransactionsProvider = ({children}) => { + const logger = useLogger(TransactionsProvider.displayName); const [transactions, dispatch] = useReducer(reducer, initialState); const blockHash = useBlockHash(); useEffect(() => { const storedTransactions = StorageManager.getItem(LOCAL_STORAGE_TXS_KEY); - if (storedTransactions) { + if (Array.isArray(storedTransactions)) { setTransactions(storedTransactions); } }, []); useDeepCompareEffect(() => { const updateTransactions = async () => { + logger.log(`It's time to update transactions!`); if (!blockHash) { return; } @@ -34,16 +37,16 @@ export const TransactionsProvider = ({children}) => { return tx; } try { - console.log(`checking tx status ${tx.starknet_hash}`); + logger.log(`Checking tx status ${tx.starknet_hash}`); const newStatus = await getStarknet().provider.getTransactionStatus(tx.starknet_hash); - console.log(`new status ${newStatus.tx_status}`); + logger.log(`New status ${newStatus.tx_status}`); return { ...tx, status: newStatus.tx_status, lastChecked: blockHash }; } catch (error) { - console.error(`failed to check transaction status: ${tx.hash}`); + logger.error(`Failed to check transaction status: ${tx.starknet_hash}`); } return tx; }; @@ -53,8 +56,11 @@ export const TransactionsProvider = ({children}) => { const newTransaction = await checkTransaction(tx); newTransactions.push(newTransaction); } - StorageManager.setItem(LOCAL_STORAGE_TXS_KEY, newTransactions); - setTransactions(newTransactions); + logger.log(`Done update transactions`, {newTransactions}); + if (newTransactions.length) { + setTransactions(newTransactions); + StorageManager.setItem(LOCAL_STORAGE_TXS_KEY, newTransactions); + } }; updateTransactions(); }, [blockHash, transactions]); @@ -81,6 +87,8 @@ export const TransactionsProvider = ({children}) => { return <TransactionsContext.Provider value={context}>{children}</TransactionsContext.Provider>; }; +TransactionsProvider.displayName = 'TransactionsProvider'; + TransactionsProvider.propTypes = { children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) }; diff --git a/src/providers/TransactionsProvider/transactions-context.js b/src/providers/TransactionsProvider/transactions-context.js index d6123d1c..5cdb196d 100644 --- a/src/providers/TransactionsProvider/transactions-context.js +++ b/src/providers/TransactionsProvider/transactions-context.js @@ -1,8 +1,6 @@ import {createContext} from 'react'; -import {initialState} from './transactions-reducer'; - export const TransactionsContext = createContext({ - ...initialState, + transactions: [], addTransaction: tx => tx }); diff --git a/src/services/storage-manager.js b/src/services/storage-manager.js index 05792d2d..07af10bc 100644 --- a/src/services/storage-manager.js +++ b/src/services/storage-manager.js @@ -22,21 +22,17 @@ Storage.prototype.getObjectHash = function (key) { export const StorageManager = { setItem: (key, item) => { if (localStorage) { - localStorage.setObjectHash(key, JSON.stringify(item)); + localStorage.setItem(key, JSON.stringify(item)); return true; } return false; }, getItem: key => { if (localStorage) { - const item = localStorage.getObjectHash(key); + const item = localStorage.getItem(key); if (item) { try { - return JSON.parse( - Object.entries(item) - .map(c => c[1]) - .join('') - ); + return JSON.parse(item); } catch (ex) { return item; } diff --git a/src/utils/date.js b/src/utils/date.js new file mode 100644 index 00000000..6fe29987 --- /dev/null +++ b/src/utils/date.js @@ -0,0 +1,25 @@ +export const getDate = timestamp => { + const day = new Date(timestamp); + const yyyy = day.getFullYear(); + let dd = day.getDate(); + let mm = day.getMonth() + 1; + if (dd < 10) { + dd = '0' + dd; + } + if (mm < 10) { + mm = '0' + mm; + } + return `${dd}/${mm}/${yyyy}`; +}; + +export const get24Time = timestamp => { + let ut = new Date(timestamp); + let h, m, s; + h = ut.getHours(); + m = ut.getMinutes(); + s = ut.getSeconds(); + if (s <= 9) s = '0' + s; + if (m <= 9) m = '0' + m; + if (h <= 9) h = '0' + h; + return `${h}:${m}:${s}`; +}; diff --git a/src/utils/index.js b/src/utils/index.js index 0d3bc121..e2bab254 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -6,6 +6,7 @@ export * from './string'; export * from './token'; export * from './number'; export * from './hash'; +export * from './date'; export const printPackageInfo = (name, version, color) => { const currentLogLevel = getLogLevel(); From 7ae4c19f92a67a3e5c934dfb695b34334cc20fd2 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Mon, 20 Dec 2021 23:31:22 +0200 Subject: [PATCH 027/211] chore: remove hooks plugin from eslint [skip ci] --- .eslintrc.json | 16 +------------- package.json | 4 +--- .../TransactionSubmittedModal.strings.js | 2 +- yarn.lock | 21 +------------------ 4 files changed, 4 insertions(+), 39 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 409adc86..0fcff14f 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -15,23 +15,9 @@ "ecmaVersion": 12, "sourceType": "module" }, - "plugins": ["react", "react-hooks", "prettier", "hooks"], + "plugins": ["react", "react-hooks", "prettier"], "rules": { "prettier/prettier": "error", - "hooks/sort": [ - 2, - { - "groups": [ - "useReducer", - "useContext", - "useState", - "useRef", - "useDispatch", - "useCallback", - "useEffect" - ] - } - ], "react/jsx-sort-props": [ 2, { diff --git a/package.json b/package.json index f48b7506..bfcc61ac 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,6 @@ "@argent/get-starknet": "^0.1.3", "@metamask/onboarding": "^1.0.1", "@reduxjs/toolkit": "^1.6.2", - "axios": "^0.24.0", "js-logger": "^1.6.1", "react": "^17.0.2", "react-dom": "^17.0.2", @@ -63,9 +62,8 @@ "@babel/plugin-proposal-class-properties": "^7.16.0", "@trivago/prettier-plugin-sort-imports": "^2.0.4", "eslint-config-prettier": "^8.3.0", - "eslint-plugin-hooks": "^0.4.1", "eslint-plugin-prettier": "^3.4.0", - "eslint-plugin-react-hooks": "^4.2.0", + "eslint-plugin-react-hooks": "^4.3.0", "husky": "^7.0.1", "lint-staged": "^11.0.1", "node-sass": "^6.0.1", diff --git a/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.strings.js b/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.strings.js index 94220acb..7da3960a 100644 --- a/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.strings.js +++ b/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.strings.js @@ -1,5 +1,5 @@ export const BTN_TEXT = explorer => `view on ${explorer}`; export const BODY_TXT_PARTS = [ `Your transaction has been sent to StarkNet!\n`, - `We'll notify you once it's status will be updated.` + `We'll notify you once its status will be updated.` ]; diff --git a/yarn.lock b/yarn.lock index 2d77073c..c986aad7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3708,13 +3708,6 @@ axios@^0.23.0: dependencies: follow-redirects "^1.14.4" -axios@^0.24.0: - version "0.24.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.24.0.tgz#804e6fa1e4b9c5288501dd9dff56a7a0940d20d6" - integrity sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA== - dependencies: - follow-redirects "^1.14.4" - axobject-query@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" @@ -6906,13 +6899,6 @@ eslint-plugin-flowtype@^5.2.0: lodash "^4.17.15" string-natural-compare "^3.0.1" -eslint-plugin-hooks@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-hooks/-/eslint-plugin-hooks-0.4.1.tgz#1426c0061e0b8376a0759393678d17862b22f333" - integrity sha512-nAJkh8xnkM+jGmHc7DysJeUuvYLwbNJ30MezLXeDxNp5vynYQCq1EnYhKjZdwUJx5AUvHwUeO1fu9K4TPMDbAg== - dependencies: - requireindex "~1.2.0" - eslint-plugin-import@^2.22.1: version "2.25.3" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.3.tgz#a554b5f66e08fb4f6dc99221866e57cfff824766" @@ -6964,7 +6950,7 @@ eslint-plugin-prettier@^3.4.0: dependencies: prettier-linter-helpers "^1.0.0" -eslint-plugin-react-hooks@^4.2.0: +eslint-plugin-react-hooks@^4.2.0, eslint-plugin-react-hooks@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz#318dbf312e06fab1c835a4abef00121751ac1172" integrity sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA== @@ -14207,11 +14193,6 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== -requireindex@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.2.0.tgz#3463cdb22ee151902635aa6c9535d4de9c2ef1ef" - integrity sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww== - requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" From 17787edb418fc33a91c4e0c1757422431284060e Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 21 Dec 2021 23:51:18 +0200 Subject: [PATCH 028/211] fix: transfer from starknet [skip ci] --- package.json | 7 +- src/api/bridge.js | 16 +- src/api/erc20.js | 24 +- src/api/token.js | 19 -- .../Containers/Footer/Footer.strings.js | 8 +- .../Containers/Header/Header.strings.js | 7 +- src/components/Features/Account/Account.js | 15 +- .../Features/Account/Account.strings.js | 9 +- .../Features/Login/Login.strings.js | 17 +- .../SelectToken/SelectToken.strings.js | 8 +- .../Features/TransactionLog/TransactionLog.js | 45 +++- .../TransactionLog/TransactionLog.module.scss | 6 + .../TransactionLog/TransactionLog.strings.js | 7 + src/components/Features/Transfer/Transfer.js | 35 +-- .../Features/Transfer/Transfer.strings.js | 9 +- .../AccountAddress/AccountAddress.strings.js | 8 +- .../UI/BackButton/BackButton.strings.js | 8 +- .../UI/LinkButton/LinkButton.module.scss | 5 +- .../UI/LogoutButton/LogoutButton.strings.js | 8 +- .../UI/MaxButton/MaxButton.strings.js | 8 +- .../UI/NetworkMenu/NetworkMenu.strings.js | 10 +- .../UI/SearchToken/SearchToken.strings.js | 8 +- .../UI/TokenBalance/TokenBalance.strings.js | 8 +- .../UI/TokenInput/TokenInput.strings.js | 8 +- .../TransactionLogContainer.strings.js | 15 +- .../TransactionSubmittedModal.strings.js | 14 +- .../TransferButton/TransferButton.strings.js | 8 +- .../UI/WalletButton/WalletButton.strings.js | 7 +- src/config/config.json | 2 +- src/config/strings.json | 96 ++++++++ src/hooks/useStrings.js | 5 + src/hooks/useTransfer.js | 206 ++++++++++-------- .../TransactionsProvider.js | 3 +- .../transactions-hooks.js | 10 +- src/utils/number.js | 43 ++-- yarn.lock | 20 +- 36 files changed, 490 insertions(+), 242 deletions(-) delete mode 100644 src/api/token.js create mode 100644 src/components/Features/TransactionLog/TransactionLog.strings.js create mode 100644 src/config/strings.json create mode 100644 src/hooks/useStrings.js diff --git a/package.json b/package.json index bfcc61ac..6ba65615 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ ] }, "dependencies": { - "@argent/get-starknet": "^0.1.3", + "@argent/get-starknet": "^0.1.4", "@metamask/onboarding": "^1.0.1", "@reduxjs/toolkit": "^1.6.2", "js-logger": "^1.6.1", @@ -55,8 +55,9 @@ "react-scripts": "4.0.3", "starknet": "^2.5.0", "use-deep-compare-effect": "^1.8.1", - "use-wallet": "^0.13.1", - "web3": "^1.6.0" + "use-wallet": "^0.13.4", + "uuid": "^8.3.2", + "web3": "^1.6.1" }, "devDependencies": { "@babel/plugin-proposal-class-properties": "^7.16.0", diff --git a/src/api/bridge.js b/src/api/bridge.js index f658c73e..d84d6c04 100644 --- a/src/api/bridge.js +++ b/src/api/bridge.js @@ -1,5 +1,5 @@ -import {starknet_toFelt, starknet_toUint256, eth_toWei} from '../utils'; -import {starknet_sendTransaction, eth_sendTransaction} from '../utils/contract'; +import {parseToDecimals, parseToFelt, parseToUint256} from '../utils'; +import {eth_sendTransaction, starknet_sendTransaction} from '../utils/contract'; import {decimals} from './erc20'; export const eth_deposit = async (recipient, amount, tokenBridgeContract, from) => { @@ -7,7 +7,7 @@ export const eth_deposit = async (recipient, amount, tokenBridgeContract, from) return await eth_sendTransaction( tokenBridgeContract, 'deposit', - [eth_toWei(amount), recipient], + [parseToDecimals(amount), recipient], { from } @@ -21,7 +21,7 @@ export const eth_depositEth = async (recipient, amount, ethBridgeContract, from) try { return await eth_sendTransaction(ethBridgeContract, 'deposit', [recipient], { from, - value: eth_toWei(amount) + value: parseToDecimals(amount) }); } catch (ex) { return Promise.reject(ex); @@ -33,7 +33,7 @@ export const eth_withdraw = async (recipient, amount, tokenBridgeContract) => { return await eth_sendTransaction( tokenBridgeContract, 'withdraw', - [eth_toWei(amount), recipient], + [parseToDecimals(amount), recipient], { from: recipient } @@ -50,10 +50,10 @@ export const starknet_initiateWithdraw = async ( tokenContract ) => { try { - const tokenDecimals = await decimals(tokenContract, false); + const dec = await decimals(tokenContract, false); return await starknet_sendTransaction(tokenBridgeContract, 'initiate_withdraw', { - l1Recipient: starknet_toFelt(recipient), - amount: starknet_toUint256(amount, tokenDecimals) + l1Recipient: parseToFelt(recipient), + amount: parseToUint256(amount, dec) }); } catch (ex) { return Promise.reject(ex); diff --git a/src/api/erc20.js b/src/api/erc20.js index ddbf1c96..dff788dd 100644 --- a/src/api/erc20.js +++ b/src/api/erc20.js @@ -1,9 +1,9 @@ import { - eth_fromWei, - starknet_fromFelt, - starknet_fromUint256, - starknet_toFelt, - starknet_toUint256 + parseFromDecimals, + parseFromFelt, + parseFromUint256, + parseToFelt, + parseToUint256 } from '../utils'; import { eth_callContract, @@ -20,8 +20,8 @@ export const approve = async (spender, value, contract, from, isEthereum = true) } else { const dec = await decimals(contract, false); return await starknet_sendTransaction(contract, 'approve', { - spender: starknet_toFelt(spender), - amount: starknet_toUint256(value, dec) + spender: parseToFelt(spender), + amount: parseToUint256(value, dec) }); } } catch (ex) { @@ -33,7 +33,7 @@ export const allowance = async (owner, spender, contract, isEthereum = true) => try { if (isEthereum) { const allow = await eth_callContract(contract, 'allowance', [owner, spender]); - return eth_fromWei(allow); + return parseFromDecimals(allow); } } catch (ex) { return Promise.reject(ex); @@ -44,13 +44,13 @@ export const balanceOf = async (account, contract, isEthereum = true) => { try { if (isEthereum) { const balance = await eth_callContract(contract, 'balanceOf', [account]); - return eth_fromWei(balance); + return parseFromDecimals(balance); } else { const [{balance}, dec] = await Promise.all([ starknet_callContract(contract, 'balanceOf', [{account}]), decimals(contract, false) ]); - return starknet_fromUint256(balance, dec); + return parseFromUint256(balance, dec); } } catch (ex) { return Promise.reject(ex); @@ -63,7 +63,7 @@ export const decimals = async (contract, isEthereum = true) => { return await eth_callContract(contract, 'decimals'); } else { const {decimals} = await starknet_callContract(contract, 'decimals'); - return starknet_fromFelt(decimals); + return parseFromFelt(decimals); } } catch (ex) { return Promise.reject(ex); @@ -73,7 +73,7 @@ export const decimals = async (contract, isEthereum = true) => { export const eth_ethBalanceOf = async account => { try { const balance = await web3.eth.getBalance(account); - return eth_fromWei(balance); + return parseFromDecimals(balance); } catch (ex) { return Promise.reject(ex); } diff --git a/src/api/token.js b/src/api/token.js deleted file mode 100644 index 3e230210..00000000 --- a/src/api/token.js +++ /dev/null @@ -1,19 +0,0 @@ -import {DEFAULT_DECIMALS, fromDecimals, starknet_fromUint256} from '../utils'; -import {balanceOf, decimals} from './erc20'; - -export const fetchTokenInfo = async (account, contract, isEthereum = true) => { - try { - let [balance, dec] = await Promise.all([ - balanceOf(account, contract, isEthereum), - decimals(account, contract, isEthereum) - ]); - if (isEthereum) { - balance = fromDecimals(balance, dec); - } else { - balance = starknet_fromUint256(balance, dec); - } - return {balance, decimals: dec || DEFAULT_DECIMALS}; - } catch (ex) { - return Promise.reject(ex); - } -}; diff --git a/src/components/Containers/Footer/Footer.strings.js b/src/components/Containers/Footer/Footer.strings.js index e3a936f5..08399395 100644 --- a/src/components/Containers/Footer/Footer.strings.js +++ b/src/components/Containers/Footer/Footer.strings.js @@ -1 +1,7 @@ -export const FOOTER_TXT = '© 2022 StarkWare Industries Ltd. All Rights Reserved'; +import strings from '../../../config/strings.json'; + +const { + footer: {footer_txt} +} = strings; + +export const FOOTER_TXT = footer_txt; diff --git a/src/components/Containers/Header/Header.strings.js b/src/components/Containers/Header/Header.strings.js index 5041ae83..992de892 100644 --- a/src/components/Containers/Header/Header.strings.js +++ b/src/components/Containers/Header/Header.strings.js @@ -1,3 +1,8 @@ +import strings from '../../../config/strings.json'; import {capitalize, evaluate} from '../../../utils'; -export const CHAIN_TXT = chainName => capitalize(evaluate('{{chainName}} testnet', {chainName})); +const { + header: {chain_txt} +} = strings; + +export const CHAIN_TXT = chainName => capitalize(evaluate(chain_txt, {chainName})); diff --git a/src/components/Features/Account/Account.js b/src/components/Features/Account/Account.js index 8f8f4e62..816862d5 100644 --- a/src/components/Features/Account/Account.js +++ b/src/components/Features/Account/Account.js @@ -1,8 +1,10 @@ import React from 'react'; import {LINKS} from '../../../constants'; -import {useTransactions} from '../../../providers/TransactionsProvider'; +import {useStrings, useTransfer} from '../../../hooks'; +import {useAccountTransactions} from '../../../providers/TransactionsProvider'; import {useWallets} from '../../../providers/WalletsProvider'; +import {evaluate} from '../../../utils'; import { AccountAddress, BackButton, @@ -19,14 +21,21 @@ import styles from './Account.module.scss'; import {TITLE_TXT} from './Account.strings'; export const Account = () => { - const {transactions} = useTransactions(); const {showTransferMenu} = useBridgeActions(); const {account, chainId, resetWallet} = useWallets(); + const transactions = useAccountTransactions(account); const {isEthereum, isStarknet, fromNetwork} = useTransferData(); + const {finalizeTransferFromStarknet} = useTransfer(); const renderTransactions = () => { return transactions.length - ? transactions.map((tx, index) => <TransactionLog key={index} tx={tx} />) + ? transactions.map((tx, index) => ( + <TransactionLog + key={index} + tx={tx} + onWithdrawClick={() => finalizeTransferFromStarknet(tx)} + /> + )) : null; }; diff --git a/src/components/Features/Account/Account.strings.js b/src/components/Features/Account/Account.strings.js index 4dd818ee..8e2b2159 100644 --- a/src/components/Features/Account/Account.strings.js +++ b/src/components/Features/Account/Account.strings.js @@ -1 +1,8 @@ -export const TITLE_TXT = network => `${network} Account`; +import strings from '../../../config/strings.json'; +import {evaluate} from '../../../utils'; + +const { + account: {title_txt} +} = strings; + +export const TITLE_TXT = network => evaluate(title_txt, {network}); diff --git a/src/components/Features/Login/Login.strings.js b/src/components/Features/Login/Login.strings.js index b1f2b2d7..e6c87d5a 100644 --- a/src/components/Features/Login/Login.strings.js +++ b/src/components/Features/Login/Login.strings.js @@ -1,13 +1,14 @@ +import strings from '../../../config/strings.json'; import {evaluate} from '../../../utils'; -export const TITLE_TXT = 'Login'; +const { + login: {title_txt, subtitle_txt, download_txt, modal_txt} +} = strings; -export const SUBTITLE_TXT = networkName => - evaluate('Please select {{networkName}} wallet to connect with this dApp:', { - networkName - }); +export const TITLE_TXT = title_txt; -export const DOWNLOAD_TEXT = ['Don’t have a wallet?', 'Download Here']; +export const DOWNLOAD_TEXT = download_txt; -export const MODAL_TXT = walletName => - evaluate('Waiting for confirmation from {{walletName}}', {walletName}); +export const SUBTITLE_TXT = networkName => evaluate(subtitle_txt, {networkName}); + +export const MODAL_TXT = walletName => evaluate(modal_txt, {walletName}); diff --git a/src/components/Features/SelectToken/SelectToken.strings.js b/src/components/Features/SelectToken/SelectToken.strings.js index 1fd5ca5f..60080eb1 100644 --- a/src/components/Features/SelectToken/SelectToken.strings.js +++ b/src/components/Features/SelectToken/SelectToken.strings.js @@ -1 +1,7 @@ -export const TITLE_TXT = 'Select token from'; +import strings from '../../../config/strings.json'; + +const { + selectToken: {title_txt} +} = strings; + +export const TITLE_TXT = title_txt; diff --git a/src/components/Features/TransactionLog/TransactionLog.js b/src/components/Features/TransactionLog/TransactionLog.js index bae5d9f5..4bc30947 100644 --- a/src/components/Features/TransactionLog/TransactionLog.js +++ b/src/components/Features/TransactionLog/TransactionLog.js @@ -3,18 +3,20 @@ import React, {useEffect, useState} from 'react'; import {LINKS} from '../../../constants'; import {TransactionStatus} from '../../../enums'; +import {useColors, useStrings} from '../../../hooks'; import {useWallets} from '../../../providers/WalletsProvider'; import {get24Time, getDate} from '../../../utils'; -import {CryptoLogo} from '../../UI'; +import {Button, CryptoLogo} from '../../UI'; import {CryptoLogoSize} from '../../UI/CryptoLogo/CryptoLogo.enums'; import {LinkButton} from '../../UI/LinkButton/LinkButton'; import {useTransferData} from '../Transfer/Transfer.hooks'; import styles from './TransactionLog.module.scss'; +import {WITHDRAW_BTN_TXT} from './TransactionLog.strings'; -export const TransactionLog = ({tx}) => { +export const TransactionLog = ({tx, onWithdrawClick}) => { const {symbol, timestamp, name, amount, status, eth_hash, starknet_hash} = tx; const [sign, setSign] = useState(''); - const {action} = useTransferData(); + const {action, isEthereum} = useTransferData(); const {chainId} = useWallets(); useEffect(() => { @@ -38,11 +40,14 @@ export const TransactionLog = ({tx}) => { {status !== TransactionStatus.ACCEPTED_ON_L1 ? ( <div className={styles.data}>{status.replaceAll('_', ' ')}</div> ) : ( - <div> - <LinkButton - text={LINKS.ETHERSCAN.text} - url={LINKS.ETHERSCAN.txUrl(chainId, eth_hash)} - /> + <div className={styles.links}> + {eth_hash && ( + <LinkButton + text={LINKS.ETHERSCAN.text} + url={LINKS.ETHERSCAN.txUrl(chainId, eth_hash)} + /> + )} + {!eth_hash && isEthereum && <WithdrawButton onClick={onWithdrawClick} />} <LinkButton text={LINKS.VOYAGER.text} url={LINKS.VOYAGER.txUrl(chainId, starknet_hash)} @@ -56,6 +61,28 @@ export const TransactionLog = ({tx}) => { ); }; +const WithdrawButton = ({onClick}) => { + const {colorBeta, colorAlpha3} = useColors(); + return ( + <Button + colorBackground={colorAlpha3} + colorBorder={colorBeta} + colorText={colorBeta} + height={10} + style={{ + padding: '14px' + }} + text={WITHDRAW_BTN_TXT} + onClick={onClick} + /> + ); +}; + +WithdrawButton.propTypes = { + onClick: PropTypes.func +}; + TransactionLog.propTypes = { - tx: PropTypes.object + tx: PropTypes.object, + onWithdrawClick: PropTypes.func }; diff --git a/src/components/Features/TransactionLog/TransactionLog.module.scss b/src/components/Features/TransactionLog/TransactionLog.module.scss index ffd8e432..b60b93af 100644 --- a/src/components/Features/TransactionLog/TransactionLog.module.scss +++ b/src/components/Features/TransactionLog/TransactionLog.module.scss @@ -25,6 +25,12 @@ $hr-color: $--color-alpha-3; flex-direction: column; align-items: flex-end; justify-content: space-around; + + .links { + display: flex; + justify-content: space-around; + align-items: center; + } } .data { diff --git a/src/components/Features/TransactionLog/TransactionLog.strings.js b/src/components/Features/TransactionLog/TransactionLog.strings.js new file mode 100644 index 00000000..3ae97daf --- /dev/null +++ b/src/components/Features/TransactionLog/TransactionLog.strings.js @@ -0,0 +1,7 @@ +import strings from '../../../config/strings.json'; + +const { + transactionLog: {withdraw_btn_txt} +} = strings; + +export const WITHDRAW_BTN_TXT = withdraw_btn_txt; diff --git a/src/components/Features/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer.js index df5c20cf..9bd61f62 100644 --- a/src/components/Features/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer.js @@ -3,7 +3,6 @@ import React, {useEffect, useState} from 'react'; import {ActionType, NetworkType} from '../../../enums'; import {useTransfer} from '../../../hooks'; import {useEthereumToken, useStarknetToken, useTokens} from '../../../providers/TokensProvider'; -import {useTransactions} from '../../../providers/TransactionsProvider'; import { Loading, Menu, @@ -15,12 +14,6 @@ import { } from '../../UI'; import {LoadingSize} from '../../UI/Loading/Loading.enums'; import {useBridgeActions} from '../Bridge/Bridge.hooks'; -import { - useErrorModal, - useHideModal, - useProgressModal, - useTransactionSubmittedModal -} from '../ModalProvider/ModalProvider.hooks'; import { useAmount, useIsEthereum, @@ -29,25 +22,19 @@ import { useTransferData } from './Transfer.hooks'; import styles from './Transfer.module.scss'; -import {ERROR_MODAL_TITLE, INSUFFICIENT_BALANCE_ERROR_MSG} from './Transfer.strings'; +import {INSUFFICIENT_BALANCE_ERROR_MSG} from './Transfer.strings'; export const Transfer = () => { const [isEthereum, setEthereum] = useIsEthereum(); const [isStarknet, setStarknet] = useIsStarknet(); - const [amount, setAmount, clearAmount] = useAmount(); + const [amount, setAmount] = useAmount(); const [hasInputError, setHasInputError] = useState(false); const [isButtonDisabled, setIsButtonDisabled] = useState(true); const {showSelectTokenMenu} = useBridgeActions(); const {selectedToken, action} = useTransferData(); const {selectToken} = useTransferActions(); - const {addTransaction} = useTransactions(); - const {transferTokenToStarknet, transferTokenFromStarknet, data, error, isLoading, progress} = - useTransfer(); - const {tokens, updateTokens} = useTokens(); - const hideModal = useHideModal(); - const showProgressModal = useProgressModal(); - const showErrorModal = useErrorModal(ERROR_MODAL_TITLE); - const showTransactionSubmittedModal = useTransactionSubmittedModal(); + const {transferTokenToStarknet, transferTokenFromStarknet, isLoading} = useTransfer(); + const {tokens} = useTokens(); const getEthereumToken = useEthereumToken(); const getStarknetToken = useStarknetToken(); @@ -57,20 +44,6 @@ export const Transfer = () => { } }, []); - useEffect(() => { - if (isLoading) { - progress && showProgressModal(progress.type, progress.message); - } else if (error) { - hideModal(); - showErrorModal(error.message); - } else if (data) { - updateTokens(); - clearAmount(); - addTransaction(data); - showTransactionSubmittedModal(data); - } - }, [progress, data, error, isLoading]); - useEffect(() => { if (selectedToken) { setHasInputError(false); diff --git a/src/components/Features/Transfer/Transfer.strings.js b/src/components/Features/Transfer/Transfer.strings.js index 25e06cda..e728079a 100644 --- a/src/components/Features/Transfer/Transfer.strings.js +++ b/src/components/Features/Transfer/Transfer.strings.js @@ -1,2 +1,7 @@ -export const INSUFFICIENT_BALANCE_ERROR_MSG = 'Insufficient balance'; -export const ERROR_MODAL_TITLE = 'Transaction error'; +import strings from '../../../config/strings.json'; + +const { + transfer: {insufficient_balance_error_msg} +} = strings; + +export const INSUFFICIENT_BALANCE_ERROR_MSG = insufficient_balance_error_msg; diff --git a/src/components/UI/AccountAddress/AccountAddress.strings.js b/src/components/UI/AccountAddress/AccountAddress.strings.js index ecdc5706..e71cf1c5 100644 --- a/src/components/UI/AccountAddress/AccountAddress.strings.js +++ b/src/components/UI/AccountAddress/AccountAddress.strings.js @@ -1 +1,7 @@ -export const COPIED_MSG_TXT = 'copied!'; +import strings from '../../../config/strings.json'; + +const { + accountAddress: {copied_msg_txt} +} = strings; + +export const COPIED_MSG_TXT = copied_msg_txt; diff --git a/src/components/UI/BackButton/BackButton.strings.js b/src/components/UI/BackButton/BackButton.strings.js index 4ba46f98..0a873aa9 100644 --- a/src/components/UI/BackButton/BackButton.strings.js +++ b/src/components/UI/BackButton/BackButton.strings.js @@ -1 +1,7 @@ -export const BTN_TXT = 'back'; +import strings from '../../../config/strings.json'; + +const { + backButton: {btn_txt} +} = strings; + +export const BTN_TXT = btn_txt; diff --git a/src/components/UI/LinkButton/LinkButton.module.scss b/src/components/UI/LinkButton/LinkButton.module.scss index 4ad2cba8..3ecb7e64 100644 --- a/src/components/UI/LinkButton/LinkButton.module.scss +++ b/src/components/UI/LinkButton/LinkButton.module.scss @@ -17,15 +17,12 @@ $path-fill-color-hover: $--color-gamma; text-transform: capitalize; display: inline-block; cursor: pointer; + margin: 10px 0 10px 10px; svg { margin-left: 5px; } - &:not(:last-child) { - margin: 10px 10px 10px 0; - } - &:hover { color: $color-hover; border-color: $border-color-hover; diff --git a/src/components/UI/LogoutButton/LogoutButton.strings.js b/src/components/UI/LogoutButton/LogoutButton.strings.js index b64e57a7..e2deabe2 100644 --- a/src/components/UI/LogoutButton/LogoutButton.strings.js +++ b/src/components/UI/LogoutButton/LogoutButton.strings.js @@ -1 +1,7 @@ -export const BTN_TXT = 'Logout'; +import strings from '../../../config/strings.json'; + +const { + logoutButton: {btn_txt} +} = strings; + +export const BTN_TXT = btn_txt; diff --git a/src/components/UI/MaxButton/MaxButton.strings.js b/src/components/UI/MaxButton/MaxButton.strings.js index 0d9a018c..62146fcd 100644 --- a/src/components/UI/MaxButton/MaxButton.strings.js +++ b/src/components/UI/MaxButton/MaxButton.strings.js @@ -1 +1,7 @@ -export const BTN_TXT = 'max'; +import strings from '../../../config/strings.json'; + +const { + maxButton: {btn_txt} +} = strings; + +export const BTN_TXT = btn_txt; diff --git a/src/components/UI/NetworkMenu/NetworkMenu.strings.js b/src/components/UI/NetworkMenu/NetworkMenu.strings.js index d782a5d5..534e5469 100644 --- a/src/components/UI/NetworkMenu/NetworkMenu.strings.js +++ b/src/components/UI/NetworkMenu/NetworkMenu.strings.js @@ -1,2 +1,8 @@ -export const TO = 'to'; -export const FROM = 'from'; +import strings from '../../../config/strings.json'; + +const { + networkMenu: {to_txt, from_txt} +} = strings; + +export const TO = to_txt; +export const FROM = from_txt; diff --git a/src/components/UI/SearchToken/SearchToken.strings.js b/src/components/UI/SearchToken/SearchToken.strings.js index e09c2e21..d170959e 100644 --- a/src/components/UI/SearchToken/SearchToken.strings.js +++ b/src/components/UI/SearchToken/SearchToken.strings.js @@ -1 +1,7 @@ -export const SEARCH_PLACEHOLDER = 'Token name, symbol, or address'; +import strings from '../../../config/strings.json'; + +const { + searchToken: {search_placeholder} +} = strings; + +export const SEARCH_PLACEHOLDER = search_placeholder; diff --git a/src/components/UI/TokenBalance/TokenBalance.strings.js b/src/components/UI/TokenBalance/TokenBalance.strings.js index cf1cc987..5688421c 100644 --- a/src/components/UI/TokenBalance/TokenBalance.strings.js +++ b/src/components/UI/TokenBalance/TokenBalance.strings.js @@ -1 +1,7 @@ -export const TITLE_TXT = 'Available balance'; +import strings from '../../../config/strings.json'; + +const { + tokenBalance: {title_txt} +} = strings; + +export const TITLE_TXT = title_txt; diff --git a/src/components/UI/TokenInput/TokenInput.strings.js b/src/components/UI/TokenInput/TokenInput.strings.js index 65ad1a0e..844a3a31 100644 --- a/src/components/UI/TokenInput/TokenInput.strings.js +++ b/src/components/UI/TokenInput/TokenInput.strings.js @@ -1 +1,7 @@ -export const INPUT_PLACEHOLDER = '0.00'; +import strings from '../../../config/strings.json'; + +const { + tokenInput: {input_placeholder_txt} +} = strings; + +export const INPUT_PLACEHOLDER = input_placeholder_txt; diff --git a/src/components/UI/TransactionLogContainer/TransactionLogContainer.strings.js b/src/components/UI/TransactionLogContainer/TransactionLogContainer.strings.js index 8daece9f..d38ada52 100644 --- a/src/components/UI/TransactionLogContainer/TransactionLogContainer.strings.js +++ b/src/components/UI/TransactionLogContainer/TransactionLogContainer.strings.js @@ -1,4 +1,11 @@ -export const TITLE_TXT = 'Transaction log'; -export const OVERVIEW_TXT = 'recent transactions'; -export const EMPTY_MSG_TXT = 'Transactions will appear here...'; -export const VIEW_MORE_TXT = 'view more'; +import strings from '../../../config/strings.json'; + +const { + transactionLogContainer: {title_txt, overview_txt, empty_msg_txt, view_more_txt} +} = strings; + +debugger; +export const TITLE_TXT = title_txt; +export const OVERVIEW_TXT = overview_txt; +export const EMPTY_MSG_TXT = empty_msg_txt; +export const VIEW_MORE_TXT = view_more_txt; diff --git a/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.strings.js b/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.strings.js index 7da3960a..03313b27 100644 --- a/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.strings.js +++ b/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.strings.js @@ -1,5 +1,9 @@ -export const BTN_TEXT = explorer => `view on ${explorer}`; -export const BODY_TXT_PARTS = [ - `Your transaction has been sent to StarkNet!\n`, - `We'll notify you once its status will be updated.` -]; +import strings from '../../../config/strings.json'; +import {evaluate} from '../../../utils'; + +const { + transactionSubmittedModal: {btn_txt, body_txt} +} = strings; + +export const BODY_TXT_PARTS = body_txt; +export const BTN_TEXT = explorer => evaluate(btn_txt, {explorer}); diff --git a/src/components/UI/TransferButton/TransferButton.strings.js b/src/components/UI/TransferButton/TransferButton.strings.js index 51b58167..9c9b0436 100644 --- a/src/components/UI/TransferButton/TransferButton.strings.js +++ b/src/components/UI/TransferButton/TransferButton.strings.js @@ -1 +1,7 @@ -export const BTN_TXT = 'transfer'; +import strings from '../../../config/strings.json'; + +const { + transferButton: {btn_txt} +} = strings; + +export const BTN_TXT = btn_txt; diff --git a/src/components/UI/WalletButton/WalletButton.strings.js b/src/components/UI/WalletButton/WalletButton.strings.js index cb19993b..2db1696d 100644 --- a/src/components/UI/WalletButton/WalletButton.strings.js +++ b/src/components/UI/WalletButton/WalletButton.strings.js @@ -1,3 +1,8 @@ +import strings from '../../../config/strings.json'; import {evaluate} from '../../../utils'; -export const BTN_TXT = address => evaluate('Account | {{address}}', {address}); +const { + walletButton: {btn_txt} +} = strings; + +export const BTN_TXT = address => evaluate(btn_txt, {address}); diff --git a/src/config/config.json b/src/config/config.json index 86985e0d..ff5f98f9 100644 --- a/src/config/config.json +++ b/src/config/config.json @@ -1,6 +1,6 @@ { "autoConnect": false, - "pollBalanceInterval": 60000, + "pollBalanceInterval": 120000, "pollBlockNumberInterval": 30000, "supportedChainIds": [5] } diff --git a/src/config/strings.json b/src/config/strings.json new file mode 100644 index 00000000..e5332f00 --- /dev/null +++ b/src/config/strings.json @@ -0,0 +1,96 @@ +{ + "header": { + "chain_txt": "{{chainName}} testnet" + }, + "footer": { + "footer_txt": "© 2022 StarkWare Industries Ltd. All Rights Reserved" + }, + "transfer": { + "insufficient_balance_error_msg": "Insufficient balance" + }, + "transferButton": { + "btn_txt": "Transfer" + }, + "account": { + "title_txt": "{{network}} Account" + }, + "login": { + "title_txt": "Login", + "subtitle_txt": "Please select {{networkName}} wallet to connect with this dApp:", + "download_txt": [ + "Don’t have a wallet?", + "Download Here" + ], + "modal_txt": "Waiting for confirmation from {{walletName}}" + }, + "selectToken": { + "title_txt": "Select token from:" + }, + "searchToken": { + "search_placeholder": "Token name, symbol, or address" + }, + "transactionLog": { + "withdraw_btn_txt": "withdraw" + }, + "accountAddress": { + "copied_msg_txt": "copied!" + }, + "logoutButton": { + "btn_txt": "Logout'" + }, + "maxButton": { + "btn_txt": "max" + }, + "backButton": { + "btn_txt": "Back" + }, + "walletButton": { + "btn_txt": "Account | {{address}}" + }, + "networkMenu": { + "to_txt": "to", + "from_txt": "from" + }, + "tokenBalance": { + "title_txt": "Available balance" + }, + "tokenInput": { + "input_placeholder_txt": "0.00" + }, + "transactionLogContainer": { + "title_txt": "Transaction log", + "overview_txt": "recent transactions", + "empty_msg_txt": "Transactions will appear here...", + "view_more_txt": "view more" + }, + "transactionSubmittedModal": { + "btn_txt": "view on {{explorer}}", + "body_txt": [ + "Your transaction has been sent to StarkNet!\n", + "We'll notify you once its status will be updated." + ] + }, + "transferProgressModal": { + "approval": { + "type": "Approval required", + "message": "Requesting permission to access your {{symbol}} funds" + }, + "deposit": { + "type": "Deposit in progress", + "message": "Depositing {{amount}} {{symbol}} to StarkNet" + }, + "initiateWithdraw": { + "type": "Initiate withdrawal", + "message": "Initiating withdrawal of {{amount} {{symbol}} from StarkNet" + }, + "waitForAccept": { + "type": "Transaction sent", + "message": "Waiting for transaction to be accepted on StarkNet" + }, + "withdraw": { + "type": "Withdrawal in Progress", + "message": "Withdrawing {{amount}} {{symbol}} to Ethereum" + }, + "error_title": "Transaction error" + } +} diff --git a/src/hooks/useStrings.js b/src/hooks/useStrings.js new file mode 100644 index 00000000..77f5d31d --- /dev/null +++ b/src/hooks/useStrings.js @@ -0,0 +1,5 @@ +import {useMemo} from 'react'; + +import strings from '../config/strings.json'; + +export const useStrings = () => useMemo(() => strings, []); diff --git a/src/hooks/useTransfer.js b/src/hooks/useTransfer.js index 665abdcb..a437cdc7 100644 --- a/src/hooks/useTransfer.js +++ b/src/hooks/useTransfer.js @@ -3,11 +3,18 @@ import {constants, stark} from 'starknet'; import {eth_deposit, eth_depositEth, eth_withdraw, starknet_initiateWithdraw} from '../api/bridge'; import {allowance, approve} from '../api/erc20'; +import { + useErrorModal, + useHideModal, + useProgressModal, + useTransactionSubmittedModal +} from '../components/Features/ModalProvider/ModalProvider.hooks'; import {useSelectedToken, useTransferData} from '../components/Features/Transfer/Transfer.hooks'; import {ActionType} from '../enums'; -import {useEthereumToken, useStarknetToken} from '../providers/TokensProvider'; -import {useStarknetWallet, useWallets} from '../providers/WalletsProvider'; -import {hashEquals, isEth, txHash} from '../utils'; +import {useEthereumToken, useStarknetToken, useTokens} from '../providers/TokensProvider'; +import {useTransactions} from '../providers/TransactionsProvider'; +import {useEthereumWallet, useStarknetWallet} from '../providers/WalletsProvider'; +import {evaluate, hashEquals, isEth, txHash} from '../utils'; import {eth_listenOnce, starknet_waitForTransaction} from '../utils/contract'; import { useEthBridgeContract, @@ -16,42 +23,32 @@ import { useTokenBridgeContract, useTokenContract } from './useContract'; - -const PROGRESS = { - approval: symbol => ({ - type: 'Approval Required', - message: `Requesting permission to access your ${symbol} funds` - }), - deposit: (amount, symbol) => ({ - type: 'Deposit in Progress', - message: `Depositing ${amount} ${symbol} to StarkNet` - }), - initiateWithdraw: (amount, symbol) => ({ - type: 'Initiate Withdrawal', - message: `Initiating withdrawal of ${amount} ${symbol}` - }), - waitForAccept: () => ({ - type: 'Transaction Received', - message: `Waiting for transaction to be accepted on StarkNet` - }), - waitForEvent: () => ({ - type: 'Accepted on StarkNet', - message: 'Waiting for message to be received on Ethereum' - }), - withdraw: (amount, symbol, recipient) => ({ - type: 'Withdrawal in Progress', - message: `Withdrawing ${amount} ${symbol} to ${recipient}` - }) -}; +import {useStrings} from './useStrings'; export const useTransfer = () => { + const { + transferProgressModal: { + error_title, + approval, + deposit, + initiateWithdraw, + waitForAccept, + withdraw + } + } = useStrings(); const [isLoading, setIsLoading] = useState(false); const [data, setData] = useState(null); const [progress, setProgress] = useState(null); const [error, setError] = useState(null); - const {account: ethereumAccount, chainId} = useWallets(); + const {account: ethereumAccount, chainId} = useEthereumWallet(); const {account: starknetAccount} = useStarknetWallet(); const {action} = useTransferData(); + const {addTransaction} = useTransactions(); + const {updateTokens} = useTokens(); + const showProgressModal = useProgressModal(); + const showErrorModal = useErrorModal(error_title); + const hideModal = useHideModal(); + const showTransactionSubmittedModal = useTransactionSubmittedModal(); const selectedToken = useSelectedToken(); const ethBridgeContract = useEthBridgeContract(); const messagingContract = useMessagingContract(); @@ -61,6 +58,46 @@ export const useTransfer = () => { const getStarknetToken = useStarknetToken(); const getEthereumTokenBridgeContract = useEthereumTokenBridgeContract(); + const PROGRESS = { + approval: symbol => ({ + type: approval.type, + message: evaluate(approval.message, {symbol}) + }), + deposit: (amount, symbol) => ({ + type: deposit.type, + message: evaluate(deposit.message, {amount, symbol}) + }), + initiateWithdraw: (amount, symbol) => ({ + type: initiateWithdraw.type, + message: evaluate(initiateWithdraw, {amount, symbol}) + }), + waitForAccept: () => ({ + type: waitForAccept.type, + message: waitForAccept.message + }), + withdraw: (amount, symbol) => ({ + type: withdraw.type, + message: evaluate(withdraw.message, {amount, symbol}) + }) + }; + + useEffect(() => { + resetState(); + }, [action]); + + useEffect(() => { + if (isLoading) { + progress && showProgressModal(progress.type, progress.message); + } else if (error) { + hideModal(); + showErrorModal(error.message); + } else if (data) { + showTransactionSubmittedModal(data); + addTransaction(data); + updateTokens(); + } + }, [progress, data, error, isLoading]); + const resetState = () => { setData(null); setError(null); @@ -92,17 +129,6 @@ export const useTransfer = () => { }); }; - const waitForLogMessageToL1 = () => { - return new Promise((resolve, reject) => { - eth_listenOnce(messagingContract, 'LogMessageToL1', (error, event) => { - if (error) { - reject(error); - } - resolve(event); - }); - }); - }; - const transferToStarknet = async (amount, depositHandler, bridgeContract, tokenContract) => { const {bridgeAddress, symbol, name} = selectedToken; resetState(); @@ -130,77 +156,89 @@ export const useTransfer = () => { setIsLoading(false); setData({ type: ActionType.TRANSFER_TO_STARKNET, + sender: ethereumAccount, + recipient: starknetAccount, name, symbol, amount, eth_hash: transactionHash, starknet_hash: starknetTxHash }); + return data; } catch (ex) { setIsLoading(false); setError(ex); + return Promise.reject(ex); } }; - const transferFromStarknet = async ( - amount, - bridgeContract, - tokenContract, - ethereumBridgeContract - ) => { - const {symbol} = selectedToken; + const transferFromStarknet = async (amount, bridgeContract, tokenContract) => { resetState(); try { + const {name, symbol} = selectedToken; setIsLoading(true); setProgress(PROGRESS.initiateWithdraw(amount, symbol)); - const initiateWithdrawTxResponse = await starknet_initiateWithdraw( + const {transaction_hash} = await starknet_initiateWithdraw( ethereumAccount, amount, bridgeContract, tokenContract ); - const waitForAcceptPromise = starknet_waitForTransaction( - initiateWithdrawTxResponse.transaction_hash - ); - const waitForMsgPromise = waitForLogMessageToL1(); setProgress(PROGRESS.waitForAccept()); - await waitForAcceptPromise; - setProgress(PROGRESS.waitForEvent()); - await waitForMsgPromise; - setProgress(PROGRESS.withdraw(amount, symbol, ethereumAccount)); - const withdrawReceipt = await eth_withdraw( - ethereumAccount, - amount, - ethereumBridgeContract, - tokenContract - ); + await starknet_waitForTransaction(transaction_hash); setIsLoading(false); - setProgress(null); - setData([{}, withdrawReceipt]); + setData({ + type: ActionType.TRANSFER_FROM_STARKNET, + sender: starknetAccount, + recipient: ethereumAccount, + name, + symbol, + amount, + starknet_hash: transaction_hash + }); + return data; } catch (ex) { setIsLoading(false); - setProgress(null); setError(ex); + return Promise.reject(ex); } }; + const finalizeTransferFromStarknet = useCallback( + async tx => { + resetState(); + try { + const {symbol, amount} = tx; + setIsLoading(true); + const ethereumToken = getEthereumToken(symbol); + let tokenBridgeContract; + if (isEth(ethereumToken)) { + tokenBridgeContract = ethBridgeContract; + } else { + tokenBridgeContract = getEthereumTokenBridgeContract(ethereumToken.bridgeAddress); + } + setProgress(PROGRESS.withdraw(amount, symbol)); + const {transactionHash} = await eth_withdraw(ethereumAccount, amount, tokenBridgeContract); + setIsLoading(false); + setData({...tx, eth_hash: transactionHash}); + return data; + } catch (ex) { + setIsLoading(false); + setError(ex); + return Promise.reject(ex); + } + }, + [ethereumAccount] + ); + const transferTokenFromStarknet = useCallback( async amount => { - const {tokenAddress, bridgeAddress, symbol} = selectedToken; - const ethereumToken = getEthereumToken(symbol); + const {tokenAddress, bridgeAddress} = selectedToken; const tokenContract = getTokenContract(tokenAddress); const tokenBridgeContract = getTokenBridgeContract(bridgeAddress); - const ethereumTokenBridgeContract = getEthereumTokenBridgeContract( - ethereumToken.bridgeAddress - ); - return await transferFromStarknet( - amount, - tokenBridgeContract, - tokenContract, - ethereumTokenBridgeContract - ); + return await transferFromStarknet(amount, tokenBridgeContract, tokenContract); }, - [ethereumAccount, starknetAccount] + [ethereumAccount, starknetAccount, selectedToken] ); const transferTokenToStarknet = useCallback( @@ -216,16 +254,10 @@ export const useTransfer = () => { [ethereumAccount, starknetAccount, selectedToken] ); - useEffect(() => { - resetState(); - }, [action]); - return { transferTokenToStarknet, transferTokenFromStarknet, - isLoading, - progress, - error, - data + finalizeTransferFromStarknet, + isLoading }; }; diff --git a/src/providers/TransactionsProvider/TransactionsProvider.js b/src/providers/TransactionsProvider/TransactionsProvider.js index 10cb803c..9742cbf4 100644 --- a/src/providers/TransactionsProvider/TransactionsProvider.js +++ b/src/providers/TransactionsProvider/TransactionsProvider.js @@ -2,6 +2,7 @@ import {getStarknet} from '@argent/get-starknet'; import PropTypes from 'prop-types'; import React, {useEffect, useReducer} from 'react'; import useDeepCompareEffect from 'use-deep-compare-effect'; +import {v4 as uuidv4} from 'uuid'; import {LOCAL_STORAGE_TXS_KEY} from '../../constants'; import {TransactionStatus} from '../../enums'; @@ -68,7 +69,7 @@ export const TransactionsProvider = ({children}) => { const addTransaction = tx => { dispatch({ type: actions.ADD_TRANSACTION, - payload: {...tx, timestamp: new Date().getTime()} + payload: {...tx, id: uuidv4(), timestamp: new Date().getTime()} }); }; diff --git a/src/providers/TransactionsProvider/transactions-hooks.js b/src/providers/TransactionsProvider/transactions-hooks.js index 67c17bc8..6e390436 100644 --- a/src/providers/TransactionsProvider/transactions-hooks.js +++ b/src/providers/TransactionsProvider/transactions-hooks.js @@ -1,4 +1,4 @@ -import {useContext, useEffect, useState} from 'react'; +import {useContext, useEffect, useMemo, useState} from 'react'; import {TransactionsContext} from './transactions-context'; @@ -15,3 +15,11 @@ export const useTransaction = hash => { }, [transactions, hash]); return transaction; }; + +export const useAccountTransactions = account => { + const {transactions} = useTransactions(); + return useMemo( + () => transactions.filter(tx => tx.sender === account || tx.recipient === account), + [account] + ); +}; diff --git a/src/utils/number.js b/src/utils/number.js index 397abf61..c3651f9c 100644 --- a/src/utils/number.js +++ b/src/utils/number.js @@ -3,37 +3,42 @@ import {number, uint256} from 'starknet'; import {web3} from '../web3'; const {uint256ToBN, bnToUint256} = uint256; -const {toBN, toHex} = number; +const {toBN} = number; -const TEN = toBN(10); -export const DEFAULT_DECIMALS = 18; +const TEN = 10; +const DEFAULT_DECIMALS = 18; +const UNIT_MAP = {}; -export const powerOf = (decimals = DEFAULT_DECIMALS) => TEN.pow(toBN(decimals)); +for (let key in web3.utils.unitMap) { + UNIT_MAP[web3.utils.unitMap[key]] = key; +} -export const toDecimals = (value, decimals) => toBN(value).mul(powerOf(decimals)); - -export const fromDecimals = (value, decimals) => toBN(value).div(powerOf(decimals)); +export const parseToDecimals = (value, decimals = DEFAULT_DECIMALS) => { + return web3.utils.toWei(value, UNIT_MAP[Math.pow(TEN, decimals)]); +}; -export const decimalsToHexString = decimals => toHex(toBN(decimals)); +export const parseFromDecimals = (value, decimals = DEFAULT_DECIMALS) => { + return Number(web3.utils.fromWei(value, UNIT_MAP[Math.pow(TEN, decimals)])); +}; -export const starknet_fromFelt = value => toBN(value).toNumber(); +export const parseFromFelt = value => { + return toBN(value).toNumber(); +}; -export const starknet_toFelt = value => toBN(value).toString(); +export const parseToFelt = value => { + return toBN(value).toString(); +}; -export const starknet_toUint256 = (value, decimals) => { - const bn = toDecimals(value, decimals); - const uint256 = bnToUint256(bn); +export const parseToUint256 = (value, decimals = DEFAULT_DECIMALS) => { + const decimalsValue = parseToDecimals(value, decimals); + const uint256 = bnToUint256(toBN(decimalsValue)); return { type: 'struct', ...uint256 }; }; -export const starknet_fromUint256 = (value, decimals) => { +export const parseFromUint256 = (value, decimals = DEFAULT_DECIMALS) => { const bnString = uint256ToBN(value).toString(); - return fromDecimals(bnString, decimals).toNumber(); + return parseFromDecimals(bnString, decimals); }; - -export const eth_toWei = value => web3.utils.toWei(value, 'ether'); - -export const eth_fromWei = value => Number(web3.utils.fromWei(value)); diff --git a/yarn.lock b/yarn.lock index c986aad7..e2364dba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -113,10 +113,10 @@ "@web3-react/types" "^6.0.7" tiny-warning "^1.0.3" -"@argent/get-starknet@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@argent/get-starknet/-/get-starknet-0.1.3.tgz#c4f4599f5701c35d7ea1a20c16710f57daa3cd4d" - integrity sha512-OqnklHJlFFYx4vbGH6z9Xqchhw/Ryb7xV9L1XlJ3V+lWSjCmv0FsFgNH9J9WgEePem0gc28fFTk+Vpt5M5Xl7g== +"@argent/get-starknet@^0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@argent/get-starknet/-/get-starknet-0.1.4.tgz#e237a05f5e547795f8a86ae286b75cb2b4aa5883" + integrity sha512-owF5nPajqjPGhirI+FyK8UbXwkzif646Wymwee8gsz/uaftc6vCh+HkKUYLmD7Y3qLnEXzHykc6VnwLHk+Velw== "@babel/code-frame@7.10.4": version "7.10.4" @@ -16352,10 +16352,10 @@ use-deep-compare-effect@^1.8.1: "@babel/runtime" "^7.12.5" dequal "^2.0.2" -use-wallet@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/use-wallet/-/use-wallet-0.13.1.tgz#5239d5163c235681c0440557ceb238290bc2e757" - integrity sha512-BMjKTOSIdhH/ouPTwNoVIWMIdLHK8rPdn8ERcqpV6ZcUvXni8eC2pvD2Ntk3ym6WPEmCI/xrv9hX849ak+aHug== +use-wallet@^0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/use-wallet/-/use-wallet-0.13.4.tgz#78c8facfdd910a03719ef808043534a8f367c20a" + integrity sha512-C5bBobwAKi/SbIX+JzHkxChqU1A2tIcx8fQPoL0gzTGYkqvH97EchnT8yRQGMl2RiICua2nGMLrfa42Yexzs+Q== dependencies: "@aragon/provided-connector" "^6.0.8" "@typescript-eslint/parser" "^4.1.0" @@ -16475,7 +16475,7 @@ uuid@^3.3.2, uuid@^3.4.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^8.3.0: +uuid@^8.3.0, uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== @@ -17136,7 +17136,7 @@ web3@1.2.11: web3-shh "1.2.11" web3-utils "1.2.11" -web3@^1.6.0: +web3@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/web3/-/web3-1.6.1.tgz#c9e68fe7b3073adddf35393441f950ec69b92735" integrity sha512-c299lLiyb2/WOcxh7TinwvbATaMmrgNIeAzbLbmOKHI0LcwyfsB1eu2ReOIrfrCYDYRW2KAjYr7J7gHawqDNPQ== From 4545357fee1deb0c8c8f0e380aea741e146ae4bf Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Wed, 22 Dec 2021 10:01:21 +0200 Subject: [PATCH 029/211] fix: add transaction [skip ci] --- .../TransactionLogContainer.strings.js | 1 - src/hooks/useTransfer.js | 57 +++++++++++-------- .../transactions-reducer.js | 7 +++ 3 files changed, 41 insertions(+), 24 deletions(-) diff --git a/src/components/UI/TransactionLogContainer/TransactionLogContainer.strings.js b/src/components/UI/TransactionLogContainer/TransactionLogContainer.strings.js index d38ada52..cf7f554d 100644 --- a/src/components/UI/TransactionLogContainer/TransactionLogContainer.strings.js +++ b/src/components/UI/TransactionLogContainer/TransactionLogContainer.strings.js @@ -4,7 +4,6 @@ const { transactionLogContainer: {title_txt, overview_txt, empty_msg_txt, view_more_txt} } = strings; -debugger; export const TITLE_TXT = title_txt; export const OVERVIEW_TXT = overview_txt; export const EMPTY_MSG_TXT = empty_msg_txt; diff --git a/src/hooks/useTransfer.js b/src/hooks/useTransfer.js index a437cdc7..86180f12 100644 --- a/src/hooks/useTransfer.js +++ b/src/hooks/useTransfer.js @@ -57,28 +57,39 @@ export const useTransfer = () => { const getEthereumToken = useEthereumToken(); const getStarknetToken = useStarknetToken(); const getEthereumTokenBridgeContract = useEthereumTokenBridgeContract(); - - const PROGRESS = { - approval: symbol => ({ - type: approval.type, - message: evaluate(approval.message, {symbol}) - }), - deposit: (amount, symbol) => ({ - type: deposit.type, - message: evaluate(deposit.message, {amount, symbol}) - }), - initiateWithdraw: (amount, symbol) => ({ - type: initiateWithdraw.type, - message: evaluate(initiateWithdraw, {amount, symbol}) - }), + const progressOptions = { + approval: symbol => { + const message = evaluate(approval.message, {symbol}); + return { + type: approval.type, + message + } + }, + deposit: (amount, symbol) => { + const message = evaluate(deposit.message, {amount, symbol}); + return { + type: deposit.type, + message + } + }, + initiateWithdraw: (amount, symbol) => { + const message = evaluate(initiateWithdraw, {amount, symbol}); + return { + type: initiateWithdraw.type, + message + } + }, waitForAccept: () => ({ type: waitForAccept.type, message: waitForAccept.message }), - withdraw: (amount, symbol) => ({ - type: withdraw.type, - message: evaluate(withdraw.message, {amount, symbol}) - }) + withdraw: (amount, symbol) => { + const message = evaluate(withdraw.message, {amount, symbol}); + return { + type: withdraw.type, + message + } + } }; useEffect(() => { @@ -135,13 +146,13 @@ export const useTransfer = () => { try { setIsLoading(true); if (!isEth(symbol)) { - setProgress(PROGRESS.approval(symbol)); + setProgress(progressOptions.approval(symbol)); const allow = await allowance(ethereumAccount, bridgeAddress[chainId], tokenContract); if (allow < amount) { await approve(bridgeAddress[chainId], constants.MASK_250, tokenContract, ethereumAccount); } } - setProgress(PROGRESS.deposit(amount, symbol)); + setProgress(progressOptions.deposit(amount, symbol)); const depositPromise = depositHandler( starknetAccount, amount, @@ -177,14 +188,14 @@ export const useTransfer = () => { try { const {name, symbol} = selectedToken; setIsLoading(true); - setProgress(PROGRESS.initiateWithdraw(amount, symbol)); + setProgress(progressOptions.initiateWithdraw(amount, symbol)); const {transaction_hash} = await starknet_initiateWithdraw( ethereumAccount, amount, bridgeContract, tokenContract ); - setProgress(PROGRESS.waitForAccept()); + setProgress(progressOptions.waitForAccept()); await starknet_waitForTransaction(transaction_hash); setIsLoading(false); setData({ @@ -217,7 +228,7 @@ export const useTransfer = () => { } else { tokenBridgeContract = getEthereumTokenBridgeContract(ethereumToken.bridgeAddress); } - setProgress(PROGRESS.withdraw(amount, symbol)); + setProgress(progressOptions.withdraw(amount, symbol)); const {transactionHash} = await eth_withdraw(ethereumAccount, amount, tokenBridgeContract); setIsLoading(false); setData({...tx, eth_hash: transactionHash}); diff --git a/src/providers/TransactionsProvider/transactions-reducer.js b/src/providers/TransactionsProvider/transactions-reducer.js index 5343d936..ea2abd53 100644 --- a/src/providers/TransactionsProvider/transactions-reducer.js +++ b/src/providers/TransactionsProvider/transactions-reducer.js @@ -11,6 +11,13 @@ export const reducer = (state, action) => { return action.payload; case actions.ADD_TRANSACTION: + const tx = action.payload; + const index = state.findIndex(t => t.id === tx.id); + if (index > -1) { + const txs = [...state]; + txs[index] = tx; + return txs; + } return [action.payload, ...state]; default: From b60214a3c7fbf8cf66962433cf7a2afb64f3c108 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Wed, 22 Dec 2021 10:13:06 +0200 Subject: [PATCH 030/211] fix: footer txt key name [skip ci] --- src/components/Containers/Footer/Footer.js | 4 ++-- .../Containers/Footer/Footer.strings.js | 4 ++-- src/components/Features/Account/Account.js | 3 +-- .../Features/TransactionLog/TransactionLog.js | 2 +- src/config/strings.json | 7 ++----- src/hooks/useTransfer.js | 16 ++++++++-------- .../TransactionsProvider/transactions-reducer.js | 3 ++- 7 files changed, 18 insertions(+), 21 deletions(-) diff --git a/src/components/Containers/Footer/Footer.js b/src/components/Containers/Footer/Footer.js index e53865ce..410feb66 100644 --- a/src/components/Containers/Footer/Footer.js +++ b/src/components/Containers/Footer/Footer.js @@ -3,12 +3,12 @@ import React from 'react'; import {ReactComponent as StarkWareLogo} from '../../../assets/svg/starkware.svg'; import {toClasses} from '../../../utils'; import styles from './Footer.module.scss'; -import {FOOTER_TXT} from './Footer.strings'; +import {RIGHTS_TXT} from './Footer.strings'; export const Footer = () => ( <footer className={styles.footer}> <div className={toClasses(styles.copyright, 'row')}> - <StarkWareLogo /> {FOOTER_TXT} + <StarkWareLogo /> {RIGHTS_TXT} </div> </footer> ); diff --git a/src/components/Containers/Footer/Footer.strings.js b/src/components/Containers/Footer/Footer.strings.js index 08399395..a2d20a2a 100644 --- a/src/components/Containers/Footer/Footer.strings.js +++ b/src/components/Containers/Footer/Footer.strings.js @@ -1,7 +1,7 @@ import strings from '../../../config/strings.json'; const { - footer: {footer_txt} + footer: {rights_txt} } = strings; -export const FOOTER_TXT = footer_txt; +export const RIGHTS_TXT = rights_txt; diff --git a/src/components/Features/Account/Account.js b/src/components/Features/Account/Account.js index 816862d5..cdb7c3bf 100644 --- a/src/components/Features/Account/Account.js +++ b/src/components/Features/Account/Account.js @@ -1,10 +1,9 @@ import React from 'react'; import {LINKS} from '../../../constants'; -import {useStrings, useTransfer} from '../../../hooks'; +import {useTransfer} from '../../../hooks'; import {useAccountTransactions} from '../../../providers/TransactionsProvider'; import {useWallets} from '../../../providers/WalletsProvider'; -import {evaluate} from '../../../utils'; import { AccountAddress, BackButton, diff --git a/src/components/Features/TransactionLog/TransactionLog.js b/src/components/Features/TransactionLog/TransactionLog.js index 4bc30947..aa1138e3 100644 --- a/src/components/Features/TransactionLog/TransactionLog.js +++ b/src/components/Features/TransactionLog/TransactionLog.js @@ -3,7 +3,7 @@ import React, {useEffect, useState} from 'react'; import {LINKS} from '../../../constants'; import {TransactionStatus} from '../../../enums'; -import {useColors, useStrings} from '../../../hooks'; +import {useColors} from '../../../hooks'; import {useWallets} from '../../../providers/WalletsProvider'; import {get24Time, getDate} from '../../../utils'; import {Button, CryptoLogo} from '../../UI'; diff --git a/src/config/strings.json b/src/config/strings.json index e5332f00..fa3ed26a 100644 --- a/src/config/strings.json +++ b/src/config/strings.json @@ -3,7 +3,7 @@ "chain_txt": "{{chainName}} testnet" }, "footer": { - "footer_txt": "© 2022 StarkWare Industries Ltd. All Rights Reserved" + "rights_txt": "© 2022 StarkWare Industries Ltd. All Rights Reserved" }, "transfer": { "insufficient_balance_error_msg": "Insufficient balance" @@ -17,10 +17,7 @@ "login": { "title_txt": "Login", "subtitle_txt": "Please select {{networkName}} wallet to connect with this dApp:", - "download_txt": [ - "Don’t have a wallet?", - "Download Here" - ], + "download_txt": ["Don’t have a wallet?", "Download Here"], "modal_txt": "Waiting for confirmation from {{walletName}}" }, "selectToken": { diff --git a/src/hooks/useTransfer.js b/src/hooks/useTransfer.js index 86180f12..b0087a80 100644 --- a/src/hooks/useTransfer.js +++ b/src/hooks/useTransfer.js @@ -59,25 +59,25 @@ export const useTransfer = () => { const getEthereumTokenBridgeContract = useEthereumTokenBridgeContract(); const progressOptions = { approval: symbol => { - const message = evaluate(approval.message, {symbol}); - return { - type: approval.type, - message - } + const message = evaluate(approval.message, {symbol}); + return { + type: approval.type, + message + }; }, deposit: (amount, symbol) => { const message = evaluate(deposit.message, {amount, symbol}); return { type: deposit.type, message - } + }; }, initiateWithdraw: (amount, symbol) => { const message = evaluate(initiateWithdraw, {amount, symbol}); return { type: initiateWithdraw.type, message - } + }; }, waitForAccept: () => ({ type: waitForAccept.type, @@ -88,7 +88,7 @@ export const useTransfer = () => { return { type: withdraw.type, message - } + }; } }; diff --git a/src/providers/TransactionsProvider/transactions-reducer.js b/src/providers/TransactionsProvider/transactions-reducer.js index ea2abd53..6837093a 100644 --- a/src/providers/TransactionsProvider/transactions-reducer.js +++ b/src/providers/TransactionsProvider/transactions-reducer.js @@ -10,7 +10,7 @@ export const reducer = (state, action) => { case actions.SET_TRANSACTIONS: return action.payload; - case actions.ADD_TRANSACTION: + case actions.ADD_TRANSACTION: { const tx = action.payload; const index = state.findIndex(t => t.id === tx.id); if (index > -1) { @@ -19,6 +19,7 @@ export const reducer = (state, action) => { return txs; } return [action.payload, ...state]; + } default: return state; From a060afe9e5bb8c94fd3c639435c1f9db34a2c3c2 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Thu, 23 Dec 2021 17:23:00 +0200 Subject: [PATCH 031/211] feat: transactions toasts [skip ci] (#4) --- .gitignore | 2 + package.json | 6 +- src/components/Containers/Footer/Footer.js | 6 +- src/components/Features/Bridge/Bridge.js | 9 +- .../Features/Login/Login.constants.js | 1 + src/components/Features/Login/Login.js | 65 ++++++--- .../ModalProvider/ModalProvider.hooks.js | 6 +- .../Features/ModalProvider/ModalProvider.js | 2 +- .../Features/ToastProvider/ToastProvider.js | 138 ++++++++++++++++++ .../ToastProvider/ToastProvider.module.scss | 5 + .../Features/TransactionLog/TransactionLog.js | 21 +-- .../TransactionLog/TransactionLog.strings.js | 4 +- src/components/Features/Transfer/Transfer.js | 7 +- .../Features/Transfer/Transfer.module.scss | 2 +- src/components/Features/index.js | 1 + src/components/UI/Button/Button.module.scss | 2 +- src/components/UI/Loading/Loading.enums.js | 3 +- .../UI/Modal/Modal/Modal.module.scss | 3 +- .../ProgressModal/ProgressModal.js | 6 +- .../ProgressModal/ProgressModal.module.scss | 0 .../TransactionSubmittedModal.constants.js | 2 +- .../TransactionSubmittedModal.js | 75 ++++++++++ .../TransactionSubmittedModal.strings.js | 4 +- src/components/UI/Modal/index.js | 7 + .../PendingTransactionToast.js | 29 ++++ .../PendingTransactionToast.module.scss | 3 + .../PendingTransactionToast.strings.js | 8 + .../UI/Toast/ToastBody/ToastBody.js | 17 +++ .../UI/Toast/ToastBody/ToastBody.module.scss | 11 ++ .../UI/Toast/ToastButton/ToastButton.js | 26 ++++ .../Toast/ToastButton/ToastButton.module.scss | 16 ++ .../UI/Toast/ToastHeader/ToastHeader.js | 24 +++ .../Toast/ToastHeader/ToastHeader.module.scss | 20 +++ .../UI/Toast/ToastSeparator/ToastSeparator.js | 7 + .../ToastSeparator/ToastSeparator.module.scss | 9 ++ .../WithdrawalTransactionToast.js | 60 ++++++++ .../WithdrawalTransactionToast.module.scss | 29 ++++ .../WithdrawalTransactionToast.strings.js | 10 ++ src/components/UI/Toast/index.js | 6 + .../TransactionSubmittedModal.js | 73 --------- src/components/UI/index.js | 9 +- src/config/config.json | 2 +- src/config/strings.json | 24 ++- src/hooks/index.js | 1 + src/hooks/useConfig.js | 5 + src/hooks/useTransfer.js | 14 +- .../BlockHashProvider/BlockHashProvider.js | 7 +- .../TokensProvider/TokensProvider.js | 4 +- .../TransactionsProvider.js | 16 +- .../transactions-hooks.js | 2 +- .../transactions-reducer.js | 4 +- .../WalletProvider/WalletProvider.js | 38 +++-- .../WalletsProvider/WalletsProvider.js | 4 +- src/styles/colors.module.scss | 5 +- src/utils/date.js | 4 + src/utils/token.js | 1 + yarn.lock | 72 +++++---- 57 files changed, 723 insertions(+), 214 deletions(-) create mode 100644 src/components/Features/ToastProvider/ToastProvider.js create mode 100644 src/components/Features/ToastProvider/ToastProvider.module.scss rename src/components/UI/{ => Modal}/ProgressModal/ProgressModal.js (79%) rename src/components/UI/{ => Modal}/ProgressModal/ProgressModal.module.scss (100%) rename src/components/UI/{ => Modal}/TransactionSubmittedModal/TransactionSubmittedModal.constants.js (80%) create mode 100644 src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js rename src/components/UI/{ => Modal}/TransactionSubmittedModal/TransactionSubmittedModal.strings.js (64%) create mode 100644 src/components/UI/Modal/index.js create mode 100644 src/components/UI/Toast/PendingTransactionToast/PendingTransactionToast.js create mode 100644 src/components/UI/Toast/PendingTransactionToast/PendingTransactionToast.module.scss create mode 100644 src/components/UI/Toast/PendingTransactionToast/PendingTransactionToast.strings.js create mode 100644 src/components/UI/Toast/ToastBody/ToastBody.js create mode 100644 src/components/UI/Toast/ToastBody/ToastBody.module.scss create mode 100644 src/components/UI/Toast/ToastButton/ToastButton.js create mode 100644 src/components/UI/Toast/ToastButton/ToastButton.module.scss create mode 100644 src/components/UI/Toast/ToastHeader/ToastHeader.js create mode 100644 src/components/UI/Toast/ToastHeader/ToastHeader.module.scss create mode 100644 src/components/UI/Toast/ToastSeparator/ToastSeparator.js create mode 100644 src/components/UI/Toast/ToastSeparator/ToastSeparator.module.scss create mode 100644 src/components/UI/Toast/WithdrawalTransactionToast/WithdrawalTransactionToast.js create mode 100644 src/components/UI/Toast/WithdrawalTransactionToast/WithdrawalTransactionToast.module.scss create mode 100644 src/components/UI/Toast/WithdrawalTransactionToast/WithdrawalTransactionToast.strings.js create mode 100644 src/components/UI/Toast/index.js delete mode 100644 src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.js create mode 100644 src/hooks/useConfig.js diff --git a/.gitignore b/.gitignore index 03629a48..f77a5133 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,5 @@ npm-debug.log* yarn-debug.log* yarn-error.log* .idea + +config diff --git a/package.json b/package.json index 6ba65615..8405e9f6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starknet-bridge", - "version": "0.0.2-0", + "version": "0.0.1-0", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", @@ -46,11 +46,13 @@ }, "dependencies": { "@argent/get-starknet": "^0.1.4", + "@headlessui/react": "^1.4.2", "@metamask/onboarding": "^1.0.1", "@reduxjs/toolkit": "^1.6.2", "js-logger": "^1.6.1", "react": "^17.0.2", "react-dom": "^17.0.2", + "react-hot-toast": "^2.1.1", "react-redux": "^7.2.6", "react-scripts": "4.0.3", "starknet": "^2.5.0", @@ -68,7 +70,7 @@ "husky": "^7.0.1", "lint-staged": "^11.0.1", "node-sass": "^6.0.1", - "prettier": "^2.3.2", + "prettier": "^2.5.1", "prop-types": "^15.7.2", "sass-loader": "^12.1.0", "standard-version": "^9.3.1" diff --git a/src/components/Containers/Footer/Footer.js b/src/components/Containers/Footer/Footer.js index 410feb66..85a0a686 100644 --- a/src/components/Containers/Footer/Footer.js +++ b/src/components/Containers/Footer/Footer.js @@ -1,14 +1,12 @@ import React from 'react'; -import {ReactComponent as StarkWareLogo} from '../../../assets/svg/starkware.svg'; -import {toClasses} from '../../../utils'; import styles from './Footer.module.scss'; import {RIGHTS_TXT} from './Footer.strings'; export const Footer = () => ( <footer className={styles.footer}> - <div className={toClasses(styles.copyright, 'row')}> - <StarkWareLogo /> {RIGHTS_TXT} + <div className={styles.copyright}> + <center>{RIGHTS_TXT}</center> </div> </footer> ); diff --git a/src/components/Features/Bridge/Bridge.js b/src/components/Features/Bridge/Bridge.js index 47c77794..0fa14160 100644 --- a/src/components/Features/Bridge/Bridge.js +++ b/src/components/Features/Bridge/Bridge.js @@ -1,6 +1,6 @@ import React from 'react'; -import {Account, SelectToken, Transfer} from '..'; +import {Account, SelectToken, ToastProvider, Transfer} from '..'; import {MenuType} from '../../../enums'; import {useBridgeData} from './Bridge.hooks'; import styles from './Bridge.module.scss'; @@ -19,5 +19,10 @@ export const Bridge = () => { } }; - return <div className={styles.bridge}>{renderMenu()}</div>; + return ( + <div className={styles.bridge}> + <ToastProvider /> + {renderMenu()} + </div> + ); }; diff --git a/src/components/Features/Login/Login.constants.js b/src/components/Features/Login/Login.constants.js index 21a04e58..1be8ce1f 100644 --- a/src/components/Features/Login/Login.constants.js +++ b/src/components/Features/Login/Login.constants.js @@ -1 +1,2 @@ export const MODAL_TIMEOUT_DURATION = 2000; +export const AUTO_CONNECT_TIMEOUT_DURATION = 100; diff --git a/src/components/Features/Login/Login.js b/src/components/Features/Login/Login.js index bed73935..ccaa8fe8 100644 --- a/src/components/Features/Login/Login.js +++ b/src/components/Features/Login/Login.js @@ -2,16 +2,18 @@ import React, {useEffect, useRef, useState} from 'react'; import {ChainUnsupportedError} from 'use-wallet'; import {NetworkType, toChainName, WalletStatus, WalletType} from '../../../enums'; -import {useWalletHandlerProvider} from '../../../hooks'; +import {useConfig, useWalletHandlerProvider} from '../../../hooks'; import {useEthereumWallet, useStarknetWallet, useWallets} from '../../../providers/WalletsProvider'; import {capitalize, toClasses} from '../../../utils'; -import {Menu, WalletLogin} from '../../UI'; +import {Loading, Menu, WalletLogin} from '../../UI'; +import {LoadingSize} from '../../UI/Loading/Loading.enums'; import {useHideModal, useProgressModal} from '../ModalProvider/ModalProvider.hooks'; -import {MODAL_TIMEOUT_DURATION} from './Login.constants'; +import {AUTO_CONNECT_TIMEOUT_DURATION, MODAL_TIMEOUT_DURATION} from './Login.constants'; import styles from './Login.module.scss'; import {DOWNLOAD_TEXT, MODAL_TXT, SUBTITLE_TXT, TITLE_TXT} from './Login.strings'; export const Login = () => { + const {autoConnect} = useConfig(); const [selectedWalletName, setSelectedWalletName] = useState(''); const [errorMsg, setErrorMsg] = useState(''); const [walletType, setWalletType] = useState(WalletType.ETHEREUM); @@ -23,6 +25,17 @@ export const Login = () => { const {connectWallet: connectEthereumWallet, isConnected} = useEthereumWallet(); const {connectWallet: connectStarknetWallet} = useStarknetWallet(); + useEffect(() => { + let timeoutId; + if (autoConnect) { + const handlers = getWalletHandlers(walletType); + if (handlers.length > 0) { + timeoutId = setTimeout(() => onWalletConnect(handlers[0]), AUTO_CONNECT_TIMEOUT_DURATION); + } + } + return () => clearTimeout(timeoutId); + }, [walletType, getWalletHandlers]); + useEffect(() => { isConnected && setWalletType(WalletType.STARKNET); }, [isConnected]); @@ -112,25 +125,33 @@ export const Login = () => { }; return ( - <Menu> - <div className={toClasses(styles.login, 'center')}> - <div className={styles.content}> - <div className={styles.title}>{TITLE_TXT}</div> - <p> - {SUBTITLE_TXT( - walletType === WalletType.ETHEREUM - ? NetworkType.ETHEREUM.name - : NetworkType.STARKNET.name - )} - </p> - <div className={styles.container}>{renderLoginWallets()}</div> - {errorMsg && <div className={styles.errorMsg}>{errorMsg}</div>} - </div> - <div className={styles.separator} /> - <div className={styles.download}> - {DOWNLOAD_TEXT[0]} <span onClick={onDownloadClick}>{DOWNLOAD_TEXT[1]}</span> + <> + {autoConnect ? ( + <div className="center"> + <Loading size={LoadingSize.XX_LARGE} /> </div> - </div> - </Menu> + ) : ( + <Menu> + <div className={toClasses(styles.login, 'center')}> + <div className={styles.content}> + <div className={styles.title}>{TITLE_TXT}</div> + <p> + {SUBTITLE_TXT( + walletType === WalletType.ETHEREUM + ? NetworkType.ETHEREUM.name + : NetworkType.STARKNET.name + )} + </p> + <div className={styles.container}>{renderLoginWallets()}</div> + {errorMsg && <div className={styles.errorMsg}>{errorMsg}</div>} + </div> + <div className={styles.separator} /> + <div className={styles.download}> + {DOWNLOAD_TEXT[0]} <span onClick={onDownloadClick}>{DOWNLOAD_TEXT[1]}</span> + </div> + </div> + </Menu> + )} + </> ); }; diff --git a/src/components/Features/ModalProvider/ModalProvider.hooks.js b/src/components/Features/ModalProvider/ModalProvider.hooks.js index c71e6b03..3c97dcad 100644 --- a/src/components/Features/ModalProvider/ModalProvider.hooks.js +++ b/src/components/Features/ModalProvider/ModalProvider.hooks.js @@ -6,7 +6,7 @@ import {selectModal} from './ModalProvider.selectors'; import {hideModalAction, showModalAction} from './ModalProvider.slice'; export const useModal = () => ({ - modal: useSelector(selectModal) + ...useSelector(selectModal) }); export const useHideModal = () => { @@ -22,7 +22,7 @@ export const useProgressModal = () => { (title, message, type = ModalType.INFO) => { dispatch( showModalAction({ - componentPath: 'UI/ProgressModal/ProgressModal', + componentPath: 'UI/Modal/ProgressModal/ProgressModal', componentProps: { message }, @@ -41,7 +41,7 @@ export const useTransactionSubmittedModal = () => { tx => { dispatch( showModalAction({ - componentPath: 'UI/TransactionSubmittedModal/TransactionSubmittedModal', + componentPath: 'UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal', componentProps: { tx }, diff --git a/src/components/Features/ModalProvider/ModalProvider.js b/src/components/Features/ModalProvider/ModalProvider.js index 83a43a20..b59d7da4 100644 --- a/src/components/Features/ModalProvider/ModalProvider.js +++ b/src/components/Features/ModalProvider/ModalProvider.js @@ -5,7 +5,7 @@ import {LoadingSize} from '../../UI/Loading/Loading.enums'; import {useHideModal, useModal} from './ModalProvider.hooks'; export const ModalProvider = () => { - const {modal} = useModal(); + const modal = useModal(); const handleOnClose = useHideModal(); const CustomComponent = lazy(() => import(`../../${modal.componentPath}`)); diff --git a/src/components/Features/ToastProvider/ToastProvider.js b/src/components/Features/ToastProvider/ToastProvider.js new file mode 100644 index 00000000..c3230d3e --- /dev/null +++ b/src/components/Features/ToastProvider/ToastProvider.js @@ -0,0 +1,138 @@ +import PropTypes from 'prop-types'; +import React, {useRef} from 'react'; +import {toast, Toaster} from 'react-hot-toast'; +import useDeepCompareEffect from 'use-deep-compare-effect'; + +import {ActionType, NetworkType, TransactionStatus} from '../../../enums'; +import {usePrevious, useTransfer} from '../../../hooks'; +import {useTransactions} from '../../../providers/TransactionsProvider'; +import {getFullTime} from '../../../utils'; +import {PendingTransactionToast, ToastBody, WithdrawalTransactionToast} from '../../UI'; +import styles from './ToastProvider.module.scss'; + +export const ToastProvider = () => { + const {transactions} = useTransactions(); + const prevTransactions = usePrevious(transactions); + const toastsMap = useRef({}); + const toastsDismissed = useRef({}); + const {finalizeTransferFromStarknet} = useTransfer(); + const pendingStatuses = [TransactionStatus.NOT_RECEIVED, TransactionStatus.RECEIVED]; + const consumedStatus = [TransactionStatus.PENDING, TransactionStatus.ACCEPTED_ON_L2]; + + useDeepCompareEffect(() => { + transactions.forEach(tx => { + const prevTx = prevTransactions?.find(prevTx => prevTx.id === tx.id); + handleToast(tx, prevTx); + }); + }, [transactions]); + + const handleToast = (tx, prevTx) => { + if (tx.type === ActionType.TRANSFER_TO_STARKNET) { + handleTransferToStarknetToast(tx, prevTx); + } else { + handleTransferFromStarknetToast(tx); + } + }; + + const handleTransferToStarknetToast = (tx, prevTx) => { + const isChanged = prevTx && tx.status !== prevTx.status; + if (pendingStatuses.includes(tx.status)) { + showPendingTransactionToast(tx); + } else if (isChanged && consumedStatus.includes(tx.status)) { + showConsumedTransactionToast(tx); + } + }; + + const handleTransferFromStarknetToast = tx => { + if (pendingStatuses.includes(tx.status)) { + showPendingTransactionToast(tx); + } else if (!tx.eth_hash && tx.status === TransactionStatus.ACCEPTED_ON_L1) { + showWithdrawalToast(tx); + } + }; + + const showPendingTransactionToast = tx => { + let toastId = getToastId(tx); + if (!toastId) { + toastId = toast.loading(renderPendingTransactionToast(tx, true)); + toastsMap.current[tx.id] = toastId; + } + }; + + const showConsumedTransactionToast = tx => { + const toastId = getToastId(tx); + toastsMap.current[tx.id] = toast.success(renderPendingTransactionToast(tx), { + id: toastId + }); + }; + + const showWithdrawalToast = tx => { + const toastId = getToastId(tx); + if (!toastId && !isToastDismissed(toastId)) { + toastsMap.current[tx.id] = toast.custom(t => renderWithdrawalTransactionToast(t, tx), { + id: toastId + }); + } + }; + + const renderPendingTransactionToast = (tx, isLoading) => ( + <PendingTransactionToast isLoading={isLoading} tx={tx} onClose={() => dismissToast(tx)} /> + ); + + const renderWithdrawalTransactionToast = (t, tx) => ( + <WithdrawalTransactionToast + t={t} + tx={tx} + onClose={() => dismissToast(tx)} + onDismiss={() => dismissToast(tx)} + onWithdrawal={() => onWithdrawalClick(tx)} + /> + ); + + const getToastId = tx => toastsMap.current[tx.id]; + + const isToastDismissed = id => !!toastsDismissed[id]; + + const dismissToast = tx => { + const toastId = getToastId(tx); + toast.dismiss(toastId); + toastsDismissed.current[toastId] = true; + }; + + const onWithdrawalClick = async tx => { + await finalizeTransferFromStarknet(tx); + dismissToast(tx); + }; + + return ( + <Toaster + containerClassName={styles.toastProvider} + position="top-right" + toastOptions={{ + duration: Infinity + }} + /> + ); +}; + +export const TransactionData = ({tx, style}) => { + return ( + <> + <ToastBody + body={ + tx.type === ActionType.TRANSFER_TO_STARKNET + ? `${NetworkType.ETHEREUM.name} -> ${NetworkType.STARKNET.name}` + : `${NetworkType.STARKNET.name} -> ${NetworkType.ETHEREUM.name}` + } + style={style} + /> + <ToastBody body={`${tx.amount} ${tx.symbol}`} style={style} /> + <ToastBody body={getFullTime(tx.timestamp)} style={style} /> + </> + ); +}; + +TransactionData.propTypes = { + tx: PropTypes.object, + style: PropTypes.object +}; diff --git a/src/components/Features/ToastProvider/ToastProvider.module.scss b/src/components/Features/ToastProvider/ToastProvider.module.scss new file mode 100644 index 00000000..ebd0b2a8 --- /dev/null +++ b/src/components/Features/ToastProvider/ToastProvider.module.scss @@ -0,0 +1,5 @@ +@import '../../../index'; + +.toastProvider { + margin-top: #{$--header-height}px; +} diff --git a/src/components/Features/TransactionLog/TransactionLog.js b/src/components/Features/TransactionLog/TransactionLog.js index aa1138e3..730902c8 100644 --- a/src/components/Features/TransactionLog/TransactionLog.js +++ b/src/components/Features/TransactionLog/TransactionLog.js @@ -5,13 +5,13 @@ import {LINKS} from '../../../constants'; import {TransactionStatus} from '../../../enums'; import {useColors} from '../../../hooks'; import {useWallets} from '../../../providers/WalletsProvider'; -import {get24Time, getDate} from '../../../utils'; +import {getFullTime} from '../../../utils'; import {Button, CryptoLogo} from '../../UI'; import {CryptoLogoSize} from '../../UI/CryptoLogo/CryptoLogo.enums'; import {LinkButton} from '../../UI/LinkButton/LinkButton'; import {useTransferData} from '../Transfer/Transfer.hooks'; import styles from './TransactionLog.module.scss'; -import {WITHDRAW_BTN_TXT} from './TransactionLog.strings'; +import {WITHDRAWAL_BTN_TXT} from './TransactionLog.strings'; export const TransactionLog = ({tx, onWithdrawClick}) => { const {symbol, timestamp, name, amount, status, eth_hash, starknet_hash} = tx; @@ -30,7 +30,7 @@ export const TransactionLog = ({tx, onWithdrawClick}) => { <CryptoLogo size={CryptoLogoSize.SMALL} symbol={symbol} /> <div> {name} - <div className={styles.data}>{`${getDate(timestamp)}, ${get24Time(timestamp)}`}</div> + <div className={styles.data}>{`${getFullTime(timestamp)}`}</div> </div> </div> <div className={styles.right}> @@ -38,7 +38,7 @@ export const TransactionLog = ({tx, onWithdrawClick}) => { {sign} {amount} {symbol.toUpperCase()} </div> {status !== TransactionStatus.ACCEPTED_ON_L1 ? ( - <div className={styles.data}>{status.replaceAll('_', ' ')}</div> + <div className={styles.data}>{status && status.replaceAll('_', ' ')}</div> ) : ( <div className={styles.links}> {eth_hash && ( @@ -47,7 +47,7 @@ export const TransactionLog = ({tx, onWithdrawClick}) => { url={LINKS.ETHERSCAN.txUrl(chainId, eth_hash)} /> )} - {!eth_hash && isEthereum && <WithdrawButton onClick={onWithdrawClick} />} + {!eth_hash && isEthereum && <WithdrawalButton onClick={onWithdrawClick} />} <LinkButton text={LINKS.VOYAGER.text} url={LINKS.VOYAGER.txUrl(chainId, starknet_hash)} @@ -61,24 +61,25 @@ export const TransactionLog = ({tx, onWithdrawClick}) => { ); }; -const WithdrawButton = ({onClick}) => { - const {colorBeta, colorAlpha3} = useColors(); +const WithdrawalButton = ({onClick}) => { + const {colorBeta} = useColors(); return ( <Button - colorBackground={colorAlpha3} + colorBackground="transparent" colorBorder={colorBeta} colorText={colorBeta} height={10} style={{ + fontSize: '12px', padding: '14px' }} - text={WITHDRAW_BTN_TXT} + text={WITHDRAWAL_BTN_TXT} onClick={onClick} /> ); }; -WithdrawButton.propTypes = { +WithdrawalButton.propTypes = { onClick: PropTypes.func }; diff --git a/src/components/Features/TransactionLog/TransactionLog.strings.js b/src/components/Features/TransactionLog/TransactionLog.strings.js index 3ae97daf..fcd42558 100644 --- a/src/components/Features/TransactionLog/TransactionLog.strings.js +++ b/src/components/Features/TransactionLog/TransactionLog.strings.js @@ -1,7 +1,7 @@ import strings from '../../../config/strings.json'; const { - transactionLog: {withdraw_btn_txt} + transactionLog: {withdrawal_btn_txt} } = strings; -export const WITHDRAW_BTN_TXT = withdraw_btn_txt; +export const WITHDRAWAL_BTN_TXT = withdrawal_btn_txt; diff --git a/src/components/Features/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer.js index 9bd61f62..ce573555 100644 --- a/src/components/Features/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer.js @@ -133,12 +133,7 @@ export const Transfer = () => { return ( <Menu> - <div - className={styles.transfer} - style={{ - filter: isLoading && 'blur(5px)' - }} - > + <div className={styles.transfer}> <div className={styles.tabsContainer}>{renderTabs()}</div> {!selectedToken && ( <center> diff --git a/src/components/Features/Transfer/Transfer.module.scss b/src/components/Features/Transfer/Transfer.module.scss index 541e0849..dc8ca23d 100644 --- a/src/components/Features/Transfer/Transfer.module.scss +++ b/src/components/Features/Transfer/Transfer.module.scss @@ -4,7 +4,7 @@ $background-color: $--color-alpha-1; $error-msg-color: $--color-error; .transfer { - transition: 0.3ms ease-in-out; + transition: 0.3s ease-in-out; .tabsContainer { display: flex; diff --git a/src/components/Features/index.js b/src/components/Features/index.js index ce8046ec..172a7704 100644 --- a/src/components/Features/index.js +++ b/src/components/Features/index.js @@ -5,3 +5,4 @@ export * from './ModalProvider/ModalProvider'; export * from './SelectToken/SelectToken'; export * from './Transfer/Transfer'; export * from './TransactionLog/TransactionLog'; +export * from './ToastProvider/ToastProvider'; diff --git a/src/components/UI/Button/Button.module.scss b/src/components/UI/Button/Button.module.scss index 3dd28bcf..cf299dfa 100644 --- a/src/components/UI/Button/Button.module.scss +++ b/src/components/UI/Button/Button.module.scss @@ -13,7 +13,7 @@ margin: 10px 0; padding: 20px 15px; cursor: pointer; - transition: 0.3s; + transition: 0.3s ease-in-out; &.isDisabled { pointer-events: none; diff --git a/src/components/UI/Loading/Loading.enums.js b/src/components/UI/Loading/Loading.enums.js index 9dc1a791..bda93487 100644 --- a/src/components/UI/Loading/Loading.enums.js +++ b/src/components/UI/Loading/Loading.enums.js @@ -2,5 +2,6 @@ export const LoadingSize = { SMALL: 30, MEDIUM: 50, LARGE: 70, - EXTRA_LARGE: 110 + EXTRA_LARGE: 110, + XX_LARGE: 200 }; diff --git a/src/components/UI/Modal/Modal/Modal.module.scss b/src/components/UI/Modal/Modal/Modal.module.scss index 5e0ebe68..a136e7c0 100644 --- a/src/components/UI/Modal/Modal/Modal.module.scss +++ b/src/components/UI/Modal/Modal/Modal.module.scss @@ -11,7 +11,7 @@ $error-color: $--color-error; right: 0; bottom: 0; position: absolute; - z-index: 1; + z-index: 100000; .container { top: 50%; @@ -22,6 +22,7 @@ $error-color: $--color-error; box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1); border-radius: 10px; padding: 20px 30px; + overflow: auto; &.error { border: 1px solid $error-color; diff --git a/src/components/UI/ProgressModal/ProgressModal.js b/src/components/UI/Modal/ProgressModal/ProgressModal.js similarity index 79% rename from src/components/UI/ProgressModal/ProgressModal.js rename to src/components/UI/Modal/ProgressModal/ProgressModal.js index 08f004db..e1f8cab5 100644 --- a/src/components/UI/ProgressModal/ProgressModal.js +++ b/src/components/UI/Modal/ProgressModal/ProgressModal.js @@ -1,9 +1,9 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {useColors} from '../../../hooks'; -import {LoadingSize} from '../Loading/Loading.enums'; -import {Loading} from '../index'; +import {useColors} from '../../../../hooks'; +import {LoadingSize} from '../../Loading/Loading.enums'; +import {Loading} from '../../index'; import styles from './ProgressModal.module.scss'; const ProgressModal = ({message}) => { diff --git a/src/components/UI/ProgressModal/ProgressModal.module.scss b/src/components/UI/Modal/ProgressModal/ProgressModal.module.scss similarity index 100% rename from src/components/UI/ProgressModal/ProgressModal.module.scss rename to src/components/UI/Modal/ProgressModal/ProgressModal.module.scss diff --git a/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.constants.js b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.constants.js similarity index 80% rename from src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.constants.js rename to src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.constants.js index 142992b8..ecf57cf9 100644 --- a/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.constants.js +++ b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.constants.js @@ -1,4 +1,4 @@ -import {evaluate} from '../../../utils'; +import {evaluate} from '../../../../utils'; export const ETHERSCAN_TX_URL = (chainName, transactionHash) => evaluate('https://{{chainName}}etherscan.io/tx/{{transactionHash}}', { diff --git a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js new file mode 100644 index 00000000..e3f42786 --- /dev/null +++ b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js @@ -0,0 +1,75 @@ +import PropTypes from 'prop-types'; +import React, {useEffect, useState} from 'react'; + +import {ReactComponent as EtherscanLogo} from '../../../../assets/svg/etherscan.svg'; +import {ReactComponent as StarknetLogo} from '../../../../assets/svg/tokens/starknet.svg'; +import {LINKS} from '../../../../constants'; +import {ActionType} from '../../../../enums'; +import {useColors} from '../../../../hooks'; +import {useWallets} from '../../../../providers/WalletsProvider'; +import {openInNewTab} from '../../../../utils'; +import {Button} from '../../Button/Button'; +import {Circle} from '../../Circle/Circle'; +import {BODY_TXT_PARTS, BTN_TEXT} from './TransactionSubmittedModal.strings'; + +const TransactionSubmittedModal = ({tx}) => { + const {colorAlpha3, colorWhite, colorWhite1} = useColors(); + const {chainId} = useWallets(); + const [networkData, setNetworkData] = useState({}); + + useEffect(() => { + if (tx.type === ActionType.TRANSFER_TO_STARKNET || (tx.eth_hash && tx.starknet_hash)) { + setNetworkData({ + explorerName: LINKS.ETHERSCAN.text, + explorerUrl: LINKS.ETHERSCAN.txUrl(chainId, tx.eth_hash), + explorerLogo: <EtherscanLogo style={{margin: 'auto'}} /> + }); + } else { + setNetworkData({ + explorerName: LINKS.VOYAGER.text, + explorerUrl: LINKS.VOYAGER.txUrl(chainId, tx.starknet_hash), + explorerLogo: <StarknetLogo style={{margin: 'auto'}} /> + }); + } + }, []); + + const onClick = () => { + openInNewTab(networkData.explorerUrl); + }; + + return ( + <div> + <p> + <b>{BODY_TXT_PARTS[0]}</b> + {BODY_TXT_PARTS[1]} + </p> + <center> + <Button + colorBackground={colorWhite} + colorBorder={colorAlpha3} + colorText={colorAlpha3} + icon={ + <Circle color={colorWhite1} size={40}> + {networkData.explorerLogo} + </Circle> + } + style={{ + borderRadius: '7px', + borderWidth: '2px', + fontSize: '16px', + marginTop: '25px', + height: '50px' + }} + text={BTN_TEXT(networkData.explorerName)} + onClick={onClick} + /> + </center> + </div> + ); +}; + +TransactionSubmittedModal.propTypes = { + tx: PropTypes.object +}; + +export default TransactionSubmittedModal; diff --git a/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.strings.js b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.strings.js similarity index 64% rename from src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.strings.js rename to src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.strings.js index 03313b27..374fecbe 100644 --- a/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.strings.js +++ b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.strings.js @@ -1,5 +1,5 @@ -import strings from '../../../config/strings.json'; -import {evaluate} from '../../../utils'; +import strings from '../../../../config/strings.json'; +import {evaluate} from '../../../../utils'; const { transactionSubmittedModal: {btn_txt, body_txt} diff --git a/src/components/UI/Modal/index.js b/src/components/UI/Modal/index.js new file mode 100644 index 00000000..6aff1f58 --- /dev/null +++ b/src/components/UI/Modal/index.js @@ -0,0 +1,7 @@ +export * from './Modal/Modal'; +export * from './ModalHeader/ModalHeader'; +export * from './ModalBody/ModalBody'; +export * from './ModalTitle/ModalTitle'; +export * from './ModalFooter/ModalFooter'; +export * from './ProgressModal/ProgressModal'; +export * from './TransactionSubmittedModal/TransactionSubmittedModal'; diff --git a/src/components/UI/Toast/PendingTransactionToast/PendingTransactionToast.js b/src/components/UI/Toast/PendingTransactionToast/PendingTransactionToast.js new file mode 100644 index 00000000..6c27b6ba --- /dev/null +++ b/src/components/UI/Toast/PendingTransactionToast/PendingTransactionToast.js @@ -0,0 +1,29 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {TransactionStatus} from '../../../../enums'; +import {TransactionData} from '../../../Features'; +import {ToastHeader} from '../ToastHeader/ToastHeader'; +import {ToastSeparator} from '../ToastSeparator/ToastSeparator'; +import styles from './PendingTransactionToast.module.scss'; +import {CONSUMED_TXT, PENDING_TXT} from './PendingTransactionToast.strings'; + +export const PendingTransactionToast = ({tx, isLoading, onClose}) => { + return ( + <div className={styles.pendingTransactionToast}> + <ToastHeader + title={tx.status === TransactionStatus.ACCEPTED_ON_L2 ? CONSUMED_TXT : PENDING_TXT} + withClose={!isLoading} + onClose={onClose} + /> + <ToastSeparator /> + <TransactionData style={{fontSize: '12px'}} tx={tx} /> + </div> + ); +}; + +PendingTransactionToast.propTypes = { + tx: PropTypes.object, + isLoading: PropTypes.bool, + onClose: PropTypes.func +}; diff --git a/src/components/UI/Toast/PendingTransactionToast/PendingTransactionToast.module.scss b/src/components/UI/Toast/PendingTransactionToast/PendingTransactionToast.module.scss new file mode 100644 index 00000000..c0b2fa13 --- /dev/null +++ b/src/components/UI/Toast/PendingTransactionToast/PendingTransactionToast.module.scss @@ -0,0 +1,3 @@ +.pendingTransactionToast { + padding: 0 10px; +} diff --git a/src/components/UI/Toast/PendingTransactionToast/PendingTransactionToast.strings.js b/src/components/UI/Toast/PendingTransactionToast/PendingTransactionToast.strings.js new file mode 100644 index 00000000..225cc65c --- /dev/null +++ b/src/components/UI/Toast/PendingTransactionToast/PendingTransactionToast.strings.js @@ -0,0 +1,8 @@ +import strings from '../../../../config/strings.json'; + +const { + pendingTransactionToast: {pending_txt, consumed_txt} +} = strings; + +export const PENDING_TXT = pending_txt; +export const CONSUMED_TXT = consumed_txt; diff --git a/src/components/UI/Toast/ToastBody/ToastBody.js b/src/components/UI/Toast/ToastBody/ToastBody.js new file mode 100644 index 00000000..e59a18db --- /dev/null +++ b/src/components/UI/Toast/ToastBody/ToastBody.js @@ -0,0 +1,17 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import styles from './ToastBody.module.scss'; + +export const ToastBody = ({body, style}) => { + return ( + <div className={styles.toastBody} style={style}> + {body} + </div> + ); +}; + +ToastBody.propTypes = { + body: PropTypes.string, + style: PropTypes.object +}; diff --git a/src/components/UI/Toast/ToastBody/ToastBody.module.scss b/src/components/UI/Toast/ToastBody/ToastBody.module.scss new file mode 100644 index 00000000..418c377c --- /dev/null +++ b/src/components/UI/Toast/ToastBody/ToastBody.module.scss @@ -0,0 +1,11 @@ +@import '../../../../index'; + +$color: $--color-omega-1; + +.toastBody { + font-style: normal; + font-weight: normal; + font-size: 14px; + line-height: 18px; + color: $color; +} diff --git a/src/components/UI/Toast/ToastButton/ToastButton.js b/src/components/UI/Toast/ToastButton/ToastButton.js new file mode 100644 index 00000000..ac7530a4 --- /dev/null +++ b/src/components/UI/Toast/ToastButton/ToastButton.js @@ -0,0 +1,26 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import styles from './ToastButton.module.scss'; + +export const ToastButtons = ({children}) => { + return <div className={styles.toastButtons}>{children}</div>; +}; + +export const ToastButton = ({text, color, onClick}) => { + return ( + <div className={styles.toastButton} style={{color}} onClick={onClick}> + {text} + </div> + ); +}; + +ToastButtons.propTypes = { + children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) +}; + +ToastButton.propTypes = { + text: PropTypes.string, + color: PropTypes.string, + onClick: PropTypes.func +}; diff --git a/src/components/UI/Toast/ToastButton/ToastButton.module.scss b/src/components/UI/Toast/ToastButton/ToastButton.module.scss new file mode 100644 index 00000000..74ea67af --- /dev/null +++ b/src/components/UI/Toast/ToastButton/ToastButton.module.scss @@ -0,0 +1,16 @@ +.toastButtons { + display: flex; + padding-top: 10px; +} + +.toastButton { + cursor: pointer; + text-transform: capitalize; + font-weight: 500; + font-size: 14px; + line-height: 20px; + + &:not(:first-child) { + margin-left: 10px; + } +} diff --git a/src/components/UI/Toast/ToastHeader/ToastHeader.js b/src/components/UI/Toast/ToastHeader/ToastHeader.js new file mode 100644 index 00000000..6b9dbd38 --- /dev/null +++ b/src/components/UI/Toast/ToastHeader/ToastHeader.js @@ -0,0 +1,24 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {ReactComponent as CloseIcon} from '../../../../assets/svg/icons/close.svg'; +import styles from './ToastHeader.module.scss'; + +export const ToastHeader = ({title, onClose, withClose}) => { + return ( + <div className={styles.toastHeader}> + <div className={styles.title}>{title}</div> + {withClose && ( + <div className={styles.close} onClick={onClose}> + <CloseIcon /> + </div> + )} + </div> + ); +}; + +ToastHeader.propTypes = { + title: PropTypes.string, + onClose: PropTypes.func, + withClose: PropTypes.bool +}; diff --git a/src/components/UI/Toast/ToastHeader/ToastHeader.module.scss b/src/components/UI/Toast/ToastHeader/ToastHeader.module.scss new file mode 100644 index 00000000..9eb891ca --- /dev/null +++ b/src/components/UI/Toast/ToastHeader/ToastHeader.module.scss @@ -0,0 +1,20 @@ +@import '../../../../index'; + +$color-title: $--color-black; + +.toastHeader { + display: flex; + margin-bottom: 5px; + + .title { + font-style: normal; + font-weight: 500; + font-size: 14px; + line-height: 24px; + color: $color-title; + } + + .close { + cursor: pointer; + } +} diff --git a/src/components/UI/Toast/ToastSeparator/ToastSeparator.js b/src/components/UI/Toast/ToastSeparator/ToastSeparator.js new file mode 100644 index 00000000..1c2e1453 --- /dev/null +++ b/src/components/UI/Toast/ToastSeparator/ToastSeparator.js @@ -0,0 +1,7 @@ +import React from 'react'; + +import styles from './ToastSeparator.module.scss'; + +export const ToastSeparator = () => { + return <div className={styles.toastSeparator} />; +}; diff --git a/src/components/UI/Toast/ToastSeparator/ToastSeparator.module.scss b/src/components/UI/Toast/ToastSeparator/ToastSeparator.module.scss new file mode 100644 index 00000000..5cbbd9ac --- /dev/null +++ b/src/components/UI/Toast/ToastSeparator/ToastSeparator.module.scss @@ -0,0 +1,9 @@ +@import '../../../../index'; + +.toastSeparator { + width: 100%; + height: 1px; + margin: 5px 0; + background: $--color-omega-1; + opacity: 0.3; +} diff --git a/src/components/UI/Toast/WithdrawalTransactionToast/WithdrawalTransactionToast.js b/src/components/UI/Toast/WithdrawalTransactionToast/WithdrawalTransactionToast.js new file mode 100644 index 00000000..807a9cf3 --- /dev/null +++ b/src/components/UI/Toast/WithdrawalTransactionToast/WithdrawalTransactionToast.js @@ -0,0 +1,60 @@ +import {Transition} from '@headlessui/react'; +import PropTypes from 'prop-types'; +import React from 'react'; + +import {ReactComponent as EthereumLogo} from '../../../../assets/svg/tokens/eth.svg'; +import {useColors} from '../../../../hooks'; +import {TransactionData} from '../../../Features'; +import {ToastBody} from '../ToastBody/ToastBody'; +import {ToastButton, ToastButtons} from '../ToastButton/ToastButton'; +import {ToastHeader} from '../ToastHeader/ToastHeader'; +import {ToastSeparator} from '../ToastSeparator/ToastSeparator'; +import styles from './WithdrawalTransactionToast.module.scss'; +import { + BODY_TXT, + DISMISS_BTN_TXT, + TITLE_TXT, + WITHDRAWAL_BTN_TXT +} from './WithdrawalTransactionToast.strings'; + +export const WithdrawalTransactionToast = ({t, tx, onDismiss, onWithdrawal, onClose}) => { + const {colorBeta, colorOmega1} = useColors(); + return ( + <Transition + appear={true} + enter="transition-opacity duration-75" + enterFrom="opacity-0" + enterTo="opacity-100" + leave="transition-opacity duration-150" + leaveFrom="opacity-100" + leaveTo="opacity-0" + show={t.visible} + > + <div className={styles.withdrawalTransactionToast}> + <div className={styles.container}> + <div className={styles.left}> + <EthereumLogo style={{opacity: 0.5}} /> + </div> + <div className={styles.right}> + <ToastHeader title={TITLE_TXT} withClose={true} onClose={onClose} /> + <ToastBody body={BODY_TXT} style={{paddingRight: '20px'}} /> + <ToastButtons> + <ToastButton color={colorOmega1} text={DISMISS_BTN_TXT} onClick={onDismiss} /> + <ToastButton color={colorBeta} text={WITHDRAWAL_BTN_TXT} onClick={onWithdrawal} /> + </ToastButtons> + <ToastSeparator /> + <TransactionData style={{fontSize: '10px'}} tx={tx} /> + </div> + </div> + </div> + </Transition> + ); +}; + +WithdrawalTransactionToast.propTypes = { + t: PropTypes.object, + tx: PropTypes.object, + onDismiss: PropTypes.func, + onWithdrawal: PropTypes.func, + onClose: PropTypes.func +}; diff --git a/src/components/UI/Toast/WithdrawalTransactionToast/WithdrawalTransactionToast.module.scss b/src/components/UI/Toast/WithdrawalTransactionToast/WithdrawalTransactionToast.module.scss new file mode 100644 index 00000000..75df4f14 --- /dev/null +++ b/src/components/UI/Toast/WithdrawalTransactionToast/WithdrawalTransactionToast.module.scss @@ -0,0 +1,29 @@ +@import '../../../../index'; + +$background-color: $--color-white; +$left-background-color: $--color-white-2; + +.withdrawalTransactionToast { + width: 400px; + background: $background-color; + box-shadow: 0 12px 16px -4px rgba(16, 24, 40, 0.1), 0px 4px 6px -2px rgba(16, 24, 40, 0.05); + border-radius: 8px; + + .container { + display: flex; + flex-direction: row; + width: 100%; + height: 100%; + + .left { + width: 30%; + background: $left-background-color; + border-radius: 8px 0 0 8px; + } + + .right { + border-radius: 0 8px 8px 0; + padding: 10px 20px; + } + } +} diff --git a/src/components/UI/Toast/WithdrawalTransactionToast/WithdrawalTransactionToast.strings.js b/src/components/UI/Toast/WithdrawalTransactionToast/WithdrawalTransactionToast.strings.js new file mode 100644 index 00000000..a50d44d8 --- /dev/null +++ b/src/components/UI/Toast/WithdrawalTransactionToast/WithdrawalTransactionToast.strings.js @@ -0,0 +1,10 @@ +import strings from '../../../../config/strings.json'; + +const { + withdrawalTransactionToast: {title_txt, body_txt, dismiss_btn_txt, withdrawal_btn_txt} +} = strings; + +export const TITLE_TXT = title_txt; +export const BODY_TXT = body_txt; +export const DISMISS_BTN_TXT = dismiss_btn_txt; +export const WITHDRAWAL_BTN_TXT = withdrawal_btn_txt; diff --git a/src/components/UI/Toast/index.js b/src/components/UI/Toast/index.js new file mode 100644 index 00000000..d7fa98dc --- /dev/null +++ b/src/components/UI/Toast/index.js @@ -0,0 +1,6 @@ +export * from './ToastBody/ToastBody'; +export * from './ToastButton/ToastButton'; +export * from './ToastHeader/ToastHeader'; +export * from './ToastSeparator/ToastSeparator'; +export * from './WithdrawalTransactionToast/WithdrawalTransactionToast'; +export * from './PendingTransactionToast/PendingTransactionToast'; diff --git a/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.js b/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.js deleted file mode 100644 index e2546ceb..00000000 --- a/src/components/UI/TransactionSubmittedModal/TransactionSubmittedModal.js +++ /dev/null @@ -1,73 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; - -import {ReactComponent as EtherscanLogo} from '../../../assets/svg/etherscan.svg'; -import {ReactComponent as StarknetLogo} from '../../../assets/svg/tokens/starknet.svg'; -import {LINKS} from '../../../constants'; -import {ActionType} from '../../../enums'; -import {useColors} from '../../../hooks'; -import {useWallets} from '../../../providers/WalletsProvider'; -import {openInNewTab} from '../../../utils'; -import {Button} from '../Button/Button'; -import {Circle} from '../Circle/Circle'; -import {BODY_TXT_PARTS, BTN_TEXT} from './TransactionSubmittedModal.strings'; - -const TransactionSubmittedModal = ({tx}) => { - const {colorAlpha3, colorWhite, colorWhite1} = useColors(); - const {chainId} = useWallets(); - - const getExplorerName = () => { - return tx.type === ActionType.TRANSFER_TO_STARKNET ? LINKS.ETHERSCAN.text : LINKS.VOYAGER.text; - }; - - const getExplorerUrl = () => { - return tx.type === ActionType.TRANSFER_TO_STARKNET - ? LINKS.ETHERSCAN.txUrl(chainId, tx.eth_hash) - : LINKS.VOYAGER.txUrl(chainId, tx.starknet_hash); - }; - - const getExplorerLogo = () => { - const Logo = tx.type === ActionType.TRANSFER_TO_STARKNET ? EtherscanLogo : StarknetLogo; - return <Logo style={{margin: 'auto'}} />; - }; - - const onClick = () => { - openInNewTab(getExplorerUrl()); - }; - - return ( - <div> - <p> - <b>{BODY_TXT_PARTS[0]}</b> - {BODY_TXT_PARTS[1]} - </p> - <center> - <Button - colorBackground={colorWhite} - colorBorder={colorAlpha3} - colorText={colorAlpha3} - icon={ - <Circle color={colorWhite1} size={40}> - {getExplorerLogo()} - </Circle> - } - style={{ - borderRadius: '7px', - borderWidth: '2px', - fontSize: '16px', - marginTop: '25px', - height: '50px' - }} - text={BTN_TEXT(getExplorerName())} - onClick={onClick} - /> - </center> - </div> - ); -}; - -TransactionSubmittedModal.propTypes = { - tx: PropTypes.object -}; - -export default TransactionSubmittedModal; diff --git a/src/components/UI/index.js b/src/components/UI/index.js index a960f5f9..9cf53c3f 100644 --- a/src/components/UI/index.js +++ b/src/components/UI/index.js @@ -9,15 +9,8 @@ export * from './KeyFrames/KeyFrames'; export * from './Loading/Loading'; export * from './Menu/Menu'; export * from './MenuTitle/MenuTitle'; -export * from './Modal/Modal/Modal'; -export * from './Modal/ModalHeader/ModalHeader'; -export * from './Modal/ModalBody/ModalBody'; -export * from './Modal/ModalTitle/ModalTitle'; -export * from './Modal/ModalFooter/ModalFooter'; export * from './Input/Input'; export * from './WalletButton/WalletButton'; -export * from './ProgressModal/ProgressModal'; -export * from './TransactionSubmittedModal/TransactionSubmittedModal'; export * from './MaxButton/MaxButton'; export * from './NetworkMenu/NetworkMenu'; export * from './NetworkSwap/NetworkSwap'; @@ -34,3 +27,5 @@ export * from './WalletLogin/WalletLogin'; export * from './TransactionLogContainer/TransactionLogContainer'; export * from './LogoutButton/LogoutButton'; export * from './AccountAddress/AccountAddress'; +export * from './Modal'; +export * from './Toast'; diff --git a/src/config/config.json b/src/config/config.json index ff5f98f9..0b8ad96a 100644 --- a/src/config/config.json +++ b/src/config/config.json @@ -1,5 +1,5 @@ { - "autoConnect": false, + "autoConnect": true, "pollBalanceInterval": 120000, "pollBlockNumberInterval": 30000, "supportedChainIds": [5] diff --git a/src/config/strings.json b/src/config/strings.json index fa3ed26a..2d420b28 100644 --- a/src/config/strings.json +++ b/src/config/strings.json @@ -27,16 +27,16 @@ "search_placeholder": "Token name, symbol, or address" }, "transactionLog": { - "withdraw_btn_txt": "withdraw" + "withdrawal_btn_txt": "Withdrawal" }, "accountAddress": { - "copied_msg_txt": "copied!" + "copied_msg_txt": "Copied!" }, "logoutButton": { - "btn_txt": "Logout'" + "btn_txt": "Logout" }, "maxButton": { - "btn_txt": "max" + "btn_txt": "Max" }, "backButton": { "btn_txt": "Back" @@ -58,10 +58,10 @@ "title_txt": "Transaction log", "overview_txt": "recent transactions", "empty_msg_txt": "Transactions will appear here...", - "view_more_txt": "view more" + "view_more_txt": "View more" }, "transactionSubmittedModal": { - "btn_txt": "view on {{explorer}}", + "btn_txt": "View on {{explorer}}", "body_txt": [ "Your transaction has been sent to StarkNet!\n", "We'll notify you once its status will be updated." @@ -78,7 +78,7 @@ }, "initiateWithdraw": { "type": "Initiate withdrawal", - "message": "Initiating withdrawal of {{amount} {{symbol}} from StarkNet" + "message": "Initiating withdrawal of {{amount}} {{symbol}} from StarkNet" }, "waitForAccept": { "type": "Transaction sent", @@ -89,5 +89,15 @@ "message": "Withdrawing {{amount}} {{symbol}} to Ethereum" }, "error_title": "Transaction error" + }, + "pendingTransactionToast": { + "pending_txt": "Waiting for transaction to be consumed on StarkNet", + "consumed_txt": "Transaction consumed successfully on StarkNet" + }, + "withdrawalTransactionToast": { + "title_txt": "StarkNet finished to process your withdrawal!", + "body_txt": "Click on Withdrawal to transfer the funds from StarkNet Bridge to your Ethereum address.", + "dismiss_btn_txt": "Dismiss", + "withdrawal_btn_txt": "Withdrawal" } } diff --git a/src/hooks/index.js b/src/hooks/index.js index d80e8ad1..ec4981b6 100644 --- a/src/hooks/index.js +++ b/src/hooks/index.js @@ -9,3 +9,4 @@ export * from './useWalletHandlerProvider'; export * from './useFetchData'; export * from './usePrevious'; export * from './useTransfer'; +export * from './useConfig'; diff --git a/src/hooks/useConfig.js b/src/hooks/useConfig.js new file mode 100644 index 00000000..0b8ffcff --- /dev/null +++ b/src/hooks/useConfig.js @@ -0,0 +1,5 @@ +import {useMemo} from 'react'; + +import config from '../config/config.json'; + +export const useConfig = () => useMemo(() => config, []); diff --git a/src/hooks/useTransfer.js b/src/hooks/useTransfer.js index b0087a80..2584953e 100644 --- a/src/hooks/useTransfer.js +++ b/src/hooks/useTransfer.js @@ -9,13 +9,17 @@ import { useProgressModal, useTransactionSubmittedModal } from '../components/Features/ModalProvider/ModalProvider.hooks'; -import {useSelectedToken, useTransferData} from '../components/Features/Transfer/Transfer.hooks'; +import { + useAmount, + useSelectedToken, + useTransferData +} from '../components/Features/Transfer/Transfer.hooks'; import {ActionType} from '../enums'; import {useEthereumToken, useStarknetToken, useTokens} from '../providers/TokensProvider'; import {useTransactions} from '../providers/TransactionsProvider'; import {useEthereumWallet, useStarknetWallet} from '../providers/WalletsProvider'; import {evaluate, hashEquals, isEth, txHash} from '../utils'; -import {eth_listenOnce, starknet_waitForTransaction} from '../utils/contract'; +import {eth_listenOnce} from '../utils/contract'; import { useEthBridgeContract, useEthereumTokenBridgeContract, @@ -45,6 +49,7 @@ export const useTransfer = () => { const {action} = useTransferData(); const {addTransaction} = useTransactions(); const {updateTokens} = useTokens(); + const [, , clearAmount] = useAmount(); const showProgressModal = useProgressModal(); const showErrorModal = useErrorModal(error_title); const hideModal = useHideModal(); @@ -73,7 +78,7 @@ export const useTransfer = () => { }; }, initiateWithdraw: (amount, symbol) => { - const message = evaluate(initiateWithdraw, {amount, symbol}); + const message = evaluate(initiateWithdraw.message, {amount, symbol}); return { type: initiateWithdraw.type, message @@ -106,6 +111,7 @@ export const useTransfer = () => { showTransactionSubmittedModal(data); addTransaction(data); updateTokens(); + clearAmount(); } }, [progress, data, error, isLoading]); @@ -195,8 +201,6 @@ export const useTransfer = () => { bridgeContract, tokenContract ); - setProgress(progressOptions.waitForAccept()); - await starknet_waitForTransaction(transaction_hash); setIsLoading(false); setData({ type: ActionType.TRANSFER_FROM_STARKNET, diff --git a/src/providers/BlockHashProvider/BlockHashProvider.js b/src/providers/BlockHashProvider/BlockHashProvider.js index 04d4baa3..683d4fe5 100644 --- a/src/providers/BlockHashProvider/BlockHashProvider.js +++ b/src/providers/BlockHashProvider/BlockHashProvider.js @@ -1,12 +1,13 @@ import {getStarknet} from '@argent/get-starknet'; import PropTypes from 'prop-types'; -import React, {useCallback, useEffect} from 'react'; +import React, {useCallback, useEffect, useState} from 'react'; -import {pollBlockNumberInterval} from '../../config/config.json'; +import {useConfig} from '../../hooks'; import {BlockHashContext} from './block-hash-context'; export const BlockHashProvider = ({children}) => { - const [blockHash, setBlockHash] = React.useState(); + const {pollBlockNumberInterval} = useConfig(); + const [blockHash, setBlockHash] = useState(); const fetchBlockHash = useCallback(async () => { const {block_hash} = await getStarknet().provider.getBlock(); diff --git a/src/providers/TokensProvider/TokensProvider.js b/src/providers/TokensProvider/TokensProvider.js index 41c9363e..d0b95e8d 100644 --- a/src/providers/TokensProvider/TokensProvider.js +++ b/src/providers/TokensProvider/TokensProvider.js @@ -1,14 +1,14 @@ import PropTypes from 'prop-types'; import React, {useEffect, useReducer} from 'react'; -import {pollBalanceInterval} from '../../config/config.json'; -import {useLogger} from '../../hooks'; +import {useLogger, useConfig} from '../../hooks'; import {useEthereumTokenBalance, useStarknetTokenBalance} from '../../hooks/useTokenBalance'; import {useEthereumWallet, useStarknetWallet} from '../WalletsProvider'; import {TokensContext} from './tokens-context'; import {actions, initialState, reducer} from './tokens-reducer'; export const TokensProvider = ({children}) => { + const {pollBalanceInterval} = useConfig(); const logger = useLogger(TokensProvider.displayName); const [tokens, dispatch] = useReducer(reducer, initialState); const {account: ethereumAccount} = useEthereumWallet(); diff --git a/src/providers/TransactionsProvider/TransactionsProvider.js b/src/providers/TransactionsProvider/TransactionsProvider.js index 9742cbf4..0e0066ec 100644 --- a/src/providers/TransactionsProvider/TransactionsProvider.js +++ b/src/providers/TransactionsProvider/TransactionsProvider.js @@ -2,7 +2,6 @@ import {getStarknet} from '@argent/get-starknet'; import PropTypes from 'prop-types'; import React, {useEffect, useReducer} from 'react'; import useDeepCompareEffect from 'use-deep-compare-effect'; -import {v4 as uuidv4} from 'uuid'; import {LOCAL_STORAGE_TXS_KEY} from '../../constants'; import {TransactionStatus} from '../../enums'; @@ -16,6 +15,7 @@ export const TransactionsProvider = ({children}) => { const logger = useLogger(TransactionsProvider.displayName); const [transactions, dispatch] = useReducer(reducer, initialState); const blockHash = useBlockHash(); + const completedStatuses = [TransactionStatus.ACCEPTED_ON_L1, TransactionStatus.REJECTED]; useEffect(() => { const storedTransactions = StorageManager.getItem(LOCAL_STORAGE_TXS_KEY); @@ -31,7 +31,7 @@ export const TransactionsProvider = ({children}) => { return; } const checkTransaction = async tx => { - if ([TransactionStatus.REJECTED, TransactionStatus.ACCEPTED_ON_L1].includes(tx.status)) { + if (completedStatuses.includes(tx.status)) { return tx; } if (tx.lastChecked === blockHash) { @@ -40,7 +40,13 @@ export const TransactionsProvider = ({children}) => { try { logger.log(`Checking tx status ${tx.starknet_hash}`); const newStatus = await getStarknet().provider.getTransactionStatus(tx.starknet_hash); - logger.log(`New status ${newStatus.tx_status}`); + if (tx.status !== newStatus.tx_status) { + logger.log( + !tx.status + ? `New status ${newStatus.tx_status}` + : `Status changed from ${tx.status}->${newStatus.tx_status}` + ); + } return { ...tx, status: newStatus.tx_status, @@ -66,10 +72,10 @@ export const TransactionsProvider = ({children}) => { updateTransactions(); }, [blockHash, transactions]); - const addTransaction = tx => { + const addTransaction = payload => { dispatch({ type: actions.ADD_TRANSACTION, - payload: {...tx, id: uuidv4(), timestamp: new Date().getTime()} + payload }); }; diff --git a/src/providers/TransactionsProvider/transactions-hooks.js b/src/providers/TransactionsProvider/transactions-hooks.js index 6e390436..4907243b 100644 --- a/src/providers/TransactionsProvider/transactions-hooks.js +++ b/src/providers/TransactionsProvider/transactions-hooks.js @@ -20,6 +20,6 @@ export const useAccountTransactions = account => { const {transactions} = useTransactions(); return useMemo( () => transactions.filter(tx => tx.sender === account || tx.recipient === account), - [account] + [account, transactions] ); }; diff --git a/src/providers/TransactionsProvider/transactions-reducer.js b/src/providers/TransactionsProvider/transactions-reducer.js index 6837093a..fa067dc9 100644 --- a/src/providers/TransactionsProvider/transactions-reducer.js +++ b/src/providers/TransactionsProvider/transactions-reducer.js @@ -1,3 +1,5 @@ +import {v4 as uuidv4} from 'uuid'; + export const actions = { SET_TRANSACTIONS: 'Transactions/SET_TRANSACTIONS', ADD_TRANSACTION: 'Transactions/ADD_TRANSACTION' @@ -18,7 +20,7 @@ export const reducer = (state, action) => { txs[index] = tx; return txs; } - return [action.payload, ...state]; + return [{id: uuidv4(), timestamp: new Date().getTime(), ...tx}, ...state]; } default: diff --git a/src/providers/WalletProvider/WalletProvider.js b/src/providers/WalletProvider/WalletProvider.js index 8ff153cc..e0bf4725 100644 --- a/src/providers/WalletProvider/WalletProvider.js +++ b/src/providers/WalletProvider/WalletProvider.js @@ -2,27 +2,25 @@ import PropTypes from 'prop-types'; import React from 'react'; import {UseWalletProvider as UseWalletProviderWrapper} from 'use-wallet'; -import { - autoConnect, - pollBalanceInterval, - pollBlockNumberInterval, - supportedChainIds -} from '../../config/config.json'; +import {useConfig} from '../../hooks'; -export const WalletProvider = ({children}) => ( - <UseWalletProviderWrapper - autoConnect={autoConnect} - connectors={{ - injected: { - chainId: supportedChainIds - } - }} - pollBalanceInterval={pollBalanceInterval} - pollBlockNumberInterval={pollBlockNumberInterval} - > - {children} - </UseWalletProviderWrapper> -); +export const WalletProvider = ({children}) => { + const {pollBalanceInterval, pollBlockNumberInterval, supportedChainIds} = useConfig(); + return ( + <UseWalletProviderWrapper + autoConnect={false} + connectors={{ + injected: { + chainId: supportedChainIds + } + }} + pollBalanceInterval={pollBalanceInterval} + pollBlockNumberInterval={pollBlockNumberInterval} + > + {children} + </UseWalletProviderWrapper> + ); +}; WalletProvider.propTypes = { children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) diff --git a/src/providers/WalletsProvider/WalletsProvider.js b/src/providers/WalletsProvider/WalletsProvider.js index f36d8266..6de60825 100644 --- a/src/providers/WalletsProvider/WalletsProvider.js +++ b/src/providers/WalletsProvider/WalletsProvider.js @@ -5,11 +5,13 @@ import {useWallet} from 'use-wallet'; import {useIsEthereum, useIsStarknet} from '../../components/Features/Transfer/Transfer.hooks'; import {WalletStatus} from '../../enums'; +import {useConfig} from '../../hooks'; import {web3} from '../../web3'; import {WalletsContext} from './wallets-context'; import {actions, initialState, reducer} from './wallets-reducer'; export const WalletsProvider = ({children}) => { + const {autoConnect} = useConfig(); const [state, dispatch] = useReducer(reducer, initialState); const {status, connect, reset, isConnected, error, account, chainId, networkName} = useWallet(); const {selectedAddress, isConnected: isStarknetConnected, enable} = getStarknet(); @@ -40,7 +42,7 @@ export const WalletsProvider = ({children}) => { }; const connectStarknetWallet = async walletConfig => { - await getStarknet({showModal: true}).enable(); + await getStarknet(!autoConnect && {showModal: true}).enable(); setStarknetWalletConfig(walletConfig); }; diff --git a/src/styles/colors.module.scss b/src/styles/colors.module.scss index 3cb18d80..1b42622c 100644 --- a/src/styles/colors.module.scss +++ b/src/styles/colors.module.scss @@ -1,5 +1,6 @@ $--color-white: #ffffff; -$--color-white-1: #eaf2ff; +$--color-white-1: #d3dae3; +$--color-white-2: #d3dae3ff; $--color-black: #000000; $--color-alpha: #15174e; $--color-alpha-1: #1c1e52; @@ -14,6 +15,7 @@ $--color-beta: #f6643c; $--color-gamma: #69b7f9; $--color-gamma-1: #1595ff; $--color-omega: #5f666c; +$--color-omega-1: #667085; $--color-success: #039855; $--color-error: #da4646; @@ -24,4 +26,5 @@ $--color-error: #da4646; colorBeta: $--color-beta; colorAlpha3: $--color-alpha-3; colorAlpha5: $--color-alpha-5; + colorOmega1: $--color-omega-1; } diff --git a/src/utils/date.js b/src/utils/date.js index 6fe29987..ed5d28de 100644 --- a/src/utils/date.js +++ b/src/utils/date.js @@ -23,3 +23,7 @@ export const get24Time = timestamp => { if (h <= 9) h = '0' + h; return `${h}:${m}:${s}`; }; + +export const getFullTime = timestamp => { + return `${getDate(timestamp)}, ${get24Time(timestamp)}`; +}; diff --git a/src/utils/token.js b/src/utils/token.js index 9e621e8d..3718e981 100644 --- a/src/utils/token.js +++ b/src/utils/token.js @@ -3,6 +3,7 @@ import {NetworkType} from '../enums'; export const isEth = tokenData => { let symbol = ''; if (typeof tokenData === 'object') { + /* eslint-disable-next-line prefer-destructuring */ symbol = tokenData.symbol; } else if (typeof tokenData === 'string') { symbol = tokenData; diff --git a/yarn.lock b/yarn.lock index e2364dba..c7b47687 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1688,6 +1688,11 @@ dependencies: "@hapi/hoek" "^8.3.0" +"@headlessui/react@^1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.4.2.tgz#87e264f190dbebbf8dfdd900530da973dad24576" + integrity sha512-N8tv7kLhg9qGKBkVdtg572BvKvWhmiudmeEpOCyNwzOsZHCXBtl8AazGikIfUS+vBoub20Fse3BjawXDVPPdug== + "@humanwhocodes/config-array@^0.5.0": version "0.5.0" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" @@ -1983,6 +1988,16 @@ resolved "https://registry.yarnpkg.com/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz#af577b477c683fad17c619a78208cede06f9605c" integrity sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q== +"@noble/hashes@^0.5.2": + version "0.5.5" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-0.5.5.tgz#32ee0eecf4aa0933a97cbc5ba5a35715b917c7ab" + integrity sha512-RoQFap5Fgb9ZZnUivFT9JXXoX65UBxhnOPGYLZL/j3vuFkB7xfssVIAREuBMt/GQ8dlV1VdUqAezNZPiW1P4dA== + +"@noble/secp256k1@^1.3.3": + version "1.3.4" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.3.4.tgz#158ded712d09237c0d3428be60dc01ce8ebab9fb" + integrity sha512-ZVRouDO5mbdCiDg4zCd3ZZABduRtpy4tCnB33Gh9upHe9tRzpiqbRSN1VTjrj/2g8u2c6MBi0YLNnNQpBYOiWg== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -7417,13 +7432,13 @@ ethereum-cryptography@^0.1.3: setimmediate "^1.0.5" ethereum-cryptography@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.2.0.tgz#6a163130141abe85e0300646eee95323ae725555" - integrity sha512-6w64pvUvH3InBwNhax5j7brR4aGbdbd9B1R1uRwK9jNMTmyWMd7mSBxcGlMQv23qh+l/n0yjbQp2j0Q/gxhRdw== + version "0.2.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.2.3.tgz#956b069b7d938899d1e925ece65e95d558c58298" + integrity sha512-Eefl/gIqi9p803opeheSLMeIW0LrGy8EnMr7S2NW0TWQNgjywgoQH2gKDw2UPf1Ybdmd9zvCnP7b6khWvlvAJw== dependencies: - micro-base "^0.9.0" - noble-hashes "^0.2.1" - noble-secp256k1 "^1.2.14" + "@noble/hashes" "^0.5.2" + "@noble/secp256k1" "^1.3.3" + micro-base "^0.10.0" ethereum-provider@0.0.6: version "0.0.6" @@ -8125,11 +8140,16 @@ follow-redirects@1.5.10: dependencies: debug "=3.1.0" -follow-redirects@^1.0.0, follow-redirects@^1.14.4: +follow-redirects@^1.0.0: version "1.14.5" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.5.tgz#f09a5848981d3c772b5392309778523f8d85c381" integrity sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA== +follow-redirects@^1.14.4: + version "1.14.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.6.tgz#8cfb281bbc035b3c067d6cd975b0f6ade6e855cd" + integrity sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A== + for-each@^0.3.3, for-each@~0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" @@ -8625,6 +8645,11 @@ globule@^1.0.0: lodash "~4.17.10" minimatch "~3.0.2" +goober@^2.0.35: + version "2.1.1" + resolved "https://registry.yarnpkg.com/goober/-/goober-2.1.1.tgz#2328a6dae015c3cd30fc55a70090037a244ad2f6" + integrity sha512-TkGCqHxE4g5DtdpwxFCi53bXRtvw0BoSgCihVSIOioe9kfkqin5wXG8BQKykN0tjzmxZJ81qU2KWinZf5qKVlw== + got@9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" @@ -11283,10 +11308,10 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -micro-base@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/micro-base/-/micro-base-0.9.0.tgz#09cfe20285bec0ea97f41dc3d10e3fba3d0266ee" - integrity sha512-4+tOMKidYT5nQ6/UNmYrGVO5PMcnJdfuR4NC8HK8s2H61B4itOhA9yrsjBdqGV7ecdtej36x3YSIfPLRmPrspg== +micro-base@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/micro-base/-/micro-base-0.10.0.tgz#2a324c7836920b2cbca674f46d0644b7e56e4012" + integrity sha512-huKVznyEDZVO7pcYoVZMBR6prkxzkJSTT96T2tyHY1Wk3Sywcpb7NwxHAwKf/fmfqsdFuY2rDRR3UYkY6Uh9LQ== microevent.ts@~0.1.1: version "0.1.1" @@ -11689,16 +11714,6 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -noble-hashes@^0.2.1: - version "0.2.2" - resolved "https://registry.yarnpkg.com/noble-hashes/-/noble-hashes-0.2.2.tgz#f174cc18ba2fd1ee8b416e4da568f6706f00bb34" - integrity sha512-5wKykPleHvJ8y6htmb4+4ecgHA0n1F4n0xtfMdXjkhqoQsZE9QTp+nriQzss9RQKJ86GUWZwXnq0CM4VW8ApSg== - -noble-secp256k1@^1.2.14: - version "1.2.14" - resolved "https://registry.yarnpkg.com/noble-secp256k1/-/noble-secp256k1-1.2.14.tgz#39429c941d51211ca40161569cee03e61d72599e" - integrity sha512-GSCXyoZBUaaPwVWdYncMEmzlSUjF9J/YeEHpklYJCyg8wPuJP3NzDx0BkiwArzINkdX2HJHvUJhL6vVWPOQQcg== - node-abi@^2.7.0: version "2.30.1" resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.1.tgz#c437d4b1fe0e285aaf290d45b45d4d7afedac4cf" @@ -13365,10 +13380,10 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^2.3.2: - version "2.5.0" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.0.tgz#a6370e2d4594e093270419d9cc47f7670488f893" - integrity sha512-FM/zAKgWTxj40rH03VxzIPdXmj39SwSjwG0heUcNFwI+EMZJnY93yAiKXM3dObIKAM5TA88werc8T/EwhB45eg== +prettier@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" + integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== pretty-bytes@^5.3.0: version "5.6.0" @@ -13778,6 +13793,13 @@ react-error-overlay@^6.0.9: resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== +react-hot-toast@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/react-hot-toast/-/react-hot-toast-2.1.1.tgz#56409ab406b534e9e58274cf98d80355ba0fdda0" + integrity sha512-Odrp4wue0fHh0pOfZt5H+9nWCMtqs3wdlFSzZPp7qsxfzmbE26QmGWIh6hG43CukiPeOjA8WQhBJU8JwtWvWbQ== + dependencies: + goober "^2.0.35" + react-is@^16.7.0, react-is@^16.8.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" From db42bf7e38dd94703a4bacca9312c0265e668137 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Thu, 23 Dec 2021 17:51:54 +0200 Subject: [PATCH 032/211] fix: BigInt conversion issue [skip ci] (#18) --- package.json | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 8405e9f6..f7a1deb0 100644 --- a/package.json +++ b/package.json @@ -34,9 +34,11 @@ }, "browserslist": { "production": [ - ">0.2%", - "not dead", - "not op_mini all" + "chrome >= 67", + "edge >= 79", + "firefox >= 68", + "opera >= 54", + "safari >= 14" ], "development": [ "last 1 chrome version", From c986e1a6f308a324f24c9938f5c97d099e543fc2 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Mon, 27 Dec 2021 13:59:44 +0200 Subject: [PATCH 033/211] fix: change transactions to transfers (#40) --- src/components/Features/Account/Account.js | 22 ++-- .../Features/ToastProvider/ToastProvider.js | 117 ++++++++++-------- .../TransferLog.js} | 22 ++-- .../TransferLog.module.scss} | 2 +- .../TransferLog.strings.js} | 2 +- src/components/Features/index.js | 2 +- .../PendingTransactionToast.js | 29 ----- .../PendingTransactionToast.module.scss | 3 - .../PendingTransferToast.js | 29 +++++ .../PendingTransferToast.module.scss | 3 + .../PendingTransferToast.strings.js} | 2 +- .../WithdrawalTransferToast.js} | 16 +-- .../WithdrawalTransferToast.module.scss} | 2 +- .../WithdrawalTransferToast.strings.js} | 2 +- src/components/UI/Toast/index.js | 4 +- .../TransferLogContainer.js} | 10 +- .../TransferLogContainer.module.scss} | 2 +- .../TransferLogContainer.strings.js} | 2 +- src/components/UI/index.js | 2 +- src/config/strings.json | 14 +-- src/constants.js | 2 +- src/hooks/useTransfer.js | 12 +- .../TransactionsProvider.js | 101 --------------- src/providers/TransactionsProvider/index.js | 4 - .../transactions-context.js | 6 - .../transactions-hooks.js | 25 ---- .../transactions-reducer.js | 29 ----- .../TransfersProvider/TransfersProvider.js | 103 +++++++++++++++ src/providers/TransfersProvider/index.js | 4 + .../TransfersProvider/transfers-context.js | 6 + .../TransfersProvider/transfers-hooks.js | 13 ++ .../TransfersProvider/transfers-reducer.js | 29 +++++ src/providers/index.js | 4 +- 33 files changed, 311 insertions(+), 314 deletions(-) rename src/components/Features/{TransactionLog/TransactionLog.js => TransferLog/TransferLog.js} (81%) rename src/components/Features/{TransactionLog/TransactionLog.module.scss => TransferLog/TransferLog.module.scss} (97%) rename src/components/Features/{TransactionLog/TransactionLog.strings.js => TransferLog/TransferLog.strings.js} (76%) delete mode 100644 src/components/UI/Toast/PendingTransactionToast/PendingTransactionToast.js delete mode 100644 src/components/UI/Toast/PendingTransactionToast/PendingTransactionToast.module.scss create mode 100644 src/components/UI/Toast/PendingTransferToast/PendingTransferToast.js create mode 100644 src/components/UI/Toast/PendingTransferToast/PendingTransferToast.module.scss rename src/components/UI/Toast/{PendingTransactionToast/PendingTransactionToast.strings.js => PendingTransferToast/PendingTransferToast.strings.js} (74%) rename src/components/UI/Toast/{WithdrawalTransactionToast/WithdrawalTransactionToast.js => WithdrawalTransferToast/WithdrawalTransferToast.js} (79%) rename src/components/UI/Toast/{WithdrawalTransactionToast/WithdrawalTransactionToast.module.scss => WithdrawalTransferToast/WithdrawalTransferToast.module.scss} (94%) rename src/components/UI/Toast/{WithdrawalTransactionToast/WithdrawalTransactionToast.strings.js => WithdrawalTransferToast/WithdrawalTransferToast.strings.js} (73%) rename src/components/UI/{TransactionLogContainer/TransactionLogContainer.js => TransferLogContainer/TransferLogContainer.js} (82%) rename src/components/UI/{TransactionLogContainer/TransactionLogContainer.module.scss => TransferLogContainer/TransferLogContainer.module.scss} (97%) rename src/components/UI/{TransactionLogContainer/TransactionLogContainer.strings.js => TransferLogContainer/TransferLogContainer.strings.js} (74%) delete mode 100644 src/providers/TransactionsProvider/TransactionsProvider.js delete mode 100644 src/providers/TransactionsProvider/index.js delete mode 100644 src/providers/TransactionsProvider/transactions-context.js delete mode 100644 src/providers/TransactionsProvider/transactions-hooks.js delete mode 100644 src/providers/TransactionsProvider/transactions-reducer.js create mode 100644 src/providers/TransfersProvider/TransfersProvider.js create mode 100644 src/providers/TransfersProvider/index.js create mode 100644 src/providers/TransfersProvider/transfers-context.js create mode 100644 src/providers/TransfersProvider/transfers-hooks.js create mode 100644 src/providers/TransfersProvider/transfers-reducer.js diff --git a/src/components/Features/Account/Account.js b/src/components/Features/Account/Account.js index cdb7c3bf..9dc2ccb7 100644 --- a/src/components/Features/Account/Account.js +++ b/src/components/Features/Account/Account.js @@ -2,7 +2,7 @@ import React from 'react'; import {LINKS} from '../../../constants'; import {useTransfer} from '../../../hooks'; -import {useAccountTransactions} from '../../../providers/TransactionsProvider'; +import {useAccountTransfers} from '../../../providers/TransfersProvider'; import {useWallets} from '../../../providers/WalletsProvider'; import { AccountAddress, @@ -10,29 +10,29 @@ import { LogoutButton, Menu, MenuTitle, - TransactionLogContainer + TransferLogContainer } from '../../UI'; import {LinkButton} from '../../UI/LinkButton/LinkButton'; import {useBridgeActions} from '../Bridge/Bridge.hooks'; -import {TransactionLog} from '../TransactionLog/TransactionLog'; import {useTransferData} from '../Transfer/Transfer.hooks'; +import {TransferLog} from '../TransferLog/TransferLog'; import styles from './Account.module.scss'; import {TITLE_TXT} from './Account.strings'; export const Account = () => { const {showTransferMenu} = useBridgeActions(); const {account, chainId, resetWallet} = useWallets(); - const transactions = useAccountTransactions(account); + const transfers = useAccountTransfers(account); const {isEthereum, isStarknet, fromNetwork} = useTransferData(); const {finalizeTransferFromStarknet} = useTransfer(); - const renderTransactions = () => { - return transactions.length - ? transactions.map((tx, index) => ( - <TransactionLog + const renderTransfers = () => { + return transfers.length + ? transfers.map((transfer, index) => ( + <TransferLog key={index} - tx={tx} - onWithdrawClick={() => finalizeTransferFromStarknet(tx)} + transfer={transfer} + onWithdrawClick={() => finalizeTransferFromStarknet(transfer)} /> )) : null; @@ -53,7 +53,7 @@ export const Account = () => { {isStarknet && ( <LinkButton text={LINKS.VOYAGER.text} url={LINKS.VOYAGER.accountUrl(chainId, account)} /> )} - <TransactionLogContainer>{renderTransactions()}</TransactionLogContainer> + <TransferLogContainer>{renderTransfers()}</TransferLogContainer> <LogoutButton isDisabled={isStarknet} onClick={resetWallet} /> </div> </Menu> diff --git a/src/components/Features/ToastProvider/ToastProvider.js b/src/components/Features/ToastProvider/ToastProvider.js index c3230d3e..1e6a301e 100644 --- a/src/components/Features/ToastProvider/ToastProvider.js +++ b/src/components/Features/ToastProvider/ToastProvider.js @@ -5,14 +5,14 @@ import useDeepCompareEffect from 'use-deep-compare-effect'; import {ActionType, NetworkType, TransactionStatus} from '../../../enums'; import {usePrevious, useTransfer} from '../../../hooks'; -import {useTransactions} from '../../../providers/TransactionsProvider'; +import {useTransfers} from '../../../providers/TransfersProvider'; import {getFullTime} from '../../../utils'; -import {PendingTransactionToast, ToastBody, WithdrawalTransactionToast} from '../../UI'; +import {PendingTransferToast, ToastBody, WithdrawalTransferToast} from '../../UI'; import styles from './ToastProvider.module.scss'; export const ToastProvider = () => { - const {transactions} = useTransactions(); - const prevTransactions = usePrevious(transactions); + const {transfers} = useTransfers(); + const prevTransfers = usePrevious(transfers); const toastsMap = useRef({}); const toastsDismissed = useRef({}); const {finalizeTransferFromStarknet} = useTransfer(); @@ -20,88 +20,95 @@ export const ToastProvider = () => { const consumedStatus = [TransactionStatus.PENDING, TransactionStatus.ACCEPTED_ON_L2]; useDeepCompareEffect(() => { - transactions.forEach(tx => { - const prevTx = prevTransactions?.find(prevTx => prevTx.id === tx.id); - handleToast(tx, prevTx); + transfers.forEach(transfer => { + const prevTransfer = prevTransfers?.find(prevTransfer => prevTransfer.id === transfer.id); + handleToast(transfer, prevTransfer); }); - }, [transactions]); + }, [transfers]); - const handleToast = (tx, prevTx) => { - if (tx.type === ActionType.TRANSFER_TO_STARKNET) { - handleTransferToStarknetToast(tx, prevTx); + const handleToast = (transfer, prevTransfer) => { + if (transfer.type === ActionType.TRANSFER_TO_STARKNET) { + handleTransferToStarknetToast(transfer, prevTransfer); } else { - handleTransferFromStarknetToast(tx); + handleTransferFromStarknetToast(transfer); } }; - const handleTransferToStarknetToast = (tx, prevTx) => { - const isChanged = prevTx && tx.status !== prevTx.status; - if (pendingStatuses.includes(tx.status)) { - showPendingTransactionToast(tx); - } else if (isChanged && consumedStatus.includes(tx.status)) { - showConsumedTransactionToast(tx); + const handleTransferToStarknetToast = (transfer, prevTransfer) => { + const isChanged = prevTransfer && transfer.status !== prevTransfer.status; + if (pendingStatuses.includes(transfer.status)) { + showPendingTransferToast(transfer); + } else if (isChanged && consumedStatus.includes(transfer.status)) { + showConsumedTransferToast(transfer); } }; - const handleTransferFromStarknetToast = tx => { - if (pendingStatuses.includes(tx.status)) { - showPendingTransactionToast(tx); - } else if (!tx.eth_hash && tx.status === TransactionStatus.ACCEPTED_ON_L1) { - showWithdrawalToast(tx); + const handleTransferFromStarknetToast = transfer => { + if (pendingStatuses.includes(transfer.status)) { + showPendingTransferToast(transfer); + } else if (!transfer.eth_hash && transfer.status === TransactionStatus.ACCEPTED_ON_L1) { + showWithdrawalToast(transfer); } }; - const showPendingTransactionToast = tx => { - let toastId = getToastId(tx); + const showPendingTransferToast = transfer => { + let toastId = getToastId(transfer); if (!toastId) { - toastId = toast.loading(renderPendingTransactionToast(tx, true)); - toastsMap.current[tx.id] = toastId; + toastId = toast.loading(renderPendingTransferToast(transfer, true)); + toastsMap.current[transfer.id] = toastId; } }; - const showConsumedTransactionToast = tx => { - const toastId = getToastId(tx); - toastsMap.current[tx.id] = toast.success(renderPendingTransactionToast(tx), { + const showConsumedTransferToast = transfer => { + const toastId = getToastId(transfer); + toastsMap.current[transfer.id] = toast.success(renderPendingTransferToast(transfer), { id: toastId }); }; - const showWithdrawalToast = tx => { - const toastId = getToastId(tx); + const showWithdrawalToast = transfer => { + const toastId = getToastId(transfer); if (!toastId && !isToastDismissed(toastId)) { - toastsMap.current[tx.id] = toast.custom(t => renderWithdrawalTransactionToast(t, tx), { - id: toastId - }); + toastsMap.current[transfer.id] = toast.custom( + t => renderWithdrawalTransferToast(t, transfer), + { + id: toastId + } + ); } }; - const renderPendingTransactionToast = (tx, isLoading) => ( - <PendingTransactionToast isLoading={isLoading} tx={tx} onClose={() => dismissToast(tx)} /> + const renderPendingTransferToast = (transfer, isLoading) => ( + <PendingTransferToast + isLoading={isLoading} + transfer={transfer} + onClose={() => dismissToast(transfer)} + /> ); - const renderWithdrawalTransactionToast = (t, tx) => ( - <WithdrawalTransactionToast + const renderWithdrawalTransferToast = (t, transfer) => ( + <WithdrawalTransferToast t={t} - tx={tx} - onClose={() => dismissToast(tx)} - onDismiss={() => dismissToast(tx)} - onWithdrawal={() => onWithdrawalClick(tx)} + transfer={transfer} + onClose={() => dismissToast(transfer)} + onDismiss={() => dismissToast(transfer)} + onWithdrawal={() => onWithdrawalClick(transfer)} /> ); - const getToastId = tx => toastsMap.current[tx.id]; + const getToastId = transfer => toastsMap.current[transfer.id]; const isToastDismissed = id => !!toastsDismissed[id]; - const dismissToast = tx => { - const toastId = getToastId(tx); + const dismissToast = transfer => { + const toastId = getToastId(transfer); toast.dismiss(toastId); toastsDismissed.current[toastId] = true; }; - const onWithdrawalClick = async tx => { - await finalizeTransferFromStarknet(tx); - dismissToast(tx); + const onWithdrawalClick = async transfer => { + await finalizeTransferFromStarknet(transfer); + dismissToast(transfer); }; return ( @@ -115,24 +122,24 @@ export const ToastProvider = () => { ); }; -export const TransactionData = ({tx, style}) => { +export const TransferData = ({transfer, style}) => { return ( <> <ToastBody body={ - tx.type === ActionType.TRANSFER_TO_STARKNET + transfer.type === ActionType.TRANSFER_TO_STARKNET ? `${NetworkType.ETHEREUM.name} -> ${NetworkType.STARKNET.name}` : `${NetworkType.STARKNET.name} -> ${NetworkType.ETHEREUM.name}` } style={style} /> - <ToastBody body={`${tx.amount} ${tx.symbol}`} style={style} /> - <ToastBody body={getFullTime(tx.timestamp)} style={style} /> + <ToastBody body={`${transfer.amount} ${transfer.symbol}`} style={style} /> + <ToastBody body={getFullTime(transfer.timestamp)} style={style} /> </> ); }; -TransactionData.propTypes = { - tx: PropTypes.object, +TransferData.propTypes = { + transfer: PropTypes.object, style: PropTypes.object }; diff --git a/src/components/Features/TransactionLog/TransactionLog.js b/src/components/Features/TransferLog/TransferLog.js similarity index 81% rename from src/components/Features/TransactionLog/TransactionLog.js rename to src/components/Features/TransferLog/TransferLog.js index 730902c8..0303c8c3 100644 --- a/src/components/Features/TransactionLog/TransactionLog.js +++ b/src/components/Features/TransferLog/TransferLog.js @@ -2,7 +2,7 @@ import PropTypes from 'prop-types'; import React, {useEffect, useState} from 'react'; import {LINKS} from '../../../constants'; -import {TransactionStatus} from '../../../enums'; +import {NetworkType, TransactionStatus} from '../../../enums'; import {useColors} from '../../../hooks'; import {useWallets} from '../../../providers/WalletsProvider'; import {getFullTime} from '../../../utils'; @@ -10,22 +10,22 @@ import {Button, CryptoLogo} from '../../UI'; import {CryptoLogoSize} from '../../UI/CryptoLogo/CryptoLogo.enums'; import {LinkButton} from '../../UI/LinkButton/LinkButton'; import {useTransferData} from '../Transfer/Transfer.hooks'; -import styles from './TransactionLog.module.scss'; -import {WITHDRAWAL_BTN_TXT} from './TransactionLog.strings'; +import styles from './TransferLog.module.scss'; +import {WITHDRAWAL_BTN_TXT} from './TransferLog.strings'; -export const TransactionLog = ({tx, onWithdrawClick}) => { - const {symbol, timestamp, name, amount, status, eth_hash, starknet_hash} = tx; +export const TransferLog = ({transfer, onWithdrawClick}) => { + const {symbol, timestamp, name, amount, status, eth_hash, starknet_hash} = transfer; const [sign, setSign] = useState(''); const {action, isEthereum} = useTransferData(); const {chainId} = useWallets(); useEffect(() => { - setSign(tx.type === action ? '-' : '+'); + setSign(transfer.type === action ? '-' : '+'); }, [action]); return ( <> - <div className={styles.transactionLog}> + <div className={styles.transferLog}> <div className={styles.left}> <CryptoLogo size={CryptoLogoSize.SMALL} symbol={symbol} /> <div> @@ -43,13 +43,13 @@ export const TransactionLog = ({tx, onWithdrawClick}) => { <div className={styles.links}> {eth_hash && ( <LinkButton - text={LINKS.ETHERSCAN.text} + text={`${NetworkType.ETHEREUM.name} Tx`} url={LINKS.ETHERSCAN.txUrl(chainId, eth_hash)} /> )} {!eth_hash && isEthereum && <WithdrawalButton onClick={onWithdrawClick} />} <LinkButton - text={LINKS.VOYAGER.text} + text={`${NetworkType.STARKNET.name} Tx`} url={LINKS.VOYAGER.txUrl(chainId, starknet_hash)} /> </div> @@ -83,7 +83,7 @@ WithdrawalButton.propTypes = { onClick: PropTypes.func }; -TransactionLog.propTypes = { - tx: PropTypes.object, +TransferLog.propTypes = { + transfer: PropTypes.object, onWithdrawClick: PropTypes.func }; diff --git a/src/components/Features/TransactionLog/TransactionLog.module.scss b/src/components/Features/TransferLog/TransferLog.module.scss similarity index 97% rename from src/components/Features/TransactionLog/TransactionLog.module.scss rename to src/components/Features/TransferLog/TransferLog.module.scss index b60b93af..96af4b46 100644 --- a/src/components/Features/TransactionLog/TransactionLog.module.scss +++ b/src/components/Features/TransferLog/TransferLog.module.scss @@ -3,7 +3,7 @@ $color: $--color-alpha-6; $hr-color: $--color-alpha-3; -.transactionLog { +.transferLog { display: flex; flex-direction: row; justify-content: space-between; diff --git a/src/components/Features/TransactionLog/TransactionLog.strings.js b/src/components/Features/TransferLog/TransferLog.strings.js similarity index 76% rename from src/components/Features/TransactionLog/TransactionLog.strings.js rename to src/components/Features/TransferLog/TransferLog.strings.js index fcd42558..61d678b5 100644 --- a/src/components/Features/TransactionLog/TransactionLog.strings.js +++ b/src/components/Features/TransferLog/TransferLog.strings.js @@ -1,7 +1,7 @@ import strings from '../../../config/strings.json'; const { - transactionLog: {withdrawal_btn_txt} + transferLog: {withdrawal_btn_txt} } = strings; export const WITHDRAWAL_BTN_TXT = withdrawal_btn_txt; diff --git a/src/components/Features/index.js b/src/components/Features/index.js index 172a7704..6e2387b6 100644 --- a/src/components/Features/index.js +++ b/src/components/Features/index.js @@ -4,5 +4,5 @@ export * from './Login/Login'; export * from './ModalProvider/ModalProvider'; export * from './SelectToken/SelectToken'; export * from './Transfer/Transfer'; -export * from './TransactionLog/TransactionLog'; +export * from './TransferLog/TransferLog'; export * from './ToastProvider/ToastProvider'; diff --git a/src/components/UI/Toast/PendingTransactionToast/PendingTransactionToast.js b/src/components/UI/Toast/PendingTransactionToast/PendingTransactionToast.js deleted file mode 100644 index 6c27b6ba..00000000 --- a/src/components/UI/Toast/PendingTransactionToast/PendingTransactionToast.js +++ /dev/null @@ -1,29 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; - -import {TransactionStatus} from '../../../../enums'; -import {TransactionData} from '../../../Features'; -import {ToastHeader} from '../ToastHeader/ToastHeader'; -import {ToastSeparator} from '../ToastSeparator/ToastSeparator'; -import styles from './PendingTransactionToast.module.scss'; -import {CONSUMED_TXT, PENDING_TXT} from './PendingTransactionToast.strings'; - -export const PendingTransactionToast = ({tx, isLoading, onClose}) => { - return ( - <div className={styles.pendingTransactionToast}> - <ToastHeader - title={tx.status === TransactionStatus.ACCEPTED_ON_L2 ? CONSUMED_TXT : PENDING_TXT} - withClose={!isLoading} - onClose={onClose} - /> - <ToastSeparator /> - <TransactionData style={{fontSize: '12px'}} tx={tx} /> - </div> - ); -}; - -PendingTransactionToast.propTypes = { - tx: PropTypes.object, - isLoading: PropTypes.bool, - onClose: PropTypes.func -}; diff --git a/src/components/UI/Toast/PendingTransactionToast/PendingTransactionToast.module.scss b/src/components/UI/Toast/PendingTransactionToast/PendingTransactionToast.module.scss deleted file mode 100644 index c0b2fa13..00000000 --- a/src/components/UI/Toast/PendingTransactionToast/PendingTransactionToast.module.scss +++ /dev/null @@ -1,3 +0,0 @@ -.pendingTransactionToast { - padding: 0 10px; -} diff --git a/src/components/UI/Toast/PendingTransferToast/PendingTransferToast.js b/src/components/UI/Toast/PendingTransferToast/PendingTransferToast.js new file mode 100644 index 00000000..b3977a06 --- /dev/null +++ b/src/components/UI/Toast/PendingTransferToast/PendingTransferToast.js @@ -0,0 +1,29 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {TransactionStatus} from '../../../../enums'; +import {TransferData} from '../../../Features'; +import {ToastHeader} from '../ToastHeader/ToastHeader'; +import {ToastSeparator} from '../ToastSeparator/ToastSeparator'; +import styles from './PendingTransferToast.module.scss'; +import {CONSUMED_TXT, PENDING_TXT} from './PendingTransferToast.strings'; + +export const PendingTransferToast = ({transfer, isLoading, onClose}) => { + return ( + <div className={styles.pendingTransferToast}> + <ToastHeader + title={transfer.status === TransactionStatus.ACCEPTED_ON_L2 ? CONSUMED_TXT : PENDING_TXT} + withClose={!isLoading} + onClose={onClose} + /> + <ToastSeparator /> + <TransferData style={{fontSize: '12px'}} transfer={transfer} /> + </div> + ); +}; + +PendingTransferToast.propTypes = { + transfer: PropTypes.object, + isLoading: PropTypes.bool, + onClose: PropTypes.func +}; diff --git a/src/components/UI/Toast/PendingTransferToast/PendingTransferToast.module.scss b/src/components/UI/Toast/PendingTransferToast/PendingTransferToast.module.scss new file mode 100644 index 00000000..f16b8c58 --- /dev/null +++ b/src/components/UI/Toast/PendingTransferToast/PendingTransferToast.module.scss @@ -0,0 +1,3 @@ +.pendingTransferToast { + padding: 0 10px; +} diff --git a/src/components/UI/Toast/PendingTransactionToast/PendingTransactionToast.strings.js b/src/components/UI/Toast/PendingTransferToast/PendingTransferToast.strings.js similarity index 74% rename from src/components/UI/Toast/PendingTransactionToast/PendingTransactionToast.strings.js rename to src/components/UI/Toast/PendingTransferToast/PendingTransferToast.strings.js index 225cc65c..91c135db 100644 --- a/src/components/UI/Toast/PendingTransactionToast/PendingTransactionToast.strings.js +++ b/src/components/UI/Toast/PendingTransferToast/PendingTransferToast.strings.js @@ -1,7 +1,7 @@ import strings from '../../../../config/strings.json'; const { - pendingTransactionToast: {pending_txt, consumed_txt} + pendingTransferToast: {pending_txt, consumed_txt} } = strings; export const PENDING_TXT = pending_txt; diff --git a/src/components/UI/Toast/WithdrawalTransactionToast/WithdrawalTransactionToast.js b/src/components/UI/Toast/WithdrawalTransferToast/WithdrawalTransferToast.js similarity index 79% rename from src/components/UI/Toast/WithdrawalTransactionToast/WithdrawalTransactionToast.js rename to src/components/UI/Toast/WithdrawalTransferToast/WithdrawalTransferToast.js index 807a9cf3..0e2a88d6 100644 --- a/src/components/UI/Toast/WithdrawalTransactionToast/WithdrawalTransactionToast.js +++ b/src/components/UI/Toast/WithdrawalTransferToast/WithdrawalTransferToast.js @@ -4,20 +4,20 @@ import React from 'react'; import {ReactComponent as EthereumLogo} from '../../../../assets/svg/tokens/eth.svg'; import {useColors} from '../../../../hooks'; -import {TransactionData} from '../../../Features'; +import {TransferData} from '../../../Features'; import {ToastBody} from '../ToastBody/ToastBody'; import {ToastButton, ToastButtons} from '../ToastButton/ToastButton'; import {ToastHeader} from '../ToastHeader/ToastHeader'; import {ToastSeparator} from '../ToastSeparator/ToastSeparator'; -import styles from './WithdrawalTransactionToast.module.scss'; +import styles from './WithdrawalTransferToast.module.scss'; import { BODY_TXT, DISMISS_BTN_TXT, TITLE_TXT, WITHDRAWAL_BTN_TXT -} from './WithdrawalTransactionToast.strings'; +} from './WithdrawalTransferToast.strings'; -export const WithdrawalTransactionToast = ({t, tx, onDismiss, onWithdrawal, onClose}) => { +export const WithdrawalTransferToast = ({t, transfer, onDismiss, onWithdrawal, onClose}) => { const {colorBeta, colorOmega1} = useColors(); return ( <Transition @@ -30,7 +30,7 @@ export const WithdrawalTransactionToast = ({t, tx, onDismiss, onWithdrawal, onCl leaveTo="opacity-0" show={t.visible} > - <div className={styles.withdrawalTransactionToast}> + <div className={styles.withdrawalTransferToast}> <div className={styles.container}> <div className={styles.left}> <EthereumLogo style={{opacity: 0.5}} /> @@ -43,7 +43,7 @@ export const WithdrawalTransactionToast = ({t, tx, onDismiss, onWithdrawal, onCl <ToastButton color={colorBeta} text={WITHDRAWAL_BTN_TXT} onClick={onWithdrawal} /> </ToastButtons> <ToastSeparator /> - <TransactionData style={{fontSize: '10px'}} tx={tx} /> + <TransferData style={{fontSize: '10px'}} transfer={transfer} /> </div> </div> </div> @@ -51,9 +51,9 @@ export const WithdrawalTransactionToast = ({t, tx, onDismiss, onWithdrawal, onCl ); }; -WithdrawalTransactionToast.propTypes = { +WithdrawalTransferToast.propTypes = { t: PropTypes.object, - tx: PropTypes.object, + transfer: PropTypes.object, onDismiss: PropTypes.func, onWithdrawal: PropTypes.func, onClose: PropTypes.func diff --git a/src/components/UI/Toast/WithdrawalTransactionToast/WithdrawalTransactionToast.module.scss b/src/components/UI/Toast/WithdrawalTransferToast/WithdrawalTransferToast.module.scss similarity index 94% rename from src/components/UI/Toast/WithdrawalTransactionToast/WithdrawalTransactionToast.module.scss rename to src/components/UI/Toast/WithdrawalTransferToast/WithdrawalTransferToast.module.scss index 75df4f14..9d535987 100644 --- a/src/components/UI/Toast/WithdrawalTransactionToast/WithdrawalTransactionToast.module.scss +++ b/src/components/UI/Toast/WithdrawalTransferToast/WithdrawalTransferToast.module.scss @@ -3,7 +3,7 @@ $background-color: $--color-white; $left-background-color: $--color-white-2; -.withdrawalTransactionToast { +.withdrawalTransferToast { width: 400px; background: $background-color; box-shadow: 0 12px 16px -4px rgba(16, 24, 40, 0.1), 0px 4px 6px -2px rgba(16, 24, 40, 0.05); diff --git a/src/components/UI/Toast/WithdrawalTransactionToast/WithdrawalTransactionToast.strings.js b/src/components/UI/Toast/WithdrawalTransferToast/WithdrawalTransferToast.strings.js similarity index 73% rename from src/components/UI/Toast/WithdrawalTransactionToast/WithdrawalTransactionToast.strings.js rename to src/components/UI/Toast/WithdrawalTransferToast/WithdrawalTransferToast.strings.js index a50d44d8..8315a0f3 100644 --- a/src/components/UI/Toast/WithdrawalTransactionToast/WithdrawalTransactionToast.strings.js +++ b/src/components/UI/Toast/WithdrawalTransferToast/WithdrawalTransferToast.strings.js @@ -1,7 +1,7 @@ import strings from '../../../../config/strings.json'; const { - withdrawalTransactionToast: {title_txt, body_txt, dismiss_btn_txt, withdrawal_btn_txt} + withdrawalTransferToast: {title_txt, body_txt, dismiss_btn_txt, withdrawal_btn_txt} } = strings; export const TITLE_TXT = title_txt; diff --git a/src/components/UI/Toast/index.js b/src/components/UI/Toast/index.js index d7fa98dc..67367299 100644 --- a/src/components/UI/Toast/index.js +++ b/src/components/UI/Toast/index.js @@ -2,5 +2,5 @@ export * from './ToastBody/ToastBody'; export * from './ToastButton/ToastButton'; export * from './ToastHeader/ToastHeader'; export * from './ToastSeparator/ToastSeparator'; -export * from './WithdrawalTransactionToast/WithdrawalTransactionToast'; -export * from './PendingTransactionToast/PendingTransactionToast'; +export * from './WithdrawalTransferToast/WithdrawalTransferToast'; +export * from './PendingTransferToast/PendingTransferToast'; diff --git a/src/components/UI/TransactionLogContainer/TransactionLogContainer.js b/src/components/UI/TransferLogContainer/TransferLogContainer.js similarity index 82% rename from src/components/UI/TransactionLogContainer/TransactionLogContainer.js rename to src/components/UI/TransferLogContainer/TransferLogContainer.js index 91ab9826..81047fb5 100644 --- a/src/components/UI/TransactionLogContainer/TransactionLogContainer.js +++ b/src/components/UI/TransferLogContainer/TransferLogContainer.js @@ -3,15 +3,15 @@ import React, {useState} from 'react'; import {ReactComponent as CollapseIcon} from '../../../assets/svg/icons/collapse.svg'; import {toClasses} from '../../../utils'; -import styles from './TransactionLogContainer.module.scss'; +import styles from './TransferLogContainer.module.scss'; import { EMPTY_MSG_TXT, OVERVIEW_TXT, TITLE_TXT, VIEW_MORE_TXT -} from './TransactionLogContainer.strings'; +} from './TransferLogContainer.strings'; -export const TransactionLogContainer = ({children}) => { +export const TransferLogContainer = ({children}) => { const [showChildren, setShowChildren] = useState(false); const toggleShowChildren = () => { @@ -34,7 +34,7 @@ export const TransactionLogContainer = ({children}) => { }; return ( - <div className={styles.transactionLogContainer}> + <div className={styles.transferLogContainer}> <div className={toClasses(styles.title, showChildren && styles.showChildren)}> {TITLE_TXT} {children && ( @@ -48,6 +48,6 @@ export const TransactionLogContainer = ({children}) => { ); }; -TransactionLogContainer.propTypes = { +TransferLogContainer.propTypes = { children: PropTypes.oneOfType([PropTypes.array, PropTypes.object]) }; diff --git a/src/components/UI/TransactionLogContainer/TransactionLogContainer.module.scss b/src/components/UI/TransferLogContainer/TransferLogContainer.module.scss similarity index 97% rename from src/components/UI/TransactionLogContainer/TransactionLogContainer.module.scss rename to src/components/UI/TransferLogContainer/TransferLogContainer.module.scss index 03f769d7..6462d5a7 100644 --- a/src/components/UI/TransactionLogContainer/TransactionLogContainer.module.scss +++ b/src/components/UI/TransferLogContainer/TransferLogContainer.module.scss @@ -5,7 +5,7 @@ $border-color: $--color-alpha-3; $empty-msg-color: $--color-white-1; $view-more-color: $--color-gamma-1; -.transactionLogContainer { +.transferLogContainer { color: $color; padding: 13px; border-radius: 7px; diff --git a/src/components/UI/TransactionLogContainer/TransactionLogContainer.strings.js b/src/components/UI/TransferLogContainer/TransferLogContainer.strings.js similarity index 74% rename from src/components/UI/TransactionLogContainer/TransactionLogContainer.strings.js rename to src/components/UI/TransferLogContainer/TransferLogContainer.strings.js index cf7f554d..3793e2aa 100644 --- a/src/components/UI/TransactionLogContainer/TransactionLogContainer.strings.js +++ b/src/components/UI/TransferLogContainer/TransferLogContainer.strings.js @@ -1,7 +1,7 @@ import strings from '../../../config/strings.json'; const { - transactionLogContainer: {title_txt, overview_txt, empty_msg_txt, view_more_txt} + transferLogContainer: {title_txt, overview_txt, empty_msg_txt, view_more_txt} } = strings; export const TITLE_TXT = title_txt; diff --git a/src/components/UI/index.js b/src/components/UI/index.js index 9cf53c3f..48203e94 100644 --- a/src/components/UI/index.js +++ b/src/components/UI/index.js @@ -24,7 +24,7 @@ export * from './SearchToken/SearchToken'; export * from './SelectTokenList/SelectTokenList'; export * from './SelectTokenRow/SelectTokenRow'; export * from './WalletLogin/WalletLogin'; -export * from './TransactionLogContainer/TransactionLogContainer'; +export * from './TransferLogContainer/TransferLogContainer'; export * from './LogoutButton/LogoutButton'; export * from './AccountAddress/AccountAddress'; export * from './Modal'; diff --git a/src/config/strings.json b/src/config/strings.json index 2d420b28..7b11ebb8 100644 --- a/src/config/strings.json +++ b/src/config/strings.json @@ -26,7 +26,7 @@ "searchToken": { "search_placeholder": "Token name, symbol, or address" }, - "transactionLog": { + "transferLog": { "withdrawal_btn_txt": "Withdrawal" }, "accountAddress": { @@ -54,10 +54,10 @@ "tokenInput": { "input_placeholder_txt": "0.00" }, - "transactionLogContainer": { - "title_txt": "Transaction log", - "overview_txt": "recent transactions", - "empty_msg_txt": "Transactions will appear here...", + "transferLogContainer": { + "title_txt": "Transfers log", + "overview_txt": "recent transfers", + "empty_msg_txt": "Transfers will appear here...", "view_more_txt": "View more" }, "transactionSubmittedModal": { @@ -90,11 +90,11 @@ }, "error_title": "Transaction error" }, - "pendingTransactionToast": { + "pendingTransferToast": { "pending_txt": "Waiting for transaction to be consumed on StarkNet", "consumed_txt": "Transaction consumed successfully on StarkNet" }, - "withdrawalTransactionToast": { + "withdrawalTransferToast": { "title_txt": "StarkNet finished to process your withdrawal!", "body_txt": "Click on Withdrawal to transfer the funds from StarkNet Bridge to your Ethereum address.", "dismiss_btn_txt": "Dismiss", diff --git a/src/constants.js b/src/constants.js index 2c3f29c8..d341d096 100644 --- a/src/constants.js +++ b/src/constants.js @@ -1,7 +1,7 @@ import {byChainId} from './enums'; import {evaluate} from './utils'; -export const LOCAL_STORAGE_TXS_KEY = 'STARKNET_BRIDGE_TXS'; +export const LOCAL_STORAGE_TRANSFERS_KEY = 'STARKNET_BRIDGE_TRANSFERS'; export const STARKNET_INVOKE_TX_PREFIX = '115923154332517'; export const ETHERSCAN_URL = 'etherscan.io'; export const VOYAGER_URL = 'voyager.online'; diff --git a/src/hooks/useTransfer.js b/src/hooks/useTransfer.js index 2584953e..9e21bdc6 100644 --- a/src/hooks/useTransfer.js +++ b/src/hooks/useTransfer.js @@ -16,7 +16,7 @@ import { } from '../components/Features/Transfer/Transfer.hooks'; import {ActionType} from '../enums'; import {useEthereumToken, useStarknetToken, useTokens} from '../providers/TokensProvider'; -import {useTransactions} from '../providers/TransactionsProvider'; +import {useTransfers} from '../providers/TransfersProvider'; import {useEthereumWallet, useStarknetWallet} from '../providers/WalletsProvider'; import {evaluate, hashEquals, isEth, txHash} from '../utils'; import {eth_listenOnce} from '../utils/contract'; @@ -47,7 +47,7 @@ export const useTransfer = () => { const {account: ethereumAccount, chainId} = useEthereumWallet(); const {account: starknetAccount} = useStarknetWallet(); const {action} = useTransferData(); - const {addTransaction} = useTransactions(); + const {addTransfer} = useTransfers(); const {updateTokens} = useTokens(); const [, , clearAmount] = useAmount(); const showProgressModal = useProgressModal(); @@ -109,7 +109,7 @@ export const useTransfer = () => { showErrorModal(error.message); } else if (data) { showTransactionSubmittedModal(data); - addTransaction(data); + addTransfer(data); updateTokens(); clearAmount(); } @@ -220,10 +220,10 @@ export const useTransfer = () => { }; const finalizeTransferFromStarknet = useCallback( - async tx => { + async transfer => { resetState(); try { - const {symbol, amount} = tx; + const {symbol, amount} = transfer; setIsLoading(true); const ethereumToken = getEthereumToken(symbol); let tokenBridgeContract; @@ -235,7 +235,7 @@ export const useTransfer = () => { setProgress(progressOptions.withdraw(amount, symbol)); const {transactionHash} = await eth_withdraw(ethereumAccount, amount, tokenBridgeContract); setIsLoading(false); - setData({...tx, eth_hash: transactionHash}); + setData({...transfer, eth_hash: transactionHash}); return data; } catch (ex) { setIsLoading(false); diff --git a/src/providers/TransactionsProvider/TransactionsProvider.js b/src/providers/TransactionsProvider/TransactionsProvider.js deleted file mode 100644 index 0e0066ec..00000000 --- a/src/providers/TransactionsProvider/TransactionsProvider.js +++ /dev/null @@ -1,101 +0,0 @@ -import {getStarknet} from '@argent/get-starknet'; -import PropTypes from 'prop-types'; -import React, {useEffect, useReducer} from 'react'; -import useDeepCompareEffect from 'use-deep-compare-effect'; - -import {LOCAL_STORAGE_TXS_KEY} from '../../constants'; -import {TransactionStatus} from '../../enums'; -import {useLogger} from '../../hooks'; -import {StorageManager} from '../../services'; -import {useBlockHash} from '../BlockHashProvider'; -import {TransactionsContext} from './transactions-context'; -import {actions, initialState, reducer} from './transactions-reducer'; - -export const TransactionsProvider = ({children}) => { - const logger = useLogger(TransactionsProvider.displayName); - const [transactions, dispatch] = useReducer(reducer, initialState); - const blockHash = useBlockHash(); - const completedStatuses = [TransactionStatus.ACCEPTED_ON_L1, TransactionStatus.REJECTED]; - - useEffect(() => { - const storedTransactions = StorageManager.getItem(LOCAL_STORAGE_TXS_KEY); - if (Array.isArray(storedTransactions)) { - setTransactions(storedTransactions); - } - }, []); - - useDeepCompareEffect(() => { - const updateTransactions = async () => { - logger.log(`It's time to update transactions!`); - if (!blockHash) { - return; - } - const checkTransaction = async tx => { - if (completedStatuses.includes(tx.status)) { - return tx; - } - if (tx.lastChecked === blockHash) { - return tx; - } - try { - logger.log(`Checking tx status ${tx.starknet_hash}`); - const newStatus = await getStarknet().provider.getTransactionStatus(tx.starknet_hash); - if (tx.status !== newStatus.tx_status) { - logger.log( - !tx.status - ? `New status ${newStatus.tx_status}` - : `Status changed from ${tx.status}->${newStatus.tx_status}` - ); - } - return { - ...tx, - status: newStatus.tx_status, - lastChecked: blockHash - }; - } catch (error) { - logger.error(`Failed to check transaction status: ${tx.starknet_hash}`); - } - return tx; - }; - - const newTransactions = []; - for (const tx of transactions) { - const newTransaction = await checkTransaction(tx); - newTransactions.push(newTransaction); - } - logger.log(`Done update transactions`, {newTransactions}); - if (newTransactions.length) { - setTransactions(newTransactions); - StorageManager.setItem(LOCAL_STORAGE_TXS_KEY, newTransactions); - } - }; - updateTransactions(); - }, [blockHash, transactions]); - - const addTransaction = payload => { - dispatch({ - type: actions.ADD_TRANSACTION, - payload - }); - }; - - const setTransactions = payload => { - dispatch({ - type: actions.SET_TRANSACTIONS, - payload - }); - }; - - const context = { - transactions, - addTransaction - }; - - return <TransactionsContext.Provider value={context}>{children}</TransactionsContext.Provider>; -}; - -TransactionsProvider.displayName = 'TransactionsProvider'; - -TransactionsProvider.propTypes = { - children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) -}; diff --git a/src/providers/TransactionsProvider/index.js b/src/providers/TransactionsProvider/index.js deleted file mode 100644 index f6831b6c..00000000 --- a/src/providers/TransactionsProvider/index.js +++ /dev/null @@ -1,4 +0,0 @@ -export * from './transactions-reducer'; -export * from './transactions-context'; -export * from './transactions-hooks'; -export * from './TransactionsProvider'; diff --git a/src/providers/TransactionsProvider/transactions-context.js b/src/providers/TransactionsProvider/transactions-context.js deleted file mode 100644 index 5cdb196d..00000000 --- a/src/providers/TransactionsProvider/transactions-context.js +++ /dev/null @@ -1,6 +0,0 @@ -import {createContext} from 'react'; - -export const TransactionsContext = createContext({ - transactions: [], - addTransaction: tx => tx -}); diff --git a/src/providers/TransactionsProvider/transactions-hooks.js b/src/providers/TransactionsProvider/transactions-hooks.js deleted file mode 100644 index 4907243b..00000000 --- a/src/providers/TransactionsProvider/transactions-hooks.js +++ /dev/null @@ -1,25 +0,0 @@ -import {useContext, useEffect, useMemo, useState} from 'react'; - -import {TransactionsContext} from './transactions-context'; - -export const useTransactions = () => useContext(TransactionsContext); - -export const useTransaction = hash => { - const {transactions} = useTransactions(); - const [transaction, setTransaction] = useState(); - useEffect(() => { - const storedTransaction = transactions.find(stored => stored.hash === hash); - if (storedTransaction) { - setTransaction(storedTransaction); - } - }, [transactions, hash]); - return transaction; -}; - -export const useAccountTransactions = account => { - const {transactions} = useTransactions(); - return useMemo( - () => transactions.filter(tx => tx.sender === account || tx.recipient === account), - [account, transactions] - ); -}; diff --git a/src/providers/TransactionsProvider/transactions-reducer.js b/src/providers/TransactionsProvider/transactions-reducer.js deleted file mode 100644 index fa067dc9..00000000 --- a/src/providers/TransactionsProvider/transactions-reducer.js +++ /dev/null @@ -1,29 +0,0 @@ -import {v4 as uuidv4} from 'uuid'; - -export const actions = { - SET_TRANSACTIONS: 'Transactions/SET_TRANSACTIONS', - ADD_TRANSACTION: 'Transactions/ADD_TRANSACTION' -}; - -export const initialState = []; - -export const reducer = (state, action) => { - switch (action.type) { - case actions.SET_TRANSACTIONS: - return action.payload; - - case actions.ADD_TRANSACTION: { - const tx = action.payload; - const index = state.findIndex(t => t.id === tx.id); - if (index > -1) { - const txs = [...state]; - txs[index] = tx; - return txs; - } - return [{id: uuidv4(), timestamp: new Date().getTime(), ...tx}, ...state]; - } - - default: - return state; - } -}; diff --git a/src/providers/TransfersProvider/TransfersProvider.js b/src/providers/TransfersProvider/TransfersProvider.js new file mode 100644 index 00000000..b1028d1a --- /dev/null +++ b/src/providers/TransfersProvider/TransfersProvider.js @@ -0,0 +1,103 @@ +import {getStarknet} from '@argent/get-starknet'; +import PropTypes from 'prop-types'; +import React, {useEffect, useReducer} from 'react'; +import useDeepCompareEffect from 'use-deep-compare-effect'; + +import {LOCAL_STORAGE_TRANSFERS_KEY} from '../../constants'; +import {TransactionStatus} from '../../enums'; +import {useLogger} from '../../hooks'; +import {StorageManager} from '../../services'; +import {useBlockHash} from '../BlockHashProvider'; +import {TransfersContext} from './transfers-context'; +import {actions, initialState, reducer} from './transfers-reducer'; + +export const TransfersProvider = ({children}) => { + const logger = useLogger(TransfersProvider.displayName); + const [transfers, dispatch] = useReducer(reducer, initialState); + const blockHash = useBlockHash(); + const completedStatuses = [TransactionStatus.ACCEPTED_ON_L1, TransactionStatus.REJECTED]; + + useEffect(() => { + const storedTransfers = StorageManager.getItem(LOCAL_STORAGE_TRANSFERS_KEY); + if (Array.isArray(storedTransfers)) { + setTransfers(storedTransfers); + } + }, []); + + useDeepCompareEffect(() => { + const updateTransfers = async () => { + logger.log(`It's time to update transfers!`); + if (!blockHash) { + return; + } + const checkTransaction = async transfer => { + if (completedStatuses.includes(transfer.status)) { + return transfer; + } + if (transfer.lastChecked === blockHash) { + return transfer; + } + try { + logger.log(`Checking tx status ${transfer.starknet_hash}`); + const newStatus = await getStarknet().provider.getTransactionStatus( + transfer.starknet_hash + ); + if (transfer.status !== newStatus.tx_status) { + logger.log( + !transfer.status + ? `New status ${newStatus.tx_status}` + : `Status changed from ${transfer.status}->${newStatus.tx_status}` + ); + } + return { + ...transfer, + status: newStatus.tx_status, + lastChecked: blockHash + }; + } catch (error) { + logger.error(`Failed to check transaction status: ${transfer.starknet_hash}`); + } + return transfer; + }; + + const newTransfers = []; + for (const transfer of transfers) { + const newTransfer = await checkTransaction(transfer); + newTransfers.push(newTransfer); + } + logger.log(`Done update transfers`, {newTransfers}); + if (newTransfers.length) { + setTransfers(newTransfers); + StorageManager.setItem(LOCAL_STORAGE_TRANSFERS_KEY, newTransfers); + } + }; + updateTransfers(); + }, [blockHash, transfers]); + + const addTransfer = payload => { + dispatch({ + type: actions.ADD_TRANSFER, + payload + }); + }; + + const setTransfers = payload => { + dispatch({ + type: actions.SET_TRANSFERS, + payload + }); + }; + + const context = { + transfers, + addTransfer + }; + + return <TransfersContext.Provider value={context}>{children}</TransfersContext.Provider>; +}; + +TransfersProvider.displayName = 'TransfersProvider'; + +TransfersProvider.propTypes = { + children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) +}; diff --git a/src/providers/TransfersProvider/index.js b/src/providers/TransfersProvider/index.js new file mode 100644 index 00000000..ffbadaf2 --- /dev/null +++ b/src/providers/TransfersProvider/index.js @@ -0,0 +1,4 @@ +export * from './transfers-reducer'; +export * from './transfers-context'; +export * from './transfers-hooks'; +export * from './TransfersProvider'; diff --git a/src/providers/TransfersProvider/transfers-context.js b/src/providers/TransfersProvider/transfers-context.js new file mode 100644 index 00000000..a28dc306 --- /dev/null +++ b/src/providers/TransfersProvider/transfers-context.js @@ -0,0 +1,6 @@ +import {createContext} from 'react'; + +export const TransfersContext = createContext({ + transfers: [], + addTransfer: t => t +}); diff --git a/src/providers/TransfersProvider/transfers-hooks.js b/src/providers/TransfersProvider/transfers-hooks.js new file mode 100644 index 00000000..0e190fae --- /dev/null +++ b/src/providers/TransfersProvider/transfers-hooks.js @@ -0,0 +1,13 @@ +import {useContext, useMemo} from 'react'; + +import {TransfersContext} from './transfers-context'; + +export const useTransfers = () => useContext(TransfersContext); + +export const useAccountTransfers = account => { + const {transfers} = useTransfers(); + return useMemo( + () => transfers.filter(tx => tx.sender === account || tx.recipient === account), + [account, transfers] + ); +}; diff --git a/src/providers/TransfersProvider/transfers-reducer.js b/src/providers/TransfersProvider/transfers-reducer.js new file mode 100644 index 00000000..021d53cb --- /dev/null +++ b/src/providers/TransfersProvider/transfers-reducer.js @@ -0,0 +1,29 @@ +import {v4 as uuidv4} from 'uuid'; + +export const actions = { + SET_TRANSFERS: 'Transfers/SET_TRANSFERS', + ADD_TRANSFER: 'Transfers/ADD_TRANSFER' +}; + +export const initialState = []; + +export const reducer = (state, action) => { + switch (action.type) { + case actions.SET_TRANSFERS: + return action.payload; + + case actions.ADD_TRANSFER: { + const transfer = action.payload; + const index = state.findIndex(t => t.id === transfer.id); + if (index > -1) { + const transfers = [...state]; + transfers[index] = transfer; + return transfers; + } + return [{id: uuidv4(), timestamp: new Date().getTime(), ...transfer}, ...state]; + } + + default: + return state; + } +}; diff --git a/src/providers/index.js b/src/providers/index.js index 5706ce9b..9704161d 100644 --- a/src/providers/index.js +++ b/src/providers/index.js @@ -1,6 +1,6 @@ import {BlockHashProvider} from './BlockHashProvider'; import {StoreProvider} from './StoreProvider/StoreProvider'; -import {TransactionsProvider} from './TransactionsProvider'; +import {TransfersProvider} from './TransfersProvider'; import {WalletProvider} from './WalletProvider/WalletProvider'; import {WalletsProvider} from './WalletsProvider'; import {combineProviders} from './combine-providers'; @@ -10,5 +10,5 @@ export const Providers = combineProviders([ WalletProvider, WalletsProvider, BlockHashProvider, - TransactionsProvider + TransfersProvider ]); From 16bb16ef3061ef8e2ebbe262577a01bc0add8431 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Mon, 27 Dec 2021 14:00:12 +0200 Subject: [PATCH 034/211] fix: change Ethereum token name (#39) --- src/config/addresses/tokens/tokens.ethereum.js | 4 ++-- src/config/addresses/tokens/tokens.starknet.js | 6 +++--- src/enums/NetworkType.js | 1 + src/providers/TokensProvider/tokens-reducer.js | 3 ++- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/config/addresses/tokens/tokens.ethereum.js b/src/config/addresses/tokens/tokens.ethereum.js index 97f2748b..2b227d4f 100644 --- a/src/config/addresses/tokens/tokens.ethereum.js +++ b/src/config/addresses/tokens/tokens.ethereum.js @@ -10,7 +10,7 @@ export const EthereumTokens = [ [ChainType.MAIN.id]: '', [ChainType.GOERLI.id]: '0xe4C2493C66e068D65Cf1C38a2d7bDa25d9f08980' }, - name: 'ERC20 StarkNet Token', - symbol: 'E20ST' + name: 'Mock ERC20 Token', + symbol: 'TEST' } ]; diff --git a/src/config/addresses/tokens/tokens.starknet.js b/src/config/addresses/tokens/tokens.starknet.js index ebc64f68..e4fd0256 100644 --- a/src/config/addresses/tokens/tokens.starknet.js +++ b/src/config/addresses/tokens/tokens.starknet.js @@ -10,7 +10,7 @@ export const StarknetTokens = [ [ChainType.MAIN.id]: '', [ChainType.GOERLI.id]: '0x03188903406daaaedd123598a8bd1f5dbec34720089037f4bf1473e51857e190' }, - name: NetworkType.ETHEREUM.name, + name: NetworkType.ETHEREUM.tokenName, symbol: NetworkType.ETHEREUM.symbol }, { @@ -22,7 +22,7 @@ export const StarknetTokens = [ [ChainType.MAIN.id]: '', [ChainType.GOERLI.id]: '0x021eb73bd66eb18c37ec7b1e2567bc3fa8ba9ac0d391b53745a5f9d483217595' }, - name: 'ERC20 StarkNet Token', - symbol: 'E20ST' + name: 'Mock ERC20 Token', + symbol: 'TEST' } ]; diff --git a/src/enums/NetworkType.js b/src/enums/NetworkType.js index 2439af96..3d6ce357 100644 --- a/src/enums/NetworkType.js +++ b/src/enums/NetworkType.js @@ -1,6 +1,7 @@ export const NetworkType = { ETHEREUM: { name: 'Ethereum', + tokenName: 'Ether', symbol: 'ETH' }, STARKNET: { diff --git a/src/providers/TokensProvider/tokens-reducer.js b/src/providers/TokensProvider/tokens-reducer.js index 1280b76d..bb226620 100644 --- a/src/providers/TokensProvider/tokens-reducer.js +++ b/src/providers/TokensProvider/tokens-reducer.js @@ -7,7 +7,8 @@ export const actions = { const ethereumTokens = [ { - ...NetworkType.ETHEREUM, + symbol: NetworkType.ETHEREUM.symbol, + name: NetworkType.ETHEREUM.tokenName, bridgeAddress: ETH_BRIDGE_CONTRACT_ADDRESS }, ...EthereumTokens From 31b404a6cb4e8ed19ea6197a19526d79ba6122d2 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Mon, 27 Dec 2021 14:00:31 +0200 Subject: [PATCH 035/211] fix: max amount in withdrawal causes an error (#38) --- src/components/Features/Transfer/Transfer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Features/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer.js index ce573555..55b291ac 100644 --- a/src/components/Features/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer.js @@ -61,7 +61,7 @@ export const Transfer = () => { }, [amount, selectedToken]); const onMaxClick = () => { - setAmount(selectedToken.balance); + setAmount(selectedToken.balance.toString()); }; const onInputChange = event => { From 1b5bd03ba0c7e649f3df7ff551dee00bed30ca8b Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Mon, 27 Dec 2021 12:02:13 +0000 Subject: [PATCH 036/211] chore(release): 0.0.1-1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f7a1deb0..6c3d17f6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starknet-bridge", - "version": "0.0.1-0", + "version": "0.0.1-1", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From cffce8f1612fe31031664de2102bf56272257f38 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Mon, 27 Dec 2021 16:22:37 +0200 Subject: [PATCH 037/211] fix: endless spinner when wallet isn't installed (#42) --- src/components/Features/Login/Login.js | 51 ++++++++------------ src/components/Features/Transfer/Transfer.js | 2 +- src/components/UI/Loading/Loading.enums.js | 3 +- src/enums/ChainType.js | 5 +- 4 files changed, 24 insertions(+), 37 deletions(-) diff --git a/src/components/Features/Login/Login.js b/src/components/Features/Login/Login.js index ccaa8fe8..b771ef57 100644 --- a/src/components/Features/Login/Login.js +++ b/src/components/Features/Login/Login.js @@ -5,8 +5,7 @@ import {NetworkType, toChainName, WalletStatus, WalletType} from '../../../enums import {useConfig, useWalletHandlerProvider} from '../../../hooks'; import {useEthereumWallet, useStarknetWallet, useWallets} from '../../../providers/WalletsProvider'; import {capitalize, toClasses} from '../../../utils'; -import {Loading, Menu, WalletLogin} from '../../UI'; -import {LoadingSize} from '../../UI/Loading/Loading.enums'; +import {Menu, WalletLogin} from '../../UI'; import {useHideModal, useProgressModal} from '../ModalProvider/ModalProvider.hooks'; import {AUTO_CONNECT_TIMEOUT_DURATION, MODAL_TIMEOUT_DURATION} from './Login.constants'; import styles from './Login.module.scss'; @@ -20,8 +19,8 @@ export const Login = () => { const modalTimeoutId = useRef(null); const hideModal = useHideModal(); const showProgressModal = useProgressModal(); - const {status, error} = useWallets(); const getWalletHandlers = useWalletHandlerProvider(); + const {status, error} = useWallets(); const {connectWallet: connectEthereumWallet, isConnected} = useEthereumWallet(); const {connectWallet: connectStarknetWallet} = useStarknetWallet(); @@ -125,33 +124,25 @@ export const Login = () => { }; return ( - <> - {autoConnect ? ( - <div className="center"> - <Loading size={LoadingSize.XX_LARGE} /> + <Menu> + <div className={toClasses(styles.login, 'center')}> + <div className={styles.content}> + <div className={styles.title}>{TITLE_TXT}</div> + <p> + {SUBTITLE_TXT( + walletType === WalletType.ETHEREUM + ? NetworkType.ETHEREUM.name + : NetworkType.STARKNET.name + )} + </p> + <div className={styles.container}>{renderLoginWallets()}</div> + {errorMsg && <div className={styles.errorMsg}>{errorMsg}</div>} + </div> + <div className={styles.separator} /> + <div className={styles.download}> + {DOWNLOAD_TEXT[0]} <span onClick={onDownloadClick}>{DOWNLOAD_TEXT[1]}</span> </div> - ) : ( - <Menu> - <div className={toClasses(styles.login, 'center')}> - <div className={styles.content}> - <div className={styles.title}>{TITLE_TXT}</div> - <p> - {SUBTITLE_TXT( - walletType === WalletType.ETHEREUM - ? NetworkType.ETHEREUM.name - : NetworkType.STARKNET.name - )} - </p> - <div className={styles.container}>{renderLoginWallets()}</div> - {errorMsg && <div className={styles.errorMsg}>{errorMsg}</div>} - </div> - <div className={styles.separator} /> - <div className={styles.download}> - {DOWNLOAD_TEXT[0]} <span onClick={onDownloadClick}>{DOWNLOAD_TEXT[1]}</span> - </div> - </div> - </Menu> - )} - </> + </div> + </Menu> ); }; diff --git a/src/components/Features/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer.js index 55b291ac..ced3b969 100644 --- a/src/components/Features/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer.js @@ -137,7 +137,7 @@ export const Transfer = () => { <div className={styles.tabsContainer}>{renderTabs()}</div> {!selectedToken && ( <center> - <Loading size={LoadingSize.EXTRA_LARGE} /> + <Loading size={LoadingSize.XL} /> </center> )} {selectedToken && ( diff --git a/src/components/UI/Loading/Loading.enums.js b/src/components/UI/Loading/Loading.enums.js index bda93487..e71f5dfb 100644 --- a/src/components/UI/Loading/Loading.enums.js +++ b/src/components/UI/Loading/Loading.enums.js @@ -2,6 +2,5 @@ export const LoadingSize = { SMALL: 30, MEDIUM: 50, LARGE: 70, - EXTRA_LARGE: 110, - XX_LARGE: 200 + XL: 110 }; diff --git a/src/enums/ChainType.js b/src/enums/ChainType.js index 4a1be04d..43301f7f 100644 --- a/src/enums/ChainType.js +++ b/src/enums/ChainType.js @@ -26,8 +26,5 @@ export const byChainId = id => { export const toChainName = id => { const chainData = byChainId(id); - if (chainData) { - return chainData.name === ChainType.MAIN.name ? '' : chainData.name; - } - return ''; + return chainData?.name || ''; }; From df4187c427be826c4981e413afd215275250ef35 Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Mon, 27 Dec 2021 14:24:04 +0000 Subject: [PATCH 038/211] chore(release): 0.0.1-2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6c3d17f6..50d5f28f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starknet-bridge", - "version": "0.0.1-1", + "version": "0.0.1-2", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 361474302c945ef65c6ca478102d45cb578b4c4b Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Mon, 27 Dec 2021 17:49:51 +0200 Subject: [PATCH 039/211] fix: show txs links before ACCEPTED_ON_L1 (#44) --- .../Features/TransferLog/TransferLog.js | 54 ++++++++++++------- src/components/UI/LinkButton/LinkButton.js | 12 +++-- .../UI/LinkButton/LinkButton.module.scss | 5 ++ src/enums/TransactionStatus.js | 15 ++++++ 4 files changed, 64 insertions(+), 22 deletions(-) diff --git a/src/components/Features/TransferLog/TransferLog.js b/src/components/Features/TransferLog/TransferLog.js index 0303c8c3..47c18526 100644 --- a/src/components/Features/TransferLog/TransferLog.js +++ b/src/components/Features/TransferLog/TransferLog.js @@ -2,7 +2,7 @@ import PropTypes from 'prop-types'; import React, {useEffect, useState} from 'react'; import {LINKS} from '../../../constants'; -import {NetworkType, TransactionStatus} from '../../../enums'; +import {NetworkType, TransactionPendingStatuses, TransactionStatus} from '../../../enums'; import {useColors} from '../../../hooks'; import {useWallets} from '../../../providers/WalletsProvider'; import {getFullTime} from '../../../utils'; @@ -23,6 +23,36 @@ export const TransferLog = ({transfer, onWithdrawClick}) => { setSign(transfer.type === action ? '-' : '+'); }, [action]); + const renderTransferStatus = () => { + return status !== TransactionStatus.ACCEPTED_ON_L1 ? ( + <div className={styles.data}>{status && status.replaceAll('_', ' ')}</div> + ) : null; + }; + + const renderEthereumTxButton = () => { + return !eth_hash && isEthereum && status === TransactionStatus.ACCEPTED_ON_L1 ? ( + <WithdrawalButton onClick={onWithdrawClick} /> + ) : ( + <LinkButton + isDisabled={!eth_hash} + text={`${NetworkType.ETHEREUM.name} Tx`} + url={LINKS.ETHERSCAN.txUrl(chainId, eth_hash)} + /> + ); + }; + + const renderStarknetTxButton = () => { + return ( + <> + <LinkButton + isDisabled={TransactionPendingStatuses.includes(status)} + text={`${NetworkType.STARKNET.name} Tx`} + url={LINKS.VOYAGER.txUrl(chainId, starknet_hash)} + /> + </> + ); + }; + return ( <> <div className={styles.transferLog}> @@ -37,23 +67,11 @@ export const TransferLog = ({transfer, onWithdrawClick}) => { <div className={styles.amount}> {sign} {amount} {symbol.toUpperCase()} </div> - {status !== TransactionStatus.ACCEPTED_ON_L1 ? ( - <div className={styles.data}>{status && status.replaceAll('_', ' ')}</div> - ) : ( - <div className={styles.links}> - {eth_hash && ( - <LinkButton - text={`${NetworkType.ETHEREUM.name} Tx`} - url={LINKS.ETHERSCAN.txUrl(chainId, eth_hash)} - /> - )} - {!eth_hash && isEthereum && <WithdrawalButton onClick={onWithdrawClick} />} - <LinkButton - text={`${NetworkType.STARKNET.name} Tx`} - url={LINKS.VOYAGER.txUrl(chainId, starknet_hash)} - /> - </div> - )} + {renderTransferStatus()} + <div className={styles.links}> + {renderEthereumTxButton()} + {renderStarknetTxButton()} + </div> </div> </div> <hr /> diff --git a/src/components/UI/LinkButton/LinkButton.js b/src/components/UI/LinkButton/LinkButton.js index dd74c033..d798f976 100644 --- a/src/components/UI/LinkButton/LinkButton.js +++ b/src/components/UI/LinkButton/LinkButton.js @@ -2,16 +2,19 @@ import PropTypes from 'prop-types'; import React from 'react'; import {ReactComponent as RedirectIcon} from '../../../assets/svg/icons/redirect.svg'; -import {openInNewTab} from '../../../utils'; +import {openInNewTab, toClasses} from '../../../utils'; import styles from './LinkButton.module.scss'; -export const LinkButton = ({text, url}) => { +export const LinkButton = ({text, url, isDisabled}) => { const onClick = () => { openInNewTab(url); }; return ( - <div className={styles.linkButton} onClick={onClick}> + <div + className={toClasses(styles.linkButton, isDisabled && styles.isDisabled)} + onClick={onClick} + > {text} <RedirectIcon /> </div> @@ -20,5 +23,6 @@ export const LinkButton = ({text, url}) => { LinkButton.propTypes = { text: PropTypes.string, - url: PropTypes.string + url: PropTypes.string, + isDisabled: PropTypes.bool }; diff --git a/src/components/UI/LinkButton/LinkButton.module.scss b/src/components/UI/LinkButton/LinkButton.module.scss index 3ecb7e64..1b7517cc 100644 --- a/src/components/UI/LinkButton/LinkButton.module.scss +++ b/src/components/UI/LinkButton/LinkButton.module.scss @@ -19,6 +19,11 @@ $path-fill-color-hover: $--color-gamma; cursor: pointer; margin: 10px 0 10px 10px; + &.isDisabled { + opacity: 0.3; + pointer-events: none; + } + svg { margin-left: 5px; } diff --git a/src/enums/TransactionStatus.js b/src/enums/TransactionStatus.js index 6b297bde..08baed32 100644 --- a/src/enums/TransactionStatus.js +++ b/src/enums/TransactionStatus.js @@ -6,3 +6,18 @@ export const TransactionStatus = { ACCEPTED_ON_L2: 'ACCEPTED_ON_L2', ACCEPTED_ON_L1: 'ACCEPTED_ON_L1' }; + +export const TransactionPendingStatuses = [ + TransactionStatus.NOT_RECEIVED, + TransactionStatus.RECEIVED +]; + +export const TransactionCompletedStatuses = [ + TransactionStatus.REJECTED, + TransactionStatus.ACCEPTED_ON_L1 +]; + +export const TransactionConsumedStatuses = [ + TransactionStatus.ACCEPTED_ON_L2, + TransactionStatus.PENDING +]; From 4e0475a3c848fd13cb4dd58940a38cf275781142 Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Mon, 27 Dec 2021 15:51:19 +0000 Subject: [PATCH 040/211] chore(release): 0.0.1-3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 50d5f28f..daed2acd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starknet-bridge", - "version": "0.0.1-2", + "version": "0.0.1-3", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 5a4ac44f014d3b9d7206c7e3308a116b9c2c7296 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 28 Dec 2021 10:10:42 +0200 Subject: [PATCH 041/211] fix: handle rejected txs (#45) --- .../Features/ToastProvider/ToastProvider.js | 58 ++++++++++--------- .../Features/TransferLog/TransferLog.js | 14 +++-- .../TransferLog/TransferLog.module.scss | 5 ++ .../PendingTransferToast.js | 29 ---------- .../PendingTransferToast.module.scss | 3 - .../Toast/ToastHeader/ToastHeader.module.scss | 1 + .../UI/Toast/TransferToast/TransferToast.js | 37 ++++++++++++ .../TransferToast.strings.js} | 3 +- src/components/UI/Toast/index.js | 2 +- src/config/strings.json | 3 +- src/enums/TransactionStatus.js | 10 ++++ .../TransfersProvider/TransfersProvider.js | 5 +- 12 files changed, 99 insertions(+), 71 deletions(-) delete mode 100644 src/components/UI/Toast/PendingTransferToast/PendingTransferToast.js delete mode 100644 src/components/UI/Toast/PendingTransferToast/PendingTransferToast.module.scss create mode 100644 src/components/UI/Toast/TransferToast/TransferToast.js rename src/components/UI/Toast/{PendingTransferToast/PendingTransferToast.strings.js => TransferToast/TransferToast.strings.js} (59%) diff --git a/src/components/Features/ToastProvider/ToastProvider.js b/src/components/Features/ToastProvider/ToastProvider.js index 1e6a301e..a354e504 100644 --- a/src/components/Features/ToastProvider/ToastProvider.js +++ b/src/components/Features/ToastProvider/ToastProvider.js @@ -3,11 +3,18 @@ import React, {useRef} from 'react'; import {toast, Toaster} from 'react-hot-toast'; import useDeepCompareEffect from 'use-deep-compare-effect'; -import {ActionType, NetworkType, TransactionStatus} from '../../../enums'; +import { + ActionType, + isConsumed, + isOnChain, + isPending, + isRejected, + NetworkType +} from '../../../enums'; import {usePrevious, useTransfer} from '../../../hooks'; import {useTransfers} from '../../../providers/TransfersProvider'; import {getFullTime} from '../../../utils'; -import {PendingTransferToast, ToastBody, WithdrawalTransferToast} from '../../UI'; +import {ToastBody, TransferToast, WithdrawalTransferToast} from '../../UI'; import styles from './ToastProvider.module.scss'; export const ToastProvider = () => { @@ -16,8 +23,6 @@ export const ToastProvider = () => { const toastsMap = useRef({}); const toastsDismissed = useRef({}); const {finalizeTransferFromStarknet} = useTransfer(); - const pendingStatuses = [TransactionStatus.NOT_RECEIVED, TransactionStatus.RECEIVED]; - const consumedStatus = [TransactionStatus.PENDING, TransactionStatus.ACCEPTED_ON_L2]; useDeepCompareEffect(() => { transfers.forEach(transfer => { @@ -27,41 +32,40 @@ export const ToastProvider = () => { }, [transfers]); const handleToast = (transfer, prevTransfer) => { - if (transfer.type === ActionType.TRANSFER_TO_STARKNET) { - handleTransferToStarknetToast(transfer, prevTransfer); - } else { - handleTransferFromStarknetToast(transfer); + const {status, type} = transfer; + const isChanged = prevTransfer && status !== prevTransfer.status; + if (isPending(status)) { + return showPendingTransferToast(transfer); } - }; - - const handleTransferToStarknetToast = (transfer, prevTransfer) => { - const isChanged = prevTransfer && transfer.status !== prevTransfer.status; - if (pendingStatuses.includes(transfer.status)) { - showPendingTransferToast(transfer); - } else if (isChanged && consumedStatus.includes(transfer.status)) { - showConsumedTransferToast(transfer); + if (isChanged && isConsumed(status)) { + return showConsumedTransferToast(transfer); } - }; - - const handleTransferFromStarknetToast = transfer => { - if (pendingStatuses.includes(transfer.status)) { - showPendingTransferToast(transfer); - } else if (!transfer.eth_hash && transfer.status === TransactionStatus.ACCEPTED_ON_L1) { - showWithdrawalToast(transfer); + if (isChanged && isRejected(status)) { + return showRejectedTransferToast(transfer); + } + if (!transfer.eth_hash && type === ActionType.TRANSFER_FROM_STARKNET && isOnChain(status)) { + return showWithdrawalToast(transfer); } }; const showPendingTransferToast = transfer => { let toastId = getToastId(transfer); if (!toastId) { - toastId = toast.loading(renderPendingTransferToast(transfer, true)); + toastId = toast.loading(renderTransferToast(transfer, true)); toastsMap.current[transfer.id] = toastId; } }; const showConsumedTransferToast = transfer => { const toastId = getToastId(transfer); - toastsMap.current[transfer.id] = toast.success(renderPendingTransferToast(transfer), { + toastsMap.current[transfer.id] = toast.success(renderTransferToast(transfer), { + id: toastId + }); + }; + + const showRejectedTransferToast = transfer => { + const toastId = getToastId(transfer); + toastsMap.current[transfer.id] = toast.error(renderTransferToast(transfer), { id: toastId }); }; @@ -78,8 +82,8 @@ export const ToastProvider = () => { } }; - const renderPendingTransferToast = (transfer, isLoading) => ( - <PendingTransferToast + const renderTransferToast = (transfer, isLoading) => ( + <TransferToast isLoading={isLoading} transfer={transfer} onClose={() => dismissToast(transfer)} diff --git a/src/components/Features/TransferLog/TransferLog.js b/src/components/Features/TransferLog/TransferLog.js index 47c18526..2dec3da3 100644 --- a/src/components/Features/TransferLog/TransferLog.js +++ b/src/components/Features/TransferLog/TransferLog.js @@ -2,10 +2,10 @@ import PropTypes from 'prop-types'; import React, {useEffect, useState} from 'react'; import {LINKS} from '../../../constants'; -import {NetworkType, TransactionPendingStatuses, TransactionStatus} from '../../../enums'; +import {isOnChain, isPending, isRejected, NetworkType} from '../../../enums'; import {useColors} from '../../../hooks'; import {useWallets} from '../../../providers/WalletsProvider'; -import {getFullTime} from '../../../utils'; +import {getFullTime, toClasses} from '../../../utils'; import {Button, CryptoLogo} from '../../UI'; import {CryptoLogoSize} from '../../UI/CryptoLogo/CryptoLogo.enums'; import {LinkButton} from '../../UI/LinkButton/LinkButton'; @@ -24,13 +24,15 @@ export const TransferLog = ({transfer, onWithdrawClick}) => { }, [action]); const renderTransferStatus = () => { - return status !== TransactionStatus.ACCEPTED_ON_L1 ? ( - <div className={styles.data}>{status && status.replaceAll('_', ' ')}</div> + return !isOnChain(status) ? ( + <div className={toClasses(styles.data, isRejected(status) && styles.error)}> + {status && status.replaceAll('_', ' ')} + </div> ) : null; }; const renderEthereumTxButton = () => { - return !eth_hash && isEthereum && status === TransactionStatus.ACCEPTED_ON_L1 ? ( + return !eth_hash && isEthereum && isOnChain(status) ? ( <WithdrawalButton onClick={onWithdrawClick} /> ) : ( <LinkButton @@ -45,7 +47,7 @@ export const TransferLog = ({transfer, onWithdrawClick}) => { return ( <> <LinkButton - isDisabled={TransactionPendingStatuses.includes(status)} + isDisabled={isPending(status)} text={`${NetworkType.STARKNET.name} Tx`} url={LINKS.VOYAGER.txUrl(chainId, starknet_hash)} /> diff --git a/src/components/Features/TransferLog/TransferLog.module.scss b/src/components/Features/TransferLog/TransferLog.module.scss index 96af4b46..f6fd81b9 100644 --- a/src/components/Features/TransferLog/TransferLog.module.scss +++ b/src/components/Features/TransferLog/TransferLog.module.scss @@ -2,6 +2,7 @@ $color: $--color-alpha-6; $hr-color: $--color-alpha-3; +$error-color: $--color-error; .transferLog { display: flex; @@ -36,6 +37,10 @@ $hr-color: $--color-alpha-3; .data { font-size: 13px; color: $color; + + &.error { + color: $error-color; + } } .amount { diff --git a/src/components/UI/Toast/PendingTransferToast/PendingTransferToast.js b/src/components/UI/Toast/PendingTransferToast/PendingTransferToast.js deleted file mode 100644 index b3977a06..00000000 --- a/src/components/UI/Toast/PendingTransferToast/PendingTransferToast.js +++ /dev/null @@ -1,29 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; - -import {TransactionStatus} from '../../../../enums'; -import {TransferData} from '../../../Features'; -import {ToastHeader} from '../ToastHeader/ToastHeader'; -import {ToastSeparator} from '../ToastSeparator/ToastSeparator'; -import styles from './PendingTransferToast.module.scss'; -import {CONSUMED_TXT, PENDING_TXT} from './PendingTransferToast.strings'; - -export const PendingTransferToast = ({transfer, isLoading, onClose}) => { - return ( - <div className={styles.pendingTransferToast}> - <ToastHeader - title={transfer.status === TransactionStatus.ACCEPTED_ON_L2 ? CONSUMED_TXT : PENDING_TXT} - withClose={!isLoading} - onClose={onClose} - /> - <ToastSeparator /> - <TransferData style={{fontSize: '12px'}} transfer={transfer} /> - </div> - ); -}; - -PendingTransferToast.propTypes = { - transfer: PropTypes.object, - isLoading: PropTypes.bool, - onClose: PropTypes.func -}; diff --git a/src/components/UI/Toast/PendingTransferToast/PendingTransferToast.module.scss b/src/components/UI/Toast/PendingTransferToast/PendingTransferToast.module.scss deleted file mode 100644 index f16b8c58..00000000 --- a/src/components/UI/Toast/PendingTransferToast/PendingTransferToast.module.scss +++ /dev/null @@ -1,3 +0,0 @@ -.pendingTransferToast { - padding: 0 10px; -} diff --git a/src/components/UI/Toast/ToastHeader/ToastHeader.module.scss b/src/components/UI/Toast/ToastHeader/ToastHeader.module.scss index 9eb891ca..15907346 100644 --- a/src/components/UI/Toast/ToastHeader/ToastHeader.module.scss +++ b/src/components/UI/Toast/ToastHeader/ToastHeader.module.scss @@ -15,6 +15,7 @@ $color-title: $--color-black; } .close { + margin-left: 30px; cursor: pointer; } } diff --git a/src/components/UI/Toast/TransferToast/TransferToast.js b/src/components/UI/Toast/TransferToast/TransferToast.js new file mode 100644 index 00000000..905d9b6a --- /dev/null +++ b/src/components/UI/Toast/TransferToast/TransferToast.js @@ -0,0 +1,37 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {isConsumed, isPending, isRejected} from '../../../../enums'; +import {TransferData} from '../../../Features'; +import {ToastHeader} from '../ToastHeader/ToastHeader'; +import {ToastSeparator} from '../ToastSeparator/ToastSeparator'; +import {CONSUMED_TXT, PENDING_TXT, REJECTED_TXT} from './TransferToast.strings'; + +export const TransferToast = ({transfer, isLoading, onClose}) => { + const getTitle = () => { + const {status} = transfer; + if (isPending(status)) { + return PENDING_TXT; + } + if (isConsumed(status)) { + return CONSUMED_TXT; + } + if (isRejected(status)) { + return REJECTED_TXT; + } + }; + + return ( + <div> + <ToastHeader title={getTitle()} withClose={!isLoading} onClose={onClose} /> + <ToastSeparator /> + <TransferData style={{fontSize: '12px'}} transfer={transfer} /> + </div> + ); +}; + +TransferToast.propTypes = { + transfer: PropTypes.object, + isLoading: PropTypes.bool, + onClose: PropTypes.func +}; diff --git a/src/components/UI/Toast/PendingTransferToast/PendingTransferToast.strings.js b/src/components/UI/Toast/TransferToast/TransferToast.strings.js similarity index 59% rename from src/components/UI/Toast/PendingTransferToast/PendingTransferToast.strings.js rename to src/components/UI/Toast/TransferToast/TransferToast.strings.js index 91c135db..2efe93f7 100644 --- a/src/components/UI/Toast/PendingTransferToast/PendingTransferToast.strings.js +++ b/src/components/UI/Toast/TransferToast/TransferToast.strings.js @@ -1,8 +1,9 @@ import strings from '../../../../config/strings.json'; const { - pendingTransferToast: {pending_txt, consumed_txt} + pendingTransferToast: {pending_txt, consumed_txt, rejected_txt} } = strings; +export const REJECTED_TXT = rejected_txt; export const PENDING_TXT = pending_txt; export const CONSUMED_TXT = consumed_txt; diff --git a/src/components/UI/Toast/index.js b/src/components/UI/Toast/index.js index 67367299..14ca708e 100644 --- a/src/components/UI/Toast/index.js +++ b/src/components/UI/Toast/index.js @@ -3,4 +3,4 @@ export * from './ToastButton/ToastButton'; export * from './ToastHeader/ToastHeader'; export * from './ToastSeparator/ToastSeparator'; export * from './WithdrawalTransferToast/WithdrawalTransferToast'; -export * from './PendingTransferToast/PendingTransferToast'; +export * from './TransferToast/TransferToast'; diff --git a/src/config/strings.json b/src/config/strings.json index 7b11ebb8..9eb4b46e 100644 --- a/src/config/strings.json +++ b/src/config/strings.json @@ -92,7 +92,8 @@ }, "pendingTransferToast": { "pending_txt": "Waiting for transaction to be consumed on StarkNet", - "consumed_txt": "Transaction consumed successfully on StarkNet" + "consumed_txt": "Transaction consumed successfully on StarkNet", + "rejected_txt": "Transaction rejected on StarkNet" }, "withdrawalTransferToast": { "title_txt": "StarkNet finished to process your withdrawal!", diff --git a/src/enums/TransactionStatus.js b/src/enums/TransactionStatus.js index 08baed32..85847fff 100644 --- a/src/enums/TransactionStatus.js +++ b/src/enums/TransactionStatus.js @@ -21,3 +21,13 @@ export const TransactionConsumedStatuses = [ TransactionStatus.ACCEPTED_ON_L2, TransactionStatus.PENDING ]; + +export const isPending = status => TransactionPendingStatuses.includes(status); + +export const isConsumed = status => TransactionConsumedStatuses.includes(status); + +export const isCompleted = status => TransactionCompletedStatuses.includes(status); + +export const isRejected = status => status === TransactionStatus.REJECTED; + +export const isOnChain = status => status === TransactionStatus.ACCEPTED_ON_L1; diff --git a/src/providers/TransfersProvider/TransfersProvider.js b/src/providers/TransfersProvider/TransfersProvider.js index b1028d1a..736d33a2 100644 --- a/src/providers/TransfersProvider/TransfersProvider.js +++ b/src/providers/TransfersProvider/TransfersProvider.js @@ -4,7 +4,7 @@ import React, {useEffect, useReducer} from 'react'; import useDeepCompareEffect from 'use-deep-compare-effect'; import {LOCAL_STORAGE_TRANSFERS_KEY} from '../../constants'; -import {TransactionStatus} from '../../enums'; +import {isCompleted} from '../../enums'; import {useLogger} from '../../hooks'; import {StorageManager} from '../../services'; import {useBlockHash} from '../BlockHashProvider'; @@ -15,7 +15,6 @@ export const TransfersProvider = ({children}) => { const logger = useLogger(TransfersProvider.displayName); const [transfers, dispatch] = useReducer(reducer, initialState); const blockHash = useBlockHash(); - const completedStatuses = [TransactionStatus.ACCEPTED_ON_L1, TransactionStatus.REJECTED]; useEffect(() => { const storedTransfers = StorageManager.getItem(LOCAL_STORAGE_TRANSFERS_KEY); @@ -31,7 +30,7 @@ export const TransfersProvider = ({children}) => { return; } const checkTransaction = async transfer => { - if (completedStatuses.includes(transfer.status)) { + if (isCompleted(transfer.status)) { return transfer; } if (transfer.lastChecked === blockHash) { From c307ed2992a11882043427ad762aeef2501099d9 Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Tue, 28 Dec 2021 08:12:21 +0000 Subject: [PATCH 042/211] chore(release): 0.0.1-4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index daed2acd..fa81569c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starknet-bridge", - "version": "0.0.1-3", + "version": "0.0.1-4", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 2ee32ab4ce4b63b27148b8e540228847166675a9 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 28 Dec 2021 10:56:47 +0200 Subject: [PATCH 043/211] fix: strings (#43) --- src/abis/ethereum/index.js | 10 +- src/abis/starknet/index.js | 6 +- src/api/bridge.js | 48 +++-- .../Containers/Footer/Footer.strings.js | 8 +- .../Containers/Header/Header.strings.js | 10 +- .../Features/Account/Account.strings.js | 9 +- .../Features/Login/Login.strings.js | 10 +- .../ModalProvider/ModalProvider.hooks.js | 3 +- .../ModalProvider/ModalProvider.strings.js | 3 + .../SelectToken/SelectToken.strings.js | 8 +- .../Features/Transfer/Transfer.strings.js | 10 +- .../TransferLog/TransferLog.strings.js | 10 +- .../AccountAddress/AccountAddress.strings.js | 8 +- .../UI/BackButton/BackButton.strings.js | 8 +- .../UI/LogoutButton/LogoutButton.strings.js | 8 +- .../UI/MaxButton/MaxButton.strings.js | 8 +- src/components/UI/Modal/Modal/Modal.js | 4 +- .../TransactionSubmittedModal.js | 84 +++++--- .../TransactionSubmittedModal.strings.js | 11 +- .../UI/NetworkMenu/NetworkMenu.strings.js | 6 +- .../UI/SearchToken/SearchToken.strings.js | 8 +- .../Toast/ToastHeader/ToastHeader.module.scss | 1 + .../TransferToast/TransferToast.strings.js | 6 +- .../WithdrawalTransferToast.strings.js | 8 +- .../UI/TokenBalance/TokenBalance.strings.js | 8 +- .../UI/TokenInput/TokenInput.strings.js | 8 +- .../TransferButton/TransferButton.strings.js | 8 +- .../TransferLogContainer.strings.js | 8 +- .../UI/WalletButton/WalletButton.strings.js | 10 +- src/config/strings.json | 185 +++++++++--------- src/hooks/useContract.js | 24 +-- src/hooks/useStrings.js | 5 - src/hooks/useTokenBalance.js | 6 +- src/hooks/useTransfer.js | 83 ++++---- .../TokensProvider/TokensProvider.js | 18 +- src/utils/contract.js | 51 ++++- src/utils/helpers.js | 12 ++ src/utils/index.js | 11 +- src/utils/object.js | 24 +++ src/utils/string.js | 20 -- 40 files changed, 405 insertions(+), 371 deletions(-) create mode 100644 src/components/Features/ModalProvider/ModalProvider.strings.js delete mode 100644 src/hooks/useStrings.js create mode 100644 src/utils/helpers.js create mode 100644 src/utils/object.js diff --git a/src/abis/ethereum/index.js b/src/abis/ethereum/index.js index 70407d89..06d1bf11 100644 --- a/src/abis/ethereum/index.js +++ b/src/abis/ethereum/index.js @@ -1,4 +1,6 @@ -export * as ERC20_ABI from './erc20.json'; -export * as ERC20_BRIDGE_ABI from './erc20-bridge.json'; -export * as ETH_BRIDGE_ABI from './eth-bridge.json'; -export * as MESSAGING_ABI from './messaging.json'; +import ERC20_BRIDGE_ABI from './erc20-bridge.json'; +import ERC20_ABI from './erc20.json'; +import ETH_BRIDGE_ABI from './eth-bridge.json'; +import MESSAGING_ABI from './messaging.json'; + +export {ERC20_ABI, ERC20_BRIDGE_ABI, ETH_BRIDGE_ABI, MESSAGING_ABI}; diff --git a/src/abis/starknet/index.js b/src/abis/starknet/index.js index 045a4e90..2ef20fe2 100644 --- a/src/abis/starknet/index.js +++ b/src/abis/starknet/index.js @@ -1,2 +1,4 @@ -export * as STARKNET_ERC20_ABI from './erc20.json'; -export * as STARKNET_BRIDGE_ABI from './bridge.json'; +import STARKNET_BRIDGE_ABI from './bridge.json'; +import STARKNET_ERC20_ABI from './erc20.json'; + +export {STARKNET_ERC20_ABI, STARKNET_BRIDGE_ABI}; diff --git a/src/api/bridge.js b/src/api/bridge.js index d84d6c04..8e6a412d 100644 --- a/src/api/bridge.js +++ b/src/api/bridge.js @@ -2,59 +2,73 @@ import {parseToDecimals, parseToFelt, parseToUint256} from '../utils'; import {eth_sendTransaction, starknet_sendTransaction} from '../utils/contract'; import {decimals} from './erc20'; -export const eth_deposit = async (recipient, amount, tokenBridgeContract, from) => { +export const deposit = async (recipient, amount, tokenBridgeContract, from, emitter) => { try { - return await eth_sendTransaction( + return eth_sendTransaction( tokenBridgeContract, 'deposit', [parseToDecimals(amount), recipient], { from - } + }, + emitter ); } catch (ex) { return Promise.reject(ex); } }; -export const eth_depositEth = async (recipient, amount, ethBridgeContract, from) => { +export const depositEth = async (recipient, amount, ethBridgeContract, from, emitter) => { try { - return await eth_sendTransaction(ethBridgeContract, 'deposit', [recipient], { - from, - value: parseToDecimals(amount) - }); + return eth_sendTransaction( + ethBridgeContract, + 'deposit', + [recipient], + { + from, + value: parseToDecimals(amount) + }, + emitter + ); } catch (ex) { return Promise.reject(ex); } }; -export const eth_withdraw = async (recipient, amount, tokenBridgeContract) => { +export const withdraw = async (recipient, amount, tokenBridgeContract, emitter) => { try { - return await eth_sendTransaction( + return eth_sendTransaction( tokenBridgeContract, 'withdraw', [parseToDecimals(amount), recipient], { from: recipient - } + }, + emitter ); } catch (ex) { return Promise.reject(ex); } }; -export const starknet_initiateWithdraw = async ( +export const initiateWithdraw = async ( recipient, amount, tokenBridgeContract, - tokenContract + tokenContract, + emitter ) => { try { const dec = await decimals(tokenContract, false); - return await starknet_sendTransaction(tokenBridgeContract, 'initiate_withdraw', { - l1Recipient: parseToFelt(recipient), - amount: parseToUint256(amount, dec) - }); + return starknet_sendTransaction( + tokenBridgeContract, + 'initiate_withdraw', + { + l1Recipient: parseToFelt(recipient), + amount: parseToUint256(amount, dec) + }, + emitter + ); } catch (ex) { return Promise.reject(ex); } diff --git a/src/components/Containers/Footer/Footer.strings.js b/src/components/Containers/Footer/Footer.strings.js index a2d20a2a..96622db6 100644 --- a/src/components/Containers/Footer/Footer.strings.js +++ b/src/components/Containers/Footer/Footer.strings.js @@ -1,7 +1,3 @@ -import strings from '../../../config/strings.json'; +import {getString} from '../../../utils'; -const { - footer: {rights_txt} -} = strings; - -export const RIGHTS_TXT = rights_txt; +export const RIGHTS_TXT = getString('containers.footer.rights_txt'); diff --git a/src/components/Containers/Header/Header.strings.js b/src/components/Containers/Header/Header.strings.js index 992de892..aa80fd9f 100644 --- a/src/components/Containers/Header/Header.strings.js +++ b/src/components/Containers/Header/Header.strings.js @@ -1,8 +1,4 @@ -import strings from '../../../config/strings.json'; -import {capitalize, evaluate} from '../../../utils'; +import {capitalize, evaluate, getString} from '../../../utils'; -const { - header: {chain_txt} -} = strings; - -export const CHAIN_TXT = chainName => capitalize(evaluate(chain_txt, {chainName})); +export const CHAIN_TXT = chainName => + capitalize(evaluate(getString('containers.header.chain_txt'), {chainName})); diff --git a/src/components/Features/Account/Account.strings.js b/src/components/Features/Account/Account.strings.js index 8e2b2159..75437b99 100644 --- a/src/components/Features/Account/Account.strings.js +++ b/src/components/Features/Account/Account.strings.js @@ -1,8 +1,3 @@ -import strings from '../../../config/strings.json'; -import {evaluate} from '../../../utils'; +import {evaluate, getString} from '../../../utils'; -const { - account: {title_txt} -} = strings; - -export const TITLE_TXT = network => evaluate(title_txt, {network}); +export const TITLE_TXT = network => evaluate(getString('menus.account.title_txt'), {network}); diff --git a/src/components/Features/Login/Login.strings.js b/src/components/Features/Login/Login.strings.js index e6c87d5a..16b95243 100644 --- a/src/components/Features/Login/Login.strings.js +++ b/src/components/Features/Login/Login.strings.js @@ -1,14 +1,8 @@ -import strings from '../../../config/strings.json'; -import {evaluate} from '../../../utils'; +import {evaluate, getString} from '../../../utils'; -const { - login: {title_txt, subtitle_txt, download_txt, modal_txt} -} = strings; +const {title_txt, subtitle_txt, download_txt, modal_txt} = getString('menus.login'); export const TITLE_TXT = title_txt; - export const DOWNLOAD_TEXT = download_txt; - export const SUBTITLE_TXT = networkName => evaluate(subtitle_txt, {networkName}); - export const MODAL_TXT = walletName => evaluate(modal_txt, {walletName}); diff --git a/src/components/Features/ModalProvider/ModalProvider.hooks.js b/src/components/Features/ModalProvider/ModalProvider.hooks.js index 3c97dcad..3ee21b3f 100644 --- a/src/components/Features/ModalProvider/ModalProvider.hooks.js +++ b/src/components/Features/ModalProvider/ModalProvider.hooks.js @@ -4,6 +4,7 @@ import {useDispatch, useSelector} from 'react-redux'; import {ModalType} from '../../UI/Modal/Modal/Modal.constants'; import {selectModal} from './ModalProvider.selectors'; import {hideModalAction, showModalAction} from './ModalProvider.slice'; +import {TRANSACTION_SUBMITTED_TITLE_TXT} from './ModalProvider.strings'; export const useModal = () => ({ ...useSelector(selectModal) @@ -45,7 +46,7 @@ export const useTransactionSubmittedModal = () => { componentProps: { tx }, - title: 'Transaction submitted', + title: TRANSACTION_SUBMITTED_TITLE_TXT, isClosable: true }) ); diff --git a/src/components/Features/ModalProvider/ModalProvider.strings.js b/src/components/Features/ModalProvider/ModalProvider.strings.js new file mode 100644 index 00000000..340c2566 --- /dev/null +++ b/src/components/Features/ModalProvider/ModalProvider.strings.js @@ -0,0 +1,3 @@ +import {getString} from '../../../utils'; + +export const TRANSACTION_SUBMITTED_TITLE_TXT = getString('modals.transactionSubmitted.title_txt'); diff --git a/src/components/Features/SelectToken/SelectToken.strings.js b/src/components/Features/SelectToken/SelectToken.strings.js index 60080eb1..4fef0f93 100644 --- a/src/components/Features/SelectToken/SelectToken.strings.js +++ b/src/components/Features/SelectToken/SelectToken.strings.js @@ -1,7 +1,3 @@ -import strings from '../../../config/strings.json'; +import {getString} from '../../../utils'; -const { - selectToken: {title_txt} -} = strings; - -export const TITLE_TXT = title_txt; +export const TITLE_TXT = getString('menus.selectToken.title_txt'); diff --git a/src/components/Features/Transfer/Transfer.strings.js b/src/components/Features/Transfer/Transfer.strings.js index e728079a..f58096de 100644 --- a/src/components/Features/Transfer/Transfer.strings.js +++ b/src/components/Features/Transfer/Transfer.strings.js @@ -1,7 +1,5 @@ -import strings from '../../../config/strings.json'; +import {getString} from '../../../utils'; -const { - transfer: {insufficient_balance_error_msg} -} = strings; - -export const INSUFFICIENT_BALANCE_ERROR_MSG = insufficient_balance_error_msg; +export const INSUFFICIENT_BALANCE_ERROR_MSG = getString( + 'menus.transfer.insufficient_balance_error_msg' +); diff --git a/src/components/Features/TransferLog/TransferLog.strings.js b/src/components/Features/TransferLog/TransferLog.strings.js index 61d678b5..877d0e07 100644 --- a/src/components/Features/TransferLog/TransferLog.strings.js +++ b/src/components/Features/TransferLog/TransferLog.strings.js @@ -1,7 +1,5 @@ -import strings from '../../../config/strings.json'; +import {getString} from '../../../utils'; -const { - transferLog: {withdrawal_btn_txt} -} = strings; - -export const WITHDRAWAL_BTN_TXT = withdrawal_btn_txt; +export const WITHDRAWAL_BTN_TXT = getString( + 'menus.account.transferLogContainer.transferLog.withdrawal_btn_txt' +); diff --git a/src/components/UI/AccountAddress/AccountAddress.strings.js b/src/components/UI/AccountAddress/AccountAddress.strings.js index e71cf1c5..00595350 100644 --- a/src/components/UI/AccountAddress/AccountAddress.strings.js +++ b/src/components/UI/AccountAddress/AccountAddress.strings.js @@ -1,7 +1,3 @@ -import strings from '../../../config/strings.json'; +import {getString} from '../../../utils'; -const { - accountAddress: {copied_msg_txt} -} = strings; - -export const COPIED_MSG_TXT = copied_msg_txt; +export const COPIED_MSG_TXT = getString('menus.account.copied_msg_txt'); diff --git a/src/components/UI/BackButton/BackButton.strings.js b/src/components/UI/BackButton/BackButton.strings.js index 0a873aa9..46bc48a2 100644 --- a/src/components/UI/BackButton/BackButton.strings.js +++ b/src/components/UI/BackButton/BackButton.strings.js @@ -1,7 +1,3 @@ -import strings from '../../../config/strings.json'; +import {getString} from '../../../utils'; -const { - backButton: {btn_txt} -} = strings; - -export const BTN_TXT = btn_txt; +export const BTN_TXT = getString('menus.back_btn_txt'); diff --git a/src/components/UI/LogoutButton/LogoutButton.strings.js b/src/components/UI/LogoutButton/LogoutButton.strings.js index e2deabe2..da81090d 100644 --- a/src/components/UI/LogoutButton/LogoutButton.strings.js +++ b/src/components/UI/LogoutButton/LogoutButton.strings.js @@ -1,7 +1,3 @@ -import strings from '../../../config/strings.json'; +import {getString} from '../../../utils'; -const { - logoutButton: {btn_txt} -} = strings; - -export const BTN_TXT = btn_txt; +export const BTN_TXT = getString('menus.account.logout_btn_txt'); diff --git a/src/components/UI/MaxButton/MaxButton.strings.js b/src/components/UI/MaxButton/MaxButton.strings.js index 62146fcd..d9e25a3c 100644 --- a/src/components/UI/MaxButton/MaxButton.strings.js +++ b/src/components/UI/MaxButton/MaxButton.strings.js @@ -1,7 +1,3 @@ -import strings from '../../../config/strings.json'; +import {getString} from '../../../utils'; -const { - maxButton: {btn_txt} -} = strings; - -export const BTN_TXT = btn_txt; +export const BTN_TXT = getString('menus.transfer.max_btn_txt'); diff --git a/src/components/UI/Modal/Modal/Modal.js b/src/components/UI/Modal/Modal/Modal.js index c66d9f86..1dc7d4d4 100644 --- a/src/components/UI/Modal/Modal/Modal.js +++ b/src/components/UI/Modal/Modal/Modal.js @@ -7,11 +7,11 @@ import {ModalSize, ModalType} from './Modal.constants'; import styles from './Modal.module.scss'; export const Modal = ({show, type = ModalType.INFO, size = ModalSize.SMALL, children}) => { - const {height, width} = size; + const {width} = size; return show ? createPortal( <div className={toClasses(styles.modal, styles[type])}> - <div className={toClasses(styles.container, styles[type])} style={{width, height}}> + <div className={toClasses(styles.container, styles[type])} style={{width}}> {children} </div> </div>, diff --git a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js index e3f42786..af022d26 100644 --- a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js +++ b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js @@ -10,22 +10,28 @@ import {useWallets} from '../../../../providers/WalletsProvider'; import {openInNewTab} from '../../../../utils'; import {Button} from '../../Button/Button'; import {Circle} from '../../Circle/Circle'; -import {BODY_TXT_PARTS, BTN_TEXT} from './TransactionSubmittedModal.strings'; +import { + BTN_TEXT, + DEPOSIT_TXT, + STATUS_TXT, + WITHDRAWAL_TXT +} from './TransactionSubmittedModal.strings'; const TransactionSubmittedModal = ({tx}) => { - const {colorAlpha3, colorWhite, colorWhite1} = useColors(); const {chainId} = useWallets(); const [networkData, setNetworkData] = useState({}); useEffect(() => { if (tx.type === ActionType.TRANSFER_TO_STARKNET || (tx.eth_hash && tx.starknet_hash)) { setNetworkData({ + message: DEPOSIT_TXT, explorerName: LINKS.ETHERSCAN.text, explorerUrl: LINKS.ETHERSCAN.txUrl(chainId, tx.eth_hash), explorerLogo: <EtherscanLogo style={{margin: 'auto'}} /> }); } else { setNetworkData({ + message: WITHDRAWAL_TXT, explorerName: LINKS.VOYAGER.text, explorerUrl: LINKS.VOYAGER.txUrl(chainId, tx.starknet_hash), explorerLogo: <StarknetLogo style={{margin: 'auto'}} /> @@ -39,35 +45,59 @@ const TransactionSubmittedModal = ({tx}) => { return ( <div> - <p> - <b>{BODY_TXT_PARTS[0]}</b> - {BODY_TXT_PARTS[1]} - </p> - <center> - <Button - colorBackground={colorWhite} - colorBorder={colorAlpha3} - colorText={colorAlpha3} - icon={ - <Circle color={colorWhite1} size={40}> - {networkData.explorerLogo} - </Circle> - } - style={{ - borderRadius: '7px', - borderWidth: '2px', - fontSize: '16px', - marginTop: '25px', - height: '50px' - }} - text={BTN_TEXT(networkData.explorerName)} - onClick={onClick} - /> - </center> + <TransactionSubmittedModalText bold={true} text={networkData.message} /> + <TransactionSubmittedModalText text={STATUS_TXT} /> + <TransactionSubmittedModalButton + networkLogo={networkData.explorerLogo} + networkName={networkData.explorerName} + onClick={onClick} + /> </div> ); }; +const TransactionSubmittedModalText = ({text, bold}) => { + return <p>{bold ? <b>{text}</b> : text}</p>; +}; + +const TransactionSubmittedModalButton = ({networkName, networkLogo, onClick}) => { + const {colorAlpha3, colorWhite, colorWhite1} = useColors(); + return ( + <center> + <Button + colorBackground={colorWhite} + colorBorder={colorAlpha3} + colorText={colorAlpha3} + icon={ + <Circle color={colorWhite1} size={40}> + {networkLogo} + </Circle> + } + style={{ + borderRadius: '7px', + borderWidth: '2px', + fontSize: '16px', + marginTop: '25px', + height: '50px' + }} + text={BTN_TEXT(networkName)} + onClick={onClick} + /> + </center> + ); +}; + +TransactionSubmittedModalText.propTypes = { + text: PropTypes.string, + bold: PropTypes.bool +}; + +TransactionSubmittedModalButton.propTypes = { + networkName: PropTypes.string, + networkLogo: PropTypes.object, + onClick: PropTypes.func +}; + TransactionSubmittedModal.propTypes = { tx: PropTypes.object }; diff --git a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.strings.js b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.strings.js index 374fecbe..94df5557 100644 --- a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.strings.js +++ b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.strings.js @@ -1,9 +1,8 @@ -import strings from '../../../../config/strings.json'; -import {evaluate} from '../../../../utils'; +import {evaluate, getString} from '../../../../utils'; -const { - transactionSubmittedModal: {btn_txt, body_txt} -} = strings; +const {btn_txt, withdrawal_txt, deposit_txt, status_txt} = getString('modals.transactionSubmitted'); -export const BODY_TXT_PARTS = body_txt; +export const WITHDRAWAL_TXT = withdrawal_txt; +export const DEPOSIT_TXT = deposit_txt; +export const STATUS_TXT = status_txt; export const BTN_TEXT = explorer => evaluate(btn_txt, {explorer}); diff --git a/src/components/UI/NetworkMenu/NetworkMenu.strings.js b/src/components/UI/NetworkMenu/NetworkMenu.strings.js index 534e5469..12b6303d 100644 --- a/src/components/UI/NetworkMenu/NetworkMenu.strings.js +++ b/src/components/UI/NetworkMenu/NetworkMenu.strings.js @@ -1,8 +1,6 @@ -import strings from '../../../config/strings.json'; +import {getString} from '../../../utils'; -const { - networkMenu: {to_txt, from_txt} -} = strings; +const {to_txt, from_txt} = getString('menus.transfer'); export const TO = to_txt; export const FROM = from_txt; diff --git a/src/components/UI/SearchToken/SearchToken.strings.js b/src/components/UI/SearchToken/SearchToken.strings.js index d170959e..4dc182ee 100644 --- a/src/components/UI/SearchToken/SearchToken.strings.js +++ b/src/components/UI/SearchToken/SearchToken.strings.js @@ -1,7 +1,3 @@ -import strings from '../../../config/strings.json'; +import {getString} from '../../../utils'; -const { - searchToken: {search_placeholder} -} = strings; - -export const SEARCH_PLACEHOLDER = search_placeholder; +export const SEARCH_PLACEHOLDER = getString('menus.selectToken.search_placeholder'); diff --git a/src/components/UI/Toast/ToastHeader/ToastHeader.module.scss b/src/components/UI/Toast/ToastHeader/ToastHeader.module.scss index 15907346..af37a998 100644 --- a/src/components/UI/Toast/ToastHeader/ToastHeader.module.scss +++ b/src/components/UI/Toast/ToastHeader/ToastHeader.module.scss @@ -17,5 +17,6 @@ $color-title: $--color-black; .close { margin-left: 30px; cursor: pointer; + margin-left: auto; } } diff --git a/src/components/UI/Toast/TransferToast/TransferToast.strings.js b/src/components/UI/Toast/TransferToast/TransferToast.strings.js index 2efe93f7..55df0c99 100644 --- a/src/components/UI/Toast/TransferToast/TransferToast.strings.js +++ b/src/components/UI/Toast/TransferToast/TransferToast.strings.js @@ -1,8 +1,6 @@ -import strings from '../../../../config/strings.json'; +import {getString} from '../../../../utils'; -const { - pendingTransferToast: {pending_txt, consumed_txt, rejected_txt} -} = strings; +const {pending_txt, consumed_txt, rejected_txt} = getString('toasts.pendingTransfer'); export const REJECTED_TXT = rejected_txt; export const PENDING_TXT = pending_txt; diff --git a/src/components/UI/Toast/WithdrawalTransferToast/WithdrawalTransferToast.strings.js b/src/components/UI/Toast/WithdrawalTransferToast/WithdrawalTransferToast.strings.js index 8315a0f3..31bdf983 100644 --- a/src/components/UI/Toast/WithdrawalTransferToast/WithdrawalTransferToast.strings.js +++ b/src/components/UI/Toast/WithdrawalTransferToast/WithdrawalTransferToast.strings.js @@ -1,8 +1,8 @@ -import strings from '../../../../config/strings.json'; +import {getString} from '../../../../utils'; -const { - withdrawalTransferToast: {title_txt, body_txt, dismiss_btn_txt, withdrawal_btn_txt} -} = strings; +const {title_txt, body_txt, dismiss_btn_txt, withdrawal_btn_txt} = getString( + 'toasts.withdrawalTransfer' +); export const TITLE_TXT = title_txt; export const BODY_TXT = body_txt; diff --git a/src/components/UI/TokenBalance/TokenBalance.strings.js b/src/components/UI/TokenBalance/TokenBalance.strings.js index 5688421c..818489b7 100644 --- a/src/components/UI/TokenBalance/TokenBalance.strings.js +++ b/src/components/UI/TokenBalance/TokenBalance.strings.js @@ -1,7 +1,3 @@ -import strings from '../../../config/strings.json'; +import {getString} from '../../../utils'; -const { - tokenBalance: {title_txt} -} = strings; - -export const TITLE_TXT = title_txt; +export const TITLE_TXT = getString('menus.transfer.balance_title_txt'); diff --git a/src/components/UI/TokenInput/TokenInput.strings.js b/src/components/UI/TokenInput/TokenInput.strings.js index 844a3a31..b4811d09 100644 --- a/src/components/UI/TokenInput/TokenInput.strings.js +++ b/src/components/UI/TokenInput/TokenInput.strings.js @@ -1,7 +1,3 @@ -import strings from '../../../config/strings.json'; +import {getString} from '../../../utils'; -const { - tokenInput: {input_placeholder_txt} -} = strings; - -export const INPUT_PLACEHOLDER = input_placeholder_txt; +export const INPUT_PLACEHOLDER = getString('menus.transfer.input_placeholder_txt'); diff --git a/src/components/UI/TransferButton/TransferButton.strings.js b/src/components/UI/TransferButton/TransferButton.strings.js index 9c9b0436..8f523a7b 100644 --- a/src/components/UI/TransferButton/TransferButton.strings.js +++ b/src/components/UI/TransferButton/TransferButton.strings.js @@ -1,7 +1,3 @@ -import strings from '../../../config/strings.json'; +import {getString} from '../../../utils'; -const { - transferButton: {btn_txt} -} = strings; - -export const BTN_TXT = btn_txt; +export const BTN_TXT = getString('menus.transfer.transfer_btn_txt'); diff --git a/src/components/UI/TransferLogContainer/TransferLogContainer.strings.js b/src/components/UI/TransferLogContainer/TransferLogContainer.strings.js index 3793e2aa..dc2244d5 100644 --- a/src/components/UI/TransferLogContainer/TransferLogContainer.strings.js +++ b/src/components/UI/TransferLogContainer/TransferLogContainer.strings.js @@ -1,8 +1,8 @@ -import strings from '../../../config/strings.json'; +import {getString} from '../../../utils'; -const { - transferLogContainer: {title_txt, overview_txt, empty_msg_txt, view_more_txt} -} = strings; +const {title_txt, overview_txt, empty_msg_txt, view_more_txt} = getString( + 'menus.account.transferLogContainer' +); export const TITLE_TXT = title_txt; export const OVERVIEW_TXT = overview_txt; diff --git a/src/components/UI/WalletButton/WalletButton.strings.js b/src/components/UI/WalletButton/WalletButton.strings.js index 2db1696d..c8711844 100644 --- a/src/components/UI/WalletButton/WalletButton.strings.js +++ b/src/components/UI/WalletButton/WalletButton.strings.js @@ -1,8 +1,4 @@ -import strings from '../../../config/strings.json'; -import {evaluate} from '../../../utils'; +import {evaluate, getString} from '../../../utils'; -const { - walletButton: {btn_txt} -} = strings; - -export const BTN_TXT = address => evaluate(btn_txt, {address}); +export const BTN_TXT = address => + evaluate(getString('containers.header.wallet_btn_txt'), {address}); diff --git a/src/config/strings.json b/src/config/strings.json index 9eb4b46e..1aa5c957 100644 --- a/src/config/strings.json +++ b/src/config/strings.json @@ -1,104 +1,97 @@ { - "header": { - "chain_txt": "{{chainName}} testnet" - }, - "footer": { - "rights_txt": "© 2022 StarkWare Industries Ltd. All Rights Reserved" - }, - "transfer": { - "insufficient_balance_error_msg": "Insufficient balance" - }, - "transferButton": { - "btn_txt": "Transfer" - }, - "account": { - "title_txt": "{{network}} Account" - }, - "login": { - "title_txt": "Login", - "subtitle_txt": "Please select {{networkName}} wallet to connect with this dApp:", - "download_txt": ["Don’t have a wallet?", "Download Here"], - "modal_txt": "Waiting for confirmation from {{walletName}}" - }, - "selectToken": { - "title_txt": "Select token from:" - }, - "searchToken": { - "search_placeholder": "Token name, symbol, or address" - }, - "transferLog": { - "withdrawal_btn_txt": "Withdrawal" - }, - "accountAddress": { - "copied_msg_txt": "Copied!" - }, - "logoutButton": { - "btn_txt": "Logout" - }, - "maxButton": { - "btn_txt": "Max" - }, - "backButton": { - "btn_txt": "Back" - }, - "walletButton": { - "btn_txt": "Account | {{address}}" - }, - "networkMenu": { - "to_txt": "to", - "from_txt": "from" - }, - "tokenBalance": { - "title_txt": "Available balance" - }, - "tokenInput": { - "input_placeholder_txt": "0.00" - }, - "transferLogContainer": { - "title_txt": "Transfers log", - "overview_txt": "recent transfers", - "empty_msg_txt": "Transfers will appear here...", - "view_more_txt": "View more" - }, - "transactionSubmittedModal": { - "btn_txt": "View on {{explorer}}", - "body_txt": [ - "Your transaction has been sent to StarkNet!\n", - "We'll notify you once its status will be updated." - ] - }, - "transferProgressModal": { - "approval": { - "type": "Approval required", - "message": "Requesting permission to access your {{symbol}} funds" + "containers": { + "header": { + "chain_txt": "{{chainName}} testnet", + "wallet_btn_txt": "Account | {{address}}" }, - "deposit": { - "type": "Deposit in progress", - "message": "Depositing {{amount}} {{symbol}} to StarkNet" + "footer": { + "rights_txt": "© 2022 StarkWare Industries Ltd. All Rights Reserved" + } + }, + "menus": { + "back_btn_txt": "Back", + "login": { + "title_txt": "Login", + "subtitle_txt": "Please select {{networkName}} wallet to connect with this dApp:", + "download_txt": ["Don’t have a wallet?", "Download Here"], + "modal_txt": "Waiting for confirmation from {{walletName}}" }, - "initiateWithdraw": { - "type": "Initiate withdrawal", - "message": "Initiating withdrawal of {{amount}} {{symbol}} from StarkNet" + "account": { + "title_txt": "{{network}} Account", + "copied_msg_txt": "Copied!", + "logout_btn_txt": "Logout", + "transferLogContainer": { + "title_txt": "Transfers log", + "overview_txt": "recent transfers", + "empty_msg_txt": "Transfers will appear here...", + "view_more_txt": "View more", + "transferLog": { + "withdrawal_btn_txt": "Withdrawal" + } + } }, - "waitForAccept": { - "type": "Transaction sent", - "message": "Waiting for transaction to be accepted on StarkNet" + "selectToken": { + "title_txt": "Select token from:", + "search_placeholder": "Token name, symbol, or address" }, - "withdraw": { - "type": "Withdrawal in Progress", - "message": "Withdrawing {{amount}} {{symbol}} to Ethereum" + "transfer": { + "to_txt": "to", + "from_txt": "from", + "insufficient_balance_error_msg": "Insufficient balance", + "max_btn_txt": "Max", + "balance_title_txt": "Available balance", + "input_placeholder_txt": "0.00", + "transfer_btn_txt": "Transfer" + } + }, + "modals": { + "transactionSubmitted": { + "title_txt": "Transaction sent", + "btn_txt": "View on {{explorer}}", + "withdrawal_txt": "Your transaction is now being processing on StarkNet. When it will be accepted on-chain, we will promote you to complete your transfer.", + "deposit_txt": "Your transaction has been sent to StarkNet!", + "status_txt": "Follow the transaction status on the right side of the browser." }, - "error_title": "Transaction error" - }, - "pendingTransferToast": { - "pending_txt": "Waiting for transaction to be consumed on StarkNet", - "consumed_txt": "Transaction consumed successfully on StarkNet", - "rejected_txt": "Transaction rejected on StarkNet" - }, - "withdrawalTransferToast": { - "title_txt": "StarkNet finished to process your withdrawal!", - "body_txt": "Click on Withdrawal to transfer the funds from StarkNet Bridge to your Ethereum address.", - "dismiss_btn_txt": "Dismiss", - "withdrawal_btn_txt": "Withdrawal" + "transferProgress": { + "approval": { + "type": "Approval required", + "message": "Requesting permission to access your {{symbol}} funds." + }, + "deposit": { + "type": "Transfer in progress", + "message": "Transferring {{amount}} {{symbol}} to StarkNet..." + }, + "initiateWithdraw": { + "type": "Initiate transfer", + "message": "Initiating transfer of {{amount}} {{symbol}} from StarkNet..." + }, + "waitForAccept": { + "type": "Transaction sent", + "message": "Waiting for transaction to be accepted on StarkNet..." + }, + "withdraw": { + "type": "Transfer in progress", + "message": "Transferring {{amount}} {{symbol}} to Ethereum..." + }, + "waitForConfirm": { + "type": "{{walletName}}", + "message": "Waiting for confirmation from {{walletName}}" + }, + "confirm_txt": "Confirm this transaction in your wallet", + "error_title": "Transaction error" + } + }, + "toasts": { + "pendingTransfer": { + "pending_txt": "Waiting for transaction to be accepted on StarkNet", + "consumed_txt": "Transaction accepted on StarkNet", + "rejected_txt": "Transaction rejected on StarkNet" + }, + "withdrawalTransfer": { + "title_txt": "StarkNet finished processing your transfer!", + "body_txt": "Click on Complete Transfer to transfer the funds from StarkNet Bridge to your Ethereum address.", + "dismiss_btn_txt": "Dismiss", + "withdrawal_btn_txt": "Complete Transfer" + } } } diff --git a/src/hooks/useContract.js b/src/hooks/useContract.js index 222d4e3e..98845d90 100644 --- a/src/hooks/useContract.js +++ b/src/hooks/useContract.js @@ -17,7 +17,7 @@ export const useContracts = (ABI, getContractHandler = eth_getContract) => { } return null; }), - [ABI] + [ABI, getContract] ); }; @@ -33,7 +33,7 @@ export const useContract = (ABI, getContractHandler = eth_getContract) => { return null; } }, - [ABI, chainId] + [ABI, chainId, getContractHandler] ); }; @@ -44,7 +44,7 @@ export const useTokenContract = () => { return useCallback( tokenAddresses => isEthereum ? getTokenContract(tokenAddresses) : getStarknetTokenContract(tokenAddresses), - [isEthereum] + [isEthereum, getStarknetTokenContract, getTokenContract] ); }; @@ -57,44 +57,44 @@ export const useTokenBridgeContract = () => { isEthereum ? getTokenBridgeContract(bridgeAddress) : getStarknetTokenBridgeContract(bridgeAddress), - [isEthereum] + [isEthereum, getTokenBridgeContract, getStarknetTokenBridgeContract] ); }; export const useStarknetTokenContract = () => { const getContract = useContract(STARKNET_ERC20_ABI, starknet_getContract); - return useCallback(tokenAddresses => getContract(tokenAddresses), []); + return useCallback(tokenAddresses => getContract(tokenAddresses), [getContract]); }; export const useStarknetTokenContracts = () => { const getContracts = useContracts(STARKNET_ERC20_ABI, starknet_getContract); - return useCallback(tokensAddresses => getContracts(tokensAddresses), []); + return useCallback(tokensAddresses => getContracts(tokensAddresses), [getContracts]); }; export const useEthereumTokenContract = () => { const getContract = useContract(ERC20_ABI); - return useCallback(tokenAddresses => getContract(tokenAddresses), []); + return useCallback(tokenAddresses => getContract(tokenAddresses), [getContract]); }; export const useEthereumTokenContracts = () => { const getContracts = useContracts(ERC20_ABI); - return useCallback(tokensAddresses => getContracts(tokensAddresses), []); + return useCallback(tokensAddresses => getContracts(tokensAddresses), [getContracts]); }; export const useEthBridgeContract = () => { const getContract = useContract(ETH_BRIDGE_ABI); - return useMemo(() => getContract(ETH_BRIDGE_CONTRACT_ADDRESS), []); + return useMemo(() => getContract(ETH_BRIDGE_CONTRACT_ADDRESS), [getContract]); }; export const useMessagingContract = () => { const getContract = useContract(MESSAGING_ABI); - return useMemo(() => getContract(MESSAGING_CONTRACT_ADDRESS), []); + return useMemo(() => getContract(MESSAGING_CONTRACT_ADDRESS), [getContract]); }; export const useStarknetTokenBridgeContract = () => { const getContract = useContract(STARKNET_BRIDGE_ABI, starknet_getContract); - return useCallback(bridgeAddress => getContract(bridgeAddress), []); + return useCallback(bridgeAddress => getContract(bridgeAddress), [getContract]); }; export const useEthereumTokenBridgeContract = () => { const getContract = useContract(ERC20_BRIDGE_ABI); - return useCallback(bridgeAddress => getContract(bridgeAddress), []); + return useCallback(bridgeAddress => getContract(bridgeAddress), [getContract]); }; diff --git a/src/hooks/useStrings.js b/src/hooks/useStrings.js deleted file mode 100644 index 77f5d31d..00000000 --- a/src/hooks/useStrings.js +++ /dev/null @@ -1,5 +0,0 @@ -import {useMemo} from 'react'; - -import strings from '../config/strings.json'; - -export const useStrings = () => useMemo(() => strings, []); diff --git a/src/hooks/useTokenBalance.js b/src/hooks/useTokenBalance.js index 9f237aa1..c92f96f2 100644 --- a/src/hooks/useTokenBalance.js +++ b/src/hooks/useTokenBalance.js @@ -13,7 +13,7 @@ export const useTokenBalance = account => { isEthereum ? getEthereumTokenBalance(tokenAddresses) : getStarknetTokenBalance(tokenAddresses), - [isEthereum, account] + [isEthereum, account, getEthereumTokenBalance, getStarknetTokenBalance] ); }; @@ -21,7 +21,7 @@ export const useStarknetTokenBalance = account => { const getContract = useStarknetTokenContract(); return useCallback( async tokenAddresses => await balanceOf(account, getContract(tokenAddresses), false), - [account] + [account, getContract] ); }; @@ -32,6 +32,6 @@ export const useEthereumTokenBalance = account => { tokenAddresses ? await balanceOf(account, getContract(tokenAddresses), true) : await eth_ethBalanceOf(account), - [account] + [account, getContract] ); }; diff --git a/src/hooks/useTransfer.js b/src/hooks/useTransfer.js index 9e21bdc6..e7a6addc 100644 --- a/src/hooks/useTransfer.js +++ b/src/hooks/useTransfer.js @@ -1,7 +1,7 @@ import {useCallback, useEffect, useState} from 'react'; import {constants, stark} from 'starknet'; -import {eth_deposit, eth_depositEth, eth_withdraw, starknet_initiateWithdraw} from '../api/bridge'; +import {deposit, depositEth, withdraw, initiateWithdraw} from '../api/bridge'; import {allowance, approve} from '../api/erc20'; import { useErrorModal, @@ -18,8 +18,8 @@ import {ActionType} from '../enums'; import {useEthereumToken, useStarknetToken, useTokens} from '../providers/TokensProvider'; import {useTransfers} from '../providers/TransfersProvider'; import {useEthereumWallet, useStarknetWallet} from '../providers/WalletsProvider'; -import {evaluate, hashEquals, isEth, txHash} from '../utils'; -import {eth_listenOnce} from '../utils/contract'; +import {evaluate, getString, hashEquals, isEth, txHash} from '../utils'; +import {eth_listenOnce, starknet_waitForTransaction} from '../utils/contract'; import { useEthBridgeContract, useEthereumTokenBridgeContract, @@ -27,31 +27,21 @@ import { useTokenBridgeContract, useTokenContract } from './useContract'; -import {useStrings} from './useStrings'; export const useTransfer = () => { - const { - transferProgressModal: { - error_title, - approval, - deposit, - initiateWithdraw, - waitForAccept, - withdraw - } - } = useStrings(); + const transferProgressStrings = getString('modals.transferProgress'); const [isLoading, setIsLoading] = useState(false); const [data, setData] = useState(null); const [progress, setProgress] = useState(null); const [error, setError] = useState(null); - const {account: ethereumAccount, chainId} = useEthereumWallet(); - const {account: starknetAccount} = useStarknetWallet(); + const {account: ethereumAccount, chainId, config: ethereumConfig} = useEthereumWallet(); + const {account: starknetAccount, config: starknetConfig} = useStarknetWallet(); const {action} = useTransferData(); const {addTransfer} = useTransfers(); const {updateTokens} = useTokens(); const [, , clearAmount] = useAmount(); const showProgressModal = useProgressModal(); - const showErrorModal = useErrorModal(error_title); + const showErrorModal = useErrorModal(transferProgressStrings.error_title); const hideModal = useHideModal(); const showTransactionSubmittedModal = useTransactionSubmittedModal(); const selectedToken = useSelectedToken(); @@ -64,6 +54,7 @@ export const useTransfer = () => { const getEthereumTokenBridgeContract = useEthereumTokenBridgeContract(); const progressOptions = { approval: symbol => { + const {approval} = transferProgressStrings; const message = evaluate(approval.message, {symbol}); return { type: approval.type, @@ -71,6 +62,7 @@ export const useTransfer = () => { }; }, deposit: (amount, symbol) => { + const {deposit} = transferProgressStrings; const message = evaluate(deposit.message, {amount, symbol}); return { type: deposit.type, @@ -78,17 +70,31 @@ export const useTransfer = () => { }; }, initiateWithdraw: (amount, symbol) => { + const {initiateWithdraw} = transferProgressStrings; const message = evaluate(initiateWithdraw.message, {amount, symbol}); return { type: initiateWithdraw.type, message }; }, - waitForAccept: () => ({ - type: waitForAccept.type, - message: waitForAccept.message - }), + waitForConfirm: walletName => { + const {waitForConfirm} = transferProgressStrings; + const type = evaluate(waitForConfirm.type, {walletName}); + const message = evaluate(waitForConfirm.message, {walletName}); + return { + type, + message + }; + }, + waitForAccept: () => { + const {waitForAccept} = transferProgressStrings; + return { + type: waitForAccept.type, + message: waitForAccept.message + }; + }, withdraw: (amount, symbol) => { + const {withdraw} = transferProgressStrings; const message = evaluate(withdraw.message, {amount, symbol}); return { type: withdraw.type, @@ -108,8 +114,8 @@ export const useTransfer = () => { hideModal(); showErrorModal(error.message); } else if (data) { - showTransactionSubmittedModal(data); addTransfer(data); + showTransactionSubmittedModal(data); updateTokens(); clearAmount(); } @@ -158,14 +164,17 @@ export const useTransfer = () => { await approve(bridgeAddress[chainId], constants.MASK_250, tokenContract, ethereumAccount); } } - setProgress(progressOptions.deposit(amount, symbol)); + setProgress(progressOptions.waitForConfirm(ethereumConfig.name)); + const depositEventPromise = waitForLogMessageToL2(bridgeContract.options.address); const depositPromise = depositHandler( starknetAccount, amount, bridgeContract, - ethereumAccount + ethereumAccount, + { + transactionHash: () => setProgress(progressOptions.deposit(amount, symbol)) + } ); - const depositEventPromise = waitForLogMessageToL2(bridgeContract.options.address); const [{transactionHash}, starknetTxHash] = await Promise.all([ depositPromise, depositEventPromise @@ -185,7 +194,6 @@ export const useTransfer = () => { } catch (ex) { setIsLoading(false); setError(ex); - return Promise.reject(ex); } }; @@ -194,13 +202,18 @@ export const useTransfer = () => { try { const {name, symbol} = selectedToken; setIsLoading(true); - setProgress(progressOptions.initiateWithdraw(amount, symbol)); - const {transaction_hash} = await starknet_initiateWithdraw( + setProgress(progressOptions.waitForConfirm(starknetConfig.name)); + const {transaction_hash} = await initiateWithdraw( ethereumAccount, amount, bridgeContract, - tokenContract + tokenContract, + { + transactionHash: () => setProgress(progressOptions.initiateWithdraw(amount, symbol)) + } ); + setProgress(progressOptions.waitForAccept()); + await starknet_waitForTransaction(transaction_hash); setIsLoading(false); setData({ type: ActionType.TRANSFER_FROM_STARKNET, @@ -215,7 +228,6 @@ export const useTransfer = () => { } catch (ex) { setIsLoading(false); setError(ex); - return Promise.reject(ex); } }; @@ -232,15 +244,16 @@ export const useTransfer = () => { } else { tokenBridgeContract = getEthereumTokenBridgeContract(ethereumToken.bridgeAddress); } - setProgress(progressOptions.withdraw(amount, symbol)); - const {transactionHash} = await eth_withdraw(ethereumAccount, amount, tokenBridgeContract); + setProgress(progressOptions.waitForConfirm(ethereumConfig.name)); + const {transactionHash} = await withdraw(ethereumAccount, amount, tokenBridgeContract, { + transactionHash: () => setProgress(progressOptions.withdraw(amount, symbol)) + }); setIsLoading(false); setData({...transfer, eth_hash: transactionHash}); return data; } catch (ex) { setIsLoading(false); setError(ex); - return Promise.reject(ex); } }, [ethereumAccount] @@ -262,9 +275,9 @@ export const useTransfer = () => { const {tokenAddress, bridgeAddress} = selectedToken; const tokenContract = getTokenContract(tokenAddress); const tokenBridgeContract = getTokenBridgeContract(bridgeAddress); - return await transferToStarknet(amount, eth_deposit, tokenBridgeContract, tokenContract); + return await transferToStarknet(amount, deposit, tokenBridgeContract, tokenContract); } - return await transferToStarknet(amount, eth_depositEth, ethBridgeContract, null); + return await transferToStarknet(amount, depositEth, ethBridgeContract, null); }, [ethereumAccount, starknetAccount, selectedToken] ); diff --git a/src/providers/TokensProvider/TokensProvider.js b/src/providers/TokensProvider/TokensProvider.js index d0b95e8d..845ae88f 100644 --- a/src/providers/TokensProvider/TokensProvider.js +++ b/src/providers/TokensProvider/TokensProvider.js @@ -16,6 +16,14 @@ export const TokensProvider = ({children}) => { const getEthereumTokenBalance = useEthereumTokenBalance(ethereumAccount); const getStarknetTokenBalance = useStarknetTokenBalance(starknetAccount); + useEffect(() => { + updateTokens(); + const intervalId = setInterval(() => { + updateTokens(); + }, pollBalanceInterval); + return () => clearInterval(intervalId); + }, [pollBalanceInterval]); + const updateTokens = () => { logger.log(`It's time to update tokens balances!`); for (let index = 0; index < tokens.length; index++) { @@ -31,7 +39,7 @@ export const TokensProvider = ({children}) => { logger.log(`Token already have a balance of ${token.balance}, don't set isLoading prop`); } const getBalance = token.isEthereum ? getEthereumTokenBalance : getStarknetTokenBalance; - getBalance(tokens[index].tokenAddress) + getBalance(token.tokenAddress) .then(balance => { logger.log(`New ${token.symbol} token balance is ${balance}`); updateTokenState(index, {balance, isLoading: false}); @@ -43,14 +51,6 @@ export const TokensProvider = ({children}) => { } }; - useEffect(() => { - updateTokens(); - const intervalId = setInterval(() => { - updateTokens(); - }, pollBalanceInterval); - return () => clearInterval(intervalId); - }, []); - const updateTokenState = (index, args) => { dispatch({ type: actions.UPDATE_TOKEN_STATE, diff --git a/src/utils/contract.js b/src/utils/contract.js index 3a4df662..c2523c31 100644 --- a/src/utils/contract.js +++ b/src/utils/contract.js @@ -1,6 +1,7 @@ import {getStarknet} from '@argent/get-starknet'; import {compileCalldata, Contract, stark} from 'starknet'; +import {TransactionPendingStatuses} from '../enums'; import {web3} from '../web3'; export const eth_getContract = (address, ABI) => new web3.eth.Contract(ABI, address); @@ -13,9 +14,19 @@ export const eth_callContract = async (contract, method, args = []) => { } }; -export const eth_sendTransaction = async (contract, method, args = [], options = {}) => { +export const eth_sendTransaction = async (contract, method, args = [], options = {}, emitter) => { try { - return contract.methods?.[method](...args).send(options); + const promise = contract.methods?.[method](...args).send(options); + if (emitter) { + return new Promise((resolve, reject) => { + promise + .on('transactionHash', hash => emitter?.transactionHash(hash)) + .on('confirmation', (confNumber, receipt) => emitter?.confirmation(confNumber, receipt)) + .on('receipt', receipt => resolve(receipt)) + .on('error', (error, receipt) => reject(error, receipt)); + }); + } + return promise; } catch (ex) { return Promise.reject(ex); } @@ -36,11 +47,24 @@ export const starknet_callContract = async (contract, method, args = []) => { } }; -export const starknet_sendTransaction = async (contract, method, args = {}) => { +export const starknet_sendTransaction = async (contract, method, args = {}, emitter) => { try { + if (emitter) { + const handler = event => { + const {data} = event; + const {type} = data; + if (type === 'FAILED_TX') { + window.removeEventListener('message', handler); + } else if (type === 'SIGN') { + emitter?.transactionHash(data.hash); + window.removeEventListener('message', handler); + } + }; + window.addEventListener('message', handler); + } const methodSelector = stark.getSelectorFromName(method); const compiledCalldata = compileCalldata(args); - return await getStarknet().signer.invokeFunction( + return getStarknet().signer.invokeFunction( contract.connectedTo, methodSelector, compiledCalldata @@ -50,5 +74,20 @@ export const starknet_sendTransaction = async (contract, method, args = {}) => { } }; -export const starknet_waitForTransaction = async hash => - await getStarknet().provider.waitForTx(hash); +export const starknet_waitForTransaction = async (hash, retryInterval = 5000) => { + return new Promise(resolve => { + let processing = false; + const intervalId = setInterval(async () => { + if (processing) return; + const statusPromise = getStarknet().provider.getTransactionStatus(hash); + processing = true; + const {tx_status} = await statusPromise; + if (!TransactionPendingStatuses.includes(tx_status)) { + clearInterval(intervalId); + resolve(); + } else { + processing = false; + } + }, retryInterval); + }); +}; diff --git a/src/utils/helpers.js b/src/utils/helpers.js new file mode 100644 index 00000000..39da649b --- /dev/null +++ b/src/utils/helpers.js @@ -0,0 +1,12 @@ +import strings from '../config/strings.json'; +import {getLogger, getLogLevel, setLogLevel} from '../services'; +import {getPropertyPath} from './object'; + +export const printPackageInfo = (name, version, color) => { + const currentLogLevel = getLogLevel(); + setLogLevel(getLogger().INFO); + getLogger().info(`%c ${name} v${version}`, `color: ${color || '#ff98f9'}; font-size: large`); + setLogLevel(currentLogLevel); +}; + +export const getString = path => getPropertyPath(strings, path); diff --git a/src/utils/index.js b/src/utils/index.js index e2bab254..9be9adf3 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -1,5 +1,3 @@ -import {getLogger, getLogLevel, setLogLevel} from '../services'; - export * from './wallet'; export * from './browser'; export * from './string'; @@ -7,10 +5,5 @@ export * from './token'; export * from './number'; export * from './hash'; export * from './date'; - -export const printPackageInfo = (name, version, color) => { - const currentLogLevel = getLogLevel(); - setLogLevel(getLogger().INFO); - getLogger().info(`%c ${name} v${version}`, `color: ${color || '#ff98f9'}; font-size: large`); - setLogLevel(currentLogLevel); -}; +export * from './object'; +export * from './helpers'; diff --git a/src/utils/object.js b/src/utils/object.js new file mode 100644 index 00000000..c2f1ba4d --- /dev/null +++ b/src/utils/object.js @@ -0,0 +1,24 @@ +export const getPropertyPath = (obj, propertyPath) => + propertyPath + .split('.') + .reduce((o, x) => (typeof o === 'undefined' || o === null ? o : o[x]), obj); + +export const toClasses = (...classes) => [...classes].join(' '); + +export const evaluate = (template, model) => { + try { + let reg, + res = template; + for (let key in model) { + let value = model[key] !== undefined && model[key] !== null ? model[key] : ''; + if (typeof value === 'string' && value.indexOf('"') > -1) { + value = value.replace(/"/g, '\\"'); + } + reg = new RegExp('{{' + key + '}}', 'g'); + res = res.replace(reg, value); + } + return res; + } catch (ex) { + return ''; + } +}; diff --git a/src/utils/string.js b/src/utils/string.js index 98b05664..13d218b0 100644 --- a/src/utils/string.js +++ b/src/utils/string.js @@ -1,23 +1,3 @@ -export const toClasses = (...classes) => [...classes].join(' '); - -export const evaluate = (template, model) => { - try { - let reg, - res = template; - for (let key in model) { - let value = model[key] !== undefined && model[key] !== null ? model[key] : ''; - if (typeof value === 'string' && value.indexOf('"') > -1) { - value = value.replace(/"/g, '\\"'); - } - reg = new RegExp('{{' + key + '}}', 'g'); - res = res.replace(reg, value); - } - return res; - } catch (ex) { - return ''; - } -}; - export const capitalize = s => { if (typeof s !== 'string') return ''; return s.charAt(0).toUpperCase() + s.slice(1); From ad96bba314c8938d67e424252872d951d8776c83 Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Tue, 28 Dec 2021 08:58:25 +0000 Subject: [PATCH 044/211] chore(release): 0.0.1-5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fa81569c..a9ec4891 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starknet-bridge", - "version": "0.0.1-4", + "version": "0.0.1-5", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 8ce82c867f195837b5e4a89f908cb0d8ad39abc1 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 28 Dec 2021 11:02:47 +0200 Subject: [PATCH 045/211] fix: logo is not clickable (#46) --- src/components/Containers/Header/Header.js | 8 ++++++-- src/components/Containers/Header/Header.module.scss | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/components/Containers/Header/Header.js b/src/components/Containers/Header/Header.js index 72c12e1b..928a87cb 100644 --- a/src/components/Containers/Header/Header.js +++ b/src/components/Containers/Header/Header.js @@ -12,7 +12,7 @@ import {CHAIN_TXT} from './Header.strings'; export const Header = () => { const {chainName, isConnected} = useWallets(); - const {showAccountMenu} = useBridgeActions(); + const {showAccountMenu, showTransferMenu} = useBridgeActions(); const [, setEthereum] = useIsEthereum(); const [, setStarknet] = useIsStarknet(); const { @@ -36,10 +36,14 @@ export const Header = () => { showAccountMenu(); }; + const onLogoClick = () => { + showTransferMenu(); + }; + return ( <div className={toClasses(styles.header, 'row')}> <div className={toClasses(styles.left, 'row')}> - <div className={toClasses(styles.logo, 'row')}> + <div className={toClasses(styles.logo, 'row')} onClick={onLogoClick}> <img alt="" height={STARKNET_LOGO_SIZE} src={StarkNetLogoPath} /> <div className={styles.bridge}>Bridge</div> </div> diff --git a/src/components/Containers/Header/Header.module.scss b/src/components/Containers/Header/Header.module.scss index 6f466db5..b3542715 100644 --- a/src/components/Containers/Header/Header.module.scss +++ b/src/components/Containers/Header/Header.module.scss @@ -21,6 +21,7 @@ $bridge-color: $--color-beta; .logo { transition: 0.3s ease-in-out; + cursor: pointer; .bridge { transition: 0.3s ease-in-out; From 61a4b4ffb39d74f7ef2fb5f71d732791dff50a4b Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Tue, 28 Dec 2021 09:04:10 +0000 Subject: [PATCH 046/211] chore(release): 0.0.1-6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a9ec4891..1afbaea4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starknet-bridge", - "version": "0.0.1-5", + "version": "0.0.1-6", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From b130ca24041a096a9af6318d70410c7dbfc7bb19 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Wed, 29 Dec 2021 12:20:30 +0200 Subject: [PATCH 047/211] fix: transfer from starknet modal progress (#49) --- src/api/bridge.js | 21 ++++----------- .../ModalProvider/ModalProvider.hooks.js | 4 +-- .../TransactionSubmittedModal.js | 15 ++++++----- .../TransactionSubmittedModal.strings.js | 5 +++- .../Toast/ToastHeader/ToastHeader.module.scss | 3 +-- src/config/strings.json | 1 + src/hooks/useTransfer.js | 9 +++---- src/utils/contract.js | 27 +++++++------------ 8 files changed, 36 insertions(+), 49 deletions(-) diff --git a/src/api/bridge.js b/src/api/bridge.js index 8e6a412d..931870ed 100644 --- a/src/api/bridge.js +++ b/src/api/bridge.js @@ -51,24 +51,13 @@ export const withdraw = async (recipient, amount, tokenBridgeContract, emitter) } }; -export const initiateWithdraw = async ( - recipient, - amount, - tokenBridgeContract, - tokenContract, - emitter -) => { +export const initiateWithdraw = async (recipient, amount, tokenBridgeContract, tokenContract) => { try { const dec = await decimals(tokenContract, false); - return starknet_sendTransaction( - tokenBridgeContract, - 'initiate_withdraw', - { - l1Recipient: parseToFelt(recipient), - amount: parseToUint256(amount, dec) - }, - emitter - ); + return starknet_sendTransaction(tokenBridgeContract, 'initiate_withdraw', { + l1Recipient: parseToFelt(recipient), + amount: parseToUint256(amount, dec) + }); } catch (ex) { return Promise.reject(ex); } diff --git a/src/components/Features/ModalProvider/ModalProvider.hooks.js b/src/components/Features/ModalProvider/ModalProvider.hooks.js index 3ee21b3f..fd6669e4 100644 --- a/src/components/Features/ModalProvider/ModalProvider.hooks.js +++ b/src/components/Features/ModalProvider/ModalProvider.hooks.js @@ -39,12 +39,12 @@ export const useProgressModal = () => { export const useTransactionSubmittedModal = () => { const dispatch = useDispatch(); return useCallback( - tx => { + transfer => { dispatch( showModalAction({ componentPath: 'UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal', componentProps: { - tx + transfer }, title: TRANSACTION_SUBMITTED_TITLE_TXT, isClosable: true diff --git a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js index af022d26..66d80182 100644 --- a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js +++ b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js @@ -12,28 +12,31 @@ import {Button} from '../../Button/Button'; import {Circle} from '../../Circle/Circle'; import { BTN_TEXT, + COMPLETE_WITHDRAWAL_TXT, DEPOSIT_TXT, STATUS_TXT, WITHDRAWAL_TXT } from './TransactionSubmittedModal.strings'; -const TransactionSubmittedModal = ({tx}) => { +const TransactionSubmittedModal = ({transfer}) => { const {chainId} = useWallets(); const [networkData, setNetworkData] = useState({}); useEffect(() => { - if (tx.type === ActionType.TRANSFER_TO_STARKNET || (tx.eth_hash && tx.starknet_hash)) { + const isCompletedWithdrawal = transfer.eth_hash && transfer.starknet_hash; + if (transfer.type === ActionType.TRANSFER_TO_STARKNET || isCompletedWithdrawal) { setNetworkData({ - message: DEPOSIT_TXT, + message: + transfer.type === ActionType.TRANSFER_TO_STARKNET ? DEPOSIT_TXT : COMPLETE_WITHDRAWAL_TXT, explorerName: LINKS.ETHERSCAN.text, - explorerUrl: LINKS.ETHERSCAN.txUrl(chainId, tx.eth_hash), + explorerUrl: LINKS.ETHERSCAN.txUrl(chainId, transfer.eth_hash), explorerLogo: <EtherscanLogo style={{margin: 'auto'}} /> }); } else { setNetworkData({ message: WITHDRAWAL_TXT, explorerName: LINKS.VOYAGER.text, - explorerUrl: LINKS.VOYAGER.txUrl(chainId, tx.starknet_hash), + explorerUrl: LINKS.VOYAGER.txUrl(chainId, transfer.starknet_hash), explorerLogo: <StarknetLogo style={{margin: 'auto'}} /> }); } @@ -99,7 +102,7 @@ TransactionSubmittedModalButton.propTypes = { }; TransactionSubmittedModal.propTypes = { - tx: PropTypes.object + transfer: PropTypes.object }; export default TransactionSubmittedModal; diff --git a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.strings.js b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.strings.js index 94df5557..b4a6fc45 100644 --- a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.strings.js +++ b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.strings.js @@ -1,7 +1,10 @@ import {evaluate, getString} from '../../../../utils'; -const {btn_txt, withdrawal_txt, deposit_txt, status_txt} = getString('modals.transactionSubmitted'); +const {btn_txt, withdrawal_txt, complete_withdrawal_txt, deposit_txt, status_txt} = getString( + 'modals.transactionSubmitted' +); +export const COMPLETE_WITHDRAWAL_TXT = complete_withdrawal_txt; export const WITHDRAWAL_TXT = withdrawal_txt; export const DEPOSIT_TXT = deposit_txt; export const STATUS_TXT = status_txt; diff --git a/src/components/UI/Toast/ToastHeader/ToastHeader.module.scss b/src/components/UI/Toast/ToastHeader/ToastHeader.module.scss index af37a998..f069b18f 100644 --- a/src/components/UI/Toast/ToastHeader/ToastHeader.module.scss +++ b/src/components/UI/Toast/ToastHeader/ToastHeader.module.scss @@ -15,8 +15,7 @@ $color-title: $--color-black; } .close { - margin-left: 30px; + margin-left: 25px; cursor: pointer; - margin-left: auto; } } diff --git a/src/config/strings.json b/src/config/strings.json index 1aa5c957..dbdddcfc 100644 --- a/src/config/strings.json +++ b/src/config/strings.json @@ -49,6 +49,7 @@ "title_txt": "Transaction sent", "btn_txt": "View on {{explorer}}", "withdrawal_txt": "Your transaction is now being processing on StarkNet. When it will be accepted on-chain, we will promote you to complete your transfer.", + "complete_withdrawal_txt": "Your transaction is completed on Ethereum!", "deposit_txt": "Your transaction has been sent to StarkNet!", "status_txt": "Follow the transaction status on the right side of the browser." }, diff --git a/src/hooks/useTransfer.js b/src/hooks/useTransfer.js index e7a6addc..89b93f6c 100644 --- a/src/hooks/useTransfer.js +++ b/src/hooks/useTransfer.js @@ -14,7 +14,7 @@ import { useSelectedToken, useTransferData } from '../components/Features/Transfer/Transfer.hooks'; -import {ActionType} from '../enums'; +import {ActionType, TransactionStatus} from '../enums'; import {useEthereumToken, useStarknetToken, useTokens} from '../providers/TokensProvider'; import {useTransfers} from '../providers/TransfersProvider'; import {useEthereumWallet, useStarknetWallet} from '../providers/WalletsProvider'; @@ -207,11 +207,10 @@ export const useTransfer = () => { ethereumAccount, amount, bridgeContract, - tokenContract, - { - transactionHash: () => setProgress(progressOptions.initiateWithdraw(amount, symbol)) - } + tokenContract ); + setProgress(progressOptions.initiateWithdraw(amount, symbol)); + await starknet_waitForTransaction(transaction_hash, TransactionStatus.RECEIVED); setProgress(progressOptions.waitForAccept()); await starknet_waitForTransaction(transaction_hash); setIsLoading(false); diff --git a/src/utils/contract.js b/src/utils/contract.js index c2523c31..11b55499 100644 --- a/src/utils/contract.js +++ b/src/utils/contract.js @@ -1,7 +1,7 @@ import {getStarknet} from '@argent/get-starknet'; import {compileCalldata, Contract, stark} from 'starknet'; -import {TransactionPendingStatuses} from '../enums'; +import {TransactionConsumedStatuses} from '../enums'; import {web3} from '../web3'; export const eth_getContract = (address, ABI) => new web3.eth.Contract(ABI, address); @@ -47,21 +47,8 @@ export const starknet_callContract = async (contract, method, args = []) => { } }; -export const starknet_sendTransaction = async (contract, method, args = {}, emitter) => { +export const starknet_sendTransaction = async (contract, method, args = {}) => { try { - if (emitter) { - const handler = event => { - const {data} = event; - const {type} = data; - if (type === 'FAILED_TX') { - window.removeEventListener('message', handler); - } else if (type === 'SIGN') { - emitter?.transactionHash(data.hash); - window.removeEventListener('message', handler); - } - }; - window.addEventListener('message', handler); - } const methodSelector = stark.getSelectorFromName(method); const compiledCalldata = compileCalldata(args); return getStarknet().signer.invokeFunction( @@ -74,18 +61,24 @@ export const starknet_sendTransaction = async (contract, method, args = {}, emit } }; -export const starknet_waitForTransaction = async (hash, retryInterval = 5000) => { +export const starknet_waitForTransaction = async (hash, customStatus, retryInterval = 5000) => { return new Promise(resolve => { let processing = false; + const waitingForStatuses = customStatus ? [customStatus] : TransactionConsumedStatuses; + console.log(`Waiting for transaction with statuses ${waitingForStatuses.join(' ')}`); const intervalId = setInterval(async () => { if (processing) return; + console.log(`Checking transaction again`); const statusPromise = getStarknet().provider.getTransactionStatus(hash); processing = true; const {tx_status} = await statusPromise; - if (!TransactionPendingStatuses.includes(tx_status)) { + console.log(`Transaction status is ${tx_status}`); + if (waitingForStatuses.includes(tx_status)) { + console.log(`We got our desired status!`); clearInterval(intervalId); resolve(); } else { + console.log(`We haven't got our desired status, trying again.`); processing = false; } }, retryInterval); From 193d885165014b7e1afca4bf7155786de7a565df Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Wed, 29 Dec 2021 10:21:45 +0000 Subject: [PATCH 048/211] chore(release): 0.0.1-7 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1afbaea4..dc0a565b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starknet-bridge", - "version": "0.0.1-6", + "version": "0.0.1-7", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From b3cc930ef61d0c8a0b12ed119b9ed96ccecf59b2 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Thu, 30 Dec 2021 14:08:25 +0200 Subject: [PATCH 049/211] refactor: useTransfer hooks (#51) --- src/components/Features/Account/Account.js | 6 +- .../ModalProvider/ModalProvider.hooks.js | 4 +- .../Features/ToastProvider/ToastProvider.js | 6 +- src/components/Features/Transfer/Transfer.js | 14 +- .../TransactionSubmittedModal.js | 4 +- src/hooks/index.js | 2 + src/hooks/useEventListener.js | 101 ++++ src/hooks/useTransfer.js | 476 +++++++++--------- src/hooks/useTransferProgress.js | 67 +++ src/utils/contract.js | 32 +- 10 files changed, 431 insertions(+), 281 deletions(-) create mode 100644 src/hooks/useEventListener.js create mode 100644 src/hooks/useTransferProgress.js diff --git a/src/components/Features/Account/Account.js b/src/components/Features/Account/Account.js index 9dc2ccb7..21219be9 100644 --- a/src/components/Features/Account/Account.js +++ b/src/components/Features/Account/Account.js @@ -1,7 +1,7 @@ import React from 'react'; import {LINKS} from '../../../constants'; -import {useTransfer} from '../../../hooks'; +import {useCompleteTransferToL1} from '../../../hooks'; import {useAccountTransfers} from '../../../providers/TransfersProvider'; import {useWallets} from '../../../providers/WalletsProvider'; import { @@ -24,7 +24,7 @@ export const Account = () => { const {account, chainId, resetWallet} = useWallets(); const transfers = useAccountTransfers(account); const {isEthereum, isStarknet, fromNetwork} = useTransferData(); - const {finalizeTransferFromStarknet} = useTransfer(); + const completeTransferToL1 = useCompleteTransferToL1(); const renderTransfers = () => { return transfers.length @@ -32,7 +32,7 @@ export const Account = () => { <TransferLog key={index} transfer={transfer} - onWithdrawClick={() => finalizeTransferFromStarknet(transfer)} + onWithdrawClick={() => completeTransferToL1(transfer)} /> )) : null; diff --git a/src/components/Features/ModalProvider/ModalProvider.hooks.js b/src/components/Features/ModalProvider/ModalProvider.hooks.js index fd6669e4..28356883 100644 --- a/src/components/Features/ModalProvider/ModalProvider.hooks.js +++ b/src/components/Features/ModalProvider/ModalProvider.hooks.js @@ -55,10 +55,10 @@ export const useTransactionSubmittedModal = () => { ); }; -export const useErrorModal = title => { +export const useErrorModal = () => { const dispatch = useDispatch(); return useCallback( - body => { + (title, body) => { dispatch( showModalAction({ title, diff --git a/src/components/Features/ToastProvider/ToastProvider.js b/src/components/Features/ToastProvider/ToastProvider.js index a354e504..bc079faa 100644 --- a/src/components/Features/ToastProvider/ToastProvider.js +++ b/src/components/Features/ToastProvider/ToastProvider.js @@ -11,7 +11,7 @@ import { isRejected, NetworkType } from '../../../enums'; -import {usePrevious, useTransfer} from '../../../hooks'; +import {useCompleteTransferToL1, usePrevious} from '../../../hooks'; import {useTransfers} from '../../../providers/TransfersProvider'; import {getFullTime} from '../../../utils'; import {ToastBody, TransferToast, WithdrawalTransferToast} from '../../UI'; @@ -22,7 +22,7 @@ export const ToastProvider = () => { const prevTransfers = usePrevious(transfers); const toastsMap = useRef({}); const toastsDismissed = useRef({}); - const {finalizeTransferFromStarknet} = useTransfer(); + const completeTransferToL1 = useCompleteTransferToL1(); useDeepCompareEffect(() => { transfers.forEach(transfer => { @@ -111,7 +111,7 @@ export const ToastProvider = () => { }; const onWithdrawalClick = async transfer => { - await finalizeTransferFromStarknet(transfer); + await completeTransferToL1(transfer); dismissToast(transfer); }; diff --git a/src/components/Features/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer.js index ced3b969..88aab60b 100644 --- a/src/components/Features/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer.js @@ -1,7 +1,7 @@ import React, {useEffect, useState} from 'react'; import {ActionType, NetworkType} from '../../../enums'; -import {useTransfer} from '../../../hooks'; +import {useTransferToL1, useTransferToL2} from '../../../hooks'; import {useEthereumToken, useStarknetToken, useTokens} from '../../../providers/TokensProvider'; import { Loading, @@ -33,7 +33,8 @@ export const Transfer = () => { const {showSelectTokenMenu} = useBridgeActions(); const {selectedToken, action} = useTransferData(); const {selectToken} = useTransferActions(); - const {transferTokenToStarknet, transferTokenFromStarknet, isLoading} = useTransfer(); + const transferToL2 = useTransferToL2(); + const transferToL1 = useTransferToL1(); const {tokens} = useTokens(); const getEthereumToken = useEthereumToken(); const getStarknetToken = useStarknetToken(); @@ -72,8 +73,7 @@ export const Transfer = () => { isStarknet ? setEthereum() : setStarknet(); }; - const onTransferClick = async () => - isEthereum ? transferTokenToStarknet(amount) : transferTokenFromStarknet(amount); + const onTransferClick = async () => (isEthereum ? transferToL2(amount) : transferToL1(amount)); const renderTabs = () => { return Object.values(ActionType).map((tab, index) => { @@ -122,11 +122,7 @@ export const Transfer = () => { onTokenSelect={showSelectTokenMenu} /> {hasInputError && <div className={styles.errorMsg}>{INSUFFICIENT_BALANCE_ERROR_MSG}</div>} - <TransferButton - isDisabled={isButtonDisabled} - isLoading={isLoading} - onClick={onTransferClick} - /> + <TransferButton isDisabled={isButtonDisabled} onClick={onTransferClick} /> </> ); }; diff --git a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js index 66d80182..287b7b94 100644 --- a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js +++ b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js @@ -28,6 +28,7 @@ const TransactionSubmittedModal = ({transfer}) => { setNetworkData({ message: transfer.type === ActionType.TRANSFER_TO_STARKNET ? DEPOSIT_TXT : COMPLETE_WITHDRAWAL_TXT, + showStatusMsg: transfer.type === ActionType.TRANSFER_TO_STARKNET, explorerName: LINKS.ETHERSCAN.text, explorerUrl: LINKS.ETHERSCAN.txUrl(chainId, transfer.eth_hash), explorerLogo: <EtherscanLogo style={{margin: 'auto'}} /> @@ -35,6 +36,7 @@ const TransactionSubmittedModal = ({transfer}) => { } else { setNetworkData({ message: WITHDRAWAL_TXT, + showStatusMsg: true, explorerName: LINKS.VOYAGER.text, explorerUrl: LINKS.VOYAGER.txUrl(chainId, transfer.starknet_hash), explorerLogo: <StarknetLogo style={{margin: 'auto'}} /> @@ -49,7 +51,7 @@ const TransactionSubmittedModal = ({transfer}) => { return ( <div> <TransactionSubmittedModalText bold={true} text={networkData.message} /> - <TransactionSubmittedModalText text={STATUS_TXT} /> + {networkData.showStatusMsg && <TransactionSubmittedModalText text={STATUS_TXT} />} <TransactionSubmittedModalButton networkLogo={networkData.explorerLogo} networkName={networkData.explorerName} diff --git a/src/hooks/index.js b/src/hooks/index.js index ec4981b6..064b9ad4 100644 --- a/src/hooks/index.js +++ b/src/hooks/index.js @@ -10,3 +10,5 @@ export * from './useFetchData'; export * from './usePrevious'; export * from './useTransfer'; export * from './useConfig'; +export * from './useEventListener'; +export * from './useTransferProgress'; diff --git a/src/hooks/useEventListener.js b/src/hooks/useEventListener.js new file mode 100644 index 00000000..70e54216 --- /dev/null +++ b/src/hooks/useEventListener.js @@ -0,0 +1,101 @@ +import {useCallback} from 'react'; +import {stark} from 'starknet'; + +import {useSelectedToken} from '../components/Features/Transfer/Transfer.hooks'; +import {useEthereumToken, useStarknetToken} from '../providers/TokensProvider'; +import {useEthereumWallet, useStarknetWallet} from '../providers/WalletsProvider'; +import {isEth, txHash} from '../utils'; +import {useEthBridgeContract, useMessagingContract, useTokenBridgeContract} from './useContract'; +import {useLogger} from './useLogger'; + +const HOOK_MODULE = 'useEventListener'; + +export const useLogMessageToL2Listener = () => { + const logger = useLogger(`${HOOK_MODULE}:useLogMessageToL2Listener`); + const selectedToken = useSelectedToken(); + const getEthereumToken = useEthereumToken(); + const getStarknetToken = useStarknetToken(); + const messagingContract = useMessagingContract(); + const addEventListener = useEventListener(); + const {chainId} = useEthereumWallet(); + + return useCallback(async () => { + logger.log('Registering to LogMessageToL2 event'); + const {symbol} = selectedToken; + const snBridgeAddress = getStarknetToken(symbol).bridgeAddress[chainId]; + const ethBridgeAddress = getEthereumToken(symbol).bridgeAddress[chainId]; + try { + const event = await addEventListener(messagingContract, 'LogMessageToL2', { + filter: { + to_address: snBridgeAddress, + from_address: ethBridgeAddress, + selector: stark.getSelectorFromName('handle_deposit') + } + }); + logger.log('Event received', {event}); + const {to_address, from_address, selector, payload} = event.returnValues; + return txHash(from_address, to_address, selector, payload, chainId); + } catch (ex) { + logger.error('Event error', {ex}); + return Promise.reject(ex.message); + } + }, [ + addEventListener, + chainId, + getEthereumToken, + getStarknetToken, + logger, + messagingContract, + selectedToken + ]); +}; + +export const useLogDepositListener = () => { + const logger = useLogger(`${HOOK_MODULE}:useLogDepositListener`); + const selectedToken = useSelectedToken(); + const ethBridgeContract = useEthBridgeContract(); + const getTokenBridgeContract = useTokenBridgeContract(); + const addEventListener = useEventListener(); + const {account: ethereumAccount} = useEthereumWallet(); + const {account: starknetAccount} = useStarknetWallet(); + + return useCallback(async () => { + logger.log('Registering to LogDeposit event'); + const {symbol, bridgeAddress} = selectedToken; + const contract = isEth(symbol) ? ethBridgeContract : getTokenBridgeContract(bridgeAddress); + try { + const event = await addEventListener(contract, 'LogDeposit', { + filter: { + l2Recipient: starknetAccount, + sender: ethereumAccount + } + }); + logger.log('Event received', {event}); + return event.transactionHash; + } catch (ex) { + logger.error('Event error', {ex}); + return Promise.reject(ex.message); + } + }, [ + addEventListener, + ethBridgeContract, + ethereumAccount, + starknetAccount, + getTokenBridgeContract, + logger, + selectedToken + ]); +}; + +export const useEventListener = () => { + return useCallback((contract, event, options) => { + return new Promise((resolve, reject) => { + contract.once(event, options, (error, event) => { + if (error) { + reject(error); + } + resolve(event); + }); + }); + }, []); +}; diff --git a/src/hooks/useTransfer.js b/src/hooks/useTransfer.js index 89b93f6c..121029a9 100644 --- a/src/hooks/useTransfer.js +++ b/src/hooks/useTransfer.js @@ -1,7 +1,7 @@ -import {useCallback, useEffect, useState} from 'react'; -import {constants, stark} from 'starknet'; +import {useCallback} from 'react'; +import {constants} from 'starknet'; -import {deposit, depositEth, withdraw, initiateWithdraw} from '../api/bridge'; +import {deposit, depositEth, initiateWithdraw, withdraw} from '../api/bridge'; import {allowance, approve} from '../api/erc20'; import { useErrorModal, @@ -9,282 +9,266 @@ import { useProgressModal, useTransactionSubmittedModal } from '../components/Features/ModalProvider/ModalProvider.hooks'; -import { - useAmount, - useSelectedToken, - useTransferData -} from '../components/Features/Transfer/Transfer.hooks'; +import {useAmount, useSelectedToken} from '../components/Features/Transfer/Transfer.hooks'; import {ActionType, TransactionStatus} from '../enums'; -import {useEthereumToken, useStarknetToken, useTokens} from '../providers/TokensProvider'; +import {useEthereumToken, useTokens} from '../providers/TokensProvider'; import {useTransfers} from '../providers/TransfersProvider'; import {useEthereumWallet, useStarknetWallet} from '../providers/WalletsProvider'; -import {evaluate, getString, hashEquals, isEth, txHash} from '../utils'; -import {eth_listenOnce, starknet_waitForTransaction} from '../utils/contract'; +import {isEth} from '../utils'; +import {starknet_waitForTransaction} from '../utils/contract'; import { useEthBridgeContract, useEthereumTokenBridgeContract, - useMessagingContract, useTokenBridgeContract, useTokenContract } from './useContract'; +import {useLogDepositListener, useLogMessageToL2Listener} from './useEventListener'; +import {useLogger} from './useLogger'; +import {useTransferProgress} from './useTransferProgress'; + +const HOOK_MODULE = 'useTransfer'; -export const useTransfer = () => { - const transferProgressStrings = getString('modals.transferProgress'); - const [isLoading, setIsLoading] = useState(false); - const [data, setData] = useState(null); - const [progress, setProgress] = useState(null); - const [error, setError] = useState(null); +export const useTransferToL2 = () => { + const logger = useLogger(`${HOOK_MODULE}:useTransferToL2`); const {account: ethereumAccount, chainId, config: ethereumConfig} = useEthereumWallet(); - const {account: starknetAccount, config: starknetConfig} = useStarknetWallet(); - const {action} = useTransferData(); - const {addTransfer} = useTransfers(); - const {updateTokens} = useTokens(); - const [, , clearAmount] = useAmount(); - const showProgressModal = useProgressModal(); - const showErrorModal = useErrorModal(transferProgressStrings.error_title); - const hideModal = useHideModal(); - const showTransactionSubmittedModal = useTransactionSubmittedModal(); + const {account: starknetAccount} = useStarknetWallet(); + const {handleProgress, handleData, handleError} = useTransfer(); const selectedToken = useSelectedToken(); const ethBridgeContract = useEthBridgeContract(); - const messagingContract = useMessagingContract(); const getTokenContract = useTokenContract(); const getTokenBridgeContract = useTokenBridgeContract(); - const getEthereumToken = useEthereumToken(); - const getStarknetToken = useStarknetToken(); - const getEthereumTokenBridgeContract = useEthereumTokenBridgeContract(); - const progressOptions = { - approval: symbol => { - const {approval} = transferProgressStrings; - const message = evaluate(approval.message, {symbol}); - return { - type: approval.type, - message - }; - }, - deposit: (amount, symbol) => { - const {deposit} = transferProgressStrings; - const message = evaluate(deposit.message, {amount, symbol}); - return { - type: deposit.type, - message - }; - }, - initiateWithdraw: (amount, symbol) => { - const {initiateWithdraw} = transferProgressStrings; - const message = evaluate(initiateWithdraw.message, {amount, symbol}); - return { - type: initiateWithdraw.type, - message - }; - }, - waitForConfirm: walletName => { - const {waitForConfirm} = transferProgressStrings; - const type = evaluate(waitForConfirm.type, {walletName}); - const message = evaluate(waitForConfirm.message, {walletName}); - return { - type, - message - }; - }, - waitForAccept: () => { - const {waitForAccept} = transferProgressStrings; - return { - type: waitForAccept.type, - message: waitForAccept.message - }; - }, - withdraw: (amount, symbol) => { - const {withdraw} = transferProgressStrings; - const message = evaluate(withdraw.message, {amount, symbol}); - return { - type: withdraw.type, - message - }; - } - }; - - useEffect(() => { - resetState(); - }, [action]); - - useEffect(() => { - if (isLoading) { - progress && showProgressModal(progress.type, progress.message); - } else if (error) { - hideModal(); - showErrorModal(error.message); - } else if (data) { - addTransfer(data); - showTransactionSubmittedModal(data); - updateTokens(); - clearAmount(); - } - }, [progress, data, error, isLoading]); + const progressOptions = useTransferProgress(); + const addLogDepositListener = useLogDepositListener(); + const addLogMessageToL2Listener = useLogMessageToL2Listener(); - const resetState = () => { - setData(null); - setError(null); - setProgress(null); - setIsLoading(false); - }; - - const waitForLogMessageToL2 = () => { - const {symbol} = selectedToken; - const snBridgeAddress = getStarknetToken(symbol).bridgeAddress[chainId]; - const ethBridgeAddress = getEthereumToken(symbol).bridgeAddress[chainId]; - return new Promise((resolve, reject) => { - eth_listenOnce(messagingContract, 'LogMessageToL2', (error, event) => { - const { - returnValues: {to_address, from_address, selector, payload} - } = event; - if ( - hashEquals( - [to_address, from_address, selector], - [snBridgeAddress, ethBridgeAddress, stark.getSelectorFromName('handle_deposit')] - ) - ) { - if (error) { - reject(error); + return useCallback( + async amount => { + try { + logger.log('TransferToL2 called'); + const {symbol, tokenAddress, bridgeAddress, name} = selectedToken; + const isEthToken = isEth(symbol); + const bridgeContract = isEthToken + ? ethBridgeContract + : getTokenBridgeContract(bridgeAddress); + const depositHandler = isEthToken ? depositEth : deposit; + logger.log('Prepared contract and handler', {isEthToken, bridgeContract, depositHandler}); + if (!isEthToken) { + logger.log('Token needs approval', {isEthToken}); + const tokenContract = getTokenContract(tokenAddress); + handleProgress(progressOptions.approval(symbol)); + const allow = await allowance(ethereumAccount, bridgeAddress[chainId], tokenContract); + logger.log('Current allow value', {allow}); + if (allow < amount) { + logger.log('Allow value is smaller then amount, sending approve tx', {amount}); + await approve( + bridgeAddress[chainId], + constants.MASK_250, + tokenContract, + ethereumAccount + ); } - resolve(txHash(from_address, to_address, selector, payload, chainId)); - } - }); - }); - }; - - const transferToStarknet = async (amount, depositHandler, bridgeContract, tokenContract) => { - const {bridgeAddress, symbol, name} = selectedToken; - resetState(); - try { - setIsLoading(true); - if (!isEth(symbol)) { - setProgress(progressOptions.approval(symbol)); - const allow = await allowance(ethereumAccount, bridgeAddress[chainId], tokenContract); - if (allow < amount) { - await approve(bridgeAddress[chainId], constants.MASK_250, tokenContract, ethereumAccount); } + handleProgress(progressOptions.waitForConfirm(ethereumConfig.name)); + const logMessageToL2EventPromise = addLogMessageToL2Listener(); + logger.log('Calling deposit'); + const depositPromise = await depositHandler( + starknetAccount, + amount, + bridgeContract, + ethereumAccount, + (error, transactionHash) => { + if (!error) { + logger.log('Tx hash received', {transactionHash}); + handleProgress(progressOptions.deposit(amount, symbol)); + } + } + ); + const [{transactionHash: l1hash}, l2hash] = await Promise.all([ + depositPromise, + logMessageToL2EventPromise + ]); + logger.log('Done', {l1hash, l2hash}); + handleData({ + type: ActionType.TRANSFER_TO_STARKNET, + sender: ethereumAccount, + recipient: starknetAccount, + name, + symbol, + amount, + eth_hash: l1hash, + starknet_hash: l2hash + }); + } catch (ex) { + logger.error(ex.message, {ex}); + handleError(progressOptions.error(ex)); } - setProgress(progressOptions.waitForConfirm(ethereumConfig.name)); - const depositEventPromise = waitForLogMessageToL2(bridgeContract.options.address); - const depositPromise = depositHandler( - starknetAccount, - amount, - bridgeContract, - ethereumAccount, - { - transactionHash: () => setProgress(progressOptions.deposit(amount, symbol)) - } - ); - const [{transactionHash}, starknetTxHash] = await Promise.all([ - depositPromise, - depositEventPromise - ]); - setIsLoading(false); - setData({ - type: ActionType.TRANSFER_TO_STARKNET, - sender: ethereumAccount, - recipient: starknetAccount, - name, - symbol, - amount, - eth_hash: transactionHash, - starknet_hash: starknetTxHash - }); - return data; - } catch (ex) { - setIsLoading(false); - setError(ex); - } - }; + }, + [ + selectedToken, + addLogDepositListener, + addLogMessageToL2Listener, + chainId, + ethBridgeContract, + ethereumAccount, + ethereumConfig, + getTokenBridgeContract, + getTokenContract, + handleData, + handleError, + handleProgress, + logger, + progressOptions, + starknetAccount + ] + ); +}; - const transferFromStarknet = async (amount, bridgeContract, tokenContract) => { - resetState(); - try { - const {name, symbol} = selectedToken; - setIsLoading(true); - setProgress(progressOptions.waitForConfirm(starknetConfig.name)); - const {transaction_hash} = await initiateWithdraw( - ethereumAccount, - amount, - bridgeContract, - tokenContract - ); - setProgress(progressOptions.initiateWithdraw(amount, symbol)); - await starknet_waitForTransaction(transaction_hash, TransactionStatus.RECEIVED); - setProgress(progressOptions.waitForAccept()); - await starknet_waitForTransaction(transaction_hash); - setIsLoading(false); - setData({ - type: ActionType.TRANSFER_FROM_STARKNET, - sender: starknetAccount, - recipient: ethereumAccount, - name, - symbol, - amount, - starknet_hash: transaction_hash - }); - return data; - } catch (ex) { - setIsLoading(false); - setError(ex); - } - }; +export const useTransferToL1 = () => { + const logger = useLogger(`${HOOK_MODULE}:useTransferToL1`); + const {account: ethereumAccount} = useEthereumWallet(); + const {account: starknetAccount, config: starknetConfig} = useStarknetWallet(); + const selectedToken = useSelectedToken(); + const getTokenContract = useTokenContract(); + const getTokenBridgeContract = useTokenBridgeContract(); + const {handleProgress, handleData, handleError} = useTransfer(); + const progressOptions = useTransferProgress(); - const finalizeTransferFromStarknet = useCallback( - async transfer => { - resetState(); + return useCallback( + async amount => { try { - const {symbol, amount} = transfer; - setIsLoading(true); - const ethereumToken = getEthereumToken(symbol); - let tokenBridgeContract; - if (isEth(ethereumToken)) { - tokenBridgeContract = ethBridgeContract; - } else { - tokenBridgeContract = getEthereumTokenBridgeContract(ethereumToken.bridgeAddress); - } - setProgress(progressOptions.waitForConfirm(ethereumConfig.name)); - const {transactionHash} = await withdraw(ethereumAccount, amount, tokenBridgeContract, { - transactionHash: () => setProgress(progressOptions.withdraw(amount, symbol)) + logger.log('TransferToL1 called'); + const {tokenAddress, bridgeAddress, name, symbol} = selectedToken; + const tokenContract = getTokenContract(tokenAddress); + const bridgeContract = getTokenBridgeContract(bridgeAddress); + logger.log('Prepared contracts', {bridgeContract, tokenContract}); + handleProgress(progressOptions.waitForConfirm(starknetConfig.name)); + logger.log('Calling initiate withdraw'); + const {transaction_hash} = await initiateWithdraw( + ethereumAccount, + amount, + bridgeContract, + tokenContract + ); + logger.log('Tx hash received', {transaction_hash}); + handleProgress(progressOptions.initiateWithdraw(amount, symbol)); + logger.log('Waiting for tx to be received on L2'); + await starknet_waitForTransaction(transaction_hash, TransactionStatus.RECEIVED); + handleProgress(progressOptions.waitForAccept()); + logger.log('Waiting for tx to be accepted on L2'); + await starknet_waitForTransaction(transaction_hash); + logger.log('Done', {transaction_hash}); + handleData({ + type: ActionType.TRANSFER_FROM_STARKNET, + sender: starknetAccount, + recipient: ethereumAccount, + name, + symbol, + amount, + starknet_hash: transaction_hash }); - setIsLoading(false); - setData({...transfer, eth_hash: transactionHash}); - return data; } catch (ex) { - setIsLoading(false); - setError(ex); + logger.error(ex.message, {ex}); + handleError(progressOptions.error(ex)); } }, - [ethereumAccount] + [ + ethereumAccount, + getTokenBridgeContract, + getTokenContract, + handleData, + handleError, + handleProgress, + logger, + progressOptions, + selectedToken, + starknetAccount, + starknetConfig + ] ); +}; - const transferTokenFromStarknet = useCallback( - async amount => { - const {tokenAddress, bridgeAddress} = selectedToken; - const tokenContract = getTokenContract(tokenAddress); - const tokenBridgeContract = getTokenBridgeContract(bridgeAddress); - return await transferFromStarknet(amount, tokenBridgeContract, tokenContract); - }, - [ethereumAccount, starknetAccount, selectedToken] - ); +export const useCompleteTransferToL1 = () => { + const logger = useLogger(`${HOOK_MODULE}:useCompleteTransferToL1`); + const {account: ethereumAccount, config: ethereumConfig} = useEthereumWallet(); + const {handleProgress, handleData, handleError} = useTransfer(); + const progressOptions = useTransferProgress(); + const getEthereumToken = useEthereumToken(); + const ethBridgeContract = useEthBridgeContract(); + const getEthereumTokenBridgeContract = useEthereumTokenBridgeContract(); - const transferTokenToStarknet = useCallback( - async amount => { - if (!isEth(selectedToken)) { - const {tokenAddress, bridgeAddress} = selectedToken; - const tokenContract = getTokenContract(tokenAddress); - const tokenBridgeContract = getTokenBridgeContract(bridgeAddress); - return await transferToStarknet(amount, deposit, tokenBridgeContract, tokenContract); + return useCallback( + async transfer => { + try { + logger.log('CompleteTransferToL1 called'); + const {symbol, amount} = transfer; + const ethereumToken = getEthereumToken(symbol); + const tokenBridgeContract = isEth(symbol) + ? ethBridgeContract + : getEthereumTokenBridgeContract(ethereumToken.bridgeAddress); + logger.log('Prepared token and bridge contract', {ethereumToken, tokenBridgeContract}); + handleProgress(progressOptions.waitForConfirm(ethereumConfig.name)); + logger.log('Calling withdraw'); + const {transactionHash} = await withdraw( + ethereumAccount, + amount, + tokenBridgeContract, + (error, transactionHash) => { + if (!error) { + logger.log('Tx hash received', {transactionHash}); + handleProgress(progressOptions.withdraw(amount, symbol)); + } + } + ); + logger.log('Done', {transactionHash}); + handleData({...transfer, eth_hash: transactionHash}); + } catch (ex) { + logger.error(ex.message, {ex}); + handleError(progressOptions.error(ex)); } - return await transferToStarknet(amount, depositEth, ethBridgeContract, null); }, - [ethereumAccount, starknetAccount, selectedToken] + [ + ethBridgeContract, + ethereumAccount, + ethereumConfig, + getEthereumToken, + getEthereumTokenBridgeContract, + handleData, + handleError, + handleProgress, + logger, + progressOptions + ] ); +}; + +const useTransfer = () => { + const showProgressModal = useProgressModal(); + const showErrorModal = useErrorModal(); + const hideModal = useHideModal(); + const showTransactionSubmittedModal = useTransactionSubmittedModal(); + const {addTransfer} = useTransfers(); + const {updateTokens} = useTokens(); + const [, , clearAmount] = useAmount(); + + const handleProgress = progress => { + showProgressModal(progress.type, progress.message); + }; + + const handleError = error => { + hideModal(); + showErrorModal(error.type, error.message); + }; + + const handleData = data => { + addTransfer(data); + showTransactionSubmittedModal(data); + updateTokens(); + clearAmount(); + }; return { - transferTokenToStarknet, - transferTokenFromStarknet, - finalizeTransferFromStarknet, - isLoading + handleProgress, + handleError, + handleData }; }; diff --git a/src/hooks/useTransferProgress.js b/src/hooks/useTransferProgress.js new file mode 100644 index 00000000..f64dea2e --- /dev/null +++ b/src/hooks/useTransferProgress.js @@ -0,0 +1,67 @@ +import {useMemo} from 'react'; + +import {evaluate, getString} from '../utils'; + +export const useTransferProgress = () => { + const transferProgressStrings = getString('modals.transferProgress'); + return useMemo( + () => ({ + approval: symbol => { + const {approval} = transferProgressStrings; + const message = evaluate(approval.message, {symbol}); + return { + type: approval.type, + message + }; + }, + deposit: (amount, symbol) => { + const {deposit} = transferProgressStrings; + const message = evaluate(deposit.message, {amount, symbol}); + return { + type: deposit.type, + message + }; + }, + initiateWithdraw: (amount, symbol) => { + const {initiateWithdraw} = transferProgressStrings; + const message = evaluate(initiateWithdraw.message, {amount, symbol}); + return { + type: initiateWithdraw.type, + message + }; + }, + waitForConfirm: walletName => { + const {waitForConfirm} = transferProgressStrings; + const type = evaluate(waitForConfirm.type, {walletName}); + const message = evaluate(waitForConfirm.message, {walletName}); + return { + type, + message + }; + }, + waitForAccept: () => { + const {waitForAccept} = transferProgressStrings; + return { + type: waitForAccept.type, + message: waitForAccept.message + }; + }, + withdraw: (amount, symbol) => { + const {withdraw} = transferProgressStrings; + const message = evaluate(withdraw.message, {amount, symbol}); + return { + type: withdraw.type, + message + }; + }, + error: err => { + const {error_title} = transferProgressStrings; + return { + type: error_title, + message: err.message + }; + } + }), + [] + ); +}; diff --git a/src/utils/contract.js b/src/utils/contract.js index 11b55499..45b44517 100644 --- a/src/utils/contract.js +++ b/src/utils/contract.js @@ -2,6 +2,7 @@ import {getStarknet} from '@argent/get-starknet'; import {compileCalldata, Contract, stark} from 'starknet'; import {TransactionConsumedStatuses} from '../enums'; +import {getLogger} from '../services'; import {web3} from '../web3'; export const eth_getContract = (address, ABI) => new web3.eth.Contract(ABI, address); @@ -14,19 +15,15 @@ export const eth_callContract = async (contract, method, args = []) => { } }; -export const eth_sendTransaction = async (contract, method, args = [], options = {}, emitter) => { +export const eth_sendTransaction = async ( + contract, + method, + args = [], + options = {}, + cb = () => {} +) => { try { - const promise = contract.methods?.[method](...args).send(options); - if (emitter) { - return new Promise((resolve, reject) => { - promise - .on('transactionHash', hash => emitter?.transactionHash(hash)) - .on('confirmation', (confNumber, receipt) => emitter?.confirmation(confNumber, receipt)) - .on('receipt', receipt => resolve(receipt)) - .on('error', (error, receipt) => reject(error, receipt)); - }); - } - return promise; + return contract.methods?.[method](...args).send(options, cb); } catch (ex) { return Promise.reject(ex); } @@ -62,23 +59,24 @@ export const starknet_sendTransaction = async (contract, method, args = {}) => { }; export const starknet_waitForTransaction = async (hash, customStatus, retryInterval = 5000) => { + const logger = getLogger('starknet_waitForTransaction'); return new Promise(resolve => { let processing = false; const waitingForStatuses = customStatus ? [customStatus] : TransactionConsumedStatuses; - console.log(`Waiting for transaction with statuses ${waitingForStatuses.join(' ')}`); + logger.debug(`Waiting for transaction with statuses ${waitingForStatuses.join(' ')}`); const intervalId = setInterval(async () => { if (processing) return; - console.log(`Checking transaction again`); + logger.debug(`Checking transaction again`); const statusPromise = getStarknet().provider.getTransactionStatus(hash); processing = true; const {tx_status} = await statusPromise; - console.log(`Transaction status is ${tx_status}`); + logger.debug(`Transaction status is ${tx_status}`); if (waitingForStatuses.includes(tx_status)) { - console.log(`We got our desired status!`); + logger.debug(`We got our desired status!`); clearInterval(intervalId); resolve(); } else { - console.log(`We haven't got our desired status, trying again.`); + logger.debug(`We haven't got our desired status, trying again.`); processing = false; } }, retryInterval); From 3a6686c1e80e4addb0d3f40acc81cd4431e99fae Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Thu, 30 Dec 2021 12:09:44 +0000 Subject: [PATCH 050/211] chore(release): 0.0.1-8 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index dc0a565b..2777aa86 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starknet-bridge", - "version": "0.0.1-7", + "version": "0.0.1-8", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 48c3b3c3a8b75c08ecd79d8e38b6100cc22282aa Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Thu, 30 Dec 2021 15:10:46 +0200 Subject: [PATCH 051/211] chore: fix lints (#53) --- .../TransactionSubmittedModal.js | 14 +++++++------- .../BlockHashProvider/BlockHashProvider.js | 7 ++++--- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js index 287b7b94..d1d5e382 100644 --- a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js +++ b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js @@ -23,14 +23,14 @@ const TransactionSubmittedModal = ({transfer}) => { const [networkData, setNetworkData] = useState({}); useEffect(() => { - const isCompletedWithdrawal = transfer.eth_hash && transfer.starknet_hash; - if (transfer.type === ActionType.TRANSFER_TO_STARKNET || isCompletedWithdrawal) { + const {type, starknet_hash, eth_hash} = transfer; + const isCompletedWithdrawal = eth_hash && starknet_hash; + if (type === ActionType.TRANSFER_TO_STARKNET || isCompletedWithdrawal) { setNetworkData({ - message: - transfer.type === ActionType.TRANSFER_TO_STARKNET ? DEPOSIT_TXT : COMPLETE_WITHDRAWAL_TXT, - showStatusMsg: transfer.type === ActionType.TRANSFER_TO_STARKNET, + message: type === ActionType.TRANSFER_TO_STARKNET ? DEPOSIT_TXT : COMPLETE_WITHDRAWAL_TXT, + showStatusMsg: type === ActionType.TRANSFER_TO_STARKNET, explorerName: LINKS.ETHERSCAN.text, - explorerUrl: LINKS.ETHERSCAN.txUrl(chainId, transfer.eth_hash), + explorerUrl: LINKS.ETHERSCAN.txUrl(chainId, eth_hash), explorerLogo: <EtherscanLogo style={{margin: 'auto'}} /> }); } else { @@ -38,7 +38,7 @@ const TransactionSubmittedModal = ({transfer}) => { message: WITHDRAWAL_TXT, showStatusMsg: true, explorerName: LINKS.VOYAGER.text, - explorerUrl: LINKS.VOYAGER.txUrl(chainId, transfer.starknet_hash), + explorerUrl: LINKS.VOYAGER.txUrl(chainId, starknet_hash), explorerLogo: <StarknetLogo style={{margin: 'auto'}} /> }); } diff --git a/src/providers/BlockHashProvider/BlockHashProvider.js b/src/providers/BlockHashProvider/BlockHashProvider.js index 683d4fe5..66f80a27 100644 --- a/src/providers/BlockHashProvider/BlockHashProvider.js +++ b/src/providers/BlockHashProvider/BlockHashProvider.js @@ -6,13 +6,14 @@ import {useConfig} from '../../hooks'; import {BlockHashContext} from './block-hash-context'; export const BlockHashProvider = ({children}) => { + const {provider} = getStarknet(); const {pollBlockNumberInterval} = useConfig(); const [blockHash, setBlockHash] = useState(); const fetchBlockHash = useCallback(async () => { - const {block_hash} = await getStarknet().provider.getBlock(); + const {block_hash} = await provider.getBlock(); setBlockHash(block_hash); - }, [getStarknet().provider]); + }, [provider]); useEffect(() => { fetchBlockHash(); @@ -20,7 +21,7 @@ export const BlockHashProvider = ({children}) => { fetchBlockHash(); }, pollBlockNumberInterval); return () => clearInterval(intervalId); - }, [fetchBlockHash]); + }, [fetchBlockHash, pollBlockNumberInterval]); return <BlockHashContext.Provider value={blockHash}>{children}</BlockHashContext.Provider>; }; From 0267a1c53d6fa97af3ce9d3adbd90f39b6742a19 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Thu, 30 Dec 2021 17:53:17 +0200 Subject: [PATCH 052/211] feat: env vars (#54) --- .env.development | 7 +++++++ .env.production | 7 +++++++ .env.test | 7 +++++++ .gitignore | 2 -- src/config/config.js | 6 ++++++ src/config/config.json | 6 ------ src/hooks/useConfig.js | 2 +- 7 files changed, 28 insertions(+), 9 deletions(-) create mode 100644 src/config/config.js delete mode 100644 src/config/config.json diff --git a/.env.development b/.env.development index e69de29b..3d6ba333 100644 --- a/.env.development +++ b/.env.development @@ -0,0 +1,7 @@ +REACT_APP_AUTO_CONNECT=true +# 10 seconds +REACT_APP_POLL_BALANCE_INTERVAL=10000 +# 10 seconds +REACT_APP_POLL_BLOCK_NUMBER_INTERVAL=10000 +# goerli testnet +REACT_APP_SUPPORTED_CHAIN_IDS=5 diff --git a/.env.production b/.env.production index e69de29b..28264208 100644 --- a/.env.production +++ b/.env.production @@ -0,0 +1,7 @@ + REACT_APP_AUTO_CONNECT=true + # 1 minute + REACT_APP_POLL_BALANCE_INTERVAL=60000 + # 30 seconds + REACT_APP_POLL_BLOCK_NUMBER_INTERVAL=30000 + # mainnet + REACT_APP_SUPPORTED_CHAIN_IDS=1 diff --git a/.env.test b/.env.test index e69de29b..f602a438 100644 --- a/.env.test +++ b/.env.test @@ -0,0 +1,7 @@ + REACT_APP_AUTO_CONNECT=true + # 30 seconds + REACT_APP_POLL_BALANCE_INTERVAL=30000 + # 20 seconds + REACT_APP_POLL_BLOCK_NUMBER_INTERVAL=20000 + # goerli testnet + REACT_APP_SUPPORTED_CHAIN_IDS=5 diff --git a/.gitignore b/.gitignore index f77a5133..03629a48 100644 --- a/.gitignore +++ b/.gitignore @@ -22,5 +22,3 @@ npm-debug.log* yarn-debug.log* yarn-error.log* .idea - -config diff --git a/src/config/config.js b/src/config/config.js new file mode 100644 index 00000000..c4a7f234 --- /dev/null +++ b/src/config/config.js @@ -0,0 +1,6 @@ +export default { + autoConnect: Boolean(process.env.REACT_APP_AUTO_CONNECT), + pollBalanceInterval: Number(process.env.REACT_APP_POLL_BALANCE_INTERVAL), + pollBlockNumberInterval: Number(process.env.REACT_APP_POLL_BLOCK_NUMBER_INTERVAL), + supportedChainIds: process.env.REACT_APP_SUPPORTED_CHAIN_IDS.split(' ').map(id => Number(id)) +}; diff --git a/src/config/config.json b/src/config/config.json deleted file mode 100644 index 0b8ad96a..00000000 --- a/src/config/config.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "autoConnect": true, - "pollBalanceInterval": 120000, - "pollBlockNumberInterval": 30000, - "supportedChainIds": [5] -} diff --git a/src/hooks/useConfig.js b/src/hooks/useConfig.js index 0b8ffcff..df179418 100644 --- a/src/hooks/useConfig.js +++ b/src/hooks/useConfig.js @@ -1,5 +1,5 @@ import {useMemo} from 'react'; -import config from '../config/config.json'; +import config from '../config/config.js'; export const useConfig = () => useMemo(() => config, []); From 42101d7d0c6038c1efaa1e18d09b139fb039b550 Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Thu, 30 Dec 2021 15:54:40 +0000 Subject: [PATCH 053/211] chore(release): 0.0.1-9 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2777aa86..c6042f51 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starknet-bridge", - "version": "0.0.1-8", + "version": "0.0.1-9", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From c6534090dec1ea595bbb968fd8619980cd5806d5 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Thu, 6 Jan 2022 14:46:45 +0200 Subject: [PATCH 054/211] chore: update package name (#55) --- README.md | 10 +++++----- package.json | 2 +- public/index.html | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index c6a3a202..31a02ecb 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ <p align="center"> - <img style="position: absolute; left: 50%; transform: translateX(-50%)" src="https://github.com/starkware-libs/starknet-bridge/blob/dev/src/assets/img/stars.png?raw=true" alt=""/> - <img src="https://github.com/starkware-libs/starknet-bridge/blob/dev/src/assets/img/starknet.png?raw=true" alt=""/> + <img style="position: absolute; left: 50%; transform: translateX(-50%)" src="https://github.com/starkware-libs/starkgate-frontend/blob/dev/src/assets/img/stars.png?raw=true" alt=""/> + <img src="https://github.com/starkware-libs/starkgate-frontend/blob/dev/src/assets/img/starknet.png?raw=true" alt=""/> </p> <h2 align='center'> Token Bridge for StarkNet</h2> @@ -33,8 +33,8 @@ uses [Redux Toolkit](https://redux-toolkit.js.org/) for state management. Clone and run `yarn` to install dependencies: ``` -git clone https://github.com/starkware-libs/starknet-bridge.git -cd starknet-bridge +git clone https://github.com/starkware-libs/starkgate-frontend.git +cd starkgate-frontend yarn install ``` @@ -90,7 +90,7 @@ requests to us. ## Versioning We use [SemVer](http://semver.org/) for versioning. For the versions available, see -the [tags on this repository](https://github.com/starkware-libs/starknet-bridge/releases). +the [tags on this repository](https://github.com/starkware-libs/starkgate-frontend/releases). ## License diff --git a/package.json b/package.json index c6042f51..82bbb183 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "starknet-bridge", + "name": "starkgate-frontend", "version": "0.0.1-9", "homepage": "./", "scripts": { diff --git a/public/index.html b/public/index.html index 0c81013f..c7974543 100644 --- a/public/index.html +++ b/public/index.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html lang='en'> <head> - <title>StarkNet Bridge</title> + <title>StarkGate</title> <meta charset='utf-8' /> <link rel='icon' href='%PUBLIC_URL%/favicon.svg' /> <meta name='viewport' content='width=device-width, initial-scale=1, user-scalable=no'> From 325322f71d8e246f95daefad09a31b92a77a0d47 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Thu, 6 Jan 2022 14:49:01 +0200 Subject: [PATCH 055/211] feat: tx status friendly message (#48) --- src/api/proxy.js | 0 src/components/Features/TransferLog/TransferLog.js | 10 ++++++++-- src/enums/TransactionStatus.js | 9 +++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 src/api/proxy.js diff --git a/src/api/proxy.js b/src/api/proxy.js new file mode 100644 index 00000000..e69de29b diff --git a/src/components/Features/TransferLog/TransferLog.js b/src/components/Features/TransferLog/TransferLog.js index 2dec3da3..01b5c778 100644 --- a/src/components/Features/TransferLog/TransferLog.js +++ b/src/components/Features/TransferLog/TransferLog.js @@ -2,7 +2,13 @@ import PropTypes from 'prop-types'; import React, {useEffect, useState} from 'react'; import {LINKS} from '../../../constants'; -import {isOnChain, isPending, isRejected, NetworkType} from '../../../enums'; +import { + isOnChain, + isPending, + isRejected, + NetworkType, + TransactionStatusFriendlyMessage +} from '../../../enums'; import {useColors} from '../../../hooks'; import {useWallets} from '../../../providers/WalletsProvider'; import {getFullTime, toClasses} from '../../../utils'; @@ -26,7 +32,7 @@ export const TransferLog = ({transfer, onWithdrawClick}) => { const renderTransferStatus = () => { return !isOnChain(status) ? ( <div className={toClasses(styles.data, isRejected(status) && styles.error)}> - {status && status.replaceAll('_', ' ')} + {TransactionStatusFriendlyMessage[status]} </div> ) : null; }; diff --git a/src/enums/TransactionStatus.js b/src/enums/TransactionStatus.js index 85847fff..6932592d 100644 --- a/src/enums/TransactionStatus.js +++ b/src/enums/TransactionStatus.js @@ -7,6 +7,15 @@ export const TransactionStatus = { ACCEPTED_ON_L1: 'ACCEPTED_ON_L1' }; +export const TransactionStatusFriendlyMessage = { + [TransactionStatus.REJECTED]: 'Invalid transaction', + [TransactionStatus.NOT_RECEIVED]: 'Waiting to be accepted on L2', + [TransactionStatus.RECEIVED]: 'Waiting to be accepted on L2', + [TransactionStatus.PENDING]: 'Accepted on L2', + [TransactionStatus.ACCEPTED_ON_L2]: 'Accepted on L2', + [TransactionStatus.ACCEPTED_ON_L1]: 'Proved and accepted on L1' +}; + export const TransactionPendingStatuses = [ TransactionStatus.NOT_RECEIVED, TransactionStatus.RECEIVED From 4ca2b331120b7fd3aa7d3c5b44191abe21229d51 Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Thu, 6 Jan 2022 12:50:16 +0000 Subject: [PATCH 056/211] chore(release): 0.0.1-10 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 82bbb183..d2d6d6c8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "0.0.1-9", + "version": "0.0.1-10", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From be40a7eab098c8dad2d804b93d0b67c5511442a1 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Thu, 6 Jan 2022 15:15:20 +0200 Subject: [PATCH 057/211] feat: update tokens and support decimals (#56) --- src/api/bridge.js | 30 ++++---- src/api/erc20.js | 59 +++----------- src/assets/svg/tokens/dai.svg | 14 ---- src/assets/svg/tokens/frax.svg | 28 +++++++ src/assets/svg/tokens/hex.svg | 1 - src/assets/svg/tokens/mim.svg | 34 +++++++++ src/assets/svg/tokens/usdc.svg | 5 ++ src/assets/svg/tokens/usdt.svg | 1 + src/assets/svg/tokens/wbtc.svg | 1 + .../Features/Bridge/Bridge.module.scss | 1 - .../SelectToken/SelectToken.module.scss | 1 + .../addresses/contracts/contracts.ethereum.js | 5 -- .../addresses/tokens/tokens.ethereum.js | 72 ++++++++++++++++-- .../addresses/tokens/tokens.starknet.js | 70 +++++++++++++++-- src/hooks/useContract.js | 24 +++--- src/hooks/useEventListener.js | 10 +-- src/hooks/useTokenBalance.js | 5 +- src/hooks/useTransfer.js | 76 +++++++++---------- .../TokensProvider/tokens-reducer.js | 14 +--- 19 files changed, 283 insertions(+), 168 deletions(-) delete mode 100644 src/assets/svg/tokens/dai.svg create mode 100644 src/assets/svg/tokens/frax.svg delete mode 100644 src/assets/svg/tokens/hex.svg create mode 100644 src/assets/svg/tokens/mim.svg create mode 100644 src/assets/svg/tokens/usdc.svg create mode 100644 src/assets/svg/tokens/usdt.svg create mode 100644 src/assets/svg/tokens/wbtc.svg diff --git a/src/api/bridge.js b/src/api/bridge.js index 931870ed..0af89384 100644 --- a/src/api/bridge.js +++ b/src/api/bridge.js @@ -1,16 +1,13 @@ import {parseToDecimals, parseToFelt, parseToUint256} from '../utils'; import {eth_sendTransaction, starknet_sendTransaction} from '../utils/contract'; -import {decimals} from './erc20'; -export const deposit = async (recipient, amount, tokenBridgeContract, from, emitter) => { +export const deposit = async ({recipient, amount, decimals, contract, options, emitter}) => { try { return eth_sendTransaction( - tokenBridgeContract, + contract, 'deposit', - [parseToDecimals(amount), recipient], - { - from - }, + [parseToDecimals(amount, decimals), recipient], + options, emitter ); } catch (ex) { @@ -18,14 +15,14 @@ export const deposit = async (recipient, amount, tokenBridgeContract, from, emit } }; -export const depositEth = async (recipient, amount, ethBridgeContract, from, emitter) => { +export const depositEth = async ({recipient, amount, contract, options, emitter}) => { try { return eth_sendTransaction( - ethBridgeContract, + contract, 'deposit', [recipient], { - from, + ...options, value: parseToDecimals(amount) }, emitter @@ -35,12 +32,12 @@ export const depositEth = async (recipient, amount, ethBridgeContract, from, emi } }; -export const withdraw = async (recipient, amount, tokenBridgeContract, emitter) => { +export const withdraw = async ({recipient, amount, decimals, contract, emitter}) => { try { return eth_sendTransaction( - tokenBridgeContract, + contract, 'withdraw', - [parseToDecimals(amount), recipient], + [parseToDecimals(amount, decimals), recipient], { from: recipient }, @@ -51,12 +48,11 @@ export const withdraw = async (recipient, amount, tokenBridgeContract, emitter) } }; -export const initiateWithdraw = async (recipient, amount, tokenBridgeContract, tokenContract) => { +export const initiateWithdraw = async ({recipient, amount, decimals, contract}) => { try { - const dec = await decimals(tokenContract, false); - return starknet_sendTransaction(tokenBridgeContract, 'initiate_withdraw', { + return starknet_sendTransaction(contract, 'initiate_withdraw', { l1Recipient: parseToFelt(recipient), - amount: parseToUint256(amount, dec) + amount: parseToUint256(amount, decimals) }); } catch (ex) { return Promise.reject(ex); diff --git a/src/api/erc20.js b/src/api/erc20.js index dff788dd..09d30610 100644 --- a/src/api/erc20.js +++ b/src/api/erc20.js @@ -1,69 +1,32 @@ -import { - parseFromDecimals, - parseFromFelt, - parseFromUint256, - parseToFelt, - parseToUint256 -} from '../utils'; -import { - eth_callContract, - eth_sendTransaction, - starknet_callContract, - starknet_sendTransaction -} from '../utils/contract'; +import {parseFromDecimals, parseFromUint256} from '../utils'; +import {eth_callContract, eth_sendTransaction, starknet_callContract} from '../utils/contract'; import {web3} from '../web3'; -export const approve = async (spender, value, contract, from, isEthereum = true) => { +export const approve = async ({spender, value, contract, options}) => { try { - if (isEthereum) { - return await eth_sendTransaction(contract, 'approve', [spender, value], {from}); - } else { - const dec = await decimals(contract, false); - return await starknet_sendTransaction(contract, 'approve', { - spender: parseToFelt(spender), - amount: parseToUint256(value, dec) - }); - } + return await eth_sendTransaction(contract, 'approve', [spender, value], options); } catch (ex) { return Promise.reject(ex); } }; -export const allowance = async (owner, spender, contract, isEthereum = true) => { +export const allowance = async ({owner, spender, decimals, contract}) => { try { - if (isEthereum) { - const allow = await eth_callContract(contract, 'allowance', [owner, spender]); - return parseFromDecimals(allow); - } + const allow = await eth_callContract(contract, 'allowance', [owner, spender]); + return parseFromDecimals(allow, decimals); } catch (ex) { return Promise.reject(ex); } }; -export const balanceOf = async (account, contract, isEthereum = true) => { +export const balanceOf = async ({account, decimals, contract}, isEthereum = true) => { try { if (isEthereum) { const balance = await eth_callContract(contract, 'balanceOf', [account]); - return parseFromDecimals(balance); - } else { - const [{balance}, dec] = await Promise.all([ - starknet_callContract(contract, 'balanceOf', [{account}]), - decimals(contract, false) - ]); - return parseFromUint256(balance, dec); - } - } catch (ex) { - return Promise.reject(ex); - } -}; - -export const decimals = async (contract, isEthereum = true) => { - try { - if (isEthereum) { - return await eth_callContract(contract, 'decimals'); + return parseFromDecimals(balance, decimals); } else { - const {decimals} = await starknet_callContract(contract, 'decimals'); - return parseFromFelt(decimals); + const {balance} = await starknet_callContract(contract, 'balanceOf', [{account}]); + return parseFromUint256(balance, decimals); } } catch (ex) { return Promise.reject(ex); diff --git a/src/assets/svg/tokens/dai.svg b/src/assets/svg/tokens/dai.svg deleted file mode 100644 index cc501bc4..00000000 --- a/src/assets/svg/tokens/dai.svg +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> -<!-- Creator: CorelDRAW 2019 (64-Bit) --> -<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="100%" height="100%" version="1.1" - shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" - fill-rule="evenodd" clip-rule="evenodd" - viewBox="0 0 444.44 444.44" -> - <g id="Layer_x0020_1"> - <metadata id="CorelCorpID_0Corel-Layer"/> - <path fill="#F5AC37" fill-rule="nonzero" d="M222.22 0c122.74,0 222.22,99.5 222.22,222.22 0,122.74 -99.48,222.22 -222.22,222.22 -122.72,0 -222.22,-99.49 -222.22,-222.22 0,-122.72 99.5,-222.22 222.22,-222.22z"/> - <path fill="#FEFEFD" fill-rule="nonzero" d="M230.41 237.91l84.44 0c1.8,0 2.65,0 2.78,-2.36 0.69,-8.59 0.69,-17.23 0,-25.83 0,-1.67 -0.83,-2.36 -2.64,-2.36l-168.05 0c-2.08,0 -2.64,0.69 -2.64,2.64l0 24.72c0,3.19 0,3.19 3.33,3.19l82.78 0zm77.79 -59.44c0.24,-0.63 0.24,-1.32 0,-1.94 -1.41,-3.07 -3.08,-6 -5.02,-8.75 -2.92,-4.7 -6.36,-9.03 -10.28,-12.92 -1.85,-2.35 -3.99,-4.46 -6.39,-6.25 -12.02,-10.23 -26.31,-17.47 -41.67,-21.11 -7.75,-1.74 -15.67,-2.57 -23.61,-2.5l-74.58 0c-2.08,0 -2.36,0.83 -2.36,2.64l0 49.3c0,2.08 0,2.64 2.64,2.64l160.27 0c0,0 1.39,-0.28 1.67,-1.11l-0.68 0zm0 88.33c-2.36,-0.26 -4.74,-0.26 -7.1,0l-154.02 0c-2.08,0 -2.78,0 -2.78,2.78l0 48.2c0,2.22 0,2.78 2.78,2.78l71.11 0c3.4,0.26 6.8,0.02 10.13,-0.69 10.32,-0.74 20.47,-2.98 30.15,-6.67 3.52,-1.22 6.92,-2.81 10.13,-4.72l0.97 0c16.67,-8.67 30.21,-22.29 38.75,-39.01 0,0 0.97,-2.1 -0.12,-2.65zm-191.81 78.75l0 -0.83 0 -32.36 0 -10.97 0 -32.64c0,-1.81 0,-2.08 -2.22,-2.08l-30.14 0c-1.67,0 -2.36,0 -2.36,-2.22l0 -26.39 32.22 0c1.8,0 2.5,0 2.5,-2.36l0 -26.11c0,-1.67 0,-2.08 -2.22,-2.08l-30.14 0c-1.67,0 -2.36,0 -2.36,-2.22l0 -24.44c0,-1.53 0,-1.94 2.22,-1.94l29.86 0c2.08,0 2.64,0 2.64,-2.64l0 -74.86c0,-2.22 0,-2.78 2.78,-2.78l104.16 0c7.56,0.3 15.07,1.13 22.5,2.5 15.31,2.83 30.02,8.3 43.47,16.11 8.92,5.25 17.13,11.59 24.44,18.89 5.5,5.71 10.46,11.89 14.86,18.47 4.37,6.67 8,13.8 10.85,21.25 0.35,1.94 2.21,3.25 4.15,2.92l24.86 0c3.19,0 3.19,0 3.33,3.06l0 22.78c0,2.22 -0.83,2.78 -3.06,2.78l-19.17 0c-1.94,0 -2.5,0 -2.36,2.5 0.76,8.46 0.76,16.95 0,25.41 0,2.36 0,2.64 2.65,2.64l21.93 0c0.97,1.25 0,2.5 0,3.76 0.14,1.61 0.14,3.24 0,4.85l0 16.81c0,2.36 -0.69,3.06 -2.78,3.06l-26.25 0c-1.83,-0.35 -3.61,0.82 -4.03,2.64 -6.25,16.25 -16.25,30.82 -29.17,42.5 -4.72,4.25 -9.68,8.25 -14.86,11.94 -5.56,3.2 -10.97,6.53 -16.67,9.17 -10.49,4.72 -21.49,8.2 -32.78,10.41 -10.72,1.92 -21.59,2.79 -32.5,2.64l-96.39 0 0 -0.14z"/> - </g> -</svg> diff --git a/src/assets/svg/tokens/frax.svg b/src/assets/svg/tokens/frax.svg new file mode 100644 index 00000000..9f8e2f7b --- /dev/null +++ b/src/assets/svg/tokens/frax.svg @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 24.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" + id="svg8" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 570.4 570.4" + style="enable-background:new 0 0 570.4 570.4;" xml:space="preserve"> +<style type="text/css"> + .st0{fill-rule:evenodd;clip-rule:evenodd;stroke:#000000;stroke-width:1.2373;stroke-miterlimit:11.3386;} + .st1{fill:#FFFFFF;} +</style> +<sodipodi:namedview bordercolor="#666666" borderopacity="1.0" id="base" inkscape:current-layer="layer1" inkscape:cx="184.71274" inkscape:cy="416.19233" inkscape:document-rotation="0" inkscape:document-units="mm" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:snap-bbox="true" inkscape:window-height="1051" inkscape:window-maximized="1" inkscape:window-width="1842" inkscape:window-x="69" inkscape:window-y="-9" inkscape:zoom="0.39629945" pagecolor="#ffffff" showgrid="false"> + </sodipodi:namedview> +<g id="layer1" transform="translate(295.65791,-75.71863)" inkscape:groupmode="layer" inkscape:label="Layer 1"> + <circle id="path854" class="st0" cx="-10.5" cy="360.9" r="284.6"/> + <path id="path862" class="st1" d="M-167.5,202.6c-12,12.6-21.9,23.2-22,23.4c-0.1,0.3,10.7,10.9,24,23.5 + c13.3,12.7,24.9,23.8,25.7,24.5l1.5,1.4l-2.7,4.5c-23.7,39.2-28.6,86.4-13.7,129.8c2.8,8.2,7.6,18.7,11.7,25.6c2,3.4,2.9,5.6,2.7,6 + c-0.2,0.4-12.3,13.2-26.9,28.5c-14.6,15.2-26.5,27.9-26.7,28.1c-0.1,0.3,40.8,39.8,44.7,43l1.5,1.3l23.1-24.1 + c12.7-13.3,24.6-25.8,26.4-27.7l3.4-3.4l3.2,2c16.3,10.4,35.4,17.6,56.5,21.4c10.6,1.9,30.8,2.4,42.1,1 + c21.8-2.5,43.4-9.8,61.1-20.5l4.6-2.8l4.9,4.8c10.7,10.4,50.7,48.4,51.1,48.6c0.4,0.2,44.3-45.7,44.2-46.3 + c-0.1-0.3-30.2-29.2-48.6-46.5l-6.1-5.8l2.8-4.6c23.5-39.1,28.4-86.5,13.2-130.2c-2.2-6.4-8.9-20.8-12.8-27.4l-1.9-3.3l25.7-26.9 + c14.1-14.7,25.6-27,25.5-27.3c-0.4-1-45.4-43.5-46-43.5c-0.4,0-11.7,11.5-25.2,25.7c-13.5,14.1-24.7,25.7-25,25.8 + c-0.2,0.1-1.5-0.5-2.7-1.4c-3.4-2.3-12-7-16.8-9.2c-14.6-6.7-28.2-10.8-44-13.1c-8.2-1.2-32.8-1.4-40.4-0.3 + c-18.2,2.6-33.1,7.1-48.3,14.7c-4.4,2.1-9.5,4.9-11.5,6.1l-3.6,2.2l-4.1-4c-2.2-2.2-12.2-11.6-22.1-21.1c-9.9-9.4-20-19-22.4-21.4 + l-4.4-4.3L-167.5,202.6z M0.4,267.8c15.9,1.9,30.1,7.3,43.2,16.5c6.7,4.7,16.7,14.7,21.4,21.4c26.7,37.8,21.6,89.2-12,120.7 + c-28.7,26.8-70.2,32.8-105.1,15c-25.2-12.9-43-36.5-48.7-64.8c-1.8-9-1.8-25.8,0-34.7c1.7-8.8,4-15.1,8.3-23.9 + C-75.3,283.4-38,263.2,0.4,267.8L0.4,267.8z"/> +</g> +</svg> diff --git a/src/assets/svg/tokens/hex.svg b/src/assets/svg/tokens/hex.svg deleted file mode 100644 index 0e24299a..00000000 --- a/src/assets/svg/tokens/hex.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 338.51 297.23"><defs><linearGradient id="linear-gradient" x1="84.63" y1="295.19" x2="253.89" y2="2.04" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffdc00"/><stop offset="0.33" stop-color="#e58e2f"/><stop offset="0.67" stop-color="#db2d72"/><stop offset="1" stop-color="#f0f"/></linearGradient></defs><title>Asset 1</title><g id="Layer_2" data-name="Layer 2"><g id="logo"><path d="M79.56,290.47l-22.92-39.7a5.28,5.28,0,0,1,0-4.65l25.45-44.07a5.24,5.24,0,0,1,4.06-2.35h50.89a5.26,5.26,0,0,1,4.07,2.35l25.45,44.07a5.32,5.32,0,0,1,0,4.7l-25.45,44.07a5.33,5.33,0,0,1-4,2.34H91.36A15.43,15.43,0,0,1,79.56,290.47Zm165.27-90.69L194.13,112a7.21,7.21,0,0,0-5.56-3.21H87.17A7.21,7.21,0,0,0,81.61,112l-50.7,87.82a7.18,7.18,0,0,0,0,6.42L45.77,232l26-45a8.22,8.22,0,0,1,6.43-3.72H145a8.22,8.22,0,0,1,6.43,3.72l33.41,57.86a8.24,8.24,0,0,1,0,7.43l-26,45h29.7a7.19,7.19,0,0,0,5.56-3.22l50.7-87.81A7.18,7.18,0,0,0,244.83,199.78Zm92-58.09L259.06,6.93a15.37,15.37,0,0,0-12-6.93H91.45a15.37,15.37,0,0,0-12,6.93L1.65,141.69a15.36,15.36,0,0,0,0,13.85l17.83,30.88,51.7-89.56a10.14,10.14,0,0,1,7.94-4.58H196.53a10.14,10.14,0,0,1,7.94,4.58l58.71,101.69a10.13,10.13,0,0,1,0,9.16l-51.69,89.52h35.57a15.37,15.37,0,0,0,12-6.93l77.8-134.76A15.36,15.36,0,0,0,336.86,141.69Z" style="fill:url(#linear-gradient)"/></g></g></svg> diff --git a/src/assets/svg/tokens/mim.svg b/src/assets/svg/tokens/mim.svg new file mode 100644 index 00000000..903e3052 --- /dev/null +++ b/src/assets/svg/tokens/mim.svg @@ -0,0 +1,34 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" + "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> +<svg version="1.0" xmlns="http://www.w3.org/2000/svg" + width="250.000000pt" height="250.000000pt" viewBox="0 0 250.000000 250.000000" + preserveAspectRatio="xMidYMid meet"> + +<g transform="translate(0.000000,250.000000) scale(0.100000,-0.100000)" +fill="#5552fd" stroke="none"> +<path d="M866 2414 c-3 -9 -6 -56 -6 -105 l0 -89 -100 0 -100 0 0 -90 0 -90 +100 0 100 0 0 90 0 90 390 0 390 0 0 -90 0 -90 95 0 95 0 0 90 0 90 -95 0 -95 +0 0 93 c0 59 -4 97 -12 105 -9 9 -108 12 -384 12 -330 0 -373 -2 -378 -16z"/> +<path d="M470 1930 l0 -90 83 0 84 0 6 -142 c9 -184 9 -766 0 -931 l-6 -127 +-84 0 -83 0 0 -90 0 -90 90 0 90 0 0 85 0 85 100 0 100 0 2 402 3 403 93 3 92 +3 0 -106 0 -105 210 0 210 0 0 105 0 105 90 0 90 0 2 -402 3 -403 103 -3 102 +-3 0 -84 0 -85 90 0 90 0 0 90 0 90 -90 0 -90 0 0 600 0 600 90 0 90 0 0 90 0 +90 -90 0 -90 0 0 -90 0 -90 -105 0 -105 0 0 -100 0 -100 -95 0 -95 0 0 -95 0 +-95 -200 0 -200 0 0 95 0 94 -97 3 -98 3 -3 98 -3 97 -99 0 -100 0 0 90 0 90 +-90 0 -90 0 0 -90z"/> +<path d="M270 1730 l0 -90 74 0 c108 0 106 -2 106 96 l0 84 -90 0 -90 0 0 -90z"/> +<path d="M2050 1736 c0 -98 -2 -96 106 -96 l74 0 0 90 0 90 -90 0 -90 0 0 -84z"/> +<path d="M65 1608 c-3 -13 -4 -187 -3 -388 l3 -365 93 -3 92 -3 0 391 0 390 +-90 0 c-85 0 -90 -1 -95 -22z"/> +<path d="M2240 1240 l0 -390 84 0 c46 0 91 3 100 6 14 5 16 48 16 378 0 276 +-3 375 -12 384 -8 8 -45 12 -100 12 l-88 0 0 -390z"/> +<path d="M270 740 l0 -90 90 0 90 0 0 78 c0 47 -5 83 -12 90 -7 7 -43 12 -90 +12 l-78 0 0 -90z"/> +<path d="M2057 823 c-4 -3 -7 -44 -7 -90 l0 -83 90 0 90 0 0 90 0 90 -83 0 +c-46 0 -87 -3 -90 -7z"/> +<path d="M660 350 l0 -90 100 0 99 0 3 -103 3 -102 365 -3 c201 -1 375 0 388 +3 21 5 22 10 22 105 l0 100 95 0 95 0 0 90 0 90 -95 0 -95 0 0 -90 0 -90 -390 +0 -390 0 0 90 0 90 -100 0 -100 0 0 -90z"/> +</g> +</svg> diff --git a/src/assets/svg/tokens/usdc.svg b/src/assets/svg/tokens/usdc.svg new file mode 100644 index 00000000..5dfea926 --- /dev/null +++ b/src/assets/svg/tokens/usdc.svg @@ -0,0 +1,5 @@ +<svg data-name="86977684-12db-4850-8f30-233a7c267d11" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2000 2000"> + <path d="M1000 2000c554.17 0 1000-445.83 1000-1000S1554.17 0 1000 0 0 445.83 0 1000s445.83 1000 1000 1000z" fill="#2775ca"/> + <path d="M1275 1158.33c0-145.83-87.5-195.83-262.5-216.66-125-16.67-150-50-150-108.34s41.67-95.83 125-95.83c75 0 116.67 25 137.5 87.5 4.17 12.5 16.67 20.83 29.17 20.83h66.66c16.67 0 29.17-12.5 29.17-29.16v-4.17c-16.67-91.67-91.67-162.5-187.5-170.83v-100c0-16.67-12.5-29.17-33.33-33.34h-62.5c-16.67 0-29.17 12.5-33.34 33.34v95.83c-125 16.67-204.16 100-204.16 204.17 0 137.5 83.33 191.66 258.33 212.5 116.67 20.83 154.17 45.83 154.17 112.5s-58.34 112.5-137.5 112.5c-108.34 0-145.84-45.84-158.34-108.34-4.16-16.66-16.66-25-29.16-25h-70.84c-16.66 0-29.16 12.5-29.16 29.17v4.17c16.66 104.16 83.33 179.16 220.83 200v100c0 16.66 12.5 29.16 33.33 33.33h62.5c16.67 0 29.17-12.5 33.34-33.33v-100c125-20.84 208.33-108.34 208.33-220.84z" fill="#fff"/> + <path d="M787.5 1595.83c-325-116.66-491.67-479.16-370.83-800 62.5-175 200-308.33 370.83-370.83 16.67-8.33 25-20.83 25-41.67V325c0-16.67-8.33-29.17-25-33.33-4.17 0-12.5 0-16.67 4.16-395.83 125-612.5 545.84-487.5 941.67 75 233.33 254.17 412.5 487.5 487.5 16.67 8.33 33.34 0 37.5-16.67 4.17-4.16 4.17-8.33 4.17-16.66v-58.34c0-12.5-12.5-29.16-25-37.5zM1229.17 295.83c-16.67-8.33-33.34 0-37.5 16.67-4.17 4.17-4.17 8.33-4.17 16.67v58.33c0 16.67 12.5 33.33 25 41.67 325 116.66 491.67 479.16 370.83 800-62.5 175-200 308.33-370.83 370.83-16.67 8.33-25 20.83-25 41.67V1700c0 16.67 8.33 29.17 25 33.33 4.17 0 12.5 0 16.67-4.16 395.83-125 612.5-545.84 487.5-941.67-75-237.5-258.34-416.67-487.5-491.67z" fill="#fff"/> +</svg> diff --git a/src/assets/svg/tokens/usdt.svg b/src/assets/svg/tokens/usdt.svg new file mode 100644 index 00000000..e5308224 --- /dev/null +++ b/src/assets/svg/tokens/usdt.svg @@ -0,0 +1 @@ +<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 339.43 295.27"><title>tether-usdt-logo</title><path d="M62.15,1.45l-61.89,130a2.52,2.52,0,0,0,.54,2.94L167.95,294.56a2.55,2.55,0,0,0,3.53,0L338.63,134.4a2.52,2.52,0,0,0,.54-2.94l-61.89-130A2.5,2.5,0,0,0,275,0H64.45a2.5,2.5,0,0,0-2.3,1.45h0Z" style="fill:#50af95;fill-rule:evenodd"/><path d="M191.19,144.8v0c-1.2.09-7.4,0.46-21.23,0.46-11,0-18.81-.33-21.55-0.46v0c-42.51-1.87-74.24-9.27-74.24-18.13s31.73-16.25,74.24-18.15v28.91c2.78,0.2,10.74.67,21.74,0.67,13.2,0,19.81-.55,21-0.66v-28.9c42.42,1.89,74.08,9.29,74.08,18.13s-31.65,16.24-74.08,18.12h0Zm0-39.25V79.68h59.2V40.23H89.21V79.68H148.4v25.86c-48.11,2.21-84.29,11.74-84.29,23.16s36.18,20.94,84.29,23.16v82.9h42.78V151.83c48-2.21,84.12-11.73,84.12-23.14s-36.09-20.93-84.12-23.15h0Zm0,0h0Z" style="fill:#fff;fill-rule:evenodd"/></svg> \ No newline at end of file diff --git a/src/assets/svg/tokens/wbtc.svg b/src/assets/svg/tokens/wbtc.svg new file mode 100644 index 00000000..676c786b --- /dev/null +++ b/src/assets/svg/tokens/wbtc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 109.26 109.26"><defs><style>.cls-1{fill:#5a5564;}.cls-2{fill:#f09242;}.cls-3{fill:#282138;}</style></defs><title>wrapped-bitcoin-wbtc</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><g id="Page-1"><g id="wbtc_colour" data-name="wbtc colour"><path id="Shape" class="cls-1" d="M89.09,22.93l-3,3a42.47,42.47,0,0,1,0,57.32l3,3a46.76,46.76,0,0,0,0-63.39Z"/><path id="Shape-2" data-name="Shape" class="cls-1" d="M26,23.19a42.47,42.47,0,0,1,57.32,0l3-3a46.76,46.76,0,0,0-63.39,0Z"/><path id="Shape-3" data-name="Shape" class="cls-1" d="M23.19,83.28a42.47,42.47,0,0,1,0-57.29l-3-3a46.76,46.76,0,0,0,0,63.39Z"/><path id="Shape-4" data-name="Shape" class="cls-1" d="M83.28,86.05a42.47,42.47,0,0,1-57.32,0l-3,3a46.76,46.76,0,0,0,63.39,0Z"/><path id="Shape-5" data-name="Shape" class="cls-2" d="M73.57,44.62c-.6-6.26-6-8.36-12.83-9V27H55.46v8.46c-1.39,0-2.81,0-4.22,0V27H46v8.68H35.29v5.65s3.9-.07,3.84,0a2.73,2.73,0,0,1,3,2.32V67.41a1.85,1.85,0,0,1-.64,1.29,1.83,1.83,0,0,1-1.36.46c.07.06-3.84,0-3.84,0l-1,6.31H45.9v8.82h5.28V75.6H55.4v8.65h5.29V75.53c8.92-.54,15.14-2.74,15.92-11.09.63-6.72-2.53-9.72-7.58-10.93C72.1,52,74,49.2,73.57,44.62ZM66.17,63.4c0,6.56-11.24,5.81-14.82,5.81V57.57C54.93,57.58,66.17,56.55,66.17,63.4ZM63.72,47c0,6-9.38,5.27-12.36,5.27V41.69C54.34,41.69,63.72,40.75,63.72,47Z"/><path id="Shape-6" data-name="Shape" class="cls-3" d="M54.62,109.26a54.63,54.63,0,1,1,54.64-54.64A54.63,54.63,0,0,1,54.62,109.26Zm0-105A50.34,50.34,0,1,0,105,54.62,50.34,50.34,0,0,0,54.62,4.26Z"/></g></g></g></g></svg> \ No newline at end of file diff --git a/src/components/Features/Bridge/Bridge.module.scss b/src/components/Features/Bridge/Bridge.module.scss index 1c96da1b..26649c54 100644 --- a/src/components/Features/Bridge/Bridge.module.scss +++ b/src/components/Features/Bridge/Bridge.module.scss @@ -5,7 +5,6 @@ $background-color: $--color-alpha; .bridge { display: flex; flex-direction: column; - overflow: hidden; background: $background-color; border-radius: 20px; padding: 20px; diff --git a/src/components/Features/SelectToken/SelectToken.module.scss b/src/components/Features/SelectToken/SelectToken.module.scss index 807c6383..c93b7b75 100644 --- a/src/components/Features/SelectToken/SelectToken.module.scss +++ b/src/components/Features/SelectToken/SelectToken.module.scss @@ -8,6 +8,7 @@ $network-color: $--color-beta; position: relative; display: flex; flex-direction: column; + max-height: 100%; .background { content: ''; diff --git a/src/config/addresses/contracts/contracts.ethereum.js b/src/config/addresses/contracts/contracts.ethereum.js index 2ffe300e..210e347a 100644 --- a/src/config/addresses/contracts/contracts.ethereum.js +++ b/src/config/addresses/contracts/contracts.ethereum.js @@ -1,10 +1,5 @@ import {ChainType} from '../../../enums'; -export const ETH_BRIDGE_CONTRACT_ADDRESS = { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x7419275fe04ab65c9c9FB8bCB21601A4A34BF1b9' -}; - export const MESSAGING_CONTRACT_ADDRESS = { [ChainType.MAIN.id]: '', [ChainType.GOERLI.id]: '0xde29d060D45901Fb19ED6C6e959EB22d8626708e' diff --git a/src/config/addresses/tokens/tokens.ethereum.js b/src/config/addresses/tokens/tokens.ethereum.js index 2b227d4f..1929fd01 100644 --- a/src/config/addresses/tokens/tokens.ethereum.js +++ b/src/config/addresses/tokens/tokens.ethereum.js @@ -1,16 +1,78 @@ -import {ChainType} from '../../../enums'; +import {ChainType, NetworkType} from '../../../enums'; export const EthereumTokens = [ { + name: NetworkType.ETHEREUM.tokenName, + symbol: NetworkType.ETHEREUM.symbol, + decimals: 18, bridgeAddress: { [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x5542fd7dc64008978B50Ccb56274a00DEF2B57FE' + [ChainType.GOERLI.id]: '0xcf98f0A8edC6a730E1CA6B64a2528c6bE031Cb12' + } + }, + { + name: 'Wrapped BTC', + symbol: 'WBTC', + decimals: 8, + bridgeAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0xf29aE3446Ce4688fCc792b232C21D1B9581E7baC' + }, + tokenAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0xC04B0d3107736C32e19F1c62b2aF67BE61d63a05' + } + }, + { + name: 'Goerli USD Coin', + symbol: 'USDC', + decimals: 6, + bridgeAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0xc175127A2AA180F48D47fC20e6ED581Bd9c369c7' + }, + tokenAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x2f3A40A3db8a7e3D09B0adfEfbCe4f6F81927557' + } + }, + { + name: 'Tether USD', + symbol: 'USDT', + decimals: 6, + bridgeAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0xA1f590F18b23EFece02804704E5006E91348C997' }, tokenAddress: { [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0xe4C2493C66e068D65Cf1C38a2d7bDa25d9f08980' + [ChainType.GOERLI.id]: '0x509Ee0d083DdF8AC028f2a56731412edD63223B9' + } + }, + { + name: 'Magic Internet Money', + symbol: 'MIM', + decimals: 18, + bridgeAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x865C602d591eB18e946e9edF73895F6e699EB118' }, - name: 'Mock ERC20 Token', - symbol: 'TEST' + tokenAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x86124F8CF3C4AB702cEF895483067e46CE8764f9' + } + }, + { + name: 'Frax', + symbol: 'FRAX', + decimals: 18, + bridgeAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x9818b35b62B1B394614f97b5e8BC158907E4eb1C' + }, + tokenAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0xBd97097dF545cc9734b96A5f3C5b1752C9179649' + } } ]; diff --git a/src/config/addresses/tokens/tokens.starknet.js b/src/config/addresses/tokens/tokens.starknet.js index e4fd0256..ec6d8dfa 100644 --- a/src/config/addresses/tokens/tokens.starknet.js +++ b/src/config/addresses/tokens/tokens.starknet.js @@ -2,27 +2,81 @@ import {ChainType, NetworkType} from '../../../enums'; export const StarknetTokens = [ { + name: NetworkType.ETHEREUM.tokenName, + symbol: NetworkType.ETHEREUM.symbol, + decimals: 18, bridgeAddress: { [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x012291a5bcd1b08e237047277a6055aec5a33d0e15610f869d517575ca983a82' + [ChainType.GOERLI.id]: '0x30fab1f1cc35d6ab0a992240528e122bc46c196eebfed9d21a5f800f72f066d' }, tokenAddress: { [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x03188903406daaaedd123598a8bd1f5dbec34720089037f4bf1473e51857e190' + [ChainType.GOERLI.id]: '0x2dd93e385742984bf2fc887cd5d8b5ec6917d80af09cf7a00a63710ad51ba53' + } + }, + { + name: 'Wrapped BTC', + symbol: 'WBTC', + decimals: 8, + bridgeAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x72eeb90833bae233a9585f2fa9afc99c187f0a3a82693becd6a4d700b37fc6b' }, - name: NetworkType.ETHEREUM.tokenName, - symbol: NetworkType.ETHEREUM.symbol + tokenAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x12d537dc323c439dc65c976fad242d5610d27cfb5f31689a0a319b8be7f3d56' + } + }, + { + name: 'Goerli USD Coin', + symbol: 'USDC', + decimals: 6, + bridgeAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x28248893ca3bab78fe7b0a053d3ddc450c291f3572e175699dbd1f7076dc800' + }, + tokenAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x77367abf77245c0e74728e4f9dc7c944b2bc5c1bdb6902575ff97aea7653842' + } + }, + { + name: 'Tether USD', + symbol: 'USDT', + decimals: 6, + bridgeAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x71d54658ca3c6ccd84ff958adb7498b2e71ba008e29b643983221ed2bd71b69' + }, + tokenAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x386e8d061177f19b3b485c20e31137e6f6bc497cc635ccdfcab96fadf5add6a' + } }, { + name: 'Magic Internet Money', + symbol: 'MIM', + decimals: 18, bridgeAddress: { [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x0061f462a8a2ea511189e4ec73d115ef65fad071e643e99644818249604a525d' + [ChainType.GOERLI.id]: '0x341747554ec54280d2e92eab57295055955fd1e8ec2292910163ca60c85e74f' }, tokenAddress: { [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x021eb73bd66eb18c37ec7b1e2567bc3fa8ba9ac0d391b53745a5f9d483217595' + [ChainType.GOERLI.id]: '0x1dd62766ff2a0d3b996857e6a04490c74649386dc52dc4b6153b9acf5f4cae3' + } + }, + { + name: 'Frax', + symbol: 'FRAX', + decimals: 18, + bridgeAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x254e681ffbf99c79e9e56aa38b2212914cadafa97d6c4f470589b1d43932a5f' }, - name: 'Mock ERC20 Token', - symbol: 'TEST' + tokenAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x1a53260bb912e49d668ae4ea8c4b5c1ebf1441f2acc1fd7fde74836738ed8da' + } } ]; diff --git a/src/hooks/useContract.js b/src/hooks/useContract.js index 98845d90..c02d898d 100644 --- a/src/hooks/useContract.js +++ b/src/hooks/useContract.js @@ -3,8 +3,10 @@ import {useCallback, useMemo} from 'react'; import {ERC20_ABI, ERC20_BRIDGE_ABI, ETH_BRIDGE_ABI, MESSAGING_ABI} from '../abis/ethereum'; import {STARKNET_BRIDGE_ABI, STARKNET_ERC20_ABI} from '../abis/starknet'; import {useTransferData} from '../components/Features/Transfer/Transfer.hooks'; -import {ETH_BRIDGE_CONTRACT_ADDRESS, MESSAGING_CONTRACT_ADDRESS} from '../config/addresses'; -import {useWallets} from '../providers/WalletsProvider'; +import {MESSAGING_CONTRACT_ADDRESS} from '../config/addresses'; +import {NetworkType} from '../enums'; +import {useEthereumToken} from '../providers/TokensProvider'; +import {useEthereumWallet, useWallets} from '../providers/WalletsProvider'; import {eth_getContract, starknet_getContract} from '../utils/contract'; export const useContracts = (ABI, getContractHandler = eth_getContract) => { @@ -79,11 +81,6 @@ export const useEthereumTokenContracts = () => { return useCallback(tokensAddresses => getContracts(tokensAddresses), [getContracts]); }; -export const useEthBridgeContract = () => { - const getContract = useContract(ETH_BRIDGE_ABI); - return useMemo(() => getContract(ETH_BRIDGE_CONTRACT_ADDRESS), [getContract]); -}; - export const useMessagingContract = () => { const getContract = useContract(MESSAGING_ABI); return useMemo(() => getContract(MESSAGING_CONTRACT_ADDRESS), [getContract]); @@ -95,6 +92,15 @@ export const useStarknetTokenBridgeContract = () => { }; export const useEthereumTokenBridgeContract = () => { - const getContract = useContract(ERC20_BRIDGE_ABI); - return useCallback(bridgeAddress => getContract(bridgeAddress), [getContract]); + const getTokenBridgeContract = useContract(ERC20_BRIDGE_ABI); + const getEthBridgeContract = useContract(ETH_BRIDGE_ABI); + const ethToken = useEthereumToken()(NetworkType.ETHEREUM.symbol); + const {chainId} = useEthereumWallet(); + return useCallback( + bridgeAddress => + bridgeAddress[chainId] === ethToken.bridgeAddress[chainId] + ? getEthBridgeContract(bridgeAddress) + : getTokenBridgeContract(bridgeAddress), + [getTokenBridgeContract, getEthBridgeContract] + ); }; diff --git a/src/hooks/useEventListener.js b/src/hooks/useEventListener.js index 70e54216..ef4eff52 100644 --- a/src/hooks/useEventListener.js +++ b/src/hooks/useEventListener.js @@ -4,8 +4,8 @@ import {stark} from 'starknet'; import {useSelectedToken} from '../components/Features/Transfer/Transfer.hooks'; import {useEthereumToken, useStarknetToken} from '../providers/TokensProvider'; import {useEthereumWallet, useStarknetWallet} from '../providers/WalletsProvider'; -import {isEth, txHash} from '../utils'; -import {useEthBridgeContract, useMessagingContract, useTokenBridgeContract} from './useContract'; +import {txHash} from '../utils'; +import {useMessagingContract, useTokenBridgeContract} from './useContract'; import {useLogger} from './useLogger'; const HOOK_MODULE = 'useEventListener'; @@ -53,7 +53,6 @@ export const useLogMessageToL2Listener = () => { export const useLogDepositListener = () => { const logger = useLogger(`${HOOK_MODULE}:useLogDepositListener`); const selectedToken = useSelectedToken(); - const ethBridgeContract = useEthBridgeContract(); const getTokenBridgeContract = useTokenBridgeContract(); const addEventListener = useEventListener(); const {account: ethereumAccount} = useEthereumWallet(); @@ -61,8 +60,8 @@ export const useLogDepositListener = () => { return useCallback(async () => { logger.log('Registering to LogDeposit event'); - const {symbol, bridgeAddress} = selectedToken; - const contract = isEth(symbol) ? ethBridgeContract : getTokenBridgeContract(bridgeAddress); + const {bridgeAddress} = selectedToken; + const contract = getTokenBridgeContract(bridgeAddress); try { const event = await addEventListener(contract, 'LogDeposit', { filter: { @@ -78,7 +77,6 @@ export const useLogDepositListener = () => { } }, [ addEventListener, - ethBridgeContract, ethereumAccount, starknetAccount, getTokenBridgeContract, diff --git a/src/hooks/useTokenBalance.js b/src/hooks/useTokenBalance.js index c92f96f2..8dabc9d9 100644 --- a/src/hooks/useTokenBalance.js +++ b/src/hooks/useTokenBalance.js @@ -20,7 +20,8 @@ export const useTokenBalance = account => { export const useStarknetTokenBalance = account => { const getContract = useStarknetTokenContract(); return useCallback( - async tokenAddresses => await balanceOf(account, getContract(tokenAddresses), false), + async tokenAddresses => + await balanceOf({account, contract: getContract(tokenAddresses)}, false), [account, getContract] ); }; @@ -30,7 +31,7 @@ export const useEthereumTokenBalance = account => { return useCallback( async tokenAddresses => tokenAddresses - ? await balanceOf(account, getContract(tokenAddresses), true) + ? await balanceOf({account, contract: getContract(tokenAddresses)}, true) : await eth_ethBalanceOf(account), [account, getContract] ); diff --git a/src/hooks/useTransfer.js b/src/hooks/useTransfer.js index 121029a9..45e37daa 100644 --- a/src/hooks/useTransfer.js +++ b/src/hooks/useTransfer.js @@ -17,7 +17,6 @@ import {useEthereumWallet, useStarknetWallet} from '../providers/WalletsProvider import {isEth} from '../utils'; import {starknet_waitForTransaction} from '../utils/contract'; import { - useEthBridgeContract, useEthereumTokenBridgeContract, useTokenBridgeContract, useTokenContract @@ -34,7 +33,6 @@ export const useTransferToL2 = () => { const {account: starknetAccount} = useStarknetWallet(); const {handleProgress, handleData, handleError} = useTransfer(); const selectedToken = useSelectedToken(); - const ethBridgeContract = useEthBridgeContract(); const getTokenContract = useTokenContract(); const getTokenBridgeContract = useTokenBridgeContract(); const progressOptions = useTransferProgress(); @@ -45,44 +43,48 @@ export const useTransferToL2 = () => { async amount => { try { logger.log('TransferToL2 called'); - const {symbol, tokenAddress, bridgeAddress, name} = selectedToken; + const {symbol, decimals, tokenAddress, bridgeAddress, name} = selectedToken; const isEthToken = isEth(symbol); - const bridgeContract = isEthToken - ? ethBridgeContract - : getTokenBridgeContract(bridgeAddress); + const bridgeContract = getTokenBridgeContract(bridgeAddress); const depositHandler = isEthToken ? depositEth : deposit; logger.log('Prepared contract and handler', {isEthToken, bridgeContract, depositHandler}); if (!isEthToken) { logger.log('Token needs approval', {isEthToken}); const tokenContract = getTokenContract(tokenAddress); handleProgress(progressOptions.approval(symbol)); - const allow = await allowance(ethereumAccount, bridgeAddress[chainId], tokenContract); + const allow = await allowance({ + owner: ethereumAccount, + spender: bridgeAddress[chainId], + decimals, + contract: tokenContract + }); logger.log('Current allow value', {allow}); if (allow < amount) { logger.log('Allow value is smaller then amount, sending approve tx', {amount}); - await approve( - bridgeAddress[chainId], - constants.MASK_250, - tokenContract, - ethereumAccount - ); + await approve({ + spender: bridgeAddress[chainId], + value: constants.MASK_250, + contract: tokenContract, + options: {from: ethereumAccount} + }); } } handleProgress(progressOptions.waitForConfirm(ethereumConfig.name)); const logMessageToL2EventPromise = addLogMessageToL2Listener(); logger.log('Calling deposit'); - const depositPromise = await depositHandler( - starknetAccount, + const depositPromise = await depositHandler({ + recipient: starknetAccount, amount, - bridgeContract, - ethereumAccount, - (error, transactionHash) => { + decimals, + contract: bridgeContract, + options: {from: ethereumAccount}, + emitter: (error, transactionHash) => { if (!error) { logger.log('Tx hash received', {transactionHash}); handleProgress(progressOptions.deposit(amount, symbol)); } } - ); + }); const [{transactionHash: l1hash}, l2hash] = await Promise.all([ depositPromise, logMessageToL2EventPromise @@ -108,7 +110,6 @@ export const useTransferToL2 = () => { addLogDepositListener, addLogMessageToL2Listener, chainId, - ethBridgeContract, ethereumAccount, ethereumConfig, getTokenBridgeContract, @@ -128,7 +129,6 @@ export const useTransferToL1 = () => { const {account: ethereumAccount} = useEthereumWallet(); const {account: starknetAccount, config: starknetConfig} = useStarknetWallet(); const selectedToken = useSelectedToken(); - const getTokenContract = useTokenContract(); const getTokenBridgeContract = useTokenBridgeContract(); const {handleProgress, handleData, handleError} = useTransfer(); const progressOptions = useTransferProgress(); @@ -137,18 +137,17 @@ export const useTransferToL1 = () => { async amount => { try { logger.log('TransferToL1 called'); - const {tokenAddress, bridgeAddress, name, symbol} = selectedToken; - const tokenContract = getTokenContract(tokenAddress); + const {decimals, bridgeAddress, name, symbol} = selectedToken; const bridgeContract = getTokenBridgeContract(bridgeAddress); - logger.log('Prepared contracts', {bridgeContract, tokenContract}); + logger.log('Prepared contract', {bridgeContract}); handleProgress(progressOptions.waitForConfirm(starknetConfig.name)); logger.log('Calling initiate withdraw'); - const {transaction_hash} = await initiateWithdraw( - ethereumAccount, + const {transaction_hash} = await initiateWithdraw({ + recipient: ethereumAccount, amount, - bridgeContract, - tokenContract - ); + decimals, + contract: bridgeContract + }); logger.log('Tx hash received', {transaction_hash}); handleProgress(progressOptions.initiateWithdraw(amount, symbol)); logger.log('Waiting for tx to be received on L2'); @@ -174,7 +173,6 @@ export const useTransferToL1 = () => { [ ethereumAccount, getTokenBridgeContract, - getTokenContract, handleData, handleError, handleProgress, @@ -193,7 +191,6 @@ export const useCompleteTransferToL1 = () => { const {handleProgress, handleData, handleError} = useTransfer(); const progressOptions = useTransferProgress(); const getEthereumToken = useEthereumToken(); - const ethBridgeContract = useEthBridgeContract(); const getEthereumTokenBridgeContract = useEthereumTokenBridgeContract(); return useCallback( @@ -202,23 +199,23 @@ export const useCompleteTransferToL1 = () => { logger.log('CompleteTransferToL1 called'); const {symbol, amount} = transfer; const ethereumToken = getEthereumToken(symbol); - const tokenBridgeContract = isEth(symbol) - ? ethBridgeContract - : getEthereumTokenBridgeContract(ethereumToken.bridgeAddress); + const {bridgeAddress, decimals} = ethereumToken; + const tokenBridgeContract = getEthereumTokenBridgeContract(bridgeAddress); logger.log('Prepared token and bridge contract', {ethereumToken, tokenBridgeContract}); handleProgress(progressOptions.waitForConfirm(ethereumConfig.name)); logger.log('Calling withdraw'); - const {transactionHash} = await withdraw( - ethereumAccount, + const {transactionHash} = await withdraw({ + recipient: ethereumAccount, amount, - tokenBridgeContract, - (error, transactionHash) => { + decimals, + contract: tokenBridgeContract, + emitter: (error, transactionHash) => { if (!error) { logger.log('Tx hash received', {transactionHash}); handleProgress(progressOptions.withdraw(amount, symbol)); } } - ); + }); logger.log('Done', {transactionHash}); handleData({...transfer, eth_hash: transactionHash}); } catch (ex) { @@ -227,7 +224,6 @@ export const useCompleteTransferToL1 = () => { } }, [ - ethBridgeContract, ethereumAccount, ethereumConfig, getEthereumToken, diff --git a/src/providers/TokensProvider/tokens-reducer.js b/src/providers/TokensProvider/tokens-reducer.js index bb226620..59c06943 100644 --- a/src/providers/TokensProvider/tokens-reducer.js +++ b/src/providers/TokensProvider/tokens-reducer.js @@ -1,21 +1,11 @@ -import {ETH_BRIDGE_CONTRACT_ADDRESS, EthereumTokens, StarknetTokens} from '../../config/addresses'; -import {NetworkType} from '../../enums'; +import {EthereumTokens, StarknetTokens} from '../../config/addresses'; export const actions = { UPDATE_TOKEN_STATE: 'Tokens/UPDATE_TOKEN_STATE' }; -const ethereumTokens = [ - { - symbol: NetworkType.ETHEREUM.symbol, - name: NetworkType.ETHEREUM.tokenName, - bridgeAddress: ETH_BRIDGE_CONTRACT_ADDRESS - }, - ...EthereumTokens -].map(t => ({...t, isEthereum: true})); - +const ethereumTokens = EthereumTokens.map(t => ({...t, isEthereum: true})); const starknetTokens = StarknetTokens.map(t => ({...t, isStarknet: true})); - export const initialState = [...ethereumTokens, ...starknetTokens]; export const reducer = (state, action) => { From 23f1da282265530ac1edad458462ea6a4802df1a Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Thu, 6 Jan 2022 13:16:35 +0000 Subject: [PATCH 058/211] chore(release): 0.0.1-11 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d2d6d6c8..f7387093 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "0.0.1-10", + "version": "0.0.1-11", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 7cdbfdf4682c276be12b5a157aa4f78eaf9a0ce3 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Thu, 6 Jan 2022 20:04:21 +0200 Subject: [PATCH 059/211] chore: delete proxy.js --- src/api/proxy.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/api/proxy.js diff --git a/src/api/proxy.js b/src/api/proxy.js deleted file mode 100644 index e69de29b..00000000 From 336d1ef77cd52a283f5065f304ce7605187fb2b8 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 11 Jan 2022 14:03:42 +0200 Subject: [PATCH 060/211] chore: add [skip ci] to release commit (#57) --- .github/workflows/push.yml | 1 - .github/workflows/tag.yml | 2 +- .versionrc.json | 3 +++ package.json | 4 +--- scripts/npm-publish.bash | 4 ---- 5 files changed, 5 insertions(+), 9 deletions(-) create mode 100644 .versionrc.json delete mode 100644 scripts/npm-publish.bash diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 19dcbd0d..fa857c62 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -10,7 +10,6 @@ jobs: release-version: name: Releasing a version runs-on: ubuntu-latest - if: ${{ !contains(github.event.head_commit.message, 'chore') || github.ref_name == 'master' }} steps: - uses: actions/checkout@v2 with: diff --git a/.github/workflows/tag.yml b/.github/workflows/tag.yml index a488957a..1f8592b4 100644 --- a/.github/workflows/tag.yml +++ b/.github/workflows/tag.yml @@ -32,7 +32,7 @@ jobs: run: yarn run build - name: Zip artifacts - run: zip -r ${{ steps.get-release-data.outputs.file }}.zip package.json README.md CHANGELOG.md lib dist + run: zip -r ${{ steps.get-release-data.outputs.file }}.zip package.json README.md CHANGELOG.md build - name: Create release uses: softprops/action-gh-release@v1 diff --git a/.versionrc.json b/.versionrc.json new file mode 100644 index 00000000..5d79ef30 --- /dev/null +++ b/.versionrc.json @@ -0,0 +1,3 @@ +{ + "releaseCommitMessageFormat": "chore(release): {{currentTag}} [skip ci]" +} diff --git a/package.json b/package.json index f7387093..2bfcdd37 100644 --- a/package.json +++ b/package.json @@ -14,9 +14,7 @@ "format": "prettier --write \"**/*.+(js|jsx|json|scss|css|md)\"", "release": "standard-version", "release:dry": "standard-version --dry-run", - "pre-release": "standard-version --prerelease --skip.changelog", - "pushTaggedRelease": "git push --follow-tags --no-verify origin master", - "publish": "bash ./scripts/npm-publish.bash" + "pre-release": "standard-version --prerelease --skip.changelog" }, "husky": { "hooks": { diff --git a/scripts/npm-publish.bash b/scripts/npm-publish.bash deleted file mode 100644 index 4f0cba96..00000000 --- a/scripts/npm-publish.bash +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -yarn run build -npm publish --access public From 6cde616aa4d93dc151a10697b1a7fb65c1452a0c Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 11 Jan 2022 14:03:57 +0200 Subject: [PATCH 061/211] chore: starkgate logo (#60) --- src/assets/img/starkgate.svg | 14 ++++++++++++++ src/assets/img/starknet.png | Bin 4005 -> 0 bytes .../Containers/Header/Header.constants.js | 1 - src/components/Containers/Header/Header.js | 6 ++---- .../Containers/Header/Header.module.scss | 11 ++--------- src/styles/variables.module.scss | 2 +- 6 files changed, 19 insertions(+), 15 deletions(-) create mode 100644 src/assets/img/starkgate.svg delete mode 100644 src/assets/img/starknet.png delete mode 100644 src/components/Containers/Header/Header.constants.js diff --git a/src/assets/img/starkgate.svg b/src/assets/img/starkgate.svg new file mode 100644 index 00000000..db4330a9 --- /dev/null +++ b/src/assets/img/starkgate.svg @@ -0,0 +1,14 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="310.986" height="56.206" viewBox="0 0 310.986 56.206"> + <path d="M298.527,30.888h11.118v-5.8H298.527V18.341h12.239V12.387H292.309V43.9h18.677V37.962H298.527Zm-31.047-18.5v5.954h7.558V43.9h6.2V18.341h7.6V12.387ZM269.04,43.9l-10.7-31.508h-7.69L239.926,43.9h6.7l1.8-5.669h12.063l1.8,5.669Zm-14.568-24.61,4.175,13.141h-8.372ZM233.5,32.538c.058,1.747-1.814,3.656-3.513,4.808a9.509,9.509,0,0,1-5.544,1.643,9.887,9.887,0,0,1-7.433-3,10.7,10.7,0,0,1-2.9-7.757,10.514,10.514,0,0,1,2.857-7.678,9.987,9.987,0,0,1,7.478-2.925,10.328,10.328,0,0,1,5.524,1.518,8.012,8.012,0,0,1,3.382,3.75h6.585a13.966,13.966,0,0,0-5.5-8.113,16.216,16.216,0,0,0-9.989-3.271,15.971,15.971,0,0,0-11.887,4.777,16.222,16.222,0,0,0-4.7,11.841A16.6,16.6,0,0,0,212.4,39.994a15,15,0,0,0,11.372,4.8c4.688,0,8.369-1.116,11.484-3.876a15.5,15.5,0,0,0,4.677-9.935V26.958H224.751v5.58Z" fill="#fafafa"/> + <path d="M56.206,28.1A28.1,28.1,0,1,1,28.1,0a28.1,28.1,0,0,1,28.1,28.1" fill="#29296e"/> + <path d="M41.18,20.589l-.715-2.208a1.445,1.445,0,0,0-.95-.936L37.3,16.763a.328.328,0,0,1,0-.626l2.208-.715a1.443,1.443,0,0,0,.936-.95l.682-2.218a.328.328,0,0,1,.626,0l.714,2.208a1.444,1.444,0,0,0,.951.936l2.218.682a.328.328,0,0,1,0,.626l-2.208.714a1.448,1.448,0,0,0-.937.951l-.681,2.218a.328.328,0,0,1-.626,0" fill="#fafafa"/> + <path d="M2.555,27.658a6.933,6.933,0,0,1,3.362-2.919,13.726,13.726,0,0,1,4.409-1.117,21.68,21.68,0,0,1,8.65,1.106,30.45,30.45,0,0,1,3.9,1.561c.621.3,1.2.638,1.8.965l1.66.961a52.4,52.4,0,0,0,5.249,2.876,19.764,19.764,0,0,0,4.586,1.54,10.9,10.9,0,0,0,4.631-.143,24.464,24.464,0,0,0,5.8-2.355c2.081-1.1,4.213-2.451,6.647-3.769A22.143,22.143,0,0,1,51.011,34.2a19.6,19.6,0,0,1-5.516,6.82,17.124,17.124,0,0,1-9.365,3.537,21.6,21.6,0,0,1-9.59-1.681,31.6,31.6,0,0,1-7.422-4.4c-.6-.469-.917-.734-1.358-1.107L16.53,36.3c-.83-.649-1.633-1.426-2.454-2.068A59.4,59.4,0,0,0,9.042,30.3a21.643,21.643,0,0,0-2.867-1.661A12.464,12.464,0,0,0,4.508,28a6.879,6.879,0,0,0-1.953-.341" fill="#ff4f0a"/> + <path d="M2.555,27.658A13.9,13.9,0,0,1,15.394,15.7a16.058,16.058,0,0,1,5.317.547,20.889,20.889,0,0,1,4.661,1.94c.708.4,1.369.839,2.028,1.281l1.757,1.33L31.9,22.958c1.78,1.417,3.478,2.727,5.047,3.81a19.378,19.378,0,0,0,4.223,2.339,8.024,8.024,0,0,0,5.024.1,22.517,22.517,0,0,0,3.343-1.173c1.172-.495,2.388-1.085,3.719-1.67a15.347,15.347,0,0,1-1,4.174,15.009,15.009,0,0,1-2.2,3.888A16.1,16.1,0,0,1,48.4,36.179a14.052,14.052,0,0,1-2.074,1.506,13.893,13.893,0,0,1-5.172,1.754,16.38,16.38,0,0,1-5.4-.243,21.732,21.732,0,0,1-4.671-1.56,33.013,33.013,0,0,1-7.3-4.728c-1.053-.876-2.039-1.79-2.974-2.719l-1.1-1.108c-.333-.321-.67-.645-1-.94a14.314,14.314,0,0,0-3.958-2.658,8.881,8.881,0,0,0-5.241-.435,25.847,25.847,0,0,0-6.955,2.61" fill="#fafafa"/> + <path d="M13.787,42.283a1.52,1.52,0,1,1-1.519-1.519,1.519,1.519,0,0,1,1.519,1.519" fill="#fafafa"/> + <path d="M13.787,42.283a1.52,1.52,0,1,1-1.519-1.519,1.519,1.519,0,0,1,1.519,1.519" fill="#fafafa"/> + <path d="M98.105,28.87a32.213,32.213,0,0,0-5.568-2.523,23.4,23.4,0,0,1-5.6-2.734,3.991,3.991,0,0,1-1.567-3.345A4.033,4.033,0,0,1,86.958,16.9a6.641,6.641,0,0,1,4.19-1.234,6.244,6.244,0,0,1,4.234,1.412,5.015,5.015,0,0,1,1.634,4.012h4.245A8.7,8.7,0,0,0,98.305,14.1a10.611,10.611,0,0,0-7.124-2.523A10.93,10.93,0,0,0,84.1,13.922a7.671,7.671,0,0,0-2.912,6.3A7.326,7.326,0,0,0,82.7,25.091,15.435,15.435,0,0,0,84.235,26.7a15.406,15.406,0,0,0,3.09,1.8,20.72,20.72,0,0,0,4,1.545,28.5,28.5,0,0,1,4.945,2.445,3.854,3.854,0,0,1,1.656,3.3,4.035,4.035,0,0,1-1.722,3.389,7.782,7.782,0,0,1-4.757,1.29A7.7,7.7,0,0,1,86.5,38.95,5.232,5.232,0,0,1,84.591,34.6H80.368a8.976,8.976,0,0,0,3.256,7.379,12.062,12.062,0,0,0,7.857,2.645,11.89,11.89,0,0,0,7.646-2.423,7.9,7.9,0,0,0,3.012-6.6,7.791,7.791,0,0,0-4.034-6.735" fill="#fafafa"/> + <polygon points="126.217 12.473 105.264 12.473 105.264 16.457 113.65 16.457 113.65 44.034 117.787 44.034 117.787 16.457 126.217 16.457 126.217 12.473" fill="#fafafa"/> + <path d="M134.6,31.106l4.915-13.7,3.851,10.737a18.909,18.909,0,0,0-8.766,2.966m2.538-18.633L125.49,44.034h4.468a30.219,30.219,0,0,1,2.055-4.947A15.292,15.292,0,0,1,144.8,32.15l4.263,11.884h4.468L141.865,12.473Z" fill="#fafafa"/> + <polygon points="208.045 12.473 202.895 12.473 189.733 26.779 189.733 12.473 185.552 12.473 185.552 44.034 189.733 44.034 189.733 28.892 203.357 44.034 208.485 44.034 194.113 27.857 208.045 12.473" fill="#fafafa"/> + <path d="M168.209,16.413a5.341,5.341,0,0,1,3.983,1.706,5.73,5.73,0,0,1,1.651,4.138,5.746,5.746,0,0,1-1.651,4.171c-1.992,2.036-6.6,1.63-11.168,1.651l-.123,0V16.413Zm4.259,16.26a17.686,17.686,0,0,0-1.933-1.552,8.993,8.993,0,0,0,5.641-3.219,8.9,8.9,0,0,0,1.849-5.634,9.807,9.807,0,0,0-9.816-9.794H156.72V44.035H160.9v-11.9a13.1,13.1,0,0,1,8.813,3.518,29.885,29.885,0,0,1,6.135,8.382h4.441a33.194,33.194,0,0,0-7.822-11.36" fill="#fafafa"/> +</svg> diff --git a/src/assets/img/starknet.png b/src/assets/img/starknet.png deleted file mode 100644 index ed9d5c853f4d0ff8a4d6f80f811d593446b531a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4005 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 LNkvXXu0mjfbajW% diff --git a/src/components/Containers/Header/Header.constants.js b/src/components/Containers/Header/Header.constants.js deleted file mode 100644 index fb520bb8..00000000 --- a/src/components/Containers/Header/Header.constants.js +++ /dev/null @@ -1 +0,0 @@ -export const STARKNET_LOGO_SIZE = 30; diff --git a/src/components/Containers/Header/Header.js b/src/components/Containers/Header/Header.js index 928a87cb..8f4711c1 100644 --- a/src/components/Containers/Header/Header.js +++ b/src/components/Containers/Header/Header.js @@ -1,12 +1,11 @@ import React from 'react'; -import StarkNetLogoPath from '../../../assets/img/starknet.png'; +import {ReactComponent as StarkGateLogo} from '../../../assets/img/starkgate.svg'; import {useEthereumWallet, useStarknetWallet, useWallets} from '../../../providers/WalletsProvider'; import {toClasses} from '../../../utils'; import {useBridgeActions} from '../../Features/Bridge/Bridge.hooks'; import {useIsEthereum, useIsStarknet} from '../../Features/Transfer/Transfer.hooks'; import {WalletButton} from '../../UI'; -import {STARKNET_LOGO_SIZE} from './Header.constants'; import styles from './Header.module.scss'; import {CHAIN_TXT} from './Header.strings'; @@ -44,8 +43,7 @@ export const Header = () => { <div className={toClasses(styles.header, 'row')}> <div className={toClasses(styles.left, 'row')}> <div className={toClasses(styles.logo, 'row')} onClick={onLogoClick}> - <img alt="" height={STARKNET_LOGO_SIZE} src={StarkNetLogoPath} /> - <div className={styles.bridge}>Bridge</div> + <StarkGateLogo /> </div> {isConnected && ( <div className={toClasses(styles.chain, 'row')}>{CHAIN_TXT(chainName)}</div> diff --git a/src/components/Containers/Header/Header.module.scss b/src/components/Containers/Header/Header.module.scss index b3542715..aa80a2ea 100644 --- a/src/components/Containers/Header/Header.module.scss +++ b/src/components/Containers/Header/Header.module.scss @@ -3,7 +3,6 @@ $height: $--header-height; $background-color: $--color-alpha-5; $chain-color: $--color-white-1; -$bridge-color: $--color-beta; .header { height: #{$height}px; @@ -23,13 +22,8 @@ $bridge-color: $--color-beta; transition: 0.3s ease-in-out; cursor: pointer; - .bridge { - transition: 0.3s ease-in-out; - font-family: $--primary-font; - margin-left: 5px; - font-size: 25px; - line-height: 1; - color: $bridge-color; + svg { + width: 220px; } } @@ -39,7 +33,6 @@ $bridge-color: $--color-beta; font-size: 13px; font-weight: 500; opacity: 0.6; - margin-top: 2px; text-transform: capitalize; } } diff --git a/src/styles/variables.module.scss b/src/styles/variables.module.scss index 14d39b78..e6b74f8e 100644 --- a/src/styles/variables.module.scss +++ b/src/styles/variables.module.scss @@ -1,4 +1,4 @@ -$--header-height: 70; +$--header-height: 80; $--footer-height: 50; $--main-offset: $--header-height + $--footer-height + 2; From d8f62274919fc523074b5239e468e6fcedf6fe35 Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Tue, 11 Jan 2022 12:05:25 +0000 Subject: [PATCH 062/211] chore(release): 0.0.1-12 [skip ci] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2bfcdd37..6b6cf5a6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "0.0.1-11", + "version": "0.0.1-12", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 5ecdd6c1d3c0ef70a48d22dc7b755e83f9d0f277 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Wed, 12 Jan 2022 21:56:53 +0200 Subject: [PATCH 063/211] chore: change naming to L1/L2 (#61) --- README.md | 2 +- src/abis/ethereum/index.js | 6 -- .../{ethereum/erc20.json => l1/ERC20.json} | 0 .../StarknetERC20Bridge.json} | 33 ++++++- .../StarknetEthBridge.json} | 33 +++++-- .../StarknetMessaging.json} | 0 src/abis/l1/index.js | 6 ++ .../{starknet/erc20.json => l2/ERC20.json} | 0 src/abis/l2/index.js | 4 + .../bridge.json => l2/token_bridge.json} | 14 +-- src/abis/starknet/index.js | 4 - src/api/bridge.js | 10 +- src/api/erc20.js | 16 ++-- src/components/Containers/Header/Header.js | 44 ++++----- src/components/Containers/Main/Main.js | 8 +- src/components/Features/Account/Account.js | 8 +- src/components/Features/Login/Login.js | 20 ++-- .../Features/SelectToken/SelectToken.js | 8 +- .../Features/ToastProvider/ToastProvider.js | 8 +- .../Features/Transfer/Transfer.hooks.js | 37 ++++--- src/components/Features/Transfer/Transfer.js | 50 ++++------ .../Features/Transfer/Transfer.selectors.js | 14 +-- .../Features/Transfer/Transfer.slice.js | 4 +- .../Features/TransferLog/TransferLog.js | 24 ++--- .../TransactionSubmittedModal.js | 18 ++-- .../WithdrawalTransferToast.js | 4 +- ...{contracts.ethereum.js => contracts.l1.js} | 0 src/config/addresses/index.js | 6 +- .../{tokens.ethereum.js => tokens.l1.js} | 6 +- .../{tokens.starknet.js => tokens.l2.js} | 6 +- src/config/strings.json | 24 ++--- src/config/wallets.js | 4 +- src/constants.js | 8 +- src/enums/ActionType.js | 4 +- src/enums/ChainType.js | 12 +-- src/enums/NetworkType.js | 4 +- src/enums/WalletType.js | 4 +- src/hooks/useContract.js | 82 ++++++---------- src/hooks/useEventListener.js | 41 +++----- src/hooks/useTokenBalance.js | 26 +++-- src/hooks/useTransfer.js | 96 +++++++++---------- .../TokensProvider/TokensProvider.js | 14 +-- src/providers/TokensProvider/tokens-hooks.js | 40 ++++---- .../TokensProvider/tokens-reducer.js | 8 +- .../TransfersProvider/TransfersProvider.js | 8 +- .../WalletsProvider/WalletsProvider.js | 88 ++++++++--------- .../WalletsProvider/wallets-context.js | 8 +- .../WalletsProvider/wallets-hooks.js | 26 ++--- .../WalletsProvider/wallets-reducer.js | 32 +++---- src/utils/contract.js | 21 ++-- src/utils/hash.js | 8 +- src/utils/token.js | 2 +- 52 files changed, 458 insertions(+), 495 deletions(-) delete mode 100644 src/abis/ethereum/index.js rename src/abis/{ethereum/erc20.json => l1/ERC20.json} (100%) rename src/abis/{ethereum/eth-bridge.json => l1/StarknetERC20Bridge.json} (90%) rename src/abis/{ethereum/erc20-bridge.json => l1/StarknetEthBridge.json} (93%) rename src/abis/{ethereum/messaging.json => l1/StarknetMessaging.json} (100%) create mode 100644 src/abis/l1/index.js rename src/abis/{starknet/erc20.json => l2/ERC20.json} (100%) create mode 100644 src/abis/l2/index.js rename src/abis/{starknet/bridge.json => l2/token_bridge.json} (87%) delete mode 100644 src/abis/starknet/index.js rename src/config/addresses/contracts/{contracts.ethereum.js => contracts.l1.js} (100%) rename src/config/addresses/tokens/{tokens.ethereum.js => tokens.l1.js} (94%) rename src/config/addresses/tokens/{tokens.starknet.js => tokens.l2.js} (95%) diff --git a/README.md b/README.md index 31a02ecb..044d7198 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ <p align="center"> <img style="position: absolute; left: 50%; transform: translateX(-50%)" src="https://github.com/starkware-libs/starkgate-frontend/blob/dev/src/assets/img/stars.png?raw=true" alt=""/> - <img src="https://github.com/starkware-libs/starkgate-frontend/blob/dev/src/assets/img/starknet.png?raw=true" alt=""/> + <img src="https://github.com/starkware-libs/starkgate-frontend/blob/dev/src/assets/img/starkgate.svg?raw=true" alt=""/> </p> <h2 align='center'> Token Bridge for StarkNet</h2> diff --git a/src/abis/ethereum/index.js b/src/abis/ethereum/index.js deleted file mode 100644 index 06d1bf11..00000000 --- a/src/abis/ethereum/index.js +++ /dev/null @@ -1,6 +0,0 @@ -import ERC20_BRIDGE_ABI from './erc20-bridge.json'; -import ERC20_ABI from './erc20.json'; -import ETH_BRIDGE_ABI from './eth-bridge.json'; -import MESSAGING_ABI from './messaging.json'; - -export {ERC20_ABI, ERC20_BRIDGE_ABI, ETH_BRIDGE_ABI, MESSAGING_ABI}; diff --git a/src/abis/ethereum/erc20.json b/src/abis/l1/ERC20.json similarity index 100% rename from src/abis/ethereum/erc20.json rename to src/abis/l1/ERC20.json diff --git a/src/abis/ethereum/eth-bridge.json b/src/abis/l1/StarknetERC20Bridge.json similarity index 90% rename from src/abis/ethereum/eth-bridge.json rename to src/abis/l1/StarknetERC20Bridge.json index 85c0ed78..b371dbcd 100644 --- a/src/abis/ethereum/eth-bridge.json +++ b/src/abis/l1/StarknetERC20Bridge.json @@ -129,6 +129,11 @@ }, { "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, { "internalType": "uint256", "name": "l2Recipient", @@ -137,7 +142,7 @@ ], "name": "deposit", "outputs": [], - "stateMutability": "payable", + "stateMutability": "nonpayable", "type": "function" }, { @@ -166,6 +171,32 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "maxDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxTotalBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { diff --git a/src/abis/ethereum/erc20-bridge.json b/src/abis/l1/StarknetEthBridge.json similarity index 93% rename from src/abis/ethereum/erc20-bridge.json rename to src/abis/l1/StarknetEthBridge.json index a303ef24..198423a3 100644 --- a/src/abis/ethereum/erc20-bridge.json +++ b/src/abis/l1/StarknetEthBridge.json @@ -129,11 +129,6 @@ }, { "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, { "internalType": "uint256", "name": "l2Recipient", @@ -142,7 +137,7 @@ ], "name": "deposit", "outputs": [], - "stateMutability": "nonpayable", + "stateMutability": "payable", "type": "function" }, { @@ -171,6 +166,32 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "maxDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxTotalBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { diff --git a/src/abis/ethereum/messaging.json b/src/abis/l1/StarknetMessaging.json similarity index 100% rename from src/abis/ethereum/messaging.json rename to src/abis/l1/StarknetMessaging.json diff --git a/src/abis/l1/index.js b/src/abis/l1/index.js new file mode 100644 index 00000000..7ec6db8f --- /dev/null +++ b/src/abis/l1/index.js @@ -0,0 +1,6 @@ +import L1_ERC20_ABI from './ERC20.json'; +import L1_ERC20_BRIDGE_ABI from './StarknetERC20Bridge.json'; +import L1_ETH_BRIDGE_ABI from './StarknetEthBridge.json'; +import L1_MESSAGING_ABI from './StarknetMessaging.json'; + +export {L1_ERC20_ABI, L1_ERC20_BRIDGE_ABI, L1_ETH_BRIDGE_ABI, L1_MESSAGING_ABI}; diff --git a/src/abis/starknet/erc20.json b/src/abis/l2/ERC20.json similarity index 100% rename from src/abis/starknet/erc20.json rename to src/abis/l2/ERC20.json diff --git a/src/abis/l2/index.js b/src/abis/l2/index.js new file mode 100644 index 00000000..3b1acb7d --- /dev/null +++ b/src/abis/l2/index.js @@ -0,0 +1,4 @@ +import L2_ERC20_ABI from './ERC20.json'; +import L2_BRIDGE_ABI from './token_bridge.json'; + +export {L2_ERC20_ABI, L2_BRIDGE_ABI}; diff --git a/src/abis/starknet/bridge.json b/src/abis/l2/token_bridge.json similarity index 87% rename from src/abis/starknet/bridge.json rename to src/abis/l2/token_bridge.json index 1c19e58a..5b21bd99 100644 --- a/src/abis/starknet/bridge.json +++ b/src/abis/l2/token_bridge.json @@ -19,7 +19,7 @@ { "inputs": [ { - "name": "governance_account_address", + "name": "governor_address", "type": "felt" } ], @@ -29,7 +29,7 @@ }, { "inputs": [], - "name": "governance_address", + "name": "get_governor", "outputs": [ { "name": "res", @@ -41,7 +41,7 @@ }, { "inputs": [], - "name": "l1_contract_address", + "name": "get_l1_bridge", "outputs": [ { "name": "res", @@ -53,7 +53,7 @@ }, { "inputs": [], - "name": "l2_token_contract_address", + "name": "get_l2_token", "outputs": [ { "name": "res", @@ -66,11 +66,11 @@ { "inputs": [ { - "name": "l1_contract_address", + "name": "l1_bridge_address", "type": "felt" } ], - "name": "set_l1_bridge_address", + "name": "set_l1_bridge", "outputs": [], "type": "function" }, @@ -81,7 +81,7 @@ "type": "felt" } ], - "name": "set_l2_token_address", + "name": "set_l2_token", "outputs": [], "type": "function" }, diff --git a/src/abis/starknet/index.js b/src/abis/starknet/index.js deleted file mode 100644 index 2ef20fe2..00000000 --- a/src/abis/starknet/index.js +++ /dev/null @@ -1,4 +0,0 @@ -import STARKNET_BRIDGE_ABI from './bridge.json'; -import STARKNET_ERC20_ABI from './erc20.json'; - -export {STARKNET_ERC20_ABI, STARKNET_BRIDGE_ABI}; diff --git a/src/api/bridge.js b/src/api/bridge.js index 0af89384..ff52bfc0 100644 --- a/src/api/bridge.js +++ b/src/api/bridge.js @@ -1,9 +1,9 @@ import {parseToDecimals, parseToFelt, parseToUint256} from '../utils'; -import {eth_sendTransaction, starknet_sendTransaction} from '../utils/contract'; +import {l1_sendTransaction, l2_sendTransaction} from '../utils/contract'; export const deposit = async ({recipient, amount, decimals, contract, options, emitter}) => { try { - return eth_sendTransaction( + return l1_sendTransaction( contract, 'deposit', [parseToDecimals(amount, decimals), recipient], @@ -17,7 +17,7 @@ export const deposit = async ({recipient, amount, decimals, contract, options, e export const depositEth = async ({recipient, amount, contract, options, emitter}) => { try { - return eth_sendTransaction( + return l1_sendTransaction( contract, 'deposit', [recipient], @@ -34,7 +34,7 @@ export const depositEth = async ({recipient, amount, contract, options, emitter} export const withdraw = async ({recipient, amount, decimals, contract, emitter}) => { try { - return eth_sendTransaction( + return l1_sendTransaction( contract, 'withdraw', [parseToDecimals(amount, decimals), recipient], @@ -50,7 +50,7 @@ export const withdraw = async ({recipient, amount, decimals, contract, emitter}) export const initiateWithdraw = async ({recipient, amount, decimals, contract}) => { try { - return starknet_sendTransaction(contract, 'initiate_withdraw', { + return l2_sendTransaction(contract, 'initiate_withdraw', { l1Recipient: parseToFelt(recipient), amount: parseToUint256(amount, decimals) }); diff --git a/src/api/erc20.js b/src/api/erc20.js index 09d30610..9afe28e9 100644 --- a/src/api/erc20.js +++ b/src/api/erc20.js @@ -1,10 +1,10 @@ import {parseFromDecimals, parseFromUint256} from '../utils'; -import {eth_callContract, eth_sendTransaction, starknet_callContract} from '../utils/contract'; +import {l1_callContract, l1_sendTransaction, l2_callContract} from '../utils/contract'; import {web3} from '../web3'; export const approve = async ({spender, value, contract, options}) => { try { - return await eth_sendTransaction(contract, 'approve', [spender, value], options); + return await l1_sendTransaction(contract, 'approve', [spender, value], options); } catch (ex) { return Promise.reject(ex); } @@ -12,20 +12,20 @@ export const approve = async ({spender, value, contract, options}) => { export const allowance = async ({owner, spender, decimals, contract}) => { try { - const allow = await eth_callContract(contract, 'allowance', [owner, spender]); + const allow = await l1_callContract(contract, 'allowance', [owner, spender]); return parseFromDecimals(allow, decimals); } catch (ex) { return Promise.reject(ex); } }; -export const balanceOf = async ({account, decimals, contract}, isEthereum = true) => { +export const balanceOf = async ({account, decimals, contract}, isL1 = true) => { try { - if (isEthereum) { - const balance = await eth_callContract(contract, 'balanceOf', [account]); + if (isL1) { + const balance = await l1_callContract(contract, 'balanceOf', [account]); return parseFromDecimals(balance, decimals); } else { - const {balance} = await starknet_callContract(contract, 'balanceOf', [{account}]); + const {balance} = await l2_callContract(contract, 'balanceOf', [{account}]); return parseFromUint256(balance, decimals); } } catch (ex) { @@ -33,7 +33,7 @@ export const balanceOf = async ({account, decimals, contract}, isEthereum = true } }; -export const eth_ethBalanceOf = async account => { +export const l1_ethBalanceOf = async account => { try { const balance = await web3.eth.getBalance(account); return parseFromDecimals(balance); diff --git a/src/components/Containers/Header/Header.js b/src/components/Containers/Header/Header.js index 8f4711c1..db863b52 100644 --- a/src/components/Containers/Header/Header.js +++ b/src/components/Containers/Header/Header.js @@ -1,10 +1,10 @@ import React from 'react'; import {ReactComponent as StarkGateLogo} from '../../../assets/img/starkgate.svg'; -import {useEthereumWallet, useStarknetWallet, useWallets} from '../../../providers/WalletsProvider'; +import {useL1Wallet, useL2Wallet, useWallets} from '../../../providers/WalletsProvider'; import {toClasses} from '../../../utils'; import {useBridgeActions} from '../../Features/Bridge/Bridge.hooks'; -import {useIsEthereum, useIsStarknet} from '../../Features/Transfer/Transfer.hooks'; +import {useIsL1, useIsL2} from '../../Features/Transfer/Transfer.hooks'; import {WalletButton} from '../../UI'; import styles from './Header.module.scss'; import {CHAIN_TXT} from './Header.strings'; @@ -12,26 +12,18 @@ import {CHAIN_TXT} from './Header.strings'; export const Header = () => { const {chainName, isConnected} = useWallets(); const {showAccountMenu, showTransferMenu} = useBridgeActions(); - const [, setEthereum] = useIsEthereum(); - const [, setStarknet] = useIsStarknet(); - const { - account: ethereumAccount, - isConnected: isEthereumConnected, - config: ethereumConfig - } = useEthereumWallet(); - const { - account: starknetAccount, - isConnected: isStarknetConnected, - config: starknetConfig - } = useStarknetWallet(); + const [, swapToL1] = useIsL1(); + const [, swapToL2] = useIsL2(); + const {account: l1Account, isConnected: isL1AccountConnected, config: l1Config} = useL1Wallet(); + const {account: l2Account, isConnected: isL2AccountConnected, config: l2Config} = useL2Wallet(); - const onStarknetWalletButtonClick = () => { - setStarknet(); + const onL2WalletButtonClick = () => { + swapToL2(); showAccountMenu(); }; - const onEthereumWalletButtonClick = () => { - setEthereum(); + const onL1WalletButtonClick = () => { + swapToL1(); showAccountMenu(); }; @@ -51,18 +43,18 @@ export const Header = () => { </div> <div className={toClasses(styles.right, 'row')}> - {isEthereumConnected && ( + {isL1AccountConnected && ( <WalletButton - account={ethereumAccount} - logoPath={ethereumConfig?.logoPath} - onClick={onEthereumWalletButtonClick} + account={l1Account} + logoPath={l1Config?.logoPath} + onClick={onL1WalletButtonClick} /> )} - {isStarknetConnected && ( + {isL2AccountConnected && ( <WalletButton - account={starknetAccount} - logoPath={starknetConfig?.logoPath} - onClick={onStarknetWalletButtonClick} + account={l2Account} + logoPath={l2Config?.logoPath} + onClick={onL2WalletButtonClick} /> )} </div> diff --git a/src/components/Containers/Main/Main.js b/src/components/Containers/Main/Main.js index a8e3b20b..12993bf6 100644 --- a/src/components/Containers/Main/Main.js +++ b/src/components/Containers/Main/Main.js @@ -2,15 +2,15 @@ import React, {useEffect, useState} from 'react'; import {useVars, useWindowSize} from '../../../hooks'; import {TokensProvider} from '../../../providers/TokensProvider'; -import {useEthereumWallet, useStarknetWallet} from '../../../providers/WalletsProvider'; +import {useL1Wallet, useL2Wallet} from '../../../providers/WalletsProvider'; import {Bridge, Login} from '../../Features'; import styles from './Main.module.scss'; export const Main = () => { const windowSize = useWindowSize(); const {mainOffset} = useVars(); - const {isConnected: isEthereumConnected} = useEthereumWallet(); - const {isConnected: isStarknetConnected} = useStarknetWallet(); + const {isConnected: isL1Connected} = useL1Wallet(); + const {isConnected: isL2Connected} = useL2Wallet(); const [height, setHeight] = useState(null); useEffect(() => { @@ -19,7 +19,7 @@ export const Main = () => { return ( <main className={styles.main} style={{height}}> - {isEthereumConnected && isStarknetConnected ? ( + {isL1Connected && isL2Connected ? ( <TokensProvider> <Bridge /> </TokensProvider> diff --git a/src/components/Features/Account/Account.js b/src/components/Features/Account/Account.js index 21219be9..478ae45a 100644 --- a/src/components/Features/Account/Account.js +++ b/src/components/Features/Account/Account.js @@ -23,7 +23,7 @@ export const Account = () => { const {showTransferMenu} = useBridgeActions(); const {account, chainId, resetWallet} = useWallets(); const transfers = useAccountTransfers(account); - const {isEthereum, isStarknet, fromNetwork} = useTransferData(); + const {isL1, isL2, fromNetwork} = useTransferData(); const completeTransferToL1 = useCompleteTransferToL1(); const renderTransfers = () => { @@ -44,17 +44,17 @@ export const Account = () => { <BackButton onClick={showTransferMenu} /> <MenuTitle text={TITLE_TXT(fromNetwork.name)} /> <AccountAddress address={account} /> - {isEthereum && ( + {isL1 && ( <LinkButton text={LINKS.ETHERSCAN.text} url={LINKS.ETHERSCAN.accountUrl(chainId, account)} /> )} - {isStarknet && ( + {isL2 && ( <LinkButton text={LINKS.VOYAGER.text} url={LINKS.VOYAGER.accountUrl(chainId, account)} /> )} <TransferLogContainer>{renderTransfers()}</TransferLogContainer> - <LogoutButton isDisabled={isStarknet} onClick={resetWallet} /> + <LogoutButton isDisabled={isL2} onClick={resetWallet} /> </div> </Menu> ); diff --git a/src/components/Features/Login/Login.js b/src/components/Features/Login/Login.js index b771ef57..dc534fc7 100644 --- a/src/components/Features/Login/Login.js +++ b/src/components/Features/Login/Login.js @@ -3,7 +3,7 @@ import {ChainUnsupportedError} from 'use-wallet'; import {NetworkType, toChainName, WalletStatus, WalletType} from '../../../enums'; import {useConfig, useWalletHandlerProvider} from '../../../hooks'; -import {useEthereumWallet, useStarknetWallet, useWallets} from '../../../providers/WalletsProvider'; +import {useL1Wallet, useL2Wallet, useWallets} from '../../../providers/WalletsProvider'; import {capitalize, toClasses} from '../../../utils'; import {Menu, WalletLogin} from '../../UI'; import {useHideModal, useProgressModal} from '../ModalProvider/ModalProvider.hooks'; @@ -15,14 +15,14 @@ export const Login = () => { const {autoConnect} = useConfig(); const [selectedWalletName, setSelectedWalletName] = useState(''); const [errorMsg, setErrorMsg] = useState(''); - const [walletType, setWalletType] = useState(WalletType.ETHEREUM); + const [walletType, setWalletType] = useState(WalletType.L1); const modalTimeoutId = useRef(null); const hideModal = useHideModal(); const showProgressModal = useProgressModal(); const getWalletHandlers = useWalletHandlerProvider(); const {status, error} = useWallets(); - const {connectWallet: connectEthereumWallet, isConnected} = useEthereumWallet(); - const {connectWallet: connectStarknetWallet} = useStarknetWallet(); + const {connectWallet: connectL1Wallet, isConnected} = useL1Wallet(); + const {connectWallet: connectL2Wallet} = useL2Wallet(); useEffect(() => { let timeoutId; @@ -36,7 +36,7 @@ export const Login = () => { }, [walletType, getWalletHandlers]); useEffect(() => { - isConnected && setWalletType(WalletType.STARKNET); + isConnected && setWalletType(WalletType.L2); }, [isConnected]); useEffect(() => { @@ -69,9 +69,7 @@ export const Login = () => { } const {config} = walletHandler; setSelectedWalletName(config.name); - return walletType === WalletType.ETHEREUM - ? connectEthereumWallet(config) - : connectStarknetWallet(config); + return walletType === WalletType.L1 ? connectL1Wallet(config) : connectL2Wallet(config); }; const onDownloadClick = () => { @@ -129,11 +127,7 @@ export const Login = () => { <div className={styles.content}> <div className={styles.title}>{TITLE_TXT}</div> <p> - {SUBTITLE_TXT( - walletType === WalletType.ETHEREUM - ? NetworkType.ETHEREUM.name - : NetworkType.STARKNET.name - )} + {SUBTITLE_TXT(walletType === WalletType.L1 ? NetworkType.L1.name : NetworkType.L2.name)} </p> <div className={styles.container}>{renderLoginWallets()}</div> {errorMsg && <div className={styles.errorMsg}>{errorMsg}</div>} diff --git a/src/components/Features/SelectToken/SelectToken.js b/src/components/Features/SelectToken/SelectToken.js index e2b3e270..b1249d1b 100644 --- a/src/components/Features/SelectToken/SelectToken.js +++ b/src/components/Features/SelectToken/SelectToken.js @@ -1,7 +1,7 @@ import React, {useEffect, useState} from 'react'; -import EthereumLogo from '../../../assets/svg/tokens/eth.svg'; -import StarkNetLogo from '../../../assets/svg/tokens/starknet.svg'; +import L1Logo from '../../../assets/svg/tokens/eth.svg'; +import L2Logo from '../../../assets/svg/tokens/starknet.svg'; import {useColors} from '../../../hooks'; import {useTokens} from '../../../providers/TokensProvider'; import {BackButton, Menu, MenuTitle, SearchToken, SelectTokenList} from '../../UI'; @@ -14,7 +14,7 @@ export const SelectToken = () => { const {tokens} = useTokens(); const {colorBeta} = useColors(); const {showTransferMenu} = useBridgeActions(); - const {isEthereum, fromNetwork} = useTransferData(); + const {isL1, fromNetwork} = useTransferData(); const {selectToken} = useTransferActions(); const [searchTokens, setSearchTokens] = useState(tokens); @@ -42,7 +42,7 @@ export const SelectToken = () => { <div className={styles.background} style={{ - backgroundImage: `url(${isEthereum ? EthereumLogo : StarkNetLogo})` + backgroundImage: `url(${isL1 ? L1Logo : L2Logo})` }} /> </div> diff --git a/src/components/Features/ToastProvider/ToastProvider.js b/src/components/Features/ToastProvider/ToastProvider.js index bc079faa..4ecdea31 100644 --- a/src/components/Features/ToastProvider/ToastProvider.js +++ b/src/components/Features/ToastProvider/ToastProvider.js @@ -43,7 +43,7 @@ export const ToastProvider = () => { if (isChanged && isRejected(status)) { return showRejectedTransferToast(transfer); } - if (!transfer.eth_hash && type === ActionType.TRANSFER_FROM_STARKNET && isOnChain(status)) { + if (!transfer.l1hash && type === ActionType.TRANSFER_TO_L1 && isOnChain(status)) { return showWithdrawalToast(transfer); } }; @@ -131,9 +131,9 @@ export const TransferData = ({transfer, style}) => { <> <ToastBody body={ - transfer.type === ActionType.TRANSFER_TO_STARKNET - ? `${NetworkType.ETHEREUM.name} -> ${NetworkType.STARKNET.name}` - : `${NetworkType.STARKNET.name} -> ${NetworkType.ETHEREUM.name}` + transfer.type === ActionType.TRANSFER_TO_L2 + ? `${NetworkType.L1.name} -> ${NetworkType.L2.name}` + : `${NetworkType.L2.name} -> ${NetworkType.L1.name}` } style={style} /> diff --git a/src/components/Features/Transfer/Transfer.hooks.js b/src/components/Features/Transfer/Transfer.hooks.js index 38b2096b..ca624f7d 100644 --- a/src/components/Features/Transfer/Transfer.hooks.js +++ b/src/components/Features/Transfer/Transfer.hooks.js @@ -2,15 +2,15 @@ import {useCallback, useMemo} from 'react'; import {useDispatch, useSelector} from 'react-redux'; import {ActionType} from '../../../enums'; -import {useEthereumToken, useStarknetToken} from '../../../providers/TokensProvider'; +import {useL1Token, useL2Token} from '../../../providers/TokensProvider'; import { fromNetworkSelector, - fromStarknetSelector, + toL1Selector, getCurrentAmountSelector, selectSymbol, selectTransfer, toNetworkSelector, - toStarknetSelector + toL2Selector } from './Transfer.selectors'; import {resetAction, selectTokenAction, setAmountAction, setTransferAction} from './Transfer.slice'; @@ -25,8 +25,8 @@ export const useTransferData = () => { return { ...useSelector(selectTransfer), selectedToken: useSelectedToken(), - isEthereum: useSelector(toStarknetSelector), - isStarknet: useSelector(fromStarknetSelector), + isL1: useSelector(toL2Selector), + isL2: useSelector(toL1Selector), fromNetwork: useSelector(fromNetworkSelector), toNetwork: useSelector(toNetworkSelector) }; @@ -34,13 +34,10 @@ export const useTransferData = () => { export const useSelectedToken = () => { const symbol = useSelector(selectSymbol); - const isEthereum = useSelector(toStarknetSelector); - const ethereumToken = useEthereumToken()(symbol); - const starknetToken = useStarknetToken()(symbol); - return useMemo( - () => (isEthereum ? ethereumToken : starknetToken), - [symbol, isEthereum, ethereumToken, starknetToken] - ); + const isL1 = useSelector(toL2Selector); + const l1Token = useL1Token()(symbol); + const l2Token = useL2Token()(symbol); + return useMemo(() => (isL1 ? l1Token : l2Token), [symbol, isL1, l1Token, l2Token]); }; export const useAmount = () => { @@ -50,16 +47,16 @@ export const useAmount = () => { return [amount, setAmount, clearAmount]; }; -export const useIsEthereum = () => { - const isEthereum = useSelector(toStarknetSelector); - const setEthereum = useSetActionType(ActionType.TRANSFER_TO_STARKNET); - return [isEthereum, setEthereum]; +export const useIsL1 = () => { + const isL1 = useSelector(toL2Selector); + const swapToL1 = useSetActionType(ActionType.TRANSFER_TO_L2); + return [isL1, swapToL1]; }; -export const useIsStarknet = () => { - const isStarknet = useSelector(fromStarknetSelector); - const setStarknet = useSetActionType(ActionType.TRANSFER_FROM_STARKNET); - return [isStarknet, setStarknet]; +export const useIsL2 = () => { + const isL2 = useSelector(toL1Selector); + const swapToL2 = useSetActionType(ActionType.TRANSFER_TO_L1); + return [isL2, swapToL2]; }; const useSetAmount = () => { diff --git a/src/components/Features/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer.js index 88aab60b..b978e84f 100644 --- a/src/components/Features/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer.js @@ -2,7 +2,7 @@ import React, {useEffect, useState} from 'react'; import {ActionType, NetworkType} from '../../../enums'; import {useTransferToL1, useTransferToL2} from '../../../hooks'; -import {useEthereumToken, useStarknetToken, useTokens} from '../../../providers/TokensProvider'; +import {useL1Token, useL2Token, useTokens} from '../../../providers/TokensProvider'; import { Loading, Menu, @@ -14,19 +14,13 @@ import { } from '../../UI'; import {LoadingSize} from '../../UI/Loading/Loading.enums'; import {useBridgeActions} from '../Bridge/Bridge.hooks'; -import { - useAmount, - useIsEthereum, - useIsStarknet, - useTransferActions, - useTransferData -} from './Transfer.hooks'; +import {useAmount, useIsL1, useIsL2, useTransferActions, useTransferData} from './Transfer.hooks'; import styles from './Transfer.module.scss'; import {INSUFFICIENT_BALANCE_ERROR_MSG} from './Transfer.strings'; export const Transfer = () => { - const [isEthereum, setEthereum] = useIsEthereum(); - const [isStarknet, setStarknet] = useIsStarknet(); + const [isL1, swapToL1] = useIsL1(); + const [isL2, swapToL2] = useIsL2(); const [amount, setAmount] = useAmount(); const [hasInputError, setHasInputError] = useState(false); const [isButtonDisabled, setIsButtonDisabled] = useState(true); @@ -36,8 +30,8 @@ export const Transfer = () => { const transferToL2 = useTransferToL2(); const transferToL1 = useTransferToL1(); const {tokens} = useTokens(); - const getEthereumToken = useEthereumToken(); - const getStarknetToken = useStarknetToken(); + const getL1Token = useL1Token(); + const getL2Token = useL2Token(); useEffect(() => { if (!selectedToken) { @@ -70,10 +64,10 @@ export const Transfer = () => { }; const onSwapClick = () => { - isStarknet ? setEthereum() : setStarknet(); + isL2 ? swapToL1() : swapToL2(); }; - const onTransferClick = async () => (isEthereum ? transferToL2(amount) : transferToL1(amount)); + const onTransferClick = async () => (isL1 ? transferToL2(amount) : transferToL1(amount)); const renderTabs = () => { return Object.values(ActionType).map((tab, index) => { @@ -81,31 +75,27 @@ export const Transfer = () => { <TransferMenuTab key={index} isActive={action === tab} - text={ - tab === ActionType.TRANSFER_TO_STARKNET - ? NetworkType.ETHEREUM.name - : NetworkType.STARKNET.name - } + text={tab === ActionType.TRANSFER_TO_L2 ? NetworkType.L1.name : NetworkType.L2.name} onClick={() => action !== tab && onSwapClick()} /> ); }); }; - const renderEthereumNetwork = () => { - const tokenData = getEthereumToken(selectedToken.symbol); + const renderL1Network = () => { + const tokenData = getL1Token(selectedToken.symbol); return ( - <NetworkMenu isTarget={!isEthereum} networkData={NetworkType.ETHEREUM} tokenData={tokenData}> - {isEthereum && renderTransferInput()} + <NetworkMenu isTarget={!isL1} networkData={NetworkType.L1} tokenData={tokenData}> + {isL1 && renderTransferInput()} </NetworkMenu> ); }; - const renderStarknetNetwork = () => { - const tokenData = getStarknetToken(selectedToken.symbol); + const renderL2Network = () => { + const tokenData = getL2Token(selectedToken.symbol); return ( - <NetworkMenu isTarget={!isStarknet} networkData={NetworkType.STARKNET} tokenData={tokenData}> - {isStarknet && renderTransferInput()} + <NetworkMenu isTarget={!isL2} networkData={NetworkType.L2} tokenData={tokenData}> + {isL2 && renderTransferInput()} </NetworkMenu> ); }; @@ -138,9 +128,9 @@ export const Transfer = () => { )} {selectedToken && ( <> - {isEthereum ? renderEthereumNetwork() : renderStarknetNetwork()} - <NetworkSwap isFlipped={isStarknet} onClick={onSwapClick} /> - {isEthereum ? renderStarknetNetwork() : renderEthereumNetwork()} + {isL1 ? renderL1Network() : renderL2Network()} + <NetworkSwap isFlipped={isL2} onClick={onSwapClick} /> + {isL1 ? renderL2Network() : renderL1Network()} </> )} </div> diff --git a/src/components/Features/Transfer/Transfer.selectors.js b/src/components/Features/Transfer/Transfer.selectors.js index 1f493dd1..636267f2 100644 --- a/src/components/Features/Transfer/Transfer.selectors.js +++ b/src/components/Features/Transfer/Transfer.selectors.js @@ -12,28 +12,28 @@ export const selectWithdrawAmount = state => state.transfer.withdrawAmount; export const selectDepositAmount = state => state.transfer.depositAmount; -export const toStarknetSelector = createSelector( +export const toL2Selector = createSelector( selectTransferAction, - action => action === ActionType.TRANSFER_TO_STARKNET + action => action === ActionType.TRANSFER_TO_L2 ); -export const fromStarknetSelector = createSelector( +export const toL1Selector = createSelector( selectTransferAction, - action => action === ActionType.TRANSFER_FROM_STARKNET + action => action === ActionType.TRANSFER_TO_L1 ); export const fromNetworkSelector = createSelector(selectTransferAction, action => - action === ActionType.TRANSFER_TO_STARKNET ? NetworkType.ETHEREUM : NetworkType.STARKNET + action === ActionType.TRANSFER_TO_L2 ? NetworkType.L1 : NetworkType.L2 ); export const toNetworkSelector = createSelector(selectTransferAction, action => - action === ActionType.TRANSFER_TO_STARKNET ? NetworkType.STARKNET : NetworkType.ETHEREUM + action === ActionType.TRANSFER_TO_L2 ? NetworkType.L2 : NetworkType.L1 ); export const getCurrentAmountSelector = createSelector( [selectTransferAction, selectDepositAmount, selectWithdrawAmount], (action, depositAmount, withdrawAmount) => { - if (action === ActionType.TRANSFER_TO_STARKNET) { + if (action === ActionType.TRANSFER_TO_L2) { return depositAmount; } return withdrawAmount; diff --git a/src/components/Features/Transfer/Transfer.slice.js b/src/components/Features/Transfer/Transfer.slice.js index 18a1b930..c2cecf5a 100644 --- a/src/components/Features/Transfer/Transfer.slice.js +++ b/src/components/Features/Transfer/Transfer.slice.js @@ -3,7 +3,7 @@ import {createSlice} from '@reduxjs/toolkit'; import {ActionType} from '../../../enums'; const initialState = { - action: ActionType.TRANSFER_TO_STARKNET, + action: ActionType.TRANSFER_TO_L2, symbol: '', depositAmount: '', withdrawAmount: '' @@ -20,7 +20,7 @@ const transferSlice = createSlice({ state.symbol = action.payload; }, setAmountAction(state, action) { - if (state.action === ActionType.TRANSFER_TO_STARKNET) { + if (state.action === ActionType.TRANSFER_TO_L2) { state.depositAmount = action.payload; } else { state.withdrawAmount = action.payload; diff --git a/src/components/Features/TransferLog/TransferLog.js b/src/components/Features/TransferLog/TransferLog.js index 01b5c778..fe79ceb4 100644 --- a/src/components/Features/TransferLog/TransferLog.js +++ b/src/components/Features/TransferLog/TransferLog.js @@ -20,9 +20,9 @@ import styles from './TransferLog.module.scss'; import {WITHDRAWAL_BTN_TXT} from './TransferLog.strings'; export const TransferLog = ({transfer, onWithdrawClick}) => { - const {symbol, timestamp, name, amount, status, eth_hash, starknet_hash} = transfer; + const {symbol, timestamp, name, amount, status, l1hash, l2hash} = transfer; const [sign, setSign] = useState(''); - const {action, isEthereum} = useTransferData(); + const {action, isL1} = useTransferData(); const {chainId} = useWallets(); useEffect(() => { @@ -37,25 +37,25 @@ export const TransferLog = ({transfer, onWithdrawClick}) => { ) : null; }; - const renderEthereumTxButton = () => { - return !eth_hash && isEthereum && isOnChain(status) ? ( + const renderL1TxButton = () => { + return !l1hash && isL1 && isOnChain(status) ? ( <WithdrawalButton onClick={onWithdrawClick} /> ) : ( <LinkButton - isDisabled={!eth_hash} - text={`${NetworkType.ETHEREUM.name} Tx`} - url={LINKS.ETHERSCAN.txUrl(chainId, eth_hash)} + isDisabled={!l1hash} + text={`${NetworkType.L1.name} Tx`} + url={LINKS.ETHERSCAN.txUrl(chainId, l1hash)} /> ); }; - const renderStarknetTxButton = () => { + const renderL2TxButton = () => { return ( <> <LinkButton isDisabled={isPending(status)} - text={`${NetworkType.STARKNET.name} Tx`} - url={LINKS.VOYAGER.txUrl(chainId, starknet_hash)} + text={`${NetworkType.L2.name} Tx`} + url={LINKS.VOYAGER.txUrl(chainId, l2hash)} /> </> ); @@ -77,8 +77,8 @@ export const TransferLog = ({transfer, onWithdrawClick}) => { </div> {renderTransferStatus()} <div className={styles.links}> - {renderEthereumTxButton()} - {renderStarknetTxButton()} + {renderL1TxButton()} + {renderL2TxButton()} </div> </div> </div> diff --git a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js index d1d5e382..51e9e325 100644 --- a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js +++ b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js @@ -2,7 +2,7 @@ import PropTypes from 'prop-types'; import React, {useEffect, useState} from 'react'; import {ReactComponent as EtherscanLogo} from '../../../../assets/svg/etherscan.svg'; -import {ReactComponent as StarknetLogo} from '../../../../assets/svg/tokens/starknet.svg'; +import {ReactComponent as L2Logo} from '../../../../assets/svg/tokens/starknet.svg'; import {LINKS} from '../../../../constants'; import {ActionType} from '../../../../enums'; import {useColors} from '../../../../hooks'; @@ -23,14 +23,14 @@ const TransactionSubmittedModal = ({transfer}) => { const [networkData, setNetworkData] = useState({}); useEffect(() => { - const {type, starknet_hash, eth_hash} = transfer; - const isCompletedWithdrawal = eth_hash && starknet_hash; - if (type === ActionType.TRANSFER_TO_STARKNET || isCompletedWithdrawal) { + const {type, l2hash, l1hash} = transfer; + const isCompletedWithdrawal = l1hash && l2hash; + if (type === ActionType.TRANSFER_TO_L2 || isCompletedWithdrawal) { setNetworkData({ - message: type === ActionType.TRANSFER_TO_STARKNET ? DEPOSIT_TXT : COMPLETE_WITHDRAWAL_TXT, - showStatusMsg: type === ActionType.TRANSFER_TO_STARKNET, + message: type === ActionType.TRANSFER_TO_L2 ? DEPOSIT_TXT : COMPLETE_WITHDRAWAL_TXT, + showStatusMsg: type === ActionType.TRANSFER_TO_L2, explorerName: LINKS.ETHERSCAN.text, - explorerUrl: LINKS.ETHERSCAN.txUrl(chainId, eth_hash), + explorerUrl: LINKS.ETHERSCAN.txUrl(chainId, l1hash), explorerLogo: <EtherscanLogo style={{margin: 'auto'}} /> }); } else { @@ -38,8 +38,8 @@ const TransactionSubmittedModal = ({transfer}) => { message: WITHDRAWAL_TXT, showStatusMsg: true, explorerName: LINKS.VOYAGER.text, - explorerUrl: LINKS.VOYAGER.txUrl(chainId, starknet_hash), - explorerLogo: <StarknetLogo style={{margin: 'auto'}} /> + explorerUrl: LINKS.VOYAGER.txUrl(chainId, l2hash), + explorerLogo: <L2Logo style={{margin: 'auto'}} /> }); } }, []); diff --git a/src/components/UI/Toast/WithdrawalTransferToast/WithdrawalTransferToast.js b/src/components/UI/Toast/WithdrawalTransferToast/WithdrawalTransferToast.js index 0e2a88d6..924c2a41 100644 --- a/src/components/UI/Toast/WithdrawalTransferToast/WithdrawalTransferToast.js +++ b/src/components/UI/Toast/WithdrawalTransferToast/WithdrawalTransferToast.js @@ -2,7 +2,7 @@ import {Transition} from '@headlessui/react'; import PropTypes from 'prop-types'; import React from 'react'; -import {ReactComponent as EthereumLogo} from '../../../../assets/svg/tokens/eth.svg'; +import {ReactComponent as L1Logo} from '../../../../assets/svg/tokens/eth.svg'; import {useColors} from '../../../../hooks'; import {TransferData} from '../../../Features'; import {ToastBody} from '../ToastBody/ToastBody'; @@ -33,7 +33,7 @@ export const WithdrawalTransferToast = ({t, transfer, onDismiss, onWithdrawal, o <div className={styles.withdrawalTransferToast}> <div className={styles.container}> <div className={styles.left}> - <EthereumLogo style={{opacity: 0.5}} /> + <L1Logo style={{opacity: 0.5}} /> </div> <div className={styles.right}> <ToastHeader title={TITLE_TXT} withClose={true} onClose={onClose} /> diff --git a/src/config/addresses/contracts/contracts.ethereum.js b/src/config/addresses/contracts/contracts.l1.js similarity index 100% rename from src/config/addresses/contracts/contracts.ethereum.js rename to src/config/addresses/contracts/contracts.l1.js diff --git a/src/config/addresses/index.js b/src/config/addresses/index.js index f4205e90..79d935c7 100644 --- a/src/config/addresses/index.js +++ b/src/config/addresses/index.js @@ -1,3 +1,3 @@ -export * from './contracts/contracts.ethereum'; -export * from './tokens/tokens.ethereum'; -export * from './tokens/tokens.starknet'; +export * from './contracts/contracts.l1'; +export * from './tokens/tokens.l1'; +export * from './tokens/tokens.l2'; diff --git a/src/config/addresses/tokens/tokens.ethereum.js b/src/config/addresses/tokens/tokens.l1.js similarity index 94% rename from src/config/addresses/tokens/tokens.ethereum.js rename to src/config/addresses/tokens/tokens.l1.js index 1929fd01..5a579ab7 100644 --- a/src/config/addresses/tokens/tokens.ethereum.js +++ b/src/config/addresses/tokens/tokens.l1.js @@ -1,9 +1,9 @@ import {ChainType, NetworkType} from '../../../enums'; -export const EthereumTokens = [ +export const L1Tokens = [ { - name: NetworkType.ETHEREUM.tokenName, - symbol: NetworkType.ETHEREUM.symbol, + name: NetworkType.L1.tokenName, + symbol: NetworkType.L1.symbol, decimals: 18, bridgeAddress: { [ChainType.MAIN.id]: '', diff --git a/src/config/addresses/tokens/tokens.starknet.js b/src/config/addresses/tokens/tokens.l2.js similarity index 95% rename from src/config/addresses/tokens/tokens.starknet.js rename to src/config/addresses/tokens/tokens.l2.js index ec6d8dfa..e357c35f 100644 --- a/src/config/addresses/tokens/tokens.starknet.js +++ b/src/config/addresses/tokens/tokens.l2.js @@ -1,9 +1,9 @@ import {ChainType, NetworkType} from '../../../enums'; -export const StarknetTokens = [ +export const L2Tokens = [ { - name: NetworkType.ETHEREUM.tokenName, - symbol: NetworkType.ETHEREUM.symbol, + name: NetworkType.L1.tokenName, + symbol: NetworkType.L1.symbol, decimals: 18, bridgeAddress: { [ChainType.MAIN.id]: '', diff --git a/src/config/strings.json b/src/config/strings.json index dbdddcfc..eea2cf4d 100644 --- a/src/config/strings.json +++ b/src/config/strings.json @@ -48,9 +48,9 @@ "transactionSubmitted": { "title_txt": "Transaction sent", "btn_txt": "View on {{explorer}}", - "withdrawal_txt": "Your transaction is now being processing on StarkNet. When it will be accepted on-chain, we will promote you to complete your transfer.", - "complete_withdrawal_txt": "Your transaction is completed on Ethereum!", - "deposit_txt": "Your transaction has been sent to StarkNet!", + "withdrawal_txt": "Your transaction is now being processing on L2. When it will be accepted on-chain, we will promote you to complete your transfer.", + "complete_withdrawal_txt": "Your transaction is completed on L1!", + "deposit_txt": "Your transaction has been sent to L2!", "status_txt": "Follow the transaction status on the right side of the browser." }, "transferProgress": { @@ -60,19 +60,19 @@ }, "deposit": { "type": "Transfer in progress", - "message": "Transferring {{amount}} {{symbol}} to StarkNet..." + "message": "Transferring {{amount}} {{symbol}} to L2..." }, "initiateWithdraw": { "type": "Initiate transfer", - "message": "Initiating transfer of {{amount}} {{symbol}} from StarkNet..." + "message": "Initiating transfer of {{amount}} {{symbol}} from L2..." }, "waitForAccept": { "type": "Transaction sent", - "message": "Waiting for transaction to be accepted on StarkNet..." + "message": "Waiting for transaction to be accepted on L2..." }, "withdraw": { "type": "Transfer in progress", - "message": "Transferring {{amount}} {{symbol}} to Ethereum..." + "message": "Transferring {{amount}} {{symbol}} to L1..." }, "waitForConfirm": { "type": "{{walletName}}", @@ -84,13 +84,13 @@ }, "toasts": { "pendingTransfer": { - "pending_txt": "Waiting for transaction to be accepted on StarkNet", - "consumed_txt": "Transaction accepted on StarkNet", - "rejected_txt": "Transaction rejected on StarkNet" + "pending_txt": "Waiting for transaction to be accepted on L2", + "consumed_txt": "Transaction accepted on L2", + "rejected_txt": "Transaction rejected on L2" }, "withdrawalTransfer": { - "title_txt": "StarkNet finished processing your transfer!", - "body_txt": "Click on Complete Transfer to transfer the funds from StarkNet Bridge to your Ethereum address.", + "title_txt": "L2 finished processing your transfer!", + "body_txt": "Click on Complete Transfer to transfer the funds from L2 Bridge to your L1 address.", "dismiss_btn_txt": "Dismiss", "withdrawal_btn_txt": "Complete Transfer" } diff --git a/src/config/wallets.js b/src/config/wallets.js index 4eac68c2..b7889711 100644 --- a/src/config/wallets.js +++ b/src/config/wallets.js @@ -5,14 +5,14 @@ export default [ id: 'metamask', name: 'MetaMask', connectorId: 'injected', - type: WalletType.ETHEREUM, + type: WalletType.L1, description: 'Login using a browser wallet', logoPath: 'wallets/metamask/logo.svg' }, { id: 'argent', name: 'Argent X', - type: WalletType.STARKNET, + type: WalletType.L2, description: 'Login using a browser wallet', logoPath: 'wallets/argent/logo.svg' } diff --git a/src/constants.js b/src/constants.js index d341d096..7f8c6f50 100644 --- a/src/constants.js +++ b/src/constants.js @@ -1,8 +1,8 @@ import {byChainId} from './enums'; import {evaluate} from './utils'; -export const LOCAL_STORAGE_TRANSFERS_KEY = 'STARKNET_BRIDGE_TRANSFERS'; -export const STARKNET_INVOKE_TX_PREFIX = '115923154332517'; +export const LOCAL_STORAGE_TRANSFERS_KEY = 'STARKGATE_TRANSFERS'; +export const L2_INVOKE_TX_PREFIX = '115923154332517'; export const ETHERSCAN_URL = 'etherscan.io'; export const VOYAGER_URL = 'voyager.online'; export const LINKS = { @@ -23,12 +23,12 @@ export const LINKS = { text: 'voyager', txUrl: (chainId, hash) => evaluate('{{url}}/tx/{{hash}}', { - url: byChainId(chainId).starknetBlockExplorerUrl, + url: byChainId(chainId).l2BlockExplorerUrl, hash }), accountUrl: (chainId, account) => evaluate('{{url}}/contract/{{account}}', { - url: byChainId(chainId).starknetBlockExplorerUrl, + url: byChainId(chainId).l2BlockExplorerUrl, account }) } diff --git a/src/enums/ActionType.js b/src/enums/ActionType.js index 363f8a67..6e5f31aa 100644 --- a/src/enums/ActionType.js +++ b/src/enums/ActionType.js @@ -1,4 +1,4 @@ export const ActionType = { - TRANSFER_TO_STARKNET: 1, - TRANSFER_FROM_STARKNET: 2 + TRANSFER_TO_L2: 1, + TRANSFER_TO_L1: 2 }; diff --git a/src/enums/ChainType.js b/src/enums/ChainType.js index 43301f7f..c7df6276 100644 --- a/src/enums/ChainType.js +++ b/src/enums/ChainType.js @@ -5,17 +5,17 @@ export const ChainType = { id: 1, name: 'main', blockExplorerUrl: `https://${ETHERSCAN_URL}`, - starknetId: 'SN_MAIN', - starknetIdPrefix: '23448594291968334', - starknetBlockExplorerUrl: `https://${VOYAGER_URL}` + l2Id: 'SN_MAIN', + l2IdPrefix: '23448594291968334', + l2BlockExplorerUrl: `https://${VOYAGER_URL}` }, GOERLI: { id: 5, name: 'goerli', blockExplorerUrl: `https://goerli.${ETHERSCAN_URL}`, - starknetId: 'SN_GOERLI', - starknetIdPrefix: '1536727068981429685321', - starknetBlockExplorerUrl: `https://goerli.${VOYAGER_URL}` + l2Id: 'SN_GOERLI', + l2IdPrefix: '1536727068981429685321', + l2BlockExplorerUrl: `https://goerli.${VOYAGER_URL}` } }; diff --git a/src/enums/NetworkType.js b/src/enums/NetworkType.js index 3d6ce357..2868d82a 100644 --- a/src/enums/NetworkType.js +++ b/src/enums/NetworkType.js @@ -1,10 +1,10 @@ export const NetworkType = { - ETHEREUM: { + L1: { name: 'Ethereum', tokenName: 'Ether', symbol: 'ETH' }, - STARKNET: { + L2: { name: 'StarkNet', symbol: 'STARKNET' } diff --git a/src/enums/WalletType.js b/src/enums/WalletType.js index b60b12b7..32de2873 100644 --- a/src/enums/WalletType.js +++ b/src/enums/WalletType.js @@ -1,4 +1,4 @@ export const WalletType = { - ETHEREUM: 'ethereum', - STARKNET: 'starknet' + L1: 'ethereum', + L2: 'starknet' }; diff --git a/src/hooks/useContract.js b/src/hooks/useContract.js index c02d898d..2dfdc547 100644 --- a/src/hooks/useContract.js +++ b/src/hooks/useContract.js @@ -1,29 +1,15 @@ import {useCallback, useMemo} from 'react'; -import {ERC20_ABI, ERC20_BRIDGE_ABI, ETH_BRIDGE_ABI, MESSAGING_ABI} from '../abis/ethereum'; -import {STARKNET_BRIDGE_ABI, STARKNET_ERC20_ABI} from '../abis/starknet'; +import {L1_ERC20_ABI, L1_ERC20_BRIDGE_ABI, L1_ETH_BRIDGE_ABI, L1_MESSAGING_ABI} from '../abis/l1'; +import {L2_BRIDGE_ABI, L2_ERC20_ABI} from '../abis/l2'; import {useTransferData} from '../components/Features/Transfer/Transfer.hooks'; import {MESSAGING_CONTRACT_ADDRESS} from '../config/addresses'; import {NetworkType} from '../enums'; -import {useEthereumToken} from '../providers/TokensProvider'; -import {useEthereumWallet, useWallets} from '../providers/WalletsProvider'; -import {eth_getContract, starknet_getContract} from '../utils/contract'; +import {useL1Token} from '../providers/TokensProvider'; +import {useL1Wallet, useWallets} from '../providers/WalletsProvider'; +import {l1_getContract, l2_getContract} from '../utils/contract'; -export const useContracts = (ABI, getContractHandler = eth_getContract) => { - const getContract = useContract(ABI, getContractHandler); - return useCallback( - tokensAddresses => - tokensAddresses.map(tokenAddresses => { - if (tokenAddresses) { - return getContract(tokenAddresses); - } - return null; - }), - [ABI, getContract] - ); -}; - -export const useContract = (ABI, getContractHandler = eth_getContract) => { +export const useContract = (ABI, getContractHandler = l1_getContract) => { const {chainId} = useWallets(); return useCallback( addresses => { @@ -40,62 +26,52 @@ export const useContract = (ABI, getContractHandler = eth_getContract) => { }; export const useTokenContract = () => { - const getTokenContract = useEthereumTokenContract(); - const getStarknetTokenContract = useStarknetTokenContract(); - const {isEthereum} = useTransferData(); + const getL1TokenContract = useL1TokenContract(); + const getL2TokenContract = useL2TokenContract(); + const {isL1} = useTransferData(); return useCallback( tokenAddresses => - isEthereum ? getTokenContract(tokenAddresses) : getStarknetTokenContract(tokenAddresses), - [isEthereum, getStarknetTokenContract, getTokenContract] + isL1 ? getL1TokenContract(tokenAddresses) : getL2TokenContract(tokenAddresses), + [isL1, getL2TokenContract, getL1TokenContract] ); }; export const useTokenBridgeContract = () => { - const getTokenBridgeContract = useEthereumTokenBridgeContract(); - const getStarknetTokenBridgeContract = useStarknetTokenBridgeContract(); - const {isEthereum} = useTransferData(); + const getL1TokenBridgeContract = useL1TokenBridgeContract(); + const getL2TokenBridgeContract = useL2TokenBridgeContract(); + const {isL1} = useTransferData(); return useCallback( bridgeAddress => - isEthereum - ? getTokenBridgeContract(bridgeAddress) - : getStarknetTokenBridgeContract(bridgeAddress), - [isEthereum, getTokenBridgeContract, getStarknetTokenBridgeContract] + isL1 ? getL1TokenBridgeContract(bridgeAddress) : getL2TokenBridgeContract(bridgeAddress), + [isL1, getL1TokenBridgeContract, getL2TokenBridgeContract] ); }; -export const useStarknetTokenContract = () => { - const getContract = useContract(STARKNET_ERC20_ABI, starknet_getContract); - return useCallback(tokenAddresses => getContract(tokenAddresses), [getContract]); -}; -export const useStarknetTokenContracts = () => { - const getContracts = useContracts(STARKNET_ERC20_ABI, starknet_getContract); - return useCallback(tokensAddresses => getContracts(tokensAddresses), [getContracts]); -}; -export const useEthereumTokenContract = () => { - const getContract = useContract(ERC20_ABI); +export const useL2TokenContract = () => { + const getContract = useContract(L2_ERC20_ABI, l2_getContract); return useCallback(tokenAddresses => getContract(tokenAddresses), [getContract]); }; -export const useEthereumTokenContracts = () => { - const getContracts = useContracts(ERC20_ABI); - return useCallback(tokensAddresses => getContracts(tokensAddresses), [getContracts]); +export const useL1TokenContract = () => { + const getContract = useContract(L1_ERC20_ABI); + return useCallback(tokenAddresses => getContract(tokenAddresses), [getContract]); }; export const useMessagingContract = () => { - const getContract = useContract(MESSAGING_ABI); + const getContract = useContract(L1_MESSAGING_ABI); return useMemo(() => getContract(MESSAGING_CONTRACT_ADDRESS), [getContract]); }; -export const useStarknetTokenBridgeContract = () => { - const getContract = useContract(STARKNET_BRIDGE_ABI, starknet_getContract); +export const useL2TokenBridgeContract = () => { + const getContract = useContract(L2_BRIDGE_ABI, l2_getContract); return useCallback(bridgeAddress => getContract(bridgeAddress), [getContract]); }; -export const useEthereumTokenBridgeContract = () => { - const getTokenBridgeContract = useContract(ERC20_BRIDGE_ABI); - const getEthBridgeContract = useContract(ETH_BRIDGE_ABI); - const ethToken = useEthereumToken()(NetworkType.ETHEREUM.symbol); - const {chainId} = useEthereumWallet(); +export const useL1TokenBridgeContract = () => { + const getTokenBridgeContract = useContract(L1_ERC20_BRIDGE_ABI); + const getEthBridgeContract = useContract(L1_ETH_BRIDGE_ABI); + const ethToken = useL1Token()(NetworkType.L1.symbol); + const {chainId} = useL1Wallet(); return useCallback( bridgeAddress => bridgeAddress[chainId] === ethToken.bridgeAddress[chainId] diff --git a/src/hooks/useEventListener.js b/src/hooks/useEventListener.js index ef4eff52..fb82fa1b 100644 --- a/src/hooks/useEventListener.js +++ b/src/hooks/useEventListener.js @@ -2,8 +2,8 @@ import {useCallback} from 'react'; import {stark} from 'starknet'; import {useSelectedToken} from '../components/Features/Transfer/Transfer.hooks'; -import {useEthereumToken, useStarknetToken} from '../providers/TokensProvider'; -import {useEthereumWallet, useStarknetWallet} from '../providers/WalletsProvider'; +import {useL1Token, useL2Token} from '../providers/TokensProvider'; +import {useL1Wallet, useL2Wallet} from '../providers/WalletsProvider'; import {txHash} from '../utils'; import {useMessagingContract, useTokenBridgeContract} from './useContract'; import {useLogger} from './useLogger'; @@ -13,17 +13,17 @@ const HOOK_MODULE = 'useEventListener'; export const useLogMessageToL2Listener = () => { const logger = useLogger(`${HOOK_MODULE}:useLogMessageToL2Listener`); const selectedToken = useSelectedToken(); - const getEthereumToken = useEthereumToken(); - const getStarknetToken = useStarknetToken(); + const getL1Token = useL1Token(); + const getL2Token = useL2Token(); const messagingContract = useMessagingContract(); const addEventListener = useEventListener(); - const {chainId} = useEthereumWallet(); + const {chainId} = useL1Wallet(); return useCallback(async () => { logger.log('Registering to LogMessageToL2 event'); const {symbol} = selectedToken; - const snBridgeAddress = getStarknetToken(symbol).bridgeAddress[chainId]; - const ethBridgeAddress = getEthereumToken(symbol).bridgeAddress[chainId]; + const snBridgeAddress = getL2Token(symbol).bridgeAddress[chainId]; + const ethBridgeAddress = getL1Token(symbol).bridgeAddress[chainId]; try { const event = await addEventListener(messagingContract, 'LogMessageToL2', { filter: { @@ -39,15 +39,7 @@ export const useLogMessageToL2Listener = () => { logger.error('Event error', {ex}); return Promise.reject(ex.message); } - }, [ - addEventListener, - chainId, - getEthereumToken, - getStarknetToken, - logger, - messagingContract, - selectedToken - ]); + }, [addEventListener, chainId, getL1Token, getL2Token, logger, messagingContract, selectedToken]); }; export const useLogDepositListener = () => { @@ -55,8 +47,8 @@ export const useLogDepositListener = () => { const selectedToken = useSelectedToken(); const getTokenBridgeContract = useTokenBridgeContract(); const addEventListener = useEventListener(); - const {account: ethereumAccount} = useEthereumWallet(); - const {account: starknetAccount} = useStarknetWallet(); + const {account: l1Account} = useL1Wallet(); + const {account: l2Account} = useL2Wallet(); return useCallback(async () => { logger.log('Registering to LogDeposit event'); @@ -65,8 +57,8 @@ export const useLogDepositListener = () => { try { const event = await addEventListener(contract, 'LogDeposit', { filter: { - l2Recipient: starknetAccount, - sender: ethereumAccount + l2Recipient: l2Account, + sender: l1Account } }); logger.log('Event received', {event}); @@ -75,14 +67,7 @@ export const useLogDepositListener = () => { logger.error('Event error', {ex}); return Promise.reject(ex.message); } - }, [ - addEventListener, - ethereumAccount, - starknetAccount, - getTokenBridgeContract, - logger, - selectedToken - ]); + }, [addEventListener, l1Account, l2Account, getTokenBridgeContract, logger, selectedToken]); }; export const useEventListener = () => { diff --git a/src/hooks/useTokenBalance.js b/src/hooks/useTokenBalance.js index 8dabc9d9..2eb5d359 100644 --- a/src/hooks/useTokenBalance.js +++ b/src/hooks/useTokenBalance.js @@ -1,24 +1,22 @@ import {useCallback} from 'react'; -import {balanceOf, eth_ethBalanceOf} from '../api/erc20'; +import {balanceOf, l1_ethBalanceOf} from '../api/erc20'; import {useTransferData} from '../components/Features/Transfer/Transfer.hooks'; -import {useEthereumTokenContract, useStarknetTokenContract} from './useContract'; +import {useL1TokenContract, useL2TokenContract} from './useContract'; export const useTokenBalance = account => { - const getStarknetTokenBalance = useStarknetTokenBalance(account); - const getEthereumTokenBalance = useEthereumTokenBalance(account); - const {isEthereum} = useTransferData(); + const getL2TokenBalance = useL2TokenBalance(account); + const getL1TokenBalance = useL1TokenBalance(account); + const {isL1} = useTransferData(); return useCallback( tokenAddresses => - isEthereum - ? getEthereumTokenBalance(tokenAddresses) - : getStarknetTokenBalance(tokenAddresses), - [isEthereum, account, getEthereumTokenBalance, getStarknetTokenBalance] + isL1 ? getL1TokenBalance(tokenAddresses) : getL2TokenBalance(tokenAddresses), + [isL1, account, getL1TokenBalance, getL2TokenBalance] ); }; -export const useStarknetTokenBalance = account => { - const getContract = useStarknetTokenContract(); +export const useL2TokenBalance = account => { + const getContract = useL2TokenContract(); return useCallback( async tokenAddresses => await balanceOf({account, contract: getContract(tokenAddresses)}, false), @@ -26,13 +24,13 @@ export const useStarknetTokenBalance = account => { ); }; -export const useEthereumTokenBalance = account => { - const getContract = useEthereumTokenContract(); +export const useL1TokenBalance = account => { + const getContract = useL1TokenContract(); return useCallback( async tokenAddresses => tokenAddresses ? await balanceOf({account, contract: getContract(tokenAddresses)}, true) - : await eth_ethBalanceOf(account), + : await l1_ethBalanceOf(account), [account, getContract] ); }; diff --git a/src/hooks/useTransfer.js b/src/hooks/useTransfer.js index 45e37daa..b06e4658 100644 --- a/src/hooks/useTransfer.js +++ b/src/hooks/useTransfer.js @@ -11,16 +11,12 @@ import { } from '../components/Features/ModalProvider/ModalProvider.hooks'; import {useAmount, useSelectedToken} from '../components/Features/Transfer/Transfer.hooks'; import {ActionType, TransactionStatus} from '../enums'; -import {useEthereumToken, useTokens} from '../providers/TokensProvider'; +import {useL1Token, useTokens} from '../providers/TokensProvider'; import {useTransfers} from '../providers/TransfersProvider'; -import {useEthereumWallet, useStarknetWallet} from '../providers/WalletsProvider'; +import {useL1Wallet, useL2Wallet} from '../providers/WalletsProvider'; import {isEth} from '../utils'; -import {starknet_waitForTransaction} from '../utils/contract'; -import { - useEthereumTokenBridgeContract, - useTokenBridgeContract, - useTokenContract -} from './useContract'; +import {l2_waitForTransaction} from '../utils/contract'; +import {useL1TokenBridgeContract, useTokenBridgeContract, useTokenContract} from './useContract'; import {useLogDepositListener, useLogMessageToL2Listener} from './useEventListener'; import {useLogger} from './useLogger'; import {useTransferProgress} from './useTransferProgress'; @@ -29,8 +25,8 @@ const HOOK_MODULE = 'useTransfer'; export const useTransferToL2 = () => { const logger = useLogger(`${HOOK_MODULE}:useTransferToL2`); - const {account: ethereumAccount, chainId, config: ethereumConfig} = useEthereumWallet(); - const {account: starknetAccount} = useStarknetWallet(); + const {account: l1Account, chainId, config: l1Config} = useL1Wallet(); + const {account: l2Account} = useL2Wallet(); const {handleProgress, handleData, handleError} = useTransfer(); const selectedToken = useSelectedToken(); const getTokenContract = useTokenContract(); @@ -53,7 +49,7 @@ export const useTransferToL2 = () => { const tokenContract = getTokenContract(tokenAddress); handleProgress(progressOptions.approval(symbol)); const allow = await allowance({ - owner: ethereumAccount, + owner: l1Account, spender: bridgeAddress[chainId], decimals, contract: tokenContract @@ -65,19 +61,19 @@ export const useTransferToL2 = () => { spender: bridgeAddress[chainId], value: constants.MASK_250, contract: tokenContract, - options: {from: ethereumAccount} + options: {from: l1Account} }); } } - handleProgress(progressOptions.waitForConfirm(ethereumConfig.name)); + handleProgress(progressOptions.waitForConfirm(l1Config.name)); const logMessageToL2EventPromise = addLogMessageToL2Listener(); logger.log('Calling deposit'); const depositPromise = await depositHandler({ - recipient: starknetAccount, + recipient: l2Account, amount, decimals, contract: bridgeContract, - options: {from: ethereumAccount}, + options: {from: l1Account}, emitter: (error, transactionHash) => { if (!error) { logger.log('Tx hash received', {transactionHash}); @@ -91,14 +87,14 @@ export const useTransferToL2 = () => { ]); logger.log('Done', {l1hash, l2hash}); handleData({ - type: ActionType.TRANSFER_TO_STARKNET, - sender: ethereumAccount, - recipient: starknetAccount, + type: ActionType.TRANSFER_TO_L2, + sender: l1Account, + recipient: l2Account, name, symbol, amount, - eth_hash: l1hash, - starknet_hash: l2hash + l1hash, + l2hash }); } catch (ex) { logger.error(ex.message, {ex}); @@ -110,8 +106,8 @@ export const useTransferToL2 = () => { addLogDepositListener, addLogMessageToL2Listener, chainId, - ethereumAccount, - ethereumConfig, + l1Account, + l1Config, getTokenBridgeContract, getTokenContract, handleData, @@ -119,15 +115,15 @@ export const useTransferToL2 = () => { handleProgress, logger, progressOptions, - starknetAccount + l2Account ] ); }; export const useTransferToL1 = () => { const logger = useLogger(`${HOOK_MODULE}:useTransferToL1`); - const {account: ethereumAccount} = useEthereumWallet(); - const {account: starknetAccount, config: starknetConfig} = useStarknetWallet(); + const {account: l1Account} = useL1Wallet(); + const {account: l2Account, config: l2Config} = useL2Wallet(); const selectedToken = useSelectedToken(); const getTokenBridgeContract = useTokenBridgeContract(); const {handleProgress, handleData, handleError} = useTransfer(); @@ -140,10 +136,10 @@ export const useTransferToL1 = () => { const {decimals, bridgeAddress, name, symbol} = selectedToken; const bridgeContract = getTokenBridgeContract(bridgeAddress); logger.log('Prepared contract', {bridgeContract}); - handleProgress(progressOptions.waitForConfirm(starknetConfig.name)); + handleProgress(progressOptions.waitForConfirm(l2Config.name)); logger.log('Calling initiate withdraw'); const {transaction_hash} = await initiateWithdraw({ - recipient: ethereumAccount, + recipient: l1Account, amount, decimals, contract: bridgeContract @@ -151,19 +147,19 @@ export const useTransferToL1 = () => { logger.log('Tx hash received', {transaction_hash}); handleProgress(progressOptions.initiateWithdraw(amount, symbol)); logger.log('Waiting for tx to be received on L2'); - await starknet_waitForTransaction(transaction_hash, TransactionStatus.RECEIVED); + await l2_waitForTransaction(transaction_hash, TransactionStatus.RECEIVED); handleProgress(progressOptions.waitForAccept()); logger.log('Waiting for tx to be accepted on L2'); - await starknet_waitForTransaction(transaction_hash); + await l2_waitForTransaction(transaction_hash); logger.log('Done', {transaction_hash}); handleData({ - type: ActionType.TRANSFER_FROM_STARKNET, - sender: starknetAccount, - recipient: ethereumAccount, + type: ActionType.TRANSFER_TO_L1, + sender: l2Account, + recipient: l1Account, name, symbol, amount, - starknet_hash: transaction_hash + l2hash: transaction_hash }); } catch (ex) { logger.error(ex.message, {ex}); @@ -171,7 +167,7 @@ export const useTransferToL1 = () => { } }, [ - ethereumAccount, + l1Account, getTokenBridgeContract, handleData, handleError, @@ -179,33 +175,33 @@ export const useTransferToL1 = () => { logger, progressOptions, selectedToken, - starknetAccount, - starknetConfig + l2Account, + l2Config ] ); }; export const useCompleteTransferToL1 = () => { const logger = useLogger(`${HOOK_MODULE}:useCompleteTransferToL1`); - const {account: ethereumAccount, config: ethereumConfig} = useEthereumWallet(); + const {account: l1Account, config: l1Config} = useL1Wallet(); const {handleProgress, handleData, handleError} = useTransfer(); const progressOptions = useTransferProgress(); - const getEthereumToken = useEthereumToken(); - const getEthereumTokenBridgeContract = useEthereumTokenBridgeContract(); + const getL1Token = useL1Token(); + const getL1TokenBridgeContract = useL1TokenBridgeContract(); return useCallback( async transfer => { try { logger.log('CompleteTransferToL1 called'); const {symbol, amount} = transfer; - const ethereumToken = getEthereumToken(symbol); - const {bridgeAddress, decimals} = ethereumToken; - const tokenBridgeContract = getEthereumTokenBridgeContract(bridgeAddress); - logger.log('Prepared token and bridge contract', {ethereumToken, tokenBridgeContract}); - handleProgress(progressOptions.waitForConfirm(ethereumConfig.name)); + const l1Token = getL1Token(symbol); + const {bridgeAddress, decimals} = l1Token; + const tokenBridgeContract = getL1TokenBridgeContract(bridgeAddress); + logger.log('Prepared token and bridge contract', {l1Token, tokenBridgeContract}); + handleProgress(progressOptions.waitForConfirm(l1Config.name)); logger.log('Calling withdraw'); const {transactionHash} = await withdraw({ - recipient: ethereumAccount, + recipient: l1Account, amount, decimals, contract: tokenBridgeContract, @@ -217,17 +213,17 @@ export const useCompleteTransferToL1 = () => { } }); logger.log('Done', {transactionHash}); - handleData({...transfer, eth_hash: transactionHash}); + handleData({...transfer, l1hash: transactionHash}); } catch (ex) { logger.error(ex.message, {ex}); handleError(progressOptions.error(ex)); } }, [ - ethereumAccount, - ethereumConfig, - getEthereumToken, - getEthereumTokenBridgeContract, + l1Account, + l1Config, + getL1Token, + getL1TokenBridgeContract, handleData, handleError, handleProgress, diff --git a/src/providers/TokensProvider/TokensProvider.js b/src/providers/TokensProvider/TokensProvider.js index 845ae88f..5dc595a1 100644 --- a/src/providers/TokensProvider/TokensProvider.js +++ b/src/providers/TokensProvider/TokensProvider.js @@ -2,8 +2,8 @@ import PropTypes from 'prop-types'; import React, {useEffect, useReducer} from 'react'; import {useLogger, useConfig} from '../../hooks'; -import {useEthereumTokenBalance, useStarknetTokenBalance} from '../../hooks/useTokenBalance'; -import {useEthereumWallet, useStarknetWallet} from '../WalletsProvider'; +import {useL1TokenBalance, useL2TokenBalance} from '../../hooks/useTokenBalance'; +import {useL1Wallet, useL2Wallet} from '../WalletsProvider'; import {TokensContext} from './tokens-context'; import {actions, initialState, reducer} from './tokens-reducer'; @@ -11,10 +11,10 @@ export const TokensProvider = ({children}) => { const {pollBalanceInterval} = useConfig(); const logger = useLogger(TokensProvider.displayName); const [tokens, dispatch] = useReducer(reducer, initialState); - const {account: ethereumAccount} = useEthereumWallet(); - const {account: starknetAccount} = useStarknetWallet(); - const getEthereumTokenBalance = useEthereumTokenBalance(ethereumAccount); - const getStarknetTokenBalance = useStarknetTokenBalance(starknetAccount); + const {account: l1Account} = useL1Wallet(); + const {account: l2Account} = useL2Wallet(); + const getL1TokenBalance = useL1TokenBalance(l1Account); + const getL2TokenBalance = useL2TokenBalance(l2Account); useEffect(() => { updateTokens(); @@ -38,7 +38,7 @@ export const TokensProvider = ({children}) => { } else { logger.log(`Token already have a balance of ${token.balance}, don't set isLoading prop`); } - const getBalance = token.isEthereum ? getEthereumTokenBalance : getStarknetTokenBalance; + const getBalance = token.isL1 ? getL1TokenBalance : getL2TokenBalance; getBalance(token.tokenAddress) .then(balance => { logger.log(`New ${token.symbol} token balance is ${balance}`); diff --git a/src/providers/TokensProvider/tokens-hooks.js b/src/providers/TokensProvider/tokens-hooks.js index d1a19f43..b772ee76 100644 --- a/src/providers/TokensProvider/tokens-hooks.js +++ b/src/providers/TokensProvider/tokens-hooks.js @@ -4,39 +4,35 @@ import {useTransferData} from '../../components/Features/Transfer/Transfer.hooks import {TokensContext} from './tokens-context'; export const useTokens = () => { - const {isEthereum} = useTransferData(); - const starknetTokens = useStarknetTokens(); - const ethereumTokens = useEthereumTokens(); + const {isL1} = useTransferData(); + const l2Tokens = useL2Tokens(); + const l1Tokens = useL1Tokens(); const {updateTokens} = useContext(TokensContext); - const [tokens, setTokens] = useState(isEthereum ? ethereumTokens : starknetTokens); + const [tokens, setTokens] = useState(isL1 ? l1Tokens : l2Tokens); + useEffect(() => { - setTokens(isEthereum ? ethereumTokens : starknetTokens); - }, [isEthereum, starknetTokens, ethereumTokens]); + setTokens(isL1 ? l1Tokens : l2Tokens); + }, [isL1, l2Tokens, l1Tokens]); + return {tokens, updateTokens}; }; -export const useStarknetTokens = () => { +export const useL2Tokens = () => { const {tokens} = useContext(TokensContext); - return useMemo(() => tokens.filter(t => t.isStarknet), [tokens]); + return useMemo(() => tokens.filter(t => t.isL2), [tokens]); }; -export const useEthereumTokens = () => { +export const useL1Tokens = () => { const {tokens} = useContext(TokensContext); - return useMemo(() => tokens.filter(t => t.isEthereum), [tokens]); + return useMemo(() => tokens.filter(t => t.isL1), [tokens]); }; -export const useStarknetToken = () => { - const starknetTokens = useStarknetTokens(); - return useCallback( - symbol => starknetTokens.find(token => token.symbol === symbol), - [starknetTokens] - ); +export const useL2Token = () => { + const l2Tokens = useL2Tokens(); + return useCallback(symbol => l2Tokens.find(token => token.symbol === symbol), [l2Tokens]); }; -export const useEthereumToken = () => { - const ethereumTokens = useEthereumTokens(); - return useCallback( - symbol => ethereumTokens.find(token => token.symbol === symbol), - [ethereumTokens] - ); +export const useL1Token = () => { + const l1Tokens = useL1Tokens(); + return useCallback(symbol => l1Tokens.find(token => token.symbol === symbol), [l1Tokens]); }; diff --git a/src/providers/TokensProvider/tokens-reducer.js b/src/providers/TokensProvider/tokens-reducer.js index 59c06943..0d66ee43 100644 --- a/src/providers/TokensProvider/tokens-reducer.js +++ b/src/providers/TokensProvider/tokens-reducer.js @@ -1,12 +1,12 @@ -import {EthereumTokens, StarknetTokens} from '../../config/addresses'; +import {L1Tokens, L2Tokens} from '../../config/addresses'; export const actions = { UPDATE_TOKEN_STATE: 'Tokens/UPDATE_TOKEN_STATE' }; -const ethereumTokens = EthereumTokens.map(t => ({...t, isEthereum: true})); -const starknetTokens = StarknetTokens.map(t => ({...t, isStarknet: true})); -export const initialState = [...ethereumTokens, ...starknetTokens]; +const l1Tokens = L1Tokens.map(t => ({...t, isL1: true})); +const l2Tokens = L2Tokens.map(t => ({...t, isL2: true})); +export const initialState = [...l1Tokens, ...l2Tokens]; export const reducer = (state, action) => { switch (action.type) { diff --git a/src/providers/TransfersProvider/TransfersProvider.js b/src/providers/TransfersProvider/TransfersProvider.js index 736d33a2..20bac27e 100644 --- a/src/providers/TransfersProvider/TransfersProvider.js +++ b/src/providers/TransfersProvider/TransfersProvider.js @@ -37,10 +37,8 @@ export const TransfersProvider = ({children}) => { return transfer; } try { - logger.log(`Checking tx status ${transfer.starknet_hash}`); - const newStatus = await getStarknet().provider.getTransactionStatus( - transfer.starknet_hash - ); + logger.log(`Checking tx status ${transfer.l2hash}`); + const newStatus = await getStarknet().provider.getTransactionStatus(transfer.l2hash); if (transfer.status !== newStatus.tx_status) { logger.log( !transfer.status @@ -54,7 +52,7 @@ export const TransfersProvider = ({children}) => { lastChecked: blockHash }; } catch (error) { - logger.error(`Failed to check transaction status: ${transfer.starknet_hash}`); + logger.error(`Failed to check transaction status: ${transfer.l2hash}`); } return transfer; }; diff --git a/src/providers/WalletsProvider/WalletsProvider.js b/src/providers/WalletsProvider/WalletsProvider.js index 6de60825..8428ddb8 100644 --- a/src/providers/WalletsProvider/WalletsProvider.js +++ b/src/providers/WalletsProvider/WalletsProvider.js @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import React, {useEffect, useReducer} from 'react'; import {useWallet} from 'use-wallet'; -import {useIsEthereum, useIsStarknet} from '../../components/Features/Transfer/Transfer.hooks'; +import {useIsL1, useIsL2} from '../../components/Features/Transfer/Transfer.hooks'; import {WalletStatus} from '../../enums'; import {useConfig} from '../../hooks'; import {web3} from '../../web3'; @@ -14,69 +14,69 @@ export const WalletsProvider = ({children}) => { const {autoConnect} = useConfig(); const [state, dispatch] = useReducer(reducer, initialState); const {status, connect, reset, isConnected, error, account, chainId, networkName} = useWallet(); - const {selectedAddress, isConnected: isStarknetConnected, enable} = getStarknet(); - const [isEthereum, setEthereum] = useIsEthereum(); - const [isStarknet, setStarknet] = useIsStarknet(); + const {selectedAddress, isConnected: isL2Connected, enable} = getStarknet(); + const [isL1, swapToL1] = useIsL1(); + const [isL2, swapToL2] = useIsL2(); // Handles starknet wallet changes useEffect(() => { - (isStarknet || state.starknetWallet.config) && maybeUpdateStarknetWallet(); - }, [selectedAddress, isStarknetConnected]); + (isL2 || state.l2Wallet.config) && maybeUpdateL2Wallet(); + }, [selectedAddress, isL2Connected]); // Handles ethereum wallet changes useEffect(() => { - (isEthereum || state.ethereumWallet.config) && maybeUpdateEthereumWallet(); + (isL1 || state.l1Wallet.config) && maybeUpdateL1Wallet(); }, [status, error, account, chainId, networkName]); const connectWallet = async walletConfig => { - if (isEthereum) { - return connectEthereumWallet(walletConfig); + if (isL1) { + return connectL1Wallet(walletConfig); } - return connectStarknetWallet(walletConfig); + return connectL2Wallet(walletConfig); }; - const connectEthereumWallet = async walletConfig => { + const connectL1Wallet = async walletConfig => { const {connectorId} = walletConfig; await connect(connectorId); - setEthereumWalletConfig(walletConfig); + setL1WalletConfig(walletConfig); }; - const connectStarknetWallet = async walletConfig => { + const connectL2Wallet = async walletConfig => { await getStarknet(!autoConnect && {showModal: true}).enable(); - setStarknetWalletConfig(walletConfig); + setL2WalletConfig(walletConfig); }; const resetWallet = () => { - if (isEthereum) { - return resetEthereumWallet(); + if (isL1) { + return resetL1Wallet(); } - return resetStarknetWallet(); + return resetL2Wallet(); }; - const resetEthereumWallet = () => { - setEthereumWalletConfig(null); + const resetL1Wallet = () => { + setL1WalletConfig(null); return reset(); }; - const resetStarknetWallet = () => { - setStarknetWalletConfig(null); + const resetL2Wallet = () => { + setL2WalletConfig(null); return null; }; const swapWallets = async () => { - if (state.ethereumWallet.config && !state.starknetWallet.config) { - setEthereum(); - maybeUpdateEthereumWallet(); - } else if (state.starknetWallet.config && !state.ethereumWallet.config) { - setStarknet(); - await maybeUpdateStarknetWallet(); + if (state.l1Wallet.config && !state.l2Wallet.config) { + swapToL1(); + maybeUpdateL1Wallet(); + } else if (state.l2Wallet.config && !state.l1Wallet.config) { + swapToL2(); + await maybeUpdateL2Wallet(); } }; - const maybeUpdateEthereumWallet = () => { + const maybeUpdateL1Wallet = () => { // To support serializable object in the store let serialError = error ? {...error} : null; - updateEthereumWallet({ + updateL1Wallet({ account, status, chainId, @@ -87,7 +87,7 @@ export const WalletsProvider = ({children}) => { }); }; - const maybeUpdateStarknetWallet = async () => { + const maybeUpdateL2Wallet = async () => { let status, error = null; try { @@ -97,11 +97,11 @@ export const WalletsProvider = ({children}) => { error = ex; status = WalletStatus.ERROR; } finally { - updateStarknetWallet({ + updateL2Wallet({ status, chainId, error, - isConnected: isStarknetConnected, + isConnected: isL2Connected, account: selectedAddress, chainName: networkName, library: getStarknet() @@ -110,30 +110,30 @@ export const WalletsProvider = ({children}) => { }; // Dispatchers - const updateEthereumWallet = payload => { + const updateL1Wallet = payload => { dispatch({ - type: actions.UPDATE_ETHEREUM_WALLET, + type: actions.UPDATE_L1_WALLET, payload }); }; - const updateStarknetWallet = payload => { + const updateL2Wallet = payload => { dispatch({ - type: actions.UPDATE_STARKNET_WALLET, + type: actions.UPDATE_L2_WALLET, payload }); }; - const setEthereumWalletConfig = payload => { + const setL1WalletConfig = payload => { dispatch({ - type: actions.SET_ETHEREUM_WALLET_CONFIG, + type: actions.SET_L1_WALLET_CONFIG, payload }); }; - const setStarknetWalletConfig = payload => { + const setL2WalletConfig = payload => { dispatch({ - type: actions.SET_STARKNET_WALLET_CONFIG, + type: actions.SET_L2_WALLET_CONFIG, payload }); }; @@ -142,11 +142,11 @@ export const WalletsProvider = ({children}) => { const context = { ...state, connectWallet, - connectEthereumWallet, - connectStarknetWallet, + connectL1Wallet, + connectL2Wallet, resetWallet, - resetEthereumWallet, - resetStarknetWallet, + resetL1Wallet, + resetL2Wallet, swapWallets }; diff --git a/src/providers/WalletsProvider/wallets-context.js b/src/providers/WalletsProvider/wallets-context.js index 1d4f7f16..78896b0c 100644 --- a/src/providers/WalletsProvider/wallets-context.js +++ b/src/providers/WalletsProvider/wallets-context.js @@ -4,11 +4,11 @@ import {initialState} from './wallets-reducer'; export const WalletsContext = createContext({ ...initialState, - connectEthereumWallet: () => {}, - connectStarknetWallet: () => {}, + connectL1Wallet: () => {}, + connectL2Wallet: () => {}, connectWallet: () => {}, resetWallet: () => {}, - resetEthereumWallet: () => {}, - resetStarknetWallet: () => {}, + resetL1Wallet: () => {}, + resetL2Wallet: () => {}, swapWallets: () => {} }); diff --git a/src/providers/WalletsProvider/wallets-hooks.js b/src/providers/WalletsProvider/wallets-hooks.js index e9f76285..9718c995 100644 --- a/src/providers/WalletsProvider/wallets-hooks.js +++ b/src/providers/WalletsProvider/wallets-hooks.js @@ -5,16 +5,16 @@ import {WalletsContext} from './wallets-context'; export const useWallets = () => { const wallets = useContext(WalletsContext); - const [activeWallet, setActiveWallet] = useState(wallets.ethereumWallet); - const {isEthereum} = useTransferData(); + const [activeWallet, setActiveWallet] = useState(wallets.l1Wallet); + const {isL1} = useTransferData(); const connectWallet = useCallback(walletConfig => wallets.connectWallet(walletConfig), []); const resetWallet = useCallback(() => wallets.resetWallet(), []); const swapWallets = useCallback(() => wallets.swapWallets(), []); useEffect(() => { - setActiveWallet(isEthereum ? wallets.ethereumWallet : wallets.starknetWallet); - }, [isEthereum, wallets]); + setActiveWallet(isL1 ? wallets.l1Wallet : wallets.l2Wallet); + }, [isL1, wallets]); return { ...activeWallet, @@ -24,28 +24,22 @@ export const useWallets = () => { }; }; -export const useEthereumWallet = () => { +export const useL1Wallet = () => { const wallets = useContext(WalletsContext); - const connectWallet = useCallback( - walletConfig => wallets.connectEthereumWallet(walletConfig), - [] - ); + const connectWallet = useCallback(walletConfig => wallets.connectL1Wallet(walletConfig), []); return { connectWallet, - ...wallets.ethereumWallet + ...wallets.l1Wallet }; }; -export const useStarknetWallet = () => { +export const useL2Wallet = () => { const wallets = useContext(WalletsContext); - const connectWallet = useCallback( - walletConfig => wallets.connectStarknetWallet(walletConfig), - [] - ); + const connectWallet = useCallback(walletConfig => wallets.connectL2Wallet(walletConfig), []); return { connectWallet, - ...wallets.starknetWallet + ...wallets.l2Wallet }; }; diff --git a/src/providers/WalletsProvider/wallets-reducer.js b/src/providers/WalletsProvider/wallets-reducer.js index 43ecc6d7..2d2902a5 100644 --- a/src/providers/WalletsProvider/wallets-reducer.js +++ b/src/providers/WalletsProvider/wallets-reducer.js @@ -1,10 +1,10 @@ import {WalletStatus} from '../../enums'; export const actions = { - UPDATE_ETHEREUM_WALLET: 'CombineWallets/UPDATE_ETHEREUM_WALLET', - UPDATE_STARKNET_WALLET: 'CombineWallets/UPDATE_STARKNET_WALLET', - SET_ETHEREUM_WALLET_CONFIG: 'CombineWallets/SET_ETHEREUM_WALLET_CONFIG', - SET_STARKNET_WALLET_CONFIG: 'CombineWallets/SET_STARKNET_WALLET_CONFIG' + UPDATE_L1_WALLET: 'Wallets/UPDATE_L1_WALLET', + UPDATE_L2_WALLET: 'Wallets/UPDATE_L2_WALLET', + SET_L1_WALLET_CONFIG: 'Wallets/SET_L1_WALLET_CONFIG', + SET_L2_WALLET_CONFIG: 'Wallets/SET_L2_WALLET_CONFIG' }; const initialWalletState = { @@ -19,42 +19,42 @@ const initialWalletState = { }; export const initialState = { - ethereumWallet: { + l1Wallet: { ...initialWalletState }, - starknetWallet: { + l2Wallet: { ...initialWalletState } }; export const reducer = (state, action) => { switch (action.type) { - case actions.UPDATE_ETHEREUM_WALLET: + case actions.UPDATE_L1_WALLET: return { ...state, - ethereumWallet: {...state.ethereumWallet, ...action.payload} + l1Wallet: {...state.l1Wallet, ...action.payload} }; - case actions.UPDATE_STARKNET_WALLET: + case actions.UPDATE_L2_WALLET: return { ...state, - starknetWallet: {...state.starknetWallet, ...action.payload} + l2Wallet: {...state.l2Wallet, ...action.payload} }; - case actions.SET_ETHEREUM_WALLET_CONFIG: + case actions.SET_L1_WALLET_CONFIG: return { ...state, - ethereumWallet: { - ...state.ethereumWallet, + l1Wallet: { + ...state.l1Wallet, config: action.payload } }; - case actions.SET_STARKNET_WALLET_CONFIG: + case actions.SET_L2_WALLET_CONFIG: return { ...state, - starknetWallet: { - ...state.starknetWallet, + l2Wallet: { + ...state.l2Wallet, config: action.payload } }; diff --git a/src/utils/contract.js b/src/utils/contract.js index 45b44517..f06f22d7 100644 --- a/src/utils/contract.js +++ b/src/utils/contract.js @@ -5,9 +5,9 @@ import {TransactionConsumedStatuses} from '../enums'; import {getLogger} from '../services'; import {web3} from '../web3'; -export const eth_getContract = (address, ABI) => new web3.eth.Contract(ABI, address); +export const l1_getContract = (address, ABI) => new web3.eth.Contract(ABI, address); -export const eth_callContract = async (contract, method, args = []) => { +export const l1_callContract = async (contract, method, args = []) => { try { return await contract.methods?.[method](...args).call(); } catch (ex) { @@ -15,7 +15,7 @@ export const eth_callContract = async (contract, method, args = []) => { } }; -export const eth_sendTransaction = async ( +export const l1_sendTransaction = async ( contract, method, args = [], @@ -29,14 +29,9 @@ export const eth_sendTransaction = async ( } }; -export const eth_listenOnce = async (contract, event, callback) => { - contract.once(event, null, (error, event) => callback(error, event)); -}; - -export const starknet_getContract = (address, ABI) => - new Contract(ABI, address, getStarknet().provider); +export const l2_getContract = (address, ABI) => new Contract(ABI, address, getStarknet().provider); -export const starknet_callContract = async (contract, method, args = []) => { +export const l2_callContract = async (contract, method, args = []) => { try { return await contract.call(method, ...args); } catch (ex) { @@ -44,7 +39,7 @@ export const starknet_callContract = async (contract, method, args = []) => { } }; -export const starknet_sendTransaction = async (contract, method, args = {}) => { +export const l2_sendTransaction = async (contract, method, args = {}) => { try { const methodSelector = stark.getSelectorFromName(method); const compiledCalldata = compileCalldata(args); @@ -58,8 +53,8 @@ export const starknet_sendTransaction = async (contract, method, args = {}) => { } }; -export const starknet_waitForTransaction = async (hash, customStatus, retryInterval = 5000) => { - const logger = getLogger('starknet_waitForTransaction'); +export const l2_waitForTransaction = async (hash, customStatus, retryInterval = 5000) => { + const logger = getLogger('l2_waitForTransaction'); return new Promise(resolve => { let processing = false; const waitingForStatuses = customStatus ? [customStatus] : TransactionConsumedStatuses; diff --git a/src/utils/hash.js b/src/utils/hash.js index 377c26ec..cae90d11 100644 --- a/src/utils/hash.js +++ b/src/utils/hash.js @@ -1,18 +1,18 @@ import {hash, number} from 'starknet'; -import {STARKNET_INVOKE_TX_PREFIX} from '../constants'; +import {L2_INVOKE_TX_PREFIX} from '../constants'; import {byChainId} from '../enums'; export const txHash = (fromAddress, toAddress, selector, payload, chainId) => { const calldata = [number.hexToDecimalString(fromAddress), ...payload]; const calldataHash = hash.hashCalldata(calldata); - const {starknetIdPrefix} = byChainId(chainId); + const {l2IdPrefix} = byChainId(chainId); return hash.computeHashOnElements([ - STARKNET_INVOKE_TX_PREFIX, + L2_INVOKE_TX_PREFIX, toAddress, selector, calldataHash, - starknetIdPrefix + l2IdPrefix ]); }; diff --git a/src/utils/token.js b/src/utils/token.js index 3718e981..bf82c3d0 100644 --- a/src/utils/token.js +++ b/src/utils/token.js @@ -8,5 +8,5 @@ export const isEth = tokenData => { } else if (typeof tokenData === 'string') { symbol = tokenData; } - return symbol === NetworkType.ETHEREUM.symbol; + return symbol === NetworkType.L1.symbol; }; From c4d672ec3044ac05f41eef74d479920d6b28c36c Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Wed, 12 Jan 2022 19:58:09 +0000 Subject: [PATCH 064/211] chore(release): 0.0.1-13 [skip ci] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6b6cf5a6..d21c27bd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "0.0.1-12", + "version": "0.0.1-13", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From ef6b8c178cf2fe7d6b4dd889ec83b2578df51dcd Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Mon, 17 Jan 2022 10:26:56 +0200 Subject: [PATCH 065/211] chore: testing env build (#63) --- .env.test => .env.testing | 0 package.json | 2 ++ src/components/Features/Login/Login.js | 15 +++++++++------ src/hooks/useTransfer.js | 4 +--- yarn.lock | 10 +++++++++- 5 files changed, 21 insertions(+), 10 deletions(-) rename .env.test => .env.testing (100%) diff --git a/.env.test b/.env.testing similarity index 100% rename from .env.test rename to .env.testing diff --git a/package.json b/package.json index d21c27bd..1f990b60 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "clean": "rm -rf ./dist", "prebuild": "npm run clean", "build": "react-scripts build", + "build:testing": "env-cmd -f .env.testing npm run build", "start": "ESLINT_NO_DEV_ERRORS=true react-scripts start", "test": "react-scripts test", "eject": "react-scripts eject", @@ -64,6 +65,7 @@ "devDependencies": { "@babel/plugin-proposal-class-properties": "^7.16.0", "@trivago/prettier-plugin-sort-imports": "^2.0.4", + "env-cmd": "^10.1.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^3.4.0", "eslint-plugin-react-hooks": "^4.3.0", diff --git a/src/components/Features/Login/Login.js b/src/components/Features/Login/Login.js index dc534fc7..0430fedb 100644 --- a/src/components/Features/Login/Login.js +++ b/src/components/Features/Login/Login.js @@ -1,5 +1,4 @@ import React, {useEffect, useRef, useState} from 'react'; -import {ChainUnsupportedError} from 'use-wallet'; import {NetworkType, toChainName, WalletStatus, WalletType} from '../../../enums'; import {useConfig, useWalletHandlerProvider} from '../../../hooks'; @@ -80,11 +79,15 @@ export const Login = () => { }; const handleError = error => { - if (error.name === ChainUnsupportedError.name) { - const msg = error.message.replace( - /\d+/g, - match => `${match} (${capitalize(toChainName(Number(match)))})` - ); + if (error.name === 'ChainUnsupportedError') { + const msg = error.message.replace(/\d+/g, match => { + let msg = match; + const chainName = capitalize(toChainName(Number(match))); + if (chainName) { + msg += ` (${capitalize(toChainName(Number(match)))})`; + } + return msg; + }); setErrorMsg(msg); } }; diff --git a/src/hooks/useTransfer.js b/src/hooks/useTransfer.js index b06e4658..93a07320 100644 --- a/src/hooks/useTransfer.js +++ b/src/hooks/useTransfer.js @@ -17,7 +17,7 @@ import {useL1Wallet, useL2Wallet} from '../providers/WalletsProvider'; import {isEth} from '../utils'; import {l2_waitForTransaction} from '../utils/contract'; import {useL1TokenBridgeContract, useTokenBridgeContract, useTokenContract} from './useContract'; -import {useLogDepositListener, useLogMessageToL2Listener} from './useEventListener'; +import {useLogMessageToL2Listener} from './useEventListener'; import {useLogger} from './useLogger'; import {useTransferProgress} from './useTransferProgress'; @@ -32,7 +32,6 @@ export const useTransferToL2 = () => { const getTokenContract = useTokenContract(); const getTokenBridgeContract = useTokenBridgeContract(); const progressOptions = useTransferProgress(); - const addLogDepositListener = useLogDepositListener(); const addLogMessageToL2Listener = useLogMessageToL2Listener(); return useCallback( @@ -103,7 +102,6 @@ export const useTransferToL2 = () => { }, [ selectedToken, - addLogDepositListener, addLogMessageToL2Listener, chainId, l1Account, diff --git a/yarn.lock b/yarn.lock index c7b47687..93183859 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5385,7 +5385,7 @@ commander@^2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^4.1.1: +commander@^4.0.0, commander@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== @@ -6748,6 +6748,14 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== +env-cmd@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/env-cmd/-/env-cmd-10.1.0.tgz#c7f5d3b550c9519f137fdac4dd8fb6866a8c8c4b" + integrity sha512-mMdWTT9XKN7yNth/6N6g2GuKuJTsKMDHlQFUDacb/heQRRWOTIZ42t1rMHnQu4jYxU1ajdTeJM+9eEETlqToMA== + dependencies: + commander "^4.0.0" + cross-spawn "^7.0.0" + env-paths@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" From dd99a809543232fe3894dca4dbbdd3fcee8c715c Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Mon, 17 Jan 2022 08:28:24 +0000 Subject: [PATCH 066/211] chore(release): 0.0.1-14 [skip ci] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1f990b60..7a82ba36 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "0.0.1-13", + "version": "0.0.1-14", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From aeefa5544d174eefc9991ecc6ba15ca55f71b9e9 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 18 Jan 2022 09:46:49 +0200 Subject: [PATCH 067/211] feat(transfer to L2): max amount (#62) --- package.json | 1 + src/api/bridge.js | 13 ++++++-- .../Features/Transfer/Transfer.hooks.js | 1 + src/components/Features/Transfer/Transfer.js | 27 ++++++++++++----- .../Features/Transfer/Transfer.strings.js | 5 +++- src/config/strings.json | 1 + src/hooks/index.js | 1 + src/hooks/useMaxAmount.js | 30 +++++++++++++++++++ yarn.lock | 5 ++++ 9 files changed, 73 insertions(+), 11 deletions(-) create mode 100644 src/hooks/useMaxAmount.js diff --git a/package.json b/package.json index 7a82ba36..4ba0830b 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,7 @@ "react-redux": "^7.2.6", "react-scripts": "4.0.3", "starknet": "^2.5.0", + "use-async-memo": "^1.2.3", "use-deep-compare-effect": "^1.8.1", "use-wallet": "^0.13.4", "uuid": "^8.3.2", diff --git a/src/api/bridge.js b/src/api/bridge.js index ff52bfc0..7b038543 100644 --- a/src/api/bridge.js +++ b/src/api/bridge.js @@ -1,5 +1,5 @@ -import {parseToDecimals, parseToFelt, parseToUint256} from '../utils'; -import {l1_sendTransaction, l2_sendTransaction} from '../utils/contract'; +import {parseFromDecimals, parseToDecimals, parseToFelt, parseToUint256} from '../utils'; +import {l1_callContract, l1_sendTransaction, l2_sendTransaction} from '../utils/contract'; export const deposit = async ({recipient, amount, decimals, contract, options, emitter}) => { try { @@ -48,6 +48,15 @@ export const withdraw = async ({recipient, amount, decimals, contract, emitter}) } }; +export const maxDeposit = async ({decimals, contract}) => { + try { + const maxDeposit = await l1_callContract(contract, 'maxDeposit'); + return parseFromDecimals(maxDeposit, decimals); + } catch (ex) { + return Promise.reject(ex); + } +}; + export const initiateWithdraw = async ({recipient, amount, decimals, contract}) => { try { return l2_sendTransaction(contract, 'initiate_withdraw', { diff --git a/src/components/Features/Transfer/Transfer.hooks.js b/src/components/Features/Transfer/Transfer.hooks.js index ca624f7d..040de3eb 100644 --- a/src/components/Features/Transfer/Transfer.hooks.js +++ b/src/components/Features/Transfer/Transfer.hooks.js @@ -25,6 +25,7 @@ export const useTransferData = () => { return { ...useSelector(selectTransfer), selectedToken: useSelectedToken(), + symbol: useSelector(selectSymbol), isL1: useSelector(toL2Selector), isL2: useSelector(toL1Selector), fromNetwork: useSelector(fromNetworkSelector), diff --git a/src/components/Features/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer.js index b978e84f..9d4e1b97 100644 --- a/src/components/Features/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer.js @@ -1,7 +1,7 @@ import React, {useEffect, useState} from 'react'; import {ActionType, NetworkType} from '../../../enums'; -import {useTransferToL1, useTransferToL2} from '../../../hooks'; +import {useMaxAmount, useTransferToL1, useTransferToL2} from '../../../hooks'; import {useL1Token, useL2Token, useTokens} from '../../../providers/TokensProvider'; import { Loading, @@ -16,22 +16,24 @@ import {LoadingSize} from '../../UI/Loading/Loading.enums'; import {useBridgeActions} from '../Bridge/Bridge.hooks'; import {useAmount, useIsL1, useIsL2, useTransferActions, useTransferData} from './Transfer.hooks'; import styles from './Transfer.module.scss'; -import {INSUFFICIENT_BALANCE_ERROR_MSG} from './Transfer.strings'; +import {INSUFFICIENT_BALANCE_ERROR_MSG, MAX_AMOUNT_ERROR_MSG} from './Transfer.strings'; export const Transfer = () => { const [isL1, swapToL1] = useIsL1(); const [isL2, swapToL2] = useIsL2(); const [amount, setAmount] = useAmount(); const [hasInputError, setHasInputError] = useState(false); + const [errorMsg, setErrorMsg] = useState(''); const [isButtonDisabled, setIsButtonDisabled] = useState(true); const {showSelectTokenMenu} = useBridgeActions(); - const {selectedToken, action} = useTransferData(); + const {selectedToken, action, symbol} = useTransferData(); const {selectToken} = useTransferActions(); + const {tokens} = useTokens(); const transferToL2 = useTransferToL2(); const transferToL1 = useTransferToL1(); - const {tokens} = useTokens(); const getL1Token = useL1Token(); const getL2Token = useL2Token(); + const maxAmount = useMaxAmount(); useEffect(() => { if (!selectedToken) { @@ -42,21 +44,30 @@ export const Transfer = () => { useEffect(() => { if (selectedToken) { setHasInputError(false); - if (selectedToken.isLoading || Math.ceil(amount) === 0) { + if (selectedToken.isLoading || Math.ceil(amount) === 0 || (isL1 && !maxAmount)) { setIsButtonDisabled(true); } else { if (amount > selectedToken.balance) { setHasInputError(true); + setErrorMsg(INSUFFICIENT_BALANCE_ERROR_MSG); + setIsButtonDisabled(true); + } else if (isL1 && amount > maxAmount) { + setHasInputError(true); + setErrorMsg(MAX_AMOUNT_ERROR_MSG(maxAmount, symbol)); setIsButtonDisabled(true); } else { setIsButtonDisabled(false); } } } - }, [amount, selectedToken]); + }, [amount, selectedToken, maxAmount, isL1]); const onMaxClick = () => { - setAmount(selectedToken.balance.toString()); + try { + setAmount(Math.min(selectedToken.balance, Number(maxAmount))); + } catch (ex) { + setAmount(selectedToken.balance); + } }; const onInputChange = event => { @@ -111,7 +122,7 @@ export const Transfer = () => { onMaxClick={onMaxClick} onTokenSelect={showSelectTokenMenu} /> - {hasInputError && <div className={styles.errorMsg}>{INSUFFICIENT_BALANCE_ERROR_MSG}</div>} + {hasInputError && <div className={styles.errorMsg}>{errorMsg}</div>} <TransferButton isDisabled={isButtonDisabled} onClick={onTransferClick} /> </> ); diff --git a/src/components/Features/Transfer/Transfer.strings.js b/src/components/Features/Transfer/Transfer.strings.js index f58096de..392f5ff4 100644 --- a/src/components/Features/Transfer/Transfer.strings.js +++ b/src/components/Features/Transfer/Transfer.strings.js @@ -1,5 +1,8 @@ -import {getString} from '../../../utils'; +import {evaluate, getString} from '../../../utils'; export const INSUFFICIENT_BALANCE_ERROR_MSG = getString( 'menus.transfer.insufficient_balance_error_msg' ); + +export const MAX_AMOUNT_ERROR_MSG = (maxAmount, symbol) => + evaluate(getString('menus.transfer.max_amount_error_msg'), {maxAmount, symbol}); diff --git a/src/config/strings.json b/src/config/strings.json index eea2cf4d..5dd57a83 100644 --- a/src/config/strings.json +++ b/src/config/strings.json @@ -38,6 +38,7 @@ "to_txt": "to", "from_txt": "from", "insufficient_balance_error_msg": "Insufficient balance", + "max_amount_error_msg": "StarkNet Alpha Limitation: transfer to StarkNet limited to {{maxAmount}} {{symbol}}.", "max_btn_txt": "Max", "balance_title_txt": "Available balance", "input_placeholder_txt": "0.00", diff --git a/src/hooks/index.js b/src/hooks/index.js index 064b9ad4..509acce1 100644 --- a/src/hooks/index.js +++ b/src/hooks/index.js @@ -12,3 +12,4 @@ export * from './useTransfer'; export * from './useConfig'; export * from './useEventListener'; export * from './useTransferProgress'; +export * from './useMaxAmount'; diff --git a/src/hooks/useMaxAmount.js b/src/hooks/useMaxAmount.js new file mode 100644 index 00000000..c6aa0fd4 --- /dev/null +++ b/src/hooks/useMaxAmount.js @@ -0,0 +1,30 @@ +import {useAsyncMemo} from 'use-async-memo'; + +import {maxDeposit} from '../api/bridge'; +import {useTransferData} from '../components/Features/Transfer/Transfer.hooks'; +import {useTokenBridgeContract} from './useContract'; + +const cache = {}; + +export const useMaxAmount = () => { + const {symbol, isL1, selectedToken} = useTransferData(); + const getTokenBridgeContract = useTokenBridgeContract(); + + const fetchMaxAmount = async () => { + const {decimals, bridgeAddress} = selectedToken; + const contract = getTokenBridgeContract(bridgeAddress); + return await maxDeposit({decimals, contract}); + }; + + return useAsyncMemo(async () => { + if (symbol && isL1) { + if (!cache[symbol]) { + const value = await fetchMaxAmount(); + cache[symbol] = value; + return value; + } + return cache[symbol]; + } + return null; + }, [symbol, isL1]); +}; diff --git a/yarn.lock b/yarn.lock index 93183859..4bd5595a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16374,6 +16374,11 @@ usb@^1.6.0: node-addon-api "^4.2.0" node-gyp-build "^4.3.0" +use-async-memo@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/use-async-memo/-/use-async-memo-1.2.3.tgz#fe49d7ae1cd850199cf9e4a8ee483e31ed85659f" + integrity sha512-AjZ1Wy1vfOSlaxohqoLIpauV+jwph/p0N72PBzxeEcjrZ4Mf/4o1Vav4bLaAPYuHLJZo+4M/4TIcAk7XC6H98g== + use-deep-compare-effect@^1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/use-deep-compare-effect/-/use-deep-compare-effect-1.8.1.tgz#ef0ce3b3271edb801da1ec23bf0754ef4189d0c6" From 8b00c6b2ea8c29947e76b1b271e88693baafec23 Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Tue, 18 Jan 2022 07:48:09 +0000 Subject: [PATCH 068/211] chore(release): 0.0.1-15 [skip ci] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4ba0830b..b559d09e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "0.0.1-14", + "version": "0.0.1-15", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 059bfced1b97d6308649a7ec8faab36ba5c17cf7 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 18 Jan 2022 18:12:33 +0200 Subject: [PATCH 069/211] feat: cache contracts (#65) --- src/hooks/useContract.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/hooks/useContract.js b/src/hooks/useContract.js index 2dfdc547..471b0faa 100644 --- a/src/hooks/useContract.js +++ b/src/hooks/useContract.js @@ -9,14 +9,21 @@ import {useL1Token} from '../providers/TokensProvider'; import {useL1Wallet, useWallets} from '../providers/WalletsProvider'; import {l1_getContract, l2_getContract} from '../utils/contract'; +const cache = {}; + export const useContract = (ABI, getContractHandler = l1_getContract) => { const {chainId} = useWallets(); return useCallback( addresses => { try { - let address = addresses[chainId]; - if (!address) return null; - return getContractHandler(address, ABI); + const address = addresses[chainId]; + if (!address) { + return null; + } + if (!cache[address]) { + cache[address] = getContractHandler(address, ABI); + } + return cache[address]; } catch (ex) { return null; } From 77af29c57599809ae3cbf96db94da207eceaed29 Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Tue, 18 Jan 2022 16:14:19 +0000 Subject: [PATCH 070/211] chore(release): 0.0.1-16 [skip ci] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b559d09e..4e1ab946 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "0.0.1-15", + "version": "0.0.1-16", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 7f1441aa3c93d0d5eb37b253021d87f419b1ad68 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Wed, 19 Jan 2022 15:09:40 +0200 Subject: [PATCH 071/211] feat: add nonce to txHash calculation (#66) --- .eslintrc.json | 3 +- package.json | 5 +- src/__tests__/utils/hash.spec.js | 31 ++++++ src/abis/l1/StarknetMessaging.json | 6 ++ src/constants.js | 1 - src/enums/TransactionHashPrefix.js | 4 + src/enums/index.js | 1 + src/hooks/useEventListener.js | 21 ++-- src/utils/hash.js | 16 ++- yarn.lock | 157 ++++++++++++++++++++++++++++- 10 files changed, 229 insertions(+), 16 deletions(-) create mode 100644 src/__tests__/utils/hash.spec.js create mode 100644 src/enums/TransactionHashPrefix.js diff --git a/.eslintrc.json b/.eslintrc.json index 0fcff14f..3e565adb 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -5,7 +5,8 @@ }, "globals": { "process": true, - "gtag": true + "expect": true, + "it": true }, "extends": ["eslint:recommended", "plugin:react/recommended", "prettier"], "parserOptions": { diff --git a/package.json b/package.json index 4e1ab946..a67f2632 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "build": "react-scripts build", "build:testing": "env-cmd -f .env.testing npm run build", "start": "ESLINT_NO_DEV_ERRORS=true react-scripts start", - "test": "react-scripts test", + "test": "react-scripts test --env=jsdom", "eject": "react-scripts eject", "lint": "eslint .", "lint:fix": "eslint --fix .", @@ -65,6 +65,9 @@ }, "devDependencies": { "@babel/plugin-proposal-class-properties": "^7.16.0", + "@testing-library/jest-dom": "^5.16.1", + "@testing-library/react": "^11.2.7", + "@testing-library/user-event": "^12.8.3", "@trivago/prettier-plugin-sort-imports": "^2.0.4", "env-cmd": "^10.1.0", "eslint-config-prettier": "^8.3.0", diff --git a/src/__tests__/utils/hash.spec.js b/src/__tests__/utils/hash.spec.js new file mode 100644 index 00000000..cd6d1990 --- /dev/null +++ b/src/__tests__/utils/hash.spec.js @@ -0,0 +1,31 @@ +import {ChainType, TransactionHashPrefix} from '../../enums'; +import {hashEquals, txHash} from '../../utils'; + +it('should calc tx hash', () => { + const from_address = '0xcf98f0a8edc6a730e1ca6b64a2528c6be031cb12'; + const to_address = '1384622289134235426972866085149619554404298343372540338336104355150443775597'; + const selector = '1285101517810983806491589552491143496277809242732141897358598292095611420389'; + const nonce = '55'; + const payload = [ + '17466514784613283928575916580398045172482824287888203092305238190565527099', + '52145000000000', + '0' + ]; + + expect( + txHash( + TransactionHashPrefix.L1_HANDLER, + from_address, + to_address, + selector, + payload, + ChainType.GOERLI.id, + nonce + ) + ).toEqual('0x35ab0e4de971ac0736844ef36a05796dc41490c165373923c423f4b995983e8'); +}); + +it('should compare hashes', () => { + expect(hashEquals([1, 2, 3], [1, 2, 3])).toBeTruthy(); + expect(hashEquals([1, 2, 3], [1, 2])).toBeFalsy(); +}); diff --git a/src/abis/l1/StarknetMessaging.json b/src/abis/l1/StarknetMessaging.json index b5f5c71a..ec07f99a 100644 --- a/src/abis/l1/StarknetMessaging.json +++ b/src/abis/l1/StarknetMessaging.json @@ -106,6 +106,12 @@ "internalType": "uint256[]", "name": "payload", "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "nonce", + "type": "uint256" } ], "name": "LogMessageToL2", diff --git a/src/constants.js b/src/constants.js index 7f8c6f50..f2311527 100644 --- a/src/constants.js +++ b/src/constants.js @@ -2,7 +2,6 @@ import {byChainId} from './enums'; import {evaluate} from './utils'; export const LOCAL_STORAGE_TRANSFERS_KEY = 'STARKGATE_TRANSFERS'; -export const L2_INVOKE_TX_PREFIX = '115923154332517'; export const ETHERSCAN_URL = 'etherscan.io'; export const VOYAGER_URL = 'voyager.online'; export const LINKS = { diff --git a/src/enums/TransactionHashPrefix.js b/src/enums/TransactionHashPrefix.js new file mode 100644 index 00000000..c7763e07 --- /dev/null +++ b/src/enums/TransactionHashPrefix.js @@ -0,0 +1,4 @@ +export const TransactionHashPrefix = { + INVOKE: '115923154332517', + L1_HANDLER: '510926345461491391292786' +}; diff --git a/src/enums/index.js b/src/enums/index.js index 582743b8..8eeff227 100644 --- a/src/enums/index.js +++ b/src/enums/index.js @@ -5,3 +5,4 @@ export * from './NetworkType'; export * from './WalletType'; export * from './WalletStatus'; export * from './TransactionStatus'; +export * from './TransactionHashPrefix'; diff --git a/src/hooks/useEventListener.js b/src/hooks/useEventListener.js index fb82fa1b..fae509b0 100644 --- a/src/hooks/useEventListener.js +++ b/src/hooks/useEventListener.js @@ -2,6 +2,7 @@ import {useCallback} from 'react'; import {stark} from 'starknet'; import {useSelectedToken} from '../components/Features/Transfer/Transfer.hooks'; +import {TransactionHashPrefix} from '../enums'; import {useL1Token, useL2Token} from '../providers/TokensProvider'; import {useL1Wallet, useL2Wallet} from '../providers/WalletsProvider'; import {txHash} from '../utils'; @@ -22,19 +23,27 @@ export const useLogMessageToL2Listener = () => { return useCallback(async () => { logger.log('Registering to LogMessageToL2 event'); const {symbol} = selectedToken; - const snBridgeAddress = getL2Token(symbol).bridgeAddress[chainId]; - const ethBridgeAddress = getL1Token(symbol).bridgeAddress[chainId]; + const l1BridgeAddress = getL1Token(symbol).bridgeAddress[chainId]; + const l2BridgeAddress = getL2Token(symbol).bridgeAddress[chainId]; try { const event = await addEventListener(messagingContract, 'LogMessageToL2', { filter: { - to_address: snBridgeAddress, - from_address: ethBridgeAddress, + to_address: l2BridgeAddress, + from_address: l1BridgeAddress, selector: stark.getSelectorFromName('handle_deposit') } }); logger.log('Event received', {event}); - const {to_address, from_address, selector, payload} = event.returnValues; - return txHash(from_address, to_address, selector, payload, chainId); + const {to_address, from_address, selector, payload, nonce} = event.returnValues; + return txHash( + TransactionHashPrefix.L1_HANDLER, + from_address, + to_address, + selector, + payload, + chainId, + nonce + ); } catch (ex) { logger.error('Event error', {ex}); return Promise.reject(ex.message); diff --git a/src/utils/hash.js b/src/utils/hash.js index cae90d11..da6a3102 100644 --- a/src/utils/hash.js +++ b/src/utils/hash.js @@ -1,18 +1,26 @@ import {hash, number} from 'starknet'; -import {L2_INVOKE_TX_PREFIX} from '../constants'; import {byChainId} from '../enums'; -export const txHash = (fromAddress, toAddress, selector, payload, chainId) => { +export const txHash = ( + txHashPrefix, + fromAddress, + toAddress, + selector, + payload, + chainId, + ...additionalData +) => { const calldata = [number.hexToDecimalString(fromAddress), ...payload]; const calldataHash = hash.hashCalldata(calldata); const {l2IdPrefix} = byChainId(chainId); return hash.computeHashOnElements([ - L2_INVOKE_TX_PREFIX, + txHashPrefix, toAddress, selector, calldataHash, - l2IdPrefix + l2IdPrefix, + ...additionalData ]); }; diff --git a/yarn.lock b/yarn.lock index 4bd5595a..ce42c7ad 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2260,6 +2260,50 @@ dependencies: defer-to-connect "^1.0.1" +"@testing-library/dom@^7.28.1": + version "7.31.2" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.31.2.tgz#df361db38f5212b88555068ab8119f5d841a8c4a" + integrity sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.12.5" + "@types/aria-query" "^4.2.0" + aria-query "^4.2.2" + chalk "^4.1.0" + dom-accessibility-api "^0.5.6" + lz-string "^1.4.4" + pretty-format "^26.6.2" + +"@testing-library/jest-dom@^5.16.1": + version "5.16.1" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.16.1.tgz#3db7df5ae97596264a7da9696fe14695ba02e51f" + integrity sha512-ajUJdfDIuTCadB79ukO+0l8O+QwN0LiSxDaYUTI4LndbbUsGi6rWU1SCexXzBA2NSjlVB9/vbkasQIL3tmPBjw== + dependencies: + "@babel/runtime" "^7.9.2" + "@types/testing-library__jest-dom" "^5.9.1" + aria-query "^5.0.0" + chalk "^3.0.0" + css "^3.0.0" + css.escape "^1.5.1" + dom-accessibility-api "^0.5.6" + lodash "^4.17.15" + redent "^3.0.0" + +"@testing-library/react@^11.2.7": + version "11.2.7" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-11.2.7.tgz#b29e2e95c6765c815786c0bc1d5aed9cb2bf7818" + integrity sha512-tzRNp7pzd5QmbtXNG/mhdcl7Awfu/Iz1RaVHY75zTdOkmHCuzMhRL83gWHSgOAcjS3CCbyfwUHMZgRJb4kAfpA== + dependencies: + "@babel/runtime" "^7.12.5" + "@testing-library/dom" "^7.28.1" + +"@testing-library/user-event@^12.8.3": + version "12.8.3" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-12.8.3.tgz#1aa3ed4b9f79340a1e1836bc7f57c501e838704a" + integrity sha512-IR0iWbFkgd56Bu5ZI/ej8yQwrkCv8Qydx6RzwbKz9faXazR/+5tvYKsZQgyXJiwgpcva127YO6JcWy7YlCfofQ== + dependencies: + "@babel/runtime" "^7.12.5" + "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" @@ -2362,6 +2406,11 @@ javascript-natural-sort "0.7.1" lodash "4.17.21" +"@types/aria-query@^4.2.0": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.2.tgz#ed4e0ad92306a704f9fb132a0cfcf77486dbe2bc" + integrity sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig== + "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": version "7.1.16" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.16.tgz#bc12c74b7d65e82d29876b5d0baf5c625ac58702" @@ -2488,6 +2537,22 @@ dependencies: "@types/istanbul-lib-report" "*" +"@types/jest@*": + version "27.4.0" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.4.0.tgz#037ab8b872067cae842a320841693080f9cb84ed" + integrity sha512-gHl8XuC1RZ8H2j5sHv/JqsaxXkDDM9iDOgu0Wp8sjs4u/snb2PVehyWXJPr+ORA0RPpgw231mnutWI1+0hgjIQ== + dependencies: + jest-diff "^27.0.0" + pretty-format "^27.0.0" + +"@types/jest@^26.0.24": + version "26.0.24" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.24.tgz#943d11976b16739185913a1936e0de0c4a7d595a" + integrity sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w== + dependencies: + jest-diff "^26.0.0" + pretty-format "^26.0.0" + "@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8": version "7.0.9" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" @@ -2608,6 +2673,13 @@ resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.8.tgz#b94a4391c85666c7b73299fd3ad79d4faa435310" integrity sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ== +"@types/testing-library__jest-dom@^5.9.1": + version "5.14.2" + resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.2.tgz#564fb2b2dc827147e937a75b639a05d17ce18b44" + integrity sha512-vehbtyHUShPxIa9SioxDwCvgxukDMH//icJG90sXQBUm5lJOHLT5kNeU9tnivhnA/TkOFMzGIXN2cTc4hY8/kg== + dependencies: + "@types/jest" "*" + "@types/uglify-js@*": version "3.13.1" resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.1.tgz#5e889e9e81e94245c75b6450600e1c5ea2878aea" @@ -3422,6 +3494,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -3466,6 +3543,11 @@ aria-query@^4.2.2: "@babel/runtime" "^7.10.2" "@babel/runtime-corejs3" "^7.10.2" +aria-query@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.0.0.tgz#210c21aaf469613ee8c9a62c7f86525e058db52c" + integrity sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg== + arity-n@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/arity-n/-/arity-n-1.0.4.tgz#d9e76b11733e08569c0847ae7b39b2860b30b745" @@ -5094,7 +5176,15 @@ chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^4.0.0: +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0, chalk@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -6004,6 +6094,11 @@ css-what@^5.0.0: resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.1.0.tgz#3f7b707aadf633baf62c2ceb8579b545bb40f7fe" integrity sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw== +css.escape@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" + integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= + css@^2.0.0: version "2.2.4" resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" @@ -6014,6 +6109,15 @@ css@^2.0.0: source-map-resolve "^0.5.2" urix "^0.1.0" +css@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/css/-/css-3.0.0.tgz#4447a4d58fdd03367c516ca9f64ae365cee4aa5d" + integrity sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ== + dependencies: + inherits "^2.0.4" + source-map "^0.6.1" + source-map-resolve "^0.6.0" + cssdb@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz#3bf2f2a68c10f5c6a08abd92378331ee803cddb0" @@ -6432,6 +6536,11 @@ diff-sequences@^26.6.2: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== +diff-sequences@^27.4.0: + version "27.4.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.4.0.tgz#d783920ad8d06ec718a060d00196dfef25b132a5" + integrity sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww== + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -6487,6 +6596,11 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dom-accessibility-api@^0.5.6: + version "0.5.10" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.10.tgz#caa6d08f60388d0bb4539dd75fe458a9a1d0014c" + integrity sha512-Xu9mD0UjrJisTmv7lmVSDMagQcU9R5hwAbxsaAE/35XPnPLJobbuREfV/rraiSaEj/UOvgrzQs66zyTWTlyd+g== + dom-converter@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" @@ -9950,7 +10064,7 @@ jest-config@^26.6.3: micromatch "^4.0.2" pretty-format "^26.6.2" -jest-diff@^26.6.2: +jest-diff@^26.0.0, jest-diff@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== @@ -9960,6 +10074,16 @@ jest-diff@^26.6.2: jest-get-type "^26.3.0" pretty-format "^26.6.2" +jest-diff@^27.0.0: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.4.6.tgz#93815774d2012a2cbb6cf23f84d48c7a2618f98d" + integrity sha512-zjaB0sh0Lb13VyPsd92V7HkqF6yKRH9vm33rwBt7rPYrpQvS1nCvlIy2pICbKta+ZjWngYLNn4cCK4nyZkjS/w== + dependencies: + chalk "^4.0.0" + diff-sequences "^27.4.0" + jest-get-type "^27.4.0" + pretty-format "^27.4.6" + jest-docblock@^26.0.0: version "26.0.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" @@ -10008,6 +10132,11 @@ jest-get-type@^26.3.0: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== +jest-get-type@^27.4.0: + version "27.4.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.4.0.tgz#7503d2663fffa431638337b3998d39c5e928e9b5" + integrity sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ== + jest-haste-map@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" @@ -11119,6 +11248,11 @@ ltgt@~2.1.1: resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.1.3.tgz#10851a06d9964b971178441c23c9e52698eece34" integrity sha1-EIUaBtmWS5cReEQcI8nlJpjuzjQ= +lz-string@^1.4.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" + integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= + magic-string@^0.25.0, magic-string@^0.25.7: version "0.25.7" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" @@ -13406,7 +13540,7 @@ pretty-error@^2.1.1: lodash "^4.17.20" renderkid "^2.0.4" -pretty-format@^26.6.0, pretty-format@^26.6.2: +pretty-format@^26.0.0, pretty-format@^26.6.0, pretty-format@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== @@ -13416,6 +13550,15 @@ pretty-format@^26.6.0, pretty-format@^26.6.2: ansi-styles "^4.0.0" react-is "^17.0.1" +pretty-format@^27.0.0, pretty-format@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.4.6.tgz#1b784d2f53c68db31797b2348fa39b49e31846b7" + integrity sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g== + dependencies: + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" + printj@~1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222" @@ -15045,6 +15188,14 @@ source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: source-map-url "^0.4.0" urix "^0.1.0" +source-map-resolve@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" + integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + source-map-support@0.5.12: version "0.5.12" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" From 6c09824ec68ccb35f2422c961c6d95397d20ff66 Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Wed, 19 Jan 2022 13:11:07 +0000 Subject: [PATCH 072/211] chore(release): 0.0.1-17 [skip ci] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a67f2632..4e78cc4e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "0.0.1-16", + "version": "0.0.1-17", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 326e0fadb0193481e12d964f78399c43b52802b6 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Wed, 19 Jan 2022 17:28:29 +0200 Subject: [PATCH 073/211] feat: alpha disclaimer (#68) --- .../Features/ToastProvider/ToastProvider.js | 14 +++++++++++++- .../ToastProvider/ToastProvider.strings.js | 3 +++ src/config/strings.json | 1 + 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 src/components/Features/ToastProvider/ToastProvider.strings.js diff --git a/src/components/Features/ToastProvider/ToastProvider.js b/src/components/Features/ToastProvider/ToastProvider.js index 4ecdea31..1a268c25 100644 --- a/src/components/Features/ToastProvider/ToastProvider.js +++ b/src/components/Features/ToastProvider/ToastProvider.js @@ -1,5 +1,5 @@ import PropTypes from 'prop-types'; -import React, {useRef} from 'react'; +import React, {useEffect, useRef} from 'react'; import {toast, Toaster} from 'react-hot-toast'; import useDeepCompareEffect from 'use-deep-compare-effect'; @@ -16,6 +16,7 @@ import {useTransfers} from '../../../providers/TransfersProvider'; import {getFullTime} from '../../../utils'; import {ToastBody, TransferToast, WithdrawalTransferToast} from '../../UI'; import styles from './ToastProvider.module.scss'; +import {ALPHA_DISCLAIMER_MSG} from './ToastProvider.strings'; export const ToastProvider = () => { const {transfers} = useTransfers(); @@ -24,6 +25,10 @@ export const ToastProvider = () => { const toastsDismissed = useRef({}); const completeTransferToL1 = useCompleteTransferToL1(); + useEffect(() => { + showAlphaDisclaimerToast(); + }, []); + useDeepCompareEffect(() => { transfers.forEach(transfer => { const prevTransfer = prevTransfers?.find(prevTransfer => prevTransfer.id === transfer.id); @@ -56,6 +61,13 @@ export const ToastProvider = () => { } }; + const showAlphaDisclaimerToast = () => { + toast.success(ALPHA_DISCLAIMER_MSG, { + position: 'bottom-left', + icon: '❗' + }); + }; + const showConsumedTransferToast = transfer => { const toastId = getToastId(transfer); toastsMap.current[transfer.id] = toast.success(renderTransferToast(transfer), { diff --git a/src/components/Features/ToastProvider/ToastProvider.strings.js b/src/components/Features/ToastProvider/ToastProvider.strings.js new file mode 100644 index 00000000..dcb2a054 --- /dev/null +++ b/src/components/Features/ToastProvider/ToastProvider.strings.js @@ -0,0 +1,3 @@ +import {getString} from '../../../utils'; + +export const ALPHA_DISCLAIMER_MSG = getString('toasts.alpha_disclaimer_msg'); diff --git a/src/config/strings.json b/src/config/strings.json index 5dd57a83..5f8c1a10 100644 --- a/src/config/strings.json +++ b/src/config/strings.json @@ -84,6 +84,7 @@ } }, "toasts": { + "alpha_disclaimer_msg": "This is an ALPHA version of StarkNet, and its Bridge. As such, deyals may occur, and catastrophic bugs may lurk. Thanks, OGs, for trying it at this early stage.", "pendingTransfer": { "pending_txt": "Waiting for transaction to be accepted on L2", "consumed_txt": "Transaction accepted on L2", From 80aad91545ce718083019167d48d3645302954df Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Wed, 19 Jan 2022 15:29:50 +0000 Subject: [PATCH 074/211] chore(release): 0.0.1-18 [skip ci] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4e78cc4e..a22e8ca3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "0.0.1-17", + "version": "0.0.1-18", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 91f1706d22d6c706c2f6c3251584092bf054b57c Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Wed, 19 Jan 2022 19:13:06 +0200 Subject: [PATCH 075/211] feat(local storage): hash transfers (#67) --- .eslintrc.json | 6 +- .../services/storage-manager.spec.js | 76 +++++++++++++++++++ src/__tests__/utils/hash.spec.js | 3 + src/services/storage-manager.js | 68 ++++++++++------- src/utils/hash.js | 17 +---- 5 files changed, 127 insertions(+), 43 deletions(-) create mode 100644 src/__tests__/services/storage-manager.spec.js diff --git a/.eslintrc.json b/.eslintrc.json index 3e565adb..656061a2 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,12 +1,12 @@ { "env": { "browser": true, - "es2021": true + "es2021": true, + "jest": true }, "globals": { "process": true, - "expect": true, - "it": true + "global": true }, "extends": ["eslint:recommended", "plugin:react/recommended", "prettier"], "parserOptions": { diff --git a/src/__tests__/services/storage-manager.spec.js b/src/__tests__/services/storage-manager.spec.js new file mode 100644 index 00000000..9eefc3ba --- /dev/null +++ b/src/__tests__/services/storage-manager.spec.js @@ -0,0 +1,76 @@ +import {StorageManager} from '../../services'; + +class LocalStorageMock { + constructor() { + this.store = {}; + } + + clear() { + this.store = {}; + } + + getItem(key) { + return this.store[key] || null; + } + + setItem(key, value) { + this.store[key] = String(value); + } + + removeItem(key) { + delete this.store[key]; + } +} + +describe('StorageManager', () => { + const testObject = {a: 1}; + const testNumber = 1; + const testString = 'a'; + const testArray = [testObject]; + + beforeEach(() => { + global.localStorage = new LocalStorageMock(); + }); + + it('should return null for empty key', () => { + expect(StorageManager.getItem('test')).toBeNull(); + }); + + it('should get item hash from local storage', () => { + StorageManager.setItem('testObject', testObject); + StorageManager.setItem('testArray', testArray); + StorageManager.setItem('testNumber', testNumber); + StorageManager.setItem('testString', testString); + expect(localStorage.getItem('testObject')).toEqual( + 'eyIwIjoiZXc9PSIsIjEiOiJJZz09IiwiMiI6IllRPT0iLCIzIjoiSWc9PSIsIjQiOiJPZz09IiwiNSI6Ik1RPT0iLCI2IjoiZlE9PSJ9' + ); + expect(localStorage.getItem('testArray')).toEqual( + 'eyIwIjoiV3c9PSIsIjEiOiJldz09IiwiMiI6IklnPT0iLCIzIjoiWVE9PSIsIjQiOiJJZz09IiwiNSI6Ik9nPT0iLCI2IjoiTVE9PSIsIjciOiJmUT09IiwiOCI6IlhRPT0ifQ==' + ); + expect(localStorage.getItem('testNumber')).toEqual('eyIwIjoiTVE9PSJ9'); + expect(localStorage.getItem('testString')).toEqual( + 'eyIwIjoiSWc9PSIsIjEiOiJZUT09IiwiMiI6IklnPT0ifQ==' + ); + }); + + it('should get item from storage manager', () => { + StorageManager.setItem('testObject', testObject); + StorageManager.setItem('testArray', testArray); + StorageManager.setItem('testNumber', testNumber); + StorageManager.setItem('testString', testString); + expect(StorageManager.getItem('testObject')).toEqual(testObject); + expect(StorageManager.getItem('testArray')).toEqual(testArray); + expect(StorageManager.getItem('testNumber')).toEqual(testNumber); + expect(StorageManager.getItem('testString')).toEqual(testString); + }); + + it('should backward compatible for saved arrays', () => { + const jsonArray = JSON.stringify(testArray); + localStorage.setItem('test', jsonArray); + expect(localStorage.getItem('test')).toEqual(jsonArray); + expect(StorageManager.getItem('test')).toEqual(testArray); + expect(localStorage.getItem('test')).toEqual( + 'eyIwIjoiV3c9PSIsIjEiOiJldz09IiwiMiI6IklnPT0iLCIzIjoiWVE9PSIsIjQiOiJJZz09IiwiNSI6Ik9nPT0iLCI2IjoiTVE9PSIsIjciOiJmUT09IiwiOCI6IlhRPT0ifQ==' + ); + }); +}); diff --git a/src/__tests__/utils/hash.spec.js b/src/__tests__/utils/hash.spec.js index cd6d1990..880f804c 100644 --- a/src/__tests__/utils/hash.spec.js +++ b/src/__tests__/utils/hash.spec.js @@ -26,6 +26,9 @@ it('should calc tx hash', () => { }); it('should compare hashes', () => { + expect(hashEquals([1, 2])).toBeTruthy(); expect(hashEquals([1, 2, 3], [1, 2, 3])).toBeTruthy(); + expect(hashEquals([1, 2, 3], [1, 2, 3], [1, 2, 3])).toBeTruthy(); + expect(hashEquals([1, 2, 3], [1, 2, 3], [1])).toBeFalsy(); expect(hashEquals([1, 2, 3], [1, 2])).toBeFalsy(); }); diff --git a/src/services/storage-manager.js b/src/services/storage-manager.js index 07af10bc..81b26686 100644 --- a/src/services/storage-manager.js +++ b/src/services/storage-manager.js @@ -1,4 +1,22 @@ -import {b64d, b64e} from '../utils'; +export const StorageManager = { + setItem: (key, item) => { + if (localStorage) { + localStorage.setObjectHash(key, JSON.stringify(item)); + return true; + } + return false; + }, + getItem: key => { + if (localStorage) { + let item = localStorage.getObjectHash(key); + try { + return JSON.parse(Object.values(item).join('')); + } catch (ex) { + return item; + } + } + } +}; Storage.prototype.setObjectHash = function (key, myObject) { const newObject = {}; @@ -9,8 +27,13 @@ Storage.prototype.setObjectHash = function (key, myObject) { }; Storage.prototype.getObjectHash = function (key) { - const myObject = this.getItem(key); + let myObject = this.getItem(key); if (!myObject) return null; + // For backward compatibility + if (myObject.startsWith('[') && myObject.endsWith(']')) { + this.setObjectHash(key, myObject); + myObject = this.getItem(key); + } return ( b64d(myObject) && JSON.parse(b64d(myObject), function (key) { @@ -19,29 +42,20 @@ Storage.prototype.getObjectHash = function (key) { ); }; -export const StorageManager = { - setItem: (key, item) => { - if (localStorage) { - localStorage.setItem(key, JSON.stringify(item)); - return true; - } - return false; - }, - getItem: key => { - if (localStorage) { - const item = localStorage.getItem(key); - if (item) { - try { - return JSON.parse(item); - } catch (ex) { - return item; - } - } - } - }, - removeItem: key => { - if (localStorage) { - localStorage.removeItem(key); - } - } +const b64e = function (str) { + return btoa( + encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function (match, p1) { + return String.fromCharCode('0x' + p1); + }) + ); +}; + +const b64d = function (str) { + return decodeURIComponent( + Array.prototype.map + .call(atob(str), function (c) { + return '%' + c.charCodeAt(0).toString(16); + }) + .join('') + ); }; diff --git a/src/utils/hash.js b/src/utils/hash.js index da6a3102..cd089620 100644 --- a/src/utils/hash.js +++ b/src/utils/hash.js @@ -24,17 +24,8 @@ export const txHash = ( ]); }; -export const hashEquals = (data1, data2) => - hash.computeHashOnElements(data1) === hash.computeHashOnElements(data2); - -export const b64e = str => - window.btoa( - encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (match, p1) => - String.fromCharCode('0x' + p1) - ) - ); - -export const b64d = str => - decodeURIComponent( - Array.prototype.map.call(window.atob(str), c => '%' + c.charCodeAt(0).toString(16)).join('') +export const hashEquals = (...data) => { + return !!data.reduce((d1, d2) => + hash.computeHashOnElements(d1) === hash.computeHashOnElements(d2) ? d1 : '' ); +}; From 10b36a33098f62b19657159a60108c60b2dc4a86 Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Wed, 19 Jan 2022 17:14:41 +0000 Subject: [PATCH 076/211] chore(release): 0.0.1-19 [skip ci] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a22e8ca3..00472f23 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "0.0.1-18", + "version": "0.0.1-19", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From d7b61093fd85de10c55757dec049394cb1508720 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Thu, 20 Jan 2022 08:08:40 +0200 Subject: [PATCH 077/211] chore: update USDC addresses (#70) --- src/config/addresses/tokens/tokens.l1.js | 4 ++-- src/config/addresses/tokens/tokens.l2.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/config/addresses/tokens/tokens.l1.js b/src/config/addresses/tokens/tokens.l1.js index 5a579ab7..002bbaf2 100644 --- a/src/config/addresses/tokens/tokens.l1.js +++ b/src/config/addresses/tokens/tokens.l1.js @@ -29,11 +29,11 @@ export const L1Tokens = [ decimals: 6, bridgeAddress: { [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0xc175127A2AA180F48D47fC20e6ED581Bd9c369c7' + [ChainType.GOERLI.id]: '0xBA9cE9F22A3Cfa7Fcb5c31f6B2748b1e72C06204' }, tokenAddress: { [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x2f3A40A3db8a7e3D09B0adfEfbCe4f6F81927557' + [ChainType.GOERLI.id]: '0x07865c6e87b9f70255377e024ace6630c1eaa37f' } }, { diff --git a/src/config/addresses/tokens/tokens.l2.js b/src/config/addresses/tokens/tokens.l2.js index e357c35f..49789db7 100644 --- a/src/config/addresses/tokens/tokens.l2.js +++ b/src/config/addresses/tokens/tokens.l2.js @@ -33,11 +33,11 @@ export const L2Tokens = [ decimals: 6, bridgeAddress: { [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x28248893ca3bab78fe7b0a053d3ddc450c291f3572e175699dbd1f7076dc800' + [ChainType.GOERLI.id]: '0x001d5b64feabc8ac7c839753994f469704c6fabdd45c8fe6d26ed57b5eb79057' }, tokenAddress: { [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x77367abf77245c0e74728e4f9dc7c944b2bc5c1bdb6902575ff97aea7653842' + [ChainType.GOERLI.id]: '0x005a643907b9a4bc6a55e9069c4fd5fd1f5c79a22470690f75556c4736e34426' } }, { From a6499543c72d84ba69f5f792fdb9151aaec16141 Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Thu, 20 Jan 2022 06:10:14 +0000 Subject: [PATCH 078/211] chore(release): 0.0.1-20 [skip ci] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 00472f23..78a54757 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "0.0.1-19", + "version": "0.0.1-20", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From a64d77285d17cf09672d411605183ee3880a4ffd Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Wed, 26 Jan 2022 13:05:35 +0200 Subject: [PATCH 079/211] fix: token balances are 0 (#71) --- src/api/erc20.js | 2 +- .../Features/ToastProvider/ToastProvider.js | 16 ++++++------ .../CompleteTransferToL1Toast.js} | 26 +++++++++++++------ .../CompleteTransferToL1Toast.module.scss} | 2 +- .../CompleteTransferToL1Toast.strings.js | 9 +++++++ .../WithdrawalTransferToast.strings.js | 10 ------- src/components/UI/Toast/index.js | 2 +- src/config/strings.json | 4 +-- src/hooks/useTokenBalance.js | 19 +++++++++----- .../TokensProvider/TokensProvider.js | 2 +- src/utils/contract.js | 21 +++++++++------ 11 files changed, 66 insertions(+), 47 deletions(-) rename src/components/UI/Toast/{WithdrawalTransferToast/WithdrawalTransferToast.js => CompleteTransferToL1Toast/CompleteTransferToL1Toast.js} (75%) rename src/components/UI/Toast/{WithdrawalTransferToast/WithdrawalTransferToast.module.scss => CompleteTransferToL1Toast/CompleteTransferToL1Toast.module.scss} (95%) create mode 100644 src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.strings.js delete mode 100644 src/components/UI/Toast/WithdrawalTransferToast/WithdrawalTransferToast.strings.js diff --git a/src/api/erc20.js b/src/api/erc20.js index 9afe28e9..c14d18f7 100644 --- a/src/api/erc20.js +++ b/src/api/erc20.js @@ -33,7 +33,7 @@ export const balanceOf = async ({account, decimals, contract}, isL1 = true) => { } }; -export const l1_ethBalanceOf = async account => { +export const ethBalanceOf = async account => { try { const balance = await web3.eth.getBalance(account); return parseFromDecimals(balance); diff --git a/src/components/Features/ToastProvider/ToastProvider.js b/src/components/Features/ToastProvider/ToastProvider.js index 1a268c25..95e3b807 100644 --- a/src/components/Features/ToastProvider/ToastProvider.js +++ b/src/components/Features/ToastProvider/ToastProvider.js @@ -14,7 +14,7 @@ import { import {useCompleteTransferToL1, usePrevious} from '../../../hooks'; import {useTransfers} from '../../../providers/TransfersProvider'; import {getFullTime} from '../../../utils'; -import {ToastBody, TransferToast, WithdrawalTransferToast} from '../../UI'; +import {ToastBody, TransferToast, CompleteTransferToL1Toast} from '../../UI'; import styles from './ToastProvider.module.scss'; import {ALPHA_DISCLAIMER_MSG} from './ToastProvider.strings'; @@ -49,7 +49,7 @@ export const ToastProvider = () => { return showRejectedTransferToast(transfer); } if (!transfer.l1hash && type === ActionType.TRANSFER_TO_L1 && isOnChain(status)) { - return showWithdrawalToast(transfer); + return showCompleteTransferToL1Toast(transfer); } }; @@ -82,11 +82,11 @@ export const ToastProvider = () => { }); }; - const showWithdrawalToast = transfer => { + const showCompleteTransferToL1Toast = transfer => { const toastId = getToastId(transfer); if (!toastId && !isToastDismissed(toastId)) { toastsMap.current[transfer.id] = toast.custom( - t => renderWithdrawalTransferToast(t, transfer), + t => renderCompleteTransferToL1Toast(t, transfer), { id: toastId } @@ -102,13 +102,13 @@ export const ToastProvider = () => { /> ); - const renderWithdrawalTransferToast = (t, transfer) => ( - <WithdrawalTransferToast + const renderCompleteTransferToL1Toast = (t, transfer) => ( + <CompleteTransferToL1Toast t={t} transfer={transfer} onClose={() => dismissToast(transfer)} + onCompleteTransfer={() => onCompleteTransferClick(transfer)} onDismiss={() => dismissToast(transfer)} - onWithdrawal={() => onWithdrawalClick(transfer)} /> ); @@ -122,7 +122,7 @@ export const ToastProvider = () => { toastsDismissed.current[toastId] = true; }; - const onWithdrawalClick = async transfer => { + const onCompleteTransferClick = async transfer => { await completeTransferToL1(transfer); dismissToast(transfer); }; diff --git a/src/components/UI/Toast/WithdrawalTransferToast/WithdrawalTransferToast.js b/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.js similarity index 75% rename from src/components/UI/Toast/WithdrawalTransferToast/WithdrawalTransferToast.js rename to src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.js index 924c2a41..02ac1165 100644 --- a/src/components/UI/Toast/WithdrawalTransferToast/WithdrawalTransferToast.js +++ b/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.js @@ -9,15 +9,21 @@ import {ToastBody} from '../ToastBody/ToastBody'; import {ToastButton, ToastButtons} from '../ToastButton/ToastButton'; import {ToastHeader} from '../ToastHeader/ToastHeader'; import {ToastSeparator} from '../ToastSeparator/ToastSeparator'; -import styles from './WithdrawalTransferToast.module.scss'; +import styles from './CompleteTransferToL1Toast.module.scss'; import { BODY_TXT, DISMISS_BTN_TXT, TITLE_TXT, - WITHDRAWAL_BTN_TXT -} from './WithdrawalTransferToast.strings'; + COMPLETE_TRANSFER_BTN_TXT +} from './CompleteTransferToL1Toast.strings'; -export const WithdrawalTransferToast = ({t, transfer, onDismiss, onWithdrawal, onClose}) => { +export const CompleteTransferToL1Toast = ({ + t, + transfer, + onDismiss, + onCompleteTransfer, + onClose +}) => { const {colorBeta, colorOmega1} = useColors(); return ( <Transition @@ -30,7 +36,7 @@ export const WithdrawalTransferToast = ({t, transfer, onDismiss, onWithdrawal, o leaveTo="opacity-0" show={t.visible} > - <div className={styles.withdrawalTransferToast}> + <div className={styles.CompleteTransferToL1Toast}> <div className={styles.container}> <div className={styles.left}> <L1Logo style={{opacity: 0.5}} /> @@ -40,7 +46,11 @@ export const WithdrawalTransferToast = ({t, transfer, onDismiss, onWithdrawal, o <ToastBody body={BODY_TXT} style={{paddingRight: '20px'}} /> <ToastButtons> <ToastButton color={colorOmega1} text={DISMISS_BTN_TXT} onClick={onDismiss} /> - <ToastButton color={colorBeta} text={WITHDRAWAL_BTN_TXT} onClick={onWithdrawal} /> + <ToastButton + color={colorBeta} + text={COMPLETE_TRANSFER_BTN_TXT} + onClick={onCompleteTransfer} + /> </ToastButtons> <ToastSeparator /> <TransferData style={{fontSize: '10px'}} transfer={transfer} /> @@ -51,10 +61,10 @@ export const WithdrawalTransferToast = ({t, transfer, onDismiss, onWithdrawal, o ); }; -WithdrawalTransferToast.propTypes = { +CompleteTransferToL1Toast.propTypes = { t: PropTypes.object, transfer: PropTypes.object, onDismiss: PropTypes.func, - onWithdrawal: PropTypes.func, + onCompleteTransfer: PropTypes.func, onClose: PropTypes.func }; diff --git a/src/components/UI/Toast/WithdrawalTransferToast/WithdrawalTransferToast.module.scss b/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.module.scss similarity index 95% rename from src/components/UI/Toast/WithdrawalTransferToast/WithdrawalTransferToast.module.scss rename to src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.module.scss index 9d535987..aa453495 100644 --- a/src/components/UI/Toast/WithdrawalTransferToast/WithdrawalTransferToast.module.scss +++ b/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.module.scss @@ -3,7 +3,7 @@ $background-color: $--color-white; $left-background-color: $--color-white-2; -.withdrawalTransferToast { +.CompleteTransferToL1Toast { width: 400px; background: $background-color; box-shadow: 0 12px 16px -4px rgba(16, 24, 40, 0.1), 0px 4px 6px -2px rgba(16, 24, 40, 0.05); diff --git a/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.strings.js b/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.strings.js new file mode 100644 index 00000000..261b14bd --- /dev/null +++ b/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.strings.js @@ -0,0 +1,9 @@ +import {getString} from '../../../../utils'; + +const {title_txt, body_txt, dismiss_btn_txt, complete_transfer_btn_txt} = + getString('toasts.completeTransfer'); + +export const TITLE_TXT = title_txt; +export const BODY_TXT = body_txt; +export const DISMISS_BTN_TXT = dismiss_btn_txt; +export const COMPLETE_TRANSFER_BTN_TXT = complete_transfer_btn_txt; diff --git a/src/components/UI/Toast/WithdrawalTransferToast/WithdrawalTransferToast.strings.js b/src/components/UI/Toast/WithdrawalTransferToast/WithdrawalTransferToast.strings.js deleted file mode 100644 index 31bdf983..00000000 --- a/src/components/UI/Toast/WithdrawalTransferToast/WithdrawalTransferToast.strings.js +++ /dev/null @@ -1,10 +0,0 @@ -import {getString} from '../../../../utils'; - -const {title_txt, body_txt, dismiss_btn_txt, withdrawal_btn_txt} = getString( - 'toasts.withdrawalTransfer' -); - -export const TITLE_TXT = title_txt; -export const BODY_TXT = body_txt; -export const DISMISS_BTN_TXT = dismiss_btn_txt; -export const WITHDRAWAL_BTN_TXT = withdrawal_btn_txt; diff --git a/src/components/UI/Toast/index.js b/src/components/UI/Toast/index.js index 14ca708e..1ea80c6e 100644 --- a/src/components/UI/Toast/index.js +++ b/src/components/UI/Toast/index.js @@ -2,5 +2,5 @@ export * from './ToastBody/ToastBody'; export * from './ToastButton/ToastButton'; export * from './ToastHeader/ToastHeader'; export * from './ToastSeparator/ToastSeparator'; -export * from './WithdrawalTransferToast/WithdrawalTransferToast'; +export * from './CompleteTransferToL1Toast/CompleteTransferToL1Toast'; export * from './TransferToast/TransferToast'; diff --git a/src/config/strings.json b/src/config/strings.json index 5f8c1a10..4c62aa02 100644 --- a/src/config/strings.json +++ b/src/config/strings.json @@ -90,11 +90,11 @@ "consumed_txt": "Transaction accepted on L2", "rejected_txt": "Transaction rejected on L2" }, - "withdrawalTransfer": { + "completeTransfer": { "title_txt": "L2 finished processing your transfer!", "body_txt": "Click on Complete Transfer to transfer the funds from L2 Bridge to your L1 address.", "dismiss_btn_txt": "Dismiss", - "withdrawal_btn_txt": "Complete Transfer" + "complete_transfer_btn_txt": "Complete Transfer" } } } diff --git a/src/hooks/useTokenBalance.js b/src/hooks/useTokenBalance.js index 2eb5d359..b72080da 100644 --- a/src/hooks/useTokenBalance.js +++ b/src/hooks/useTokenBalance.js @@ -1,7 +1,8 @@ import {useCallback} from 'react'; -import {balanceOf, l1_ethBalanceOf} from '../api/erc20'; +import {balanceOf, ethBalanceOf} from '../api/erc20'; import {useTransferData} from '../components/Features/Transfer/Transfer.hooks'; +import {isEth} from '../utils'; import {useL1TokenContract, useL2TokenContract} from './useContract'; export const useTokenBalance = account => { @@ -18,8 +19,10 @@ export const useTokenBalance = account => { export const useL2TokenBalance = account => { const getContract = useL2TokenContract(); return useCallback( - async tokenAddresses => - await balanceOf({account, contract: getContract(tokenAddresses)}, false), + async token => { + const {tokenAddress, decimals} = token; + return await balanceOf({account, decimals, contract: getContract(tokenAddress)}, false); + }, [account, getContract] ); }; @@ -27,10 +30,12 @@ export const useL2TokenBalance = account => { export const useL1TokenBalance = account => { const getContract = useL1TokenContract(); return useCallback( - async tokenAddresses => - tokenAddresses - ? await balanceOf({account, contract: getContract(tokenAddresses)}, true) - : await l1_ethBalanceOf(account), + async token => { + const {tokenAddress, decimals} = token; + return isEth(token) + ? await ethBalanceOf(account) + : await balanceOf({account, decimals, contract: getContract(tokenAddress)}, true); + }, [account, getContract] ); }; diff --git a/src/providers/TokensProvider/TokensProvider.js b/src/providers/TokensProvider/TokensProvider.js index 5dc595a1..0c45daf2 100644 --- a/src/providers/TokensProvider/TokensProvider.js +++ b/src/providers/TokensProvider/TokensProvider.js @@ -39,7 +39,7 @@ export const TokensProvider = ({children}) => { logger.log(`Token already have a balance of ${token.balance}, don't set isLoading prop`); } const getBalance = token.isL1 ? getL1TokenBalance : getL2TokenBalance; - getBalance(token.tokenAddress) + getBalance(token) .then(balance => { logger.log(`New ${token.symbol} token balance is ${balance}`); updateTokenState(index, {balance, isLoading: false}); diff --git a/src/utils/contract.js b/src/utils/contract.js index f06f22d7..a412802f 100644 --- a/src/utils/contract.js +++ b/src/utils/contract.js @@ -64,14 +64,19 @@ export const l2_waitForTransaction = async (hash, customStatus, retryInterval = logger.debug(`Checking transaction again`); const statusPromise = getStarknet().provider.getTransactionStatus(hash); processing = true; - const {tx_status} = await statusPromise; - logger.debug(`Transaction status is ${tx_status}`); - if (waitingForStatuses.includes(tx_status)) { - logger.debug(`We got our desired status!`); - clearInterval(intervalId); - resolve(); - } else { - logger.debug(`We haven't got our desired status, trying again.`); + try { + const {tx_status} = await statusPromise; + logger.debug(`Transaction status is ${tx_status}`); + if (waitingForStatuses.includes(tx_status)) { + logger.debug(`We got our desired status!`); + clearInterval(intervalId); + resolve(); + } else { + logger.debug(`We haven't got our desired status, trying again.`); + processing = false; + } + } catch (ex) { + logger.error(`Error while calling get status: ${ex.message}, trying again.`); processing = false; } }, retryInterval); From 4e90bfacea210d283424899f6fc3263772b631fa Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Wed, 26 Jan 2022 11:07:05 +0000 Subject: [PATCH 080/211] chore(release): 0.0.1-21 [skip ci] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 78a54757..4b198a42 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "0.0.1-20", + "version": "0.0.1-21", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 93a95c0c44c5e1c6726c58a7495f2564c7c73c92 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Wed, 26 Jan 2022 14:18:10 +0200 Subject: [PATCH 081/211] fix: max balance error (#72) --- src/components/Features/Transfer/Transfer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Features/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer.js index 9d4e1b97..a6b5ed18 100644 --- a/src/components/Features/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer.js @@ -64,7 +64,7 @@ export const Transfer = () => { const onMaxClick = () => { try { - setAmount(Math.min(selectedToken.balance, Number(maxAmount))); + setAmount(String(Math.min(selectedToken.balance, Number(maxAmount)))); } catch (ex) { setAmount(selectedToken.balance); } From 3fa3a9d34c117b338e54c8877b20a6e9b2d819e2 Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Wed, 26 Jan 2022 12:19:35 +0000 Subject: [PATCH 082/211] chore(release): 0.0.1-22 [skip ci] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4b198a42..e7312e61 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "0.0.1-21", + "version": "0.0.1-22", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From b5dfe4733cd1ac122d404003ae2534d07545b4f6 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Wed, 26 Jan 2022 14:40:17 +0200 Subject: [PATCH 083/211] chore: renaming withdraw/deposit to transferToL1/transferToL2 (#73) --- src/components/Features/Account/Account.js | 2 +- .../Features/Transfer/Transfer.selectors.js | 12 ++++++------ .../Features/Transfer/Transfer.slice.js | 8 ++++---- .../Features/TransferLog/TransferLog.js | 14 +++++++------- .../Features/TransferLog/TransferLog.strings.js | 4 ++-- .../TransactionSubmittedModal.js | 17 +++++++++-------- .../TransactionSubmittedModal.strings.js | 11 +++++------ src/config/strings.json | 8 ++++---- 8 files changed, 38 insertions(+), 38 deletions(-) diff --git a/src/components/Features/Account/Account.js b/src/components/Features/Account/Account.js index 478ae45a..fde1df5f 100644 --- a/src/components/Features/Account/Account.js +++ b/src/components/Features/Account/Account.js @@ -32,7 +32,7 @@ export const Account = () => { <TransferLog key={index} transfer={transfer} - onWithdrawClick={() => completeTransferToL1(transfer)} + onCompleteTransferClick={() => completeTransferToL1(transfer)} /> )) : null; diff --git a/src/components/Features/Transfer/Transfer.selectors.js b/src/components/Features/Transfer/Transfer.selectors.js index 636267f2..07d9245e 100644 --- a/src/components/Features/Transfer/Transfer.selectors.js +++ b/src/components/Features/Transfer/Transfer.selectors.js @@ -8,9 +8,9 @@ export const selectTransferAction = state => state.transfer.action; export const selectSymbol = state => state.transfer.symbol; -export const selectWithdrawAmount = state => state.transfer.withdrawAmount; +export const selectTransferToL1Amount = state => state.transfer.transferToL1Amount; -export const selectDepositAmount = state => state.transfer.depositAmount; +export const selectTransferToL2Amount = state => state.transfer.transferToL2Amount; export const toL2Selector = createSelector( selectTransferAction, @@ -31,11 +31,11 @@ export const toNetworkSelector = createSelector(selectTransferAction, action => ); export const getCurrentAmountSelector = createSelector( - [selectTransferAction, selectDepositAmount, selectWithdrawAmount], - (action, depositAmount, withdrawAmount) => { + [selectTransferAction, selectTransferToL2Amount, selectTransferToL1Amount], + (action, transferToL2Amount, transferToL1Amount) => { if (action === ActionType.TRANSFER_TO_L2) { - return depositAmount; + return transferToL2Amount; } - return withdrawAmount; + return transferToL1Amount; } ); diff --git a/src/components/Features/Transfer/Transfer.slice.js b/src/components/Features/Transfer/Transfer.slice.js index c2cecf5a..b2299b39 100644 --- a/src/components/Features/Transfer/Transfer.slice.js +++ b/src/components/Features/Transfer/Transfer.slice.js @@ -5,8 +5,8 @@ import {ActionType} from '../../../enums'; const initialState = { action: ActionType.TRANSFER_TO_L2, symbol: '', - depositAmount: '', - withdrawAmount: '' + transferToL2Amount: '', + transferToL1Amount: '' }; const transferSlice = createSlice({ @@ -21,9 +21,9 @@ const transferSlice = createSlice({ }, setAmountAction(state, action) { if (state.action === ActionType.TRANSFER_TO_L2) { - state.depositAmount = action.payload; + state.transferToL2Amount = action.payload; } else { - state.withdrawAmount = action.payload; + state.transferToL1Amount = action.payload; } }, resetAction(state) { diff --git a/src/components/Features/TransferLog/TransferLog.js b/src/components/Features/TransferLog/TransferLog.js index fe79ceb4..a1182408 100644 --- a/src/components/Features/TransferLog/TransferLog.js +++ b/src/components/Features/TransferLog/TransferLog.js @@ -17,9 +17,9 @@ import {CryptoLogoSize} from '../../UI/CryptoLogo/CryptoLogo.enums'; import {LinkButton} from '../../UI/LinkButton/LinkButton'; import {useTransferData} from '../Transfer/Transfer.hooks'; import styles from './TransferLog.module.scss'; -import {WITHDRAWAL_BTN_TXT} from './TransferLog.strings'; +import {COMPLETE_TRANSFER_BTN_TXT} from './TransferLog.strings'; -export const TransferLog = ({transfer, onWithdrawClick}) => { +export const TransferLog = ({transfer, onCompleteTransferClick}) => { const {symbol, timestamp, name, amount, status, l1hash, l2hash} = transfer; const [sign, setSign] = useState(''); const {action, isL1} = useTransferData(); @@ -39,7 +39,7 @@ export const TransferLog = ({transfer, onWithdrawClick}) => { const renderL1TxButton = () => { return !l1hash && isL1 && isOnChain(status) ? ( - <WithdrawalButton onClick={onWithdrawClick} /> + <CompleteTransferButton onClick={onCompleteTransferClick} /> ) : ( <LinkButton isDisabled={!l1hash} @@ -87,7 +87,7 @@ export const TransferLog = ({transfer, onWithdrawClick}) => { ); }; -const WithdrawalButton = ({onClick}) => { +const CompleteTransferButton = ({onClick}) => { const {colorBeta} = useColors(); return ( <Button @@ -99,17 +99,17 @@ const WithdrawalButton = ({onClick}) => { fontSize: '12px', padding: '14px' }} - text={WITHDRAWAL_BTN_TXT} + text={COMPLETE_TRANSFER_BTN_TXT} onClick={onClick} /> ); }; -WithdrawalButton.propTypes = { +CompleteTransferButton.propTypes = { onClick: PropTypes.func }; TransferLog.propTypes = { transfer: PropTypes.object, - onWithdrawClick: PropTypes.func + onCompleteTransferClick: PropTypes.func }; diff --git a/src/components/Features/TransferLog/TransferLog.strings.js b/src/components/Features/TransferLog/TransferLog.strings.js index 877d0e07..d06afed9 100644 --- a/src/components/Features/TransferLog/TransferLog.strings.js +++ b/src/components/Features/TransferLog/TransferLog.strings.js @@ -1,5 +1,5 @@ import {getString} from '../../../utils'; -export const WITHDRAWAL_BTN_TXT = getString( - 'menus.account.transferLogContainer.transferLog.withdrawal_btn_txt' +export const COMPLETE_TRANSFER_BTN_TXT = getString( + 'menus.account.transferLogContainer.transferLog.complete_transfer_btn_txt' ); diff --git a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js index 51e9e325..95d1cc23 100644 --- a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js +++ b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js @@ -12,10 +12,10 @@ import {Button} from '../../Button/Button'; import {Circle} from '../../Circle/Circle'; import { BTN_TEXT, - COMPLETE_WITHDRAWAL_TXT, - DEPOSIT_TXT, - STATUS_TXT, - WITHDRAWAL_TXT + TRANSFER_TO_L2_TXT, + TRANSFER_TO_L1_TXT, + COMPLETE_TRANSFER_TO_L1_TXT, + STATUS_TXT } from './TransactionSubmittedModal.strings'; const TransactionSubmittedModal = ({transfer}) => { @@ -24,10 +24,11 @@ const TransactionSubmittedModal = ({transfer}) => { useEffect(() => { const {type, l2hash, l1hash} = transfer; - const isCompletedWithdrawal = l1hash && l2hash; - if (type === ActionType.TRANSFER_TO_L2 || isCompletedWithdrawal) { + const isTransferCompleted = l1hash && l2hash; + if (type === ActionType.TRANSFER_TO_L2 || isTransferCompleted) { setNetworkData({ - message: type === ActionType.TRANSFER_TO_L2 ? DEPOSIT_TXT : COMPLETE_WITHDRAWAL_TXT, + message: + type === ActionType.TRANSFER_TO_L2 ? TRANSFER_TO_L2_TXT : COMPLETE_TRANSFER_TO_L1_TXT, showStatusMsg: type === ActionType.TRANSFER_TO_L2, explorerName: LINKS.ETHERSCAN.text, explorerUrl: LINKS.ETHERSCAN.txUrl(chainId, l1hash), @@ -35,7 +36,7 @@ const TransactionSubmittedModal = ({transfer}) => { }); } else { setNetworkData({ - message: WITHDRAWAL_TXT, + message: TRANSFER_TO_L1_TXT, showStatusMsg: true, explorerName: LINKS.VOYAGER.text, explorerUrl: LINKS.VOYAGER.txUrl(chainId, l2hash), diff --git a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.strings.js b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.strings.js index b4a6fc45..5ec85c37 100644 --- a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.strings.js +++ b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.strings.js @@ -1,11 +1,10 @@ import {evaluate, getString} from '../../../../utils'; -const {btn_txt, withdrawal_txt, complete_withdrawal_txt, deposit_txt, status_txt} = getString( - 'modals.transactionSubmitted' -); +const {btn_txt, transfer_to_l1_txt, complete_transfer_to_l1_txt, transfer_to_l2_txt, status_txt} = + getString('modals.transactionSubmitted'); -export const COMPLETE_WITHDRAWAL_TXT = complete_withdrawal_txt; -export const WITHDRAWAL_TXT = withdrawal_txt; -export const DEPOSIT_TXT = deposit_txt; +export const COMPLETE_TRANSFER_TO_L1_TXT = complete_transfer_to_l1_txt; +export const TRANSFER_TO_L1_TXT = transfer_to_l1_txt; +export const TRANSFER_TO_L2_TXT = transfer_to_l2_txt; export const STATUS_TXT = status_txt; export const BTN_TEXT = explorer => evaluate(btn_txt, {explorer}); diff --git a/src/config/strings.json b/src/config/strings.json index 4c62aa02..67815cf3 100644 --- a/src/config/strings.json +++ b/src/config/strings.json @@ -26,7 +26,7 @@ "empty_msg_txt": "Transfers will appear here...", "view_more_txt": "View more", "transferLog": { - "withdrawal_btn_txt": "Withdrawal" + "complete_transfer_btn_txt": "Complete transfer" } } }, @@ -49,9 +49,9 @@ "transactionSubmitted": { "title_txt": "Transaction sent", "btn_txt": "View on {{explorer}}", - "withdrawal_txt": "Your transaction is now being processing on L2. When it will be accepted on-chain, we will promote you to complete your transfer.", - "complete_withdrawal_txt": "Your transaction is completed on L1!", - "deposit_txt": "Your transaction has been sent to L2!", + "transfer_to_l1_txt": "Your transaction is now being processing on L2. When it will be accepted on-chain, we will promote you to complete your transfer.", + "transfer_to_l2_txt": "Your transaction has been sent to L2!", + "complete_transfer_to_l1_txt": "Your transaction is completed on L1!", "status_txt": "Follow the transaction status on the right side of the browser." }, "transferProgress": { From 5cdea5275a6cd0aac6328fd95724abfcc4ced5f7 Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Wed, 26 Jan 2022 12:41:33 +0000 Subject: [PATCH 084/211] chore(release): 0.0.1-23 [skip ci] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e7312e61..944f96d0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "0.0.1-22", + "version": "0.0.1-23", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 6d59980162a26a2e4e013863ef887fac3febeb65 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 1 Feb 2022 12:22:08 +0200 Subject: [PATCH 085/211] chore: change commit message for prereleases (#75) --- .github/workflows/push.yml | 1 + .versionrc.json | 3 --- package.json | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) delete mode 100644 .versionrc.json diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index fa857c62..10af6fe8 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -10,6 +10,7 @@ jobs: release-version: name: Releasing a version runs-on: ubuntu-latest + if: ${{ !contains(github.event.head_commit.message, 'chore') || (github.ref_name == 'master' && !contains(github.event.head_commit.message, 'chore(release)')) }} steps: - uses: actions/checkout@v2 with: diff --git a/.versionrc.json b/.versionrc.json deleted file mode 100644 index 5d79ef30..00000000 --- a/.versionrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "releaseCommitMessageFormat": "chore(release): {{currentTag}} [skip ci]" -} diff --git a/package.json b/package.json index 944f96d0..ad1ec9f2 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "format": "prettier --write \"**/*.+(js|jsx|json|scss|css|md)\"", "release": "standard-version", "release:dry": "standard-version --dry-run", - "pre-release": "standard-version --prerelease --skip.changelog" + "pre-release": "standard-version --prerelease --skip.changelog --releaseCommitMessageFormat 'chore(prerelease): {{currentTag}}'" }, "husky": { "hooks": { From b1b1b39571eee2d17abb05d40b92e1e24dd65d42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Kami=C5=84ski?= <aundumla@gmail.com> Date: Tue, 1 Feb 2022 11:22:50 +0100 Subject: [PATCH 086/211] feat: DAI (#74) --- src/assets/svg/tokens/dai.svg | 10 ++++++++++ src/config/addresses/tokens/tokens.l1.js | 13 +++++++++++++ src/config/addresses/tokens/tokens.l2.js | 13 +++++++++++++ 3 files changed, 36 insertions(+) create mode 100644 src/assets/svg/tokens/dai.svg diff --git a/src/assets/svg/tokens/dai.svg b/src/assets/svg/tokens/dai.svg new file mode 100644 index 00000000..d75ae9fc --- /dev/null +++ b/src/assets/svg/tokens/dai.svg @@ -0,0 +1,10 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"> + <linearGradient id="a" gradientUnits="userSpaceOnUse" x1="300" y1="685" x2="300" y2="-63" + gradientTransform="matrix(1 0 0 -1 0 600)"> + <stop offset="0" stop-color="#f9a606"/> + <stop offset="1" stop-color="#fbcc5f"/> + </linearGradient> + <circle cx="300" cy="300" r="300" fill="url(#a)" class="icon-background"/> + <path d="M477.9 250.5h-35.6c-19.6-54.4-72.3-91.7-141.8-91.7H186.2v91.7h-39.7v32.9h39.7v34.5h-39.7v32.9h39.7v90.6h114.3c68.7 0 121-37 141.1-90.6h36.3v-32.9h-28.3c.7-5.8 1.1-11.8 1.1-17.8v-.8c0-5.4-.3-10.7-.8-15.9H478v-32.9zm-259.7-62.4h82.3c51 0 88.9 25.1 106.4 62.3H218.2v-62.3zm82.3 223.7h-82.3v-61.1h188.5c-17.6 36.6-55.4 61.1-106.2 61.1zm117.1-111c0 5.8-.4 11.5-1.2 17H218.2v-34.5h198.3c.7 5.4 1.1 11 1.1 16.7v.8z" + fill="#fff"/> +</svg> diff --git a/src/config/addresses/tokens/tokens.l1.js b/src/config/addresses/tokens/tokens.l1.js index 002bbaf2..6a8bfd43 100644 --- a/src/config/addresses/tokens/tokens.l1.js +++ b/src/config/addresses/tokens/tokens.l1.js @@ -74,5 +74,18 @@ export const L1Tokens = [ [ChainType.MAIN.id]: '', [ChainType.GOERLI.id]: '0xBd97097dF545cc9734b96A5f3C5b1752C9179649' } + }, + { + name: 'DAI', + symbol: 'DAI', + decimals: 18, + bridgeAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x3ebB6C28BD63aDa2feA81f1e6c5a50aFe53B5feE' + }, + tokenAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x11fE4B6AE13d2a6055C8D9cF65c55bac32B5d844' + } } ]; diff --git a/src/config/addresses/tokens/tokens.l2.js b/src/config/addresses/tokens/tokens.l2.js index 49789db7..a68503db 100644 --- a/src/config/addresses/tokens/tokens.l2.js +++ b/src/config/addresses/tokens/tokens.l2.js @@ -78,5 +78,18 @@ export const L2Tokens = [ [ChainType.MAIN.id]: '', [ChainType.GOERLI.id]: '0x1a53260bb912e49d668ae4ea8c4b5c1ebf1441f2acc1fd7fde74836738ed8da' } + }, + { + name: 'DAI', + symbol: 'DAI', + decimals: 18, + bridgeAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x015605ab0d2a2883dd72fe014bb997578fe8ce73caa91d1c0973a68efc6a43c5' + }, + tokenAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x00da19dab05e9f3cd09c3aa0d8046415b3d7f7dbbd83e1c2e4946792298fbe28' + } } ]; From 025b022c83d7288ba8cab7e8287f1cd4cc0beda1 Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Tue, 1 Feb 2022 10:24:14 +0000 Subject: [PATCH 087/211] chore(prerelease): 0.0.1-24 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ad1ec9f2..a1822445 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "0.0.1-23", + "version": "0.0.1-24", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 38356b3e3917761654c04422c495e921d78e6b48 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 1 Feb 2022 12:29:14 +0200 Subject: [PATCH 088/211] fix: remove MIM and FRAX tokens (#77) --- src/config/addresses/tokens/tokens.l1.js | 26 ------------------------ src/config/addresses/tokens/tokens.l2.js | 26 ------------------------ yarn.lock | 12 ++--------- 3 files changed, 2 insertions(+), 62 deletions(-) diff --git a/src/config/addresses/tokens/tokens.l1.js b/src/config/addresses/tokens/tokens.l1.js index 6a8bfd43..c047863d 100644 --- a/src/config/addresses/tokens/tokens.l1.js +++ b/src/config/addresses/tokens/tokens.l1.js @@ -49,32 +49,6 @@ export const L1Tokens = [ [ChainType.GOERLI.id]: '0x509Ee0d083DdF8AC028f2a56731412edD63223B9' } }, - { - name: 'Magic Internet Money', - symbol: 'MIM', - decimals: 18, - bridgeAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x865C602d591eB18e946e9edF73895F6e699EB118' - }, - tokenAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x86124F8CF3C4AB702cEF895483067e46CE8764f9' - } - }, - { - name: 'Frax', - symbol: 'FRAX', - decimals: 18, - bridgeAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x9818b35b62B1B394614f97b5e8BC158907E4eb1C' - }, - tokenAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0xBd97097dF545cc9734b96A5f3C5b1752C9179649' - } - }, { name: 'DAI', symbol: 'DAI', diff --git a/src/config/addresses/tokens/tokens.l2.js b/src/config/addresses/tokens/tokens.l2.js index a68503db..02994e5e 100644 --- a/src/config/addresses/tokens/tokens.l2.js +++ b/src/config/addresses/tokens/tokens.l2.js @@ -53,32 +53,6 @@ export const L2Tokens = [ [ChainType.GOERLI.id]: '0x386e8d061177f19b3b485c20e31137e6f6bc497cc635ccdfcab96fadf5add6a' } }, - { - name: 'Magic Internet Money', - symbol: 'MIM', - decimals: 18, - bridgeAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x341747554ec54280d2e92eab57295055955fd1e8ec2292910163ca60c85e74f' - }, - tokenAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x1dd62766ff2a0d3b996857e6a04490c74649386dc52dc4b6153b9acf5f4cae3' - } - }, - { - name: 'Frax', - symbol: 'FRAX', - decimals: 18, - bridgeAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x254e681ffbf99c79e9e56aa38b2212914cadafa97d6c4f470589b1d43932a5f' - }, - tokenAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x1a53260bb912e49d668ae4ea8c4b5c1ebf1441f2acc1fd7fde74836738ed8da' - } - }, { name: 'DAI', symbol: 'DAI', diff --git a/yarn.lock b/yarn.lock index ce42c7ad..452cf635 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2545,14 +2545,6 @@ jest-diff "^27.0.0" pretty-format "^27.0.0" -"@types/jest@^26.0.24": - version "26.0.24" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.24.tgz#943d11976b16739185913a1936e0de0c4a7d595a" - integrity sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w== - dependencies: - jest-diff "^26.0.0" - pretty-format "^26.0.0" - "@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8": version "7.0.9" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" @@ -10064,7 +10056,7 @@ jest-config@^26.6.3: micromatch "^4.0.2" pretty-format "^26.6.2" -jest-diff@^26.0.0, jest-diff@^26.6.2: +jest-diff@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== @@ -13540,7 +13532,7 @@ pretty-error@^2.1.1: lodash "^4.17.20" renderkid "^2.0.4" -pretty-format@^26.0.0, pretty-format@^26.6.0, pretty-format@^26.6.2: +pretty-format@^26.6.0, pretty-format@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== From 7283a48e5e81252c2035e1734468874e00a01fa0 Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Tue, 1 Feb 2022 10:30:42 +0000 Subject: [PATCH 089/211] chore(prerelease): 0.0.1-25 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a1822445..48e51be8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "0.0.1-24", + "version": "0.0.1-25", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 15e97d2bb299f0b406a58dda12d6232c036fd152 Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Mon, 7 Feb 2022 09:06:14 +0000 Subject: [PATCH 090/211] chore(release): 0.0.1 --- CHANGELOG.md | 5 +++++ package.json | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..3b6d8d70 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +### [0.0.1](https://github.com/starkware-libs/starkgate-frontend/compare/v0.0.1-25...v0.0.1) (2022-02-07) diff --git a/package.json b/package.json index 48e51be8..21342f68 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "0.0.1-25", + "version": "0.0.1", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From b743b85be4d573a93e3dbfe1e58fdbd8042a5e61 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 8 Feb 2022 16:10:45 +0200 Subject: [PATCH 091/211] feat(toasts): add link to transfer log (#79) --- src/__tests__/utils/object.spec.js | 24 +++++++++++++++ src/components/Features/Account/Account.js | 12 ++++++-- .../Features/Bridge/Bridge.hooks.js | 29 ++++++++++++++----- src/components/Features/Bridge/Bridge.js | 4 +-- .../Features/Bridge/Bridge.slice.js | 15 ++++++++-- .../Features/ToastProvider/ToastProvider.js | 12 ++++++++ .../TransferLog/TransferLog.module.scss | 7 +++++ .../CompleteTransferToL1Toast.js | 8 ++++- .../UI/Toast/ToastFooter/ToastFooter.js | 26 +++++++++++++++++ .../Toast/ToastFooter/ToastFooter.module.scss | 20 +++++++++++++ .../Toast/ToastFooter/ToastFooter.strings.js | 3 ++ .../Toast/ToastHeader/ToastHeader.module.scss | 2 +- .../UI/Toast/TransferToast/TransferToast.js | 9 ++++-- .../TransferLogContainer.js | 25 +++++++++------- src/config/strings.json | 1 + src/styles/colors.module.scss | 1 + src/utils/object.js | 4 +++ 17 files changed, 172 insertions(+), 30 deletions(-) create mode 100644 src/__tests__/utils/object.spec.js create mode 100644 src/components/UI/Toast/ToastFooter/ToastFooter.js create mode 100644 src/components/UI/Toast/ToastFooter/ToastFooter.module.scss create mode 100644 src/components/UI/Toast/ToastFooter/ToastFooter.strings.js diff --git a/src/__tests__/utils/object.spec.js b/src/__tests__/utils/object.spec.js new file mode 100644 index 00000000..431e61b2 --- /dev/null +++ b/src/__tests__/utils/object.spec.js @@ -0,0 +1,24 @@ +import {findIndexById} from '../../utils'; + +describe('findIndexById', () => { + it("should return the matching-object's index (Number), accourding it's 'id'.", () => { + const array = [{id: '0cbff33f'}, {id: '11a083e3'}]; + const resultIndex = findIndexById(array, '0cbff33f'); + expect(resultIndex).toEqual(0); + }); + + it('should return -1 if no matching object', () => { + const array = [{id: '0cbff33f'}, {id: '11a083e3'}]; + const resultIndex = findIndexById(array, '153w9f6e'); + expect(resultIndex).toEqual(-1); + }); + + it("should return -1 (Number) for empty 'array' or falsy 'id', but allows 'id' to be 0 or '0'", () => { + const array = [{id: '0cbff33f'}, {id: '0'}, {id: 0}]; + expect(findIndexById([], '0cbff33f')).toEqual(-1); + expect(findIndexById(array, undefined)).toEqual(-1); + expect(findIndexById(array, null)).toEqual(-1); + expect(findIndexById(array, '0')).toEqual(1); + expect(findIndexById(array, 0)).toEqual(2); + }); +}); diff --git a/src/components/Features/Account/Account.js b/src/components/Features/Account/Account.js index fde1df5f..851178ec 100644 --- a/src/components/Features/Account/Account.js +++ b/src/components/Features/Account/Account.js @@ -1,9 +1,11 @@ +import PropTypes from 'prop-types'; import React from 'react'; import {LINKS} from '../../../constants'; import {useCompleteTransferToL1} from '../../../hooks'; import {useAccountTransfers} from '../../../providers/TransfersProvider'; import {useWallets} from '../../../providers/WalletsProvider'; +import {findIndexById} from '../../../utils'; import { AccountAddress, BackButton, @@ -19,7 +21,7 @@ import {TransferLog} from '../TransferLog/TransferLog'; import styles from './Account.module.scss'; import {TITLE_TXT} from './Account.strings'; -export const Account = () => { +export const Account = ({transferId}) => { const {showTransferMenu} = useBridgeActions(); const {account, chainId, resetWallet} = useWallets(); const transfers = useAccountTransfers(account); @@ -53,9 +55,15 @@ export const Account = () => { {isL2 && ( <LinkButton text={LINKS.VOYAGER.text} url={LINKS.VOYAGER.accountUrl(chainId, account)} /> )} - <TransferLogContainer>{renderTransfers()}</TransferLogContainer> + <TransferLogContainer transferIndex={findIndexById(transfers, transferId)}> + {renderTransfers()} + </TransferLogContainer> <LogoutButton isDisabled={isL2} onClick={resetWallet} /> </div> </Menu> ); }; + +Account.propTypes = { + transferId: PropTypes.string +}; diff --git a/src/components/Features/Bridge/Bridge.hooks.js b/src/components/Features/Bridge/Bridge.hooks.js index cea85df9..9aa6e6ef 100644 --- a/src/components/Features/Bridge/Bridge.hooks.js +++ b/src/components/Features/Bridge/Bridge.hooks.js @@ -3,21 +3,34 @@ import {useDispatch, useSelector} from 'react-redux'; import {MenuType} from '../../../enums'; import {selectBridge} from './Bridge.selectors'; -import {showMenuAction} from './Bridge.slice'; +import {showMenuAction, resetMenuPropsAction} from './Bridge.slice'; export const useBridgeData = () => ({ ...useSelector(selectBridge) }); -export const useBridgeActions = () => ({ - showAccountMenu: useShowBridgeMenu(MenuType.ACCOUNT), - showTransferMenu: useShowBridgeMenu(MenuType.TRANSFER), - showSelectTokenMenu: useShowBridgeMenu(MenuType.SELECT_TOKEN) -}); +export const useBridgeActions = () => { + return { + showAccountMenu: useShowBridgeMenu(MenuType.ACCOUNT), + showTransferMenu: useShowBridgeMenu(MenuType.TRANSFER), + showSelectTokenMenu: useShowBridgeMenu(MenuType.SELECT_TOKEN), + resetMenuProps: useResetMenuProps() + }; +}; + +const useShowBridgeMenu = menu => { + const dispatch = useDispatch(); + return useCallback( + menuProps => { + dispatch(showMenuAction({menu, menuProps})); + }, + [dispatch] + ); +}; -const useShowBridgeMenu = type => { +const useResetMenuProps = () => { const dispatch = useDispatch(); return useCallback(() => { - dispatch(showMenuAction(type)); + dispatch(resetMenuPropsAction()); }, [dispatch]); }; diff --git a/src/components/Features/Bridge/Bridge.js b/src/components/Features/Bridge/Bridge.js index 0fa14160..2a964b32 100644 --- a/src/components/Features/Bridge/Bridge.js +++ b/src/components/Features/Bridge/Bridge.js @@ -6,7 +6,7 @@ import {useBridgeData} from './Bridge.hooks'; import styles from './Bridge.module.scss'; export const Bridge = () => { - const {menu} = useBridgeData(); + const {menu, menuProps} = useBridgeData(); const renderMenu = () => { switch (menu) { @@ -15,7 +15,7 @@ export const Bridge = () => { case MenuType.SELECT_TOKEN: return <SelectToken />; case MenuType.ACCOUNT: - return <Account />; + return <Account {...menuProps[MenuType.ACCOUNT]} />; } }; diff --git a/src/components/Features/Bridge/Bridge.slice.js b/src/components/Features/Bridge/Bridge.slice.js index 2f86d126..03fa6be1 100644 --- a/src/components/Features/Bridge/Bridge.slice.js +++ b/src/components/Features/Bridge/Bridge.slice.js @@ -3,7 +3,10 @@ import {createSlice} from '@reduxjs/toolkit'; import {MenuType} from '../../../enums'; const initialState = { - menu: MenuType.TRANSFER + menu: MenuType.TRANSFER, + menuProps: { + [MenuType.ACCOUNT]: {transferId: null} + } }; const bridgeSlice = createSlice({ @@ -11,11 +14,17 @@ const bridgeSlice = createSlice({ initialState, reducers: { showMenuAction(state, action) { - state.menu = action.payload; + state.menu = action.payload.menu; + state.menuProps = { + [action.payload.menu]: action.payload.menuProps + }; + }, + resetMenuPropsAction(state) { + state.menuProps[state.menu] = initialState.menuProps[state.menu]; } } }); -export const {showMenuAction, resetAction} = bridgeSlice.actions; +export const {showMenuAction, resetAction, resetMenuPropsAction} = bridgeSlice.actions; export default bridgeSlice.reducer; diff --git a/src/components/Features/ToastProvider/ToastProvider.js b/src/components/Features/ToastProvider/ToastProvider.js index 95e3b807..29c21a11 100644 --- a/src/components/Features/ToastProvider/ToastProvider.js +++ b/src/components/Features/ToastProvider/ToastProvider.js @@ -14,6 +14,8 @@ import { import {useCompleteTransferToL1, usePrevious} from '../../../hooks'; import {useTransfers} from '../../../providers/TransfersProvider'; import {getFullTime} from '../../../utils'; +import {useBridgeActions} from '../../Features/Bridge/Bridge.hooks'; +import {useIsL1, useIsL2} from '../../Features/Transfer/Transfer.hooks'; import {ToastBody, TransferToast, CompleteTransferToL1Toast} from '../../UI'; import styles from './ToastProvider.module.scss'; import {ALPHA_DISCLAIMER_MSG} from './ToastProvider.strings'; @@ -24,6 +26,9 @@ export const ToastProvider = () => { const toastsMap = useRef({}); const toastsDismissed = useRef({}); const completeTransferToL1 = useCompleteTransferToL1(); + const {showAccountMenu} = useBridgeActions(); + const [, swapToL1] = useIsL1(); + const [, swapToL2] = useIsL2(); useEffect(() => { showAlphaDisclaimerToast(); @@ -99,6 +104,7 @@ export const ToastProvider = () => { isLoading={isLoading} transfer={transfer} onClose={() => dismissToast(transfer)} + onTransferLogLinkClick={() => goToTransferLog(transfer)} /> ); @@ -109,6 +115,7 @@ export const ToastProvider = () => { onClose={() => dismissToast(transfer)} onCompleteTransfer={() => onCompleteTransferClick(transfer)} onDismiss={() => dismissToast(transfer)} + onTransferLogLinkClick={() => goToTransferLog(transfer)} /> ); @@ -127,6 +134,11 @@ export const ToastProvider = () => { dismissToast(transfer); }; + const goToTransferLog = transfer => { + transfer.type === ActionType.TRANSFER_TO_L2 ? swapToL1() : swapToL2(); + showAccountMenu({transferId: transfer.id}); + }; + return ( <Toaster containerClassName={styles.toastProvider} diff --git a/src/components/Features/TransferLog/TransferLog.module.scss b/src/components/Features/TransferLog/TransferLog.module.scss index f6fd81b9..c00bb6df 100644 --- a/src/components/Features/TransferLog/TransferLog.module.scss +++ b/src/components/Features/TransferLog/TransferLog.module.scss @@ -3,6 +3,7 @@ $color: $--color-alpha-6; $hr-color: $--color-alpha-3; $error-color: $--color-error; +$marker-color: $--color-beta-1; .transferLog { display: flex; @@ -11,6 +12,8 @@ $error-color: $--color-error; font-size: 15px; line-height: 21px; margin: 10px 5px; + padding-left: 5px; + position: relative; &:nth-child(2) { margin-top: 20px; @@ -56,3 +59,7 @@ hr { border: 1px solid $hr-color; } } + +.markered-transfer { + background-color: $marker-color; +} diff --git a/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.js b/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.js index 02ac1165..f2a0d0c9 100644 --- a/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.js +++ b/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.js @@ -7,6 +7,7 @@ import {useColors} from '../../../../hooks'; import {TransferData} from '../../../Features'; import {ToastBody} from '../ToastBody/ToastBody'; import {ToastButton, ToastButtons} from '../ToastButton/ToastButton'; +import {ToastFooter, TransferLogLink} from '../ToastFooter/ToastFooter'; import {ToastHeader} from '../ToastHeader/ToastHeader'; import {ToastSeparator} from '../ToastSeparator/ToastSeparator'; import styles from './CompleteTransferToL1Toast.module.scss'; @@ -22,6 +23,7 @@ export const CompleteTransferToL1Toast = ({ transfer, onDismiss, onCompleteTransfer, + onTransferLogLinkClick, onClose }) => { const {colorBeta, colorOmega1} = useColors(); @@ -54,6 +56,9 @@ export const CompleteTransferToL1Toast = ({ </ToastButtons> <ToastSeparator /> <TransferData style={{fontSize: '10px'}} transfer={transfer} /> + <ToastFooter> + <TransferLogLink onClick={onTransferLogLinkClick} /> + </ToastFooter> </div> </div> </div> @@ -66,5 +71,6 @@ CompleteTransferToL1Toast.propTypes = { transfer: PropTypes.object, onDismiss: PropTypes.func, onCompleteTransfer: PropTypes.func, - onClose: PropTypes.func + onClose: PropTypes.func, + onTransferLogLinkClick: PropTypes.func }; diff --git a/src/components/UI/Toast/ToastFooter/ToastFooter.js b/src/components/UI/Toast/ToastFooter/ToastFooter.js new file mode 100644 index 00000000..a81669c7 --- /dev/null +++ b/src/components/UI/Toast/ToastFooter/ToastFooter.js @@ -0,0 +1,26 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import styles from './ToastFooter.module.scss'; +import {TRANSFER_LOG_LINK_BTN_TXT} from './ToastFooter.strings'; + +export const ToastFooter = ({children}) => { + return <div className={styles.toastFooter}>{children}</div>; +}; + +export const TransferLogLink = ({onClick}) => { + return ( + <div className={styles.transferLogLink} onClick={onClick}> + {TRANSFER_LOG_LINK_BTN_TXT} + </div> + ); +}; + +ToastFooter.propTypes = { + children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) +}; + +TransferLogLink.propTypes = { + text: PropTypes.string, + onClick: PropTypes.func +}; diff --git a/src/components/UI/Toast/ToastFooter/ToastFooter.module.scss b/src/components/UI/Toast/ToastFooter/ToastFooter.module.scss new file mode 100644 index 00000000..1b335f33 --- /dev/null +++ b/src/components/UI/Toast/ToastFooter/ToastFooter.module.scss @@ -0,0 +1,20 @@ +@import '../../../../index'; + +$color: $--color-omega; +$colorHover: $--color-omega-1; + +.toastFooter { + margin-bottom: 5px; + display: flex; + flex-flow: column nowrap; +} + +.transferLogLink { + cursor: pointer; + font-size: 11px; + line-height: 18px; + color: $color; + width: 114px; + text-decoration: underline; + align-self: flex-end; +} diff --git a/src/components/UI/Toast/ToastFooter/ToastFooter.strings.js b/src/components/UI/Toast/ToastFooter/ToastFooter.strings.js new file mode 100644 index 00000000..b99257f9 --- /dev/null +++ b/src/components/UI/Toast/ToastFooter/ToastFooter.strings.js @@ -0,0 +1,3 @@ +import {getString} from '../../../../utils'; + +export const TRANSFER_LOG_LINK_BTN_TXT = getString('toasts.transfer_log_link'); diff --git a/src/components/UI/Toast/ToastHeader/ToastHeader.module.scss b/src/components/UI/Toast/ToastHeader/ToastHeader.module.scss index f069b18f..2029291a 100644 --- a/src/components/UI/Toast/ToastHeader/ToastHeader.module.scss +++ b/src/components/UI/Toast/ToastHeader/ToastHeader.module.scss @@ -15,7 +15,7 @@ $color-title: $--color-black; } .close { - margin-left: 25px; + margin-left: 40px; cursor: pointer; } } diff --git a/src/components/UI/Toast/TransferToast/TransferToast.js b/src/components/UI/Toast/TransferToast/TransferToast.js index 905d9b6a..d011b8f7 100644 --- a/src/components/UI/Toast/TransferToast/TransferToast.js +++ b/src/components/UI/Toast/TransferToast/TransferToast.js @@ -3,11 +3,12 @@ import React from 'react'; import {isConsumed, isPending, isRejected} from '../../../../enums'; import {TransferData} from '../../../Features'; +import {ToastFooter, TransferLogLink} from '../ToastFooter/ToastFooter'; import {ToastHeader} from '../ToastHeader/ToastHeader'; import {ToastSeparator} from '../ToastSeparator/ToastSeparator'; import {CONSUMED_TXT, PENDING_TXT, REJECTED_TXT} from './TransferToast.strings'; -export const TransferToast = ({transfer, isLoading, onClose}) => { +export const TransferToast = ({transfer, isLoading, onTransferLogLinkClick, onClose}) => { const getTitle = () => { const {status} = transfer; if (isPending(status)) { @@ -26,6 +27,9 @@ export const TransferToast = ({transfer, isLoading, onClose}) => { <ToastHeader title={getTitle()} withClose={!isLoading} onClose={onClose} /> <ToastSeparator /> <TransferData style={{fontSize: '12px'}} transfer={transfer} /> + <ToastFooter> + <TransferLogLink onClick={onTransferLogLinkClick} /> + </ToastFooter> </div> ); }; @@ -33,5 +37,6 @@ export const TransferToast = ({transfer, isLoading, onClose}) => { TransferToast.propTypes = { transfer: PropTypes.object, isLoading: PropTypes.bool, - onClose: PropTypes.func + onClose: PropTypes.func, + onTransferLogLinkClick: PropTypes.func }; diff --git a/src/components/UI/TransferLogContainer/TransferLogContainer.js b/src/components/UI/TransferLogContainer/TransferLogContainer.js index 81047fb5..ab5642ed 100644 --- a/src/components/UI/TransferLogContainer/TransferLogContainer.js +++ b/src/components/UI/TransferLogContainer/TransferLogContainer.js @@ -3,6 +3,7 @@ import React, {useState} from 'react'; import {ReactComponent as CollapseIcon} from '../../../assets/svg/icons/collapse.svg'; import {toClasses} from '../../../utils'; +import {useBridgeActions} from '../../Features/Bridge/Bridge.hooks'; import styles from './TransferLogContainer.module.scss'; import { EMPTY_MSG_TXT, @@ -11,26 +12,27 @@ import { VIEW_MORE_TXT } from './TransferLogContainer.strings'; -export const TransferLogContainer = ({children}) => { +export const TransferLogContainer = ({transferIndex, children}) => { + const {resetMenuProps} = useBridgeActions(); const [showChildren, setShowChildren] = useState(false); const toggleShowChildren = () => { - setShowChildren(!showChildren); + transferIndex > -1 ? resetMenuProps() : setShowChildren(!showChildren); }; const renderChildren = () => { if (!children) { return <div className={styles.empty}>{EMPTY_MSG_TXT}</div>; - } else if (!showChildren) { - return ( - <div className={styles.viewMore}> - {Array.isArray(children) ? children.length : 1} {OVERVIEW_TXT}{' '} - <span onClick={toggleShowChildren}>{VIEW_MORE_TXT}</span> - </div> - ); - } else { + } else if (showChildren || transferIndex > -1) { return children; } + + return ( + <div className={styles.viewMore}> + {Array.isArray(children) ? children.length : 1} {OVERVIEW_TXT}{' '} + <span onClick={toggleShowChildren}>{VIEW_MORE_TXT}</span> + </div> + ); }; return ( @@ -49,5 +51,6 @@ export const TransferLogContainer = ({children}) => { }; TransferLogContainer.propTypes = { - children: PropTypes.oneOfType([PropTypes.array, PropTypes.object]) + children: PropTypes.oneOfType([PropTypes.array, PropTypes.object]), + transferIndex: PropTypes.number }; diff --git a/src/config/strings.json b/src/config/strings.json index 67815cf3..551dbc74 100644 --- a/src/config/strings.json +++ b/src/config/strings.json @@ -85,6 +85,7 @@ }, "toasts": { "alpha_disclaimer_msg": "This is an ALPHA version of StarkNet, and its Bridge. As such, deyals may occur, and catastrophic bugs may lurk. Thanks, OGs, for trying it at this early stage.", + "transfer_log_link": "View on Transfer Log", "pendingTransfer": { "pending_txt": "Waiting for transaction to be accepted on L2", "consumed_txt": "Transaction accepted on L2", diff --git a/src/styles/colors.module.scss b/src/styles/colors.module.scss index 1b42622c..3e29325e 100644 --- a/src/styles/colors.module.scss +++ b/src/styles/colors.module.scss @@ -12,6 +12,7 @@ $--color-alpha-5-hover: #494a81; $--color-alpha-6: #8b8dc2; $--color-alpha-6-hover: #999bc5; $--color-beta: #f6643c; +$--color-beta-1: rgba(246, 100, 60, 0.56); $--color-gamma: #69b7f9; $--color-gamma-1: #1595ff; $--color-omega: #5f666c; diff --git a/src/utils/object.js b/src/utils/object.js index c2f1ba4d..532fc2da 100644 --- a/src/utils/object.js +++ b/src/utils/object.js @@ -22,3 +22,7 @@ export const evaluate = (template, model) => { return ''; } }; + +export const findIndexById = (array, id) => { + return array.findIndex(item => item.id === id); +}; From 89434124791da186788d51f6e3bc54c027fdbeee Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Tue, 8 Feb 2022 14:12:08 +0000 Subject: [PATCH 092/211] chore(prerelease): 0.0.2-0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 21342f68..1422fcab 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "0.0.1", + "version": "0.0.2-0", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 9a84b05142a8ea44e2e2dd0a39aba39f35b327b4 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Mon, 14 Feb 2022 14:35:47 +0200 Subject: [PATCH 093/211] feat: use blockNumber=pending for balanceOf calls (#58) --- package.json | 4 ++-- src/api/erc20.js | 10 ++++++++-- src/hooks/useEventListener.js | 4 ++-- src/hooks/useTransfer.js | 4 ++-- src/libs/index.js | 2 ++ src/libs/starknet.js | 4 ++++ src/{ => libs}/web3.js | 0 .../BlockHashProvider/BlockHashProvider.js | 7 +++---- .../TransfersProvider/TransfersProvider.js | 4 ++-- .../WalletsProvider/WalletsProvider.js | 9 +++------ .../WalletsProvider/wallets-reducer.js | 1 - src/services/wallet-handlers/argent-handler.js | 2 +- src/utils/contract.js | 17 +++++++---------- src/utils/hash.js | 11 +++++------ src/utils/number.js | 15 +++++---------- yarn.lock | 16 ++++++++-------- 16 files changed, 54 insertions(+), 56 deletions(-) create mode 100644 src/libs/index.js create mode 100644 src/libs/starknet.js rename src/{ => libs}/web3.js (100%) diff --git a/package.json b/package.json index 1422fcab..38bc6107 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ ] }, "dependencies": { - "@argent/get-starknet": "^0.1.4", + "@argent/get-starknet": "^1.1.3", "@headlessui/react": "^1.4.2", "@metamask/onboarding": "^1.0.1", "@reduxjs/toolkit": "^1.6.2", @@ -56,7 +56,7 @@ "react-hot-toast": "^2.1.1", "react-redux": "^7.2.6", "react-scripts": "4.0.3", - "starknet": "^2.5.0", + "starknet": "^3.0.0", "use-async-memo": "^1.2.3", "use-deep-compare-effect": "^1.8.1", "use-wallet": "^0.13.4", diff --git a/src/api/erc20.js b/src/api/erc20.js index c14d18f7..7a7ec91b 100644 --- a/src/api/erc20.js +++ b/src/api/erc20.js @@ -1,6 +1,7 @@ +import {TransactionStatus} from '../enums'; +import {web3} from '../libs'; import {parseFromDecimals, parseFromUint256} from '../utils'; import {l1_callContract, l1_sendTransaction, l2_callContract} from '../utils/contract'; -import {web3} from '../web3'; export const approve = async ({spender, value, contract, options}) => { try { @@ -25,7 +26,12 @@ export const balanceOf = async ({account, decimals, contract}, isL1 = true) => { const balance = await l1_callContract(contract, 'balanceOf', [account]); return parseFromDecimals(balance, decimals); } else { - const {balance} = await l2_callContract(contract, 'balanceOf', [{account}]); + const {balance} = await l2_callContract( + contract, + 'balanceOf', + [{account}], + TransactionStatus.PENDING.toLowerCase() + ); return parseFromUint256(balance, decimals); } } catch (ex) { diff --git a/src/hooks/useEventListener.js b/src/hooks/useEventListener.js index fae509b0..542abd00 100644 --- a/src/hooks/useEventListener.js +++ b/src/hooks/useEventListener.js @@ -1,8 +1,8 @@ import {useCallback} from 'react'; -import {stark} from 'starknet'; import {useSelectedToken} from '../components/Features/Transfer/Transfer.hooks'; import {TransactionHashPrefix} from '../enums'; +import {starknet} from '../libs'; import {useL1Token, useL2Token} from '../providers/TokensProvider'; import {useL1Wallet, useL2Wallet} from '../providers/WalletsProvider'; import {txHash} from '../utils'; @@ -30,7 +30,7 @@ export const useLogMessageToL2Listener = () => { filter: { to_address: l2BridgeAddress, from_address: l1BridgeAddress, - selector: stark.getSelectorFromName('handle_deposit') + selector: starknet.stark.getSelectorFromName('handle_deposit') } }); logger.log('Event received', {event}); diff --git a/src/hooks/useTransfer.js b/src/hooks/useTransfer.js index 93a07320..632ed5ff 100644 --- a/src/hooks/useTransfer.js +++ b/src/hooks/useTransfer.js @@ -1,5 +1,4 @@ import {useCallback} from 'react'; -import {constants} from 'starknet'; import {deposit, depositEth, initiateWithdraw, withdraw} from '../api/bridge'; import {allowance, approve} from '../api/erc20'; @@ -11,6 +10,7 @@ import { } from '../components/Features/ModalProvider/ModalProvider.hooks'; import {useAmount, useSelectedToken} from '../components/Features/Transfer/Transfer.hooks'; import {ActionType, TransactionStatus} from '../enums'; +import {starknet} from '../libs'; import {useL1Token, useTokens} from '../providers/TokensProvider'; import {useTransfers} from '../providers/TransfersProvider'; import {useL1Wallet, useL2Wallet} from '../providers/WalletsProvider'; @@ -58,7 +58,7 @@ export const useTransferToL2 = () => { logger.log('Allow value is smaller then amount, sending approve tx', {amount}); await approve({ spender: bridgeAddress[chainId], - value: constants.MASK_250, + value: starknet.constants.MASK_250, contract: tokenContract, options: {from: l1Account} }); diff --git a/src/libs/index.js b/src/libs/index.js new file mode 100644 index 00000000..fbaa2845 --- /dev/null +++ b/src/libs/index.js @@ -0,0 +1,2 @@ +export * from './starknet'; +export * from './web3'; diff --git a/src/libs/starknet.js b/src/libs/starknet.js new file mode 100644 index 00000000..98040233 --- /dev/null +++ b/src/libs/starknet.js @@ -0,0 +1,4 @@ +import {getStarknet} from '@argent/get-starknet'; +import * as starknet from 'starknet'; + +export {starknet, getStarknet}; diff --git a/src/web3.js b/src/libs/web3.js similarity index 100% rename from src/web3.js rename to src/libs/web3.js diff --git a/src/providers/BlockHashProvider/BlockHashProvider.js b/src/providers/BlockHashProvider/BlockHashProvider.js index 66f80a27..5c48229b 100644 --- a/src/providers/BlockHashProvider/BlockHashProvider.js +++ b/src/providers/BlockHashProvider/BlockHashProvider.js @@ -1,19 +1,18 @@ -import {getStarknet} from '@argent/get-starknet'; import PropTypes from 'prop-types'; import React, {useCallback, useEffect, useState} from 'react'; import {useConfig} from '../../hooks'; +import {starknet} from '../../libs'; import {BlockHashContext} from './block-hash-context'; export const BlockHashProvider = ({children}) => { - const {provider} = getStarknet(); const {pollBlockNumberInterval} = useConfig(); const [blockHash, setBlockHash] = useState(); const fetchBlockHash = useCallback(async () => { - const {block_hash} = await provider.getBlock(); + const {block_hash} = await starknet.defaultProvider.getBlock(); setBlockHash(block_hash); - }, [provider]); + }, []); useEffect(() => { fetchBlockHash(); diff --git a/src/providers/TransfersProvider/TransfersProvider.js b/src/providers/TransfersProvider/TransfersProvider.js index 20bac27e..6af38379 100644 --- a/src/providers/TransfersProvider/TransfersProvider.js +++ b/src/providers/TransfersProvider/TransfersProvider.js @@ -1,4 +1,3 @@ -import {getStarknet} from '@argent/get-starknet'; import PropTypes from 'prop-types'; import React, {useEffect, useReducer} from 'react'; import useDeepCompareEffect from 'use-deep-compare-effect'; @@ -6,6 +5,7 @@ import useDeepCompareEffect from 'use-deep-compare-effect'; import {LOCAL_STORAGE_TRANSFERS_KEY} from '../../constants'; import {isCompleted} from '../../enums'; import {useLogger} from '../../hooks'; +import {starknet} from '../../libs'; import {StorageManager} from '../../services'; import {useBlockHash} from '../BlockHashProvider'; import {TransfersContext} from './transfers-context'; @@ -38,7 +38,7 @@ export const TransfersProvider = ({children}) => { } try { logger.log(`Checking tx status ${transfer.l2hash}`); - const newStatus = await getStarknet().provider.getTransactionStatus(transfer.l2hash); + const newStatus = await starknet.defaultProvider.getTransactionStatus(transfer.l2hash); if (transfer.status !== newStatus.tx_status) { logger.log( !transfer.status diff --git a/src/providers/WalletsProvider/WalletsProvider.js b/src/providers/WalletsProvider/WalletsProvider.js index 8428ddb8..28bdae4f 100644 --- a/src/providers/WalletsProvider/WalletsProvider.js +++ b/src/providers/WalletsProvider/WalletsProvider.js @@ -1,4 +1,3 @@ -import {getStarknet} from '@argent/get-starknet'; import PropTypes from 'prop-types'; import React, {useEffect, useReducer} from 'react'; import {useWallet} from 'use-wallet'; @@ -6,7 +5,7 @@ import {useWallet} from 'use-wallet'; import {useIsL1, useIsL2} from '../../components/Features/Transfer/Transfer.hooks'; import {WalletStatus} from '../../enums'; import {useConfig} from '../../hooks'; -import {web3} from '../../web3'; +import {getStarknet} from '../../libs'; import {WalletsContext} from './wallets-context'; import {actions, initialState, reducer} from './wallets-reducer'; @@ -82,8 +81,7 @@ export const WalletsProvider = ({children}) => { chainId, error: serialError, chainName: networkName, - isConnected: isConnected(), - library: web3 + isConnected: isConnected() }); }; @@ -103,8 +101,7 @@ export const WalletsProvider = ({children}) => { error, isConnected: isL2Connected, account: selectedAddress, - chainName: networkName, - library: getStarknet() + chainName: networkName }); } }; diff --git a/src/providers/WalletsProvider/wallets-reducer.js b/src/providers/WalletsProvider/wallets-reducer.js index 2d2902a5..4cc7883b 100644 --- a/src/providers/WalletsProvider/wallets-reducer.js +++ b/src/providers/WalletsProvider/wallets-reducer.js @@ -8,7 +8,6 @@ export const actions = { }; const initialWalletState = { - library: null, account: '', isConnected: false, status: WalletStatus.DISCONNECTED, diff --git a/src/services/wallet-handlers/argent-handler.js b/src/services/wallet-handlers/argent-handler.js index 366e7698..f4c530df 100644 --- a/src/services/wallet-handlers/argent-handler.js +++ b/src/services/wallet-handlers/argent-handler.js @@ -1,4 +1,4 @@ -import {getStarknet} from '@argent/get-starknet'; +import {getStarknet} from '../../libs'; export class ArgentHandler { constructor(config) { diff --git a/src/utils/contract.js b/src/utils/contract.js index a412802f..288cdd44 100644 --- a/src/utils/contract.js +++ b/src/utils/contract.js @@ -1,9 +1,6 @@ -import {getStarknet} from '@argent/get-starknet'; -import {compileCalldata, Contract, stark} from 'starknet'; - import {TransactionConsumedStatuses} from '../enums'; +import {getStarknet, starknet, web3} from '../libs'; import {getLogger} from '../services'; -import {web3} from '../web3'; export const l1_getContract = (address, ABI) => new web3.eth.Contract(ABI, address); @@ -29,11 +26,11 @@ export const l1_sendTransaction = async ( } }; -export const l2_getContract = (address, ABI) => new Contract(ABI, address, getStarknet().provider); +export const l2_getContract = (address, ABI) => new starknet.Contract(ABI, address); -export const l2_callContract = async (contract, method, args = []) => { +export const l2_callContract = async (contract, method, args = [], blockIdentifier = null) => { try { - return await contract.call(method, ...args); + return await contract.call(method, ...args, blockIdentifier); } catch (ex) { return Promise.reject(ex); } @@ -41,8 +38,8 @@ export const l2_callContract = async (contract, method, args = []) => { export const l2_sendTransaction = async (contract, method, args = {}) => { try { - const methodSelector = stark.getSelectorFromName(method); - const compiledCalldata = compileCalldata(args); + const methodSelector = starknet.stark.getSelectorFromName(method); + const compiledCalldata = starknet.compileCalldata(args); return getStarknet().signer.invokeFunction( contract.connectedTo, methodSelector, @@ -62,7 +59,7 @@ export const l2_waitForTransaction = async (hash, customStatus, retryInterval = const intervalId = setInterval(async () => { if (processing) return; logger.debug(`Checking transaction again`); - const statusPromise = getStarknet().provider.getTransactionStatus(hash); + const statusPromise = starknet.defaultProvider.getTransactionStatus(hash); processing = true; try { const {tx_status} = await statusPromise; diff --git a/src/utils/hash.js b/src/utils/hash.js index cd089620..f17bce92 100644 --- a/src/utils/hash.js +++ b/src/utils/hash.js @@ -1,6 +1,5 @@ -import {hash, number} from 'starknet'; - import {byChainId} from '../enums'; +import {starknet} from '../libs'; export const txHash = ( txHashPrefix, @@ -11,10 +10,10 @@ export const txHash = ( chainId, ...additionalData ) => { - const calldata = [number.hexToDecimalString(fromAddress), ...payload]; - const calldataHash = hash.hashCalldata(calldata); + const calldata = [starknet.number.hexToDecimalString(fromAddress), ...payload]; + const calldataHash = starknet.hash.hashCalldata(calldata); const {l2IdPrefix} = byChainId(chainId); - return hash.computeHashOnElements([ + return starknet.hash.computeHashOnElements([ txHashPrefix, toAddress, selector, @@ -26,6 +25,6 @@ export const txHash = ( export const hashEquals = (...data) => { return !!data.reduce((d1, d2) => - hash.computeHashOnElements(d1) === hash.computeHashOnElements(d2) ? d1 : '' + starknet.hash.computeHashOnElements(d1) === starknet.hash.computeHashOnElements(d2) ? d1 : '' ); }; diff --git a/src/utils/number.js b/src/utils/number.js index c3651f9c..c8012581 100644 --- a/src/utils/number.js +++ b/src/utils/number.js @@ -1,9 +1,4 @@ -import {number, uint256} from 'starknet'; - -import {web3} from '../web3'; - -const {uint256ToBN, bnToUint256} = uint256; -const {toBN} = number; +import {web3, starknet} from '../libs'; const TEN = 10; const DEFAULT_DECIMALS = 18; @@ -22,16 +17,16 @@ export const parseFromDecimals = (value, decimals = DEFAULT_DECIMALS) => { }; export const parseFromFelt = value => { - return toBN(value).toNumber(); + return starknet.number.toBN(value).toNumber(); }; export const parseToFelt = value => { - return toBN(value).toString(); + return starknet.number.toBN(value).toString(); }; export const parseToUint256 = (value, decimals = DEFAULT_DECIMALS) => { const decimalsValue = parseToDecimals(value, decimals); - const uint256 = bnToUint256(toBN(decimalsValue)); + const uint256 = starknet.uint256.bnToUint256(starknet.number.toBN(decimalsValue)); return { type: 'struct', ...uint256 @@ -39,6 +34,6 @@ export const parseToUint256 = (value, decimals = DEFAULT_DECIMALS) => { }; export const parseFromUint256 = (value, decimals = DEFAULT_DECIMALS) => { - const bnString = uint256ToBN(value).toString(); + const bnString = starknet.uint256.uint256ToBN(value).toString(); return parseFromDecimals(bnString, decimals); }; diff --git a/yarn.lock b/yarn.lock index 452cf635..95538e3f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -113,10 +113,10 @@ "@web3-react/types" "^6.0.7" tiny-warning "^1.0.3" -"@argent/get-starknet@^0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@argent/get-starknet/-/get-starknet-0.1.4.tgz#e237a05f5e547795f8a86ae286b75cb2b4aa5883" - integrity sha512-owF5nPajqjPGhirI+FyK8UbXwkzif646Wymwee8gsz/uaftc6vCh+HkKUYLmD7Y3qLnEXzHykc6VnwLHk+Velw== +"@argent/get-starknet@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@argent/get-starknet/-/get-starknet-1.1.3.tgz#d5254038fa5aa8645cf8d845373d595a7b8b4cfe" + integrity sha512-upw+/BWg2lnf5WTWI9VJFceucn/Rjq1O4zpVUZFl/jQ7bl+XXWotrQSPD0PZVyFt0rwPu4sOkDcLEdzl+kmykw== "@babel/code-frame@7.10.4": version "7.10.4" @@ -15390,10 +15390,10 @@ standard-version@^9.3.1: stringify-package "^1.0.1" yargs "^16.0.0" -starknet@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/starknet/-/starknet-2.5.0.tgz#451e0519567419823214ac967b98c66630b97139" - integrity sha512-vW07z9JcHQVxk6US2nh1A+Z2ZBWlWviy32KTBm7MUzNewT8lgRRrIK9pPH6yWxpAPaRlD/u+7C0Vjp1Nbowtjg== +starknet@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/starknet/-/starknet-3.0.0.tgz#9519bcd4730f7251286c76ca7ad37c5ef0500afc" + integrity sha512-cm51mRfF+N8RGfzsRnvpP9d+58K3snBI+zlnyKxhjAb7ZoHXd/JDRfSYYuzep+QqFQetYa3uvTPPRZ5uJIRoAg== dependencies: axios "^0.23.0" bn.js "^5.2.0" From c48da5c443ce2400e62b952cd82ae206d69255fe Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Mon, 14 Feb 2022 12:37:04 +0000 Subject: [PATCH 094/211] chore(prerelease): 0.0.2-1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 38bc6107..885062b0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "0.0.2-0", + "version": "0.0.2-1", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From a2be9b7503490d3681d6743041be9612012a5a35 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Wed, 16 Feb 2022 11:53:38 +0200 Subject: [PATCH 095/211] chore: add utils tests (#80) --- package.json | 2 +- src/__tests__/utils/date.spec.js | 13 +++++ src/__tests__/utils/hash.spec.js | 59 ++++++++++--------- src/__tests__/utils/number.spec.js | 93 ++++++++++++++++++++++++++++++ src/__tests__/utils/object.spec.js | 37 +++++++++++- src/__tests__/utils/string.spec.js | 8 +++ src/__tests__/utils/token.spec.js | 19 ++++++ src/__tests__/utils/wallet.spec.js | 31 ++++++++++ src/utils/number.js | 2 +- src/utils/wallet.js | 8 ++- 10 files changed, 239 insertions(+), 33 deletions(-) create mode 100644 src/__tests__/utils/date.spec.js create mode 100644 src/__tests__/utils/number.spec.js create mode 100644 src/__tests__/utils/string.spec.js create mode 100644 src/__tests__/utils/token.spec.js create mode 100644 src/__tests__/utils/wallet.spec.js diff --git a/package.json b/package.json index 885062b0..ecdcac7f 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "build": "react-scripts build", "build:testing": "env-cmd -f .env.testing npm run build", "start": "ESLINT_NO_DEV_ERRORS=true react-scripts start", - "test": "react-scripts test --env=jsdom", + "test": "TZ='GMT+0200' react-scripts test --env=jsdom", "eject": "react-scripts eject", "lint": "eslint .", "lint:fix": "eslint --fix .", diff --git a/src/__tests__/utils/date.spec.js b/src/__tests__/utils/date.spec.js new file mode 100644 index 00000000..c33f6de0 --- /dev/null +++ b/src/__tests__/utils/date.spec.js @@ -0,0 +1,13 @@ +import {get24Time, getDate} from '../../utils'; + +describe('getDate', () => { + it('should get date', () => { + expect(getDate(1644828892412)).toEqual('14/02/2022'); + }); +}); + +describe('get24Time', () => { + it('should get 24 time', () => { + expect(get24Time(1644828892412).endsWith(':54:52')).toBeTruthy(); + }); +}); diff --git a/src/__tests__/utils/hash.spec.js b/src/__tests__/utils/hash.spec.js index 880f804c..af417a88 100644 --- a/src/__tests__/utils/hash.spec.js +++ b/src/__tests__/utils/hash.spec.js @@ -1,34 +1,39 @@ import {ChainType, TransactionHashPrefix} from '../../enums'; import {hashEquals, txHash} from '../../utils'; -it('should calc tx hash', () => { - const from_address = '0xcf98f0a8edc6a730e1ca6b64a2528c6be031cb12'; - const to_address = '1384622289134235426972866085149619554404298343372540338336104355150443775597'; - const selector = '1285101517810983806491589552491143496277809242732141897358598292095611420389'; - const nonce = '55'; - const payload = [ - '17466514784613283928575916580398045172482824287888203092305238190565527099', - '52145000000000', - '0' - ]; +describe('txHash', () => { + it('should calc tx hash', () => { + const from_address = '0xcf98f0a8edc6a730e1ca6b64a2528c6be031cb12'; + const to_address = + '1384622289134235426972866085149619554404298343372540338336104355150443775597'; + const selector = '1285101517810983806491589552491143496277809242732141897358598292095611420389'; + const nonce = '55'; + const payload = [ + '17466514784613283928575916580398045172482824287888203092305238190565527099', + '52145000000000', + '0' + ]; - expect( - txHash( - TransactionHashPrefix.L1_HANDLER, - from_address, - to_address, - selector, - payload, - ChainType.GOERLI.id, - nonce - ) - ).toEqual('0x35ab0e4de971ac0736844ef36a05796dc41490c165373923c423f4b995983e8'); + expect( + txHash( + TransactionHashPrefix.L1_HANDLER, + from_address, + to_address, + selector, + payload, + ChainType.GOERLI.id, + nonce + ) + ).toEqual('0x35ab0e4de971ac0736844ef36a05796dc41490c165373923c423f4b995983e8'); + }); }); -it('should compare hashes', () => { - expect(hashEquals([1, 2])).toBeTruthy(); - expect(hashEquals([1, 2, 3], [1, 2, 3])).toBeTruthy(); - expect(hashEquals([1, 2, 3], [1, 2, 3], [1, 2, 3])).toBeTruthy(); - expect(hashEquals([1, 2, 3], [1, 2, 3], [1])).toBeFalsy(); - expect(hashEquals([1, 2, 3], [1, 2])).toBeFalsy(); +describe('hashEquals', () => { + it('should compare hashes', () => { + expect(hashEquals([1, 2])).toBeTruthy(); + expect(hashEquals([1, 2, 3], [1, 2, 3])).toBeTruthy(); + expect(hashEquals([1, 2, 3], [1, 2, 3], [1, 2, 3])).toBeTruthy(); + expect(hashEquals([1, 2, 3], [1, 2, 3], [1])).toBeFalsy(); + expect(hashEquals([1, 2, 3], [1, 2])).toBeFalsy(); + }); }); diff --git a/src/__tests__/utils/number.spec.js b/src/__tests__/utils/number.spec.js new file mode 100644 index 00000000..1f2c1f28 --- /dev/null +++ b/src/__tests__/utils/number.spec.js @@ -0,0 +1,93 @@ +import { + parseFromDecimals, + parseFromFelt, + parseFromUint256, + parseToDecimals, + parseToUint256, + UNIT_MAP +} from '../../utils'; + +describe('UNIT_MAP', () => { + it('should init unit map', () => { + expect(UNIT_MAP).toEqual({ + 0: 'noether', + 1: 'wei', + 1000: 'femtoether', + 1000000: 'picoether', + 1000000000: 'nano', + 1000000000000: 'micro', + 1000000000000000: 'milli', + 1000000000000000000: 'ether', + '1000000000000000000000': 'grand', + '1000000000000000000000000': 'mether', + '1000000000000000000000000000': 'gether', + '1000000000000000000000000000000': 'tether' + }); + }); + + describe('parseToDecimals', () => { + it('should parse to decimals', () => { + expect(parseToDecimals('1')).toEqual('1000000000000000000'); + expect(parseToDecimals('1', 3)).toEqual('1000'); + expect(parseToDecimals('1', 6)).toEqual('1000000'); + expect(parseToDecimals('1', 9)).toEqual('1000000000'); + expect(parseToDecimals('1', 12)).toEqual('1000000000000'); + expect(parseToDecimals('1', 15)).toEqual('1000000000000000'); + expect(parseToDecimals('1', 18)).toEqual('1000000000000000000'); + }); + }); + + describe('parseFromDecimals', () => { + it('should parse from decimals', () => { + expect(parseFromDecimals('1000000000000000000')).toEqual(1); + expect(parseFromDecimals('1000000000000000000', 3)).toEqual(1000000000000000); + expect(parseFromDecimals('1000000000000000000', 6)).toEqual(1000000000000); + expect(parseFromDecimals('1000000000000000000', 9)).toEqual(1000000000); + expect(parseFromDecimals('1000000000000000000', 12)).toEqual(1000000); + expect(parseFromDecimals('1000000000000000000', 15)).toEqual(1000); + expect(parseFromDecimals('1000000000000000000', 18)).toEqual(1); + }); + }); + + describe('parseFromFelt', () => { + it('should parse from felt', () => { + expect(parseFromFelt('0x1')).toEqual(1); + expect(parseFromFelt('0x10')).toEqual(16); + expect(parseFromFelt('0x100')).toEqual(256); + }); + }); + + describe('parseToUint256', () => { + it('should parse to uint256', () => { + expect(parseToUint256('100')).toEqual({ + high: '0x0', + low: '0x56bc75e2d63100000', + type: 'struct' + }); + expect(parseToUint256('10000')).toEqual({ + high: '0x0', + low: '0x21e19e0c9bab2400000', + type: 'struct' + }); + expect(parseToUint256('10000000')).toEqual({ + high: '0x0', + low: '0x84595161401484a000000', + type: 'struct' + }); + }); + }); + + describe('parseFromUint256', () => { + it('should parse from uint256', () => { + expect(parseFromUint256({high: '0x0', low: '0x56bc75e2d63100000', type: 'struct'})).toEqual( + 100 + ); + expect(parseFromUint256({high: '0x0', low: '0x21e19e0c9bab2400000', type: 'struct'})).toEqual( + 10000 + ); + expect( + parseFromUint256({high: '0x0', low: '0x84595161401484a000000', type: 'struct'}) + ).toEqual(10000000); + }); + }); +}); diff --git a/src/__tests__/utils/object.spec.js b/src/__tests__/utils/object.spec.js index 431e61b2..2611e903 100644 --- a/src/__tests__/utils/object.spec.js +++ b/src/__tests__/utils/object.spec.js @@ -1,4 +1,39 @@ -import {findIndexById} from '../../utils'; +import {evaluate, findIndexById, getPropertyPath, toClasses} from '../../utils'; + +describe('getPropertyPath', () => { + const obj = { + a: 1, + b: 'hello', + c: { + d: true + } + }; + it('should get property by path', () => { + expect(getPropertyPath(obj, 'a')).toEqual(1); + expect(getPropertyPath(obj, 'b')).toEqual('hello'); + expect(getPropertyPath(obj, 'c')).toEqual({ + d: true + }); + expect(getPropertyPath(obj, 'c.d')).toBeTruthy(); + }); +}); + +describe('toClasses', () => { + it('should transform array to seperated string', () => { + expect(toClasses('c1', 'c2')).toEqual('c1 c2'); + }); +}); + +describe('evaluate', () => { + it('should evaluate handlebars in template', () => { + expect(evaluate('Hello {{name}}! this is my message', {name: 'foo'})).toEqual( + 'Hello foo! this is my message' + ); + expect(evaluate('{{host}}:{{port}}', {host: 'localhost', port: '8080'})).toEqual( + 'localhost:8080' + ); + }); +}); describe('findIndexById', () => { it("should return the matching-object's index (Number), accourding it's 'id'.", () => { diff --git a/src/__tests__/utils/string.spec.js b/src/__tests__/utils/string.spec.js new file mode 100644 index 00000000..ce74fb5e --- /dev/null +++ b/src/__tests__/utils/string.spec.js @@ -0,0 +1,8 @@ +import {capitalize} from '../../utils'; + +describe('capitalize', () => { + it('should capitalize string', () => { + expect(capitalize('hello')).toEqual('Hello'); + expect(capitalize('some message')).toEqual('Some message'); + }); +}); diff --git a/src/__tests__/utils/token.spec.js b/src/__tests__/utils/token.spec.js new file mode 100644 index 00000000..f7470b0b --- /dev/null +++ b/src/__tests__/utils/token.spec.js @@ -0,0 +1,19 @@ +import {isEth} from '../../utils'; + +describe('isEth', () => { + it('should return true for eth symbol as string', () => { + expect(isEth('ETH')).toBeTruthy(); + }); + + it('should return true for eth token as object', () => { + expect(isEth({symbol: 'ETH'})).toBeTruthy(); + }); + + it('should return false for non-eth symbol as string', () => { + expect(isEth('DAI')).toBeFalsy(); + }); + + it('should return false for non-eth token as object', () => { + expect(isEth({symbol: 'DAI'})).toBeFalsy(); + }); +}); diff --git a/src/__tests__/utils/wallet.spec.js b/src/__tests__/utils/wallet.spec.js new file mode 100644 index 00000000..148116f8 --- /dev/null +++ b/src/__tests__/utils/wallet.spec.js @@ -0,0 +1,31 @@ +import {formatBalance, shortenAddress} from '../../utils'; + +describe('formatBalance', () => { + it('should format balance to 5 digits precision', () => { + expect(formatBalance(1.222243232)).toEqual(1.22224); + expect(formatBalance(3000.232143123212)).toEqual(3000.23214); + expect(formatBalance(10.000000001)).toEqual(10); + }); + + it('should return N/A for non-numbers', () => { + expect(formatBalance('')).toBe('N/A'); + expect(formatBalance(null)).toBe('N/A'); + expect(formatBalance()).toBe('N/A'); + }); +}); + +describe('shortenAddress', () => { + it('should shorten long address', () => { + expect(shortenAddress('0x9e2bd0a6b6b98f4586a867678f5ebd3dcfda02e7')).toEqual('0x9e2...2e7'); + }); + + it('should return the same address for short address', () => { + expect(shortenAddress('0x9ed0a')).toEqual('0x9ed0a'); + }); + + it('should return empty string for bad input', () => { + expect(shortenAddress('')).toBe(''); + expect(shortenAddress()).toBe(''); + expect(shortenAddress(null)).toBe(''); + }); +}); diff --git a/src/utils/number.js b/src/utils/number.js index c8012581..7061ae51 100644 --- a/src/utils/number.js +++ b/src/utils/number.js @@ -2,7 +2,7 @@ import {web3, starknet} from '../libs'; const TEN = 10; const DEFAULT_DECIMALS = 18; -const UNIT_MAP = {}; +export const UNIT_MAP = {}; for (let key in web3.utils.unitMap) { UNIT_MAP[web3.utils.unitMap[key]] = key; diff --git a/src/utils/wallet.js b/src/utils/wallet.js index 88f8b9ae..48d6a695 100644 --- a/src/utils/wallet.js +++ b/src/utils/wallet.js @@ -2,8 +2,10 @@ export const formatBalance = balance => typeof balance === 'number' ? parseFloat(balance.toFixed(5)) : 'N/A'; export const shortenAddress = account => { - if (account) { - return `${account.substring(0, 5)}...${account.substring(account.length - 3)}`; + if (!account) { + return ''; } - return ''; + return account.length <= 8 + ? account + : `${account.substring(0, 5)}...${account.substring(account.length - 3)}`; }; From 2c5a9df17acf28fb3c87bf91a245dc0f0f6e5b2e Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Wed, 16 Mar 2022 13:59:49 +0200 Subject: [PATCH 096/211] fix: update ETH token addresses and add SLF token (#84) --- src/config/addresses/tokens/tokens.l1.js | 15 ++++++++++++++- src/config/addresses/tokens/tokens.l2.js | 17 +++++++++++++++-- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/config/addresses/tokens/tokens.l1.js b/src/config/addresses/tokens/tokens.l1.js index c047863d..610adcce 100644 --- a/src/config/addresses/tokens/tokens.l1.js +++ b/src/config/addresses/tokens/tokens.l1.js @@ -7,7 +7,7 @@ export const L1Tokens = [ decimals: 18, bridgeAddress: { [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0xcf98f0A8edC6a730E1CA6B64a2528c6bE031Cb12' + [ChainType.GOERLI.id]: '0xc3511006C04EF1d78af4C8E0e74Ec18A6E64Ff9e' } }, { @@ -61,5 +61,18 @@ export const L1Tokens = [ [ChainType.MAIN.id]: '', [ChainType.GOERLI.id]: '0x11fE4B6AE13d2a6055C8D9cF65c55bac32B5d844' } + }, + { + name: 'SelfService', + symbol: 'SLF', + decimals: 6, + bridgeAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x160e7631f22035149A01420cADD1012267551181' + }, + tokenAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0xd44BB808bfE43095dBb94c83077766382D63952a' + } } ]; diff --git a/src/config/addresses/tokens/tokens.l2.js b/src/config/addresses/tokens/tokens.l2.js index 02994e5e..e256f600 100644 --- a/src/config/addresses/tokens/tokens.l2.js +++ b/src/config/addresses/tokens/tokens.l2.js @@ -7,11 +7,11 @@ export const L2Tokens = [ decimals: 18, bridgeAddress: { [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x30fab1f1cc35d6ab0a992240528e122bc46c196eebfed9d21a5f800f72f066d' + [ChainType.GOERLI.id]: '0x073314940630fd6dcda0d772d4c972c4e0a9946bef9dabf4ef84eda8ef542b82' }, tokenAddress: { [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x2dd93e385742984bf2fc887cd5d8b5ec6917d80af09cf7a00a63710ad51ba53' + [ChainType.GOERLI.id]: '0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7' } }, { @@ -65,5 +65,18 @@ export const L2Tokens = [ [ChainType.MAIN.id]: '', [ChainType.GOERLI.id]: '0x00da19dab05e9f3cd09c3aa0d8046415b3d7f7dbbd83e1c2e4946792298fbe28' } + }, + { + name: 'SelfService', + symbol: 'SLF', + decimals: 6, + bridgeAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x00fd2a9843c19436542e0ac7fc7b5cbf1d0b69fc2abea6d68591e46a5ca2d75a' + }, + tokenAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x07a39a50bf689e9430fc81fba0f4d46e245e1657e77455548ed7e32c808cfc10' + } } ]; From 9090de629df868edb96537b9d586b22977eddf02 Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Wed, 16 Mar 2022 12:01:06 +0000 Subject: [PATCH 097/211] chore(prerelease): 0.0.2-2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ecdcac7f..39a77b15 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "0.0.2-1", + "version": "0.0.2-2", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From c380e83056bbc76d37e1e2579a68531c864ab836 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Wed, 16 Mar 2022 16:08:34 +0200 Subject: [PATCH 098/211] chore: force node version (#85) --- .github/workflows/pull_request.yml | 4 ++-- .github/workflows/push.yml | 2 +- .github/workflows/tag.yml | 2 +- .npmrc | 1 + package.json | 6 +++++- 5 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 .npmrc diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 7fdc22e6..fa2a1240 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -12,7 +12,7 @@ jobs: - uses: actions/setup-node@v2 with: - node-version: 14 + node-version: 16 - name: Install node_modules run: yarn @@ -29,7 +29,7 @@ jobs: - uses: actions/setup-node@v2 with: - node-version: 14 + node-version: 16 - name: Install node_modules run: yarn diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 10af6fe8..a5d29c12 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -19,7 +19,7 @@ jobs: - uses: actions/setup-node@v2 with: - node-version: 14 + node-version: 16 - name: Install node_modules run: yarn diff --git a/.github/workflows/tag.yml b/.github/workflows/tag.yml index 1f8592b4..1edb34af 100644 --- a/.github/workflows/tag.yml +++ b/.github/workflows/tag.yml @@ -17,7 +17,7 @@ jobs: - uses: actions/setup-node@v2 with: - node-version: 14 + node-version: 16 - name: Install node_modules run: yarn diff --git a/.npmrc b/.npmrc new file mode 100644 index 00000000..b6f27f13 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/package.json b/package.json index 39a77b15..5aaab518 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "build": "react-scripts build", "build:testing": "env-cmd -f .env.testing npm run build", "start": "ESLINT_NO_DEV_ERRORS=true react-scripts start", - "test": "TZ='GMT+0200' react-scripts test --env=jsdom", + "test": "react-scripts test --env=jsdom", "eject": "react-scripts eject", "lint": "eslint .", "lint:fix": "eslint --fix .", @@ -80,5 +80,9 @@ "prop-types": "^15.7.2", "sass-loader": "^12.1.0", "standard-version": "^9.3.1" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=8.0.0" } } From 9dc49729c9cef14c016be348fe170f084d478843 Mon Sep 17 00:00:00 2001 From: CarmitKl <96685244+CarmitKl@users.noreply.github.com> Date: Tue, 22 Mar 2022 12:57:05 +0200 Subject: [PATCH 099/211] fix: redux error on switching menu "non-serializable value was detected" (#89) --- src/components/Features/Account/Account.js | 2 +- src/components/Features/SelectToken/SelectToken.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Features/Account/Account.js b/src/components/Features/Account/Account.js index 851178ec..9436e05b 100644 --- a/src/components/Features/Account/Account.js +++ b/src/components/Features/Account/Account.js @@ -43,7 +43,7 @@ export const Account = ({transferId}) => { return ( <Menu> <div className={styles.account}> - <BackButton onClick={showTransferMenu} /> + <BackButton onClick={() => showTransferMenu()} /> <MenuTitle text={TITLE_TXT(fromNetwork.name)} /> <AccountAddress address={account} /> {isL1 && ( diff --git a/src/components/Features/SelectToken/SelectToken.js b/src/components/Features/SelectToken/SelectToken.js index b1249d1b..62fd1d9d 100644 --- a/src/components/Features/SelectToken/SelectToken.js +++ b/src/components/Features/SelectToken/SelectToken.js @@ -31,7 +31,7 @@ export const SelectToken = () => { return ( <Menu> <div className={styles.selectToken}> - <BackButton onClick={showTransferMenu} /> + <BackButton onClick={() => showTransferMenu()} /> <MenuTitle text={TITLE_TXT} /> <MenuTitle color={colorBeta} text={fromNetwork.name} /> <SearchToken From 70bc4d234812a1f82d530d36ff6b208360b3a66a Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Tue, 22 Mar 2022 10:58:20 +0000 Subject: [PATCH 100/211] chore(prerelease): 0.0.2-3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5aaab518..16a1bdab 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "0.0.2-2", + "version": "0.0.2-3", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From c38e56e1d942b3350e45811a435da22472dcf00e Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 22 Mar 2022 14:51:10 +0200 Subject: [PATCH 101/211] refactor: utils (#82) --- .env.development | 2 - .env.production | 2 - .env.testing | 2 - .../utils/blockchain/starknet.spec.js | 32 ++++++ src/__tests__/utils/date.spec.js | 4 +- src/__tests__/utils/hash.spec.js | 30 +---- src/__tests__/utils/object.spec.js | 4 +- .../utils/{number.spec.js => parser.spec.js} | 6 +- .../storage.spec.js} | 32 +++--- src/__tests__/utils/string.spec.js | 4 +- src/__tests__/utils/token.spec.js | 4 +- src/__tests__/utils/wallet.spec.js | 4 +- src/api/bridge.js | 25 ++-- src/api/erc20.js | 29 +++-- .../Containers/Footer/Footer.strings.js | 4 +- src/components/Containers/Header/Header.js | 12 +- .../Containers/Header/Header.strings.js | 6 +- src/components/Features/Account/Account.js | 8 +- .../Features/Account/Account.strings.js | 5 +- src/components/Features/Login/Login.js | 8 +- .../Features/Login/Login.strings.js | 8 +- .../ModalProvider/ModalProvider.strings.js | 6 +- .../SelectToken/SelectToken.strings.js | 4 +- .../Features/ToastProvider/ToastProvider.js | 8 +- .../ToastProvider/ToastProvider.strings.js | 4 +- .../Features/Transfer/Transfer.strings.js | 9 +- .../Features/TransferLog/TransferLog.js | 10 +- .../TransferLog/TransferLog.strings.js | 4 +- .../UI/AccountAddress/AccountAddress.js | 4 +- .../AccountAddress/AccountAddress.strings.js | 4 +- .../UI/BackButton/BackButton.strings.js | 4 +- src/components/UI/Button/Button.js | 4 +- src/components/UI/Icon/Icon.js | 4 +- src/components/UI/Input/Input.js | 4 +- src/components/UI/LinkButton/LinkButton.js | 6 +- .../UI/LogoutButton/LogoutButton.strings.js | 4 +- .../UI/MaxButton/MaxButton.strings.js | 4 +- src/components/UI/Menu/Menu.js | 4 +- src/components/UI/Modal/Modal/Modal.js | 6 +- .../UI/Modal/ModalBody/ModalBody.js | 4 +- .../UI/Modal/ModalHeader/ModalHeader.js | 4 +- .../TransactionSubmittedModal.constants.js | 4 +- .../TransactionSubmittedModal.js | 14 ++- .../TransactionSubmittedModal.strings.js | 6 +- .../UI/NetworkMenu/NetworkMenu.strings.js | 4 +- src/components/UI/NetworkSwap/NetworkSwap.js | 7 +- .../UI/SearchToken/SearchToken.strings.js | 4 +- .../UI/SelectTokenRow/SelectTokenRow.js | 6 +- .../CompleteTransferToL1Toast.strings.js | 4 +- .../Toast/ToastFooter/ToastFooter.strings.js | 4 +- .../TransferToast/TransferToast.strings.js | 4 +- .../UI/TokenBalance/TokenBalance.js | 4 +- .../UI/TokenBalance/TokenBalance.strings.js | 4 +- src/components/UI/TokenInput/TokenInput.js | 4 +- .../UI/TokenInput/TokenInput.strings.js | 4 +- .../TransferButton/TransferButton.strings.js | 4 +- .../TransferLogContainer.js | 4 +- .../TransferLogContainer.strings.js | 4 +- .../UI/TransferMenuTab/TransferMenuTab.js | 7 +- .../UI/WalletButton/WalletButton.js | 4 +- .../UI/WalletButton/WalletButton.strings.js | 4 +- src/components/UI/WalletLogin/WalletLogin.js | 6 +- .../addresses/contracts/contracts.l1.js | 2 +- src/config/constants.js | 38 +++++++ src/config/{config.js => envs.js} | 5 +- src/config/strings.js | 107 ++++++++++++++++++ src/config/strings.json | 101 ----------------- src/config/wallets.js | 4 +- src/constants.js | 34 ------ src/enums/ChainType.js | 4 +- src/enums/TransactionStatus.js | 9 ++ src/hooks/useConfig.js | 2 +- src/hooks/useContract.js | 14 +-- src/hooks/useEventListener.js | 12 +- src/hooks/useLogger.js | 4 +- src/hooks/useTokenBalance.js | 4 +- src/hooks/useTransfer.js | 19 ++-- src/hooks/useTransferProgress.js | 16 +-- src/hooks/useWalletHandlerProvider.js | 6 +- src/index.js | 9 +- .../TokensProvider/TokensProvider.js | 23 ++-- .../TokensProvider/tokens-context.js | 2 +- src/providers/TokensProvider/tokens-hooks.js | 4 +- .../TransfersProvider/TransfersProvider.js | 17 ++- src/services/index.js | 3 - src/services/wallet-handlers/index.js | 2 - src/utils/blockchain/ethereum.js | 21 ++++ src/utils/blockchain/index.js | 2 + src/utils/blockchain/starknet.js | 81 +++++++++++++ src/utils/contract.js | 81 ------------- src/utils/hash.js | 23 ---- src/utils/helpers.js | 12 -- src/utils/index.js | 50 ++++++-- src/{services => utils}/logger.js | 0 src/utils/{number.js => parser.js} | 21 ++-- .../storage-manager.js => utils/storage.js} | 31 +++-- .../argent-handler.js => wallets/argent-x.js} | 4 +- src/wallets/index.js | 2 + .../metamask.js} | 2 +- 99 files changed, 647 insertions(+), 562 deletions(-) create mode 100644 src/__tests__/utils/blockchain/starknet.spec.js rename src/__tests__/utils/{number.spec.js => parser.spec.js} (98%) rename src/__tests__/{services/storage-manager.spec.js => utils/storage.spec.js} (66%) create mode 100644 src/config/constants.js rename src/config/{config.js => envs.js} (72%) create mode 100644 src/config/strings.js delete mode 100644 src/config/strings.json delete mode 100644 src/constants.js delete mode 100644 src/services/index.js delete mode 100644 src/services/wallet-handlers/index.js create mode 100644 src/utils/blockchain/ethereum.js create mode 100644 src/utils/blockchain/index.js create mode 100644 src/utils/blockchain/starknet.js delete mode 100644 src/utils/contract.js delete mode 100644 src/utils/helpers.js rename src/{services => utils}/logger.js (100%) rename src/utils/{number.js => parser.js} (56%) rename src/{services/storage-manager.js => utils/storage.js} (72%) rename src/{services/wallet-handlers/argent-handler.js => wallets/argent-x.js} (72%) create mode 100644 src/wallets/index.js rename src/{services/wallet-handlers/metamask-handler.js => wallets/metamask.js} (91%) diff --git a/.env.development b/.env.development index 3d6ba333..3bd1409a 100644 --- a/.env.development +++ b/.env.development @@ -1,7 +1,5 @@ REACT_APP_AUTO_CONNECT=true # 10 seconds REACT_APP_POLL_BALANCE_INTERVAL=10000 -# 10 seconds -REACT_APP_POLL_BLOCK_NUMBER_INTERVAL=10000 # goerli testnet REACT_APP_SUPPORTED_CHAIN_IDS=5 diff --git a/.env.production b/.env.production index 28264208..8acece38 100644 --- a/.env.production +++ b/.env.production @@ -1,6 +1,4 @@ REACT_APP_AUTO_CONNECT=true - # 1 minute - REACT_APP_POLL_BALANCE_INTERVAL=60000 # 30 seconds REACT_APP_POLL_BLOCK_NUMBER_INTERVAL=30000 # mainnet diff --git a/.env.testing b/.env.testing index f602a438..2b97f01f 100644 --- a/.env.testing +++ b/.env.testing @@ -1,6 +1,4 @@ REACT_APP_AUTO_CONNECT=true - # 30 seconds - REACT_APP_POLL_BALANCE_INTERVAL=30000 # 20 seconds REACT_APP_POLL_BLOCK_NUMBER_INTERVAL=20000 # goerli testnet diff --git a/src/__tests__/utils/blockchain/starknet.spec.js b/src/__tests__/utils/blockchain/starknet.spec.js new file mode 100644 index 00000000..ca875df9 --- /dev/null +++ b/src/__tests__/utils/blockchain/starknet.spec.js @@ -0,0 +1,32 @@ +import {ChainType, TransactionHashPrefix} from '../../../enums'; +import utils from '../../../utils'; + +describe('starknet', () => { + describe('getTransactionHash', () => { + it('should calc tx hash', () => { + const from_address = '0xcf98f0a8edc6a730e1ca6b64a2528c6be031cb12'; + const to_address = + '1384622289134235426972866085149619554404298343372540338336104355150443775597'; + const selector = + '1285101517810983806491589552491143496277809242732141897358598292095611420389'; + const nonce = '55'; + const payload = [ + '17466514784613283928575916580398045172482824287888203092305238190565527099', + '52145000000000', + '0' + ]; + + expect( + utils.blockchain.starknet.getTransactionHash( + TransactionHashPrefix.L1_HANDLER, + from_address, + to_address, + selector, + payload, + ChainType.GOERLI.id, + nonce + ) + ).toEqual('0x35ab0e4de971ac0736844ef36a05796dc41490c165373923c423f4b995983e8'); + }); + }); +}); diff --git a/src/__tests__/utils/date.spec.js b/src/__tests__/utils/date.spec.js index c33f6de0..eb37c374 100644 --- a/src/__tests__/utils/date.spec.js +++ b/src/__tests__/utils/date.spec.js @@ -1,4 +1,6 @@ -import {get24Time, getDate} from '../../utils'; +import utils from '../../utils'; + +const {get24Time, getDate} = utils.date; describe('getDate', () => { it('should get date', () => { diff --git a/src/__tests__/utils/hash.spec.js b/src/__tests__/utils/hash.spec.js index af417a88..a24e9303 100644 --- a/src/__tests__/utils/hash.spec.js +++ b/src/__tests__/utils/hash.spec.js @@ -1,32 +1,6 @@ -import {ChainType, TransactionHashPrefix} from '../../enums'; -import {hashEquals, txHash} from '../../utils'; +import utils from '../../utils'; -describe('txHash', () => { - it('should calc tx hash', () => { - const from_address = '0xcf98f0a8edc6a730e1ca6b64a2528c6be031cb12'; - const to_address = - '1384622289134235426972866085149619554404298343372540338336104355150443775597'; - const selector = '1285101517810983806491589552491143496277809242732141897358598292095611420389'; - const nonce = '55'; - const payload = [ - '17466514784613283928575916580398045172482824287888203092305238190565527099', - '52145000000000', - '0' - ]; - - expect( - txHash( - TransactionHashPrefix.L1_HANDLER, - from_address, - to_address, - selector, - payload, - ChainType.GOERLI.id, - nonce - ) - ).toEqual('0x35ab0e4de971ac0736844ef36a05796dc41490c165373923c423f4b995983e8'); - }); -}); +const {hashEquals} = utils.hash; describe('hashEquals', () => { it('should compare hashes', () => { diff --git a/src/__tests__/utils/object.spec.js b/src/__tests__/utils/object.spec.js index 2611e903..8f96cde9 100644 --- a/src/__tests__/utils/object.spec.js +++ b/src/__tests__/utils/object.spec.js @@ -1,4 +1,6 @@ -import {evaluate, findIndexById, getPropertyPath, toClasses} from '../../utils'; +import utils from '../../utils'; + +const {evaluate, findIndexById, getPropertyPath, toClasses} = utils.object; describe('getPropertyPath', () => { const obj = { diff --git a/src/__tests__/utils/number.spec.js b/src/__tests__/utils/parser.spec.js similarity index 98% rename from src/__tests__/utils/number.spec.js rename to src/__tests__/utils/parser.spec.js index 1f2c1f28..37ef3626 100644 --- a/src/__tests__/utils/number.spec.js +++ b/src/__tests__/utils/parser.spec.js @@ -1,11 +1,13 @@ -import { +import utils from '../../utils'; + +const { parseFromDecimals, parseFromFelt, parseFromUint256, parseToDecimals, parseToUint256, UNIT_MAP -} from '../../utils'; +} = utils.parser; describe('UNIT_MAP', () => { it('should init unit map', () => { diff --git a/src/__tests__/services/storage-manager.spec.js b/src/__tests__/utils/storage.spec.js similarity index 66% rename from src/__tests__/services/storage-manager.spec.js rename to src/__tests__/utils/storage.spec.js index 9eefc3ba..fdfb97fb 100644 --- a/src/__tests__/services/storage-manager.spec.js +++ b/src/__tests__/utils/storage.spec.js @@ -1,4 +1,6 @@ -import {StorageManager} from '../../services'; +import utils from '../../utils'; + +const {getItem, setItem} = utils.storage; class LocalStorageMock { constructor() { @@ -33,14 +35,14 @@ describe('StorageManager', () => { }); it('should return null for empty key', () => { - expect(StorageManager.getItem('test')).toBeNull(); + expect(getItem('test')).toBeNull(); }); it('should get item hash from local storage', () => { - StorageManager.setItem('testObject', testObject); - StorageManager.setItem('testArray', testArray); - StorageManager.setItem('testNumber', testNumber); - StorageManager.setItem('testString', testString); + setItem('testObject', testObject); + setItem('testArray', testArray); + setItem('testNumber', testNumber); + setItem('testString', testString); expect(localStorage.getItem('testObject')).toEqual( 'eyIwIjoiZXc9PSIsIjEiOiJJZz09IiwiMiI6IllRPT0iLCIzIjoiSWc9PSIsIjQiOiJPZz09IiwiNSI6Ik1RPT0iLCI2IjoiZlE9PSJ9' ); @@ -54,21 +56,21 @@ describe('StorageManager', () => { }); it('should get item from storage manager', () => { - StorageManager.setItem('testObject', testObject); - StorageManager.setItem('testArray', testArray); - StorageManager.setItem('testNumber', testNumber); - StorageManager.setItem('testString', testString); - expect(StorageManager.getItem('testObject')).toEqual(testObject); - expect(StorageManager.getItem('testArray')).toEqual(testArray); - expect(StorageManager.getItem('testNumber')).toEqual(testNumber); - expect(StorageManager.getItem('testString')).toEqual(testString); + setItem('testObject', testObject); + setItem('testArray', testArray); + setItem('testNumber', testNumber); + setItem('testString', testString); + expect(getItem('testObject')).toEqual(testObject); + expect(getItem('testArray')).toEqual(testArray); + expect(getItem('testNumber')).toEqual(testNumber); + expect(getItem('testString')).toEqual(testString); }); it('should backward compatible for saved arrays', () => { const jsonArray = JSON.stringify(testArray); localStorage.setItem('test', jsonArray); expect(localStorage.getItem('test')).toEqual(jsonArray); - expect(StorageManager.getItem('test')).toEqual(testArray); + expect(getItem('test')).toEqual(testArray); expect(localStorage.getItem('test')).toEqual( 'eyIwIjoiV3c9PSIsIjEiOiJldz09IiwiMiI6IklnPT0iLCIzIjoiWVE9PSIsIjQiOiJJZz09IiwiNSI6Ik9nPT0iLCI2IjoiTVE9PSIsIjciOiJmUT09IiwiOCI6IlhRPT0ifQ==' ); diff --git a/src/__tests__/utils/string.spec.js b/src/__tests__/utils/string.spec.js index ce74fb5e..e8ac381d 100644 --- a/src/__tests__/utils/string.spec.js +++ b/src/__tests__/utils/string.spec.js @@ -1,4 +1,6 @@ -import {capitalize} from '../../utils'; +import utils from '../../utils'; + +const {capitalize} = utils.string; describe('capitalize', () => { it('should capitalize string', () => { diff --git a/src/__tests__/utils/token.spec.js b/src/__tests__/utils/token.spec.js index f7470b0b..a6de7b7c 100644 --- a/src/__tests__/utils/token.spec.js +++ b/src/__tests__/utils/token.spec.js @@ -1,4 +1,6 @@ -import {isEth} from '../../utils'; +import utils from '../../utils'; + +const {isEth} = utils.token; describe('isEth', () => { it('should return true for eth symbol as string', () => { diff --git a/src/__tests__/utils/wallet.spec.js b/src/__tests__/utils/wallet.spec.js index 148116f8..2011a6e0 100644 --- a/src/__tests__/utils/wallet.spec.js +++ b/src/__tests__/utils/wallet.spec.js @@ -1,4 +1,6 @@ -import {formatBalance, shortenAddress} from '../../utils'; +import utils from '../../utils'; + +const {formatBalance, shortenAddress} = utils.wallet; describe('formatBalance', () => { it('should format balance to 5 digits precision', () => { diff --git a/src/api/bridge.js b/src/api/bridge.js index 7b038543..2934e38c 100644 --- a/src/api/bridge.js +++ b/src/api/bridge.js @@ -1,12 +1,11 @@ -import {parseFromDecimals, parseToDecimals, parseToFelt, parseToUint256} from '../utils'; -import {l1_callContract, l1_sendTransaction, l2_sendTransaction} from '../utils/contract'; +import utils from '../utils'; export const deposit = async ({recipient, amount, decimals, contract, options, emitter}) => { try { - return l1_sendTransaction( + return utils.blockchain.ethereum.sendTransaction( contract, 'deposit', - [parseToDecimals(amount, decimals), recipient], + [utils.parser.parseToDecimals(amount, decimals), recipient], options, emitter ); @@ -17,13 +16,13 @@ export const deposit = async ({recipient, amount, decimals, contract, options, e export const depositEth = async ({recipient, amount, contract, options, emitter}) => { try { - return l1_sendTransaction( + return utils.blockchain.ethereum.sendTransaction( contract, 'deposit', [recipient], { ...options, - value: parseToDecimals(amount) + value: utils.parser.parseToDecimals(amount) }, emitter ); @@ -34,10 +33,10 @@ export const depositEth = async ({recipient, amount, contract, options, emitter} export const withdraw = async ({recipient, amount, decimals, contract, emitter}) => { try { - return l1_sendTransaction( + return utils.blockchain.ethereum.sendTransaction( contract, 'withdraw', - [parseToDecimals(amount, decimals), recipient], + [utils.parser.parseToDecimals(amount, decimals), recipient], { from: recipient }, @@ -50,8 +49,8 @@ export const withdraw = async ({recipient, amount, decimals, contract, emitter}) export const maxDeposit = async ({decimals, contract}) => { try { - const maxDeposit = await l1_callContract(contract, 'maxDeposit'); - return parseFromDecimals(maxDeposit, decimals); + const maxDeposit = await utils.blockchain.ethereum.callContract(contract, 'maxDeposit'); + return utils.parser.parseFromDecimals(maxDeposit, decimals); } catch (ex) { return Promise.reject(ex); } @@ -59,9 +58,9 @@ export const maxDeposit = async ({decimals, contract}) => { export const initiateWithdraw = async ({recipient, amount, decimals, contract}) => { try { - return l2_sendTransaction(contract, 'initiate_withdraw', { - l1Recipient: parseToFelt(recipient), - amount: parseToUint256(amount, decimals) + return utils.blockchain.starknet.sendTransaction(contract, 'initiate_withdraw', { + l1Recipient: utils.parser.parseToFelt(recipient), + amount: utils.parser.parseToUint256(amount, decimals) }); } catch (ex) { return Promise.reject(ex); diff --git a/src/api/erc20.js b/src/api/erc20.js index 7a7ec91b..5f1336fa 100644 --- a/src/api/erc20.js +++ b/src/api/erc20.js @@ -1,11 +1,15 @@ import {TransactionStatus} from '../enums'; import {web3} from '../libs'; -import {parseFromDecimals, parseFromUint256} from '../utils'; -import {l1_callContract, l1_sendTransaction, l2_callContract} from '../utils/contract'; +import utils from '../utils'; export const approve = async ({spender, value, contract, options}) => { try { - return await l1_sendTransaction(contract, 'approve', [spender, value], options); + return await utils.blockchain.ethereum.sendTransaction( + contract, + 'approve', + [spender, value], + options + ); } catch (ex) { return Promise.reject(ex); } @@ -13,8 +17,11 @@ export const approve = async ({spender, value, contract, options}) => { export const allowance = async ({owner, spender, decimals, contract}) => { try { - const allow = await l1_callContract(contract, 'allowance', [owner, spender]); - return parseFromDecimals(allow, decimals); + const allow = await utils.blockchain.ethereum.callContract(contract, 'allowance', [ + owner, + spender + ]); + return utils.parser.parseFromDecimals(allow, decimals); } catch (ex) { return Promise.reject(ex); } @@ -23,16 +30,18 @@ export const allowance = async ({owner, spender, decimals, contract}) => { export const balanceOf = async ({account, decimals, contract}, isL1 = true) => { try { if (isL1) { - const balance = await l1_callContract(contract, 'balanceOf', [account]); - return parseFromDecimals(balance, decimals); + const balance = await utils.blockchain.ethereum.callContract(contract, 'balanceOf', [ + account + ]); + return utils.parser.parseFromDecimals(balance, decimals); } else { - const {balance} = await l2_callContract( + const {balance} = await utils.blockchain.starknet.callContract( contract, 'balanceOf', [{account}], TransactionStatus.PENDING.toLowerCase() ); - return parseFromUint256(balance, decimals); + return utils.parser.parseFromUint256(balance, decimals); } } catch (ex) { return Promise.reject(ex); @@ -42,7 +51,7 @@ export const balanceOf = async ({account, decimals, contract}, isL1 = true) => { export const ethBalanceOf = async account => { try { const balance = await web3.eth.getBalance(account); - return parseFromDecimals(balance); + return utils.parser.parseFromDecimals(balance); } catch (ex) { return Promise.reject(ex); } diff --git a/src/components/Containers/Footer/Footer.strings.js b/src/components/Containers/Footer/Footer.strings.js index 96622db6..47454e13 100644 --- a/src/components/Containers/Footer/Footer.strings.js +++ b/src/components/Containers/Footer/Footer.strings.js @@ -1,3 +1,3 @@ -import {getString} from '../../../utils'; +import utils from '../../../utils'; -export const RIGHTS_TXT = getString('containers.footer.rights_txt'); +export const RIGHTS_TXT = utils.getTranslation('containers.footer.rights_txt'); diff --git a/src/components/Containers/Header/Header.js b/src/components/Containers/Header/Header.js index db863b52..442a3719 100644 --- a/src/components/Containers/Header/Header.js +++ b/src/components/Containers/Header/Header.js @@ -2,7 +2,7 @@ import React from 'react'; import {ReactComponent as StarkGateLogo} from '../../../assets/img/starkgate.svg'; import {useL1Wallet, useL2Wallet, useWallets} from '../../../providers/WalletsProvider'; -import {toClasses} from '../../../utils'; +import utils from '../../../utils'; import {useBridgeActions} from '../../Features/Bridge/Bridge.hooks'; import {useIsL1, useIsL2} from '../../Features/Transfer/Transfer.hooks'; import {WalletButton} from '../../UI'; @@ -32,17 +32,17 @@ export const Header = () => { }; return ( - <div className={toClasses(styles.header, 'row')}> - <div className={toClasses(styles.left, 'row')}> - <div className={toClasses(styles.logo, 'row')} onClick={onLogoClick}> + <div className={utils.object.toClasses(styles.header, 'row')}> + <div className={utils.object.toClasses(styles.left, 'row')}> + <div className={utils.object.toClasses(styles.logo, 'row')} onClick={onLogoClick}> <StarkGateLogo /> </div> {isConnected && ( - <div className={toClasses(styles.chain, 'row')}>{CHAIN_TXT(chainName)}</div> + <div className={utils.object.toClasses(styles.chain, 'row')}>{CHAIN_TXT(chainName)}</div> )} </div> - <div className={toClasses(styles.right, 'row')}> + <div className={utils.object.toClasses(styles.right, 'row')}> {isL1AccountConnected && ( <WalletButton account={l1Account} diff --git a/src/components/Containers/Header/Header.strings.js b/src/components/Containers/Header/Header.strings.js index aa80fd9f..a1716c97 100644 --- a/src/components/Containers/Header/Header.strings.js +++ b/src/components/Containers/Header/Header.strings.js @@ -1,4 +1,6 @@ -import {capitalize, evaluate, getString} from '../../../utils'; +import utils from '../../../utils'; export const CHAIN_TXT = chainName => - capitalize(evaluate(getString('containers.header.chain_txt'), {chainName})); + utils.string.capitalize( + utils.object.evaluate(utils.getTranslation('containers.header.chain_txt'), {chainName}) + ); diff --git a/src/components/Features/Account/Account.js b/src/components/Features/Account/Account.js index 9436e05b..d9b99c89 100644 --- a/src/components/Features/Account/Account.js +++ b/src/components/Features/Account/Account.js @@ -1,11 +1,11 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {LINKS} from '../../../constants'; +import constants from '../../../config/constants'; import {useCompleteTransferToL1} from '../../../hooks'; import {useAccountTransfers} from '../../../providers/TransfersProvider'; import {useWallets} from '../../../providers/WalletsProvider'; -import {findIndexById} from '../../../utils'; +import utils from '../../../utils'; import { AccountAddress, BackButton, @@ -21,6 +21,8 @@ import {TransferLog} from '../TransferLog/TransferLog'; import styles from './Account.module.scss'; import {TITLE_TXT} from './Account.strings'; +const {LINKS} = constants; + export const Account = ({transferId}) => { const {showTransferMenu} = useBridgeActions(); const {account, chainId, resetWallet} = useWallets(); @@ -55,7 +57,7 @@ export const Account = ({transferId}) => { {isL2 && ( <LinkButton text={LINKS.VOYAGER.text} url={LINKS.VOYAGER.accountUrl(chainId, account)} /> )} - <TransferLogContainer transferIndex={findIndexById(transfers, transferId)}> + <TransferLogContainer transferIndex={utils.object.findIndexById(transfers, transferId)}> {renderTransfers()} </TransferLogContainer> <LogoutButton isDisabled={isL2} onClick={resetWallet} /> diff --git a/src/components/Features/Account/Account.strings.js b/src/components/Features/Account/Account.strings.js index 75437b99..4e104e7e 100644 --- a/src/components/Features/Account/Account.strings.js +++ b/src/components/Features/Account/Account.strings.js @@ -1,3 +1,4 @@ -import {evaluate, getString} from '../../../utils'; +import utils from '../../../utils'; -export const TITLE_TXT = network => evaluate(getString('menus.account.title_txt'), {network}); +export const TITLE_TXT = network => + utils.object.evaluate(utils.getTranslation('menus.account.title_txt'), {network}); diff --git a/src/components/Features/Login/Login.js b/src/components/Features/Login/Login.js index 0430fedb..ebfec0dd 100644 --- a/src/components/Features/Login/Login.js +++ b/src/components/Features/Login/Login.js @@ -3,7 +3,7 @@ import React, {useEffect, useRef, useState} from 'react'; import {NetworkType, toChainName, WalletStatus, WalletType} from '../../../enums'; import {useConfig, useWalletHandlerProvider} from '../../../hooks'; import {useL1Wallet, useL2Wallet, useWallets} from '../../../providers/WalletsProvider'; -import {capitalize, toClasses} from '../../../utils'; +import utils from '../../../utils'; import {Menu, WalletLogin} from '../../UI'; import {useHideModal, useProgressModal} from '../ModalProvider/ModalProvider.hooks'; import {AUTO_CONNECT_TIMEOUT_DURATION, MODAL_TIMEOUT_DURATION} from './Login.constants'; @@ -82,9 +82,9 @@ export const Login = () => { if (error.name === 'ChainUnsupportedError') { const msg = error.message.replace(/\d+/g, match => { let msg = match; - const chainName = capitalize(toChainName(Number(match))); + const chainName = utils.string.capitalize(toChainName(Number(match))); if (chainName) { - msg += ` (${capitalize(toChainName(Number(match)))})`; + msg += ` (${utils.string.capitalize(toChainName(Number(match)))})`; } return msg; }); @@ -126,7 +126,7 @@ export const Login = () => { return ( <Menu> - <div className={toClasses(styles.login, 'center')}> + <div className={utils.object.toClasses(styles.login, 'center')}> <div className={styles.content}> <div className={styles.title}>{TITLE_TXT}</div> <p> diff --git a/src/components/Features/Login/Login.strings.js b/src/components/Features/Login/Login.strings.js index 16b95243..b7c197b7 100644 --- a/src/components/Features/Login/Login.strings.js +++ b/src/components/Features/Login/Login.strings.js @@ -1,8 +1,8 @@ -import {evaluate, getString} from '../../../utils'; +import utils from '../../../utils'; -const {title_txt, subtitle_txt, download_txt, modal_txt} = getString('menus.login'); +const {title_txt, subtitle_txt, download_txt, modal_txt} = utils.getTranslation('menus.login'); export const TITLE_TXT = title_txt; export const DOWNLOAD_TEXT = download_txt; -export const SUBTITLE_TXT = networkName => evaluate(subtitle_txt, {networkName}); -export const MODAL_TXT = walletName => evaluate(modal_txt, {walletName}); +export const SUBTITLE_TXT = networkName => utils.object.evaluate(subtitle_txt, {networkName}); +export const MODAL_TXT = walletName => utils.object.evaluate(modal_txt, {walletName}); diff --git a/src/components/Features/ModalProvider/ModalProvider.strings.js b/src/components/Features/ModalProvider/ModalProvider.strings.js index 340c2566..e3bffdf1 100644 --- a/src/components/Features/ModalProvider/ModalProvider.strings.js +++ b/src/components/Features/ModalProvider/ModalProvider.strings.js @@ -1,3 +1,5 @@ -import {getString} from '../../../utils'; +import utils from '../../../utils'; -export const TRANSACTION_SUBMITTED_TITLE_TXT = getString('modals.transactionSubmitted.title_txt'); +export const TRANSACTION_SUBMITTED_TITLE_TXT = utils.getTranslation( + 'modals.transactionSubmitted.title_txt' +); diff --git a/src/components/Features/SelectToken/SelectToken.strings.js b/src/components/Features/SelectToken/SelectToken.strings.js index 4fef0f93..7a47146e 100644 --- a/src/components/Features/SelectToken/SelectToken.strings.js +++ b/src/components/Features/SelectToken/SelectToken.strings.js @@ -1,3 +1,3 @@ -import {getString} from '../../../utils'; +import utils from '../../../utils'; -export const TITLE_TXT = getString('menus.selectToken.title_txt'); +export const TITLE_TXT = utils.getTranslation('menus.selectToken.title_txt'); diff --git a/src/components/Features/ToastProvider/ToastProvider.js b/src/components/Features/ToastProvider/ToastProvider.js index 29c21a11..039325ef 100644 --- a/src/components/Features/ToastProvider/ToastProvider.js +++ b/src/components/Features/ToastProvider/ToastProvider.js @@ -13,10 +13,10 @@ import { } from '../../../enums'; import {useCompleteTransferToL1, usePrevious} from '../../../hooks'; import {useTransfers} from '../../../providers/TransfersProvider'; -import {getFullTime} from '../../../utils'; -import {useBridgeActions} from '../../Features/Bridge/Bridge.hooks'; -import {useIsL1, useIsL2} from '../../Features/Transfer/Transfer.hooks'; +import utils from '../../../utils'; import {ToastBody, TransferToast, CompleteTransferToL1Toast} from '../../UI'; +import {useBridgeActions} from '../Bridge/Bridge.hooks'; +import {useIsL1, useIsL2} from '../Transfer/Transfer.hooks'; import styles from './ToastProvider.module.scss'; import {ALPHA_DISCLAIMER_MSG} from './ToastProvider.strings'; @@ -162,7 +162,7 @@ export const TransferData = ({transfer, style}) => { style={style} /> <ToastBody body={`${transfer.amount} ${transfer.symbol}`} style={style} /> - <ToastBody body={getFullTime(transfer.timestamp)} style={style} /> + <ToastBody body={utils.date.getFullTime(transfer.timestamp)} style={style} /> </> ); }; diff --git a/src/components/Features/ToastProvider/ToastProvider.strings.js b/src/components/Features/ToastProvider/ToastProvider.strings.js index dcb2a054..02f64783 100644 --- a/src/components/Features/ToastProvider/ToastProvider.strings.js +++ b/src/components/Features/ToastProvider/ToastProvider.strings.js @@ -1,3 +1,3 @@ -import {getString} from '../../../utils'; +import utils from '../../../utils'; -export const ALPHA_DISCLAIMER_MSG = getString('toasts.alpha_disclaimer_msg'); +export const ALPHA_DISCLAIMER_MSG = utils.getTranslation('toasts.alpha_disclaimer_msg'); diff --git a/src/components/Features/Transfer/Transfer.strings.js b/src/components/Features/Transfer/Transfer.strings.js index 392f5ff4..144245b1 100644 --- a/src/components/Features/Transfer/Transfer.strings.js +++ b/src/components/Features/Transfer/Transfer.strings.js @@ -1,8 +1,11 @@ -import {evaluate, getString} from '../../../utils'; +import utils from '../../../utils'; -export const INSUFFICIENT_BALANCE_ERROR_MSG = getString( +export const INSUFFICIENT_BALANCE_ERROR_MSG = utils.getTranslation( 'menus.transfer.insufficient_balance_error_msg' ); export const MAX_AMOUNT_ERROR_MSG = (maxAmount, symbol) => - evaluate(getString('menus.transfer.max_amount_error_msg'), {maxAmount, symbol}); + utils.object.evaluate(utils.getTranslation('menus.transfer.max_amount_error_msg'), { + maxAmount, + symbol + }); diff --git a/src/components/Features/TransferLog/TransferLog.js b/src/components/Features/TransferLog/TransferLog.js index a1182408..db9d2ec6 100644 --- a/src/components/Features/TransferLog/TransferLog.js +++ b/src/components/Features/TransferLog/TransferLog.js @@ -1,7 +1,7 @@ import PropTypes from 'prop-types'; import React, {useEffect, useState} from 'react'; -import {LINKS} from '../../../constants'; +import constants from '../../../config/constants'; import { isOnChain, isPending, @@ -11,7 +11,7 @@ import { } from '../../../enums'; import {useColors} from '../../../hooks'; import {useWallets} from '../../../providers/WalletsProvider'; -import {getFullTime, toClasses} from '../../../utils'; +import utils from '../../../utils'; import {Button, CryptoLogo} from '../../UI'; import {CryptoLogoSize} from '../../UI/CryptoLogo/CryptoLogo.enums'; import {LinkButton} from '../../UI/LinkButton/LinkButton'; @@ -19,6 +19,8 @@ import {useTransferData} from '../Transfer/Transfer.hooks'; import styles from './TransferLog.module.scss'; import {COMPLETE_TRANSFER_BTN_TXT} from './TransferLog.strings'; +const {LINKS} = constants; + export const TransferLog = ({transfer, onCompleteTransferClick}) => { const {symbol, timestamp, name, amount, status, l1hash, l2hash} = transfer; const [sign, setSign] = useState(''); @@ -31,7 +33,7 @@ export const TransferLog = ({transfer, onCompleteTransferClick}) => { const renderTransferStatus = () => { return !isOnChain(status) ? ( - <div className={toClasses(styles.data, isRejected(status) && styles.error)}> + <div className={utils.object.toClasses(styles.data, isRejected(status) && styles.error)}> {TransactionStatusFriendlyMessage[status]} </div> ) : null; @@ -68,7 +70,7 @@ export const TransferLog = ({transfer, onCompleteTransferClick}) => { <CryptoLogo size={CryptoLogoSize.SMALL} symbol={symbol} /> <div> {name} - <div className={styles.data}>{`${getFullTime(timestamp)}`}</div> + <div className={styles.data}>{`${utils.date.getFullTime(timestamp)}`}</div> </div> </div> <div className={styles.right}> diff --git a/src/components/Features/TransferLog/TransferLog.strings.js b/src/components/Features/TransferLog/TransferLog.strings.js index d06afed9..bde1cb8e 100644 --- a/src/components/Features/TransferLog/TransferLog.strings.js +++ b/src/components/Features/TransferLog/TransferLog.strings.js @@ -1,5 +1,5 @@ -import {getString} from '../../../utils'; +import utils from '../../../utils'; -export const COMPLETE_TRANSFER_BTN_TXT = getString( +export const COMPLETE_TRANSFER_BTN_TXT = utils.getTranslation( 'menus.account.transferLogContainer.transferLog.complete_transfer_btn_txt' ); diff --git a/src/components/UI/AccountAddress/AccountAddress.js b/src/components/UI/AccountAddress/AccountAddress.js index 35a3fa66..fd7a31de 100644 --- a/src/components/UI/AccountAddress/AccountAddress.js +++ b/src/components/UI/AccountAddress/AccountAddress.js @@ -3,7 +3,7 @@ import React, {useRef} from 'react'; import {ReactComponent as CopyIcon} from '../../../assets/svg/icons/copy.svg'; import {useAnimation} from '../../../hooks'; -import {toClasses} from '../../../utils'; +import utils from '../../../utils'; import {COPIED_ANIMATION_TIMEOUT_INTERVAL} from './AccountAddress.constants'; import styles from './AccountAddress.module.scss'; import {COPIED_MSG_TXT} from './AccountAddress.strings'; @@ -24,7 +24,7 @@ export const AccountAddress = ({address}) => { {address.length <= 42 ? address : `${address.substring(0, 42)}...`} <CopyIcon onClick={onCopyClick} /> </div> - <div className={toClasses(styles.copiedMsg, isAnimate && styles.copied)}> + <div className={utils.object.toClasses(styles.copiedMsg, isAnimate && styles.copied)}> {COPIED_MSG_TXT} </div> </> diff --git a/src/components/UI/AccountAddress/AccountAddress.strings.js b/src/components/UI/AccountAddress/AccountAddress.strings.js index 00595350..18044439 100644 --- a/src/components/UI/AccountAddress/AccountAddress.strings.js +++ b/src/components/UI/AccountAddress/AccountAddress.strings.js @@ -1,3 +1,3 @@ -import {getString} from '../../../utils'; +import utils from '../../../utils'; -export const COPIED_MSG_TXT = getString('menus.account.copied_msg_txt'); +export const COPIED_MSG_TXT = utils.getTranslation('menus.account.copied_msg_txt'); diff --git a/src/components/UI/BackButton/BackButton.strings.js b/src/components/UI/BackButton/BackButton.strings.js index 46bc48a2..35101268 100644 --- a/src/components/UI/BackButton/BackButton.strings.js +++ b/src/components/UI/BackButton/BackButton.strings.js @@ -1,3 +1,3 @@ -import {getString} from '../../../utils'; +import utils from '../../../utils'; -export const BTN_TXT = getString('menus.back_btn_txt'); +export const BTN_TXT = utils.getTranslation('menus.back_btn_txt'); diff --git a/src/components/UI/Button/Button.js b/src/components/UI/Button/Button.js index ef0bf706..5ad3479a 100644 --- a/src/components/UI/Button/Button.js +++ b/src/components/UI/Button/Button.js @@ -1,7 +1,7 @@ import PropTypes from 'prop-types'; import React, {useState} from 'react'; -import {toClasses} from '../../../utils'; +import utils from '../../../utils'; import {Loading} from '../Loading/Loading'; import {LoadingSize} from '../Loading/Loading.enums'; import styles from './Button.module.scss'; @@ -35,7 +35,7 @@ export const Button = ({ return ( <button - className={toClasses( + className={utils.object.toClasses( styles.button, isDisabled && styles.isDisabled, isLoading && styles.isLoading diff --git a/src/components/UI/Icon/Icon.js b/src/components/UI/Icon/Icon.js index 78490109..7350819c 100644 --- a/src/components/UI/Icon/Icon.js +++ b/src/components/UI/Icon/Icon.js @@ -1,12 +1,12 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {toClasses} from '../../../utils'; +import utils from '../../../utils'; import styles from './Icon.module.scss'; export const Icon = ({isClickable, onClick, style, className, children}) => ( <div - className={toClasses(styles.icon, className)} + className={utils.object.toClasses(styles.icon, className)} style={{ cursor: isClickable ? 'pointer' : 'default', ...style diff --git a/src/components/UI/Input/Input.js b/src/components/UI/Input/Input.js index 7c08c7bf..9fd209a6 100644 --- a/src/components/UI/Input/Input.js +++ b/src/components/UI/Input/Input.js @@ -1,13 +1,13 @@ import PropTypes from 'prop-types'; import React, {forwardRef} from 'react'; -import {toClasses} from '../../../utils'; +import utils from '../../../utils'; import styles from './Input.Module.scss'; export const Input = forwardRef(({isDisabled, ...props}, ref) => ( <input ref={ref} - className={toClasses(styles.input, isDisabled && styles.isDisabled)} + className={utils.object.toClasses(styles.input, isDisabled && styles.isDisabled)} {...props} /> )); diff --git a/src/components/UI/LinkButton/LinkButton.js b/src/components/UI/LinkButton/LinkButton.js index d798f976..cc7d4d07 100644 --- a/src/components/UI/LinkButton/LinkButton.js +++ b/src/components/UI/LinkButton/LinkButton.js @@ -2,17 +2,17 @@ import PropTypes from 'prop-types'; import React from 'react'; import {ReactComponent as RedirectIcon} from '../../../assets/svg/icons/redirect.svg'; -import {openInNewTab, toClasses} from '../../../utils'; +import utils from '../../../utils'; import styles from './LinkButton.module.scss'; export const LinkButton = ({text, url, isDisabled}) => { const onClick = () => { - openInNewTab(url); + utils.browser.openInNewTab(url); }; return ( <div - className={toClasses(styles.linkButton, isDisabled && styles.isDisabled)} + className={utils.object.toClasses(styles.linkButton, isDisabled && styles.isDisabled)} onClick={onClick} > {text} diff --git a/src/components/UI/LogoutButton/LogoutButton.strings.js b/src/components/UI/LogoutButton/LogoutButton.strings.js index da81090d..040f6526 100644 --- a/src/components/UI/LogoutButton/LogoutButton.strings.js +++ b/src/components/UI/LogoutButton/LogoutButton.strings.js @@ -1,3 +1,3 @@ -import {getString} from '../../../utils'; +import utils from '../../../utils'; -export const BTN_TXT = getString('menus.account.logout_btn_txt'); +export const BTN_TXT = utils.getTranslation('menus.account.logout_btn_txt'); diff --git a/src/components/UI/MaxButton/MaxButton.strings.js b/src/components/UI/MaxButton/MaxButton.strings.js index d9e25a3c..a2af64cb 100644 --- a/src/components/UI/MaxButton/MaxButton.strings.js +++ b/src/components/UI/MaxButton/MaxButton.strings.js @@ -1,3 +1,3 @@ -import {getString} from '../../../utils'; +import utils from '../../../utils'; -export const BTN_TXT = getString('menus.transfer.max_btn_txt'); +export const BTN_TXT = utils.getTranslation('menus.transfer.max_btn_txt'); diff --git a/src/components/UI/Menu/Menu.js b/src/components/UI/Menu/Menu.js index edb01396..86e59e09 100644 --- a/src/components/UI/Menu/Menu.js +++ b/src/components/UI/Menu/Menu.js @@ -1,7 +1,7 @@ import PropTypes from 'prop-types'; import React, {useEffect, useState} from 'react'; -import {toClasses} from '../../../utils'; +import utils from '../../../utils'; import styles from './Menu.module.scss'; export const Menu = ({children}) => { @@ -14,7 +14,7 @@ export const Menu = ({children}) => { }; }, []); - return <div className={toClasses(styles.menu, show && styles.show)}>{children}</div>; + return <div className={utils.object.toClasses(styles.menu, show && styles.show)}>{children}</div>; }; Menu.propTypes = { diff --git a/src/components/UI/Modal/Modal/Modal.js b/src/components/UI/Modal/Modal/Modal.js index 1dc7d4d4..cdc7a6ed 100644 --- a/src/components/UI/Modal/Modal/Modal.js +++ b/src/components/UI/Modal/Modal/Modal.js @@ -2,7 +2,7 @@ import PropTypes from 'prop-types'; import React from 'react'; import {createPortal} from 'react-dom'; -import {toClasses} from '../../../../utils'; +import utils from '../../../../utils'; import {ModalSize, ModalType} from './Modal.constants'; import styles from './Modal.module.scss'; @@ -10,8 +10,8 @@ export const Modal = ({show, type = ModalType.INFO, size = ModalSize.SMALL, chil const {width} = size; return show ? createPortal( - <div className={toClasses(styles.modal, styles[type])}> - <div className={toClasses(styles.container, styles[type])} style={{width}}> + <div className={utils.object.toClasses(styles.modal, styles[type])}> + <div className={utils.object.toClasses(styles.container, styles[type])} style={{width}}> {children} </div> </div>, diff --git a/src/components/UI/Modal/ModalBody/ModalBody.js b/src/components/UI/Modal/ModalBody/ModalBody.js index efac353a..08ed2727 100644 --- a/src/components/UI/Modal/ModalBody/ModalBody.js +++ b/src/components/UI/Modal/ModalBody/ModalBody.js @@ -1,12 +1,12 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {toClasses} from '../../../../utils'; +import utils from '../../../../utils'; import {ModalType} from '../Modal/Modal.constants'; import styles from './ModalBody.module.scss'; export const ModalBody = ({type = ModalType.INFO, children}) => ( - <div className={toClasses(styles.modalBody, styles[type])}>{children}</div> + <div className={utils.object.toClasses(styles.modalBody, styles[type])}>{children}</div> ); ModalBody.propTypes = { diff --git a/src/components/UI/Modal/ModalHeader/ModalHeader.js b/src/components/UI/Modal/ModalHeader/ModalHeader.js index 8f29c8dc..36da8f2f 100644 --- a/src/components/UI/Modal/ModalHeader/ModalHeader.js +++ b/src/components/UI/Modal/ModalHeader/ModalHeader.js @@ -2,12 +2,12 @@ import PropTypes from 'prop-types'; import React from 'react'; import {ReactComponent as CloseIcon} from '../../../../assets/svg/icons/close.svg'; -import {toClasses} from '../../../../utils'; +import utils from '../../../../utils'; import {ModalType} from '../Modal/Modal.constants'; import styles from './ModalHeader.module.scss'; export const ModalHeader = ({type = ModalType.INFO, isClosable, onClose, children}) => ( - <div className={toClasses(styles.modalHeader, styles[type])}> + <div className={utils.object.toClasses(styles.modalHeader, styles[type])}> {children} {isClosable && <CloseIcon onClick={onClose} />} </div> diff --git a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.constants.js b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.constants.js index ecf57cf9..0018ac8c 100644 --- a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.constants.js +++ b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.constants.js @@ -1,7 +1,7 @@ -import {evaluate} from '../../../../utils'; +import utils from '../../../../utils'; export const ETHERSCAN_TX_URL = (chainName, transactionHash) => - evaluate('https://{{chainName}}etherscan.io/tx/{{transactionHash}}', { + utils.object.evaluate('https://{{chainName}}etherscan.io/tx/{{transactionHash}}', { chainName, transactionHash }); diff --git a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js index 95d1cc23..7d996f64 100644 --- a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js +++ b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js @@ -3,21 +3,23 @@ import React, {useEffect, useState} from 'react'; import {ReactComponent as EtherscanLogo} from '../../../../assets/svg/etherscan.svg'; import {ReactComponent as L2Logo} from '../../../../assets/svg/tokens/starknet.svg'; -import {LINKS} from '../../../../constants'; +import constants from '../../../../config/constants'; import {ActionType} from '../../../../enums'; import {useColors} from '../../../../hooks'; import {useWallets} from '../../../../providers/WalletsProvider'; -import {openInNewTab} from '../../../../utils'; +import utils from '../../../../utils'; import {Button} from '../../Button/Button'; import {Circle} from '../../Circle/Circle'; import { BTN_TEXT, - TRANSFER_TO_L2_TXT, - TRANSFER_TO_L1_TXT, COMPLETE_TRANSFER_TO_L1_TXT, - STATUS_TXT + STATUS_TXT, + TRANSFER_TO_L1_TXT, + TRANSFER_TO_L2_TXT } from './TransactionSubmittedModal.strings'; +const {LINKS} = constants; + const TransactionSubmittedModal = ({transfer}) => { const {chainId} = useWallets(); const [networkData, setNetworkData] = useState({}); @@ -46,7 +48,7 @@ const TransactionSubmittedModal = ({transfer}) => { }, []); const onClick = () => { - openInNewTab(networkData.explorerUrl); + utils.browser.openInNewTab(networkData.explorerUrl); }; return ( diff --git a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.strings.js b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.strings.js index 5ec85c37..ffe6bf67 100644 --- a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.strings.js +++ b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.strings.js @@ -1,10 +1,10 @@ -import {evaluate, getString} from '../../../../utils'; +import utils from '../../../../utils'; const {btn_txt, transfer_to_l1_txt, complete_transfer_to_l1_txt, transfer_to_l2_txt, status_txt} = - getString('modals.transactionSubmitted'); + utils.getTranslation('modals.transactionSubmitted'); export const COMPLETE_TRANSFER_TO_L1_TXT = complete_transfer_to_l1_txt; export const TRANSFER_TO_L1_TXT = transfer_to_l1_txt; export const TRANSFER_TO_L2_TXT = transfer_to_l2_txt; export const STATUS_TXT = status_txt; -export const BTN_TEXT = explorer => evaluate(btn_txt, {explorer}); +export const BTN_TEXT = explorer => utils.object.evaluate(btn_txt, {explorer}); diff --git a/src/components/UI/NetworkMenu/NetworkMenu.strings.js b/src/components/UI/NetworkMenu/NetworkMenu.strings.js index 12b6303d..d5bd5692 100644 --- a/src/components/UI/NetworkMenu/NetworkMenu.strings.js +++ b/src/components/UI/NetworkMenu/NetworkMenu.strings.js @@ -1,6 +1,6 @@ -import {getString} from '../../../utils'; +import utils from '../../../utils'; -const {to_txt, from_txt} = getString('menus.transfer'); +const {to_txt, from_txt} = utils.getTranslation('menus.transfer'); export const TO = to_txt; export const FROM = from_txt; diff --git a/src/components/UI/NetworkSwap/NetworkSwap.js b/src/components/UI/NetworkSwap/NetworkSwap.js index e9033153..43d472ee 100644 --- a/src/components/UI/NetworkSwap/NetworkSwap.js +++ b/src/components/UI/NetworkSwap/NetworkSwap.js @@ -3,7 +3,7 @@ import React from 'react'; import {ReactComponent as SwapIcon} from '../../../assets/svg/icons/swap.svg'; import {useColors} from '../../../hooks'; -import {toClasses} from '../../../utils'; +import utils from '../../../utils'; import {Circle} from '../index'; import styles from './NetworkSwap.module.scss'; @@ -11,7 +11,10 @@ export const NetworkSwap = ({isFlipped, onClick}) => { const {colorAlpha5} = useColors(); return ( - <div className={toClasses(styles.networkSwap, isFlipped && styles.flipped)} onClick={onClick}> + <div + className={utils.object.toClasses(styles.networkSwap, isFlipped && styles.flipped)} + onClick={onClick} + > <Circle color={colorAlpha5} size={50} diff --git a/src/components/UI/SearchToken/SearchToken.strings.js b/src/components/UI/SearchToken/SearchToken.strings.js index 4dc182ee..87c47fbc 100644 --- a/src/components/UI/SearchToken/SearchToken.strings.js +++ b/src/components/UI/SearchToken/SearchToken.strings.js @@ -1,3 +1,3 @@ -import {getString} from '../../../utils'; +import utils from '../../../utils'; -export const SEARCH_PLACEHOLDER = getString('menus.selectToken.search_placeholder'); +export const SEARCH_PLACEHOLDER = utils.getTranslation('menus.selectToken.search_placeholder'); diff --git a/src/components/UI/SelectTokenRow/SelectTokenRow.js b/src/components/UI/SelectTokenRow/SelectTokenRow.js index 9b6af42a..427861fe 100644 --- a/src/components/UI/SelectTokenRow/SelectTokenRow.js +++ b/src/components/UI/SelectTokenRow/SelectTokenRow.js @@ -1,7 +1,7 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {formatBalance, toClasses} from '../../../utils'; +import utils from '../../../utils'; import {CryptoLogoSize} from '../CryptoLogo/CryptoLogo.enums'; import {LoadingSize} from '../Loading/Loading.enums'; import {CryptoLogo, Loading} from '../index'; @@ -12,7 +12,7 @@ export const SelectTokenRow = ({tokenData, onClick}) => { return ( <div - className={toClasses(styles.selectTokenRow, isLoading && styles.isLoading)} + className={utils.object.toClasses(styles.selectTokenRow, isLoading && styles.isLoading)} onClick={() => onClick(tokenData)} > <hr /> @@ -28,7 +28,7 @@ export const SelectTokenRow = ({tokenData, onClick}) => { <> {!isLoading ? ( <div className={styles.balance}> - {formatBalance(balance)} {symbol} + {utils.wallet.formatBalance(balance)} {symbol} </div> ) : ( <Loading size={LoadingSize.SMALL} /> diff --git a/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.strings.js b/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.strings.js index 261b14bd..3ea9de3f 100644 --- a/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.strings.js +++ b/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.strings.js @@ -1,7 +1,7 @@ -import {getString} from '../../../../utils'; +import utils from '../../../../utils'; const {title_txt, body_txt, dismiss_btn_txt, complete_transfer_btn_txt} = - getString('toasts.completeTransfer'); + utils.getTranslation('toasts.completeTransfer'); export const TITLE_TXT = title_txt; export const BODY_TXT = body_txt; diff --git a/src/components/UI/Toast/ToastFooter/ToastFooter.strings.js b/src/components/UI/Toast/ToastFooter/ToastFooter.strings.js index b99257f9..04082c31 100644 --- a/src/components/UI/Toast/ToastFooter/ToastFooter.strings.js +++ b/src/components/UI/Toast/ToastFooter/ToastFooter.strings.js @@ -1,3 +1,3 @@ -import {getString} from '../../../../utils'; +import utils from '../../../../utils'; -export const TRANSFER_LOG_LINK_BTN_TXT = getString('toasts.transfer_log_link'); +export const TRANSFER_LOG_LINK_BTN_TXT = utils.getTranslation('toasts.transfer_log_link'); diff --git a/src/components/UI/Toast/TransferToast/TransferToast.strings.js b/src/components/UI/Toast/TransferToast/TransferToast.strings.js index 55df0c99..a88ff5cb 100644 --- a/src/components/UI/Toast/TransferToast/TransferToast.strings.js +++ b/src/components/UI/Toast/TransferToast/TransferToast.strings.js @@ -1,6 +1,6 @@ -import {getString} from '../../../../utils'; +import utils from '../../../../utils'; -const {pending_txt, consumed_txt, rejected_txt} = getString('toasts.pendingTransfer'); +const {pending_txt, consumed_txt, rejected_txt} = utils.getTranslation('toasts.pendingTransfer'); export const REJECTED_TXT = rejected_txt; export const PENDING_TXT = pending_txt; diff --git a/src/components/UI/TokenBalance/TokenBalance.js b/src/components/UI/TokenBalance/TokenBalance.js index c608d519..64316d14 100644 --- a/src/components/UI/TokenBalance/TokenBalance.js +++ b/src/components/UI/TokenBalance/TokenBalance.js @@ -1,7 +1,7 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {formatBalance} from '../../../utils'; +import utils from '../../../utils'; import {LoadingSize} from '../Loading/Loading.enums'; import {Loading} from '../index'; import styles from './TokenBalance.module.scss'; @@ -23,7 +23,7 @@ export const TokenBalance = ({tokenData}) => { )} {!isLoading && ( <div className={styles.balance}> - {formatBalance(balance)} {symbol} + {utils.wallet.formatBalance(balance)} {symbol} </div> )} </div> diff --git a/src/components/UI/TokenBalance/TokenBalance.strings.js b/src/components/UI/TokenBalance/TokenBalance.strings.js index 818489b7..a1da53dc 100644 --- a/src/components/UI/TokenBalance/TokenBalance.strings.js +++ b/src/components/UI/TokenBalance/TokenBalance.strings.js @@ -1,3 +1,3 @@ -import {getString} from '../../../utils'; +import utils from '../../../utils'; -export const TITLE_TXT = getString('menus.transfer.balance_title_txt'); +export const TITLE_TXT = utils.getTranslation('menus.transfer.balance_title_txt'); diff --git a/src/components/UI/TokenInput/TokenInput.js b/src/components/UI/TokenInput/TokenInput.js index dcf84686..7eaf4c49 100644 --- a/src/components/UI/TokenInput/TokenInput.js +++ b/src/components/UI/TokenInput/TokenInput.js @@ -1,7 +1,7 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {toClasses} from '../../../utils'; +import utils from '../../../utils'; import {MaxButton} from '../MaxButton/MaxButton'; import {TokenSelector} from '../TokenSelector/TokenSelector'; import {Input} from '../index'; @@ -16,7 +16,7 @@ export const TokenInput = ({ onTokenSelect, onInputChange }) => ( - <div className={toClasses(styles.tokenInput, hasError && styles.hasError)}> + <div className={utils.object.toClasses(styles.tokenInput, hasError && styles.hasError)}> <Input placeholder={INPUT_PLACEHOLDER} style={{ diff --git a/src/components/UI/TokenInput/TokenInput.strings.js b/src/components/UI/TokenInput/TokenInput.strings.js index b4811d09..b08f5a63 100644 --- a/src/components/UI/TokenInput/TokenInput.strings.js +++ b/src/components/UI/TokenInput/TokenInput.strings.js @@ -1,3 +1,3 @@ -import {getString} from '../../../utils'; +import utils from '../../../utils'; -export const INPUT_PLACEHOLDER = getString('menus.transfer.input_placeholder_txt'); +export const INPUT_PLACEHOLDER = utils.getTranslation('menus.transfer.input_placeholder_txt'); diff --git a/src/components/UI/TransferButton/TransferButton.strings.js b/src/components/UI/TransferButton/TransferButton.strings.js index 8f523a7b..d4aa0b2b 100644 --- a/src/components/UI/TransferButton/TransferButton.strings.js +++ b/src/components/UI/TransferButton/TransferButton.strings.js @@ -1,3 +1,3 @@ -import {getString} from '../../../utils'; +import utils from '../../../utils'; -export const BTN_TXT = getString('menus.transfer.transfer_btn_txt'); +export const BTN_TXT = utils.getTranslation('menus.transfer.transfer_btn_txt'); diff --git a/src/components/UI/TransferLogContainer/TransferLogContainer.js b/src/components/UI/TransferLogContainer/TransferLogContainer.js index ab5642ed..e068dc8d 100644 --- a/src/components/UI/TransferLogContainer/TransferLogContainer.js +++ b/src/components/UI/TransferLogContainer/TransferLogContainer.js @@ -2,7 +2,7 @@ import PropTypes from 'prop-types'; import React, {useState} from 'react'; import {ReactComponent as CollapseIcon} from '../../../assets/svg/icons/collapse.svg'; -import {toClasses} from '../../../utils'; +import utils from '../../../utils'; import {useBridgeActions} from '../../Features/Bridge/Bridge.hooks'; import styles from './TransferLogContainer.module.scss'; import { @@ -37,7 +37,7 @@ export const TransferLogContainer = ({transferIndex, children}) => { return ( <div className={styles.transferLogContainer}> - <div className={toClasses(styles.title, showChildren && styles.showChildren)}> + <div className={utils.object.toClasses(styles.title, showChildren && styles.showChildren)}> {TITLE_TXT} {children && ( <div> diff --git a/src/components/UI/TransferLogContainer/TransferLogContainer.strings.js b/src/components/UI/TransferLogContainer/TransferLogContainer.strings.js index dc2244d5..10447e87 100644 --- a/src/components/UI/TransferLogContainer/TransferLogContainer.strings.js +++ b/src/components/UI/TransferLogContainer/TransferLogContainer.strings.js @@ -1,6 +1,6 @@ -import {getString} from '../../../utils'; +import utils from '../../../utils'; -const {title_txt, overview_txt, empty_msg_txt, view_more_txt} = getString( +const {title_txt, overview_txt, empty_msg_txt, view_more_txt} = utils.getTranslation( 'menus.account.transferLogContainer' ); diff --git a/src/components/UI/TransferMenuTab/TransferMenuTab.js b/src/components/UI/TransferMenuTab/TransferMenuTab.js index 13cf8820..14dbcbbe 100644 --- a/src/components/UI/TransferMenuTab/TransferMenuTab.js +++ b/src/components/UI/TransferMenuTab/TransferMenuTab.js @@ -1,11 +1,14 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {toClasses} from '../../../utils'; +import utils from '../../../utils'; import styles from './TransferMenuTab.module.scss'; export const TransferMenuTab = ({text, isActive, onClick}) => ( - <div className={toClasses(styles.transferMenuTab, isActive && styles.isActive)} onClick={onClick}> + <div + className={utils.object.toClasses(styles.transferMenuTab, isActive && styles.isActive)} + onClick={onClick} + > {text} </div> ); diff --git a/src/components/UI/WalletButton/WalletButton.js b/src/components/UI/WalletButton/WalletButton.js index c70f1138..a0c4ae6c 100644 --- a/src/components/UI/WalletButton/WalletButton.js +++ b/src/components/UI/WalletButton/WalletButton.js @@ -2,7 +2,7 @@ import PropTypes from 'prop-types'; import React from 'react'; import {useColors} from '../../../hooks'; -import {shortenAddress} from '../../../utils'; +import utils from '../../../utils'; import {Button, DynamicIcon} from '../index'; import {WALLET_LOGO_SIZE} from './WalletButton.constants'; import {BTN_TXT} from './WalletButton.strings'; @@ -18,7 +18,7 @@ export const WalletButton = ({account, logoPath, onClick}) => { height={40} icon={<DynamicIcon path={logoPath} size={WALLET_LOGO_SIZE} />} style={{borderWidth: '2px'}} - text={BTN_TXT(shortenAddress(account))} + text={BTN_TXT(utils.wallet.shortenAddress(account))} onClick={onClick} /> ); diff --git a/src/components/UI/WalletButton/WalletButton.strings.js b/src/components/UI/WalletButton/WalletButton.strings.js index c8711844..b54ee676 100644 --- a/src/components/UI/WalletButton/WalletButton.strings.js +++ b/src/components/UI/WalletButton/WalletButton.strings.js @@ -1,4 +1,4 @@ -import {evaluate, getString} from '../../../utils'; +import utils from '../../../utils'; export const BTN_TXT = address => - evaluate(getString('containers.header.wallet_btn_txt'), {address}); + utils.object.evaluate(utils.getTranslation('containers.header.wallet_btn_txt'), {address}); diff --git a/src/components/UI/WalletLogin/WalletLogin.js b/src/components/UI/WalletLogin/WalletLogin.js index c0b601e1..068bc661 100644 --- a/src/components/UI/WalletLogin/WalletLogin.js +++ b/src/components/UI/WalletLogin/WalletLogin.js @@ -2,7 +2,7 @@ import PropTypes from 'prop-types'; import React from 'react'; import {ReactComponent as ForwardIcon} from '../../../assets/svg/icons/forward.svg'; -import {capitalize} from '../../../utils'; +import utils from '../../../utils'; import {DynamicIcon} from '../index'; import styles from './WalletLogin.module.scss'; @@ -12,8 +12,8 @@ export const WalletLogin = ({name, description, logoPath, onClick}) => ( <div className={styles.left}> <DynamicIcon path={logoPath} size={41} /> <div className={styles.text}> - <div className={styles.title}>{capitalize(name)}</div> - <div className={styles.description}>{capitalize(description)}</div> + <div className={styles.title}>{utils.string.capitalize(name)}</div> + <div className={styles.description}>{utils.string.capitalize(description)}</div> </div> </div> <ForwardIcon /> diff --git a/src/config/addresses/contracts/contracts.l1.js b/src/config/addresses/contracts/contracts.l1.js index 210e347a..866391da 100644 --- a/src/config/addresses/contracts/contracts.l1.js +++ b/src/config/addresses/contracts/contracts.l1.js @@ -1,6 +1,6 @@ import {ChainType} from '../../../enums'; -export const MESSAGING_CONTRACT_ADDRESS = { +export const STARKNET_CONTRACT_ADDRESS = { [ChainType.MAIN.id]: '', [ChainType.GOERLI.id]: '0xde29d060D45901Fb19ED6C6e959EB22d8626708e' }; diff --git a/src/config/constants.js b/src/config/constants.js new file mode 100644 index 00000000..e0e3bed5 --- /dev/null +++ b/src/config/constants.js @@ -0,0 +1,38 @@ +import {byChainId} from '../enums'; +import utils from '../utils'; + +const constants = { + LOCAL_STORAGE_TRANSFERS_KEY: 'STARKGATE_TRANSFERS', + ETHERSCAN_URL: 'etherscan.io', + VOYAGER_URL: 'voyager.online', + LINKS: { + ETHERSCAN: { + text: 'etherscan', + txUrl: (chainId, hash) => + utils.object.evaluate('{{url}}/tx/{{hash}}', { + url: byChainId(chainId).blockExplorerUrl, + hash + }), + accountUrl: (chainId, account) => + utils.object.evaluate('{{url}}/address/{{account}}', { + url: byChainId(chainId).blockExplorerUrl, + account + }) + }, + VOYAGER: { + text: 'voyager', + txUrl: (chainId, hash) => + utils.object.evaluate('{{url}}/tx/{{hash}}', { + url: byChainId(chainId).l2BlockExplorerUrl, + hash + }), + accountUrl: (chainId, account) => + utils.object.evaluate('{{url}}/contract/{{account}}', { + url: byChainId(chainId).l2BlockExplorerUrl, + account + }) + } + } +}; + +export default constants; diff --git a/src/config/config.js b/src/config/envs.js similarity index 72% rename from src/config/config.js rename to src/config/envs.js index c4a7f234..4fd21c57 100644 --- a/src/config/config.js +++ b/src/config/envs.js @@ -1,6 +1,7 @@ -export default { +const envs = { autoConnect: Boolean(process.env.REACT_APP_AUTO_CONNECT), - pollBalanceInterval: Number(process.env.REACT_APP_POLL_BALANCE_INTERVAL), pollBlockNumberInterval: Number(process.env.REACT_APP_POLL_BLOCK_NUMBER_INTERVAL), supportedChainIds: process.env.REACT_APP_SUPPORTED_CHAIN_IDS.split(' ').map(id => Number(id)) }; + +export default envs; diff --git a/src/config/strings.js b/src/config/strings.js new file mode 100644 index 00000000..286e7804 --- /dev/null +++ b/src/config/strings.js @@ -0,0 +1,107 @@ +const strings = { + containers: { + header: { + chain_txt: '{{chainName}} testnet', + wallet_btn_txt: 'Account | {{address}}' + }, + footer: { + rights_txt: '© 2022 StarkWare Industries Ltd. All Rights Reserved' + } + }, + menus: { + back_btn_txt: 'Back', + login: { + title_txt: 'Login', + subtitle_txt: 'Please select {{networkName}} wallet to connect with this dApp:', + download_txt: ['Don’t have a wallet?', 'Download Here'], + modal_txt: 'Waiting for confirmation from {{walletName}}' + }, + account: { + title_txt: '{{network}} Account', + copied_msg_txt: 'Copied!', + logout_btn_txt: 'Logout', + transferLogContainer: { + title_txt: 'Transfers log', + overview_txt: 'recent transfers', + empty_msg_txt: 'Transfers will appear here...', + view_more_txt: 'View more', + transferLog: { + complete_transfer_btn_txt: 'Complete transfer' + } + } + }, + selectToken: { + title_txt: 'Select token from:', + search_placeholder: 'Token name, symbol, or address' + }, + transfer: { + to_txt: 'to', + from_txt: 'from', + insufficient_balance_error_msg: 'Insufficient balance', + max_amount_error_msg: + 'StarkNet Alpha Limitation: transfer to StarkNet limited to {{maxAmount}} {{symbol}}.', + max_btn_txt: 'Max', + balance_title_txt: 'Available balance', + input_placeholder_txt: '0.00', + transfer_btn_txt: 'Transfer' + } + }, + modals: { + transactionSubmitted: { + title_txt: 'Transaction sent', + btn_txt: 'View on {{explorer}}', + transfer_to_l1_txt: + 'Your transaction is now being processing on L2. When it will be accepted on-chain, we will promote you to complete your transfer.', + transfer_to_l2_txt: 'Your transaction has been sent to L2!', + complete_transfer_to_l1_txt: 'Your transaction is completed on L1!', + status_txt: 'Follow the transaction status on the right side of the browser.' + }, + transferProgress: { + approval: { + type: 'Approval required', + message: 'Requesting permission to access your {{symbol}} funds.' + }, + deposit: { + type: 'Transfer in progress', + message: 'Transferring {{amount}} {{symbol}} to L2...' + }, + initiateWithdraw: { + type: 'Initiate transfer', + message: 'Initiating transfer of {{amount}} {{symbol}} from L2...' + }, + waitForAccept: { + type: 'Transaction sent', + message: 'Waiting for transaction to be accepted on L2...' + }, + withdraw: { + type: 'Transfer in progress', + message: 'Transferring {{amount}} {{symbol}} to L1...' + }, + waitForConfirm: { + type: '{{walletName}}', + message: 'Waiting for confirmation from {{walletName}}' + }, + confirm_txt: 'Confirm this transaction in your wallet', + error_title: 'Transaction error' + } + }, + toasts: { + alpha_disclaimer_msg: + 'This is an ALPHA version of StarkNet, and its Bridge. As such, deyals may occur, and catastrophic bugs may lurk. Thanks, OGs, for trying it at this early stage.', + transfer_log_link: 'View on Transfer Log', + pendingTransfer: { + pending_txt: 'Waiting for transaction to be accepted on L2', + consumed_txt: 'Transaction accepted on L2', + rejected_txt: 'Transaction rejected on L2' + }, + completeTransfer: { + title_txt: 'L2 finished processing your transfer!', + body_txt: + 'Click on Complete Transfer to transfer the funds from L2 Bridge to your L1 address.', + dismiss_btn_txt: 'Dismiss', + complete_transfer_btn_txt: 'Complete Transfer' + } + } +}; + +export default strings; diff --git a/src/config/strings.json b/src/config/strings.json deleted file mode 100644 index 551dbc74..00000000 --- a/src/config/strings.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "containers": { - "header": { - "chain_txt": "{{chainName}} testnet", - "wallet_btn_txt": "Account | {{address}}" - }, - "footer": { - "rights_txt": "© 2022 StarkWare Industries Ltd. All Rights Reserved" - } - }, - "menus": { - "back_btn_txt": "Back", - "login": { - "title_txt": "Login", - "subtitle_txt": "Please select {{networkName}} wallet to connect with this dApp:", - "download_txt": ["Don’t have a wallet?", "Download Here"], - "modal_txt": "Waiting for confirmation from {{walletName}}" - }, - "account": { - "title_txt": "{{network}} Account", - "copied_msg_txt": "Copied!", - "logout_btn_txt": "Logout", - "transferLogContainer": { - "title_txt": "Transfers log", - "overview_txt": "recent transfers", - "empty_msg_txt": "Transfers will appear here...", - "view_more_txt": "View more", - "transferLog": { - "complete_transfer_btn_txt": "Complete transfer" - } - } - }, - "selectToken": { - "title_txt": "Select token from:", - "search_placeholder": "Token name, symbol, or address" - }, - "transfer": { - "to_txt": "to", - "from_txt": "from", - "insufficient_balance_error_msg": "Insufficient balance", - "max_amount_error_msg": "StarkNet Alpha Limitation: transfer to StarkNet limited to {{maxAmount}} {{symbol}}.", - "max_btn_txt": "Max", - "balance_title_txt": "Available balance", - "input_placeholder_txt": "0.00", - "transfer_btn_txt": "Transfer" - } - }, - "modals": { - "transactionSubmitted": { - "title_txt": "Transaction sent", - "btn_txt": "View on {{explorer}}", - "transfer_to_l1_txt": "Your transaction is now being processing on L2. When it will be accepted on-chain, we will promote you to complete your transfer.", - "transfer_to_l2_txt": "Your transaction has been sent to L2!", - "complete_transfer_to_l1_txt": "Your transaction is completed on L1!", - "status_txt": "Follow the transaction status on the right side of the browser." - }, - "transferProgress": { - "approval": { - "type": "Approval required", - "message": "Requesting permission to access your {{symbol}} funds." - }, - "deposit": { - "type": "Transfer in progress", - "message": "Transferring {{amount}} {{symbol}} to L2..." - }, - "initiateWithdraw": { - "type": "Initiate transfer", - "message": "Initiating transfer of {{amount}} {{symbol}} from L2..." - }, - "waitForAccept": { - "type": "Transaction sent", - "message": "Waiting for transaction to be accepted on L2..." - }, - "withdraw": { - "type": "Transfer in progress", - "message": "Transferring {{amount}} {{symbol}} to L1..." - }, - "waitForConfirm": { - "type": "{{walletName}}", - "message": "Waiting for confirmation from {{walletName}}" - }, - "confirm_txt": "Confirm this transaction in your wallet", - "error_title": "Transaction error" - } - }, - "toasts": { - "alpha_disclaimer_msg": "This is an ALPHA version of StarkNet, and its Bridge. As such, deyals may occur, and catastrophic bugs may lurk. Thanks, OGs, for trying it at this early stage.", - "transfer_log_link": "View on Transfer Log", - "pendingTransfer": { - "pending_txt": "Waiting for transaction to be accepted on L2", - "consumed_txt": "Transaction accepted on L2", - "rejected_txt": "Transaction rejected on L2" - }, - "completeTransfer": { - "title_txt": "L2 finished processing your transfer!", - "body_txt": "Click on Complete Transfer to transfer the funds from L2 Bridge to your L1 address.", - "dismiss_btn_txt": "Dismiss", - "complete_transfer_btn_txt": "Complete Transfer" - } - } -} diff --git a/src/config/wallets.js b/src/config/wallets.js index b7889711..7aded763 100644 --- a/src/config/wallets.js +++ b/src/config/wallets.js @@ -1,6 +1,6 @@ import {WalletType} from '../enums'; -export default [ +const wallets = [ { id: 'metamask', name: 'MetaMask', @@ -17,3 +17,5 @@ export default [ logoPath: 'wallets/argent/logo.svg' } ]; + +export default wallets; diff --git a/src/constants.js b/src/constants.js deleted file mode 100644 index f2311527..00000000 --- a/src/constants.js +++ /dev/null @@ -1,34 +0,0 @@ -import {byChainId} from './enums'; -import {evaluate} from './utils'; - -export const LOCAL_STORAGE_TRANSFERS_KEY = 'STARKGATE_TRANSFERS'; -export const ETHERSCAN_URL = 'etherscan.io'; -export const VOYAGER_URL = 'voyager.online'; -export const LINKS = { - ETHERSCAN: { - text: 'etherscan', - txUrl: (chainId, hash) => - evaluate('{{url}}/tx/{{hash}}', { - url: byChainId(chainId).blockExplorerUrl, - hash - }), - accountUrl: (chainId, account) => - evaluate('{{url}}/address/{{account}}', { - url: byChainId(chainId).blockExplorerUrl, - account - }) - }, - VOYAGER: { - text: 'voyager', - txUrl: (chainId, hash) => - evaluate('{{url}}/tx/{{hash}}', { - url: byChainId(chainId).l2BlockExplorerUrl, - hash - }), - accountUrl: (chainId, account) => - evaluate('{{url}}/contract/{{account}}', { - url: byChainId(chainId).l2BlockExplorerUrl, - account - }) - } -}; diff --git a/src/enums/ChainType.js b/src/enums/ChainType.js index c7df6276..6c7b0201 100644 --- a/src/enums/ChainType.js +++ b/src/enums/ChainType.js @@ -1,4 +1,6 @@ -import {ETHERSCAN_URL, VOYAGER_URL} from '../constants'; +import constants from '../config/constants'; + +const {ETHERSCAN_URL, VOYAGER_URL} = constants; export const ChainType = { MAIN: { diff --git a/src/enums/TransactionStatus.js b/src/enums/TransactionStatus.js index 6932592d..3f21e6be 100644 --- a/src/enums/TransactionStatus.js +++ b/src/enums/TransactionStatus.js @@ -31,6 +31,15 @@ export const TransactionConsumedStatuses = [ TransactionStatus.PENDING ]; +export const TransactionStatusStep = { + NOT_RECEIVED: 0, + RECEIVED: 1, + PENDING: 2, + ACCEPTED_ON_L2: 3, + ACCEPTED_ON_L1: 4, + REJECTED: 5 +}; + export const isPending = status => TransactionPendingStatuses.includes(status); export const isConsumed = status => TransactionConsumedStatuses.includes(status); diff --git a/src/hooks/useConfig.js b/src/hooks/useConfig.js index df179418..0f7728e1 100644 --- a/src/hooks/useConfig.js +++ b/src/hooks/useConfig.js @@ -1,5 +1,5 @@ import {useMemo} from 'react'; -import config from '../config/config.js'; +import config from '../config/envs.js'; export const useConfig = () => useMemo(() => config, []); diff --git a/src/hooks/useContract.js b/src/hooks/useContract.js index 471b0faa..b6f472e9 100644 --- a/src/hooks/useContract.js +++ b/src/hooks/useContract.js @@ -3,15 +3,15 @@ import {useCallback, useMemo} from 'react'; import {L1_ERC20_ABI, L1_ERC20_BRIDGE_ABI, L1_ETH_BRIDGE_ABI, L1_MESSAGING_ABI} from '../abis/l1'; import {L2_BRIDGE_ABI, L2_ERC20_ABI} from '../abis/l2'; import {useTransferData} from '../components/Features/Transfer/Transfer.hooks'; -import {MESSAGING_CONTRACT_ADDRESS} from '../config/addresses'; +import {STARKNET_CONTRACT_ADDRESS} from '../config/addresses'; import {NetworkType} from '../enums'; import {useL1Token} from '../providers/TokensProvider'; import {useL1Wallet, useWallets} from '../providers/WalletsProvider'; -import {l1_getContract, l2_getContract} from '../utils/contract'; +import utils from '../utils'; const cache = {}; -export const useContract = (ABI, getContractHandler = l1_getContract) => { +export const useContract = (ABI, getContractHandler = utils.blockchain.ethereum.createContract) => { const {chainId} = useWallets(); return useCallback( addresses => { @@ -55,7 +55,7 @@ export const useTokenBridgeContract = () => { }; export const useL2TokenContract = () => { - const getContract = useContract(L2_ERC20_ABI, l2_getContract); + const getContract = useContract(L2_ERC20_ABI, utils.blockchain.starknet.createContract); return useCallback(tokenAddresses => getContract(tokenAddresses), [getContract]); }; @@ -64,13 +64,13 @@ export const useL1TokenContract = () => { return useCallback(tokenAddresses => getContract(tokenAddresses), [getContract]); }; -export const useMessagingContract = () => { +export const useStarknetContract = () => { const getContract = useContract(L1_MESSAGING_ABI); - return useMemo(() => getContract(MESSAGING_CONTRACT_ADDRESS), [getContract]); + return useMemo(() => getContract(STARKNET_CONTRACT_ADDRESS), [getContract]); }; export const useL2TokenBridgeContract = () => { - const getContract = useContract(L2_BRIDGE_ABI, l2_getContract); + const getContract = useContract(L2_BRIDGE_ABI, utils.blockchain.starknet.createContract); return useCallback(bridgeAddress => getContract(bridgeAddress), [getContract]); }; diff --git a/src/hooks/useEventListener.js b/src/hooks/useEventListener.js index 542abd00..eee3392b 100644 --- a/src/hooks/useEventListener.js +++ b/src/hooks/useEventListener.js @@ -5,8 +5,8 @@ import {TransactionHashPrefix} from '../enums'; import {starknet} from '../libs'; import {useL1Token, useL2Token} from '../providers/TokensProvider'; import {useL1Wallet, useL2Wallet} from '../providers/WalletsProvider'; -import {txHash} from '../utils'; -import {useMessagingContract, useTokenBridgeContract} from './useContract'; +import utils from '../utils'; +import {useStarknetContract, useTokenBridgeContract} from './useContract'; import {useLogger} from './useLogger'; const HOOK_MODULE = 'useEventListener'; @@ -16,7 +16,7 @@ export const useLogMessageToL2Listener = () => { const selectedToken = useSelectedToken(); const getL1Token = useL1Token(); const getL2Token = useL2Token(); - const messagingContract = useMessagingContract(); + const starknetContract = useStarknetContract(); const addEventListener = useEventListener(); const {chainId} = useL1Wallet(); @@ -26,7 +26,7 @@ export const useLogMessageToL2Listener = () => { const l1BridgeAddress = getL1Token(symbol).bridgeAddress[chainId]; const l2BridgeAddress = getL2Token(symbol).bridgeAddress[chainId]; try { - const event = await addEventListener(messagingContract, 'LogMessageToL2', { + const event = await addEventListener(starknetContract, 'LogMessageToL2', { filter: { to_address: l2BridgeAddress, from_address: l1BridgeAddress, @@ -35,7 +35,7 @@ export const useLogMessageToL2Listener = () => { }); logger.log('Event received', {event}); const {to_address, from_address, selector, payload, nonce} = event.returnValues; - return txHash( + return utils.blockchain.starknet.getTransactionHash( TransactionHashPrefix.L1_HANDLER, from_address, to_address, @@ -48,7 +48,7 @@ export const useLogMessageToL2Listener = () => { logger.error('Event error', {ex}); return Promise.reject(ex.message); } - }, [addEventListener, chainId, getL1Token, getL2Token, logger, messagingContract, selectedToken]); + }, [addEventListener, chainId, getL1Token, getL2Token, logger, starknetContract, selectedToken]); }; export const useLogDepositListener = () => { diff --git a/src/hooks/useLogger.js b/src/hooks/useLogger.js index 739c44bd..8ab47e9a 100644 --- a/src/hooks/useLogger.js +++ b/src/hooks/useLogger.js @@ -1,3 +1,3 @@ -import {getLogger} from '../services'; +import utils from '../utils'; -export const useLogger = name => getLogger(name); +export const useLogger = name => utils.logger.getLogger(name); diff --git a/src/hooks/useTokenBalance.js b/src/hooks/useTokenBalance.js index b72080da..421dd343 100644 --- a/src/hooks/useTokenBalance.js +++ b/src/hooks/useTokenBalance.js @@ -2,7 +2,7 @@ import {useCallback} from 'react'; import {balanceOf, ethBalanceOf} from '../api/erc20'; import {useTransferData} from '../components/Features/Transfer/Transfer.hooks'; -import {isEth} from '../utils'; +import utils from '../utils'; import {useL1TokenContract, useL2TokenContract} from './useContract'; export const useTokenBalance = account => { @@ -32,7 +32,7 @@ export const useL1TokenBalance = account => { return useCallback( async token => { const {tokenAddress, decimals} = token; - return isEth(token) + return utils.token.isEth(token) ? await ethBalanceOf(account) : await balanceOf({account, decimals, contract: getContract(tokenAddress)}, true); }, diff --git a/src/hooks/useTransfer.js b/src/hooks/useTransfer.js index 632ed5ff..d9a3e3d4 100644 --- a/src/hooks/useTransfer.js +++ b/src/hooks/useTransfer.js @@ -14,8 +14,7 @@ import {starknet} from '../libs'; import {useL1Token, useTokens} from '../providers/TokensProvider'; import {useTransfers} from '../providers/TransfersProvider'; import {useL1Wallet, useL2Wallet} from '../providers/WalletsProvider'; -import {isEth} from '../utils'; -import {l2_waitForTransaction} from '../utils/contract'; +import utils from '../utils'; import {useL1TokenBridgeContract, useTokenBridgeContract, useTokenContract} from './useContract'; import {useLogMessageToL2Listener} from './useEventListener'; import {useLogger} from './useLogger'; @@ -39,7 +38,7 @@ export const useTransferToL2 = () => { try { logger.log('TransferToL2 called'); const {symbol, decimals, tokenAddress, bridgeAddress, name} = selectedToken; - const isEthToken = isEth(symbol); + const isEthToken = utils.token.isEth(symbol); const bridgeContract = getTokenBridgeContract(bridgeAddress); const depositHandler = isEthToken ? depositEth : deposit; logger.log('Prepared contract and handler', {isEthToken, bridgeContract, depositHandler}); @@ -145,10 +144,16 @@ export const useTransferToL1 = () => { logger.log('Tx hash received', {transaction_hash}); handleProgress(progressOptions.initiateWithdraw(amount, symbol)); logger.log('Waiting for tx to be received on L2'); - await l2_waitForTransaction(transaction_hash, TransactionStatus.RECEIVED); + await utils.blockchain.starknet.waitForTransaction( + transaction_hash, + TransactionStatus.RECEIVED + ); handleProgress(progressOptions.waitForAccept()); logger.log('Waiting for tx to be accepted on L2'); - await l2_waitForTransaction(transaction_hash); + await utils.blockchain.starknet.waitForTransaction( + transaction_hash, + TransactionStatus.PENDING + ); logger.log('Done', {transaction_hash}); handleData({ type: ActionType.TRANSFER_TO_L1, @@ -237,7 +242,7 @@ const useTransfer = () => { const hideModal = useHideModal(); const showTransactionSubmittedModal = useTransactionSubmittedModal(); const {addTransfer} = useTransfers(); - const {updateTokens} = useTokens(); + const {updateTokenBalance} = useTokens(); const [, , clearAmount] = useAmount(); const handleProgress = progress => { @@ -252,7 +257,7 @@ const useTransfer = () => { const handleData = data => { addTransfer(data); showTransactionSubmittedModal(data); - updateTokens(); + updateTokenBalance(data.symbol); clearAmount(); }; diff --git a/src/hooks/useTransferProgress.js b/src/hooks/useTransferProgress.js index f64dea2e..a8fe5452 100644 --- a/src/hooks/useTransferProgress.js +++ b/src/hooks/useTransferProgress.js @@ -1,14 +1,14 @@ import {useMemo} from 'react'; -import {evaluate, getString} from '../utils'; +import utils from '../utils'; export const useTransferProgress = () => { - const transferProgressStrings = getString('modals.transferProgress'); + const transferProgressStrings = utils.getTranslation('modals.transferProgress'); return useMemo( () => ({ approval: symbol => { const {approval} = transferProgressStrings; - const message = evaluate(approval.message, {symbol}); + const message = utils.object.evaluate(approval.message, {symbol}); return { type: approval.type, message @@ -16,7 +16,7 @@ export const useTransferProgress = () => { }, deposit: (amount, symbol) => { const {deposit} = transferProgressStrings; - const message = evaluate(deposit.message, {amount, symbol}); + const message = utils.object.evaluate(deposit.message, {amount, symbol}); return { type: deposit.type, message @@ -24,7 +24,7 @@ export const useTransferProgress = () => { }, initiateWithdraw: (amount, symbol) => { const {initiateWithdraw} = transferProgressStrings; - const message = evaluate(initiateWithdraw.message, {amount, symbol}); + const message = utils.object.evaluate(initiateWithdraw.message, {amount, symbol}); return { type: initiateWithdraw.type, message @@ -32,8 +32,8 @@ export const useTransferProgress = () => { }, waitForConfirm: walletName => { const {waitForConfirm} = transferProgressStrings; - const type = evaluate(waitForConfirm.type, {walletName}); - const message = evaluate(waitForConfirm.message, {walletName}); + const type = utils.object.evaluate(waitForConfirm.type, {walletName}); + const message = utils.object.evaluate(waitForConfirm.message, {walletName}); return { type, message @@ -48,7 +48,7 @@ export const useTransferProgress = () => { }, withdraw: (amount, symbol) => { const {withdraw} = transferProgressStrings; - const message = evaluate(withdraw.message, {amount, symbol}); + const message = utils.object.evaluate(withdraw.message, {amount, symbol}); return { type: withdraw.type, message diff --git a/src/hooks/useWalletHandlerProvider.js b/src/hooks/useWalletHandlerProvider.js index 19605591..3a1d8cb7 100644 --- a/src/hooks/useWalletHandlerProvider.js +++ b/src/hooks/useWalletHandlerProvider.js @@ -1,11 +1,11 @@ import {useCallback, useEffect, useState} from 'react'; import WalletsConfig from '../config/wallets.js'; -import {ArgentHandler, MetaMaskHandler} from '../services'; +import {ArgentX, MetaMask} from '../wallets'; const SUPPORTED_HANDLERS_REGISTRY = { - metamask: MetaMaskHandler, - argent: ArgentHandler + metamask: MetaMask, + argent: ArgentX }; export const useWalletHandlerProvider = () => { diff --git a/src/index.js b/src/index.js index 52e82815..b4a8eb10 100644 --- a/src/index.js +++ b/src/index.js @@ -5,13 +5,12 @@ import {App} from './App'; import {ModalProvider} from './components/Features'; import './index.scss'; import {Providers} from './providers'; -import {getLogger, setLogLevel} from './services'; -import {getUrlParameter, printPackageInfo} from './utils'; +import utils from './utils'; -printPackageInfo(process.env.REACT_APP_NAME, process.env.REACT_APP_VERSION, '#734d7e'); +utils.printPackageInfo(process.env.REACT_APP_NAME, process.env.REACT_APP_VERSION, '#734d7e'); -if (process.env.NODE_ENV === 'development' || getUrlParameter('debugApp')) { - setLogLevel(getLogger().DEBUG); +if (process.env.NODE_ENV === 'development' || utils.browser.getUrlParameter('debugApp')) { + utils.logger.setLogLevel(utils.logger.getLogger().DEBUG); } ReactDOM.render( diff --git a/src/providers/TokensProvider/TokensProvider.js b/src/providers/TokensProvider/TokensProvider.js index 0c45daf2..ac85b8de 100644 --- a/src/providers/TokensProvider/TokensProvider.js +++ b/src/providers/TokensProvider/TokensProvider.js @@ -1,14 +1,13 @@ import PropTypes from 'prop-types'; import React, {useEffect, useReducer} from 'react'; -import {useLogger, useConfig} from '../../hooks'; +import {useLogger} from '../../hooks'; import {useL1TokenBalance, useL2TokenBalance} from '../../hooks/useTokenBalance'; import {useL1Wallet, useL2Wallet} from '../WalletsProvider'; import {TokensContext} from './tokens-context'; import {actions, initialState, reducer} from './tokens-reducer'; export const TokensProvider = ({children}) => { - const {pollBalanceInterval} = useConfig(); const logger = useLogger(TokensProvider.displayName); const [tokens, dispatch] = useReducer(reducer, initialState); const {account: l1Account} = useL1Wallet(); @@ -17,17 +16,15 @@ export const TokensProvider = ({children}) => { const getL2TokenBalance = useL2TokenBalance(l2Account); useEffect(() => { - updateTokens(); - const intervalId = setInterval(() => { - updateTokens(); - }, pollBalanceInterval); - return () => clearInterval(intervalId); - }, [pollBalanceInterval]); + updateTokenBalance(); + }, []); - const updateTokens = () => { - logger.log(`It's time to update tokens balances!`); - for (let index = 0; index < tokens.length; index++) { - const token = tokens[index]; + const updateTokenBalance = symbol => { + logger.log(`Update token balance`, {symbol}); + const tokensToUpdate = symbol ? tokens.filter(token => token.symbol === symbol) : tokens; + logger.log(`Tokens to update`, {tokensToUpdate}); + for (let index = 0; index < tokensToUpdate.length; index++) { + const token = tokensToUpdate[index]; if (token.isLoading) { logger.log('Token already loading, skip balance update'); break; @@ -63,7 +60,7 @@ export const TokensProvider = ({children}) => { const context = { tokens, - updateTokens + updateTokenBalance }; return <TokensContext.Provider value={context}>{children}</TokensContext.Provider>; diff --git a/src/providers/TokensProvider/tokens-context.js b/src/providers/TokensProvider/tokens-context.js index 8c4a1357..52baec2b 100644 --- a/src/providers/TokensProvider/tokens-context.js +++ b/src/providers/TokensProvider/tokens-context.js @@ -2,5 +2,5 @@ import {createContext} from 'react'; export const TokensContext = createContext({ tokens: [], - updateTokens: () => {} + updateTokenBalance: symbol => symbol }); diff --git a/src/providers/TokensProvider/tokens-hooks.js b/src/providers/TokensProvider/tokens-hooks.js index b772ee76..f6f590ad 100644 --- a/src/providers/TokensProvider/tokens-hooks.js +++ b/src/providers/TokensProvider/tokens-hooks.js @@ -7,14 +7,14 @@ export const useTokens = () => { const {isL1} = useTransferData(); const l2Tokens = useL2Tokens(); const l1Tokens = useL1Tokens(); - const {updateTokens} = useContext(TokensContext); + const {updateTokenBalance} = useContext(TokensContext); const [tokens, setTokens] = useState(isL1 ? l1Tokens : l2Tokens); useEffect(() => { setTokens(isL1 ? l1Tokens : l2Tokens); }, [isL1, l2Tokens, l1Tokens]); - return {tokens, updateTokens}; + return {tokens, updateTokenBalance}; }; export const useL2Tokens = () => { diff --git a/src/providers/TransfersProvider/TransfersProvider.js b/src/providers/TransfersProvider/TransfersProvider.js index 6af38379..aa57d499 100644 --- a/src/providers/TransfersProvider/TransfersProvider.js +++ b/src/providers/TransfersProvider/TransfersProvider.js @@ -2,22 +2,24 @@ import PropTypes from 'prop-types'; import React, {useEffect, useReducer} from 'react'; import useDeepCompareEffect from 'use-deep-compare-effect'; -import {LOCAL_STORAGE_TRANSFERS_KEY} from '../../constants'; +import constants from '../../config/constants'; import {isCompleted} from '../../enums'; import {useLogger} from '../../hooks'; import {starknet} from '../../libs'; -import {StorageManager} from '../../services'; +import utils from '../../utils'; import {useBlockHash} from '../BlockHashProvider'; import {TransfersContext} from './transfers-context'; import {actions, initialState, reducer} from './transfers-reducer'; +const {LOCAL_STORAGE_TRANSFERS_KEY} = constants; + export const TransfersProvider = ({children}) => { const logger = useLogger(TransfersProvider.displayName); const [transfers, dispatch] = useReducer(reducer, initialState); const blockHash = useBlockHash(); useEffect(() => { - const storedTransfers = StorageManager.getItem(LOCAL_STORAGE_TRANSFERS_KEY); + const storedTransfers = utils.storage.getItem(LOCAL_STORAGE_TRANSFERS_KEY); if (Array.isArray(storedTransfers)) { setTransfers(storedTransfers); } @@ -25,15 +27,12 @@ export const TransfersProvider = ({children}) => { useDeepCompareEffect(() => { const updateTransfers = async () => { - logger.log(`It's time to update transfers!`); + logger.log(`Update transfers`); if (!blockHash) { return; } const checkTransaction = async transfer => { - if (isCompleted(transfer.status)) { - return transfer; - } - if (transfer.lastChecked === blockHash) { + if (isCompleted(transfer.status) || transfer.lastChecked === blockHash) { return transfer; } try { @@ -65,7 +64,7 @@ export const TransfersProvider = ({children}) => { logger.log(`Done update transfers`, {newTransfers}); if (newTransfers.length) { setTransfers(newTransfers); - StorageManager.setItem(LOCAL_STORAGE_TRANSFERS_KEY, newTransfers); + utils.storage.setItem(LOCAL_STORAGE_TRANSFERS_KEY, newTransfers); } }; updateTransfers(); diff --git a/src/services/index.js b/src/services/index.js deleted file mode 100644 index 22a624ad..00000000 --- a/src/services/index.js +++ /dev/null @@ -1,3 +0,0 @@ -export * from './wallet-handlers'; -export * from './storage-manager'; -export * from './logger'; diff --git a/src/services/wallet-handlers/index.js b/src/services/wallet-handlers/index.js deleted file mode 100644 index e0475038..00000000 --- a/src/services/wallet-handlers/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export * from './argent-handler'; -export * from './metamask-handler'; diff --git a/src/utils/blockchain/ethereum.js b/src/utils/blockchain/ethereum.js new file mode 100644 index 00000000..5649dd9e --- /dev/null +++ b/src/utils/blockchain/ethereum.js @@ -0,0 +1,21 @@ +import {web3} from '../../libs'; + +export const createContract = (address, ABI) => { + return new web3.eth.Contract(ABI, address); +}; + +export const callContract = async (contract, method, args = []) => { + try { + return await contract.methods?.[method](...args).call(); + } catch (ex) { + return Promise.reject(ex); + } +}; + +export const sendTransaction = async (contract, method, args = [], options = {}, cb = () => {}) => { + try { + return contract.methods?.[method](...args).send(options, cb); + } catch (ex) { + return Promise.reject(ex); + } +}; diff --git a/src/utils/blockchain/index.js b/src/utils/blockchain/index.js new file mode 100644 index 00000000..caf1867e --- /dev/null +++ b/src/utils/blockchain/index.js @@ -0,0 +1,2 @@ +export * as ethereum from './ethereum'; +export * as starknet from './starknet'; diff --git a/src/utils/blockchain/starknet.js b/src/utils/blockchain/starknet.js new file mode 100644 index 00000000..0bb34566 --- /dev/null +++ b/src/utils/blockchain/starknet.js @@ -0,0 +1,81 @@ +import {byChainId, isRejected, TransactionStatusStep} from '../../enums'; +import {getStarknet, starknet} from '../../libs'; + +const {compileCalldata, Contract, defaultProvider, stark, hash, number} = starknet; + +export const createContract = (address, ABI) => { + return new Contract(ABI, address); +}; + +export const callContract = async (contract, method, args = [], blockIdentifier = null) => { + try { + return await contract.call(method, ...args, blockIdentifier); + } catch (ex) { + return Promise.reject(ex); + } +}; + +export const sendTransaction = async (contract, method, args = {}) => { + try { + const methodSelector = stark.getSelectorFromName(method); + const compiledCalldata = compileCalldata(args); + return getStarknet().signer.invokeFunction( + contract.connectedTo, + methodSelector, + compiledCalldata + ); + } catch (ex) { + return Promise.reject(ex); + } +}; + +export const waitForTransaction = async (transactionHash, requiredStatus, retryInterval = 5000) => { + return new Promise((resolve, reject) => { + let processing = false; + const intervalId = setInterval(async () => { + if (processing) return; + const statusPromise = defaultProvider.getTransactionStatus(transactionHash); + processing = true; + try { + const {tx_status} = await statusPromise; + if ( + tx_status === requiredStatus || + (TransactionStatusStep[tx_status] > TransactionStatusStep[requiredStatus] && + !isRejected(tx_status)) + ) { + clearInterval(intervalId); + resolve(tx_status); + } else if (isRejected(tx_status)) { + clearInterval(intervalId); + reject(); + } else { + processing = false; + } + } catch (ex) { + processing = false; + } + }, retryInterval); + }); +}; + +export const getTransactionHash = ( + txHashPrefix, + fromAddress, + toAddress, + selector, + payload, + chainId, + ...additionalData +) => { + const calldata = [number.hexToDecimalString(fromAddress), ...payload]; + const calldataHash = hash.hashCalldata(calldata); + const {l2IdPrefix} = byChainId(chainId); + return hash.computeHashOnElements([ + txHashPrefix, + toAddress, + selector, + calldataHash, + l2IdPrefix, + ...additionalData + ]); +}; diff --git a/src/utils/contract.js b/src/utils/contract.js deleted file mode 100644 index 288cdd44..00000000 --- a/src/utils/contract.js +++ /dev/null @@ -1,81 +0,0 @@ -import {TransactionConsumedStatuses} from '../enums'; -import {getStarknet, starknet, web3} from '../libs'; -import {getLogger} from '../services'; - -export const l1_getContract = (address, ABI) => new web3.eth.Contract(ABI, address); - -export const l1_callContract = async (contract, method, args = []) => { - try { - return await contract.methods?.[method](...args).call(); - } catch (ex) { - return Promise.reject(ex); - } -}; - -export const l1_sendTransaction = async ( - contract, - method, - args = [], - options = {}, - cb = () => {} -) => { - try { - return contract.methods?.[method](...args).send(options, cb); - } catch (ex) { - return Promise.reject(ex); - } -}; - -export const l2_getContract = (address, ABI) => new starknet.Contract(ABI, address); - -export const l2_callContract = async (contract, method, args = [], blockIdentifier = null) => { - try { - return await contract.call(method, ...args, blockIdentifier); - } catch (ex) { - return Promise.reject(ex); - } -}; - -export const l2_sendTransaction = async (contract, method, args = {}) => { - try { - const methodSelector = starknet.stark.getSelectorFromName(method); - const compiledCalldata = starknet.compileCalldata(args); - return getStarknet().signer.invokeFunction( - contract.connectedTo, - methodSelector, - compiledCalldata - ); - } catch (ex) { - return Promise.reject(ex); - } -}; - -export const l2_waitForTransaction = async (hash, customStatus, retryInterval = 5000) => { - const logger = getLogger('l2_waitForTransaction'); - return new Promise(resolve => { - let processing = false; - const waitingForStatuses = customStatus ? [customStatus] : TransactionConsumedStatuses; - logger.debug(`Waiting for transaction with statuses ${waitingForStatuses.join(' ')}`); - const intervalId = setInterval(async () => { - if (processing) return; - logger.debug(`Checking transaction again`); - const statusPromise = starknet.defaultProvider.getTransactionStatus(hash); - processing = true; - try { - const {tx_status} = await statusPromise; - logger.debug(`Transaction status is ${tx_status}`); - if (waitingForStatuses.includes(tx_status)) { - logger.debug(`We got our desired status!`); - clearInterval(intervalId); - resolve(); - } else { - logger.debug(`We haven't got our desired status, trying again.`); - processing = false; - } - } catch (ex) { - logger.error(`Error while calling get status: ${ex.message}, trying again.`); - processing = false; - } - }, retryInterval); - }); -}; diff --git a/src/utils/hash.js b/src/utils/hash.js index f17bce92..bdbe1b5d 100644 --- a/src/utils/hash.js +++ b/src/utils/hash.js @@ -1,28 +1,5 @@ -import {byChainId} from '../enums'; import {starknet} from '../libs'; -export const txHash = ( - txHashPrefix, - fromAddress, - toAddress, - selector, - payload, - chainId, - ...additionalData -) => { - const calldata = [starknet.number.hexToDecimalString(fromAddress), ...payload]; - const calldataHash = starknet.hash.hashCalldata(calldata); - const {l2IdPrefix} = byChainId(chainId); - return starknet.hash.computeHashOnElements([ - txHashPrefix, - toAddress, - selector, - calldataHash, - l2IdPrefix, - ...additionalData - ]); -}; - export const hashEquals = (...data) => { return !!data.reduce((d1, d2) => starknet.hash.computeHashOnElements(d1) === starknet.hash.computeHashOnElements(d2) ? d1 : '' diff --git a/src/utils/helpers.js b/src/utils/helpers.js deleted file mode 100644 index 39da649b..00000000 --- a/src/utils/helpers.js +++ /dev/null @@ -1,12 +0,0 @@ -import strings from '../config/strings.json'; -import {getLogger, getLogLevel, setLogLevel} from '../services'; -import {getPropertyPath} from './object'; - -export const printPackageInfo = (name, version, color) => { - const currentLogLevel = getLogLevel(); - setLogLevel(getLogger().INFO); - getLogger().info(`%c ${name} v${version}`, `color: ${color || '#ff98f9'}; font-size: large`); - setLogLevel(currentLogLevel); -}; - -export const getString = path => getPropertyPath(strings, path); diff --git a/src/utils/index.js b/src/utils/index.js index 9be9adf3..eb94672a 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -1,9 +1,41 @@ -export * from './wallet'; -export * from './browser'; -export * from './string'; -export * from './token'; -export * from './number'; -export * from './hash'; -export * from './date'; -export * from './object'; -export * from './helpers'; +import strings from '../config/strings'; +import * as blockchain from './blockchain'; +import * as browser from './browser'; +import * as date from './date'; +import * as hash from './hash'; +import * as logger from './logger'; +import * as object from './object'; +import * as parser from './parser'; +import * as storage from './storage'; +import * as string from './string'; +import * as token from './token'; +import * as wallet from './wallet'; + +const {getLogger, getLogLevel, setLogLevel} = logger; + +const printPackageInfo = (name, version, color) => { + const currentLogLevel = getLogLevel(); + setLogLevel(getLogger().INFO); + getLogger().info(`%c ${name} v${version}`, `color: ${color || '#ff98f9'}; font-size: large`); + setLogLevel(currentLogLevel); +}; + +const getTranslation = path => object.getPropertyPath(strings, path); + +const utils = { + wallet, + browser, + string, + token, + parser, + hash, + date, + object, + blockchain, + logger, + storage, + printPackageInfo, + getTranslation +}; + +export default utils; diff --git a/src/services/logger.js b/src/utils/logger.js similarity index 100% rename from src/services/logger.js rename to src/utils/logger.js diff --git a/src/utils/number.js b/src/utils/parser.js similarity index 56% rename from src/utils/number.js rename to src/utils/parser.js index 7061ae51..e122a489 100644 --- a/src/utils/number.js +++ b/src/utils/parser.js @@ -1,39 +1,42 @@ import {web3, starknet} from '../libs'; +const {number, uint256} = starknet; +const {utils} = web3; + const TEN = 10; const DEFAULT_DECIMALS = 18; export const UNIT_MAP = {}; -for (let key in web3.utils.unitMap) { - UNIT_MAP[web3.utils.unitMap[key]] = key; +for (let key in utils.unitMap) { + UNIT_MAP[utils.unitMap[key]] = key; } export const parseToDecimals = (value, decimals = DEFAULT_DECIMALS) => { - return web3.utils.toWei(value, UNIT_MAP[Math.pow(TEN, decimals)]); + return utils.toWei(value, UNIT_MAP[Math.pow(TEN, decimals)]); }; export const parseFromDecimals = (value, decimals = DEFAULT_DECIMALS) => { - return Number(web3.utils.fromWei(value, UNIT_MAP[Math.pow(TEN, decimals)])); + return Number(utils.fromWei(value, UNIT_MAP[Math.pow(TEN, decimals)])); }; export const parseFromFelt = value => { - return starknet.number.toBN(value).toNumber(); + return number.toBN(value).toNumber(); }; export const parseToFelt = value => { - return starknet.number.toBN(value).toString(); + return number.toBN(value).toString(); }; export const parseToUint256 = (value, decimals = DEFAULT_DECIMALS) => { const decimalsValue = parseToDecimals(value, decimals); - const uint256 = starknet.uint256.bnToUint256(starknet.number.toBN(decimalsValue)); + const uint256Value = uint256.bnToUint256(number.toBN(decimalsValue)); return { type: 'struct', - ...uint256 + ...uint256Value }; }; export const parseFromUint256 = (value, decimals = DEFAULT_DECIMALS) => { - const bnString = starknet.uint256.uint256ToBN(value).toString(); + const bnString = uint256.uint256ToBN(value).toString(); return parseFromDecimals(bnString, decimals); }; diff --git a/src/services/storage-manager.js b/src/utils/storage.js similarity index 72% rename from src/services/storage-manager.js rename to src/utils/storage.js index 81b26686..b944be7d 100644 --- a/src/services/storage-manager.js +++ b/src/utils/storage.js @@ -1,19 +1,18 @@ -export const StorageManager = { - setItem: (key, item) => { - if (localStorage) { - localStorage.setObjectHash(key, JSON.stringify(item)); - return true; - } - return false; - }, - getItem: key => { - if (localStorage) { - let item = localStorage.getObjectHash(key); - try { - return JSON.parse(Object.values(item).join('')); - } catch (ex) { - return item; - } +export const setItem = (key, item) => { + if (localStorage) { + localStorage.setObjectHash(key, JSON.stringify(item)); + return true; + } + return false; +}; + +export const getItem = key => { + if (localStorage) { + let item = localStorage.getObjectHash(key); + try { + return JSON.parse(Object.values(item).join('')); + } catch (ex) { + return item; } } }; diff --git a/src/services/wallet-handlers/argent-handler.js b/src/wallets/argent-x.js similarity index 72% rename from src/services/wallet-handlers/argent-handler.js rename to src/wallets/argent-x.js index f4c530df..093fb4ef 100644 --- a/src/services/wallet-handlers/argent-handler.js +++ b/src/wallets/argent-x.js @@ -1,6 +1,6 @@ -import {getStarknet} from '../../libs'; +import {getStarknet} from '../libs'; -export class ArgentHandler { +export class ArgentX { constructor(config) { this.config = config; } diff --git a/src/wallets/index.js b/src/wallets/index.js new file mode 100644 index 00000000..65a2afc7 --- /dev/null +++ b/src/wallets/index.js @@ -0,0 +1,2 @@ +export * from './argent-x'; +export * from './metamask'; diff --git a/src/services/wallet-handlers/metamask-handler.js b/src/wallets/metamask.js similarity index 91% rename from src/services/wallet-handlers/metamask-handler.js rename to src/wallets/metamask.js index a8e7d3a1..9248f67e 100644 --- a/src/services/wallet-handlers/metamask-handler.js +++ b/src/wallets/metamask.js @@ -1,6 +1,6 @@ import MetaMaskOnboarding from '@metamask/onboarding'; -export class MetaMaskHandler { +export class MetaMask { constructor(config) { this.config = config; this.onboarding = new MetaMaskOnboarding(); From faf28578e6575f2955819467cee54d4eca7e8498 Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Tue, 22 Mar 2022 12:52:26 +0000 Subject: [PATCH 102/211] chore(prerelease): 0.0.2-4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 16a1bdab..22f52e71 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "0.0.2-3", + "version": "0.0.2-4", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 938ffe079c794409df04982096de22fd6e9d31ad Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 22 Mar 2022 15:31:07 +0200 Subject: [PATCH 103/211] fix(getTransactionHash): add fee and version to calculation (#90) --- src/__tests__/utils/blockchain/starknet.spec.js | 12 ++++++------ src/utils/blockchain/starknet.js | 2 ++ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/__tests__/utils/blockchain/starknet.spec.js b/src/__tests__/utils/blockchain/starknet.spec.js index ca875df9..1a936dd6 100644 --- a/src/__tests__/utils/blockchain/starknet.spec.js +++ b/src/__tests__/utils/blockchain/starknet.spec.js @@ -4,15 +4,15 @@ import utils from '../../../utils'; describe('starknet', () => { describe('getTransactionHash', () => { it('should calc tx hash', () => { - const from_address = '0xcf98f0a8edc6a730e1ca6b64a2528c6be031cb12'; + const from_address = '0xc3511006C04EF1d78af4C8E0e74Ec18A6E64Ff9e'; const to_address = - '1384622289134235426972866085149619554404298343372540338336104355150443775597'; + '3256441166037631918262930812410838598500200462657642943867372734773841898370'; const selector = '1285101517810983806491589552491143496277809242732141897358598292095611420389'; - const nonce = '55'; + const nonce = '9052'; const payload = [ - '17466514784613283928575916580398045172482824287888203092305238190565527099', - '52145000000000', + '2466233808699993860276959899635844440352648432893721200040352181857144501229', + '12213000000000', '0' ]; @@ -26,7 +26,7 @@ describe('starknet', () => { ChainType.GOERLI.id, nonce ) - ).toEqual('0x35ab0e4de971ac0736844ef36a05796dc41490c165373923c423f4b995983e8'); + ).toEqual('0x6660a4a84d5c6665be0e97b863433afe3ce7ea6521f5f90e0693b3b772cda55'); }); }); }); diff --git a/src/utils/blockchain/starknet.js b/src/utils/blockchain/starknet.js index 0bb34566..f9e9b307 100644 --- a/src/utils/blockchain/starknet.js +++ b/src/utils/blockchain/starknet.js @@ -72,9 +72,11 @@ export const getTransactionHash = ( const {l2IdPrefix} = byChainId(chainId); return hash.computeHashOnElements([ txHashPrefix, + 0, // version toAddress, selector, calldataHash, + 0, // max_fee l2IdPrefix, ...additionalData ]); From dba9b3e7c962e1d58ff7449fe0c227f069b7bb73 Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Tue, 22 Mar 2022 13:32:19 +0000 Subject: [PATCH 104/211] chore(prerelease): 0.0.2-5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 22f52e71..b3a186cb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "0.0.2-4", + "version": "0.0.2-5", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From d364cb44b8bf1ef62bba3cf08a13cd48c2897c6e Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 22 Mar 2022 15:49:19 +0200 Subject: [PATCH 105/211] fix: add missing env poll block number interval --- .env.development | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env.development b/.env.development index 3bd1409a..eb5f1891 100644 --- a/.env.development +++ b/.env.development @@ -1,5 +1,5 @@ REACT_APP_AUTO_CONNECT=true # 10 seconds -REACT_APP_POLL_BALANCE_INTERVAL=10000 +REACT_APP_POLL_BLOCK_NUMBER_INTERVAL=10000 # goerli testnet REACT_APP_SUPPORTED_CHAIN_IDS=5 From 8e80c25a654cbdcb092c9227cccc7db0a7f356bf Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Tue, 22 Mar 2022 13:50:33 +0000 Subject: [PATCH 106/211] chore(prerelease): 0.0.2-6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b3a186cb..83742e30 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "0.0.2-5", + "version": "0.0.2-6", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 20f51f3d68bf5d9c8a1212e6442fa5d246fbbeb2 Mon Sep 17 00:00:00 2001 From: CarmitKl <96685244+CarmitKl@users.noreply.github.com> Date: Tue, 22 Mar 2022 16:38:31 +0200 Subject: [PATCH 107/211] fix: remove pending transfer toast (#92) * remove the display of a 'pendingTransferToast', yet keep the settings for it written * lint fix Co-authored-by: Carmit Kleinik <carmit@starkware.co> --- .../Features/ToastProvider/ToastProvider.js | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/src/components/Features/ToastProvider/ToastProvider.js b/src/components/Features/ToastProvider/ToastProvider.js index 039325ef..ff5ca6eb 100644 --- a/src/components/Features/ToastProvider/ToastProvider.js +++ b/src/components/Features/ToastProvider/ToastProvider.js @@ -3,14 +3,7 @@ import React, {useEffect, useRef} from 'react'; import {toast, Toaster} from 'react-hot-toast'; import useDeepCompareEffect from 'use-deep-compare-effect'; -import { - ActionType, - isConsumed, - isOnChain, - isPending, - isRejected, - NetworkType -} from '../../../enums'; +import {ActionType, isConsumed, isOnChain, isRejected, NetworkType} from '../../../enums'; import {useCompleteTransferToL1, usePrevious} from '../../../hooks'; import {useTransfers} from '../../../providers/TransfersProvider'; import utils from '../../../utils'; @@ -44,9 +37,6 @@ export const ToastProvider = () => { const handleToast = (transfer, prevTransfer) => { const {status, type} = transfer; const isChanged = prevTransfer && status !== prevTransfer.status; - if (isPending(status)) { - return showPendingTransferToast(transfer); - } if (isChanged && isConsumed(status)) { return showConsumedTransferToast(transfer); } @@ -58,6 +48,7 @@ export const ToastProvider = () => { } }; + /* eslint-disable-next-line */ const showPendingTransferToast = transfer => { let toastId = getToastId(transfer); if (!toastId) { From 1cc049d7b3338ef57f92a9d38ecd28729a5bbecf Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Tue, 22 Mar 2022 14:39:45 +0000 Subject: [PATCH 108/211] chore(prerelease): 0.0.2-7 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 83742e30..f1cc8b5d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "0.0.2-6", + "version": "0.0.2-7", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From b6e0ded68934e4faf5dd217fa702f828d2101b89 Mon Sep 17 00:00:00 2001 From: CarmitKl <96685244+CarmitKl@users.noreply.github.com> Date: Tue, 22 Mar 2022 16:45:13 +0200 Subject: [PATCH 109/211] in the alphaDisclaimerToast fix a typo, and add an 'id' so it won't create duplicates of itself (#93) Co-authored-by: Carmit Kleinik <carmit@starkware.co> --- src/components/Features/ToastProvider/ToastProvider.js | 1 + src/config/strings.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/Features/ToastProvider/ToastProvider.js b/src/components/Features/ToastProvider/ToastProvider.js index ff5ca6eb..a1143562 100644 --- a/src/components/Features/ToastProvider/ToastProvider.js +++ b/src/components/Features/ToastProvider/ToastProvider.js @@ -59,6 +59,7 @@ export const ToastProvider = () => { const showAlphaDisclaimerToast = () => { toast.success(ALPHA_DISCLAIMER_MSG, { + id: 'alphaDisclaimer', position: 'bottom-left', icon: '❗' }); diff --git a/src/config/strings.js b/src/config/strings.js index 286e7804..b1e5491e 100644 --- a/src/config/strings.js +++ b/src/config/strings.js @@ -87,7 +87,7 @@ const strings = { }, toasts: { alpha_disclaimer_msg: - 'This is an ALPHA version of StarkNet, and its Bridge. As such, deyals may occur, and catastrophic bugs may lurk. Thanks, OGs, for trying it at this early stage.', + 'This is an ALPHA version of StarkNet, and its Bridge. As such, delays may occur, and catastrophic bugs may lurk. Thanks, OGs, for trying it at this early stage.', transfer_log_link: 'View on Transfer Log', pendingTransfer: { pending_txt: 'Waiting for transaction to be accepted on L2', From d1c3ad315d666d1124be37b9d62a0cf347e7e4b0 Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Tue, 22 Mar 2022 14:46:28 +0000 Subject: [PATCH 110/211] chore(prerelease): 0.0.2-8 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f1cc8b5d..a2efc774 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "0.0.2-7", + "version": "0.0.2-8", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 26355ece4135509ad160d8fe32e789bce469e23a Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Wed, 23 Mar 2022 12:21:07 +0200 Subject: [PATCH 111/211] chore: flatten config directory (#94) --- .../utils/blockchain/starknet.spec.js | 18 +++- src/__tests__/utils/date.spec.js | 4 +- src/__tests__/utils/hash.spec.js | 13 --- src/abis/l2/{ERC20.json => erc20.json} | 0 src/abis/l2/index.js | 2 +- src/config/addresses/index.js | 3 - src/config/addresses/tokens/tokens.l1.js | 78 ----------------- .../contracts.l1.js => contracts.js} | 2 +- .../tokens/tokens.l2.js => tokens.js} | 83 ++++++++++++++++++- src/hooks/useContract.js | 2 +- .../TokensProvider/tokens-reducer.js | 9 +- src/utils/blockchain/starknet.js | 6 ++ src/utils/hash.js | 7 -- src/utils/index.js | 2 - 14 files changed, 112 insertions(+), 117 deletions(-) delete mode 100644 src/__tests__/utils/hash.spec.js rename src/abis/l2/{ERC20.json => erc20.json} (100%) delete mode 100644 src/config/addresses/index.js delete mode 100644 src/config/addresses/tokens/tokens.l1.js rename src/config/{addresses/contracts/contracts.l1.js => contracts.js} (77%) rename src/config/{addresses/tokens/tokens.l2.js => tokens.js} (53%) delete mode 100644 src/utils/hash.js diff --git a/src/__tests__/utils/blockchain/starknet.spec.js b/src/__tests__/utils/blockchain/starknet.spec.js index 1a936dd6..b23e6deb 100644 --- a/src/__tests__/utils/blockchain/starknet.spec.js +++ b/src/__tests__/utils/blockchain/starknet.spec.js @@ -1,9 +1,21 @@ import {ChainType, TransactionHashPrefix} from '../../../enums'; import utils from '../../../utils'; -describe('starknet', () => { +const {getTransactionHash, hashEquals} = utils.blockchain.starknet; + +describe('starknet blockchain utils', () => { + describe('hashEquals', () => { + it('should compare hashes', () => { + expect(hashEquals([1, 2])).toBeTruthy(); + expect(hashEquals([1, 2, 3], [1, 2, 3])).toBeTruthy(); + expect(hashEquals([1, 2, 3], [1, 2, 3], [1, 2, 3])).toBeTruthy(); + expect(hashEquals([1, 2, 3], [1, 2, 3], [1])).toBeFalsy(); + expect(hashEquals([1, 2, 3], [1, 2])).toBeFalsy(); + }); + }); + describe('getTransactionHash', () => { - it('should calc tx hash', () => { + it('should calc tx hash from message params', () => { const from_address = '0xc3511006C04EF1d78af4C8E0e74Ec18A6E64Ff9e'; const to_address = '3256441166037631918262930812410838598500200462657642943867372734773841898370'; @@ -17,7 +29,7 @@ describe('starknet', () => { ]; expect( - utils.blockchain.starknet.getTransactionHash( + getTransactionHash( TransactionHashPrefix.L1_HANDLER, from_address, to_address, diff --git a/src/__tests__/utils/date.spec.js b/src/__tests__/utils/date.spec.js index eb37c374..35c56534 100644 --- a/src/__tests__/utils/date.spec.js +++ b/src/__tests__/utils/date.spec.js @@ -3,13 +3,13 @@ import utils from '../../utils'; const {get24Time, getDate} = utils.date; describe('getDate', () => { - it('should get date', () => { + it('should return date of the form DD/MM/YYYY from timestamp', () => { expect(getDate(1644828892412)).toEqual('14/02/2022'); }); }); describe('get24Time', () => { - it('should get 24 time', () => { + it('should return 24 time of the form HH:MM:SS from timestamp', () => { expect(get24Time(1644828892412).endsWith(':54:52')).toBeTruthy(); }); }); diff --git a/src/__tests__/utils/hash.spec.js b/src/__tests__/utils/hash.spec.js deleted file mode 100644 index a24e9303..00000000 --- a/src/__tests__/utils/hash.spec.js +++ /dev/null @@ -1,13 +0,0 @@ -import utils from '../../utils'; - -const {hashEquals} = utils.hash; - -describe('hashEquals', () => { - it('should compare hashes', () => { - expect(hashEquals([1, 2])).toBeTruthy(); - expect(hashEquals([1, 2, 3], [1, 2, 3])).toBeTruthy(); - expect(hashEquals([1, 2, 3], [1, 2, 3], [1, 2, 3])).toBeTruthy(); - expect(hashEquals([1, 2, 3], [1, 2, 3], [1])).toBeFalsy(); - expect(hashEquals([1, 2, 3], [1, 2])).toBeFalsy(); - }); -}); diff --git a/src/abis/l2/ERC20.json b/src/abis/l2/erc20.json similarity index 100% rename from src/abis/l2/ERC20.json rename to src/abis/l2/erc20.json diff --git a/src/abis/l2/index.js b/src/abis/l2/index.js index 3b1acb7d..c4a1900d 100644 --- a/src/abis/l2/index.js +++ b/src/abis/l2/index.js @@ -1,4 +1,4 @@ -import L2_ERC20_ABI from './ERC20.json'; +import L2_ERC20_ABI from './erc20.json'; import L2_BRIDGE_ABI from './token_bridge.json'; export {L2_ERC20_ABI, L2_BRIDGE_ABI}; diff --git a/src/config/addresses/index.js b/src/config/addresses/index.js deleted file mode 100644 index 79d935c7..00000000 --- a/src/config/addresses/index.js +++ /dev/null @@ -1,3 +0,0 @@ -export * from './contracts/contracts.l1'; -export * from './tokens/tokens.l1'; -export * from './tokens/tokens.l2'; diff --git a/src/config/addresses/tokens/tokens.l1.js b/src/config/addresses/tokens/tokens.l1.js deleted file mode 100644 index 610adcce..00000000 --- a/src/config/addresses/tokens/tokens.l1.js +++ /dev/null @@ -1,78 +0,0 @@ -import {ChainType, NetworkType} from '../../../enums'; - -export const L1Tokens = [ - { - name: NetworkType.L1.tokenName, - symbol: NetworkType.L1.symbol, - decimals: 18, - bridgeAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0xc3511006C04EF1d78af4C8E0e74Ec18A6E64Ff9e' - } - }, - { - name: 'Wrapped BTC', - symbol: 'WBTC', - decimals: 8, - bridgeAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0xf29aE3446Ce4688fCc792b232C21D1B9581E7baC' - }, - tokenAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0xC04B0d3107736C32e19F1c62b2aF67BE61d63a05' - } - }, - { - name: 'Goerli USD Coin', - symbol: 'USDC', - decimals: 6, - bridgeAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0xBA9cE9F22A3Cfa7Fcb5c31f6B2748b1e72C06204' - }, - tokenAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x07865c6e87b9f70255377e024ace6630c1eaa37f' - } - }, - { - name: 'Tether USD', - symbol: 'USDT', - decimals: 6, - bridgeAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0xA1f590F18b23EFece02804704E5006E91348C997' - }, - tokenAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x509Ee0d083DdF8AC028f2a56731412edD63223B9' - } - }, - { - name: 'DAI', - symbol: 'DAI', - decimals: 18, - bridgeAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x3ebB6C28BD63aDa2feA81f1e6c5a50aFe53B5feE' - }, - tokenAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x11fE4B6AE13d2a6055C8D9cF65c55bac32B5d844' - } - }, - { - name: 'SelfService', - symbol: 'SLF', - decimals: 6, - bridgeAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x160e7631f22035149A01420cADD1012267551181' - }, - tokenAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0xd44BB808bfE43095dBb94c83077766382D63952a' - } - } -]; diff --git a/src/config/addresses/contracts/contracts.l1.js b/src/config/contracts.js similarity index 77% rename from src/config/addresses/contracts/contracts.l1.js rename to src/config/contracts.js index 866391da..727374b7 100644 --- a/src/config/addresses/contracts/contracts.l1.js +++ b/src/config/contracts.js @@ -1,4 +1,4 @@ -import {ChainType} from '../../../enums'; +import {ChainType} from '../enums'; export const STARKNET_CONTRACT_ADDRESS = { [ChainType.MAIN.id]: '', diff --git a/src/config/addresses/tokens/tokens.l2.js b/src/config/tokens.js similarity index 53% rename from src/config/addresses/tokens/tokens.l2.js rename to src/config/tokens.js index e256f600..7772a3f5 100644 --- a/src/config/addresses/tokens/tokens.l2.js +++ b/src/config/tokens.js @@ -1,6 +1,83 @@ -import {ChainType, NetworkType} from '../../../enums'; +import {ChainType, NetworkType} from '../enums'; -export const L2Tokens = [ +const l1tokens = [ + { + name: NetworkType.L1.tokenName, + symbol: NetworkType.L1.symbol, + decimals: 18, + bridgeAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0xc3511006C04EF1d78af4C8E0e74Ec18A6E64Ff9e' + } + }, + { + name: 'Wrapped BTC', + symbol: 'WBTC', + decimals: 8, + bridgeAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0xf29aE3446Ce4688fCc792b232C21D1B9581E7baC' + }, + tokenAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0xC04B0d3107736C32e19F1c62b2aF67BE61d63a05' + } + }, + { + name: 'Goerli USD Coin', + symbol: 'USDC', + decimals: 6, + bridgeAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0xBA9cE9F22A3Cfa7Fcb5c31f6B2748b1e72C06204' + }, + tokenAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x07865c6e87b9f70255377e024ace6630c1eaa37f' + } + }, + { + name: 'Tether USD', + symbol: 'USDT', + decimals: 6, + bridgeAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0xA1f590F18b23EFece02804704E5006E91348C997' + }, + tokenAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x509Ee0d083DdF8AC028f2a56731412edD63223B9' + } + }, + { + name: 'DAI', + symbol: 'DAI', + decimals: 18, + bridgeAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x3ebB6C28BD63aDa2feA81f1e6c5a50aFe53B5feE' + }, + tokenAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x11fE4B6AE13d2a6055C8D9cF65c55bac32B5d844' + } + }, + { + name: 'SelfService', + symbol: 'SLF', + decimals: 6, + bridgeAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0x160e7631f22035149A01420cADD1012267551181' + }, + tokenAddress: { + [ChainType.MAIN.id]: '', + [ChainType.GOERLI.id]: '0xd44BB808bfE43095dBb94c83077766382D63952a' + } + } +]; + +const l2tokens = [ { name: NetworkType.L1.tokenName, symbol: NetworkType.L1.symbol, @@ -80,3 +157,5 @@ export const L2Tokens = [ } } ]; + +export {l1tokens, l2tokens}; diff --git a/src/hooks/useContract.js b/src/hooks/useContract.js index b6f472e9..b086655e 100644 --- a/src/hooks/useContract.js +++ b/src/hooks/useContract.js @@ -3,7 +3,7 @@ import {useCallback, useMemo} from 'react'; import {L1_ERC20_ABI, L1_ERC20_BRIDGE_ABI, L1_ETH_BRIDGE_ABI, L1_MESSAGING_ABI} from '../abis/l1'; import {L2_BRIDGE_ABI, L2_ERC20_ABI} from '../abis/l2'; import {useTransferData} from '../components/Features/Transfer/Transfer.hooks'; -import {STARKNET_CONTRACT_ADDRESS} from '../config/addresses'; +import {STARKNET_CONTRACT_ADDRESS} from '../config/contracts'; import {NetworkType} from '../enums'; import {useL1Token} from '../providers/TokensProvider'; import {useL1Wallet, useWallets} from '../providers/WalletsProvider'; diff --git a/src/providers/TokensProvider/tokens-reducer.js b/src/providers/TokensProvider/tokens-reducer.js index 0d66ee43..03a33041 100644 --- a/src/providers/TokensProvider/tokens-reducer.js +++ b/src/providers/TokensProvider/tokens-reducer.js @@ -1,12 +1,13 @@ -import {L1Tokens, L2Tokens} from '../../config/addresses'; +import {l1tokens, l2tokens} from '../../config/tokens'; export const actions = { UPDATE_TOKEN_STATE: 'Tokens/UPDATE_TOKEN_STATE' }; -const l1Tokens = L1Tokens.map(t => ({...t, isL1: true})); -const l2Tokens = L2Tokens.map(t => ({...t, isL2: true})); -export const initialState = [...l1Tokens, ...l2Tokens]; +export const initialState = [ + ...l1tokens.map(t => ({...t, isL1: true})), + ...l2tokens.map(t => ({...t, isL2: true})) +]; export const reducer = (state, action) => { switch (action.type) { diff --git a/src/utils/blockchain/starknet.js b/src/utils/blockchain/starknet.js index f9e9b307..6499b20e 100644 --- a/src/utils/blockchain/starknet.js +++ b/src/utils/blockchain/starknet.js @@ -81,3 +81,9 @@ export const getTransactionHash = ( ...additionalData ]); }; + +export const hashEquals = (...data) => { + return !!data.reduce((d1, d2) => + starknet.hash.computeHashOnElements(d1) === starknet.hash.computeHashOnElements(d2) ? d1 : '' + ); +}; diff --git a/src/utils/hash.js b/src/utils/hash.js deleted file mode 100644 index bdbe1b5d..00000000 --- a/src/utils/hash.js +++ /dev/null @@ -1,7 +0,0 @@ -import {starknet} from '../libs'; - -export const hashEquals = (...data) => { - return !!data.reduce((d1, d2) => - starknet.hash.computeHashOnElements(d1) === starknet.hash.computeHashOnElements(d2) ? d1 : '' - ); -}; diff --git a/src/utils/index.js b/src/utils/index.js index eb94672a..b60be0cd 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -2,7 +2,6 @@ import strings from '../config/strings'; import * as blockchain from './blockchain'; import * as browser from './browser'; import * as date from './date'; -import * as hash from './hash'; import * as logger from './logger'; import * as object from './object'; import * as parser from './parser'; @@ -28,7 +27,6 @@ const utils = { string, token, parser, - hash, date, object, blockchain, From 84e99090abb18234cf2cf9fb105fea259700af69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Kami=C5=84ski?= <aundumla@gmail.com> Date: Sun, 27 Mar 2022 09:49:09 +0200 Subject: [PATCH 112/211] chore(DAI v2): update DAI token addresses (#100) --- src/config/tokens.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/config/tokens.js b/src/config/tokens.js index 7772a3f5..b043c951 100644 --- a/src/config/tokens.js +++ b/src/config/tokens.js @@ -55,7 +55,7 @@ const l1tokens = [ decimals: 18, bridgeAddress: { [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x3ebB6C28BD63aDa2feA81f1e6c5a50aFe53B5feE' + [ChainType.GOERLI.id]: '0xd8beAa22894Cd33F24075459cFba287a10a104E4' }, tokenAddress: { [ChainType.MAIN.id]: '', @@ -136,11 +136,11 @@ const l2tokens = [ decimals: 18, bridgeAddress: { [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x015605ab0d2a2883dd72fe014bb997578fe8ce73caa91d1c0973a68efc6a43c5' + [ChainType.GOERLI.id]: '0x0278f24c3e74cbf7a375ec099df306289beb0605a346277d200b791a7f811a19' }, tokenAddress: { [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x00da19dab05e9f3cd09c3aa0d8046415b3d7f7dbbd83e1c2e4946792298fbe28' + [ChainType.GOERLI.id]: '0x03e85bfbb8e2a42b7bead9e88e9a1b19dbccf661471061807292120462396ec9' } }, { From 56d920d46af53e9d60368321435aed86e463063e Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Sun, 27 Mar 2022 11:04:51 +0300 Subject: [PATCH 113/211] feat: handle browser support (#96) --- src/components/Features/Login/Login.js | 13 ++++++++++++- src/components/Features/Login/Login.strings.js | 4 +++- src/components/UI/WalletLogin/WalletLogin.js | 9 +++++++-- .../UI/WalletLogin/WalletLogin.module.scss | 5 +++++ src/config/strings.js | 3 ++- src/utils/browser.js | 4 ++++ 6 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/components/Features/Login/Login.js b/src/components/Features/Login/Login.js index ebfec0dd..6e938884 100644 --- a/src/components/Features/Login/Login.js +++ b/src/components/Features/Login/Login.js @@ -8,7 +8,13 @@ import {Menu, WalletLogin} from '../../UI'; import {useHideModal, useProgressModal} from '../ModalProvider/ModalProvider.hooks'; import {AUTO_CONNECT_TIMEOUT_DURATION, MODAL_TIMEOUT_DURATION} from './Login.constants'; import styles from './Login.module.scss'; -import {DOWNLOAD_TEXT, MODAL_TXT, SUBTITLE_TXT, TITLE_TXT} from './Login.strings'; +import { + DOWNLOAD_TEXT, + MODAL_TXT, + SUBTITLE_TXT, + TITLE_TXT, + UNSUPPORTED_BROWSER_TXT +} from './Login.strings'; export const Login = () => { const {autoConnect} = useConfig(); @@ -25,6 +31,10 @@ export const Login = () => { useEffect(() => { let timeoutId; + if (!utils.browser.isChrome()) { + setErrorMsg(UNSUPPORTED_BROWSER_TXT); + return; + } if (autoConnect) { const handlers = getWalletHandlers(walletType); if (handlers.length > 0) { @@ -116,6 +126,7 @@ export const Login = () => { <WalletLogin key={id} description={description} + isDisabled={!utils.browser.isChrome()} logoPath={logoPath} name={name} onClick={() => onWalletConnect(walletHandler)} diff --git a/src/components/Features/Login/Login.strings.js b/src/components/Features/Login/Login.strings.js index b7c197b7..dfb60394 100644 --- a/src/components/Features/Login/Login.strings.js +++ b/src/components/Features/Login/Login.strings.js @@ -1,8 +1,10 @@ import utils from '../../../utils'; -const {title_txt, subtitle_txt, download_txt, modal_txt} = utils.getTranslation('menus.login'); +const {title_txt, subtitle_txt, download_txt, modal_txt, unsupported_browser_txt} = + utils.getTranslation('menus.login'); export const TITLE_TXT = title_txt; export const DOWNLOAD_TEXT = download_txt; +export const UNSUPPORTED_BROWSER_TXT = unsupported_browser_txt; export const SUBTITLE_TXT = networkName => utils.object.evaluate(subtitle_txt, {networkName}); export const MODAL_TXT = walletName => utils.object.evaluate(modal_txt, {walletName}); diff --git a/src/components/UI/WalletLogin/WalletLogin.js b/src/components/UI/WalletLogin/WalletLogin.js index 068bc661..a9e36eed 100644 --- a/src/components/UI/WalletLogin/WalletLogin.js +++ b/src/components/UI/WalletLogin/WalletLogin.js @@ -3,12 +3,16 @@ import React from 'react'; import {ReactComponent as ForwardIcon} from '../../../assets/svg/icons/forward.svg'; import utils from '../../../utils'; +import {toClasses} from '../../../utils/object'; import {DynamicIcon} from '../index'; import styles from './WalletLogin.module.scss'; -export const WalletLogin = ({name, description, logoPath, onClick}) => ( +export const WalletLogin = ({name, description, logoPath, isDisabled, onClick}) => ( <> - <div className={styles.walletLogin} onClick={onClick}> + <div + className={toClasses(styles.walletLogin, isDisabled && styles.isDisabled)} + onClick={onClick} + > <div className={styles.left}> <DynamicIcon path={logoPath} size={41} /> <div className={styles.text}> @@ -26,5 +30,6 @@ WalletLogin.propTypes = { name: PropTypes.string, description: PropTypes.string, logoPath: PropTypes.string, + isDisabled: PropTypes.bool, onClick: PropTypes.func }; diff --git a/src/components/UI/WalletLogin/WalletLogin.module.scss b/src/components/UI/WalletLogin/WalletLogin.module.scss index e3d3fd71..2fd5dd7a 100644 --- a/src/components/UI/WalletLogin/WalletLogin.module.scss +++ b/src/components/UI/WalletLogin/WalletLogin.module.scss @@ -11,6 +11,11 @@ $background-color-hover: $--color-alpha-1; align-items: center; justify-content: space-between; + &.isDisabled { + pointer-events: none; + opacity: 0.2; + } + .left { display: flex; diff --git a/src/config/strings.js b/src/config/strings.js index b1e5491e..1a287a15 100644 --- a/src/config/strings.js +++ b/src/config/strings.js @@ -14,7 +14,8 @@ const strings = { title_txt: 'Login', subtitle_txt: 'Please select {{networkName}} wallet to connect with this dApp:', download_txt: ['Don’t have a wallet?', 'Download Here'], - modal_txt: 'Waiting for confirmation from {{walletName}}' + modal_txt: 'Waiting for confirmation from {{walletName}}', + unsupported_browser_txt: `Note - The current version of StarkGate (Alpha) doesn't support your browser. Use Chrome to connect.` }, account: { title_txt: '{{network}} Account', diff --git a/src/utils/browser.js b/src/utils/browser.js index 9a2a5a3b..9de3222e 100644 --- a/src/utils/browser.js +++ b/src/utils/browser.js @@ -8,3 +8,7 @@ export const getUrlParameter = name => { const results = regex.exec(location.search); return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' ')); }; + +export const isChrome = () => { + return /(?=.*(chrome)).*/i.test(navigator.userAgent); +}; From cbeee2882b24cad6e101279b08ac6e2aeccefb76 Mon Sep 17 00:00:00 2001 From: github-actions-bot <> Date: Sun, 27 Mar 2022 08:06:24 +0000 Subject: [PATCH 114/211] chore(prerelease): 0.0.2-9 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a2efc774..37d716e0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "0.0.2-8", + "version": "0.0.2-9", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From ed38ae4925468e7331f974a618f3d4da04773ca8 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Sun, 27 Mar 2022 11:38:50 +0300 Subject: [PATCH 115/211] feat: remove redux and use providers (#98) --- README.md | 3 +- package.json | 2 - src/components/Containers/Header/Header.js | 6 +- src/components/Features/Account/Account.js | 12 +-- .../Features/Bridge/Bridge.hooks.js | 36 ------- src/components/Features/Bridge/Bridge.js | 4 +- .../Features/Bridge/Bridge.selectors.js | 3 - .../Features/Bridge/Bridge.slice.js | 30 ------ src/components/Features/Login/Login.js | 2 +- .../ModalProvider/ModalProvider.hooks.js | 73 -------------- .../ModalProvider/ModalProvider.selectors.js | 1 - .../ModalProvider/ModalProvider.slice.js | 27 ------ .../ModalProvider/ModalProvider.strings.js | 5 - .../Features/SelectToken/SelectToken.js | 10 +- .../Features/ToastProvider/ToastProvider.js | 12 +-- .../Features/Transfer/Transfer.hooks.js | 95 ------------------- src/components/Features/Transfer/Transfer.js | 9 +- .../Features/Transfer/Transfer.selectors.js | 41 -------- .../Features/Transfer/Transfer.slice.js | 38 -------- .../Features/TransferLog/TransferLog.js | 4 +- src/components/Features/index.js | 1 - .../Modal/ModalWrapper.js} | 8 +- src/components/UI/Modal/index.js | 1 + .../TransferLogContainer.js | 4 +- src/hooks/useContract.js | 6 +- src/hooks/useEventListener.js | 2 +- src/hooks/useMaxAmount.js | 4 +- src/hooks/useTokenBalance.js | 4 +- src/hooks/useTransfer.js | 12 +-- src/index.js | 4 +- src/providers/MenuProvider/MenuProvider.js | 37 ++++++++ src/providers/MenuProvider/index.js | 3 + src/providers/MenuProvider/menu-context.js | 9 ++ src/providers/MenuProvider/menu-hooks.js | 28 ++++++ src/providers/MenuProvider/menu-reducer.js | 42 ++++++++ src/providers/ModalProvider/ModalProvider.js | 34 +++++++ src/providers/ModalProvider/index.js | 3 + src/providers/ModalProvider/modal-context.js | 9 ++ src/providers/ModalProvider/modal-hooks.js | 71 ++++++++++++++ src/providers/ModalProvider/modal-reducer.js | 34 +++++++ src/providers/StoreProvider/StoreProvider.js | 11 --- src/providers/TokensProvider/tokens-hooks.js | 4 +- .../TransferProvider/TransferProvider.js | 57 +++++++++++ src/providers/TransferProvider/index.js | 3 + .../TransferProvider/transfer-context.js | 16 ++++ .../TransferProvider/transfer-hooks.js | 80 ++++++++++++++++ .../TransferProvider/transfer-reducer.js | 48 ++++++++++ .../TransfersLogProvider.js} | 14 +-- src/providers/TransfersLogProvider/index.js | 4 + .../transfers-log-context.js} | 2 +- .../transfers-log-hooks.js | 13 +++ .../transfers-log-reducer.js} | 4 +- src/providers/TransfersProvider/index.js | 4 - .../TransfersProvider/transfers-hooks.js | 13 --- .../WalletsProvider/WalletsProvider.js | 2 +- .../WalletsProvider/wallets-hooks.js | 4 +- src/providers/index.js | 12 ++- src/store/store.js | 13 --- yarn.lock | 75 +-------------- 59 files changed, 570 insertions(+), 538 deletions(-) delete mode 100644 src/components/Features/Bridge/Bridge.hooks.js delete mode 100644 src/components/Features/Bridge/Bridge.selectors.js delete mode 100644 src/components/Features/Bridge/Bridge.slice.js delete mode 100644 src/components/Features/ModalProvider/ModalProvider.hooks.js delete mode 100644 src/components/Features/ModalProvider/ModalProvider.selectors.js delete mode 100644 src/components/Features/ModalProvider/ModalProvider.slice.js delete mode 100644 src/components/Features/ModalProvider/ModalProvider.strings.js delete mode 100644 src/components/Features/Transfer/Transfer.hooks.js delete mode 100644 src/components/Features/Transfer/Transfer.selectors.js delete mode 100644 src/components/Features/Transfer/Transfer.slice.js rename src/components/{Features/ModalProvider/ModalProvider.js => UI/Modal/ModalWrapper.js} (81%) create mode 100644 src/providers/MenuProvider/MenuProvider.js create mode 100644 src/providers/MenuProvider/index.js create mode 100644 src/providers/MenuProvider/menu-context.js create mode 100644 src/providers/MenuProvider/menu-hooks.js create mode 100644 src/providers/MenuProvider/menu-reducer.js create mode 100644 src/providers/ModalProvider/ModalProvider.js create mode 100644 src/providers/ModalProvider/index.js create mode 100644 src/providers/ModalProvider/modal-context.js create mode 100644 src/providers/ModalProvider/modal-hooks.js create mode 100644 src/providers/ModalProvider/modal-reducer.js delete mode 100644 src/providers/StoreProvider/StoreProvider.js create mode 100644 src/providers/TransferProvider/TransferProvider.js create mode 100644 src/providers/TransferProvider/index.js create mode 100644 src/providers/TransferProvider/transfer-context.js create mode 100644 src/providers/TransferProvider/transfer-hooks.js create mode 100644 src/providers/TransferProvider/transfer-reducer.js rename src/providers/{TransfersProvider/TransfersProvider.js => TransfersLogProvider/TransfersLogProvider.js} (85%) create mode 100644 src/providers/TransfersLogProvider/index.js rename src/providers/{TransfersProvider/transfers-context.js => TransfersLogProvider/transfers-log-context.js} (61%) create mode 100644 src/providers/TransfersLogProvider/transfers-log-hooks.js rename src/providers/{TransfersProvider/transfers-reducer.js => TransfersLogProvider/transfers-log-reducer.js} (87%) delete mode 100644 src/providers/TransfersProvider/index.js delete mode 100644 src/providers/TransfersProvider/transfers-hooks.js delete mode 100644 src/store/store.js diff --git a/README.md b/README.md index 044d7198..8f7a0216 100644 --- a/README.md +++ b/README.md @@ -20,8 +20,7 @@ StarkNet is a permissionless decentralized Rollup operating as an L2 network over Ethereum.\ The _StarkNet bridge_ allows users to transfer ERC20 tokens from Ethereum to StarkNet and vice versa. -This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app) and -uses [Redux Toolkit](https://redux-toolkit.js.org/) for state management. +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). ## Prerequisites diff --git a/package.json b/package.json index 37d716e0..847bc883 100644 --- a/package.json +++ b/package.json @@ -49,12 +49,10 @@ "@argent/get-starknet": "^1.1.3", "@headlessui/react": "^1.4.2", "@metamask/onboarding": "^1.0.1", - "@reduxjs/toolkit": "^1.6.2", "js-logger": "^1.6.1", "react": "^17.0.2", "react-dom": "^17.0.2", "react-hot-toast": "^2.1.1", - "react-redux": "^7.2.6", "react-scripts": "4.0.3", "starknet": "^3.0.0", "use-async-memo": "^1.2.3", diff --git a/src/components/Containers/Header/Header.js b/src/components/Containers/Header/Header.js index 442a3719..d20b56ee 100644 --- a/src/components/Containers/Header/Header.js +++ b/src/components/Containers/Header/Header.js @@ -1,17 +1,17 @@ import React from 'react'; import {ReactComponent as StarkGateLogo} from '../../../assets/img/starkgate.svg'; +import {useMenu} from '../../../providers/MenuProvider'; +import {useIsL1, useIsL2} from '../../../providers/TransferProvider'; import {useL1Wallet, useL2Wallet, useWallets} from '../../../providers/WalletsProvider'; import utils from '../../../utils'; -import {useBridgeActions} from '../../Features/Bridge/Bridge.hooks'; -import {useIsL1, useIsL2} from '../../Features/Transfer/Transfer.hooks'; import {WalletButton} from '../../UI'; import styles from './Header.module.scss'; import {CHAIN_TXT} from './Header.strings'; export const Header = () => { const {chainName, isConnected} = useWallets(); - const {showAccountMenu, showTransferMenu} = useBridgeActions(); + const {showAccountMenu, showTransferMenu} = useMenu(); const [, swapToL1] = useIsL1(); const [, swapToL2] = useIsL2(); const {account: l1Account, isConnected: isL1AccountConnected, config: l1Config} = useL1Wallet(); diff --git a/src/components/Features/Account/Account.js b/src/components/Features/Account/Account.js index d9b99c89..b28d998a 100644 --- a/src/components/Features/Account/Account.js +++ b/src/components/Features/Account/Account.js @@ -3,7 +3,9 @@ import React from 'react'; import constants from '../../../config/constants'; import {useCompleteTransferToL1} from '../../../hooks'; -import {useAccountTransfers} from '../../../providers/TransfersProvider'; +import {useMenu} from '../../../providers/MenuProvider'; +import {useTransfer} from '../../../providers/TransferProvider'; +import {useAccountTransfersLog} from '../../../providers/TransfersLogProvider'; import {useWallets} from '../../../providers/WalletsProvider'; import utils from '../../../utils'; import { @@ -15,8 +17,6 @@ import { TransferLogContainer } from '../../UI'; import {LinkButton} from '../../UI/LinkButton/LinkButton'; -import {useBridgeActions} from '../Bridge/Bridge.hooks'; -import {useTransferData} from '../Transfer/Transfer.hooks'; import {TransferLog} from '../TransferLog/TransferLog'; import styles from './Account.module.scss'; import {TITLE_TXT} from './Account.strings'; @@ -24,10 +24,10 @@ import {TITLE_TXT} from './Account.strings'; const {LINKS} = constants; export const Account = ({transferId}) => { - const {showTransferMenu} = useBridgeActions(); + const {showTransferMenu} = useMenu(); const {account, chainId, resetWallet} = useWallets(); - const transfers = useAccountTransfers(account); - const {isL1, isL2, fromNetwork} = useTransferData(); + const transfers = useAccountTransfersLog(account); + const {isL1, isL2, fromNetwork} = useTransfer(); const completeTransferToL1 = useCompleteTransferToL1(); const renderTransfers = () => { diff --git a/src/components/Features/Bridge/Bridge.hooks.js b/src/components/Features/Bridge/Bridge.hooks.js deleted file mode 100644 index 9aa6e6ef..00000000 --- a/src/components/Features/Bridge/Bridge.hooks.js +++ /dev/null @@ -1,36 +0,0 @@ -import {useCallback} from 'react'; -import {useDispatch, useSelector} from 'react-redux'; - -import {MenuType} from '../../../enums'; -import {selectBridge} from './Bridge.selectors'; -import {showMenuAction, resetMenuPropsAction} from './Bridge.slice'; - -export const useBridgeData = () => ({ - ...useSelector(selectBridge) -}); - -export const useBridgeActions = () => { - return { - showAccountMenu: useShowBridgeMenu(MenuType.ACCOUNT), - showTransferMenu: useShowBridgeMenu(MenuType.TRANSFER), - showSelectTokenMenu: useShowBridgeMenu(MenuType.SELECT_TOKEN), - resetMenuProps: useResetMenuProps() - }; -}; - -const useShowBridgeMenu = menu => { - const dispatch = useDispatch(); - return useCallback( - menuProps => { - dispatch(showMenuAction({menu, menuProps})); - }, - [dispatch] - ); -}; - -const useResetMenuProps = () => { - const dispatch = useDispatch(); - return useCallback(() => { - dispatch(resetMenuPropsAction()); - }, [dispatch]); -}; diff --git a/src/components/Features/Bridge/Bridge.js b/src/components/Features/Bridge/Bridge.js index 2a964b32..fe9ceb82 100644 --- a/src/components/Features/Bridge/Bridge.js +++ b/src/components/Features/Bridge/Bridge.js @@ -2,11 +2,11 @@ import React from 'react'; import {Account, SelectToken, ToastProvider, Transfer} from '..'; import {MenuType} from '../../../enums'; -import {useBridgeData} from './Bridge.hooks'; +import {useMenu} from '../../../providers/MenuProvider'; import styles from './Bridge.module.scss'; export const Bridge = () => { - const {menu, menuProps} = useBridgeData(); + const {menu, menuProps} = useMenu(); const renderMenu = () => { switch (menu) { diff --git a/src/components/Features/Bridge/Bridge.selectors.js b/src/components/Features/Bridge/Bridge.selectors.js deleted file mode 100644 index 993b9f14..00000000 --- a/src/components/Features/Bridge/Bridge.selectors.js +++ /dev/null @@ -1,3 +0,0 @@ -export const selectBridge = state => state.bridge; - -export const selectMenu = state => state.bridge.menu; diff --git a/src/components/Features/Bridge/Bridge.slice.js b/src/components/Features/Bridge/Bridge.slice.js deleted file mode 100644 index 03fa6be1..00000000 --- a/src/components/Features/Bridge/Bridge.slice.js +++ /dev/null @@ -1,30 +0,0 @@ -import {createSlice} from '@reduxjs/toolkit'; - -import {MenuType} from '../../../enums'; - -const initialState = { - menu: MenuType.TRANSFER, - menuProps: { - [MenuType.ACCOUNT]: {transferId: null} - } -}; - -const bridgeSlice = createSlice({ - name: 'bridge', - initialState, - reducers: { - showMenuAction(state, action) { - state.menu = action.payload.menu; - state.menuProps = { - [action.payload.menu]: action.payload.menuProps - }; - }, - resetMenuPropsAction(state) { - state.menuProps[state.menu] = initialState.menuProps[state.menu]; - } - } -}); - -export const {showMenuAction, resetAction, resetMenuPropsAction} = bridgeSlice.actions; - -export default bridgeSlice.reducer; diff --git a/src/components/Features/Login/Login.js b/src/components/Features/Login/Login.js index 6e938884..672d727d 100644 --- a/src/components/Features/Login/Login.js +++ b/src/components/Features/Login/Login.js @@ -2,10 +2,10 @@ import React, {useEffect, useRef, useState} from 'react'; import {NetworkType, toChainName, WalletStatus, WalletType} from '../../../enums'; import {useConfig, useWalletHandlerProvider} from '../../../hooks'; +import {useHideModal, useProgressModal} from '../../../providers/ModalProvider'; import {useL1Wallet, useL2Wallet, useWallets} from '../../../providers/WalletsProvider'; import utils from '../../../utils'; import {Menu, WalletLogin} from '../../UI'; -import {useHideModal, useProgressModal} from '../ModalProvider/ModalProvider.hooks'; import {AUTO_CONNECT_TIMEOUT_DURATION, MODAL_TIMEOUT_DURATION} from './Login.constants'; import styles from './Login.module.scss'; import { diff --git a/src/components/Features/ModalProvider/ModalProvider.hooks.js b/src/components/Features/ModalProvider/ModalProvider.hooks.js deleted file mode 100644 index 28356883..00000000 --- a/src/components/Features/ModalProvider/ModalProvider.hooks.js +++ /dev/null @@ -1,73 +0,0 @@ -import {useCallback} from 'react'; -import {useDispatch, useSelector} from 'react-redux'; - -import {ModalType} from '../../UI/Modal/Modal/Modal.constants'; -import {selectModal} from './ModalProvider.selectors'; -import {hideModalAction, showModalAction} from './ModalProvider.slice'; -import {TRANSACTION_SUBMITTED_TITLE_TXT} from './ModalProvider.strings'; - -export const useModal = () => ({ - ...useSelector(selectModal) -}); - -export const useHideModal = () => { - const dispatch = useDispatch(); - return useCallback(() => { - dispatch(hideModalAction()); - }, [dispatch]); -}; - -export const useProgressModal = () => { - const dispatch = useDispatch(); - return useCallback( - (title, message, type = ModalType.INFO) => { - dispatch( - showModalAction({ - componentPath: 'UI/Modal/ProgressModal/ProgressModal', - componentProps: { - message - }, - title, - type - }) - ); - }, - [dispatch] - ); -}; - -export const useTransactionSubmittedModal = () => { - const dispatch = useDispatch(); - return useCallback( - transfer => { - dispatch( - showModalAction({ - componentPath: 'UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal', - componentProps: { - transfer - }, - title: TRANSACTION_SUBMITTED_TITLE_TXT, - isClosable: true - }) - ); - }, - [dispatch] - ); -}; - -export const useErrorModal = () => { - const dispatch = useDispatch(); - return useCallback( - (title, body) => { - dispatch( - showModalAction({ - title, - body, - isClosable: true, - type: ModalType.ERROR - }) - ); - }, - [dispatch] - ); -}; diff --git a/src/components/Features/ModalProvider/ModalProvider.selectors.js b/src/components/Features/ModalProvider/ModalProvider.selectors.js deleted file mode 100644 index d0f21e88..00000000 --- a/src/components/Features/ModalProvider/ModalProvider.selectors.js +++ /dev/null @@ -1 +0,0 @@ -export const selectModal = state => state.modal; diff --git a/src/components/Features/ModalProvider/ModalProvider.slice.js b/src/components/Features/ModalProvider/ModalProvider.slice.js deleted file mode 100644 index 372a9c71..00000000 --- a/src/components/Features/ModalProvider/ModalProvider.slice.js +++ /dev/null @@ -1,27 +0,0 @@ -import {createSlice} from '@reduxjs/toolkit'; - -const initialState = { - show: false, - componentPath: '', - componentProps: null, - withButtons: false, - isClosable: false, - body: '' -}; - -const modalSlice = createSlice({ - name: 'modal', - initialState, - reducers: { - showModalAction(state, action) { - Object.assign(state, {...action.payload, show: true}); - }, - hideModalAction(state) { - Object.assign(state, initialState); - } - } -}); - -export const {showModalAction, hideModalAction} = modalSlice.actions; - -export default modalSlice.reducer; diff --git a/src/components/Features/ModalProvider/ModalProvider.strings.js b/src/components/Features/ModalProvider/ModalProvider.strings.js deleted file mode 100644 index e3bffdf1..00000000 --- a/src/components/Features/ModalProvider/ModalProvider.strings.js +++ /dev/null @@ -1,5 +0,0 @@ -import utils from '../../../utils'; - -export const TRANSACTION_SUBMITTED_TITLE_TXT = utils.getTranslation( - 'modals.transactionSubmitted.title_txt' -); diff --git a/src/components/Features/SelectToken/SelectToken.js b/src/components/Features/SelectToken/SelectToken.js index 62fd1d9d..97daffb0 100644 --- a/src/components/Features/SelectToken/SelectToken.js +++ b/src/components/Features/SelectToken/SelectToken.js @@ -3,19 +3,19 @@ import React, {useEffect, useState} from 'react'; import L1Logo from '../../../assets/svg/tokens/eth.svg'; import L2Logo from '../../../assets/svg/tokens/starknet.svg'; import {useColors} from '../../../hooks'; +import {useMenu} from '../../../providers/MenuProvider'; import {useTokens} from '../../../providers/TokensProvider'; +import {useTransfer} from '../../../providers/TransferProvider'; import {BackButton, Menu, MenuTitle, SearchToken, SelectTokenList} from '../../UI'; -import {useBridgeActions} from '../Bridge/Bridge.hooks'; -import {useTransferActions, useTransferData} from '../Transfer/Transfer.hooks'; import styles from './SelectToken.module.scss'; import {TITLE_TXT} from './SelectToken.strings'; export const SelectToken = () => { const {tokens} = useTokens(); const {colorBeta} = useColors(); - const {showTransferMenu} = useBridgeActions(); - const {isL1, fromNetwork} = useTransferData(); - const {selectToken} = useTransferActions(); + const {showTransferMenu} = useMenu(); + const {isL1, fromNetwork} = useTransfer(); + const {selectToken} = useTransfer(); const [searchTokens, setSearchTokens] = useState(tokens); useEffect(() => { diff --git a/src/components/Features/ToastProvider/ToastProvider.js b/src/components/Features/ToastProvider/ToastProvider.js index a1143562..2d0535c0 100644 --- a/src/components/Features/ToastProvider/ToastProvider.js +++ b/src/components/Features/ToastProvider/ToastProvider.js @@ -5,21 +5,21 @@ import useDeepCompareEffect from 'use-deep-compare-effect'; import {ActionType, isConsumed, isOnChain, isRejected, NetworkType} from '../../../enums'; import {useCompleteTransferToL1, usePrevious} from '../../../hooks'; -import {useTransfers} from '../../../providers/TransfersProvider'; +import {useMenu} from '../../../providers/MenuProvider'; +import {useIsL1, useIsL2} from '../../../providers/TransferProvider'; +import {useTransfersLog} from '../../../providers/TransfersLogProvider'; import utils from '../../../utils'; -import {ToastBody, TransferToast, CompleteTransferToL1Toast} from '../../UI'; -import {useBridgeActions} from '../Bridge/Bridge.hooks'; -import {useIsL1, useIsL2} from '../Transfer/Transfer.hooks'; +import {CompleteTransferToL1Toast, ToastBody, TransferToast} from '../../UI'; import styles from './ToastProvider.module.scss'; import {ALPHA_DISCLAIMER_MSG} from './ToastProvider.strings'; export const ToastProvider = () => { - const {transfers} = useTransfers(); + const {transfers} = useTransfersLog(); const prevTransfers = usePrevious(transfers); const toastsMap = useRef({}); const toastsDismissed = useRef({}); const completeTransferToL1 = useCompleteTransferToL1(); - const {showAccountMenu} = useBridgeActions(); + const {showAccountMenu} = useMenu(); const [, swapToL1] = useIsL1(); const [, swapToL2] = useIsL2(); diff --git a/src/components/Features/Transfer/Transfer.hooks.js b/src/components/Features/Transfer/Transfer.hooks.js deleted file mode 100644 index 040de3eb..00000000 --- a/src/components/Features/Transfer/Transfer.hooks.js +++ /dev/null @@ -1,95 +0,0 @@ -import {useCallback, useMemo} from 'react'; -import {useDispatch, useSelector} from 'react-redux'; - -import {ActionType} from '../../../enums'; -import {useL1Token, useL2Token} from '../../../providers/TokensProvider'; -import { - fromNetworkSelector, - toL1Selector, - getCurrentAmountSelector, - selectSymbol, - selectTransfer, - toNetworkSelector, - toL2Selector -} from './Transfer.selectors'; -import {resetAction, selectTokenAction, setAmountAction, setTransferAction} from './Transfer.slice'; - -export const useTransferActions = () => ({ - setAmount: useSetAmount(), - setActionType: useSetActionType(), - selectToken: useSelectToken(), - resetTransfer: useResetTransfer() -}); - -export const useTransferData = () => { - return { - ...useSelector(selectTransfer), - selectedToken: useSelectedToken(), - symbol: useSelector(selectSymbol), - isL1: useSelector(toL2Selector), - isL2: useSelector(toL1Selector), - fromNetwork: useSelector(fromNetworkSelector), - toNetwork: useSelector(toNetworkSelector) - }; -}; - -export const useSelectedToken = () => { - const symbol = useSelector(selectSymbol); - const isL1 = useSelector(toL2Selector); - const l1Token = useL1Token()(symbol); - const l2Token = useL2Token()(symbol); - return useMemo(() => (isL1 ? l1Token : l2Token), [symbol, isL1, l1Token, l2Token]); -}; - -export const useAmount = () => { - const amount = useSelector(getCurrentAmountSelector); - const setAmount = useSetAmount(); - const clearAmount = () => setAmount(''); - return [amount, setAmount, clearAmount]; -}; - -export const useIsL1 = () => { - const isL1 = useSelector(toL2Selector); - const swapToL1 = useSetActionType(ActionType.TRANSFER_TO_L2); - return [isL1, swapToL1]; -}; - -export const useIsL2 = () => { - const isL2 = useSelector(toL1Selector); - const swapToL2 = useSetActionType(ActionType.TRANSFER_TO_L1); - return [isL2, swapToL2]; -}; - -const useSetAmount = () => { - const dispatch = useDispatch(); - return useCallback( - amount => { - dispatch(setAmountAction(amount)); - }, - [dispatch] - ); -}; - -const useSetActionType = action => { - const dispatch = useDispatch(); - return useCallback(() => { - dispatch(setTransferAction(action)); - }, [dispatch]); -}; - -const useSelectToken = () => { - const dispatch = useDispatch(); - return useCallback( - symbol => { - dispatch(selectTokenAction(symbol)); - }, - [dispatch] - ); -}; - -const useResetTransfer = () => { - const dispatch = useDispatch(); - return useCallback(() => { - dispatch(resetAction()); - }, [dispatch]); -}; diff --git a/src/components/Features/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer.js index a6b5ed18..7187ccf7 100644 --- a/src/components/Features/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer.js @@ -2,7 +2,9 @@ import React, {useEffect, useState} from 'react'; import {ActionType, NetworkType} from '../../../enums'; import {useMaxAmount, useTransferToL1, useTransferToL2} from '../../../hooks'; +import {useMenu} from '../../../providers/MenuProvider'; import {useL1Token, useL2Token, useTokens} from '../../../providers/TokensProvider'; +import {useAmount, useIsL1, useIsL2, useTransfer} from '../../../providers/TransferProvider'; import { Loading, Menu, @@ -13,8 +15,6 @@ import { TransferMenuTab } from '../../UI'; import {LoadingSize} from '../../UI/Loading/Loading.enums'; -import {useBridgeActions} from '../Bridge/Bridge.hooks'; -import {useAmount, useIsL1, useIsL2, useTransferActions, useTransferData} from './Transfer.hooks'; import styles from './Transfer.module.scss'; import {INSUFFICIENT_BALANCE_ERROR_MSG, MAX_AMOUNT_ERROR_MSG} from './Transfer.strings'; @@ -25,9 +25,8 @@ export const Transfer = () => { const [hasInputError, setHasInputError] = useState(false); const [errorMsg, setErrorMsg] = useState(''); const [isButtonDisabled, setIsButtonDisabled] = useState(true); - const {showSelectTokenMenu} = useBridgeActions(); - const {selectedToken, action, symbol} = useTransferData(); - const {selectToken} = useTransferActions(); + const {showSelectTokenMenu} = useMenu(); + const {selectToken, selectedToken, action, symbol} = useTransfer(); const {tokens} = useTokens(); const transferToL2 = useTransferToL2(); const transferToL1 = useTransferToL1(); diff --git a/src/components/Features/Transfer/Transfer.selectors.js b/src/components/Features/Transfer/Transfer.selectors.js deleted file mode 100644 index 07d9245e..00000000 --- a/src/components/Features/Transfer/Transfer.selectors.js +++ /dev/null @@ -1,41 +0,0 @@ -import {createSelector} from '@reduxjs/toolkit'; - -import {ActionType, NetworkType} from '../../../enums'; - -export const selectTransfer = state => state.transfer; - -export const selectTransferAction = state => state.transfer.action; - -export const selectSymbol = state => state.transfer.symbol; - -export const selectTransferToL1Amount = state => state.transfer.transferToL1Amount; - -export const selectTransferToL2Amount = state => state.transfer.transferToL2Amount; - -export const toL2Selector = createSelector( - selectTransferAction, - action => action === ActionType.TRANSFER_TO_L2 -); - -export const toL1Selector = createSelector( - selectTransferAction, - action => action === ActionType.TRANSFER_TO_L1 -); - -export const fromNetworkSelector = createSelector(selectTransferAction, action => - action === ActionType.TRANSFER_TO_L2 ? NetworkType.L1 : NetworkType.L2 -); - -export const toNetworkSelector = createSelector(selectTransferAction, action => - action === ActionType.TRANSFER_TO_L2 ? NetworkType.L2 : NetworkType.L1 -); - -export const getCurrentAmountSelector = createSelector( - [selectTransferAction, selectTransferToL2Amount, selectTransferToL1Amount], - (action, transferToL2Amount, transferToL1Amount) => { - if (action === ActionType.TRANSFER_TO_L2) { - return transferToL2Amount; - } - return transferToL1Amount; - } -); diff --git a/src/components/Features/Transfer/Transfer.slice.js b/src/components/Features/Transfer/Transfer.slice.js deleted file mode 100644 index b2299b39..00000000 --- a/src/components/Features/Transfer/Transfer.slice.js +++ /dev/null @@ -1,38 +0,0 @@ -import {createSlice} from '@reduxjs/toolkit'; - -import {ActionType} from '../../../enums'; - -const initialState = { - action: ActionType.TRANSFER_TO_L2, - symbol: '', - transferToL2Amount: '', - transferToL1Amount: '' -}; - -const transferSlice = createSlice({ - name: 'transfer', - initialState, - reducers: { - setTransferAction(state, action) { - state.action = action.payload; - }, - selectTokenAction(state, action) { - state.symbol = action.payload; - }, - setAmountAction(state, action) { - if (state.action === ActionType.TRANSFER_TO_L2) { - state.transferToL2Amount = action.payload; - } else { - state.transferToL1Amount = action.payload; - } - }, - resetAction(state) { - Object.assign(state, initialState); - } - } -}); - -export const {selectTokenAction, setTransferAction, setAmountAction, resetAction} = - transferSlice.actions; - -export default transferSlice.reducer; diff --git a/src/components/Features/TransferLog/TransferLog.js b/src/components/Features/TransferLog/TransferLog.js index db9d2ec6..d276c55d 100644 --- a/src/components/Features/TransferLog/TransferLog.js +++ b/src/components/Features/TransferLog/TransferLog.js @@ -10,12 +10,12 @@ import { TransactionStatusFriendlyMessage } from '../../../enums'; import {useColors} from '../../../hooks'; +import {useTransfer} from '../../../providers/TransferProvider'; import {useWallets} from '../../../providers/WalletsProvider'; import utils from '../../../utils'; import {Button, CryptoLogo} from '../../UI'; import {CryptoLogoSize} from '../../UI/CryptoLogo/CryptoLogo.enums'; import {LinkButton} from '../../UI/LinkButton/LinkButton'; -import {useTransferData} from '../Transfer/Transfer.hooks'; import styles from './TransferLog.module.scss'; import {COMPLETE_TRANSFER_BTN_TXT} from './TransferLog.strings'; @@ -24,7 +24,7 @@ const {LINKS} = constants; export const TransferLog = ({transfer, onCompleteTransferClick}) => { const {symbol, timestamp, name, amount, status, l1hash, l2hash} = transfer; const [sign, setSign] = useState(''); - const {action, isL1} = useTransferData(); + const {action, isL1} = useTransfer(); const {chainId} = useWallets(); useEffect(() => { diff --git a/src/components/Features/index.js b/src/components/Features/index.js index 6e2387b6..74ba3d09 100644 --- a/src/components/Features/index.js +++ b/src/components/Features/index.js @@ -1,7 +1,6 @@ export * from './Account/Account'; export * from './Bridge/Bridge'; export * from './Login/Login'; -export * from './ModalProvider/ModalProvider'; export * from './SelectToken/SelectToken'; export * from './Transfer/Transfer'; export * from './TransferLog/TransferLog'; diff --git a/src/components/Features/ModalProvider/ModalProvider.js b/src/components/UI/Modal/ModalWrapper.js similarity index 81% rename from src/components/Features/ModalProvider/ModalProvider.js rename to src/components/UI/Modal/ModalWrapper.js index b59d7da4..d3362ec3 100644 --- a/src/components/Features/ModalProvider/ModalProvider.js +++ b/src/components/UI/Modal/ModalWrapper.js @@ -1,10 +1,10 @@ import React, {lazy, Suspense} from 'react'; -import {Loading, Modal, ModalBody, ModalFooter, ModalHeader, ModalTitle} from '../../UI'; -import {LoadingSize} from '../../UI/Loading/Loading.enums'; -import {useHideModal, useModal} from './ModalProvider.hooks'; +import {useHideModal, useModal} from '../../../providers/ModalProvider'; +import {LoadingSize} from '../Loading/Loading.enums'; +import {Loading, Modal, ModalBody, ModalFooter, ModalHeader, ModalTitle} from '../index'; -export const ModalProvider = () => { +export const ModalWrapper = () => { const modal = useModal(); const handleOnClose = useHideModal(); const CustomComponent = lazy(() => import(`../../${modal.componentPath}`)); diff --git a/src/components/UI/Modal/index.js b/src/components/UI/Modal/index.js index 6aff1f58..53d043a8 100644 --- a/src/components/UI/Modal/index.js +++ b/src/components/UI/Modal/index.js @@ -1,3 +1,4 @@ +export * from './ModalWrapper'; export * from './Modal/Modal'; export * from './ModalHeader/ModalHeader'; export * from './ModalBody/ModalBody'; diff --git a/src/components/UI/TransferLogContainer/TransferLogContainer.js b/src/components/UI/TransferLogContainer/TransferLogContainer.js index e068dc8d..1a0a1ab2 100644 --- a/src/components/UI/TransferLogContainer/TransferLogContainer.js +++ b/src/components/UI/TransferLogContainer/TransferLogContainer.js @@ -2,8 +2,8 @@ import PropTypes from 'prop-types'; import React, {useState} from 'react'; import {ReactComponent as CollapseIcon} from '../../../assets/svg/icons/collapse.svg'; +import {useMenu} from '../../../providers/MenuProvider'; import utils from '../../../utils'; -import {useBridgeActions} from '../../Features/Bridge/Bridge.hooks'; import styles from './TransferLogContainer.module.scss'; import { EMPTY_MSG_TXT, @@ -13,7 +13,7 @@ import { } from './TransferLogContainer.strings'; export const TransferLogContainer = ({transferIndex, children}) => { - const {resetMenuProps} = useBridgeActions(); + const {resetMenuProps} = useMenu(); const [showChildren, setShowChildren] = useState(false); const toggleShowChildren = () => { diff --git a/src/hooks/useContract.js b/src/hooks/useContract.js index b086655e..2dff0b24 100644 --- a/src/hooks/useContract.js +++ b/src/hooks/useContract.js @@ -2,10 +2,10 @@ import {useCallback, useMemo} from 'react'; import {L1_ERC20_ABI, L1_ERC20_BRIDGE_ABI, L1_ETH_BRIDGE_ABI, L1_MESSAGING_ABI} from '../abis/l1'; import {L2_BRIDGE_ABI, L2_ERC20_ABI} from '../abis/l2'; -import {useTransferData} from '../components/Features/Transfer/Transfer.hooks'; import {STARKNET_CONTRACT_ADDRESS} from '../config/contracts'; import {NetworkType} from '../enums'; import {useL1Token} from '../providers/TokensProvider'; +import {useTransfer} from '../providers/TransferProvider'; import {useL1Wallet, useWallets} from '../providers/WalletsProvider'; import utils from '../utils'; @@ -35,7 +35,7 @@ export const useContract = (ABI, getContractHandler = utils.blockchain.ethereum. export const useTokenContract = () => { const getL1TokenContract = useL1TokenContract(); const getL2TokenContract = useL2TokenContract(); - const {isL1} = useTransferData(); + const {isL1} = useTransfer(); return useCallback( tokenAddresses => isL1 ? getL1TokenContract(tokenAddresses) : getL2TokenContract(tokenAddresses), @@ -46,7 +46,7 @@ export const useTokenContract = () => { export const useTokenBridgeContract = () => { const getL1TokenBridgeContract = useL1TokenBridgeContract(); const getL2TokenBridgeContract = useL2TokenBridgeContract(); - const {isL1} = useTransferData(); + const {isL1} = useTransfer(); return useCallback( bridgeAddress => isL1 ? getL1TokenBridgeContract(bridgeAddress) : getL2TokenBridgeContract(bridgeAddress), diff --git a/src/hooks/useEventListener.js b/src/hooks/useEventListener.js index eee3392b..3fec1a7d 100644 --- a/src/hooks/useEventListener.js +++ b/src/hooks/useEventListener.js @@ -1,9 +1,9 @@ import {useCallback} from 'react'; -import {useSelectedToken} from '../components/Features/Transfer/Transfer.hooks'; import {TransactionHashPrefix} from '../enums'; import {starknet} from '../libs'; import {useL1Token, useL2Token} from '../providers/TokensProvider'; +import {useSelectedToken} from '../providers/TransferProvider'; import {useL1Wallet, useL2Wallet} from '../providers/WalletsProvider'; import utils from '../utils'; import {useStarknetContract, useTokenBridgeContract} from './useContract'; diff --git a/src/hooks/useMaxAmount.js b/src/hooks/useMaxAmount.js index c6aa0fd4..ea15d5d6 100644 --- a/src/hooks/useMaxAmount.js +++ b/src/hooks/useMaxAmount.js @@ -1,13 +1,13 @@ import {useAsyncMemo} from 'use-async-memo'; import {maxDeposit} from '../api/bridge'; -import {useTransferData} from '../components/Features/Transfer/Transfer.hooks'; +import {useTransfer} from '../providers/TransferProvider'; import {useTokenBridgeContract} from './useContract'; const cache = {}; export const useMaxAmount = () => { - const {symbol, isL1, selectedToken} = useTransferData(); + const {symbol, isL1, selectedToken} = useTransfer(); const getTokenBridgeContract = useTokenBridgeContract(); const fetchMaxAmount = async () => { diff --git a/src/hooks/useTokenBalance.js b/src/hooks/useTokenBalance.js index 421dd343..6f2818c6 100644 --- a/src/hooks/useTokenBalance.js +++ b/src/hooks/useTokenBalance.js @@ -1,14 +1,14 @@ import {useCallback} from 'react'; import {balanceOf, ethBalanceOf} from '../api/erc20'; -import {useTransferData} from '../components/Features/Transfer/Transfer.hooks'; +import {useTransfer} from '../providers/TransferProvider'; import utils from '../utils'; import {useL1TokenContract, useL2TokenContract} from './useContract'; export const useTokenBalance = account => { const getL2TokenBalance = useL2TokenBalance(account); const getL1TokenBalance = useL1TokenBalance(account); - const {isL1} = useTransferData(); + const {isL1} = useTransfer(); return useCallback( tokenAddresses => isL1 ? getL1TokenBalance(tokenAddresses) : getL2TokenBalance(tokenAddresses), diff --git a/src/hooks/useTransfer.js b/src/hooks/useTransfer.js index d9a3e3d4..dbec7446 100644 --- a/src/hooks/useTransfer.js +++ b/src/hooks/useTransfer.js @@ -2,17 +2,17 @@ import {useCallback} from 'react'; import {deposit, depositEth, initiateWithdraw, withdraw} from '../api/bridge'; import {allowance, approve} from '../api/erc20'; +import {ActionType, TransactionStatus} from '../enums'; +import {starknet} from '../libs'; import { useErrorModal, useHideModal, useProgressModal, useTransactionSubmittedModal -} from '../components/Features/ModalProvider/ModalProvider.hooks'; -import {useAmount, useSelectedToken} from '../components/Features/Transfer/Transfer.hooks'; -import {ActionType, TransactionStatus} from '../enums'; -import {starknet} from '../libs'; +} from '../providers/ModalProvider'; import {useL1Token, useTokens} from '../providers/TokensProvider'; -import {useTransfers} from '../providers/TransfersProvider'; +import {useAmount, useSelectedToken} from '../providers/TransferProvider'; +import {useTransfersLog} from '../providers/TransfersLogProvider'; import {useL1Wallet, useL2Wallet} from '../providers/WalletsProvider'; import utils from '../utils'; import {useL1TokenBridgeContract, useTokenBridgeContract, useTokenContract} from './useContract'; @@ -241,7 +241,7 @@ const useTransfer = () => { const showErrorModal = useErrorModal(); const hideModal = useHideModal(); const showTransactionSubmittedModal = useTransactionSubmittedModal(); - const {addTransfer} = useTransfers(); + const {addTransfer} = useTransfersLog(); const {updateTokenBalance} = useTokens(); const [, , clearAmount] = useAmount(); diff --git a/src/index.js b/src/index.js index b4a8eb10..0c24bc90 100644 --- a/src/index.js +++ b/src/index.js @@ -2,7 +2,7 @@ import React from 'react'; import ReactDOM from 'react-dom'; import {App} from './App'; -import {ModalProvider} from './components/Features'; +import {ModalWrapper} from './components/UI'; import './index.scss'; import {Providers} from './providers'; import utils from './utils'; @@ -16,7 +16,7 @@ if (process.env.NODE_ENV === 'development' || utils.browser.getUrlParameter('deb ReactDOM.render( <Providers> <App /> - <ModalProvider /> + <ModalWrapper /> </Providers>, document.getElementById('root') ); diff --git a/src/providers/MenuProvider/MenuProvider.js b/src/providers/MenuProvider/MenuProvider.js new file mode 100644 index 00000000..680b6b0b --- /dev/null +++ b/src/providers/MenuProvider/MenuProvider.js @@ -0,0 +1,37 @@ +import PropTypes from 'prop-types'; +import React, {useReducer} from 'react'; + +import {MenuContext} from './menu-context'; +import {actions, initialState, reducer} from './menu-reducer'; + +export const MenuProvider = ({children}) => { + const [state, dispatch] = useReducer(reducer, initialState); + + const showMenu = (menu, menuProps) => { + dispatch({ + type: actions.SHOW_MENU, + payload: { + menu, + menuProps + } + }); + }; + + const resetMenuProps = () => { + dispatch({ + type: actions.RESET_MENU_PROPS + }); + }; + + const value = { + ...state, + showMenu, + resetMenuProps + }; + + return <MenuContext.Provider value={value}>{children}</MenuContext.Provider>; +}; + +MenuProvider.propTypes = { + children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) +}; diff --git a/src/providers/MenuProvider/index.js b/src/providers/MenuProvider/index.js new file mode 100644 index 00000000..4d0f7a21 --- /dev/null +++ b/src/providers/MenuProvider/index.js @@ -0,0 +1,3 @@ +export * from './menu-context'; +export * from './menu-hooks'; +export * from './MenuProvider'; diff --git a/src/providers/MenuProvider/menu-context.js b/src/providers/MenuProvider/menu-context.js new file mode 100644 index 00000000..47d9b06a --- /dev/null +++ b/src/providers/MenuProvider/menu-context.js @@ -0,0 +1,9 @@ +import {createContext} from 'react'; + +import {initialState} from './menu-reducer'; + +export const MenuContext = createContext({ + ...initialState, + showMenu: (menu, menuProps) => ({menu, menuProps}), + resetMenuProps: () => {} +}); diff --git a/src/providers/MenuProvider/menu-hooks.js b/src/providers/MenuProvider/menu-hooks.js new file mode 100644 index 00000000..4b82cce8 --- /dev/null +++ b/src/providers/MenuProvider/menu-hooks.js @@ -0,0 +1,28 @@ +import {useCallback, useContext} from 'react'; + +import {MenuType} from '../../enums'; +import {MenuContext} from './menu-context'; + +export const useMenu = () => { + const {menu, menuProps, resetMenuProps} = useContext(MenuContext); + + return { + menu, + menuProps, + showAccountMenu: useShowMenu(MenuType.ACCOUNT), + showTransferMenu: useShowMenu(MenuType.TRANSFER), + showSelectTokenMenu: useShowMenu(MenuType.SELECT_TOKEN), + resetMenuProps + }; +}; + +const useShowMenu = menu => { + const {showMenu} = useContext(MenuContext); + + return useCallback( + menuProps => { + showMenu(menu, menuProps); + }, + [showMenu] + ); +}; diff --git a/src/providers/MenuProvider/menu-reducer.js b/src/providers/MenuProvider/menu-reducer.js new file mode 100644 index 00000000..721b9dbe --- /dev/null +++ b/src/providers/MenuProvider/menu-reducer.js @@ -0,0 +1,42 @@ +import {MenuType} from '../../enums'; + +export const actions = { + SHOW_MENU: 'Menu/SHOW_MENU', + RESET_MENU_PROPS: 'Menu/RESET_MENU_PROPS' +}; + +export const initialState = { + menu: MenuType.TRANSFER, + menuProps: { + [MenuType.ACCOUNT]: {transferId: null} + } +}; + +export const reducer = (state, action) => { + switch (action.type) { + case actions.SHOW_MENU: { + const {menu, menuProps} = action.payload; + + return { + menu, + menuProps: { + ...state.menuProps, + [menu]: menuProps + } + }; + } + + case actions.RESET_MENU_PROPS: { + return { + ...state, + menuProps: { + ...state.menuProps, + [state.menu]: initialState.menuProps[state.menu] + } + }; + } + + default: + return state; + } +}; diff --git a/src/providers/ModalProvider/ModalProvider.js b/src/providers/ModalProvider/ModalProvider.js new file mode 100644 index 00000000..ef5a0db8 --- /dev/null +++ b/src/providers/ModalProvider/ModalProvider.js @@ -0,0 +1,34 @@ +import PropTypes from 'prop-types'; +import React, {useReducer} from 'react'; + +import {ModalContext} from './modal-context'; +import {actions, initialState, reducer} from './modal-reducer'; + +export const ModalProvider = ({children}) => { + const [state, dispatch] = useReducer(reducer, initialState); + + const showModal = payload => { + dispatch({ + type: actions.SHOW_MODAL, + payload + }); + }; + + const hideModal = () => { + dispatch({ + type: actions.HIDE_MODAL + }); + }; + + const value = { + ...state, + showModal, + hideModal + }; + + return <ModalContext.Provider value={value}>{children}</ModalContext.Provider>; +}; + +ModalProvider.propTypes = { + children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) +}; diff --git a/src/providers/ModalProvider/index.js b/src/providers/ModalProvider/index.js new file mode 100644 index 00000000..95a387f5 --- /dev/null +++ b/src/providers/ModalProvider/index.js @@ -0,0 +1,3 @@ +export * from './modal-context'; +export * from './modal-hooks'; +export * from './ModalProvider'; diff --git a/src/providers/ModalProvider/modal-context.js b/src/providers/ModalProvider/modal-context.js new file mode 100644 index 00000000..78d94934 --- /dev/null +++ b/src/providers/ModalProvider/modal-context.js @@ -0,0 +1,9 @@ +import {createContext} from 'react'; + +import {initialState} from './modal-reducer'; + +export const ModalContext = createContext({ + ...initialState, + showModal: payload => ({payload}), + hideModal: () => {} +}); diff --git a/src/providers/ModalProvider/modal-hooks.js b/src/providers/ModalProvider/modal-hooks.js new file mode 100644 index 00000000..8ff7e069 --- /dev/null +++ b/src/providers/ModalProvider/modal-hooks.js @@ -0,0 +1,71 @@ +import {useCallback, useContext} from 'react'; + +import {ModalType} from '../../components/UI/Modal/Modal/Modal.constants'; +import utils from '../../utils'; +import {ModalContext} from './modal-context'; + +export const useModal = () => { + return { + ...useContext(ModalContext) + }; +}; + +export const useHideModal = () => { + const {hideModal} = useContext(ModalContext); + + return useCallback(() => { + hideModal(); + }, [hideModal]); +}; + +export const useProgressModal = () => { + const {showModal} = useContext(ModalContext); + + return useCallback( + (title, message, type = ModalType.INFO) => { + showModal({ + componentPath: 'UI/Modal/ProgressModal/ProgressModal', + componentProps: { + message + }, + title, + type + }); + }, + [showModal] + ); +}; + +export const useTransactionSubmittedModal = () => { + const {showModal} = useContext(ModalContext); + + return useCallback( + transfer => { + showModal({ + componentPath: 'UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal', + componentProps: { + transfer + }, + title: utils.getTranslation('modals.transactionSubmitted.title_txt'), + isClosable: true + }); + }, + [showModal] + ); +}; + +export const useErrorModal = () => { + const {showModal} = useContext(ModalContext); + + return useCallback( + (title, body) => { + showModal({ + title, + body, + isClosable: true, + type: ModalType.ERROR + }); + }, + [showModal] + ); +}; diff --git a/src/providers/ModalProvider/modal-reducer.js b/src/providers/ModalProvider/modal-reducer.js new file mode 100644 index 00000000..9bbce9d8 --- /dev/null +++ b/src/providers/ModalProvider/modal-reducer.js @@ -0,0 +1,34 @@ +export const actions = { + SHOW_MODAL: 'Modal/SHOW_MODAL', + HIDE_MODAL: 'Modal/HIDE_MODAL' +}; + +export const initialState = { + show: false, + componentPath: '', + componentProps: null, + withButtons: false, + isClosable: false, + body: '' +}; + +export const reducer = (state, action) => { + switch (action.type) { + case actions.SHOW_MODAL: { + return { + ...state, + show: true, + ...action.payload + }; + } + + case actions.HIDE_MODAL: { + return { + ...initialState + }; + } + + default: + return state; + } +}; diff --git a/src/providers/StoreProvider/StoreProvider.js b/src/providers/StoreProvider/StoreProvider.js deleted file mode 100644 index a28e4cda..00000000 --- a/src/providers/StoreProvider/StoreProvider.js +++ /dev/null @@ -1,11 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; -import {Provider} from 'react-redux'; - -import {store} from '../../store/store'; - -export const StoreProvider = ({children}) => <Provider store={store}>{children}</Provider>; - -StoreProvider.propTypes = { - children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) -}; diff --git a/src/providers/TokensProvider/tokens-hooks.js b/src/providers/TokensProvider/tokens-hooks.js index f6f590ad..e9334762 100644 --- a/src/providers/TokensProvider/tokens-hooks.js +++ b/src/providers/TokensProvider/tokens-hooks.js @@ -1,10 +1,10 @@ import {useCallback, useContext, useEffect, useMemo, useState} from 'react'; -import {useTransferData} from '../../components/Features/Transfer/Transfer.hooks'; +import {useTransfer} from '../TransferProvider'; import {TokensContext} from './tokens-context'; export const useTokens = () => { - const {isL1} = useTransferData(); + const {isL1} = useTransfer(); const l2Tokens = useL2Tokens(); const l1Tokens = useL1Tokens(); const {updateTokenBalance} = useContext(TokensContext); diff --git a/src/providers/TransferProvider/TransferProvider.js b/src/providers/TransferProvider/TransferProvider.js new file mode 100644 index 00000000..0ca3f6e1 --- /dev/null +++ b/src/providers/TransferProvider/TransferProvider.js @@ -0,0 +1,57 @@ +import PropTypes from 'prop-types'; +import React, {useReducer} from 'react'; + +import {ActionType, NetworkType} from '../../enums'; +import {TransferContext} from './transfer-context'; +import {actions, initialState, reducer} from './transfer-reducer'; + +export const TransferProvider = ({children}) => { + const [state, dispatch] = useReducer(reducer, initialState); + const isL1 = state.action === ActionType.TRANSFER_TO_L2; + const isL2 = state.action === ActionType.TRANSFER_TO_L1; + const fromNetwork = state.action === ActionType.TRANSFER_TO_L2 ? NetworkType.L1 : NetworkType.L2; + const toNetwork = state.action === ActionType.TRANSFER_TO_L2 ? NetworkType.L2 : NetworkType.L1; + const amount = + state.action === ActionType.TRANSFER_TO_L2 + ? state.transferToL2Amount + : state.transferToL1Amount; + + const setActionType = actionType => { + dispatch({ + type: actions.SET_ACTION_TYPE, + actionType + }); + }; + + const selectToken = symbol => { + dispatch({ + type: actions.SELECT_TOKEN, + symbol + }); + }; + + const setAmount = amount => { + dispatch({ + type: actions.SET_AMOUNT, + amount + }); + }; + + const value = { + ...state, + setAmount, + selectToken, + setActionType, + isL1, + isL2, + toNetwork, + fromNetwork, + amount + }; + + return <TransferContext.Provider value={value}>{children}</TransferContext.Provider>; +}; + +TransferProvider.propTypes = { + children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) +}; diff --git a/src/providers/TransferProvider/index.js b/src/providers/TransferProvider/index.js new file mode 100644 index 00000000..5f6e1ea8 --- /dev/null +++ b/src/providers/TransferProvider/index.js @@ -0,0 +1,3 @@ +export * from './transfer-context'; +export * from './transfer-hooks'; +export * from './TransferProvider'; diff --git a/src/providers/TransferProvider/transfer-context.js b/src/providers/TransferProvider/transfer-context.js new file mode 100644 index 00000000..b054f9a4 --- /dev/null +++ b/src/providers/TransferProvider/transfer-context.js @@ -0,0 +1,16 @@ +import {createContext} from 'react'; + +import {NetworkType} from '../../enums'; +import {initialState} from './transfer-reducer'; + +export const TransferContext = createContext({ + ...initialState, + setAmount: amount => amount, + selectToken: symbol => symbol, + setActionType: actionType => actionType, + isL1: false, + isL2: false, + fromNetwork: NetworkType.L1, + toNetwork: NetworkType.L2, + amount: 0 +}); diff --git a/src/providers/TransferProvider/transfer-hooks.js b/src/providers/TransferProvider/transfer-hooks.js new file mode 100644 index 00000000..96b21e11 --- /dev/null +++ b/src/providers/TransferProvider/transfer-hooks.js @@ -0,0 +1,80 @@ +import {useCallback, useContext, useMemo} from 'react'; + +import {ActionType} from '../../enums'; +import {useL1Token, useL2Token} from '../TokensProvider'; +import {TransferContext} from './transfer-context'; + +export const useTransfer = () => { + return { + ...useContext(TransferContext), + setAmount: useSetAmount(), + setActionType: useSetActionType(), + selectToken: useSelectToken(), + selectedToken: useSelectedToken() + }; +}; + +export const useSelectedToken = () => { + const {symbol, isL1} = useContext(TransferContext); + const l1Token = useL1Token()(symbol); + const l2Token = useL2Token()(symbol); + + return useMemo(() => (isL1 ? l1Token : l2Token), [symbol, isL1, l1Token, l2Token]); +}; + +export const useAmount = () => { + const {amount} = useContext(TransferContext); + const setAmount = useSetAmount(); + const clearAmount = () => setAmount(''); + + return [amount, setAmount, clearAmount]; +}; + +export const useIsL1 = () => { + const {isL1} = useContext(TransferContext); + const setActionType = useSetActionType(); + const swapToL1 = () => setActionType(ActionType.TRANSFER_TO_L2); + + return [isL1, swapToL1]; +}; + +export const useIsL2 = () => { + const {isL2} = useContext(TransferContext); + const setActionType = useSetActionType(); + const swapToL2 = () => setActionType(ActionType.TRANSFER_TO_L1); + + return [isL2, swapToL2]; +}; + +const useSetAmount = () => { + const {setAmount} = useContext(TransferContext); + + return useCallback( + amount => { + setAmount(amount); + }, + [setAmount] + ); +}; + +const useSetActionType = () => { + const {setActionType} = useContext(TransferContext); + + return useCallback( + actionType => { + setActionType(actionType); + }, + [setActionType] + ); +}; + +const useSelectToken = () => { + const {selectToken} = useContext(TransferContext); + + return useCallback( + symbol => { + selectToken(symbol); + }, + [selectToken] + ); +}; diff --git a/src/providers/TransferProvider/transfer-reducer.js b/src/providers/TransferProvider/transfer-reducer.js new file mode 100644 index 00000000..eb450409 --- /dev/null +++ b/src/providers/TransferProvider/transfer-reducer.js @@ -0,0 +1,48 @@ +import {ActionType} from '../../enums'; + +export const actions = { + SET_ACTION_TYPE: 'Transfer/SET_ACTION_TYPE', + SELECT_TOKEN: 'Transfer/SELECT_TOKEN', + SET_AMOUNT: 'Transfer/SET_AMOUNT' +}; + +export const initialState = { + action: ActionType.TRANSFER_TO_L2, + symbol: '', + transferToL2Amount: '', + transferToL1Amount: '' +}; + +export const reducer = (state, action) => { + switch (action.type) { + case actions.SET_ACTION_TYPE: { + return { + ...state, + action: action.actionType + }; + } + + case actions.SELECT_TOKEN: { + return { + ...state, + symbol: action.symbol + }; + } + + case actions.SET_AMOUNT: { + if (state.action === ActionType.TRANSFER_TO_L2) { + return { + ...state, + transferToL2Amount: action.amount + }; + } + return { + ...state, + transferToL1Amount: action.amount + }; + } + + default: + return state; + } +}; diff --git a/src/providers/TransfersProvider/TransfersProvider.js b/src/providers/TransfersLogProvider/TransfersLogProvider.js similarity index 85% rename from src/providers/TransfersProvider/TransfersProvider.js rename to src/providers/TransfersLogProvider/TransfersLogProvider.js index aa57d499..db35e22a 100644 --- a/src/providers/TransfersProvider/TransfersProvider.js +++ b/src/providers/TransfersLogProvider/TransfersLogProvider.js @@ -8,13 +8,13 @@ import {useLogger} from '../../hooks'; import {starknet} from '../../libs'; import utils from '../../utils'; import {useBlockHash} from '../BlockHashProvider'; -import {TransfersContext} from './transfers-context'; -import {actions, initialState, reducer} from './transfers-reducer'; +import {TransfersLogContext} from './transfers-log-context'; +import {actions, initialState, reducer} from './transfers-log-reducer'; const {LOCAL_STORAGE_TRANSFERS_KEY} = constants; -export const TransfersProvider = ({children}) => { - const logger = useLogger(TransfersProvider.displayName); +export const TransfersLogProvider = ({children}) => { + const logger = useLogger(TransfersLogProvider.displayName); const [transfers, dispatch] = useReducer(reducer, initialState); const blockHash = useBlockHash(); @@ -89,11 +89,11 @@ export const TransfersProvider = ({children}) => { addTransfer }; - return <TransfersContext.Provider value={context}>{children}</TransfersContext.Provider>; + return <TransfersLogContext.Provider value={context}>{children}</TransfersLogContext.Provider>; }; -TransfersProvider.displayName = 'TransfersProvider'; +TransfersLogProvider.displayName = 'TransfersLogProvider'; -TransfersProvider.propTypes = { +TransfersLogProvider.propTypes = { children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) }; diff --git a/src/providers/TransfersLogProvider/index.js b/src/providers/TransfersLogProvider/index.js new file mode 100644 index 00000000..1822cd09 --- /dev/null +++ b/src/providers/TransfersLogProvider/index.js @@ -0,0 +1,4 @@ +export * from './transfers-log-reducer'; +export * from './transfers-log-context'; +export * from './transfers-log-hooks'; +export * from './TransfersLogProvider'; diff --git a/src/providers/TransfersProvider/transfers-context.js b/src/providers/TransfersLogProvider/transfers-log-context.js similarity index 61% rename from src/providers/TransfersProvider/transfers-context.js rename to src/providers/TransfersLogProvider/transfers-log-context.js index a28dc306..b7a70864 100644 --- a/src/providers/TransfersProvider/transfers-context.js +++ b/src/providers/TransfersLogProvider/transfers-log-context.js @@ -1,6 +1,6 @@ import {createContext} from 'react'; -export const TransfersContext = createContext({ +export const TransfersLogContext = createContext({ transfers: [], addTransfer: t => t }); diff --git a/src/providers/TransfersLogProvider/transfers-log-hooks.js b/src/providers/TransfersLogProvider/transfers-log-hooks.js new file mode 100644 index 00000000..2d6d3298 --- /dev/null +++ b/src/providers/TransfersLogProvider/transfers-log-hooks.js @@ -0,0 +1,13 @@ +import {useContext, useMemo} from 'react'; + +import {TransfersLogContext} from './transfers-log-context'; + +export const useTransfersLog = () => useContext(TransfersLogContext); + +export const useAccountTransfersLog = account => { + const {transfers} = useTransfersLog(); + return useMemo( + () => transfers.filter(tx => tx.sender === account || tx.recipient === account), + [account, transfers] + ); +}; diff --git a/src/providers/TransfersProvider/transfers-reducer.js b/src/providers/TransfersLogProvider/transfers-log-reducer.js similarity index 87% rename from src/providers/TransfersProvider/transfers-reducer.js rename to src/providers/TransfersLogProvider/transfers-log-reducer.js index 021d53cb..95585ce5 100644 --- a/src/providers/TransfersProvider/transfers-reducer.js +++ b/src/providers/TransfersLogProvider/transfers-log-reducer.js @@ -1,8 +1,8 @@ import {v4 as uuidv4} from 'uuid'; export const actions = { - SET_TRANSFERS: 'Transfers/SET_TRANSFERS', - ADD_TRANSFER: 'Transfers/ADD_TRANSFER' + SET_TRANSFERS: 'TransfersLog/SET_TRANSFERS', + ADD_TRANSFER: 'TransfersLog/ADD_TRANSFER' }; export const initialState = []; diff --git a/src/providers/TransfersProvider/index.js b/src/providers/TransfersProvider/index.js deleted file mode 100644 index ffbadaf2..00000000 --- a/src/providers/TransfersProvider/index.js +++ /dev/null @@ -1,4 +0,0 @@ -export * from './transfers-reducer'; -export * from './transfers-context'; -export * from './transfers-hooks'; -export * from './TransfersProvider'; diff --git a/src/providers/TransfersProvider/transfers-hooks.js b/src/providers/TransfersProvider/transfers-hooks.js deleted file mode 100644 index 0e190fae..00000000 --- a/src/providers/TransfersProvider/transfers-hooks.js +++ /dev/null @@ -1,13 +0,0 @@ -import {useContext, useMemo} from 'react'; - -import {TransfersContext} from './transfers-context'; - -export const useTransfers = () => useContext(TransfersContext); - -export const useAccountTransfers = account => { - const {transfers} = useTransfers(); - return useMemo( - () => transfers.filter(tx => tx.sender === account || tx.recipient === account), - [account, transfers] - ); -}; diff --git a/src/providers/WalletsProvider/WalletsProvider.js b/src/providers/WalletsProvider/WalletsProvider.js index 28bdae4f..6514b667 100644 --- a/src/providers/WalletsProvider/WalletsProvider.js +++ b/src/providers/WalletsProvider/WalletsProvider.js @@ -2,10 +2,10 @@ import PropTypes from 'prop-types'; import React, {useEffect, useReducer} from 'react'; import {useWallet} from 'use-wallet'; -import {useIsL1, useIsL2} from '../../components/Features/Transfer/Transfer.hooks'; import {WalletStatus} from '../../enums'; import {useConfig} from '../../hooks'; import {getStarknet} from '../../libs'; +import {useIsL1, useIsL2} from '../TransferProvider'; import {WalletsContext} from './wallets-context'; import {actions, initialState, reducer} from './wallets-reducer'; diff --git a/src/providers/WalletsProvider/wallets-hooks.js b/src/providers/WalletsProvider/wallets-hooks.js index 9718c995..f5774121 100644 --- a/src/providers/WalletsProvider/wallets-hooks.js +++ b/src/providers/WalletsProvider/wallets-hooks.js @@ -1,12 +1,12 @@ import {useCallback, useContext, useEffect, useState} from 'react'; -import {useTransferData} from '../../components/Features/Transfer/Transfer.hooks'; +import {useTransfer} from '../TransferProvider'; import {WalletsContext} from './wallets-context'; export const useWallets = () => { const wallets = useContext(WalletsContext); const [activeWallet, setActiveWallet] = useState(wallets.l1Wallet); - const {isL1} = useTransferData(); + const {isL1} = useTransfer(); const connectWallet = useCallback(walletConfig => wallets.connectWallet(walletConfig), []); const resetWallet = useCallback(() => wallets.resetWallet(), []); diff --git a/src/providers/index.js b/src/providers/index.js index 9704161d..2afc5b45 100644 --- a/src/providers/index.js +++ b/src/providers/index.js @@ -1,14 +1,18 @@ import {BlockHashProvider} from './BlockHashProvider'; -import {StoreProvider} from './StoreProvider/StoreProvider'; -import {TransfersProvider} from './TransfersProvider'; +import {MenuProvider} from './MenuProvider'; +import {ModalProvider} from './ModalProvider'; +import {TransferProvider} from './TransferProvider'; +import {TransfersLogProvider} from './TransfersLogProvider'; import {WalletProvider} from './WalletProvider/WalletProvider'; import {WalletsProvider} from './WalletsProvider'; import {combineProviders} from './combine-providers'; export const Providers = combineProviders([ - StoreProvider, + MenuProvider, + TransferProvider, + ModalProvider, WalletProvider, WalletsProvider, BlockHashProvider, - TransfersProvider + TransfersLogProvider ]); diff --git a/src/store/store.js b/src/store/store.js deleted file mode 100644 index 46f8bc03..00000000 --- a/src/store/store.js +++ /dev/null @@ -1,13 +0,0 @@ -import {configureStore} from '@reduxjs/toolkit'; - -import bridge from '../components/Features/Bridge/Bridge.slice'; -import modal from '../components/Features/ModalProvider/ModalProvider.slice'; -import transfer from '../components/Features/Transfer/Transfer.slice'; - -export const store = configureStore({ - reducer: { - bridge, - modal, - transfer - } -}); diff --git a/yarn.lock b/yarn.lock index 95538e3f..58d6247d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1336,7 +1336,7 @@ dependencies: regenerator-runtime "^0.12.0" -"@babel/runtime@^7.10.2", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.10.2", "@babel/runtime@^7.16.3", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": version "7.16.3" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.3.tgz#b86f0db02a04187a3c17caa77de69840165d42d5" integrity sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ== @@ -2085,16 +2085,6 @@ penpal "3.0.7" pocket-js-core "0.0.3" -"@reduxjs/toolkit@^1.6.2": - version "1.6.2" - resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.6.2.tgz#2f2b5365df77dd6697da28fdf44f33501ed9ba37" - integrity sha512-HbfI/hOVrAcMGAYsMWxw3UJyIoAS9JTdwddsjlr5w3S50tXhWb+EMyhIw+IAvCVCLETkzdjgH91RjDSYZekVBA== - dependencies: - immer "^9.0.6" - redux "^4.1.0" - redux-thunk "^2.3.0" - reselect "^4.0.0" - "@rollup/plugin-node-resolve@^7.1.1": version "7.1.3" resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz#80de384edfbd7bfc9101164910f86078151a3eca" @@ -2505,14 +2495,6 @@ dependencies: "@types/node" "*" -"@types/hoist-non-react-statics@^3.3.0": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" - integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== - dependencies: - "@types/react" "*" - hoist-non-react-statics "^3.3.0" - "@types/html-minifier-terser@^5.0.0": version "5.1.2" resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz#693b316ad323ea97eed6b38ed1a3cc02b1672b57" @@ -2612,16 +2594,6 @@ resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df" integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== -"@types/react-redux@^7.1.20": - version "7.1.20" - resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.20.tgz#42f0e61ababb621e12c66c96dda94c58423bd7df" - integrity sha512-q42es4c8iIeTgcnB+yJgRTTzftv3eYYvCZOh1Ckn2eX/3o5TdsQYKUWpLoLuGlcY/p+VAhV9IOEZJcWk/vfkXw== - dependencies: - "@types/hoist-non-react-statics" "^3.3.0" - "@types/react" "*" - hoist-non-react-statics "^3.3.0" - redux "^4.0.0" - "@types/react@*": version "17.0.37" resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.37.tgz#6884d0aa402605935c397ae689deed115caad959" @@ -9005,13 +8977,6 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" - integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== - dependencies: - react-is "^16.7.0" - home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" @@ -9299,11 +9264,6 @@ immer@8.0.1: resolved "https://registry.yarnpkg.com/immer/-/immer-8.0.1.tgz#9c73db683e2b3975c424fb0572af5889877ae656" integrity sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA== -immer@^9.0.6: - version "9.0.7" - resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.7.tgz#b6156bd7db55db7abc73fd2fdadf4e579a701075" - integrity sha512-KGllzpbamZDvOIxnmJ0jI840g7Oikx58lBPWV0hUh7dtAyZpFqqrBZdKka5GlTwMTZ1Tjc/bKKW4VSFAt6BqMA== - import-cwd@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" @@ -13943,28 +13903,16 @@ react-hot-toast@^2.1.1: dependencies: goober "^2.0.35" -react-is@^16.7.0, react-is@^16.8.1: +react-is@^16.8.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-is@^17.0.1, react-is@^17.0.2: +react-is@^17.0.1: version "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-redux@^7.2.6: - version "7.2.6" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.6.tgz#49633a24fe552b5f9caf58feb8a138936ddfe9aa" - integrity sha512-10RPdsz0UUrRL1NZE0ejTkucnclYSgXp5q+tB5SWx2qeG2ZJQJyymgAhwKy73yiL/13btfB6fPr+rgbMAaZIAQ== - dependencies: - "@babel/runtime" "^7.15.4" - "@types/react-redux" "^7.1.20" - hoist-non-react-statics "^3.3.2" - loose-envify "^1.4.0" - prop-types "^15.7.2" - react-is "^17.0.2" - react-refresh@^0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f" @@ -14153,18 +14101,6 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" -redux-thunk@^2.3.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.1.tgz#0dd8042cf47868f4b29699941de03c9301a75714" - integrity sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q== - -redux@^4.0.0, redux@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/redux/-/redux-4.1.2.tgz#140f35426d99bb4729af760afcf79eaaac407104" - integrity sha512-SH8PglcebESbd/shgf6mii6EIoRM0zrQyjcuQ+ojmfxjTtE0z9Y8pa62iA/OJ58qjP6j27uyW4kUF4jl/jd6sw== - dependencies: - "@babel/runtime" "^7.9.2" - regenerate-unicode-properties@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326" @@ -14363,11 +14299,6 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= -reselect@^4.0.0: - version "4.1.5" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.5.tgz#852c361247198da6756d07d9296c2b51eddb79f6" - integrity sha512-uVdlz8J7OO+ASpBYoz1Zypgx0KasCY20H+N8JD13oUMtPvSHQuscrHop4KbXrbsBcdB9Ds7lVK7eRkBIfO43vQ== - resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" From 5b15ca0b1c87f25beab2f30367384d63503d8ef9 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Mon, 4 Apr 2022 10:47:04 +0300 Subject: [PATCH 116/211] feat!: alpha version (#126) --- .env.development | 13 +- .env.production | 17 +- .env.testing | 15 +- .eslintrc.js | 78 + .eslintrc.json | 41 - .github/PULL_REQUEST_TEMPLATE.md | 2 +- .github/workflows/gcr_push_workflow.yml | 60 + .github/workflows/pull_request.yml | 3 +- .github/workflows/push.yml | 23 +- .github/workflows/push_backend_images.yml | 16 + .github/workflows/push_frontend_images.yml | 16 + .github/workflows/tag.yml | 46 - .stylelintignore | 1 + .stylelintrc.js | 61 + CHANGELOG.md | 5 - DOCKER.md | 28 + Dockerfile.frontend | 21 + deployment/README.md | 110 + deployment/development.yml | 64 + deployment/production.yml | 76 + deployment/testing.yml | 64 + package.json | 87 +- release.config.js | 97 + .../utils/blockchain/starknet.spec.js | 2 +- src/__tests__/utils/date.spec.js | 15 +- src/__tests__/utils/object.spec.js | 4 +- src/analytics/index.js | 2 + src/analytics/track-event.js | 62 + src/analytics/track.js | 17 + src/api/bridge.js | 12 + src/api/erc20.js | 4 +- src/assets/svg/icons/refresh.svg | 1 + src/components/Containers/Footer/Footer.js | 20 +- src/components/Containers/Header/Header.js | 24 +- .../Containers/Header/Header.module.scss | 22 +- .../Containers/Header/Header.strings.js | 4 + src/components/Containers/Main/Main.js | 5 +- src/components/Features/Account/Account.js | 55 +- .../Features/Account/Account.module.scss | 2 - src/components/Features/Bridge/Bridge.js | 43 +- src/components/Features/Faq/Faq.js | 30 + src/components/Features/Faq/Faq.module.scss | 84 + src/components/Features/Faq/Faq.strings.js | 3 + src/components/Features/Login/Login.js | 26 +- .../Features/SelectToken/SelectToken.js | 11 +- .../SelectToken/SelectToken.module.scss | 5 + .../Features/ToastProvider/ToastProvider.js | 124 +- src/components/Features/Transfer/Transfer.js | 49 +- .../Features/Transfer/Transfer.strings.js | 6 +- .../Features/TransferLog/TransferLog.js | 24 +- .../TransferLog/TransferLog.module.scss | 4 - src/components/Features/index.js | 1 + .../UI/AccountAddress/AccountAddress.js | 6 +- src/components/UI/Button/Button.js | 5 +- src/components/UI/Button/Button.module.scss | 7 +- src/components/UI/CryptoLogo/CryptoLogo.js | 5 +- src/components/UI/Input/Input.Module.scss | 7 +- src/components/UI/KeyFrames/KeyFrames.js | 5 +- src/components/UI/LinkButton/LinkButton.js | 10 +- src/components/UI/Loading/Loading.enums.js | 2 +- .../UI/Modal/Modal/Modal.constants.js | 4 +- src/components/UI/Modal/Modal/Modal.js | 2 +- .../UI/Modal/Modal/Modal.module.scss | 2 +- .../UI/Modal/ModalBody/ModalBody.module.scss | 8 +- .../UI/Modal/ModalFooter/ModalFooter.js | 27 +- .../Modal/ModalFooter/ModalFooter.module.scss | 6 + .../UI/Modal/ModalHeader/ModalHeader.js | 12 +- .../Modal/ModalHeader/ModalHeader.module.scss | 8 +- .../UI/Modal/ModalMessage/IncognitoMessage.js | 7 + .../ModalMessage/ModalMessage.module.scss | 12 + .../UI/Modal/ModalMessage/RefreshMessage.js | 12 + .../Modal/ModalMessage/TransferToL1Message.js | 20 + .../Modal/ModalMessage/TransferToL2Message.js | 12 + src/components/UI/Modal/ModalMessage/index.js | 4 + .../UI/Modal/ModalText/ModalText.js | 17 + .../UI/Modal/ModalText/ModalText.module.scss | 17 + .../Modal/ModalTitle/ModalTitle.module.scss | 4 +- src/components/UI/Modal/ModalWrapper.js | 19 +- .../Modal/OnboardingModal/OnboardingModal.js | 21 + .../OnboardingModal.module.scss | 11 + .../OnboardingModal.strings.js | 7 + .../UI/Modal/ProgressModal/ProgressModal.js | 24 +- .../ProgressModal/ProgressModal.module.scss | 5 - .../TransactionSubmittedModal.js | 137 +- .../TransactionSubmittedModal.module.scss | 23 + .../TransactionSubmittedModal.strings.js | 3 +- src/components/UI/Modal/index.js | 2 + src/components/UI/NetworkMenu/NetworkMenu.js | 5 +- .../UI/NetworkSwap/NetworkSwap.module.scss | 12 +- src/components/UI/RefreshIcon/RefreshIcon.js | 37 + .../UI/RefreshIcon/RefreshIcon.module.scss | 27 + .../SelectTokenRow/SelectTokenRow.module.scss | 8 +- src/components/UI/Stepper/Stepper.js | 26 + src/components/UI/Stepper/Stepper.module.scss | 6 + src/components/UI/Tab/Tab.js | 28 + src/components/UI/Tab/Tab.module.scss | 3 + .../CompleteTransferToL1Toast.js | 2 +- .../CompleteTransferToL1Toast.module.scss | 4 +- .../Toast/ToastFooter/ToastFooter.module.scss | 1 - .../UI/TokenBalance/TokenBalance.js | 26 +- .../UI/TokenBalance/TokenBalance.module.scss | 27 +- .../TransferLogContainer.js | 9 +- .../TransferLogContainer.module.scss | 10 +- .../UI/WalletButton/WalletButton.constants.js | 1 + .../UI/WalletButton/WalletButton.js | 35 +- .../UI/WalletButton/WalletButton.module.scss | 16 + src/components/UI/index.js | 3 + src/config/constants.js | 38 +- src/config/contracts.js | 6 - src/config/envs.js | 20 +- src/config/faqs.js | 143 + src/config/strings.js | 57 +- src/config/tokens.js | 92 +- src/enums/Breakpoint.js | 14 + src/enums/ChainType.js | 51 +- src/enums/EventName.js | 8 + src/enums/MenuType.js | 7 +- src/enums/SelectorName.js | 3 + src/enums/ToastType.js | 5 + src/enums/TransferError.js | 4 + src/enums/TransferStep.js | 26 + src/enums/index.js | 6 + src/hooks/index.js | 5 +- src/hooks/useAnimation.js | 2 + src/hooks/useContract.js | 79 +- src/hooks/useEventListener.js | 93 - src/hooks/useFetchData.js | 2 + src/hooks/useIsLoading.js | 4 +- src/hooks/useMaxAmount.js | 30 - src/hooks/usePrevious.js | 2 + src/hooks/useTokenBalance.js | 18 +- src/hooks/useTokenConstant.js | 39 + src/hooks/useTransfer.js | 250 +- src/hooks/useTransferProgress.js | 45 +- src/hooks/useTransferToL1.js | 198 + src/hooks/useTransferToL2.js | 199 + src/hooks/useWalletHandlerProvider.js | 7 +- src/hooks/useWindowSize.js | 2 + src/index.js | 10 +- src/index.scss | 51 +- .../EventManagerProvider.js | 170 + .../event-manager-context.js | 5 + .../event-manager-hooks.js | 29 + src/providers/EventManagerProvider/index.js | 3 + src/providers/MenuProvider/menu-hooks.js | 1 + src/providers/ModalProvider/modal-hooks.js | 35 +- src/providers/ModalProvider/modal-reducer.js | 3 +- .../TokensProvider/TokensProvider.js | 57 +- src/providers/TokensProvider/tokens-hooks.js | 4 + .../TokensProvider/tokens-reducer.js | 19 +- .../TransfersLogProvider.js | 58 +- .../transfers-log-context.js | 3 +- .../transfers-log-reducer.js | 14 +- .../WalletsProvider/WalletsProvider.js | 8 +- .../WalletsProvider/wallets-hooks.js | 2 + .../WalletsProvider/wallets-reducer.js | 2 +- src/styles/colors.module.scss | 13 +- src/utils/blockchain/starknet.js | 35 +- src/utils/browser.js | 4 +- src/utils/date.js | 19 +- src/utils/object.js | 4 +- src/utils/parser.js | 2 +- src/utils/storage.js | 8 +- src/utils/wallet.js | 5 +- src/wallets/argent-x.js | 2 +- yarn.lock | 5327 +++++++++++++++-- 166 files changed, 8075 insertions(+), 1637 deletions(-) create mode 100644 .eslintrc.js delete mode 100644 .eslintrc.json create mode 100644 .github/workflows/gcr_push_workflow.yml create mode 100644 .github/workflows/push_backend_images.yml create mode 100644 .github/workflows/push_frontend_images.yml delete mode 100644 .github/workflows/tag.yml create mode 100644 .stylelintignore create mode 100644 .stylelintrc.js delete mode 100644 CHANGELOG.md create mode 100644 DOCKER.md create mode 100644 Dockerfile.frontend create mode 100644 deployment/README.md create mode 100644 deployment/development.yml create mode 100644 deployment/production.yml create mode 100644 deployment/testing.yml create mode 100644 release.config.js create mode 100644 src/analytics/index.js create mode 100644 src/analytics/track-event.js create mode 100644 src/analytics/track.js create mode 100644 src/assets/svg/icons/refresh.svg delete mode 100644 src/components/Features/Account/Account.module.scss create mode 100644 src/components/Features/Faq/Faq.js create mode 100644 src/components/Features/Faq/Faq.module.scss create mode 100644 src/components/Features/Faq/Faq.strings.js create mode 100644 src/components/UI/Modal/ModalMessage/IncognitoMessage.js create mode 100644 src/components/UI/Modal/ModalMessage/ModalMessage.module.scss create mode 100644 src/components/UI/Modal/ModalMessage/RefreshMessage.js create mode 100644 src/components/UI/Modal/ModalMessage/TransferToL1Message.js create mode 100644 src/components/UI/Modal/ModalMessage/TransferToL2Message.js create mode 100644 src/components/UI/Modal/ModalMessage/index.js create mode 100644 src/components/UI/Modal/ModalText/ModalText.js create mode 100644 src/components/UI/Modal/ModalText/ModalText.module.scss create mode 100644 src/components/UI/Modal/OnboardingModal/OnboardingModal.js create mode 100644 src/components/UI/Modal/OnboardingModal/OnboardingModal.module.scss create mode 100644 src/components/UI/Modal/OnboardingModal/OnboardingModal.strings.js delete mode 100644 src/components/UI/Modal/ProgressModal/ProgressModal.module.scss create mode 100644 src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.module.scss create mode 100644 src/components/UI/RefreshIcon/RefreshIcon.js create mode 100644 src/components/UI/RefreshIcon/RefreshIcon.module.scss create mode 100644 src/components/UI/Stepper/Stepper.js create mode 100644 src/components/UI/Stepper/Stepper.module.scss create mode 100644 src/components/UI/Tab/Tab.js create mode 100644 src/components/UI/Tab/Tab.module.scss create mode 100644 src/components/UI/WalletButton/WalletButton.module.scss delete mode 100644 src/config/contracts.js create mode 100644 src/config/faqs.js create mode 100644 src/enums/Breakpoint.js create mode 100644 src/enums/EventName.js create mode 100644 src/enums/SelectorName.js create mode 100644 src/enums/ToastType.js create mode 100644 src/enums/TransferError.js create mode 100644 src/enums/TransferStep.js delete mode 100644 src/hooks/useEventListener.js delete mode 100644 src/hooks/useMaxAmount.js create mode 100644 src/hooks/useTokenConstant.js create mode 100644 src/hooks/useTransferToL1.js create mode 100644 src/hooks/useTransferToL2.js create mode 100644 src/providers/EventManagerProvider/EventManagerProvider.js create mode 100644 src/providers/EventManagerProvider/event-manager-context.js create mode 100644 src/providers/EventManagerProvider/event-manager-hooks.js create mode 100644 src/providers/EventManagerProvider/index.js diff --git a/.env.development b/.env.development index eb5f1891..991aa28e 100644 --- a/.env.development +++ b/.env.development @@ -1,5 +1,12 @@ -REACT_APP_AUTO_CONNECT=true -# 10 seconds -REACT_APP_POLL_BLOCK_NUMBER_INTERVAL=10000 +REACT_APP_AUTO_CONNECT=false +# 20 seconds +REACT_APP_POLL_BLOCK_NUMBER_INTERVAL=20000 # goerli testnet REACT_APP_SUPPORTED_CHAIN_IDS=5 +REACT_APP_STARKNET_CONTRACT_ADDRESS=0xde29d060D45901Fb19ED6C6e959EB22d8626708e +REACT_APP_ETHERSCAN_URL=https://goerli.etherscan.io +REACT_APP_VOYAGER_URL=https://goerli.voyager.online +REACT_APP_LOCAL_STORAGE_TRANSFERS_LOG_KEY=STARKGATE_TRANSFERS +REACT_APP_LOCAL_STORAGE_ONBOARDING_TIMESTAMP_KEY=STARKGATE_ONBOARDING_TIMESTAMP +REACT_APP_ONBOARDING_MODAL_TIMEOUT_HRS=24 +REACT_APP_SUPPORTED_TOKENS=ETH,WBTC,USDC,USDT,DAI,SLF diff --git a/.env.production b/.env.production index 8acece38..474b1aa9 100644 --- a/.env.production +++ b/.env.production @@ -1,5 +1,12 @@ - REACT_APP_AUTO_CONNECT=true - # 30 seconds - REACT_APP_POLL_BLOCK_NUMBER_INTERVAL=30000 - # mainnet - REACT_APP_SUPPORTED_CHAIN_IDS=1 +REACT_APP_AUTO_CONNECT=false +# 30 seconds +REACT_APP_POLL_BLOCK_NUMBER_INTERVAL=30000 +# mainnet +REACT_APP_SUPPORTED_CHAIN_IDS=1 +REACT_APP_STARKNET_CONTRACT_ADDRESS= +REACT_APP_ETHERSCAN_URL=https://etherscan.io +REACT_APP_VOYAGER_URL=https://voyager.online +REACT_APP_LOCAL_STORAGE_TRANSFERS_LOG_KEY=STARKGATE_TRANSFERS +REACT_APP_LOCAL_STORAGE_ONBOARDING_TIMESTAMP_KEY=STARKGATE_ONBOARDING_TIMESTAMP +REACT_APP_ONBOARDING_MODAL_TIMEOUT_HRS=24 +REACT_APP_SUPPORTED_TOKENS=ETH diff --git a/.env.testing b/.env.testing index 2b97f01f..672ed324 100644 --- a/.env.testing +++ b/.env.testing @@ -1,5 +1,10 @@ - REACT_APP_AUTO_CONNECT=true - # 20 seconds - REACT_APP_POLL_BLOCK_NUMBER_INTERVAL=20000 - # goerli testnet - REACT_APP_SUPPORTED_CHAIN_IDS=5 +REACT_APP_AUTO_CONNECT=false +# 20 seconds +REACT_APP_POLL_BLOCK_NUMBER_INTERVAL=20000 +# goerli testnet +REACT_APP_SUPPORTED_CHAIN_IDS=5 +REACT_APP_STARKNET_CONTRACT_ADDRESS=0xde29d060D45901Fb19ED6C6e959EB22d8626708e +REACT_APP_ETHERSCAN_URL=https://goerli.etherscan.io +REACT_APP_VOYAGER_URL=https://goerli.voyager.online +REACT_APP_LOCAL_STORAGE_TRANSFERS_LOG_KEY=STARKGATE_TRANSFERS +REACT_APP_SUPPORTED_TOKENS=ETH diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000..ae670f2b --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,78 @@ +module.exports = { + root: true, + env: { + browser: true, + node: true, + amd: true, + es6: true, + es2020: true, + jquery: false + }, + extends: [ + 'eslint:recommended', + 'react-app', + 'plugin:react/recommended', + 'plugin:react-hooks/recommended', + 'plugin:jsx-a11y/recommended' + ], + parser: '@babel/eslint-parser', + parserOptions: { + babelOptions: { + presets: ['@babel/preset-react'] + }, + requireConfigFile: false, + sourceType: 'module' + }, + plugins: ['@babel', 'import', 'react', 'react-hooks', 'jest', 'jsx-a11y', 'prettier'], + settings: { + 'import/core-modules': [], + 'import/ignore': ['node_modules', '\\.(coffee|scss|css|less|hbs|svg|json)$'], + react: { + pragma: 'React', // Pragma to use, default to "React" + version: 'detect' // React version. "detect" automatically picks the version you have installed. + }, + jest: { + // version: require('jest/package.json').version, + } + }, + rules: { + 'no-confusing-arrow': ['error', {allowParens: true}], + 'no-console': 'warn', + 'no-var': 'warn', + 'object-shorthand': 'error', + 'prefer-const': 'warn', + 'prefer-template': 'warn', + 'prettier/prettier': 'error', + 'react/react-in-jsx-scope': 'off', + 'react-hooks/rules-of-hooks': 'error', + 'react-hooks/exhaustive-deps': 'off', + quotes: ['error', 'single', {avoidEscape: true}], + 'comma-dangle': [ + 'off', + { + arrays: 'always-multiline', + objects: 'always-multiline', + imports: 'always-multiline', + exports: 'always-multiline', + functions: 'ignore' + } + ], + 'react/jsx-sort-props': [ + 2, + { + callbacksLast: true, + shorthandFirst: true, + reservedFirst: true + } + ], + 'prefer-destructuring': [ + 'warn', + { + object: true, + array: false + } + ], + 'jsx-a11y/click-events-have-key-events': 'off', + 'jsx-a11y/no-static-element-interactions': 'off' + } +}; diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 656061a2..00000000 --- a/.eslintrc.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "env": { - "browser": true, - "es2021": true, - "jest": true - }, - "globals": { - "process": true, - "global": true - }, - "extends": ["eslint:recommended", "plugin:react/recommended", "prettier"], - "parserOptions": { - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 12, - "sourceType": "module" - }, - "plugins": ["react", "react-hooks", "prettier"], - "rules": { - "prettier/prettier": "error", - "react/jsx-sort-props": [ - 2, - { - "callbacksLast": true, - "shorthandFirst": true, - "reservedFirst": true - } - ], - "prefer-destructuring": [ - "warn", - { - "object": true, - "array": false - } - ], - "no-console": "warn", - "react-hooks/rules-of-hooks": "error", - "react-hooks/exhaustive-deps": "off" - } -} diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 4ff6c1e2..03693d7c 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -9,4 +9,4 @@ If the PR is related to an open issue please link to it. - [ ] New unit / functional tests have been added (whenever applicable) - [ ] Test are passing in local environment - [ ] Docs have been updated -- [ ] PR title is follow the [standard-version](https://www.conventionalcommits.org/) convention: `<type>(optional subject): <description>`, e.g: `fix: minor typos in code` +- [ ] PR title is follow the [Conventional Commits](https://www.conventionalcommits.org/) convention: `<type>[optional scope]: <description>`, e.g: `fix: prevent racing of requests` diff --git a/.github/workflows/gcr_push_workflow.yml b/.github/workflows/gcr_push_workflow.yml new file mode 100644 index 00000000..b14e7efd --- /dev/null +++ b/.github/workflows/gcr_push_workflow.yml @@ -0,0 +1,60 @@ +name: Push docker image to GCR reusable workflow + +on: + workflow_call: + inputs: + image_name: + required: true + type: string + branch_name: + required: true + type: string + dockerfile: + required: true + type: string + secrets: + gcp_token: + required: true + +jobs: + deploy: + name: Build tag and push docker images to GCR. + runs-on: ubuntu-latest + steps: + - name: Login to Gcloud using starkgate service account. + uses: google-github-actions/setup-gcloud@v0 + with: + project_id: starkware-dev + service_account_email: starkgate@starkware-dev.iam.gserviceaccount.com + service_account_key: ${{ secrets.gcp_token }} + + - name: Configure Docker + run: gcloud auth configure-docker --quiet + + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Build and push images to GCR, with tag latest and git tag. + if: ${{ inputs.branch_name == 'refs/heads/dev' }} + run: | + docker build . -t ${{ inputs.image_name }} -f ${{ inputs.dockerfile }} --build-arg BUILD_ENV=testing + docker tag ${{ inputs.image_name }} ${{ inputs.image_name }}:${{ github.ref_name }} + docker push ${{ inputs.image_name }}:${{ github.ref_name }} + docker push ${{ inputs.image_name }} + + - name: Build with production env and push with mainnet and stable tags. + if: ${{ inputs.branch_name == 'refs/heads/master' }} + run: | + docker build . -t ${{ inputs.image_name }}:stable -f ${{ inputs.dockerfile }} --build-arg BUILD_ENV=production + docker tag ${{ inputs.image_name }}:stable ${{ inputs.image_name }}:${{ github.ref_name }}-mainnet + + docker push ${{ inputs.image_name }}:${{ github.ref_name }}-mainnet + docker push ${{ inputs.image_name }}:stable + + - name: Build with testing env and push with goerli tag. + if: ${{ inputs.branch_name == 'refs/heads/master' }} + run: | + docker build . -t ${{ inputs.image_name }} -f ${{ inputs.dockerfile }} --build-arg BUILD_ENV=testing + docker tag ${{ inputs.image_name }} ${{ inputs.image_name }}:${{ github.ref_name }}-goerli + + docker push ${{ inputs.image_name }}:${{ github.ref_name }}-goerli diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index fa2a1240..354e9c74 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -1,7 +1,6 @@ name: Pull request workflow -on: - pull_request +on: pull_request jobs: lint: diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index a5d29c12..c25b9531 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -10,7 +10,7 @@ jobs: release-version: name: Releasing a version runs-on: ubuntu-latest - if: ${{ !contains(github.event.head_commit.message, 'chore') || (github.ref_name == 'master' && !contains(github.event.head_commit.message, 'chore(release)')) }} + if: ${{ !contains(github.event.head_commit.message, 'release') || (github.ref_name == 'master' && !contains(github.event.head_commit.message, 'release')) }} steps: - uses: actions/checkout@v2 with: @@ -24,23 +24,8 @@ jobs: - name: Install node_modules run: yarn - - name: Authenticate with GitHub - run: | - git config --global user.name "${{ secrets.USER_NAME }}" - git config --global user.email "${{ secrets.USER_EMAIL }}" - - - name: Run pre-release script - if: ${{ github.ref_name == 'dev' }} - run: yarn run pre-release - - name: Run release script - if: ${{ github.ref_name == 'master' }} run: yarn run release - - - name: Push to remote branch - uses: ad-m/github-push-action@master - with: - github_token: ${{ secrets.USER_TOKEN }} - branch: ${{ github.ref }} - tags: true - force: true + env: + GITHUB_TOKEN: ${{ secrets.USER_TOKEN }} + GH_TOKEN: ${{ secrets.USER_TOKEN }} diff --git a/.github/workflows/push_backend_images.yml b/.github/workflows/push_backend_images.yml new file mode 100644 index 00000000..9820a4ef --- /dev/null +++ b/.github/workflows/push_backend_images.yml @@ -0,0 +1,16 @@ +name: Docker build tag and push backend images to GCR workflow. + +on: + push: + tags: + - backend* + +jobs: + push-backend-image: + uses: ./.github/workflows/gcr_push_workflow.yml + with: + image_name: us.gcr.io/starkware-dev/starknet/starkgate/backend + branch_name: ${{ github.event.base_ref }} + dockerfile: Dockerfile.backend + secrets: + gcp_token: ${{ secrets.STARKGATE_SA }} diff --git a/.github/workflows/push_frontend_images.yml b/.github/workflows/push_frontend_images.yml new file mode 100644 index 00000000..5d2ae2ed --- /dev/null +++ b/.github/workflows/push_frontend_images.yml @@ -0,0 +1,16 @@ +name: Docker build tag and push frontend images to GCR workflow. + +on: + push: + tags: + - v*.*.* + +jobs: + push-frontend-image: + uses: ./.github/workflows/gcr_push_workflow.yml + with: + image_name: us.gcr.io/starkware-dev/starknet/starkgate/frontend + branch_name: ${{ github.event.base_ref }} + dockerfile: Dockerfile.frontend + secrets: + gcp_token: ${{ secrets.STARKGATE_SA }} diff --git a/.github/workflows/tag.yml b/.github/workflows/tag.yml deleted file mode 100644 index 1edb34af..00000000 --- a/.github/workflows/tag.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: Tag workflow - -on: - push: - tags: - - 'v*.*.*' - -jobs: - create-release: - name: Creating a release - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 0 - token: ${{ secrets.USER_TOKEN }} - - - uses: actions/setup-node@v2 - with: - node-version: 16 - - - name: Install node_modules - run: yarn - - - name: Extract release data - id: get-release-data - run: | - echo "::set-output name=tag::${GITHUB_REF##*/}" - echo "::set-output name=file::${GITHUB_REPOSITORY#*/}-${GITHUB_REF##*/}" - - - name: Build project - run: yarn run build - - - name: Zip artifacts - run: zip -r ${{ steps.get-release-data.outputs.file }}.zip package.json README.md CHANGELOG.md build - - - name: Create release - uses: softprops/action-gh-release@v1 - with: - token: ${{ secrets.USER_TOKEN }} - tag_name: ${{ steps.get-release-data.outputs.tag }} - prerelease: ${{ contains(steps.get-release-data.outputs.tag, '-') }} - generate_release_notes: true - draft: false - files: | - ${{ steps.get-release-data.outputs.file }}.zip diff --git a/.stylelintignore b/.stylelintignore new file mode 100644 index 00000000..796b96d1 --- /dev/null +++ b/.stylelintignore @@ -0,0 +1 @@ +/build diff --git a/.stylelintrc.js b/.stylelintrc.js new file mode 100644 index 00000000..192f7e3e --- /dev/null +++ b/.stylelintrc.js @@ -0,0 +1,61 @@ +module.exports = { + extends: [ + 'stylelint-config-css-modules', + 'stylelint-config-standard', + 'stylelint-config-standard-scss', + 'stylelint-config-prettier' + ], + plugins: ['stylelint-scss', 'stylelint-prettier'], + ignoreFiles: ['**/*.js', '**/*.jsx'], + rules: { + 'property-no-unknown': [true, {ignoreProperties: ['/^color/', 'mainOffset', 'primaryFont']}], + 'selector-pseudo-class-no-unknown': [true, {ignorePseudoClasses: ['export']}], + 'selector-class-pattern': '^[a-z][a-zA-Z0-9]+$', + 'selector-pseudo-element-no-unknown': [true, {ignorePseudoElements: ['input-placeholder']}], + 'alpha-value-notation': 'number', + 'color-function-notation': 'legacy', + 'no-empty-source': null, + 'shorthand-property-no-redundant-values': null, + 'string-quotes': 'single', + 'scss/dollar-variable-pattern': ['/^color/', {ignore: 'global'}], + 'scss/at-import-partial-extension': null, + 'scss/comment-no-empty': null, + 'scss/double-slash-comment-empty-line-before': null, + 'prettier/prettier': [true, {severity: 'warning'}], + 'at-rule-empty-line-before': [ + 'always', + { + except: ['first-nested', 'blockless-after-same-name-blockless'], + ignore: ['after-comment'], + ignoreAtRules: ['else'] + } + ], + 'at-rule-no-unknown': [ + true, + { + ignoreAtRules: [ + 'extend', + 'at-root', + 'debug', + 'warn', + 'error', + 'if', + 'else', + 'for', + 'each', + 'while', + 'mixin', + 'include', + 'content', + 'return', + 'function', + 'tailwind', + 'apply', + 'responsive', + 'variants', + 'screen' + ] + } + ] + } +}; diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 3b6d8d70..00000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,5 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. - -### [0.0.1](https://github.com/starkware-libs/starkgate-frontend/compare/v0.0.1-25...v0.0.1) (2022-02-07) diff --git a/DOCKER.md b/DOCKER.md new file mode 100644 index 00000000..ec7e54ca --- /dev/null +++ b/DOCKER.md @@ -0,0 +1,28 @@ +# Dockerizing app + +In order to build the docker application run the following: + +### Docker build + +```shell +docker build . --build-arg BUILD_ENV=production -t starkgate:frontend-latest +``` + +### Run image + +```shell +$ docker run -P -d starkgate:frontend-latest +bc60c8488c9e6a32ef76c307b12e1efb6e750f769f29f850b7d5ebe006fed69d + +$ docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +bc60c8488c9e starkgate:frontend-latest "docker-entrypoint.s…" 5 seconds ago Up 1 second 0.0.0.0:49154->6000/tcp, :::49154->6000/tcp awesome_sutherland +``` + +### Display logs + +```shell +$ docker logs bc60c8488c9e +2022-03-03T12:02:40.586Z [info] : ::ffff:172.17.0.1 - - [03/Mar/2022:12:02:40 +0000] "GET /is_alive HTTP/1.1" 200 16 "-" "curl/7.79.1" + {} +``` diff --git a/Dockerfile.frontend b/Dockerfile.frontend new file mode 100644 index 00000000..6cae4f90 --- /dev/null +++ b/Dockerfile.frontend @@ -0,0 +1,21 @@ +FROM node:16 as build + +WORKDIR /app + +ENV PATH /app/node_modules/.bin:$PATH +ENV DISABLE_ESLINT_PLUGIN=true + +ARG BUILD_ENV=testing + +COPY package.json ./ +COPY yarn.lock ./ +RUN yarn install + +COPY . ./ +RUN yarn build:$BUILD_ENV + +# production environment +FROM nginx:stable-alpine +COPY --from=build /app/build /usr/share/nginx/html +EXPOSE 80 +CMD ["nginx", "-g", "daemon off;"] diff --git a/deployment/README.md b/deployment/README.md new file mode 100644 index 00000000..94d9427c --- /dev/null +++ b/deployment/README.md @@ -0,0 +1,110 @@ +# Starknet faucet helm chart + +## First time installation + +1. Authenticate + +```bash +gcloud auth login +``` + +2. Connect to production kubernetes cluster + +```bash +gcloud container clusters get-credentials web-devs --region us-central1 --project starkware-dev +``` + +3. Deploy application using helm CLI. + +#### Production + +```bash +helm install starkgate starkware/webapp-general-helm \ +--values deployment/production.yml \ +--set-file configMap.frontend.envs=.env.production \ +--namespace starkgate-mainnet \ +--create-namespace \ +--set frontend.image.tag=VERSION +``` + +> **Note:** Change image VERSION to the new git tag. + +#### Testing + +```bash +helm install starkgate starkware/webapp-general-helm \ +--values deployment/testing.yml \ +--set-file configMap.frontend.envs=.env.testing \ +--namespace starkgate-goerli \ +--create-namespace \ +--set frontend.image.tag=VERSION +``` + +#### Devnet + +```bash +helm install starkgate starkware/webapp-general-helm \ +--values deployment/development.yml \ +--set-file configMap.frontend.envs=.env.testing \ +--namespace starkgate-devnet \ +--create-namespace \ +--set frontend.image.tag=VERSION +``` + +> **Note:** Change image VERSION to the new git tag. + +## Upgrade (redeploy) + +> **Note:** Upgrade only if you already run `helm install` + +Upgrade starknet faucet helm chart. + +1. Authenticate + +```bash +gcloud auth login +``` + +### Production + +```bash +helm upgrade starkgate starkware/webapp-general-helm \ +--values deployment/production.yml \ +--set-file configMap.frontend.envs=.env.production \ +--namespace starkgate-mainnet \ +--set frontend.image.tag=VERSION +``` + +### Testing + +```bash +helm upgrade starkgate starkware/webapp-general-helm \ +--values deployment/testing.yml \ +--set-file configMap.frontend.envs=.env.testing \ +--namespace starkgate-goerli \ +--set frontend.image.tag=VERSION +``` + +### Devnet + +```bash +helm upgrade starkgate starkware/webapp-general-helm \ +--values deployment/development.yml \ +--set-file configMap.frontend.envs=.env.testing \ +--namespace starkgate-devnet \ +--set frontend.image.tag=VERSION +``` + +## Rollback + +To see revision numbers, run: + +```bash +helm history starkgate-[ENV] +``` + +To rollback + +```bash +helm rollback starkgate-[ENV] [REVISION] +``` diff --git a/deployment/development.yml b/deployment/development.yml new file mode 100644 index 00000000..45e7052d --- /dev/null +++ b/deployment/development.yml @@ -0,0 +1,64 @@ +# Values that configure running a starknet starkgate frontend on Kubernetes. +frontend: + # The name of the Docker image (including any tag and repository name) + # for the container running starknet faucet frontend. + # For example: + #''' yaml + # image: + # repository: 076859660908.dkr.ecr.us-east-2.amazonaws.com/starknet/faucet/frontend + # tag: latest + # pullPolicy: Always + #''' + # @type: string + image: + repository: us.gcr.io/starkware-dev/starknet/starkgate/frontend + tag: latest + pullPolicy: Always + +# Values that configure running a starknet starkgate backend on Kubernetes. +backend: + # If true, the chart will install all + # the resources necessary for a starknet starkgate backend on Kubernetes. + # @default: true + # @type: boolean + enabled: false + + # The name of the Docker image (including any tag and repository name) + # for the container running starknet faucet backend. + # For example: + #''' yaml + # image: + # repository: 076859660908.dkr.ecr.us-east-2.amazonaws.com/starknet/faucet/backend + # tag: latest + # pullPolicy: Always + #''' + # @type: string + image: + repository: us.gcr.io/starkware-dev/starknet/starkgate/backend + tag: latest + + # Default service variable for starknet starkgate backend pod. + service: + # Type of service, ex. LoadBalancer, ClusterIP. + # @type: string + type: ClusterIP + name: backend + port: 3001 + protocol: TCP + +# Configure Ingress for starknet faucet frontend and backend. +# If `ingress.tls.enabled` is set to `true`, the Ingress will expose +# the port 443 on the backend and frontend service. +ingress: + type: gce + # Host name to create Ingress rules. + # @type: string + host: devnet-goerli.starkgate.starknet.io + +# Consume ConfigMaps as environment variables. +configMap: + # Environment name (development | production | testing) + # for deployments environment variables. + # @default: production + # @type: string + env: testing diff --git a/deployment/production.yml b/deployment/production.yml new file mode 100644 index 00000000..a1cc1240 --- /dev/null +++ b/deployment/production.yml @@ -0,0 +1,76 @@ +# Default values for starkgate. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +# Values that configure running a starknet starkgate frontend on Kubernetes. +frontend: + # The name of the Docker image (including any tag and repository name) + # for the container running starknet faucet frontend. + # For example: + #''' yaml + # image: + # repository: us.gcr.io/starkware-dev/starknet/faucet/frontend + # tag: latest + # pullPolicy: Always + #''' + # @type: string + image: + repository: us.gcr.io/starkware-dev/starknet/starkgate/frontend + tag: latest + + # Default service variable for starknet testing.yaml frontend pod. + service: + # Type of service, ex. NodePort, ClusterIP. + type: ClusterIP + name: http + port: 80 + protocol: TCP + +# Values that configure running a starknet testing.yaml backend on Kubernetes. +backend: + # If true, the chart will install all + # the resources necessary for a starknet testing.yaml backend on Kubernetes. + # @default: true + # @type: boolean + enabled: false + + # The name of the Docker image (including any tag and repository name) + # for the container running starknet faucet backend. + # For example: + #''' yaml + # image: + # repository: 076859660908.dkr.ecr.us-east-2.amazonaws.com/starknet/faucet/backend + # tag: latest + # pullPolicy: Always + #''' + # @type: string + image: + repository: us.gcr.io/starkware-dev/starknet/starkgate/backend + tag: latest + + # Default service variable for starknet starkgate backend pod. + service: + # Type of service, ex. LoadBalancer, ClusterIP. + # @type: string + type: ClusterIP + name: backend + port: 3001 + protocol: TCP + +# Configure Ingress for starknet faucet frontend and backend. +# If `ingress.tls.enabled` is set to `true`, the Ingress will expose +# the port 443 on the backend and frontend service. +ingress: + type: gce + + # Host name to create Ingress rules. + # @type: string + host: starkgate.starknet.io + +# Consume ConfigMaps as environment variables. +configMap: + # Environment name (development | production | testing) + # for deployments environment variables. + # @default: production + # @type: string + env: production diff --git a/deployment/testing.yml b/deployment/testing.yml new file mode 100644 index 00000000..6b9515c9 --- /dev/null +++ b/deployment/testing.yml @@ -0,0 +1,64 @@ +# Values that configure running a starknet starkgate frontend on Kubernetes. +frontend: + # The name of the Docker image (including any tag and repository name) + # for the container running starknet faucet frontend. + # For example: + #''' yaml + # image: + # repository: 076859660908.dkr.ecr.us-east-2.amazonaws.com/starknet/faucet/frontend + # tag: latest + # pullPolicy: Always + #''' + # @type: string + image: + repository: us.gcr.io/starkware-dev/starknet/starkgate/frontend + tag: latest + pullPolicy: Always + +# Values that configure running a starknet starkgate backend on Kubernetes. +backend: + # If true, the chart will install all + # the resources necessary for a starknet starkgate backend on Kubernetes. + # @default: true + # @type: boolean + enabled: false + + # The name of the Docker image (including any tag and repository name) + # for the container running starknet faucet backend. + # For example: + #''' yaml + # image: + # repository: 076859660908.dkr.ecr.us-east-2.amazonaws.com/starknet/faucet/backend + # tag: latest + # pullPolicy: Always + #''' + # @type: string + image: + repository: us.gcr.io/starkware-dev/starknet/starkgate/backend + tag: latest + + # Default service variable for starknet starkgate backend pod. + service: + # Type of service, ex. LoadBalancer, ClusterIP. + # @type: string + type: ClusterIP + name: backend + port: 3001 + protocol: TCP + +# Configure Ingress for starknet faucet frontend and backend. +# If `ingress.tls.enabled` is set to `true`, the Ingress will expose +# the port 443 on the backend and frontend service. +ingress: + type: gce + # Host name to create Ingress rules. + # @type: string + host: goerli.starkgate.starknet.io + +# Consume ConfigMaps as environment variables. +configMap: + # Environment name (development | production | testing) + # for deployments environment variables. + # @default: production + # @type: string + env: testing diff --git a/package.json b/package.json index 847bc883..4bc4b958 100644 --- a/package.json +++ b/package.json @@ -1,21 +1,25 @@ { "name": "starkgate-frontend", - "version": "0.0.2-9", + "version": "0.0.0", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", - "prebuild": "npm run clean", - "build": "react-scripts build", - "build:testing": "env-cmd -f .env.testing npm run build", + "prebuild": "yarn run clean", + "build:production": "react-scripts build", + "build:testing": "env-cmd -f .env.testing yarn run build:production", "start": "ESLINT_NO_DEV_ERRORS=true react-scripts start", "test": "react-scripts test --env=jsdom", "eject": "react-scripts eject", - "lint": "eslint .", - "lint:fix": "eslint --fix .", - "format": "prettier --write \"**/*.+(js|jsx|json|scss|css|md)\"", - "release": "standard-version", - "release:dry": "standard-version --dry-run", - "pre-release": "standard-version --prerelease --skip.changelog --releaseCommitMessageFormat 'chore(prerelease): {{currentTag}}'" + "lint:scripts": "eslint **/*.{js,jsx}", + "lint:styles": "stylelint **/*.{css,scss}", + "lint:prettier": "prettier --check s**/*.{js,jsx,css,scss}", + "lint": "yarn run -s lint:scripts & yarn run -s lint:styles & yarn run -s lint:prettier", + "format:scripts": "eslint --fix **/*.{js,jsx}", + "format:styles": "stylelint --fix **/*.{css,scss}", + "format:prettier": "prettier --write **/*.{js,jsx,css,scss,yaml,yml,md}", + "format": "yarn run -s format:scripts & yarn run -s format:styles & yarn run -s format:prettier", + "release": "semantic-release", + "release:dry": "semantic-release --no-ci --dry-run" }, "husky": { "hooks": { @@ -23,12 +27,15 @@ } }, "lint-staged": { - "*.+(js|jsx)": [ + "**/*.{js,jsx}": [ + "prettier --write", "eslint --fix", - "prettier --write --ignore-unknown" + "git add" ], - "*.+(json|scss|css|md)": [ - "prettier --write" + "**/*.{css,scss}": [ + "prettier --write", + "stylelint --fix", + "git add" ] }, "browserslist": { @@ -46,38 +53,74 @@ ] }, "dependencies": { - "@argent/get-starknet": "^1.1.3", - "@headlessui/react": "^1.4.2", + "@argent/get-starknet": "^3.0.1", + "@emotion/react": "^11.8.2", + "@emotion/styled": "^11.8.1", + "@headlessui/react": "^1.5.0", "@metamask/onboarding": "^1.0.1", + "@mui/material": "^5.5.3", + "@mui/styles": "^5.5.0", + "@splitbee/web": "^0.3.0", "js-logger": "^1.6.1", "react": "^17.0.2", "react-dom": "^17.0.2", - "react-hot-toast": "^2.1.1", + "react-hot-toast": "^2.2.0", "react-scripts": "4.0.3", - "starknet": "^3.0.0", + "starknet": "^3.7.0", "use-async-memo": "^1.2.3", + "use-breakpoint": "^3.0.1", "use-deep-compare-effect": "^1.8.1", "use-wallet": "^0.13.4", "uuid": "^8.3.2", - "web3": "^1.6.1" + "web3": "^1.7.0" }, "devDependencies": { + "@babel/cli": "^7.16.0", + "@babel/core": "^7.16.0", + "@babel/eslint-parser": "^7.16.3", + "@babel/eslint-plugin": "^7.14.5", "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-syntax-flow": "^7.16.0", + "@babel/plugin-transform-react-jsx": "^7.16.0", + "@babel/preset-flow": "^7.16.0", + "@babel/preset-react": "^7.16.0", + "@semantic-release/changelog": "^6.0.0", + "@semantic-release/commit-analyzer": "^9.0.1", + "@semantic-release/git": "^10.0.0", + "@semantic-release/npm": "^9.0.1", + "@semantic-release/release-notes-generator": "^10.0.2", "@testing-library/jest-dom": "^5.16.1", "@testing-library/react": "^11.2.7", "@testing-library/user-event": "^12.8.3", "@trivago/prettier-plugin-sort-imports": "^2.0.4", + "conventional-changelog-conventionalcommits": "^4.6.3", "env-cmd": "^10.1.0", "eslint-config-prettier": "^8.3.0", + "eslint-config-react-app": "^6.0.0", + "eslint-plugin-flowtype": "^8.0.3", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-jest": "^25.3.0", + "eslint-plugin-jsx-a11y": "^6.5.1", "eslint-plugin-prettier": "^3.4.0", + "eslint-plugin-react": "^7.23.2", "eslint-plugin-react-hooks": "^4.3.0", - "husky": "^7.0.1", - "lint-staged": "^11.0.1", + "eslint-plugin-testing-library": "^5.0.1", + "husky": "^7.0.4", + "lint-staged": "^12.1.2", "node-sass": "^6.0.1", + "postcss": "^8.4.4", "prettier": "^2.5.1", + "prettier-stylelint": "^0.4.2", "prop-types": "^15.7.2", "sass-loader": "^12.1.0", - "standard-version": "^9.3.1" + "semantic-release": "^19.0.2", + "stylelint": "^14.1.0", + "stylelint-config-css-modules": "^4.1.0", + "stylelint-config-prettier": "^9.0.3", + "stylelint-config-standard": "^24.0.0", + "stylelint-config-standard-scss": "^3.0.0", + "stylelint-prettier": "^2.0.0", + "stylelint-scss": "^4.0.0" }, "engines": { "node": ">=16.0.0", diff --git a/release.config.js b/release.config.js new file mode 100644 index 00000000..f844ef9f --- /dev/null +++ b/release.config.js @@ -0,0 +1,97 @@ +module.exports = { + branches: [ + 'master', + { + name: 'dev', + prerelease: true + } + ], + plugins: [ + [ + '@semantic-release/commit-analyzer', + { + preset: 'conventionalcommits', + releaseRules: [ + {breaking: true, release: 'major'}, + {revert: true, release: 'patch'}, + // MINOR + {type: 'feat', release: 'minor'}, + {type: 'feature', release: 'minor'}, + // PATCH + {type: 'fix', release: 'patch'}, + {type: 'bugfix', release: 'patch'}, + {type: 'hotfix', release: 'patch'}, + {type: 'perf', release: 'patch'}, + {type: 'refactor', release: 'patch'}, + {type: 'improvement', release: 'patch'}, + {type: 'revert', release: 'patch'}, + {type: 'style', release: 'patch'}, + {type: 'docs', release: 'patch'}, + {type: 'ci', release: 'patch'}, + {type: 'test', release: 'patch'}, + // NO RELEASE + {type: 'chore', release: false}, + {type: 'ci', release: false}, + {type: 'build', release: false}, + {type: 'prerelease', release: false}, + {type: 'release', release: false}, + {scope: 'no-release', release: false} + ] + } + ], + [ + '@semantic-release/release-notes-generator', + { + // Using conventionalcommits here since the angular preset does not allow custom + // types for release notes generation. + preset: 'conventionalcommits', + presetConfig: { + types: [ + {type: 'breaking', section: 'Breaking'}, + {type: 'feat', section: '🧩 Features'}, + {type: 'feature', section: '🧩 Features'}, + {type: 'fix', section: '🔧 Fixes'}, + {type: 'bugfix', section: '🔧 Fixes'}, + {type: 'hotfix', section: '🔧 Fixes'}, + {type: 'perf', section: '💉 Improvements'}, + {type: 'refactor', section: '💉 Improvements'}, + {type: 'improvement', section: '💉 Improvements'}, + {type: 'style', section: '💉 Improvements'}, + {type: 'docs', section: '📚 Docs'}, + + {type: 'chore', section: '⚙ Internals', hidden: true}, + {type: 'ci', section: '⚙ Internals', hidden: true}, + {type: 'build', section: '⚙ Internals', hidden: true}, + { + type: 'release', + section: '⚙ Internals', + hidden: true + }, + { + type: 'prerelease', + section: '⚙ Internals', + hidden: true + } + ] + } + } + ], + '@semantic-release/changelog', + [ + '@semantic-release/npm', + { + npmPublish: false + } + ], + [ + '@semantic-release/git', + { + assets: ['package.json', 'yarn.lock', 'CHANGELOG.md'], + message: + "<%= branch === 'dev' ? 'prerelease' : 'release' %>: <%= nextRelease.gitTag %>\n\n <%= nextRelease.notes %>" + } + ], + '@semantic-release/github' + ], + repositoryUrl: 'https://github.com/starkware-libs/starkgate-frontend' +}; diff --git a/src/__tests__/utils/blockchain/starknet.spec.js b/src/__tests__/utils/blockchain/starknet.spec.js index b23e6deb..4b9edbf7 100644 --- a/src/__tests__/utils/blockchain/starknet.spec.js +++ b/src/__tests__/utils/blockchain/starknet.spec.js @@ -35,7 +35,7 @@ describe('starknet blockchain utils', () => { to_address, selector, payload, - ChainType.GOERLI.id, + ChainType.L2.GOERLI, nonce ) ).toEqual('0x6660a4a84d5c6665be0e97b863433afe3ce7ea6521f5f90e0693b3b772cda55'); diff --git a/src/__tests__/utils/date.spec.js b/src/__tests__/utils/date.spec.js index 35c56534..60efca7d 100644 --- a/src/__tests__/utils/date.spec.js +++ b/src/__tests__/utils/date.spec.js @@ -1,6 +1,6 @@ import utils from '../../utils'; -const {get24Time, getDate} = utils.date; +const {get24Time, getDate, getMsFromHrs} = utils.date; describe('getDate', () => { it('should return date of the form DD/MM/YYYY from timestamp', () => { @@ -13,3 +13,16 @@ describe('get24Time', () => { expect(get24Time(1644828892412).endsWith(':54:52')).toBeTruthy(); }); }); + +describe('getMsFromHrs', () => { + it('should return the equivalent time from hours to milliseconds', () => { + expect(getMsFromHrs(1)).toEqual(3600000); + expect(getMsFromHrs('24')).toEqual(86400000); + expect(getMsFromHrs('0')).toEqual(0); + }); + + it('should return undefined if parseFloat got NaN', () => { + expect(getMsFromHrs('something')).toEqual(undefined); + expect(getMsFromHrs(undefined)).toEqual(undefined); + }); +}); diff --git a/src/__tests__/utils/object.spec.js b/src/__tests__/utils/object.spec.js index 8f96cde9..b2920bef 100644 --- a/src/__tests__/utils/object.spec.js +++ b/src/__tests__/utils/object.spec.js @@ -38,7 +38,7 @@ describe('evaluate', () => { }); describe('findIndexById', () => { - it("should return the matching-object's index (Number), accourding it's 'id'.", () => { + it("should return the matching-object's index (Number), according it's id", () => { const array = [{id: '0cbff33f'}, {id: '11a083e3'}]; const resultIndex = findIndexById(array, '0cbff33f'); expect(resultIndex).toEqual(0); @@ -50,7 +50,7 @@ describe('findIndexById', () => { expect(resultIndex).toEqual(-1); }); - it("should return -1 (Number) for empty 'array' or falsy 'id', but allows 'id' to be 0 or '0'", () => { + it("should return -1 (Number) for empty array or falsy id, but allows id to be 0 or '0'", () => { const array = [{id: '0cbff33f'}, {id: '0'}, {id: 0}]; expect(findIndexById([], '0cbff33f')).toEqual(-1); expect(findIndexById(array, undefined)).toEqual(-1); diff --git a/src/analytics/index.js b/src/analytics/index.js new file mode 100644 index 00000000..2484ead7 --- /dev/null +++ b/src/analytics/index.js @@ -0,0 +1,2 @@ +export * from './track'; +export * from './track-event'; diff --git a/src/analytics/track-event.js b/src/analytics/track-event.js new file mode 100644 index 00000000..7a676501 --- /dev/null +++ b/src/analytics/track-event.js @@ -0,0 +1,62 @@ +export const TrackEvent = { + /** + * Menus + */ + SELECT_TOKEN_MENU: 'SELECT_TOKEN_MENU', + ACCOUNT_MENU: 'ACCOUNT_MENU', + TRANSFER_MENU: 'TRANSFER_MENU', + FAQ_MENU: 'FAQ_MENU', + + /** + * Transfer menu + */ + TRANSFER: { + SWAP_NETWORK: 'TRANSFER_MENU/swap_network', + MAX_CLICK: 'TRANSFER_MENU/max_click', + TRANSFER_TO_L2_INITIATED: 'TRANSFER_MENU/transfer_to_l2_initiated', + TRANSFER_TO_L2_SUCCESS: 'TRANSFER_MENU/transfer_to_l2_success', + TRANSFER_TO_L2_REJECT: 'TRANSFER_MENU/transfer_to_l2_reject', + TRANSFER_TO_L2_ERROR: 'TRANSFER_MENU/transfer_to_l2_error', + TRANSFER_TO_L1_INITIATED: 'TRANSFER_MENU/transfer_to_l1_initiated', + TRANSFER_TO_L1_SUCCESS: 'TRANSFER_MENU/transfer_to_l1_success', + TRANSFER_TO_L1_REJECT: 'TRANSFER_MENU/transfer_to_l1_reject', + TRANSFER_TO_L1_ERROR: 'TRANSFER_MENU/transfer_to_l1_error', + COMPLETE_TRANSFER_TO_L1_INITIATED: 'TRANSFER_MENU/complete_transfer_to_l1_initiated', + COMPLETE_TRANSFER_TO_L1_SUCCESS: 'TRANSFER_MENU/complete_transfer_to_l1_success', + COMPLETE_TRANSFER_TO_L1_REJECT: 'TRANSFER_MENU/complete_transfer_to_l1_reject', + COMPLETE_TRANSFER_TO_L1_ERROR: 'TRANSFER_MENU/complete_transfer_to_l1_error' + }, + + /** + * Select token menu + */ + SELECT_TOKEN: { + TOKEN_SELECTED: 'SELECT_TOKEN_MENU/token_selected' + }, + + /** + * Account menu + */ + ACCOUNT: { + TX_LINK_CLICK: 'ACCOUNT_MENU/tx_link_click', + ACCOUNT_LINK_CLICK: 'ACCOUNT_MENU/account_link_click', + VIEW_TRANSFERS_LOG: 'ACCOUNT_MENU/view_transfers_log', + COMPLETE_TRANSFER_CLICK: 'ACCOUNT_MENU/complete_transfer', + ADDRESS_COPIED: 'ACCOUNT_MENU/address_copied' + }, + + /** + * Login screen + */ + LOGIN_SCREEN: 'LOGIN_SCREEN', + LOGIN: { + DOWNLOAD_CLICK: 'LOGIN_SCREEN/download_click', + WALLET_CLICK: 'LOGIN_SCREEN/wallet_click', + LOGIN_ERROR: 'LOGIN_SCREEN/login_error' + }, + + /** + * Tabs + */ + DISCORD_TAB_CLICK: 'discord_tab_click' +}; diff --git a/src/analytics/track.js b/src/analytics/track.js new file mode 100644 index 00000000..b290baa9 --- /dev/null +++ b/src/analytics/track.js @@ -0,0 +1,17 @@ +import splitbee from '@splitbee/web'; + +import utils from '../utils'; + +const logger = utils.logger.getLogger('Analytics'); + +export const track = (event, data) => { + logger.debug('Sending track event...', {event, data}); + splitbee.track(event, data).then(() => { + logger.debug('Track event sent.'); + }); +}; + +export const setUser = data => { + logger.debug('Set user', data); + splitbee.user.set(data).then(); +}; diff --git a/src/api/bridge.js b/src/api/bridge.js index 2934e38c..11547d5c 100644 --- a/src/api/bridge.js +++ b/src/api/bridge.js @@ -56,6 +56,18 @@ export const maxDeposit = async ({decimals, contract}) => { } }; +export const maxTotalBalance = async ({decimals, contract}) => { + try { + const maxTotalBalance = await utils.blockchain.ethereum.callContract( + contract, + 'maxTotalBalance' + ); + return utils.parser.parseFromDecimals(maxTotalBalance, decimals); + } catch (ex) { + return Promise.reject(ex); + } +}; + export const initiateWithdraw = async ({recipient, amount, decimals, contract}) => { try { return utils.blockchain.starknet.sendTransaction(contract, 'initiate_withdraw', { diff --git a/src/api/erc20.js b/src/api/erc20.js index 5f1336fa..e4889318 100644 --- a/src/api/erc20.js +++ b/src/api/erc20.js @@ -38,8 +38,8 @@ export const balanceOf = async ({account, decimals, contract}, isL1 = true) => { const {balance} = await utils.blockchain.starknet.callContract( contract, 'balanceOf', - [{account}], - TransactionStatus.PENDING.toLowerCase() + account, + {blockIdentifier: TransactionStatus.PENDING.toLowerCase()} ); return utils.parser.parseFromUint256(balance, decimals); } diff --git a/src/assets/svg/icons/refresh.svg b/src/assets/svg/icons/refresh.svg new file mode 100644 index 00000000..1502e066 --- /dev/null +++ b/src/assets/svg/icons/refresh.svg @@ -0,0 +1 @@ +<svg fill="#000000" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 30" width="30px" height="30px"><path d="M 15 3 C 12.031398 3 9.3028202 4.0834384 7.2070312 5.875 A 1.0001 1.0001 0 1 0 8.5058594 7.3945312 C 10.25407 5.9000929 12.516602 5 15 5 C 20.19656 5 24.450989 8.9379267 24.951172 14 L 22 14 L 26 20 L 30 14 L 26.949219 14 C 26.437925 7.8516588 21.277839 3 15 3 z M 4 10 L 0 16 L 3.0507812 16 C 3.562075 22.148341 8.7221607 27 15 27 C 17.968602 27 20.69718 25.916562 22.792969 24.125 A 1.0001 1.0001 0 1 0 21.494141 22.605469 C 19.74593 24.099907 17.483398 25 15 25 C 9.80344 25 5.5490109 21.062074 5.0488281 16 L 8 16 L 4 10 z"/></svg> \ No newline at end of file diff --git a/src/components/Containers/Footer/Footer.js b/src/components/Containers/Footer/Footer.js index 85a0a686..8ec7d0ba 100644 --- a/src/components/Containers/Footer/Footer.js +++ b/src/components/Containers/Footer/Footer.js @@ -1,12 +1,18 @@ import React from 'react'; +import useBreakpoint from 'use-breakpoint'; +import {isMobile, Breakpoint} from '../../../enums'; import styles from './Footer.module.scss'; import {RIGHTS_TXT} from './Footer.strings'; -export const Footer = () => ( - <footer className={styles.footer}> - <div className={styles.copyright}> - <center>{RIGHTS_TXT}</center> - </div> - </footer> -); +export const Footer = () => { + const {breakpoint} = useBreakpoint(Breakpoint); + + return !isMobile(breakpoint) ? ( + <footer className={styles.footer}> + <div className={styles.copyright}> + <center>{RIGHTS_TXT}</center> + </div> + </footer> + ) : null; +}; diff --git a/src/components/Containers/Header/Header.js b/src/components/Containers/Header/Header.js index d20b56ee..41591538 100644 --- a/src/components/Containers/Header/Header.js +++ b/src/components/Containers/Header/Header.js @@ -1,21 +1,30 @@ import React from 'react'; +import useBreakpoint from 'use-breakpoint'; +import {track} from '../../../analytics'; import {ReactComponent as StarkGateLogo} from '../../../assets/img/starkgate.svg'; +import constants from '../../../config/constants'; +import {Breakpoint} from '../../../enums'; +import {useColors} from '../../../hooks'; import {useMenu} from '../../../providers/MenuProvider'; import {useIsL1, useIsL2} from '../../../providers/TransferProvider'; import {useL1Wallet, useL2Wallet, useWallets} from '../../../providers/WalletsProvider'; import utils from '../../../utils'; -import {WalletButton} from '../../UI'; +import {Tab, WalletButton} from '../../UI'; import styles from './Header.module.scss'; -import {CHAIN_TXT} from './Header.strings'; +import {CHAIN_TXT, TAB_DISCORD_TXT, TAB_FAQ_TXT} from './Header.strings'; + +const {DISCORD_LINK_URL} = constants; export const Header = () => { const {chainName, isConnected} = useWallets(); - const {showAccountMenu, showTransferMenu} = useMenu(); + const {showAccountMenu, showTransferMenu, showFaqMenu} = useMenu(); const [, swapToL1] = useIsL1(); const [, swapToL2] = useIsL2(); const {account: l1Account, isConnected: isL1AccountConnected, config: l1Config} = useL1Wallet(); const {account: l2Account, isConnected: isL2AccountConnected, config: l2Config} = useL2Wallet(); + const {breakpoint} = useBreakpoint(Breakpoint); + const {colorDiscord, colorWhiteOp50} = useColors(); const onL2WalletButtonClick = () => { swapToL2(); @@ -31,8 +40,13 @@ export const Header = () => { showTransferMenu(); }; + const onTabDiscordClick = () => { + track(TrackEvent.DISCORD_TAB_CLICK); + utils.browser.openInNewTab(DISCORD_LINK_URL); + }; + return ( - <div className={utils.object.toClasses(styles.header, 'row')}> + <div className={utils.object.toClasses(styles.header, styles[breakpoint.toLowerCase()], 'row')}> <div className={utils.object.toClasses(styles.left, 'row')}> <div className={utils.object.toClasses(styles.logo, 'row')} onClick={onLogoClick}> <StarkGateLogo /> @@ -43,6 +57,8 @@ export const Header = () => { </div> <div className={utils.object.toClasses(styles.right, 'row')}> + <Tab color={colorWhiteOp50} label={TAB_FAQ_TXT} onClick={showFaqMenu} /> + <Tab color={colorDiscord} label={TAB_DISCORD_TXT} onClick={onTabDiscordClick} /> {isL1AccountConnected && ( <WalletButton account={l1Account} diff --git a/src/components/Containers/Header/Header.module.scss b/src/components/Containers/Header/Header.module.scss index aa80a2ea..57e639b0 100644 --- a/src/components/Containers/Header/Header.module.scss +++ b/src/components/Containers/Header/Header.module.scss @@ -24,6 +24,7 @@ $chain-color: $--color-white-1; svg { width: 220px; + height: 46px; } } @@ -38,9 +39,26 @@ $chain-color: $--color-white-1; } .right { - button { + display: flex; + flex-direction: row; + + * { &:not(:last-child) { - margin-right: 10px; + margin-right: 15px; + } + } + } + + &.mobile { + height: #{$height - 10}px; + padding: 0 30px; + + .left { + .logo { + svg { + width: 150px; + height: 35px; + } } } } diff --git a/src/components/Containers/Header/Header.strings.js b/src/components/Containers/Header/Header.strings.js index a1716c97..65ec0f51 100644 --- a/src/components/Containers/Header/Header.strings.js +++ b/src/components/Containers/Header/Header.strings.js @@ -4,3 +4,7 @@ export const CHAIN_TXT = chainName => utils.string.capitalize( utils.object.evaluate(utils.getTranslation('containers.header.chain_txt'), {chainName}) ); + +export const TAB_DISCORD_TXT = utils.getTranslation('containers.header.tab_discord_txt'); + +export const TAB_FAQ_TXT = utils.getTranslation('containers.header.tab_faq'); diff --git a/src/components/Containers/Main/Main.js b/src/components/Containers/Main/Main.js index 12993bf6..453e2751 100644 --- a/src/components/Containers/Main/Main.js +++ b/src/components/Containers/Main/Main.js @@ -1,6 +1,7 @@ import React, {useEffect, useState} from 'react'; import {useVars, useWindowSize} from '../../../hooks'; +import {EventManagerProvider} from '../../../providers/EventManagerProvider'; import {TokensProvider} from '../../../providers/TokensProvider'; import {useL1Wallet, useL2Wallet} from '../../../providers/WalletsProvider'; import {Bridge, Login} from '../../Features'; @@ -21,7 +22,9 @@ export const Main = () => { <main className={styles.main} style={{height}}> {isL1Connected && isL2Connected ? ( <TokensProvider> - <Bridge /> + <EventManagerProvider> + <Bridge /> + </EventManagerProvider> </TokensProvider> ) : ( <Login /> diff --git a/src/components/Features/Account/Account.js b/src/components/Features/Account/Account.js index b28d998a..1090e8e6 100644 --- a/src/components/Features/Account/Account.js +++ b/src/components/Features/Account/Account.js @@ -1,7 +1,9 @@ import PropTypes from 'prop-types'; import React from 'react'; +import {track, TrackEvent} from '../../../analytics'; import constants from '../../../config/constants'; +import envs from '../../../config/envs'; import {useCompleteTransferToL1} from '../../../hooks'; import {useMenu} from '../../../providers/MenuProvider'; import {useTransfer} from '../../../providers/TransferProvider'; @@ -18,16 +20,17 @@ import { } from '../../UI'; import {LinkButton} from '../../UI/LinkButton/LinkButton'; import {TransferLog} from '../TransferLog/TransferLog'; -import styles from './Account.module.scss'; import {TITLE_TXT} from './Account.strings'; -const {LINKS} = constants; +const {etherscanAccountUrl, voyagerAccountUrl} = envs; + +const {ETHERSCAN, VOYAGER} = constants; export const Account = ({transferId}) => { const {showTransferMenu} = useMenu(); - const {account, chainId, resetWallet} = useWallets(); - const transfers = useAccountTransfersLog(account); + const {account, resetWallet} = useWallets(); const {isL1, isL2, fromNetwork} = useTransfer(); + const transfers = useAccountTransfersLog(account); const completeTransferToL1 = useCompleteTransferToL1(); const renderTransfers = () => { @@ -36,28 +39,58 @@ export const Account = ({transferId}) => { <TransferLog key={index} transfer={transfer} - onCompleteTransferClick={() => completeTransferToL1(transfer)} + onCompleteTransferClick={() => onCompleteTransferClick(transfer)} + onTxClick={onTxClick} /> )) : null; }; + const onTxClick = () => { + track(TrackEvent.ACCOUNT.TX_LINK_CLICK); + }; + + const onCompleteTransferClick = transfer => { + track(TrackEvent.ACCOUNT.COMPLETE_TRANSFER_CLICK); + completeTransferToL1(transfer); + }; + + const onAccountLinkClick = () => { + track(TrackEvent.ACCOUNT.ACCOUNT_LINK_CLICK); + }; + + const onShowTransfers = () => { + track(TrackEvent.ACCOUNT.VIEW_TRANSFERS_LOG); + }; + + const onAccountAddressClick = () => { + track(TrackEvent.ACCOUNT.ADDRESS_COPIED); + }; + return ( <Menu> - <div className={styles.account}> + <div> <BackButton onClick={() => showTransferMenu()} /> <MenuTitle text={TITLE_TXT(fromNetwork.name)} /> - <AccountAddress address={account} /> + <AccountAddress address={account} onClick={onAccountAddressClick} /> {isL1 && ( <LinkButton - text={LINKS.ETHERSCAN.text} - url={LINKS.ETHERSCAN.accountUrl(chainId, account)} + text={ETHERSCAN} + url={etherscanAccountUrl(account)} + onClick={onAccountLinkClick} /> )} {isL2 && ( - <LinkButton text={LINKS.VOYAGER.text} url={LINKS.VOYAGER.accountUrl(chainId, account)} /> + <LinkButton + text={VOYAGER} + url={voyagerAccountUrl(account)} + onClick={onAccountLinkClick} + /> )} - <TransferLogContainer transferIndex={utils.object.findIndexById(transfers, transferId)}> + <TransferLogContainer + transferIndex={utils.object.findIndexById(transfers, transferId)} + onShowTransfers={onShowTransfers} + > {renderTransfers()} </TransferLogContainer> <LogoutButton isDisabled={isL2} onClick={resetWallet} /> diff --git a/src/components/Features/Account/Account.module.scss b/src/components/Features/Account/Account.module.scss deleted file mode 100644 index e35b8d2b..00000000 --- a/src/components/Features/Account/Account.module.scss +++ /dev/null @@ -1,2 +0,0 @@ -.account { -} diff --git a/src/components/Features/Bridge/Bridge.js b/src/components/Features/Bridge/Bridge.js index fe9ceb82..f2206f25 100644 --- a/src/components/Features/Bridge/Bridge.js +++ b/src/components/Features/Bridge/Bridge.js @@ -1,21 +1,56 @@ -import React from 'react'; +import React, {useEffect} from 'react'; -import {Account, SelectToken, ToastProvider, Transfer} from '..'; +import {Account, Faq, SelectToken, ToastProvider, Transfer} from '..'; +import {setUser, track, TrackEvent} from '../../../analytics'; +import envs from '../../../config/envs'; import {MenuType} from '../../../enums'; import {useMenu} from '../../../providers/MenuProvider'; +import {useOnboardingModal} from '../../../providers/ModalProvider'; +import {useL1Wallet, useL2Wallet} from '../../../providers/WalletsProvider'; +import utils from '../../../utils'; import styles from './Bridge.module.scss'; +const {localStorageOnboardingExpirationTimestampKey, onboardingModalTimeoutHrs} = envs; + export const Bridge = () => { const {menu, menuProps} = useMenu(); + const {account: l1account} = useL1Wallet(); + const {account: l2account} = useL2Wallet(); + const showOnboardingModal = useOnboardingModal(); + + useEffect(() => { + setUser({l1account, l2account}); + maybeShowOnboardingModal(); + }, []); + + useEffect(() => { + track(TrackEvent[`${menu}_MENU`]); + }, [menu]); + + const maybeShowOnboardingModal = () => { + const onboardingTimestamp = utils.storage.getItem(localStorageOnboardingExpirationTimestampKey); + const now = Date.now(); + const onboardingModalTimeoutMs = utils.date.getMsFromHrs(onboardingModalTimeoutHrs); + if (!onboardingTimestamp || onboardingTimestamp < now) { + showOnboardingModal(); + utils.storage.setItem( + localStorageOnboardingExpirationTimestampKey, + now + onboardingModalTimeoutMs + ); + } + }; const renderMenu = () => { switch (menu) { - case MenuType.TRANSFER: - return <Transfer />; case MenuType.SELECT_TOKEN: return <SelectToken />; case MenuType.ACCOUNT: return <Account {...menuProps[MenuType.ACCOUNT]} />; + case MenuType.FAQ: + return <Faq />; + case MenuType.TRANSFER: + default: + return <Transfer />; } }; diff --git a/src/components/Features/Faq/Faq.js b/src/components/Features/Faq/Faq.js new file mode 100644 index 00000000..b264c56e --- /dev/null +++ b/src/components/Features/Faq/Faq.js @@ -0,0 +1,30 @@ +import React from 'react'; + +import {faqs} from '../../../config/faqs'; +import {useMenu} from '../../../providers/MenuProvider'; +import {BackButton, Menu, MenuTitle} from '../../UI'; +import styles from './Faq.module.scss'; +import {TITLE_TXT} from './Faq.strings'; + +export const Faq = () => { + const {showTransferMenu} = useMenu(); + + return ( + <Menu> + <div className={styles.faq}> + <BackButton onClick={showTransferMenu} /> + <MenuTitle text={TITLE_TXT} /> + <div className={styles.container}> + <ol> + {faqs.map((faq, i) => ( + <li key={`faq-${i}`} className={styles.question}> + <h4 dangerouslySetInnerHTML={{__html: faq.question}} /> + <div className={styles.answer} dangerouslySetInnerHTML={{__html: faq.answer}} /> + </li> + ))} + </ol> + </div> + </div> + </Menu> + ); +}; diff --git a/src/components/Features/Faq/Faq.module.scss b/src/components/Features/Faq/Faq.module.scss new file mode 100644 index 00000000..197f3947 --- /dev/null +++ b/src/components/Features/Faq/Faq.module.scss @@ -0,0 +1,84 @@ +@import '../../../index'; + +$color: $--color-white; +$link-color: $--color-gamma; +$link-color-hover: $--color-gamma-1; +$visited-link-color: $--color-alpha-6; +$visited-link-color-hover: $--color-alpha-6-hover; +$border-color: $--color-alpha-3; +$background-answer: $--color-alpha-3; + +.faq { + color: $color; + overflow-y: auto; + text-align: left; + + a { + color: $link-color; + + &:hover { + color: $link-color-hover; + } + + &:visited { + color: $visited-link-color; + + &:hover { + color: $visited-link-color-hover; + } + } + } + + ol { + line-height: 1.6; + padding-inline-start: 20px; + margin-block-start: 0; + padding-right: 16px; + + .question { + position: relative; + margin-bottom: 40px; + + &::marker { + font-size: 16px; + font-weight: 600; + } + + h4 { + letter-spacing: 0.7px; + } + + & * { + position: relative; + z-index: 1; + } + + .answer { + &::before { + content: ''; + position: absolute; + display: block; + z-index: 0; + top: -10px; + left: -20px; + width: 462px; + height: calc(100% + 20px); + background-color: $background-answer; + border-radius: 7px; + } + } + } + } + + .container { + color: $color; + padding: 15px; + margin: 10px 0; + overflow-y: auto; + max-height: 450px; + + > ol { + margin-top: -20px; + } + } +} diff --git a/src/components/Features/Faq/Faq.strings.js b/src/components/Features/Faq/Faq.strings.js new file mode 100644 index 00000000..c0b501df --- /dev/null +++ b/src/components/Features/Faq/Faq.strings.js @@ -0,0 +1,3 @@ +import utils from '../../../utils'; + +export const TITLE_TXT = utils.getTranslation('menus.faq.title_txt'); diff --git a/src/components/Features/Login/Login.js b/src/components/Features/Login/Login.js index 672d727d..04c3adbe 100644 --- a/src/components/Features/Login/Login.js +++ b/src/components/Features/Login/Login.js @@ -1,6 +1,7 @@ import React, {useEffect, useRef, useState} from 'react'; -import {NetworkType, toChainName, WalletStatus, WalletType} from '../../../enums'; +import {track, TrackEvent} from '../../../analytics'; +import {ChainInfo, NetworkType, WalletStatus, WalletType} from '../../../enums'; import {useConfig, useWalletHandlerProvider} from '../../../hooks'; import {useHideModal, useProgressModal} from '../../../providers/ModalProvider'; import {useL1Wallet, useL2Wallet, useWallets} from '../../../providers/WalletsProvider'; @@ -29,9 +30,14 @@ export const Login = () => { const {connectWallet: connectL1Wallet, isConnected} = useL1Wallet(); const {connectWallet: connectL2Wallet} = useL2Wallet(); + useEffect(() => { + track(TrackEvent.LOGIN_SCREEN); + }, []); + useEffect(() => { let timeoutId; if (!utils.browser.isChrome()) { + track(TrackEvent.LOGIN.LOGIN_ERROR, {message: UNSUPPORTED_BROWSER_TXT}); setErrorMsg(UNSUPPORTED_BROWSER_TXT); return; } @@ -66,6 +72,8 @@ export const Login = () => { case WalletStatus.DISCONNECTED: maybeHideModal(); break; + default: + break; } return () => { maybeHideModal(); @@ -73,15 +81,18 @@ export const Login = () => { }, [status]); const onWalletConnect = walletHandler => { + const {config} = walletHandler; + const {name} = config; + track(TrackEvent.LOGIN.WALLET_CLICK, {name}); if (!walletHandler.isInstalled()) { return walletHandler.install(); } - const {config} = walletHandler; - setSelectedWalletName(config.name); + setSelectedWalletName(name); return walletType === WalletType.L1 ? connectL1Wallet(config) : connectL2Wallet(config); }; const onDownloadClick = () => { + track(TrackEvent.LOGIN.DOWNLOAD_CLICK, {walletType}); const handlers = getWalletHandlers(walletType); if (handlers.length > 0) { return handlers[0].install(); @@ -90,15 +101,16 @@ export const Login = () => { const handleError = error => { if (error.name === 'ChainUnsupportedError') { - const msg = error.message.replace(/\d+/g, match => { + const message = error.message.replace(/\d+/g, match => { let msg = match; - const chainName = utils.string.capitalize(toChainName(Number(match))); + const chainName = utils.string.capitalize(ChainInfo.L1[Number(match)]?.NAME); if (chainName) { - msg += ` (${utils.string.capitalize(toChainName(Number(match)))})`; + msg += ` (${utils.string.capitalize(ChainInfo.L1[Number(match)].NAME)})`; } return msg; }); - setErrorMsg(msg); + track(TrackEvent.LOGIN.LOGIN_ERROR, {message}); + setErrorMsg(message); } }; diff --git a/src/components/Features/SelectToken/SelectToken.js b/src/components/Features/SelectToken/SelectToken.js index 97daffb0..05351d75 100644 --- a/src/components/Features/SelectToken/SelectToken.js +++ b/src/components/Features/SelectToken/SelectToken.js @@ -1,17 +1,18 @@ import React, {useEffect, useState} from 'react'; +import {track, TrackEvent} from '../../../analytics'; import L1Logo from '../../../assets/svg/tokens/eth.svg'; import L2Logo from '../../../assets/svg/tokens/starknet.svg'; import {useColors} from '../../../hooks'; import {useMenu} from '../../../providers/MenuProvider'; import {useTokens} from '../../../providers/TokensProvider'; import {useTransfer} from '../../../providers/TransferProvider'; -import {BackButton, Menu, MenuTitle, SearchToken, SelectTokenList} from '../../UI'; +import {BackButton, Menu, MenuTitle, RefreshIcon, SearchToken, SelectTokenList} from '../../UI'; import styles from './SelectToken.module.scss'; import {TITLE_TXT} from './SelectToken.strings'; export const SelectToken = () => { - const {tokens} = useTokens(); + const {tokens, updateTokenBalance} = useTokens(); const {colorBeta} = useColors(); const {showTransferMenu} = useMenu(); const {isL1, fromNetwork} = useTransfer(); @@ -24,6 +25,7 @@ export const SelectToken = () => { const onTokenSelect = tokenData => { const {symbol} = tokenData; + track(TrackEvent.SELECT_TOKEN.TOKEN_SELECTED, {symbol}); selectToken(symbol); showTransferMenu(); }; @@ -33,7 +35,10 @@ export const SelectToken = () => { <div className={styles.selectToken}> <BackButton onClick={() => showTransferMenu()} /> <MenuTitle text={TITLE_TXT} /> - <MenuTitle color={colorBeta} text={fromNetwork.name} /> + <div className={styles.name}> + <MenuTitle color={colorBeta} text={fromNetwork.name} /> + <RefreshIcon onClick={updateTokenBalance} /> + </div> <SearchToken tokens={tokens} onSearchResults={searchResult => setSearchTokens(searchResult)} diff --git a/src/components/Features/SelectToken/SelectToken.module.scss b/src/components/Features/SelectToken/SelectToken.module.scss index c93b7b75..b36049fe 100644 --- a/src/components/Features/SelectToken/SelectToken.module.scss +++ b/src/components/Features/SelectToken/SelectToken.module.scss @@ -26,4 +26,9 @@ $network-color: $--color-beta; .loadingContainer { margin: 50px auto; } + + .name { + display: flex; + justify-content: space-between; + } } diff --git a/src/components/Features/ToastProvider/ToastProvider.js b/src/components/Features/ToastProvider/ToastProvider.js index 2d0535c0..e28b388d 100644 --- a/src/components/Features/ToastProvider/ToastProvider.js +++ b/src/components/Features/ToastProvider/ToastProvider.js @@ -1,9 +1,19 @@ import PropTypes from 'prop-types'; -import React, {useEffect, useRef} from 'react'; +import React, {useEffect} from 'react'; import {toast, Toaster} from 'react-hot-toast'; +import useBreakpoint from 'use-breakpoint'; import useDeepCompareEffect from 'use-deep-compare-effect'; -import {ActionType, isConsumed, isOnChain, isRejected, NetworkType} from '../../../enums'; +import { + ActionType, + Breakpoint, + isConsumed, + isMobile, + isOnChain, + isRejected, + NetworkType, + ToastType +} from '../../../enums'; import {useCompleteTransferToL1, usePrevious} from '../../../hooks'; import {useMenu} from '../../../providers/MenuProvider'; import {useIsL1, useIsL2} from '../../../providers/TransferProvider'; @@ -13,19 +23,21 @@ import {CompleteTransferToL1Toast, ToastBody, TransferToast} from '../../UI'; import styles from './ToastProvider.module.scss'; import {ALPHA_DISCLAIMER_MSG} from './ToastProvider.strings'; +const toastsMap = {}; +const toastsDismissed = {}; + export const ToastProvider = () => { const {transfers} = useTransfersLog(); const prevTransfers = usePrevious(transfers); - const toastsMap = useRef({}); - const toastsDismissed = useRef({}); const completeTransferToL1 = useCompleteTransferToL1(); const {showAccountMenu} = useMenu(); const [, swapToL1] = useIsL1(); const [, swapToL2] = useIsL2(); + const {breakpoint} = useBreakpoint(Breakpoint); useEffect(() => { showAlphaDisclaimerToast(); - }, []); + }, [breakpoint]); useDeepCompareEffect(() => { transfers.forEach(transfer => { @@ -48,77 +60,89 @@ export const ToastProvider = () => { } }; - /* eslint-disable-next-line */ - const showPendingTransferToast = transfer => { - let toastId = getToastId(transfer); - if (!toastId) { - toastId = toast.loading(renderTransferToast(transfer, true)); - toastsMap.current[transfer.id] = toastId; - } - }; - const showAlphaDisclaimerToast = () => { toast.success(ALPHA_DISCLAIMER_MSG, { id: 'alphaDisclaimer', - position: 'bottom-left', + position: isMobile(breakpoint) ? 'bottom-center' : 'bottom-left', icon: '❗' }); }; const showConsumedTransferToast = transfer => { - const toastId = getToastId(transfer); - toastsMap.current[transfer.id] = toast.success(renderTransferToast(transfer), { - id: toastId - }); + const {id} = transfer; + if (toastShouldRender(id, ToastType.CONSUMED_TRANSFER)) { + setToast(id, ToastType.CONSUMED_TRANSFER); + toast.success(renderTransferToast(transfer, ToastType.CONSUMED_TRANSFER), { + id + }); + } }; const showRejectedTransferToast = transfer => { - const toastId = getToastId(transfer); - toastsMap.current[transfer.id] = toast.error(renderTransferToast(transfer), { - id: toastId - }); + const {id} = transfer; + if (toastShouldRender(id, ToastType.REJECTED_TRANSFER)) { + setToast(id, ToastType.REJECTED_TRANSFER); + toast.error(renderTransferToast(transfer, ToastType.REJECTED_TRANSFER), { + id + }); + } }; const showCompleteTransferToL1Toast = transfer => { - const toastId = getToastId(transfer); - if (!toastId && !isToastDismissed(toastId)) { - toastsMap.current[transfer.id] = toast.custom( - t => renderCompleteTransferToL1Toast(t, transfer), - { - id: toastId - } - ); + const {id} = transfer; + if (toastShouldRender(id, ToastType.COMPLETE_TRANSFER_TO_L1)) { + setToast(id, ToastType.COMPLETE_TRANSFER_TO_L1); + toast.custom(t => renderCompleteTransferToL1Toast(t, transfer), { + id + }); } }; - const renderTransferToast = (transfer, isLoading) => ( + const renderTransferToast = (transfer, type) => ( <TransferToast - isLoading={isLoading} + isLoading={false} transfer={transfer} - onClose={() => dismissToast(transfer)} + onClose={() => dismissToast(transfer.id, type)} onTransferLogLinkClick={() => goToTransferLog(transfer)} /> ); - const renderCompleteTransferToL1Toast = (t, transfer) => ( - <CompleteTransferToL1Toast - t={t} - transfer={transfer} - onClose={() => dismissToast(transfer)} - onCompleteTransfer={() => onCompleteTransferClick(transfer)} - onDismiss={() => dismissToast(transfer)} - onTransferLogLinkClick={() => goToTransferLog(transfer)} - /> - ); + const renderCompleteTransferToL1Toast = (t, transfer) => { + const type = ToastType.COMPLETE_TRANSFER_TO_L1; + const {id} = transfer; + return ( + <CompleteTransferToL1Toast + t={t} + transfer={transfer} + onClose={() => dismissToast(id, type)} + onCompleteTransfer={() => onCompleteTransferClick(transfer)} + onDismiss={() => dismissToast(id, type)} + onTransferLogLinkClick={() => goToTransferLog(transfer)} + /> + ); + }; + + const toastShouldRender = (id, type) => { + return !isToastRendered(id, type) && !isToastDismissed(id, type); + }; - const getToastId = transfer => toastsMap.current[transfer.id]; + const isToastRendered = (id, type) => { + return toastsMap[type]?.[id]; + }; - const isToastDismissed = id => !!toastsDismissed[id]; + const isToastDismissed = (id, type) => { + return toastsDismissed[type]?.[id]; + }; + + const setToast = (id, type) => { + toastsMap[type] = toastsMap[type] || {}; + toastsMap[type][id] = true; + }; - const dismissToast = transfer => { - const toastId = getToastId(transfer); - toast.dismiss(toastId); - toastsDismissed.current[toastId] = true; + const dismissToast = (id, type) => { + toastsDismissed[type] = toastsDismissed[type] || {}; + toastsDismissed[type][id] = true; + toast.dismiss(id); }; const onCompleteTransferClick = async transfer => { diff --git a/src/components/Features/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer.js index 7187ccf7..6857108e 100644 --- a/src/components/Features/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer.js @@ -1,7 +1,8 @@ import React, {useEffect, useState} from 'react'; +import {track, TrackEvent} from '../../../analytics'; import {ActionType, NetworkType} from '../../../enums'; -import {useMaxAmount, useTransferToL1, useTransferToL2} from '../../../hooks'; +import {useMaxDeposit, useTransferToL1, useTransferToL2} from '../../../hooks'; import {useMenu} from '../../../providers/MenuProvider'; import {useL1Token, useL2Token, useTokens} from '../../../providers/TokensProvider'; import {useAmount, useIsL1, useIsL2, useTransfer} from '../../../providers/TransferProvider'; @@ -16,7 +17,7 @@ import { } from '../../UI'; import {LoadingSize} from '../../UI/Loading/Loading.enums'; import styles from './Transfer.module.scss'; -import {INSUFFICIENT_BALANCE_ERROR_MSG, MAX_AMOUNT_ERROR_MSG} from './Transfer.strings'; +import {INSUFFICIENT_BALANCE_ERROR_MSG, MAX_DEPOSIT_ERROR_MSG} from './Transfer.strings'; export const Transfer = () => { const [isL1, swapToL1] = useIsL1(); @@ -26,13 +27,13 @@ export const Transfer = () => { const [errorMsg, setErrorMsg] = useState(''); const [isButtonDisabled, setIsButtonDisabled] = useState(true); const {showSelectTokenMenu} = useMenu(); - const {selectToken, selectedToken, action, symbol} = useTransfer(); - const {tokens} = useTokens(); + const {selectToken, selectedToken, action} = useTransfer(); + const {tokens, updateTokenBalance} = useTokens(); const transferToL2 = useTransferToL2(); const transferToL1 = useTransferToL1(); const getL1Token = useL1Token(); const getL2Token = useL2Token(); - const maxAmount = useMaxAmount(); + const maxDeposit = useMaxDeposit(); useEffect(() => { if (!selectedToken) { @@ -43,27 +44,28 @@ export const Transfer = () => { useEffect(() => { if (selectedToken) { setHasInputError(false); - if (selectedToken.isLoading || Math.ceil(amount) === 0 || (isL1 && !maxAmount)) { + if (selectedToken.isLoading || Math.ceil(amount) === 0 || (isL1 && !maxDeposit)) { setIsButtonDisabled(true); } else { if (amount > selectedToken.balance) { setHasInputError(true); setErrorMsg(INSUFFICIENT_BALANCE_ERROR_MSG); setIsButtonDisabled(true); - } else if (isL1 && amount > maxAmount) { + } else if (isL1 && amount > maxDeposit) { setHasInputError(true); - setErrorMsg(MAX_AMOUNT_ERROR_MSG(maxAmount, symbol)); + setErrorMsg(MAX_DEPOSIT_ERROR_MSG); setIsButtonDisabled(true); } else { setIsButtonDisabled(false); } } } - }, [amount, selectedToken, maxAmount, isL1]); + }, [amount, selectedToken, maxDeposit, isL1]); const onMaxClick = () => { try { - setAmount(String(Math.min(selectedToken.balance, Number(maxAmount)))); + track(TrackEvent.TRANSFER.MAX_CLICK); + setAmount(String(Math.min(selectedToken.balance, Number(maxDeposit)))); } catch (ex) { setAmount(selectedToken.balance); } @@ -74,11 +76,22 @@ export const Transfer = () => { }; const onSwapClick = () => { + track(TrackEvent.TRANSFER.SWAP_NETWORK); isL2 ? swapToL1() : swapToL2(); }; const onTransferClick = async () => (isL1 ? transferToL2(amount) : transferToL1(amount)); + const onNetworkTabClick = tab => { + if (action !== tab) { + onSwapClick(); + } + }; + + const onRefreshTokenBalanceClick = () => { + updateTokenBalance(selectedToken.symbol); + }; + const renderTabs = () => { return Object.values(ActionType).map((tab, index) => { return ( @@ -86,7 +99,7 @@ export const Transfer = () => { key={index} isActive={action === tab} text={tab === ActionType.TRANSFER_TO_L2 ? NetworkType.L1.name : NetworkType.L2.name} - onClick={() => action !== tab && onSwapClick()} + onClick={() => onNetworkTabClick(tab)} /> ); }); @@ -95,7 +108,12 @@ export const Transfer = () => { const renderL1Network = () => { const tokenData = getL1Token(selectedToken.symbol); return ( - <NetworkMenu isTarget={!isL1} networkData={NetworkType.L1} tokenData={tokenData}> + <NetworkMenu + isTarget={!isL1} + networkData={NetworkType.L1} + tokenData={tokenData} + onRefreshClick={onRefreshTokenBalanceClick} + > {isL1 && renderTransferInput()} </NetworkMenu> ); @@ -104,7 +122,12 @@ export const Transfer = () => { const renderL2Network = () => { const tokenData = getL2Token(selectedToken.symbol); return ( - <NetworkMenu isTarget={!isL2} networkData={NetworkType.L2} tokenData={tokenData}> + <NetworkMenu + isTarget={!isL2} + networkData={NetworkType.L2} + tokenData={tokenData} + onRefreshClick={onRefreshTokenBalanceClick} + > {isL2 && renderTransferInput()} </NetworkMenu> ); diff --git a/src/components/Features/Transfer/Transfer.strings.js b/src/components/Features/Transfer/Transfer.strings.js index 144245b1..2fad1fc4 100644 --- a/src/components/Features/Transfer/Transfer.strings.js +++ b/src/components/Features/Transfer/Transfer.strings.js @@ -4,8 +4,4 @@ export const INSUFFICIENT_BALANCE_ERROR_MSG = utils.getTranslation( 'menus.transfer.insufficient_balance_error_msg' ); -export const MAX_AMOUNT_ERROR_MSG = (maxAmount, symbol) => - utils.object.evaluate(utils.getTranslation('menus.transfer.max_amount_error_msg'), { - maxAmount, - symbol - }); +export const MAX_DEPOSIT_ERROR_MSG = utils.getTranslation('menus.transfer.max_deposit_error_msg'); diff --git a/src/components/Features/TransferLog/TransferLog.js b/src/components/Features/TransferLog/TransferLog.js index d276c55d..2777962a 100644 --- a/src/components/Features/TransferLog/TransferLog.js +++ b/src/components/Features/TransferLog/TransferLog.js @@ -1,17 +1,17 @@ import PropTypes from 'prop-types'; import React, {useEffect, useState} from 'react'; -import constants from '../../../config/constants'; +import envs from '../../../config/envs'; import { isOnChain, - isPending, isRejected, NetworkType, - TransactionStatusFriendlyMessage + TransactionStatus, + TransactionStatusFriendlyMessage, + TransactionStatusStep } from '../../../enums'; import {useColors} from '../../../hooks'; import {useTransfer} from '../../../providers/TransferProvider'; -import {useWallets} from '../../../providers/WalletsProvider'; import utils from '../../../utils'; import {Button, CryptoLogo} from '../../UI'; import {CryptoLogoSize} from '../../UI/CryptoLogo/CryptoLogo.enums'; @@ -19,13 +19,12 @@ import {LinkButton} from '../../UI/LinkButton/LinkButton'; import styles from './TransferLog.module.scss'; import {COMPLETE_TRANSFER_BTN_TXT} from './TransferLog.strings'; -const {LINKS} = constants; +const {voyagerTxUrl, etherscanTxUrl} = envs; -export const TransferLog = ({transfer, onCompleteTransferClick}) => { +export const TransferLog = ({transfer, onCompleteTransferClick, onTxClick}) => { const {symbol, timestamp, name, amount, status, l1hash, l2hash} = transfer; const [sign, setSign] = useState(''); const {action, isL1} = useTransfer(); - const {chainId} = useWallets(); useEffect(() => { setSign(transfer.type === action ? '-' : '+'); @@ -46,7 +45,8 @@ export const TransferLog = ({transfer, onCompleteTransferClick}) => { <LinkButton isDisabled={!l1hash} text={`${NetworkType.L1.name} Tx`} - url={LINKS.ETHERSCAN.txUrl(chainId, l1hash)} + url={etherscanTxUrl(l1hash)} + onClick={onTxClick} /> ); }; @@ -55,9 +55,10 @@ export const TransferLog = ({transfer, onCompleteTransferClick}) => { return ( <> <LinkButton - isDisabled={isPending(status)} + isDisabled={TransactionStatusStep[status] > TransactionStatus.NOT_RECEIVED} text={`${NetworkType.L2.name} Tx`} - url={LINKS.VOYAGER.txUrl(chainId, l2hash)} + url={voyagerTxUrl(l2hash)} + onClick={onTxClick} /> </> ); @@ -113,5 +114,6 @@ CompleteTransferButton.propTypes = { TransferLog.propTypes = { transfer: PropTypes.object, - onCompleteTransferClick: PropTypes.func + onCompleteTransferClick: PropTypes.func, + onTxClick: PropTypes.func }; diff --git a/src/components/Features/TransferLog/TransferLog.module.scss b/src/components/Features/TransferLog/TransferLog.module.scss index c00bb6df..b2fb48bb 100644 --- a/src/components/Features/TransferLog/TransferLog.module.scss +++ b/src/components/Features/TransferLog/TransferLog.module.scss @@ -59,7 +59,3 @@ hr { border: 1px solid $hr-color; } } - -.markered-transfer { - background-color: $marker-color; -} diff --git a/src/components/Features/index.js b/src/components/Features/index.js index 74ba3d09..1eaa1378 100644 --- a/src/components/Features/index.js +++ b/src/components/Features/index.js @@ -1,6 +1,7 @@ export * from './Account/Account'; export * from './Bridge/Bridge'; export * from './Login/Login'; +export * from './Faq/Faq'; export * from './SelectToken/SelectToken'; export * from './Transfer/Transfer'; export * from './TransferLog/TransferLog'; diff --git a/src/components/UI/AccountAddress/AccountAddress.js b/src/components/UI/AccountAddress/AccountAddress.js index fd7a31de..a5c51174 100644 --- a/src/components/UI/AccountAddress/AccountAddress.js +++ b/src/components/UI/AccountAddress/AccountAddress.js @@ -8,7 +8,7 @@ import {COPIED_ANIMATION_TIMEOUT_INTERVAL} from './AccountAddress.constants'; import styles from './AccountAddress.module.scss'; import {COPIED_MSG_TXT} from './AccountAddress.strings'; -export const AccountAddress = ({address}) => { +export const AccountAddress = ({address, onClick}) => { const [isAnimate, startAnimation] = useAnimation(COPIED_ANIMATION_TIMEOUT_INTERVAL); const ref = useRef(); @@ -16,6 +16,7 @@ export const AccountAddress = ({address}) => { const cb = navigator.clipboard; await cb.writeText(address); startAnimation(); + onClick(); }; return ( @@ -32,5 +33,6 @@ export const AccountAddress = ({address}) => { }; AccountAddress.propTypes = { - address: PropTypes.string + address: PropTypes.string, + onClick: PropTypes.func }; diff --git a/src/components/UI/Button/Button.js b/src/components/UI/Button/Button.js index 5ad3479a..371bf206 100644 --- a/src/components/UI/Button/Button.js +++ b/src/components/UI/Button/Button.js @@ -21,6 +21,7 @@ export const Button = ({ style, isDisabled, isLoading, + className, onClick }) => { const [isHover, setIsHover] = useState(false); @@ -38,7 +39,8 @@ export const Button = ({ className={utils.object.toClasses( styles.button, isDisabled && styles.isDisabled, - isLoading && styles.isLoading + isLoading && styles.isLoading, + className )} style={styleObj} onClick={onClick} @@ -68,5 +70,6 @@ Button.propTypes = { isDisabled: PropTypes.bool, isLoading: PropTypes.bool, onClick: PropTypes.func, + className: PropTypes.string, children: PropTypes.oneOfType([PropTypes.array, PropTypes.object]) }; diff --git a/src/components/UI/Button/Button.module.scss b/src/components/UI/Button/Button.module.scss index cf299dfa..5ad23ed4 100644 --- a/src/components/UI/Button/Button.module.scss +++ b/src/components/UI/Button/Button.module.scss @@ -1,11 +1,14 @@ +@import '../../../index'; + .button { + font-family: $--primary-font; display: flex; justify-content: space-around; align-items: center; text-align: center; text-transform: capitalize; - font-weight: bold; - font-size: 14px; + font-weight: 500; + font-size: 15px; line-height: 24px; border: 1px solid; box-sizing: border-box; diff --git a/src/components/UI/CryptoLogo/CryptoLogo.js b/src/components/UI/CryptoLogo/CryptoLogo.js index be72544c..b9bc6d0b 100644 --- a/src/components/UI/CryptoLogo/CryptoLogo.js +++ b/src/components/UI/CryptoLogo/CryptoLogo.js @@ -6,8 +6,8 @@ import {DynamicIcon} from '../DynamicIcon/DynamicIcon'; import {CIRCLE_LOGO_SIZE_DIFF} from './CryptoLogo.constants'; import styles from './CryptoLogo.module.scss'; -export const CryptoLogo = ({symbol, color, size}) => - symbol ? ( +export const CryptoLogo = ({symbol, color, size}) => { + return symbol ? ( <Circle color={color} size={size}> <div className={styles.cryptoLogo}> <DynamicIcon @@ -17,6 +17,7 @@ export const CryptoLogo = ({symbol, color, size}) => </div> </Circle> ) : null; +}; CryptoLogo.propTypes = { symbol: PropTypes.string, diff --git a/src/components/UI/Input/Input.Module.scss b/src/components/UI/Input/Input.Module.scss index a3a8ac1b..e58a79ee 100644 --- a/src/components/UI/Input/Input.Module.scss +++ b/src/components/UI/Input/Input.Module.scss @@ -18,7 +18,6 @@ input { display: inline-block; max-width: 100%; text-align: left; - outline: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; @@ -31,16 +30,16 @@ input { } } -input::-webkit-input-placeholder { +input::input-placeholder { opacity: 0.5; } input::-webkit-outer-spin-button, input::-webkit-inner-spin-button { - -webkit-appearance: none; + appearance: none; margin: 0; } input[type='number'] { - -moz-appearance: textfield; + appearance: textfield; } diff --git a/src/components/UI/KeyFrames/KeyFrames.js b/src/components/UI/KeyFrames/KeyFrames.js index ee419004..6ed83733 100644 --- a/src/components/UI/KeyFrames/KeyFrames.js +++ b/src/components/UI/KeyFrames/KeyFrames.js @@ -2,14 +2,15 @@ import PropTypes from 'prop-types'; import React from 'react'; export const Keyframes = props => { - const toCss = cssObject => - typeof cssObject === 'string' + const toCss = cssObject => { + return typeof cssObject === 'string' ? cssObject : Object.keys(cssObject).reduce((accumulator, key) => { const cssKey = key.replace(/[A-Z]/g, v => `-${v.toLowerCase()}`); const cssValue = cssObject[key].toString().replace("'", ''); return `${accumulator}${cssKey}:${cssValue};`; }, ''); + }; return ( <style> diff --git a/src/components/UI/LinkButton/LinkButton.js b/src/components/UI/LinkButton/LinkButton.js index cc7d4d07..fc6766cb 100644 --- a/src/components/UI/LinkButton/LinkButton.js +++ b/src/components/UI/LinkButton/LinkButton.js @@ -5,15 +5,16 @@ import {ReactComponent as RedirectIcon} from '../../../assets/svg/icons/redirect import utils from '../../../utils'; import styles from './LinkButton.module.scss'; -export const LinkButton = ({text, url, isDisabled}) => { - const onClick = () => { +export const LinkButton = ({text, url, isDisabled, onClick}) => { + const onClickInternal = () => { utils.browser.openInNewTab(url); + onClick(); }; return ( <div className={utils.object.toClasses(styles.linkButton, isDisabled && styles.isDisabled)} - onClick={onClick} + onClick={onClickInternal} > {text} <RedirectIcon /> @@ -24,5 +25,6 @@ export const LinkButton = ({text, url, isDisabled}) => { LinkButton.propTypes = { text: PropTypes.string, url: PropTypes.string, - isDisabled: PropTypes.bool + isDisabled: PropTypes.bool, + onClick: PropTypes.func }; diff --git a/src/components/UI/Loading/Loading.enums.js b/src/components/UI/Loading/Loading.enums.js index e71f5dfb..f8170d15 100644 --- a/src/components/UI/Loading/Loading.enums.js +++ b/src/components/UI/Loading/Loading.enums.js @@ -1,5 +1,5 @@ export const LoadingSize = { - SMALL: 30, + SMALL: 20, MEDIUM: 50, LARGE: 70, XL: 110 diff --git a/src/components/UI/Modal/Modal/Modal.constants.js b/src/components/UI/Modal/Modal/Modal.constants.js index aea6f970..5644456c 100644 --- a/src/components/UI/Modal/Modal/Modal.constants.js +++ b/src/components/UI/Modal/Modal/Modal.constants.js @@ -1,10 +1,10 @@ export const ModalSize = { SMALL: { - width: 400, + width: 450, height: 200 }, MEDIUM: { - width: 500, + width: 550, height: 300 }, LARGE: { diff --git a/src/components/UI/Modal/Modal/Modal.js b/src/components/UI/Modal/Modal/Modal.js index cdc7a6ed..fd411623 100644 --- a/src/components/UI/Modal/Modal/Modal.js +++ b/src/components/UI/Modal/Modal/Modal.js @@ -6,7 +6,7 @@ import utils from '../../../../utils'; import {ModalSize, ModalType} from './Modal.constants'; import styles from './Modal.module.scss'; -export const Modal = ({show, type = ModalType.INFO, size = ModalSize.SMALL, children}) => { +export const Modal = ({show, type = ModalType.INFO, size = ModalSize.MEDIUM, children}) => { const {width} = size; return show ? createPortal( diff --git a/src/components/UI/Modal/Modal/Modal.module.scss b/src/components/UI/Modal/Modal/Modal.module.scss index a136e7c0..9e222d5d 100644 --- a/src/components/UI/Modal/Modal/Modal.module.scss +++ b/src/components/UI/Modal/Modal/Modal.module.scss @@ -21,7 +21,7 @@ $error-color: $--color-error; background: $background-color; box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1); border-radius: 10px; - padding: 20px 30px; + padding: 20px 40px; overflow: auto; &.error { diff --git a/src/components/UI/Modal/ModalBody/ModalBody.module.scss b/src/components/UI/Modal/ModalBody/ModalBody.module.scss index a6b91abc..7476eb36 100644 --- a/src/components/UI/Modal/ModalBody/ModalBody.module.scss +++ b/src/components/UI/Modal/ModalBody/ModalBody.module.scss @@ -4,10 +4,10 @@ $color: $--color-omega; $error-color: $--color-error; .modalBody { - padding: 10px 0; - font-size: 14px; - line-height: 21px; - letter-spacing: 0.01em; + padding: 25px 0; + font-size: 16px; + line-height: 22px; + letter-spacing: 0.03em; color: $color; white-space: break-spaces; overflow: hidden; diff --git a/src/components/UI/Modal/ModalFooter/ModalFooter.js b/src/components/UI/Modal/ModalFooter/ModalFooter.js index a4748ef2..ccb0bb37 100644 --- a/src/components/UI/Modal/ModalFooter/ModalFooter.js +++ b/src/components/UI/Modal/ModalFooter/ModalFooter.js @@ -1,5 +1,30 @@ +import PropTypes from 'prop-types'; import React from 'react'; +import {useColors} from '../../../../hooks'; +import {toClasses} from '../../../../utils/object'; +import {Button} from '../../Button/Button'; +import {ModalType} from '../Modal/Modal.constants'; import styles from './ModalFooter.module.scss'; -export const ModalFooter = () => <div className={styles.modalFooter} />; +export const ModalFooter = ({type, onClose}) => { + const {colorError, colorAlpha3, colorWhite} = useColors(); + const color = type === ModalType.ERROR ? colorError : colorAlpha3; + return ( + <div className={toClasses(styles.modalFooter, styles[type])}> + <Button + colorBackground={color} + colorBorder={color} + colorText={colorWhite} + height={40} + text="close" + onClick={onClose} + /> + </div> + ); +}; + +ModalFooter.propTypes = { + type: PropTypes.string, + onClose: PropTypes.func +}; diff --git a/src/components/UI/Modal/ModalFooter/ModalFooter.module.scss b/src/components/UI/Modal/ModalFooter/ModalFooter.module.scss index feeb88ab..1ef9b257 100644 --- a/src/components/UI/Modal/ModalFooter/ModalFooter.module.scss +++ b/src/components/UI/Modal/ModalFooter/ModalFooter.module.scss @@ -1,2 +1,8 @@ +@import '../../../../index'; + .modalFooter { + display: flex; + justify-content: space-around; + flex-direction: row; + align-items: center; } diff --git a/src/components/UI/Modal/ModalHeader/ModalHeader.js b/src/components/UI/Modal/ModalHeader/ModalHeader.js index 36da8f2f..93bd1f1b 100644 --- a/src/components/UI/Modal/ModalHeader/ModalHeader.js +++ b/src/components/UI/Modal/ModalHeader/ModalHeader.js @@ -1,21 +1,15 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {ReactComponent as CloseIcon} from '../../../../assets/svg/icons/close.svg'; import utils from '../../../../utils'; import {ModalType} from '../Modal/Modal.constants'; import styles from './ModalHeader.module.scss'; -export const ModalHeader = ({type = ModalType.INFO, isClosable, onClose, children}) => ( - <div className={utils.object.toClasses(styles.modalHeader, styles[type])}> - {children} - {isClosable && <CloseIcon onClick={onClose} />} - </div> -); +export const ModalHeader = ({type = ModalType.INFO, children}) => { + return <div className={utils.object.toClasses(styles.modalHeader, styles[type])}>{children}</div>; +}; ModalHeader.propTypes = { type: PropTypes.string, - isClosable: PropTypes.bool, - onClose: PropTypes.func, children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) }; diff --git a/src/components/UI/Modal/ModalHeader/ModalHeader.module.scss b/src/components/UI/Modal/ModalHeader/ModalHeader.module.scss index 97cf4fa4..aeaddd36 100644 --- a/src/components/UI/Modal/ModalHeader/ModalHeader.module.scss +++ b/src/components/UI/Modal/ModalHeader/ModalHeader.module.scss @@ -6,9 +6,13 @@ $error-color: $--color-error; display: flex; justify-content: space-between; align-items: center; + flex-direction: column; - svg { - cursor: pointer; + .container { + svg { + cursor: pointer; + float: right; + } } &.error { diff --git a/src/components/UI/Modal/ModalMessage/IncognitoMessage.js b/src/components/UI/Modal/ModalMessage/IncognitoMessage.js new file mode 100644 index 00000000..47d2e3d6 --- /dev/null +++ b/src/components/UI/Modal/ModalMessage/IncognitoMessage.js @@ -0,0 +1,7 @@ +export const IncognitoMessage = () => { + return ( + <p> + The current StarkGate Alpha version <b>does not</b> support browsing in incognito mode. + </p> + ); +}; diff --git a/src/components/UI/Modal/ModalMessage/ModalMessage.module.scss b/src/components/UI/Modal/ModalMessage/ModalMessage.module.scss new file mode 100644 index 00000000..c25fef89 --- /dev/null +++ b/src/components/UI/Modal/ModalMessage/ModalMessage.module.scss @@ -0,0 +1,12 @@ +.modalMessage { + font-size: 15px; + + &.transferMessage { + margin-top: 20px; + } + + &.refreshMessage { + margin-top: 30px; + text-align: center; + } +} diff --git a/src/components/UI/Modal/ModalMessage/RefreshMessage.js b/src/components/UI/Modal/ModalMessage/RefreshMessage.js new file mode 100644 index 00000000..c4bef912 --- /dev/null +++ b/src/components/UI/Modal/ModalMessage/RefreshMessage.js @@ -0,0 +1,12 @@ +import React from 'react'; + +import {toClasses} from '../../../../utils/object'; +import styles from './ModalMessage.module.scss'; + +export const RefreshMessage = () => { + return ( + <div className={toClasses(styles.modalMessage, styles.refreshMessage)}> + <b>Do not refresh or close the page</b> while waiting for the operation to be completed. + </div> + ); +}; diff --git a/src/components/UI/Modal/ModalMessage/TransferToL1Message.js b/src/components/UI/Modal/ModalMessage/TransferToL1Message.js new file mode 100644 index 00000000..82569d18 --- /dev/null +++ b/src/components/UI/Modal/ModalMessage/TransferToL1Message.js @@ -0,0 +1,20 @@ +import {toClasses} from '../../../../utils/object'; +import styles from './ModalMessage.module.scss'; + +export const TransferToL1Message = () => { + return ( + <div className={toClasses(styles.modalMessage, styles.transferMessage)}> + <center> + The StarkNet → Ethereum transfer divided into two stages ( + <a href="https://starknet.io/documentation/starkgate-token-bridge/">Docs</a>): + </center> + <ul> + <li>A waiting period of several hours is expected between the stages.</li> + <li> + At the end of the first step, you will be required to sign in order to complete the + transfer. + </li> + </ul> + </div> + ); +}; diff --git a/src/components/UI/Modal/ModalMessage/TransferToL2Message.js b/src/components/UI/Modal/ModalMessage/TransferToL2Message.js new file mode 100644 index 00000000..afac45ef --- /dev/null +++ b/src/components/UI/Modal/ModalMessage/TransferToL2Message.js @@ -0,0 +1,12 @@ +import {toClasses} from '../../../../utils/object'; +import styles from './ModalMessage.module.scss'; + +export const TransferToL2Message = () => { + return ( + <div className={toClasses(styles.modalMessage, styles.transferMessage)}> + Note: This is an Alpha version. Completing a Ethereum → StarkNet transfer may take{' '} + <b>up to several hours</b> depending on the congestion. It may take a while for your wallet + balance to update. + </div> + ); +}; diff --git a/src/components/UI/Modal/ModalMessage/index.js b/src/components/UI/Modal/ModalMessage/index.js new file mode 100644 index 00000000..12dd96aa --- /dev/null +++ b/src/components/UI/Modal/ModalMessage/index.js @@ -0,0 +1,4 @@ +export * from './IncognitoMessage'; +export * from './RefreshMessage'; +export * from './TransferToL2Message'; +export * from './TransferToL1Message'; diff --git a/src/components/UI/Modal/ModalText/ModalText.js b/src/components/UI/Modal/ModalText/ModalText.js new file mode 100644 index 00000000..e216ea79 --- /dev/null +++ b/src/components/UI/Modal/ModalText/ModalText.js @@ -0,0 +1,17 @@ +import PropTypes from 'prop-types'; + +import styles from './ModalText.module.scss'; + +export const ModalText = ({children}) => { + return ( + <div className={styles.modalText}> + <div className={styles.wrap}> + <div className={styles.content}>{children}</div> + </div> + </div> + ); +}; + +ModalText.propTypes = { + children: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]) +}; diff --git a/src/components/UI/Modal/ModalText/ModalText.module.scss b/src/components/UI/Modal/ModalText/ModalText.module.scss new file mode 100644 index 00000000..10d8124c --- /dev/null +++ b/src/components/UI/Modal/ModalText/ModalText.module.scss @@ -0,0 +1,17 @@ +.modalText { + font-weight: 400; + font-size: 17px; + letter-spacing: 0.03em; + + .wrap { + float: left; + position: relative; + left: 50%; + + .content { + float: left; + position: relative; + left: -50%; + } + } +} diff --git a/src/components/UI/Modal/ModalTitle/ModalTitle.module.scss b/src/components/UI/Modal/ModalTitle/ModalTitle.module.scss index 66240f28..a1b67c00 100644 --- a/src/components/UI/Modal/ModalTitle/ModalTitle.module.scss +++ b/src/components/UI/Modal/ModalTitle/ModalTitle.module.scss @@ -1,8 +1,8 @@ @import '../../../../index'; .modalTitle { - font-weight: 600; - font-size: 20px; + font-size: 26px; + font-weight: 500; line-height: 32px; letter-spacing: 0.01em; } diff --git a/src/components/UI/Modal/ModalWrapper.js b/src/components/UI/Modal/ModalWrapper.js index d3362ec3..6123622a 100644 --- a/src/components/UI/Modal/ModalWrapper.js +++ b/src/components/UI/Modal/ModalWrapper.js @@ -3,23 +3,36 @@ import React, {lazy, Suspense} from 'react'; import {useHideModal, useModal} from '../../../providers/ModalProvider'; import {LoadingSize} from '../Loading/Loading.enums'; import {Loading, Modal, ModalBody, ModalFooter, ModalHeader, ModalTitle} from '../index'; +import {ModalText} from './ModalText/ModalText'; export const ModalWrapper = () => { const modal = useModal(); const handleOnClose = useHideModal(); const CustomComponent = lazy(() => import(`../../${modal.componentPath}`)); + const CustomHeaderComponent = lazy(() => import(`../../${modal.headerComponentPath}`)); return ( <Modal show={modal.show} size={modal.size} type={modal.type}> - <ModalHeader isClosable={modal.isClosable} type={modal.type} onClose={handleOnClose}> + <ModalHeader type={modal.type}> + <Suspense fallback={<Loading size={LoadingSize.LARGE} />}> + {modal.headerComponentPath ? ( + <CustomHeaderComponent {...modal.headerComponentProps} /> + ) : ( + <div /> + )} + </Suspense> {modal.title && <ModalTitle>{modal.title}</ModalTitle>} </ModalHeader> <ModalBody type={modal.type}> <Suspense fallback={<Loading size={LoadingSize.LARGE} />}> - {modal.componentPath ? <CustomComponent {...modal.componentProps} /> : modal.body} + {modal.componentPath ? ( + <CustomComponent {...modal.componentProps} /> + ) : ( + <ModalText>{modal.body}</ModalText> + )} </Suspense> </ModalBody> - {modal.withButtons && <ModalFooter onClose={handleOnClose} {...modal} />} + {modal.withButtons && <ModalFooter type={modal.type} onClose={handleOnClose} {...modal} />} </Modal> ); }; diff --git a/src/components/UI/Modal/OnboardingModal/OnboardingModal.js b/src/components/UI/Modal/OnboardingModal/OnboardingModal.js new file mode 100644 index 00000000..353a1ffe --- /dev/null +++ b/src/components/UI/Modal/OnboardingModal/OnboardingModal.js @@ -0,0 +1,21 @@ +import React from 'react'; + +import {IncognitoMessage} from '../ModalMessage'; +import styles from './OnboardingModal.module.scss'; +import {SUBTITLE_TXT, BULLETS_TXT} from './OnboardingModal.strings'; + +const OnboardingModal = () => { + return ( + <div className={styles.onboardingModal}> + <h3>{SUBTITLE_TXT}</h3> + <ul> + {BULLETS_TXT.map((bullet, i) => ( + <li key={`b-${i}`}>{bullet}</li> + ))} + </ul> + <IncognitoMessage /> + </div> + ); +}; + +export default OnboardingModal; diff --git a/src/components/UI/Modal/OnboardingModal/OnboardingModal.module.scss b/src/components/UI/Modal/OnboardingModal/OnboardingModal.module.scss new file mode 100644 index 00000000..1e01140f --- /dev/null +++ b/src/components/UI/Modal/OnboardingModal/OnboardingModal.module.scss @@ -0,0 +1,11 @@ +@import '../../../../index'; + +.onboardingModal { + ul { + text-align: left; + } + + h3 { + color: $--color-alpha-5; + } +} diff --git a/src/components/UI/Modal/OnboardingModal/OnboardingModal.strings.js b/src/components/UI/Modal/OnboardingModal/OnboardingModal.strings.js new file mode 100644 index 00000000..9bff3767 --- /dev/null +++ b/src/components/UI/Modal/OnboardingModal/OnboardingModal.strings.js @@ -0,0 +1,7 @@ +import utils from '../../../../utils'; + +const {title_txt, subtitle_txt, bullets_txt} = utils.getTranslation('modals.onboarding'); + +export const TITLE_TXT = title_txt; +export const SUBTITLE_TXT = subtitle_txt; +export const BULLETS_TXT = bullets_txt; diff --git a/src/components/UI/Modal/ProgressModal/ProgressModal.js b/src/components/UI/Modal/ProgressModal/ProgressModal.js index e1f8cab5..66caa247 100644 --- a/src/components/UI/Modal/ProgressModal/ProgressModal.js +++ b/src/components/UI/Modal/ProgressModal/ProgressModal.js @@ -1,23 +1,19 @@ +import {LinearProgress} from '@mui/material'; import PropTypes from 'prop-types'; import React from 'react'; -import {useColors} from '../../../../hooks'; -import {LoadingSize} from '../../Loading/Loading.enums'; -import {Loading} from '../../index'; -import styles from './ProgressModal.module.scss'; +import {RefreshMessage} from '../ModalMessage'; +import {ModalText} from '../ModalText/ModalText'; const ProgressModal = ({message}) => { - const {colorBeta} = useColors(); - return ( - <div className={styles.progressModal}> - <div>{message}</div> - <div className={styles.loading}> - <center> - <Loading color={colorBeta} size={LoadingSize.LARGE} /> - </center> - </div> - </div> + <> + <LinearProgress /> + <br /> + <ModalText>{message}</ModalText> + <br /> + <RefreshMessage /> + </> ); }; diff --git a/src/components/UI/Modal/ProgressModal/ProgressModal.module.scss b/src/components/UI/Modal/ProgressModal/ProgressModal.module.scss deleted file mode 100644 index bfd23ec2..00000000 --- a/src/components/UI/Modal/ProgressModal/ProgressModal.module.scss +++ /dev/null @@ -1,5 +0,0 @@ -.progressModal { - .loading { - margin-top: 30px; - } -} diff --git a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js index 7d996f64..904f1b8a 100644 --- a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js +++ b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js @@ -1,105 +1,104 @@ import PropTypes from 'prop-types'; -import React, {useEffect, useState} from 'react'; +import React from 'react'; import {ReactComponent as EtherscanLogo} from '../../../../assets/svg/etherscan.svg'; -import {ReactComponent as L2Logo} from '../../../../assets/svg/tokens/starknet.svg'; +import {ReactComponent as StarkNetLogo} from '../../../../assets/svg/tokens/starknet.svg'; import constants from '../../../../config/constants'; +import envs from '../../../../config/envs'; import {ActionType} from '../../../../enums'; import {useColors} from '../../../../hooks'; -import {useWallets} from '../../../../providers/WalletsProvider'; import utils from '../../../../utils'; import {Button} from '../../Button/Button'; import {Circle} from '../../Circle/Circle'; +import {TransferToL1Message, TransferToL2Message} from '../ModalMessage'; +import {ModalText} from '../ModalText/ModalText'; +import styles from './TransactionSubmittedModal.module.scss'; import { BTN_TEXT, COMPLETE_TRANSFER_TO_L1_TXT, - STATUS_TXT, TRANSFER_TO_L1_TXT, TRANSFER_TO_L2_TXT } from './TransactionSubmittedModal.strings'; -const {LINKS} = constants; +const {ETHERSCAN, VOYAGER} = constants; +const {etherscanTxUrl, voyagerTxUrl} = envs; const TransactionSubmittedModal = ({transfer}) => { - const {chainId} = useWallets(); - const [networkData, setNetworkData] = useState({}); + const {type, l2hash, l1hash} = transfer; + const isTransferCompleted = l1hash && l2hash; + const explorerButtons = []; - useEffect(() => { - const {type, l2hash, l1hash} = transfer; - const isTransferCompleted = l1hash && l2hash; - if (type === ActionType.TRANSFER_TO_L2 || isTransferCompleted) { - setNetworkData({ - message: - type === ActionType.TRANSFER_TO_L2 ? TRANSFER_TO_L2_TXT : COMPLETE_TRANSFER_TO_L1_TXT, - showStatusMsg: type === ActionType.TRANSFER_TO_L2, - explorerName: LINKS.ETHERSCAN.text, - explorerUrl: LINKS.ETHERSCAN.txUrl(chainId, l1hash), - explorerLogo: <EtherscanLogo style={{margin: 'auto'}} /> - }); - } else { - setNetworkData({ - message: TRANSFER_TO_L1_TXT, - showStatusMsg: true, - explorerName: LINKS.VOYAGER.text, - explorerUrl: LINKS.VOYAGER.txUrl(chainId, l2hash), - explorerLogo: <L2Logo style={{margin: 'auto'}} /> - }); - } - }, []); + const textMessage = + type === ActionType.TRANSFER_TO_L2 + ? TRANSFER_TO_L2_TXT + : isTransferCompleted + ? COMPLETE_TRANSFER_TO_L1_TXT + : TRANSFER_TO_L1_TXT; - const onClick = () => { - utils.browser.openInNewTab(networkData.explorerUrl); - }; + const messageComponent = + type === ActionType.TRANSFER_TO_L2 ? ( + <TransferToL2Message /> + ) : !isTransferCompleted ? ( + <TransferToL1Message /> + ) : null; - return ( - <div> - <TransactionSubmittedModalText bold={true} text={networkData.message} /> - {networkData.showStatusMsg && <TransactionSubmittedModalText text={STATUS_TXT} />} + if (type === ActionType.TRANSFER_TO_L2 || isTransferCompleted) { + explorerButtons.push({ + explorerName: ETHERSCAN, + explorerUrl: etherscanTxUrl(l1hash), + explorerLogo: <EtherscanLogo /> + }); + } + + if ( + (type === ActionType.TRANSFER_TO_L1 && !isTransferCompleted) || + type === ActionType.TRANSFER_TO_L2 + ) { + explorerButtons.push({ + explorerName: VOYAGER, + explorerUrl: voyagerTxUrl(l2hash), + explorerLogo: <StarkNetLogo /> + }); + } + + const renderNetworks = () => { + return explorerButtons.map((eb, index) => ( <TransactionSubmittedModalButton - networkLogo={networkData.explorerLogo} - networkName={networkData.explorerName} - onClick={onClick} + key={index} + networkLogo={eb.explorerLogo} + networkName={eb.explorerName} + onClick={() => utils.browser.openInNewTab(eb.explorerUrl)} /> + )); + }; + + return ( + <div className={styles.transactionSubmittedModal}> + <ModalText>{textMessage}</ModalText> + <div className={styles.buttons}>{renderNetworks()}</div> + {messageComponent} </div> ); }; -const TransactionSubmittedModalText = ({text, bold}) => { - return <p>{bold ? <b>{text}</b> : text}</p>; -}; - const TransactionSubmittedModalButton = ({networkName, networkLogo, onClick}) => { const {colorAlpha3, colorWhite, colorWhite1} = useColors(); return ( - <center> - <Button - colorBackground={colorWhite} - colorBorder={colorAlpha3} - colorText={colorAlpha3} - icon={ - <Circle color={colorWhite1} size={40}> - {networkLogo} - </Circle> - } - style={{ - borderRadius: '7px', - borderWidth: '2px', - fontSize: '16px', - marginTop: '25px', - height: '50px' - }} - text={BTN_TEXT(networkName)} - onClick={onClick} - /> - </center> + <Button + colorBackground={colorWhite} + colorBorder={colorAlpha3} + colorText={colorAlpha3} + icon={ + <Circle color={colorWhite1} size={40}> + {networkLogo} + </Circle> + } + text={BTN_TEXT(networkName)} + onClick={onClick} + /> ); }; -TransactionSubmittedModalText.propTypes = { - text: PropTypes.string, - bold: PropTypes.bool -}; - TransactionSubmittedModalButton.propTypes = { networkName: PropTypes.string, networkLogo: PropTypes.object, diff --git a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.module.scss b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.module.scss new file mode 100644 index 00000000..2fe135ed --- /dev/null +++ b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.module.scss @@ -0,0 +1,23 @@ +.transactionSubmittedModal { + display: flex; + flex-direction: column; + + .buttons { + display: flex; + align-items: center; + justify-content: space-evenly; + + svg { + margin: auto; + } + + button { + border-radius: 7px; + border-width: 2px; + font-size: 16px; + margin-top: 25px; + height: 50px; + text-transform: none; + } + } +} diff --git a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.strings.js b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.strings.js index ffe6bf67..44f45157 100644 --- a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.strings.js +++ b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.strings.js @@ -1,10 +1,9 @@ import utils from '../../../../utils'; -const {btn_txt, transfer_to_l1_txt, complete_transfer_to_l1_txt, transfer_to_l2_txt, status_txt} = +const {btn_txt, transfer_to_l1_txt, complete_transfer_to_l1_txt, transfer_to_l2_txt} = utils.getTranslation('modals.transactionSubmitted'); export const COMPLETE_TRANSFER_TO_L1_TXT = complete_transfer_to_l1_txt; export const TRANSFER_TO_L1_TXT = transfer_to_l1_txt; export const TRANSFER_TO_L2_TXT = transfer_to_l2_txt; -export const STATUS_TXT = status_txt; export const BTN_TEXT = explorer => utils.object.evaluate(btn_txt, {explorer}); diff --git a/src/components/UI/Modal/index.js b/src/components/UI/Modal/index.js index 53d043a8..a3eb8e2e 100644 --- a/src/components/UI/Modal/index.js +++ b/src/components/UI/Modal/index.js @@ -1,4 +1,6 @@ export * from './ModalWrapper'; +export * from './ModalMessage'; +export * from './ModalText/ModalText'; export * from './Modal/Modal'; export * from './ModalHeader/ModalHeader'; export * from './ModalBody/ModalBody'; diff --git a/src/components/UI/NetworkMenu/NetworkMenu.js b/src/components/UI/NetworkMenu/NetworkMenu.js index 50c638af..54965953 100644 --- a/src/components/UI/NetworkMenu/NetworkMenu.js +++ b/src/components/UI/NetworkMenu/NetworkMenu.js @@ -7,13 +7,13 @@ import {Badge} from '../index'; import styles from './NetworkMenu.module.scss'; import {FROM, TO} from './NetworkMenu.strings'; -export const NetworkMenu = ({networkData, tokenData, isTarget, children}) => { +export const NetworkMenu = ({networkData, tokenData, isTarget, onRefreshClick, children}) => { return ( <div className={styles.networkMenu}> <Badge text={isTarget ? TO : FROM} /> <div className={styles.networkContainer}> <NetworkTitle networkData={networkData} /> - <TokenBalance tokenData={tokenData} /> + <TokenBalance tokenData={tokenData} onRefreshClick={onRefreshClick} /> </div> <div className={styles.transferContainer}>{children}</div> </div> @@ -24,5 +24,6 @@ NetworkMenu.propTypes = { networkData: PropTypes.object, tokenData: PropTypes.object, isTarget: PropTypes.bool, + onRefreshClick: PropTypes.func, children: PropTypes.any }; diff --git a/src/components/UI/NetworkSwap/NetworkSwap.module.scss b/src/components/UI/NetworkSwap/NetworkSwap.module.scss index e759fd25..13ddeb8b 100644 --- a/src/components/UI/NetworkSwap/NetworkSwap.module.scss +++ b/src/components/UI/NetworkSwap/NetworkSwap.module.scss @@ -7,12 +7,6 @@ cursor: pointer; transition: 0.3s ease-in-out; - &.flipped { - svg { - transform: scale(1, -1); - } - } - svg { transition: 0.2s ease-in-out; margin: auto; @@ -21,6 +15,12 @@ width: 25px; } + &.flipped { + svg { + transform: scale(1, -1); + } + } + &:hover { filter: brightness(1.4); } diff --git a/src/components/UI/RefreshIcon/RefreshIcon.js b/src/components/UI/RefreshIcon/RefreshIcon.js new file mode 100644 index 00000000..3f42f468 --- /dev/null +++ b/src/components/UI/RefreshIcon/RefreshIcon.js @@ -0,0 +1,37 @@ +import PropTypes from 'prop-types'; +import React, {useEffect, useState} from 'react'; + +import {ReactComponent as RefreshSvg} from '../../../assets/svg/icons/refresh.svg'; +import {toClasses} from '../../../utils/object'; +import styles from './RefreshIcon.module.scss'; + +export const RefreshIcon = ({size, onClick}) => { + const [animate, setAnimate] = useState(false); + + useEffect(() => { + if (animate) { + setTimeout(() => setAnimate(false), 500); + } + }, [animate]); + + const onClickInternal = () => { + setAnimate(!animate); + onClick(); + }; + + return ( + <RefreshSvg + className={toClasses(styles.refreshIcon, animate && styles.animate)} + style={{ + height: `${size}px`, + width: `${size}px` + }} + onClick={onClickInternal} + /> + ); +}; + +RefreshIcon.propTypes = { + size: PropTypes.number, + onClick: PropTypes.func +}; diff --git a/src/components/UI/RefreshIcon/RefreshIcon.module.scss b/src/components/UI/RefreshIcon/RefreshIcon.module.scss new file mode 100644 index 00000000..70c3f6b7 --- /dev/null +++ b/src/components/UI/RefreshIcon/RefreshIcon.module.scss @@ -0,0 +1,27 @@ +@import '../../../index'; + +$color: $--color-alpha-6; +$color-hover: $--color-white; + +svg { + &.refreshIcon { + fill: $color; + margin: 2px 0 0 5px; + transition: 0.3s ease-in-out; + + &:hover { + cursor: pointer; + fill: $color-hover; + } + } + + &.animate { + animation: spin 0.5s ease-in; + } +} + +@keyframes spin { + to { + transform: rotate(360deg); + } +} diff --git a/src/components/UI/SelectTokenRow/SelectTokenRow.module.scss b/src/components/UI/SelectTokenRow/SelectTokenRow.module.scss index 07b874e7..7ece0252 100644 --- a/src/components/UI/SelectTokenRow/SelectTokenRow.module.scss +++ b/src/components/UI/SelectTokenRow/SelectTokenRow.module.scss @@ -14,16 +14,16 @@ $balance-color-hover: $--color-white; pointer-events: none; } + hr { + border-color: $hr-color; + } + &:first-child { hr { display: none; } } - hr { - border-color: $hr-color; - } - .data { margin: 20px 0; display: flex; diff --git a/src/components/UI/Stepper/Stepper.js b/src/components/UI/Stepper/Stepper.js new file mode 100644 index 00000000..fdb7d587 --- /dev/null +++ b/src/components/UI/Stepper/Stepper.js @@ -0,0 +1,26 @@ +import {Step, StepLabel, Stepper as MuiStepper} from '@mui/material'; +import PropTypes from 'prop-types'; +import React from 'react'; + +import styles from './Stepper.module.scss'; + +const Stepper = ({steps, activeStep}) => { + return ( + <div className={styles.stepper}> + <MuiStepper alternativeLabel activeStep={activeStep}> + {steps.map((label, index) => ( + <Step key={index}> + <StepLabel>{label}</StepLabel> + </Step> + ))} + </MuiStepper> + </div> + ); +}; + +Stepper.propTypes = { + steps: PropTypes.arrayOf(PropTypes.string), + activeStep: PropTypes.number +}; + +export default Stepper; diff --git a/src/components/UI/Stepper/Stepper.module.scss b/src/components/UI/Stepper/Stepper.module.scss new file mode 100644 index 00000000..fa117774 --- /dev/null +++ b/src/components/UI/Stepper/Stepper.module.scss @@ -0,0 +1,6 @@ +@import '../../../index'; + +.stepper { + width: 100%; + margin-bottom: 50px; +} diff --git a/src/components/UI/Tab/Tab.js b/src/components/UI/Tab/Tab.js new file mode 100644 index 00000000..c449ab0d --- /dev/null +++ b/src/components/UI/Tab/Tab.js @@ -0,0 +1,28 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {useColors} from '../../../hooks'; +import {Button} from '../Button/Button'; +import styles from './Tab.module.scss'; + +export const Tab = ({label, color, onClick}) => { + const {colorWhite, colorWhiteOp10, colorWhiteOp20} = useColors(); + + return ( + <Button + className={styles.tab} + colorBackground={colorWhiteOp10} + colorBackgroundHover={colorWhiteOp20} + colorBorder={color || colorWhite} + colorText={colorWhite} + height={0} + text={label} + onClick={onClick} + /> + ); +}; +Tab.propTypes = { + label: PropTypes.string, + color: PropTypes.string, + onClick: PropTypes.func +}; diff --git a/src/components/UI/Tab/Tab.module.scss b/src/components/UI/Tab/Tab.module.scss new file mode 100644 index 00000000..ee24129a --- /dev/null +++ b/src/components/UI/Tab/Tab.module.scss @@ -0,0 +1,3 @@ +.tab { + border-width: 2px; +} diff --git a/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.js b/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.js index f2a0d0c9..ade273ec 100644 --- a/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.js +++ b/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.js @@ -38,7 +38,7 @@ export const CompleteTransferToL1Toast = ({ leaveTo="opacity-0" show={t.visible} > - <div className={styles.CompleteTransferToL1Toast}> + <div className={styles.completeTransferToL1Toast}> <div className={styles.container}> <div className={styles.left}> <L1Logo style={{opacity: 0.5}} /> diff --git a/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.module.scss b/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.module.scss index aa453495..ff750580 100644 --- a/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.module.scss +++ b/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.module.scss @@ -3,10 +3,10 @@ $background-color: $--color-white; $left-background-color: $--color-white-2; -.CompleteTransferToL1Toast { +.completeTransferToL1Toast { width: 400px; background: $background-color; - box-shadow: 0 12px 16px -4px rgba(16, 24, 40, 0.1), 0px 4px 6px -2px rgba(16, 24, 40, 0.05); + box-shadow: 0 12px 16px -4px rgba(16, 24, 40, 0.1), 0 4px 6px -2px rgba(16, 24, 40, 0.05); border-radius: 8px; .container { diff --git a/src/components/UI/Toast/ToastFooter/ToastFooter.module.scss b/src/components/UI/Toast/ToastFooter/ToastFooter.module.scss index 1b335f33..f8d25616 100644 --- a/src/components/UI/Toast/ToastFooter/ToastFooter.module.scss +++ b/src/components/UI/Toast/ToastFooter/ToastFooter.module.scss @@ -1,7 +1,6 @@ @import '../../../../index'; $color: $--color-omega; -$colorHover: $--color-omega-1; .toastFooter { margin-bottom: 5px; diff --git a/src/components/UI/TokenBalance/TokenBalance.js b/src/components/UI/TokenBalance/TokenBalance.js index 64316d14..7d1c5e6a 100644 --- a/src/components/UI/TokenBalance/TokenBalance.js +++ b/src/components/UI/TokenBalance/TokenBalance.js @@ -2,34 +2,30 @@ import PropTypes from 'prop-types'; import React from 'react'; import utils from '../../../utils'; +import {toClasses} from '../../../utils/object'; import {LoadingSize} from '../Loading/Loading.enums'; -import {Loading} from '../index'; +import {Loading, RefreshIcon} from '../index'; import styles from './TokenBalance.module.scss'; import {TITLE_TXT} from './TokenBalance.strings'; -export const TokenBalance = ({tokenData}) => { +export const TokenBalance = ({tokenData, onRefreshClick}) => { const {symbol, isLoading, balance} = tokenData; return ( - <div className={styles.tokenBalance}> + <div className={toClasses(styles.tokenBalance, isLoading && styles.loading)}> <span>{TITLE_TXT}</span> - {isLoading && ( - <> - <br /> - <center> - <Loading size={LoadingSize.SMALL} /> - </center> - </> - )} - {!isLoading && ( + <div className={styles.balanceRow}> <div className={styles.balance}> - {utils.wallet.formatBalance(balance)} {symbol} + {isLoading ? <Loading size={LoadingSize.SMALL} /> : utils.wallet.formatBalance(balance)} + <div className={styles.symbol}>{symbol}</div> </div> - )} + <RefreshIcon size={18} onClick={onRefreshClick} /> + </div> </div> ); }; TokenBalance.propTypes = { - tokenData: PropTypes.object + tokenData: PropTypes.object, + onRefreshClick: PropTypes.func }; diff --git a/src/components/UI/TokenBalance/TokenBalance.module.scss b/src/components/UI/TokenBalance/TokenBalance.module.scss index 67c6885d..2927ccba 100644 --- a/src/components/UI/TokenBalance/TokenBalance.module.scss +++ b/src/components/UI/TokenBalance/TokenBalance.module.scss @@ -9,8 +9,29 @@ $balance-color: $--color-white; text-align: right; letter-spacing: 0.01em; - .balance { - line-height: 24px; - color: $balance-color; + .balanceRow { + display: flex; + flex-flow: row nowrap; + justify-content: flex-end; + + .balance { + display: flex; + line-height: 24px; + color: $balance-color; + + .symbol { + margin-left: 5px; + } + } + } + + &.loading { + .balanceRow { + .balance { + .symbol { + margin-left: 10px; + } + } + } } } diff --git a/src/components/UI/TransferLogContainer/TransferLogContainer.js b/src/components/UI/TransferLogContainer/TransferLogContainer.js index 1a0a1ab2..3c6f2579 100644 --- a/src/components/UI/TransferLogContainer/TransferLogContainer.js +++ b/src/components/UI/TransferLogContainer/TransferLogContainer.js @@ -12,12 +12,14 @@ import { VIEW_MORE_TXT } from './TransferLogContainer.strings'; -export const TransferLogContainer = ({transferIndex, children}) => { +export const TransferLogContainer = ({transferIndex, children, onShowTransfers}) => { const {resetMenuProps} = useMenu(); const [showChildren, setShowChildren] = useState(false); const toggleShowChildren = () => { - transferIndex > -1 ? resetMenuProps() : setShowChildren(!showChildren); + const show = !showChildren; + transferIndex > -1 ? resetMenuProps() : setShowChildren(show); + show && onShowTransfers(); }; const renderChildren = () => { @@ -52,5 +54,6 @@ export const TransferLogContainer = ({transferIndex, children}) => { TransferLogContainer.propTypes = { children: PropTypes.oneOfType([PropTypes.array, PropTypes.object]), - transferIndex: PropTypes.number + transferIndex: PropTypes.number, + onShowTransfers: PropTypes.func }; diff --git a/src/components/UI/TransferLogContainer/TransferLogContainer.module.scss b/src/components/UI/TransferLogContainer/TransferLogContainer.module.scss index 6462d5a7..14f8a297 100644 --- a/src/components/UI/TransferLogContainer/TransferLogContainer.module.scss +++ b/src/components/UI/TransferLogContainer/TransferLogContainer.module.scss @@ -26,16 +26,16 @@ $view-more-color: $--color-gamma-1; text-transform: capitalize; margin-bottom: 10px; + svg { + transition: 0.3s ease-in-out; + cursor: pointer; + } + &.showChildren { svg { transform: scale(1, -1); } } - - svg { - transition: 0.3s ease-in-out; - cursor: pointer; - } } .empty { diff --git a/src/components/UI/WalletButton/WalletButton.constants.js b/src/components/UI/WalletButton/WalletButton.constants.js index 157db522..e79b5b05 100644 --- a/src/components/UI/WalletButton/WalletButton.constants.js +++ b/src/components/UI/WalletButton/WalletButton.constants.js @@ -1 +1,2 @@ export const WALLET_LOGO_SIZE = 30; +export const WALLET_LOGO_SIZE_MOBILE = 40; diff --git a/src/components/UI/WalletButton/WalletButton.js b/src/components/UI/WalletButton/WalletButton.js index a0c4ae6c..b091b1c1 100644 --- a/src/components/UI/WalletButton/WalletButton.js +++ b/src/components/UI/WalletButton/WalletButton.js @@ -1,24 +1,45 @@ import PropTypes from 'prop-types'; import React from 'react'; +import useBreakpoint from 'use-breakpoint'; +import {isMobile, isTablet, Breakpoint} from '../../../enums'; import {useColors} from '../../../hooks'; import utils from '../../../utils'; +import {toClasses} from '../../../utils/object'; import {Button, DynamicIcon} from '../index'; -import {WALLET_LOGO_SIZE} from './WalletButton.constants'; +import {WALLET_LOGO_SIZE, WALLET_LOGO_SIZE_MOBILE} from './WalletButton.constants'; +import styles from './WalletButton.module.scss'; import {BTN_TXT} from './WalletButton.strings'; export const WalletButton = ({account, logoPath, onClick}) => { - const {colorBeta, colorWhite} = useColors(); + const {colorBeta, colorWhite, colorWhiteOp10, colorWhiteOp20} = useColors(); + const {breakpoint} = useBreakpoint(Breakpoint); + + const getText = () => { + const address = utils.wallet.shortenAddress(account); + if (isTablet(breakpoint)) { + return address; + } else if (isMobile(breakpoint)) { + return ''; + } + return BTN_TXT(address); + }; return ( <Button - colorBackground="transparent" + className={toClasses(styles.walletButton, styles[breakpoint.toLowerCase()])} + colorBackground={colorWhiteOp10} + colorBackgroundHover={colorWhiteOp20} colorBorder={colorBeta} colorText={colorWhite} - height={40} - icon={<DynamicIcon path={logoPath} size={WALLET_LOGO_SIZE} />} - style={{borderWidth: '2px'}} - text={BTN_TXT(utils.wallet.shortenAddress(account))} + height={0} + icon={ + <DynamicIcon + path={logoPath} + size={isMobile(breakpoint) ? WALLET_LOGO_SIZE_MOBILE : WALLET_LOGO_SIZE} + /> + } + text={getText()} onClick={onClick} /> ); diff --git a/src/components/UI/WalletButton/WalletButton.module.scss b/src/components/UI/WalletButton/WalletButton.module.scss new file mode 100644 index 00000000..62e2609a --- /dev/null +++ b/src/components/UI/WalletButton/WalletButton.module.scss @@ -0,0 +1,16 @@ +.walletButton { + border-width: 2px; + + &.mobile { + width: 80px; + + img { + margin-right: 0; + } + } + + &.tablet { + width: 150px; + font-size: 16px; + } +} diff --git a/src/components/UI/index.js b/src/components/UI/index.js index 48203e94..e7841159 100644 --- a/src/components/UI/index.js +++ b/src/components/UI/index.js @@ -15,6 +15,7 @@ export * from './MaxButton/MaxButton'; export * from './NetworkMenu/NetworkMenu'; export * from './NetworkSwap/NetworkSwap'; export * from './NetworkTitle/NetworkTitle'; +export * from './Tab/Tab'; export * from './TokenBalance/TokenBalance'; export * from './TokenInput/TokenInput'; export * from './TokenSelector/TokenSelector'; @@ -27,5 +28,7 @@ export * from './WalletLogin/WalletLogin'; export * from './TransferLogContainer/TransferLogContainer'; export * from './LogoutButton/LogoutButton'; export * from './AccountAddress/AccountAddress'; +export * from './RefreshIcon/RefreshIcon'; +export * from './Stepper/Stepper'; export * from './Modal'; export * from './Toast'; diff --git a/src/config/constants.js b/src/config/constants.js index e0e3bed5..544398ad 100644 --- a/src/config/constants.js +++ b/src/config/constants.js @@ -1,38 +1,8 @@ -import {byChainId} from '../enums'; -import utils from '../utils'; - const constants = { - LOCAL_STORAGE_TRANSFERS_KEY: 'STARKGATE_TRANSFERS', - ETHERSCAN_URL: 'etherscan.io', - VOYAGER_URL: 'voyager.online', - LINKS: { - ETHERSCAN: { - text: 'etherscan', - txUrl: (chainId, hash) => - utils.object.evaluate('{{url}}/tx/{{hash}}', { - url: byChainId(chainId).blockExplorerUrl, - hash - }), - accountUrl: (chainId, account) => - utils.object.evaluate('{{url}}/address/{{account}}', { - url: byChainId(chainId).blockExplorerUrl, - account - }) - }, - VOYAGER: { - text: 'voyager', - txUrl: (chainId, hash) => - utils.object.evaluate('{{url}}/tx/{{hash}}', { - url: byChainId(chainId).l2BlockExplorerUrl, - hash - }), - accountUrl: (chainId, account) => - utils.object.evaluate('{{url}}/contract/{{account}}', { - url: byChainId(chainId).l2BlockExplorerUrl, - account - }) - } - } + ETHERSCAN: 'Etherscan', + VOYAGER: 'Voyager', + DISCORD_LINK_URL: '//discord.gg/MRjKBXtaDt', + FETCH_TOKEN_BALANCE_MAX_RETRY: 5 }; export default constants; diff --git a/src/config/contracts.js b/src/config/contracts.js deleted file mode 100644 index 727374b7..00000000 --- a/src/config/contracts.js +++ /dev/null @@ -1,6 +0,0 @@ -import {ChainType} from '../enums'; - -export const STARKNET_CONTRACT_ADDRESS = { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0xde29d060D45901Fb19ED6C6e959EB22d8626708e' -}; diff --git a/src/config/envs.js b/src/config/envs.js index 4fd21c57..b866d7b2 100644 --- a/src/config/envs.js +++ b/src/config/envs.js @@ -1,7 +1,25 @@ +import utils from '../utils'; + const envs = { + env: process.env.NODE_ENV, autoConnect: Boolean(process.env.REACT_APP_AUTO_CONNECT), pollBlockNumberInterval: Number(process.env.REACT_APP_POLL_BLOCK_NUMBER_INTERVAL), - supportedChainIds: process.env.REACT_APP_SUPPORTED_CHAIN_IDS.split(' ').map(id => Number(id)) + supportedTokens: process.env.REACT_APP_SUPPORTED_TOKENS.split(','), + supportedChainIds: process.env.REACT_APP_SUPPORTED_CHAIN_IDS.split(' ').map(id => Number(id)), + starknetContractAddress: process.env.REACT_APP_STARKNET_CONTRACT_ADDRESS, + etherscanUrl: process.env.REACT_APP_ETHERSCAN_URL, + etherscanTxUrl: tx => + utils.object.evaluate(`${process.env.REACT_APP_ETHERSCAN_URL}/tx/{{tx}}`, {tx}), + etherscanAccountUrl: address => + utils.object.evaluate(`${process.env.REACT_APP_ETHERSCAN_URL}/address/{{address}}`, {address}), + voyagerUrl: process.env.REACT_APP_VOYAGER_URL, + voyagerTxUrl: tx => utils.object.evaluate(`${process.env.REACT_APP_VOYAGER_URL}/tx/{{tx}}`, {tx}), + voyagerAccountUrl: contract => + utils.object.evaluate(`${process.env.REACT_APP_VOYAGER_URL}/contract/{{contract}}`, {contract}), + localStorageTransfersLogKey: process.env.REACT_APP_LOCAL_STORAGE_TRANSFERS_LOG_KEY, + localStorageOnboardingExpirationTimestampKey: + process.env.REACT_APP_LOCAL_STORAGE_ONBOARDING_TIMESTAMP_KEY, + onboardingModalTimeoutHrs: process.env.REACT_APP_ONBOARDING_MODAL_TIMEOUT_HRS }; export default envs; diff --git a/src/config/faqs.js b/src/config/faqs.js new file mode 100644 index 00000000..92cf4f69 --- /dev/null +++ b/src/config/faqs.js @@ -0,0 +1,143 @@ +export const faqs = [ + { + question: 'Where can I find more in-depth information on how StarkGate works?', + answer: ` + <p> + To understand how StarkGate works, please see this post, the + <a href="//starknet.io/documentation/starkgate-token-bridge/" target="_blank">Technical Documentation</a>, + the <a href="//github.com/starkware-libs/starkgate-contracts/tree/main/src/starkware/starknet/apps/starkgate" target="_blank">contract’s code</a>, + and the <a href="//github.com/starkware-libs/starkgate-frontend" target="_blank">application code</a>. + </p> + ` + }, + { + question: "I'm unable to use StarkGate Alpha; what could be the problem?", + answer: ` + <p> + The first version currently has some restrictions that may affect your ability + to use StarkGate: + </p> + <ol type="a"> + <li>Make sure you are browsing from Chrome.</li> + <li>Make sure you are not using incognito mode.</li> + <li> + Ensure that you have successfully installed the required wallets (MetaMask and + Argent X). If you haven’t installed one of these wallets, please do so and + refresh the page. + </li> + <li> + There are <em>limitations on the usage of the StarkGate bridge</em>. Make sure you do not exceed these. + </li> + <li> + This is an <b>alpha version</b>; disruptions and delays are expected – especially when + there is high congestion. Please be patient and try again later :) + </li> + </ol> + ` + }, + { + question: + 'I performed the operation and have been waiting for completion for a long time. Why is that, and what should I do? ', + answer: ` + <ol type="a"> + <li> + This is an Alpha version of StarkGate operating on an <b>Alpha</b> version of StarkNet. + As a result, significant delays may occure due to congestion of the system. + </li> + <li> + If you encounter a significant delay, we recommend that you: + <ol type="i"> + <li>Do not exit the browser and then re-enter.</li> + <li>Do not try to perform the same operation over and over again.</li> + </ol> + </li> + </ol> + ` + }, + { + question: + 'I performed a transfer from StarkNet to Ethereum a few hours ago, and my balance on Ethereum has not been updated yet. What should I do?', + answer: ` + <p> + Our recommendation is to wait, and here is the reason why: + The process of sending transactions from StarkNet to Ethereum is divided into <a href="https://starknet.io/documentation/starkgate-token-bridge/" target="_blank">two stages</a>. + </p> + <ol type="i"> + <li>A waiting period of several hours is expected between the stages.</li> + <li> + At the end of the first step, you will be required to sign in order to complete the transfer. + <b>The StarkNet to Ethereum transfer must be completed using the same browser (and PC) you used for the first step.</b> + </li> + </ol> + ` + }, + { + question: + 'What are the limitations that are intentionally constrained on StarkGate Alpha? Why do they exist? And, what will happen if the limits are reached?', + answer: ` + <div> + <p> + StarkGate Alpha has two limitations at its first stage in order to reduce risk: + </p> + <ol type="a"> + <li> + The total value locked (TVL) in the bridge on Ethereum is limited for each token type. + </li> + <li> + The maximum amount in each transaction sent from Ethereum to StarkNet via StarkGate is limited. + </li> + </ol> + <p> + *Take a look at the <a href="https://starknet.io/documentation/starkgate-token-bridge/" target="_blank">documentation</a> to see the updated numbers, stay tuned. + </p> + <p> + We plan to gradually ease these limitations and lift them completely, as confidence grows. + In the meantime, it will not be possible to perform an operation that exceeds one of the restrictions. + </p> + </div> + ` + }, + { + question: 'Why are there restrictions on using the browser?', + answer: ` + <p> + In StarkGate Alpha, your transfer’s log history is saved in the local storage of + the browser. + </p> + <p>As a result:</p> + <ul> + <li> + Clearing the local storage will cause this data to be lost + </li> + <li> + Logging to StarkGate using multiple devices/browsers can cause data inconsistency + </li> + </ul> + <p>Therefore, we recommend when using StarkGate Alpha:</p> + <ul> + <li>Refrain from closing or switching browsers (or PC)</li> + <li>Do not refresh the page while the transfer is being processed</li> + <li>Do not delete the local storage of the browser</li> + </ul> + ` + }, + { + question: + "I can't find solutions to the problems I encountered while using StarkGate. Where can I get help?", + answer: ` + <p>We have opened a + <a href="https://discord.com/login?redirect_to=%2Fchannels%2F793094838509764618%2F957558236662366219" target="_blank">community channel on Discord</a> + to help each other use StarkGate.</p> + ` + }, + { + question: 'Why can’t I use StarkGate with {insert favorite}Token?', + answer: ` + <p> + Initially, StarkGate Alpha will only support ETH. After time period of successful use, we will add support for: + WBTC, USDC, USDT and Dai. All relevant contract addresses, both on Ethereum and StarkNet, are available in this <a href="https://github.com/starkware-libs/starknet-addresses" target="_blank">repo</a>. + Further down the road, we will publish the mechanism for adding support for additional tokens. + </p> + ` + } +]; diff --git a/src/config/strings.js b/src/config/strings.js index 1a287a15..ddda9cb8 100644 --- a/src/config/strings.js +++ b/src/config/strings.js @@ -2,7 +2,9 @@ const strings = { containers: { header: { chain_txt: '{{chainName}} testnet', - wallet_btn_txt: 'Account | {{address}}' + wallet_btn_txt: 'Account | {{address}}', + tab_discord_txt: 'Discord', + tab_faq: 'FAQ' }, footer: { rights_txt: '© 2022 StarkWare Industries Ltd. All Rights Reserved' @@ -15,7 +17,8 @@ const strings = { subtitle_txt: 'Please select {{networkName}} wallet to connect with this dApp:', download_txt: ['Don’t have a wallet?', 'Download Here'], modal_txt: 'Waiting for confirmation from {{walletName}}', - unsupported_browser_txt: `Note - The current version of StarkGate (Alpha) doesn't support your browser. Use Chrome to connect.` + unsupported_browser_txt: + "Note - The current version of StarkGate (Alpha) doesn't support your browser. Use Chrome to connect." }, account: { title_txt: '{{network}} Account', @@ -39,23 +42,24 @@ const strings = { to_txt: 'to', from_txt: 'from', insufficient_balance_error_msg: 'Insufficient balance', - max_amount_error_msg: - 'StarkNet Alpha Limitation: transfer to StarkNet limited to {{maxAmount}} {{symbol}}.', + max_deposit_error_msg: + 'You have exceeded the maximum transfer amount. Please reduce the amount and try again.', max_btn_txt: 'Max', balance_title_txt: 'Available balance', input_placeholder_txt: '0.00', transfer_btn_txt: 'Transfer' + }, + faq: { + title_txt: 'FAQ' } }, modals: { transactionSubmitted: { title_txt: 'Transaction sent', btn_txt: 'View on {{explorer}}', - transfer_to_l1_txt: - 'Your transaction is now being processing on L2. When it will be accepted on-chain, we will promote you to complete your transfer.', - transfer_to_l2_txt: 'Your transaction has been sent to L2!', - complete_transfer_to_l1_txt: 'Your transaction is completed on L1!', - status_txt: 'Follow the transaction status on the right side of the browser.' + transfer_to_l1_txt: 'Your transaction is now being processing on StarkNet.', + transfer_to_l2_txt: 'Your transaction has been successfully sent to StarkNet!', + complete_transfer_to_l1_txt: 'Your transfer is completed on Ethereum!' }, transferProgress: { approval: { @@ -64,26 +68,35 @@ const strings = { }, deposit: { type: 'Transfer in progress', - message: 'Transferring {{amount}} {{symbol}} to L2...' + message: 'Transferring {{amount}} {{symbol}} to StarkNet...' }, initiateWithdraw: { type: 'Initiate transfer', - message: 'Initiating transfer of {{amount}} {{symbol}} from L2...' - }, - waitForAccept: { - type: 'Transaction sent', - message: 'Waiting for transaction to be accepted on L2...' + message: 'Initiating transfer of {{amount}} {{symbol}} from StarkNet...' }, withdraw: { type: 'Transfer in progress', - message: 'Transferring {{amount}} {{symbol}} to L1...' + message: 'Transferring {{amount}} {{symbol}} to Ethereum...' }, waitForConfirm: { type: '{{walletName}}', message: 'Waiting for confirmation from {{walletName}}' }, confirm_txt: 'Confirm this transaction in your wallet', - error_title: 'Transaction error' + max_total_balance_error_msg: + 'We have reached the upper limit of the amount we allow the bridge to hold at this point so it is not possible to use the token you have chosen now.\n\nPlease try later or use another token.', + error_title: 'Transaction error', + limitation_error_title: 'Limitation error' + }, + onboarding: { + title_txt: 'Before takeoff, a few important notes!', + subtitle_txt: 'While using StarkGate Alpha:', + bullets_txt: [ + 'Use Google Chrome', + 'Refrain from switching browsers', + 'Do not refresh the page while the transfer is being processed', + 'Do not delete the local storage of the browser' + ] } }, toasts: { @@ -91,14 +104,14 @@ const strings = { 'This is an ALPHA version of StarkNet, and its Bridge. As such, delays may occur, and catastrophic bugs may lurk. Thanks, OGs, for trying it at this early stage.', transfer_log_link: 'View on Transfer Log', pendingTransfer: { - pending_txt: 'Waiting for transaction to be accepted on L2', - consumed_txt: 'Transaction accepted on L2', - rejected_txt: 'Transaction rejected on L2' + pending_txt: 'Waiting for transaction to be accepted on StarkNet', + consumed_txt: 'Transaction accepted on StarkNet', + rejected_txt: 'Transaction rejected on StarkNet' }, completeTransfer: { - title_txt: 'L2 finished processing your transfer!', + title_txt: 'StarkNet finished processing your transfer!', body_txt: - 'Click on Complete Transfer to transfer the funds from L2 Bridge to your L1 address.', + 'Click on Complete Transfer to transfer the funds from StarkNet Bridge to your Ethereum address.', dismiss_btn_txt: 'Dismiss', complete_transfer_btn_txt: 'Complete Transfer' } diff --git a/src/config/tokens.js b/src/config/tokens.js index b043c951..75b740ae 100644 --- a/src/config/tokens.js +++ b/src/config/tokens.js @@ -6,8 +6,8 @@ const l1tokens = [ symbol: NetworkType.L1.symbol, decimals: 18, bridgeAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0xc3511006C04EF1d78af4C8E0e74Ec18A6E64Ff9e' + [ChainType.L1.MAIN]: '', + [ChainType.L1.GOERLI]: '0xc3511006C04EF1d78af4C8E0e74Ec18A6E64Ff9e' } }, { @@ -15,12 +15,12 @@ const l1tokens = [ symbol: 'WBTC', decimals: 8, bridgeAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0xf29aE3446Ce4688fCc792b232C21D1B9581E7baC' + [ChainType.MAIN]: '', + [ChainType.L1.GOERLI]: '0xf29aE3446Ce4688fCc792b232C21D1B9581E7baC' }, tokenAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0xC04B0d3107736C32e19F1c62b2aF67BE61d63a05' + [ChainType.L1.MAIN]: '', + [ChainType.L1.GOERLI]: '0xC04B0d3107736C32e19F1c62b2aF67BE61d63a05' } }, { @@ -28,12 +28,12 @@ const l1tokens = [ symbol: 'USDC', decimals: 6, bridgeAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0xBA9cE9F22A3Cfa7Fcb5c31f6B2748b1e72C06204' + [ChainType.L1.MAIN]: '', + [ChainType.L1.GOERLI]: '0xBA9cE9F22A3Cfa7Fcb5c31f6B2748b1e72C06204' }, tokenAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x07865c6e87b9f70255377e024ace6630c1eaa37f' + [ChainType.L1.MAIN]: '', + [ChainType.L1.GOERLI]: '0x07865c6e87b9f70255377e024ace6630c1eaa37f' } }, { @@ -41,12 +41,12 @@ const l1tokens = [ symbol: 'USDT', decimals: 6, bridgeAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0xA1f590F18b23EFece02804704E5006E91348C997' + [ChainType.L1.MAIN]: '', + [ChainType.L1.GOERLI]: '0xA1f590F18b23EFece02804704E5006E91348C997' }, tokenAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x509Ee0d083DdF8AC028f2a56731412edD63223B9' + [ChainType.L1.MAIN]: '', + [ChainType.L1.GOERLI]: '0x509Ee0d083DdF8AC028f2a56731412edD63223B9' } }, { @@ -54,12 +54,12 @@ const l1tokens = [ symbol: 'DAI', decimals: 18, bridgeAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0xd8beAa22894Cd33F24075459cFba287a10a104E4' + [ChainType.L1.MAIN]: '', + [ChainType.L1.GOERLI]: '0xd8beAa22894Cd33F24075459cFba287a10a104E4' }, tokenAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x11fE4B6AE13d2a6055C8D9cF65c55bac32B5d844' + [ChainType.L1.MAIN]: '', + [ChainType.L1.GOERLI]: '0x11fE4B6AE13d2a6055C8D9cF65c55bac32B5d844' } }, { @@ -67,12 +67,12 @@ const l1tokens = [ symbol: 'SLF', decimals: 6, bridgeAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x160e7631f22035149A01420cADD1012267551181' + [ChainType.L1.MAIN]: '', + [ChainType.L1.GOERLI]: '0x160e7631f22035149A01420cADD1012267551181' }, tokenAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0xd44BB808bfE43095dBb94c83077766382D63952a' + [ChainType.L1.MAIN]: '', + [ChainType.L1.GOERLI]: '0xd44BB808bfE43095dBb94c83077766382D63952a' } } ]; @@ -83,12 +83,12 @@ const l2tokens = [ symbol: NetworkType.L1.symbol, decimals: 18, bridgeAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x073314940630fd6dcda0d772d4c972c4e0a9946bef9dabf4ef84eda8ef542b82' + [ChainType.L2.MAIN]: '', + [ChainType.L2.GOERLI]: '0x073314940630fd6dcda0d772d4c972c4e0a9946bef9dabf4ef84eda8ef542b82' }, tokenAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7' + [ChainType.L2.MAIN]: '', + [ChainType.L2.GOERLI]: '0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7' } }, { @@ -96,12 +96,12 @@ const l2tokens = [ symbol: 'WBTC', decimals: 8, bridgeAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x72eeb90833bae233a9585f2fa9afc99c187f0a3a82693becd6a4d700b37fc6b' + [ChainType.L2.MAIN]: '', + [ChainType.L2.GOERLI]: '0x72eeb90833bae233a9585f2fa9afc99c187f0a3a82693becd6a4d700b37fc6b' }, tokenAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x12d537dc323c439dc65c976fad242d5610d27cfb5f31689a0a319b8be7f3d56' + [ChainType.L2.MAIN]: '', + [ChainType.L2.GOERLI]: '0x12d537dc323c439dc65c976fad242d5610d27cfb5f31689a0a319b8be7f3d56' } }, { @@ -109,12 +109,12 @@ const l2tokens = [ symbol: 'USDC', decimals: 6, bridgeAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x001d5b64feabc8ac7c839753994f469704c6fabdd45c8fe6d26ed57b5eb79057' + [ChainType.L2.MAIN]: '', + [ChainType.L2.GOERLI]: '0x001d5b64feabc8ac7c839753994f469704c6fabdd45c8fe6d26ed57b5eb79057' }, tokenAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x005a643907b9a4bc6a55e9069c4fd5fd1f5c79a22470690f75556c4736e34426' + [ChainType.L2.MAIN]: '', + [ChainType.L2.GOERLI]: '0x005a643907b9a4bc6a55e9069c4fd5fd1f5c79a22470690f75556c4736e34426' } }, { @@ -122,12 +122,12 @@ const l2tokens = [ symbol: 'USDT', decimals: 6, bridgeAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x71d54658ca3c6ccd84ff958adb7498b2e71ba008e29b643983221ed2bd71b69' + [ChainType.L2.MAIN]: '', + [ChainType.L2.GOERLI]: '0x71d54658ca3c6ccd84ff958adb7498b2e71ba008e29b643983221ed2bd71b69' }, tokenAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x386e8d061177f19b3b485c20e31137e6f6bc497cc635ccdfcab96fadf5add6a' + [ChainType.L2.MAIN]: '', + [ChainType.L2.GOERLI]: '0x386e8d061177f19b3b485c20e31137e6f6bc497cc635ccdfcab96fadf5add6a' } }, { @@ -135,12 +135,12 @@ const l2tokens = [ symbol: 'DAI', decimals: 18, bridgeAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x0278f24c3e74cbf7a375ec099df306289beb0605a346277d200b791a7f811a19' + [ChainType.L2.MAIN]: '', + [ChainType.L2.GOERLI]: '0x0278f24c3e74cbf7a375ec099df306289beb0605a346277d200b791a7f811a19' }, tokenAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x03e85bfbb8e2a42b7bead9e88e9a1b19dbccf661471061807292120462396ec9' + [ChainType.L2.MAIN]: '', + [ChainType.L2.GOERLI]: '0x03e85bfbb8e2a42b7bead9e88e9a1b19dbccf661471061807292120462396ec9' } }, { @@ -148,12 +148,12 @@ const l2tokens = [ symbol: 'SLF', decimals: 6, bridgeAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x00fd2a9843c19436542e0ac7fc7b5cbf1d0b69fc2abea6d68591e46a5ca2d75a' + [ChainType.L2.MAIN]: '', + [ChainType.L2.GOERLI]: '0x00fd2a9843c19436542e0ac7fc7b5cbf1d0b69fc2abea6d68591e46a5ca2d75a' }, tokenAddress: { - [ChainType.MAIN.id]: '', - [ChainType.GOERLI.id]: '0x07a39a50bf689e9430fc81fba0f4d46e245e1657e77455548ed7e32c808cfc10' + [ChainType.L2.MAIN]: '', + [ChainType.L2.GOERLI]: '0x07a39a50bf689e9430fc81fba0f4d46e245e1657e77455548ed7e32c808cfc10' } } ]; diff --git a/src/enums/Breakpoint.js b/src/enums/Breakpoint.js new file mode 100644 index 00000000..d42b367a --- /dev/null +++ b/src/enums/Breakpoint.js @@ -0,0 +1,14 @@ +export const Breakpoint = { + MOBILE: 0, + TABLET: 768, + LAPTOP: 1024, + DESKTOP: 1200 +}; + +export const isMobile = breakpoint => { + return Breakpoint[breakpoint] === Breakpoint.MOBILE; +}; + +export const isTablet = breakpoint => { + return Breakpoint[breakpoint] === Breakpoint.TABLET; +}; diff --git a/src/enums/ChainType.js b/src/enums/ChainType.js index 6c7b0201..09bdceb0 100644 --- a/src/enums/ChainType.js +++ b/src/enums/ChainType.js @@ -1,32 +1,31 @@ -import constants from '../config/constants'; - -const {ETHERSCAN_URL, VOYAGER_URL} = constants; - export const ChainType = { - MAIN: { - id: 1, - name: 'main', - blockExplorerUrl: `https://${ETHERSCAN_URL}`, - l2Id: 'SN_MAIN', - l2IdPrefix: '23448594291968334', - l2BlockExplorerUrl: `https://${VOYAGER_URL}` + L1: { + MAIN: 1, + GOERLI: 5 }, - GOERLI: { - id: 5, - name: 'goerli', - blockExplorerUrl: `https://goerli.${ETHERSCAN_URL}`, - l2Id: 'SN_GOERLI', - l2IdPrefix: '1536727068981429685321', - l2BlockExplorerUrl: `https://goerli.${VOYAGER_URL}` + L2: { + MAIN: 'SN_MAIN', + GOERLI: 'SN_GOERLI' } }; -export const byChainId = id => { - const key = Object.keys(ChainType).find(key => ChainType[key].id === id); - return ChainType[key]; -}; - -export const toChainName = id => { - const chainData = byChainId(id); - return chainData?.name || ''; +export const ChainInfo = { + L1: { + [ChainType.L1.MAIN]: { + NAME: 'main' + }, + [ChainType.L1.GOERLI]: { + NAME: 'goerli' + } + }, + L2: { + [ChainType.L2.MAIN]: { + NAME: 'main', + ID_PREFIX: '23448594291968334' + }, + [ChainType.L2.GOERLI]: { + NAME: 'goerli', + ID_PREFIX: '1536727068981429685321' + } + } }; diff --git a/src/enums/EventName.js b/src/enums/EventName.js new file mode 100644 index 00000000..1b04e125 --- /dev/null +++ b/src/enums/EventName.js @@ -0,0 +1,8 @@ +export const EventName = { + L1: { + LOG_DEPOSIT: 'LogDeposit', + LOG_WITHDRAWAL: 'LogWithdrawal', + LOG_MESSAGE_TO_L2: 'LogMessageToL2' + }, + L2: {} +}; diff --git a/src/enums/MenuType.js b/src/enums/MenuType.js index 05550fc9..91ab0a0c 100644 --- a/src/enums/MenuType.js +++ b/src/enums/MenuType.js @@ -1,5 +1,6 @@ export const MenuType = { - TRANSFER: 0, - SELECT_TOKEN: 1, - ACCOUNT: 2 + TRANSFER: 'TRANSFER', + SELECT_TOKEN: 'SELECT_TOKEN', + ACCOUNT: 'ACCOUNT', + FAQ: 'FAQ' }; diff --git a/src/enums/SelectorName.js b/src/enums/SelectorName.js new file mode 100644 index 00000000..84f47665 --- /dev/null +++ b/src/enums/SelectorName.js @@ -0,0 +1,3 @@ +export const SelectorName = { + HANDLE_DEPOSIT: 'handle_deposit' +}; diff --git a/src/enums/ToastType.js b/src/enums/ToastType.js new file mode 100644 index 00000000..fb1d6111 --- /dev/null +++ b/src/enums/ToastType.js @@ -0,0 +1,5 @@ +export const ToastType = { + CONSUMED_TRANSFER: 'ConsumedTransfer', + REJECTED_TRANSFER: 'RejectedTransfer', + COMPLETE_TRANSFER_TO_L1: 'CompleteTransferToL1' +}; diff --git a/src/enums/TransferError.js b/src/enums/TransferError.js new file mode 100644 index 00000000..833dd556 --- /dev/null +++ b/src/enums/TransferError.js @@ -0,0 +1,4 @@ +export const TransferError = { + TRANSACTION_ERROR: 0, + MAX_TOTAL_BALANCE_ERROR: 1 +}; diff --git a/src/enums/TransferStep.js b/src/enums/TransferStep.js new file mode 100644 index 00000000..7a2c9ac1 --- /dev/null +++ b/src/enums/TransferStep.js @@ -0,0 +1,26 @@ +export const TransferStep = { + APPROVE: 'Approve use funds', + CONFIRM_TX: 'Confirm transaction', + WAIT_FOR_TX: 'Wait for transaction to received', + INITIATE_WITHDRAW: 'Initiate transfer', + WITHDRAW: 'Send L2→L1 transfer', + DEPOSIT: 'Send L1→L2 transfer' +}; + +export const TransferToL2Steps = [ + TransferStep.APPROVE, + TransferStep.CONFIRM_TX, + TransferStep.DEPOSIT +]; + +export const TransferToL1Steps = [ + TransferStep.CONFIRM_TX, + TransferStep.INITIATE_WITHDRAW, + TransferStep.WAIT_FOR_TX +]; + +export const CompleteTransferToL1Steps = [TransferStep.CONFIRM_TX, TransferStep.WITHDRAW]; + +export const stepOf = (step, steps) => { + return steps.indexOf(step); +}; diff --git a/src/enums/index.js b/src/enums/index.js index 8eeff227..d338434f 100644 --- a/src/enums/index.js +++ b/src/enums/index.js @@ -6,3 +6,9 @@ export * from './WalletType'; export * from './WalletStatus'; export * from './TransactionStatus'; export * from './TransactionHashPrefix'; +export * from './EventName'; +export * from './SelectorName'; +export * from './Breakpoint'; +export * from './ToastType'; +export * from './TransferError'; +export * from './TransferStep'; diff --git a/src/hooks/index.js b/src/hooks/index.js index 509acce1..026bcce1 100644 --- a/src/hooks/index.js +++ b/src/hooks/index.js @@ -9,7 +9,8 @@ export * from './useWalletHandlerProvider'; export * from './useFetchData'; export * from './usePrevious'; export * from './useTransfer'; +export * from './useTransferToL1'; +export * from './useTransferToL2'; export * from './useConfig'; -export * from './useEventListener'; export * from './useTransferProgress'; -export * from './useMaxAmount'; +export * from './useTokenConstant'; diff --git a/src/hooks/useAnimation.js b/src/hooks/useAnimation.js index 337e3ab3..1519ade2 100644 --- a/src/hooks/useAnimation.js +++ b/src/hooks/useAnimation.js @@ -3,6 +3,7 @@ import {useState} from 'react'; export const useAnimation = interval => { const [isAnimate, setIsAnimate] = useState(false); const [timeoutId, setTimeoutId] = useState(null); + const startAnimation = () => { if (typeof timeoutId === 'number') { clearTimeout(timeoutId); @@ -10,5 +11,6 @@ export const useAnimation = interval => { setIsAnimate(true); setTimeoutId(setTimeout(() => setIsAnimate(false), interval)); }; + return [isAnimate, startAnimation]; }; diff --git a/src/hooks/useContract.js b/src/hooks/useContract.js index 2dff0b24..99dee7ab 100644 --- a/src/hooks/useContract.js +++ b/src/hooks/useContract.js @@ -2,22 +2,27 @@ import {useCallback, useMemo} from 'react'; import {L1_ERC20_ABI, L1_ERC20_BRIDGE_ABI, L1_ETH_BRIDGE_ABI, L1_MESSAGING_ABI} from '../abis/l1'; import {L2_BRIDGE_ABI, L2_ERC20_ABI} from '../abis/l2'; -import {STARKNET_CONTRACT_ADDRESS} from '../config/contracts'; +import envs from '../config/envs'; import {NetworkType} from '../enums'; import {useL1Token} from '../providers/TokensProvider'; import {useTransfer} from '../providers/TransferProvider'; -import {useL1Wallet, useWallets} from '../providers/WalletsProvider'; +import {useL1Wallet, useL2Wallet} from '../providers/WalletsProvider'; import utils from '../utils'; +const {starknetContractAddress} = envs; + const cache = {}; -export const useContract = (ABI, getContractHandler = utils.blockchain.ethereum.createContract) => { - const {chainId} = useWallets(); +export const useContract = (ABI, chainId, getContractHandler) => { return useCallback( addresses => { try { - const address = addresses[chainId]; - if (!address) { + let address; + if (typeof addresses === 'string') { + address = addresses; + } else if (typeof addresses === 'object') { + address = addresses[chainId]; + } else { return null; } if (!cache[address]) { @@ -28,7 +33,7 @@ export const useContract = (ABI, getContractHandler = utils.blockchain.ethereum. return null; } }, - [ABI, chainId, getContractHandler] + [ABI, getContractHandler] ); }; @@ -36,9 +41,11 @@ export const useTokenContract = () => { const getL1TokenContract = useL1TokenContract(); const getL2TokenContract = useL2TokenContract(); const {isL1} = useTransfer(); + return useCallback( - tokenAddresses => - isL1 ? getL1TokenContract(tokenAddresses) : getL2TokenContract(tokenAddresses), + tokenAddresses => { + return isL1 ? getL1TokenContract(tokenAddresses) : getL2TokenContract(tokenAddresses); + }, [isL1, getL2TokenContract, getL1TokenContract] ); }; @@ -47,43 +54,69 @@ export const useTokenBridgeContract = () => { const getL1TokenBridgeContract = useL1TokenBridgeContract(); const getL2TokenBridgeContract = useL2TokenBridgeContract(); const {isL1} = useTransfer(); + return useCallback( - bridgeAddress => - isL1 ? getL1TokenBridgeContract(bridgeAddress) : getL2TokenBridgeContract(bridgeAddress), + bridgeAddress => { + return isL1 + ? getL1TokenBridgeContract(bridgeAddress) + : getL2TokenBridgeContract(bridgeAddress); + }, [isL1, getL1TokenBridgeContract, getL2TokenBridgeContract] ); }; export const useL2TokenContract = () => { - const getContract = useContract(L2_ERC20_ABI, utils.blockchain.starknet.createContract); + const {chainId} = useL2Wallet(); + const getContract = useContract(L2_ERC20_ABI, chainId, utils.blockchain.starknet.createContract); + return useCallback(tokenAddresses => getContract(tokenAddresses), [getContract]); }; export const useL1TokenContract = () => { - const getContract = useContract(L1_ERC20_ABI); + const {chainId} = useL1Wallet(); + const getContract = useContract(L1_ERC20_ABI, chainId, utils.blockchain.ethereum.createContract); + return useCallback(tokenAddresses => getContract(tokenAddresses), [getContract]); }; export const useStarknetContract = () => { - const getContract = useContract(L1_MESSAGING_ABI); - return useMemo(() => getContract(STARKNET_CONTRACT_ADDRESS), [getContract]); + const {chainId} = useL1Wallet(); + const getContract = useContract( + L1_MESSAGING_ABI, + chainId, + utils.blockchain.ethereum.createContract + ); + + return useMemo(() => getContract(starknetContractAddress), [getContract]); }; export const useL2TokenBridgeContract = () => { - const getContract = useContract(L2_BRIDGE_ABI, utils.blockchain.starknet.createContract); + const {chainId} = useL2Wallet(); + const getContract = useContract(L2_BRIDGE_ABI, chainId, utils.blockchain.starknet.createContract); + return useCallback(bridgeAddress => getContract(bridgeAddress), [getContract]); }; export const useL1TokenBridgeContract = () => { - const getTokenBridgeContract = useContract(L1_ERC20_BRIDGE_ABI); - const getEthBridgeContract = useContract(L1_ETH_BRIDGE_ABI); - const ethToken = useL1Token()(NetworkType.L1.symbol); const {chainId} = useL1Wallet(); + const getTokenBridgeContract = useContract( + L1_ERC20_BRIDGE_ABI, + chainId, + utils.blockchain.ethereum.createContract + ); + const getEthBridgeContract = useContract( + L1_ETH_BRIDGE_ABI, + chainId, + utils.blockchain.ethereum.createContract + ); + const ethToken = useL1Token()(NetworkType.L1.symbol); + return useCallback( - bridgeAddress => - bridgeAddress[chainId] === ethToken.bridgeAddress[chainId] + bridgeAddress => { + return bridgeAddress[chainId] === ethToken.bridgeAddress[chainId] ? getEthBridgeContract(bridgeAddress) - : getTokenBridgeContract(bridgeAddress), - [getTokenBridgeContract, getEthBridgeContract] + : getTokenBridgeContract(bridgeAddress); + }, + [getTokenBridgeContract, getEthBridgeContract, chainId, ethToken] ); }; diff --git a/src/hooks/useEventListener.js b/src/hooks/useEventListener.js deleted file mode 100644 index 3fec1a7d..00000000 --- a/src/hooks/useEventListener.js +++ /dev/null @@ -1,93 +0,0 @@ -import {useCallback} from 'react'; - -import {TransactionHashPrefix} from '../enums'; -import {starknet} from '../libs'; -import {useL1Token, useL2Token} from '../providers/TokensProvider'; -import {useSelectedToken} from '../providers/TransferProvider'; -import {useL1Wallet, useL2Wallet} from '../providers/WalletsProvider'; -import utils from '../utils'; -import {useStarknetContract, useTokenBridgeContract} from './useContract'; -import {useLogger} from './useLogger'; - -const HOOK_MODULE = 'useEventListener'; - -export const useLogMessageToL2Listener = () => { - const logger = useLogger(`${HOOK_MODULE}:useLogMessageToL2Listener`); - const selectedToken = useSelectedToken(); - const getL1Token = useL1Token(); - const getL2Token = useL2Token(); - const starknetContract = useStarknetContract(); - const addEventListener = useEventListener(); - const {chainId} = useL1Wallet(); - - return useCallback(async () => { - logger.log('Registering to LogMessageToL2 event'); - const {symbol} = selectedToken; - const l1BridgeAddress = getL1Token(symbol).bridgeAddress[chainId]; - const l2BridgeAddress = getL2Token(symbol).bridgeAddress[chainId]; - try { - const event = await addEventListener(starknetContract, 'LogMessageToL2', { - filter: { - to_address: l2BridgeAddress, - from_address: l1BridgeAddress, - selector: starknet.stark.getSelectorFromName('handle_deposit') - } - }); - logger.log('Event received', {event}); - const {to_address, from_address, selector, payload, nonce} = event.returnValues; - return utils.blockchain.starknet.getTransactionHash( - TransactionHashPrefix.L1_HANDLER, - from_address, - to_address, - selector, - payload, - chainId, - nonce - ); - } catch (ex) { - logger.error('Event error', {ex}); - return Promise.reject(ex.message); - } - }, [addEventListener, chainId, getL1Token, getL2Token, logger, starknetContract, selectedToken]); -}; - -export const useLogDepositListener = () => { - const logger = useLogger(`${HOOK_MODULE}:useLogDepositListener`); - const selectedToken = useSelectedToken(); - const getTokenBridgeContract = useTokenBridgeContract(); - const addEventListener = useEventListener(); - const {account: l1Account} = useL1Wallet(); - const {account: l2Account} = useL2Wallet(); - - return useCallback(async () => { - logger.log('Registering to LogDeposit event'); - const {bridgeAddress} = selectedToken; - const contract = getTokenBridgeContract(bridgeAddress); - try { - const event = await addEventListener(contract, 'LogDeposit', { - filter: { - l2Recipient: l2Account, - sender: l1Account - } - }); - logger.log('Event received', {event}); - return event.transactionHash; - } catch (ex) { - logger.error('Event error', {ex}); - return Promise.reject(ex.message); - } - }, [addEventListener, l1Account, l2Account, getTokenBridgeContract, logger, selectedToken]); -}; - -export const useEventListener = () => { - return useCallback((contract, event, options) => { - return new Promise((resolve, reject) => { - contract.once(event, options, (error, event) => { - if (error) { - reject(error); - } - resolve(event); - }); - }); - }, []); -}; diff --git a/src/hooks/useFetchData.js b/src/hooks/useFetchData.js index 4fb600d7..83dc82ce 100644 --- a/src/hooks/useFetchData.js +++ b/src/hooks/useFetchData.js @@ -4,6 +4,7 @@ export const useFetchData = (func, deps = []) => { const [isLoading, setIsLoading] = useState(true); const [data, setData] = useState(null); const [error, setError] = useState(null); + useEffect(() => { async function fetch() { setIsLoading(true); @@ -23,6 +24,7 @@ export const useFetchData = (func, deps = []) => { fetch(); return () => (mounted = false); }, deps); + return { isLoading, data, diff --git a/src/hooks/useIsLoading.js b/src/hooks/useIsLoading.js index ae0cc8e8..3b23e253 100644 --- a/src/hooks/useIsLoading.js +++ b/src/hooks/useIsLoading.js @@ -4,6 +4,7 @@ import {useWallet} from 'use-wallet'; export const useIsLoading = deps => { const [isLoading, setIsLoading] = useState(true); const {isConnected, status} = useWallet(); + useEffect(() => { if (!isConnected()) { setIsLoading(false); @@ -12,6 +13,7 @@ export const useIsLoading = deps => { } else { setIsLoading(true); } - }, [deps, status]); + }, [deps, status, isConnected]); + return isLoading; }; diff --git a/src/hooks/useMaxAmount.js b/src/hooks/useMaxAmount.js deleted file mode 100644 index ea15d5d6..00000000 --- a/src/hooks/useMaxAmount.js +++ /dev/null @@ -1,30 +0,0 @@ -import {useAsyncMemo} from 'use-async-memo'; - -import {maxDeposit} from '../api/bridge'; -import {useTransfer} from '../providers/TransferProvider'; -import {useTokenBridgeContract} from './useContract'; - -const cache = {}; - -export const useMaxAmount = () => { - const {symbol, isL1, selectedToken} = useTransfer(); - const getTokenBridgeContract = useTokenBridgeContract(); - - const fetchMaxAmount = async () => { - const {decimals, bridgeAddress} = selectedToken; - const contract = getTokenBridgeContract(bridgeAddress); - return await maxDeposit({decimals, contract}); - }; - - return useAsyncMemo(async () => { - if (symbol && isL1) { - if (!cache[symbol]) { - const value = await fetchMaxAmount(); - cache[symbol] = value; - return value; - } - return cache[symbol]; - } - return null; - }, [symbol, isL1]); -}; diff --git a/src/hooks/usePrevious.js b/src/hooks/usePrevious.js index 63cf9f0d..c8526289 100644 --- a/src/hooks/usePrevious.js +++ b/src/hooks/usePrevious.js @@ -2,8 +2,10 @@ import {useEffect, useRef} from 'react'; export const usePrevious = value => { const ref = useRef(); + useEffect(() => { ref.current = value; }); + return ref.current; }; diff --git a/src/hooks/useTokenBalance.js b/src/hooks/useTokenBalance.js index 6f2818c6..c466d3f8 100644 --- a/src/hooks/useTokenBalance.js +++ b/src/hooks/useTokenBalance.js @@ -10,14 +10,16 @@ export const useTokenBalance = account => { const getL1TokenBalance = useL1TokenBalance(account); const {isL1} = useTransfer(); return useCallback( - tokenAddresses => - isL1 ? getL1TokenBalance(tokenAddresses) : getL2TokenBalance(tokenAddresses), - [isL1, account, getL1TokenBalance, getL2TokenBalance] + tokenAddresses => { + return isL1 ? getL1TokenBalance(tokenAddresses) : getL2TokenBalance(tokenAddresses); + }, + [isL1, getL1TokenBalance, getL2TokenBalance] ); }; export const useL2TokenBalance = account => { const getContract = useL2TokenContract(); + return useCallback( async token => { const {tokenAddress, decimals} = token; @@ -29,12 +31,20 @@ export const useL2TokenBalance = account => { export const useL1TokenBalance = account => { const getContract = useL1TokenContract(); + return useCallback( async token => { const {tokenAddress, decimals} = token; return utils.token.isEth(token) ? await ethBalanceOf(account) - : await balanceOf({account, decimals, contract: getContract(tokenAddress)}, true); + : await balanceOf( + { + account, + decimals, + contract: getContract(tokenAddress) + }, + true + ); }, [account, getContract] ); diff --git a/src/hooks/useTokenConstant.js b/src/hooks/useTokenConstant.js new file mode 100644 index 00000000..2a7daef6 --- /dev/null +++ b/src/hooks/useTokenConstant.js @@ -0,0 +1,39 @@ +import {useAsyncMemo} from 'use-async-memo'; + +import {maxDeposit, maxTotalBalance} from '../api/bridge'; +import {useTransfer} from '../providers/TransferProvider'; +import {useTokenBridgeContract} from './useContract'; + +const cache = {}; + +export const useMaxDeposit = () => { + return useTokenConstant('maxDeposit', maxDeposit); +}; + +export const useMaxTotalBalance = () => { + return useTokenConstant('maxTotalBalance', maxTotalBalance); +}; + +const useTokenConstant = (methodName, methodHandler) => { + const {symbol, isL1, selectedToken} = useTransfer(); + const getTokenBridgeContract = useTokenBridgeContract(); + + const fetchTokenConstant = () => { + const {decimals, bridgeAddress} = selectedToken; + const contract = getTokenBridgeContract(bridgeAddress); + return methodHandler({decimals, contract}); + }; + + return useAsyncMemo(async () => { + if (symbol && isL1) { + cache[methodName] = cache[methodName] || {}; + if (!cache[methodName][symbol]) { + const value = await fetchTokenConstant(); + cache[methodName][symbol] = value; + return value; + } + return cache[methodName][symbol]; + } + return null; + }, [symbol, isL1, selectedToken, methodHandler, methodName]); +}; diff --git a/src/hooks/useTransfer.js b/src/hooks/useTransfer.js index dbec7446..9500a867 100644 --- a/src/hooks/useTransfer.js +++ b/src/hooks/useTransfer.js @@ -1,252 +1,24 @@ -import {useCallback} from 'react'; - -import {deposit, depositEth, initiateWithdraw, withdraw} from '../api/bridge'; -import {allowance, approve} from '../api/erc20'; -import {ActionType, TransactionStatus} from '../enums'; -import {starknet} from '../libs'; import { useErrorModal, useHideModal, useProgressModal, useTransactionSubmittedModal } from '../providers/ModalProvider'; -import {useL1Token, useTokens} from '../providers/TokensProvider'; -import {useAmount, useSelectedToken} from '../providers/TransferProvider'; +import {useTokens} from '../providers/TokensProvider'; +import {useAmount} from '../providers/TransferProvider'; import {useTransfersLog} from '../providers/TransfersLogProvider'; -import {useL1Wallet, useL2Wallet} from '../providers/WalletsProvider'; -import utils from '../utils'; -import {useL1TokenBridgeContract, useTokenBridgeContract, useTokenContract} from './useContract'; -import {useLogMessageToL2Listener} from './useEventListener'; -import {useLogger} from './useLogger'; -import {useTransferProgress} from './useTransferProgress'; - -const HOOK_MODULE = 'useTransfer'; - -export const useTransferToL2 = () => { - const logger = useLogger(`${HOOK_MODULE}:useTransferToL2`); - const {account: l1Account, chainId, config: l1Config} = useL1Wallet(); - const {account: l2Account} = useL2Wallet(); - const {handleProgress, handleData, handleError} = useTransfer(); - const selectedToken = useSelectedToken(); - const getTokenContract = useTokenContract(); - const getTokenBridgeContract = useTokenBridgeContract(); - const progressOptions = useTransferProgress(); - const addLogMessageToL2Listener = useLogMessageToL2Listener(); - - return useCallback( - async amount => { - try { - logger.log('TransferToL2 called'); - const {symbol, decimals, tokenAddress, bridgeAddress, name} = selectedToken; - const isEthToken = utils.token.isEth(symbol); - const bridgeContract = getTokenBridgeContract(bridgeAddress); - const depositHandler = isEthToken ? depositEth : deposit; - logger.log('Prepared contract and handler', {isEthToken, bridgeContract, depositHandler}); - if (!isEthToken) { - logger.log('Token needs approval', {isEthToken}); - const tokenContract = getTokenContract(tokenAddress); - handleProgress(progressOptions.approval(symbol)); - const allow = await allowance({ - owner: l1Account, - spender: bridgeAddress[chainId], - decimals, - contract: tokenContract - }); - logger.log('Current allow value', {allow}); - if (allow < amount) { - logger.log('Allow value is smaller then amount, sending approve tx', {amount}); - await approve({ - spender: bridgeAddress[chainId], - value: starknet.constants.MASK_250, - contract: tokenContract, - options: {from: l1Account} - }); - } - } - handleProgress(progressOptions.waitForConfirm(l1Config.name)); - const logMessageToL2EventPromise = addLogMessageToL2Listener(); - logger.log('Calling deposit'); - const depositPromise = await depositHandler({ - recipient: l2Account, - amount, - decimals, - contract: bridgeContract, - options: {from: l1Account}, - emitter: (error, transactionHash) => { - if (!error) { - logger.log('Tx hash received', {transactionHash}); - handleProgress(progressOptions.deposit(amount, symbol)); - } - } - }); - const [{transactionHash: l1hash}, l2hash] = await Promise.all([ - depositPromise, - logMessageToL2EventPromise - ]); - logger.log('Done', {l1hash, l2hash}); - handleData({ - type: ActionType.TRANSFER_TO_L2, - sender: l1Account, - recipient: l2Account, - name, - symbol, - amount, - l1hash, - l2hash - }); - } catch (ex) { - logger.error(ex.message, {ex}); - handleError(progressOptions.error(ex)); - } - }, - [ - selectedToken, - addLogMessageToL2Listener, - chainId, - l1Account, - l1Config, - getTokenBridgeContract, - getTokenContract, - handleData, - handleError, - handleProgress, - logger, - progressOptions, - l2Account - ] - ); -}; - -export const useTransferToL1 = () => { - const logger = useLogger(`${HOOK_MODULE}:useTransferToL1`); - const {account: l1Account} = useL1Wallet(); - const {account: l2Account, config: l2Config} = useL2Wallet(); - const selectedToken = useSelectedToken(); - const getTokenBridgeContract = useTokenBridgeContract(); - const {handleProgress, handleData, handleError} = useTransfer(); - const progressOptions = useTransferProgress(); - - return useCallback( - async amount => { - try { - logger.log('TransferToL1 called'); - const {decimals, bridgeAddress, name, symbol} = selectedToken; - const bridgeContract = getTokenBridgeContract(bridgeAddress); - logger.log('Prepared contract', {bridgeContract}); - handleProgress(progressOptions.waitForConfirm(l2Config.name)); - logger.log('Calling initiate withdraw'); - const {transaction_hash} = await initiateWithdraw({ - recipient: l1Account, - amount, - decimals, - contract: bridgeContract - }); - logger.log('Tx hash received', {transaction_hash}); - handleProgress(progressOptions.initiateWithdraw(amount, symbol)); - logger.log('Waiting for tx to be received on L2'); - await utils.blockchain.starknet.waitForTransaction( - transaction_hash, - TransactionStatus.RECEIVED - ); - handleProgress(progressOptions.waitForAccept()); - logger.log('Waiting for tx to be accepted on L2'); - await utils.blockchain.starknet.waitForTransaction( - transaction_hash, - TransactionStatus.PENDING - ); - logger.log('Done', {transaction_hash}); - handleData({ - type: ActionType.TRANSFER_TO_L1, - sender: l2Account, - recipient: l1Account, - name, - symbol, - amount, - l2hash: transaction_hash - }); - } catch (ex) { - logger.error(ex.message, {ex}); - handleError(progressOptions.error(ex)); - } - }, - [ - l1Account, - getTokenBridgeContract, - handleData, - handleError, - handleProgress, - logger, - progressOptions, - selectedToken, - l2Account, - l2Config - ] - ); -}; - -export const useCompleteTransferToL1 = () => { - const logger = useLogger(`${HOOK_MODULE}:useCompleteTransferToL1`); - const {account: l1Account, config: l1Config} = useL1Wallet(); - const {handleProgress, handleData, handleError} = useTransfer(); - const progressOptions = useTransferProgress(); - const getL1Token = useL1Token(); - const getL1TokenBridgeContract = useL1TokenBridgeContract(); - - return useCallback( - async transfer => { - try { - logger.log('CompleteTransferToL1 called'); - const {symbol, amount} = transfer; - const l1Token = getL1Token(symbol); - const {bridgeAddress, decimals} = l1Token; - const tokenBridgeContract = getL1TokenBridgeContract(bridgeAddress); - logger.log('Prepared token and bridge contract', {l1Token, tokenBridgeContract}); - handleProgress(progressOptions.waitForConfirm(l1Config.name)); - logger.log('Calling withdraw'); - const {transactionHash} = await withdraw({ - recipient: l1Account, - amount, - decimals, - contract: tokenBridgeContract, - emitter: (error, transactionHash) => { - if (!error) { - logger.log('Tx hash received', {transactionHash}); - handleProgress(progressOptions.withdraw(amount, symbol)); - } - } - }); - logger.log('Done', {transactionHash}); - handleData({...transfer, l1hash: transactionHash}); - } catch (ex) { - logger.error(ex.message, {ex}); - handleError(progressOptions.error(ex)); - } - }, - [ - l1Account, - l1Config, - getL1Token, - getL1TokenBridgeContract, - handleData, - handleError, - handleProgress, - logger, - progressOptions - ] - ); -}; -const useTransfer = () => { - const showProgressModal = useProgressModal(); +export const useTransfer = steps => { + const showProgressModal = useProgressModal(steps); const showErrorModal = useErrorModal(); const hideModal = useHideModal(); - const showTransactionSubmittedModal = useTransactionSubmittedModal(); - const {addTransfer} = useTransfersLog(); + const showTransactionSubmittedModal = useTransactionSubmittedModal(steps); + const {addTransfer, updateTransfer} = useTransfersLog(); const {updateTokenBalance} = useTokens(); const [, , clearAmount] = useAmount(); const handleProgress = progress => { - showProgressModal(progress.type, progress.message); + showProgressModal(progress.type, progress.message, progress.activeStep); }; const handleError = error => { @@ -254,10 +26,10 @@ const useTransfer = () => { showErrorModal(error.type, error.message); }; - const handleData = data => { - addTransfer(data); - showTransactionSubmittedModal(data); - updateTokenBalance(data.symbol); + const handleData = transfer => { + transfer.id ? updateTransfer(transfer) : addTransfer(transfer); + showTransactionSubmittedModal(transfer); + updateTokenBalance(transfer.symbol); clearAmount(); }; diff --git a/src/hooks/useTransferProgress.js b/src/hooks/useTransferProgress.js index a8fe5452..3dd960f0 100644 --- a/src/hooks/useTransferProgress.js +++ b/src/hooks/useTransferProgress.js @@ -1,60 +1,67 @@ import {useMemo} from 'react'; +import {TransferError} from '../enums'; import utils from '../utils'; export const useTransferProgress = () => { const transferProgressStrings = utils.getTranslation('modals.transferProgress'); + return useMemo( () => ({ - approval: symbol => { + approval: (symbol, activeStep) => { const {approval} = transferProgressStrings; const message = utils.object.evaluate(approval.message, {symbol}); return { type: approval.type, - message + message, + activeStep }; }, - deposit: (amount, symbol) => { + deposit: (amount, symbol, activeStep) => { const {deposit} = transferProgressStrings; const message = utils.object.evaluate(deposit.message, {amount, symbol}); return { type: deposit.type, - message + message, + activeStep }; }, - initiateWithdraw: (amount, symbol) => { + initiateWithdraw: (amount, symbol, activeStep) => { const {initiateWithdraw} = transferProgressStrings; const message = utils.object.evaluate(initiateWithdraw.message, {amount, symbol}); return { type: initiateWithdraw.type, - message + message, + activeStep }; }, - waitForConfirm: walletName => { + waitForConfirm: (walletName, activeStep) => { const {waitForConfirm} = transferProgressStrings; const type = utils.object.evaluate(waitForConfirm.type, {walletName}); const message = utils.object.evaluate(waitForConfirm.message, {walletName}); return { type, - message - }; - }, - waitForAccept: () => { - const {waitForAccept} = transferProgressStrings; - return { - type: waitForAccept.type, - message: waitForAccept.message + message, + activeStep }; }, - withdraw: (amount, symbol) => { + withdraw: (amount, symbol, activeStep) => { const {withdraw} = transferProgressStrings; const message = utils.object.evaluate(withdraw.message, {amount, symbol}); return { type: withdraw.type, - message + message, + activeStep }; }, - error: err => { + error: (type, err) => { + if (type === TransferError.MAX_TOTAL_BALANCE_ERROR) { + const {limitation_error_title, max_total_balance_error_msg} = transferProgressStrings; + return { + type: limitation_error_title, + message: max_total_balance_error_msg + }; + } const {error_title} = transferProgressStrings; return { type: error_title, @@ -62,6 +69,6 @@ export const useTransferProgress = () => { }; } }), - [] + [transferProgressStrings] ); }; diff --git a/src/hooks/useTransferToL1.js b/src/hooks/useTransferToL1.js new file mode 100644 index 00000000..e26d2613 --- /dev/null +++ b/src/hooks/useTransferToL1.js @@ -0,0 +1,198 @@ +import {useCallback} from 'react'; + +import {track, TrackEvent} from '../analytics'; +import {initiateWithdraw, withdraw} from '../api/bridge'; +import { + ActionType, + CompleteTransferToL1Steps, + stepOf, + TransactionStatus, + TransferError, + TransferStep, + TransferToL1Steps +} from '../enums'; +import {useLogWithdrawalListener} from '../providers/EventManagerProvider'; +import {useL1Token} from '../providers/TokensProvider'; +import {useSelectedToken} from '../providers/TransferProvider'; +import {useL1Wallet, useL2Wallet} from '../providers/WalletsProvider'; +import utils from '../utils'; +import {useL1TokenBridgeContract, useTokenBridgeContract} from './useContract'; +import {useLogger} from './useLogger'; +import {useTransfer} from './useTransfer'; +import {useTransferProgress} from './useTransferProgress'; + +export const useTransferToL1 = () => { + const logger = useLogger('useTransferToL1'); + const {account: l1Account} = useL1Wallet(); + const {account: l2Account, config: l2Config} = useL2Wallet(); + const selectedToken = useSelectedToken(); + const getTokenBridgeContract = useTokenBridgeContract(); + const {handleProgress, handleData, handleError} = useTransfer(TransferToL1Steps); + const progressOptions = useTransferProgress(); + + return useCallback( + async amount => { + const {decimals, bridgeAddress, name, symbol} = selectedToken; + + const sendInitiateWithdraw = () => { + track(TrackEvent.TRANSFER.TRANSFER_TO_L1_INITIATED, { + from_address: l2Account, + to_address: l1Account, + amount, + symbol + }); + const bridgeContract = getTokenBridgeContract(bridgeAddress); + return initiateWithdraw({ + recipient: l1Account, + contract: bridgeContract, + amount, + decimals + }); + }; + + try { + logger.log('TransferToL1 called'); + handleProgress( + progressOptions.waitForConfirm( + l2Config.name, + stepOf(TransferStep.CONFIRM_TX, TransferToL1Steps) + ) + ); + logger.log('Calling initiate withdraw'); + const {transaction_hash: l2hash} = await sendInitiateWithdraw(); + logger.log('Tx hash received', {l2hash}); + handleProgress( + progressOptions.initiateWithdraw( + amount, + symbol, + stepOf(TransferStep.INITIATE_WITHDRAW, TransferToL1Steps) + ) + ); + logger.log('Waiting for tx to be received on L2'); + await utils.blockchain.starknet.waitForTransaction(l2hash, TransactionStatus.RECEIVED); + logger.log('Done', {l2hash}); + track(TrackEvent.TRANSFER.TRANSFER_TO_L1_SUCCESS, { + l2hash + }); + handleData({ + type: ActionType.TRANSFER_TO_L1, + sender: l2Account, + recipient: l1Account, + name, + symbol, + amount, + l2hash + }); + } catch (ex) { + logger.error(ex.message, {ex}); + track(TrackEvent.TRANSFER.TRANSFER_TO_L1_ERROR, ex); + handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, ex)); + } + }, + [ + l1Account, + l2Account, + getTokenBridgeContract, + handleData, + handleError, + handleProgress, + logger, + progressOptions, + selectedToken, + l2Config + ] + ); +}; + +export const useCompleteTransferToL1 = () => { + const logger = useLogger('useCompleteTransferToL1'); + const {account: l1Account, config: l1Config} = useL1Wallet(); + const {handleProgress, handleData, handleError} = useTransfer(CompleteTransferToL1Steps); + const progressOptions = useTransferProgress(); + const getL1Token = useL1Token(); + const getL1TokenBridgeContract = useL1TokenBridgeContract(); + const addLogWithdrawalListener = useLogWithdrawalListener(); + + return useCallback( + async transfer => { + const {symbol, amount, l2hash} = transfer; + + const sendWithdrawal = () => { + track(TrackEvent.TRANSFER.COMPLETE_TRANSFER_TO_L1_INITIATED, { + to_address: l1Account, + l2hash, + amount, + symbol + }); + const {bridgeAddress, decimals} = getL1Token(symbol); + const tokenBridgeContract = getL1TokenBridgeContract(bridgeAddress); + return withdraw({ + recipient: l1Account, + contract: tokenBridgeContract, + emitter: onTransactionHash, + amount, + decimals + }); + }; + + const onTransactionHash = (error, transactionHash) => { + if (!error) { + logger.log('Tx signed', {transactionHash}); + handleProgress( + progressOptions.withdraw( + amount, + symbol, + stepOf(TransferStep.WITHDRAW, CompleteTransferToL1Steps) + ) + ); + } else { + track(TrackEvent.TRANSFER.COMPLETE_TRANSFER_TO_L1_REJECT, error); + logger.error(error.message); + handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, error)); + } + }; + + const onLogWithdrawal = (error, event) => { + if (!error) { + const {transactionHash: l1hash} = event; + logger.log('Done', l1hash); + track(TrackEvent.TRANSFER.COMPLETE_TRANSFER_TO_L1_SUCCESS, {l1hash}); + handleData({...transfer, l1hash}); + } else { + track(TrackEvent.TRANSFER.COMPLETE_TRANSFER_TO_L1_ERROR, error); + logger.error(error.message); + handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, error)); + } + }; + + try { + logger.log('CompleteTransferToL1 called'); + handleProgress( + progressOptions.waitForConfirm( + l1Config.name, + stepOf(TransferStep.CONFIRM_TX, CompleteTransferToL1Steps) + ) + ); + addLogWithdrawalListener(onLogWithdrawal); + logger.log('Calling withdraw'); + await sendWithdrawal(); + } catch (ex) { + track(TrackEvent.TRANSFER.COMPLETE_TRANSFER_TO_L1_ERROR, ex); + logger.error(ex.message, {ex}); + handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, ex)); + } + }, + [ + l1Account, + l1Config, + getL1Token, + getL1TokenBridgeContract, + handleData, + handleError, + handleProgress, + logger, + progressOptions, + addLogWithdrawalListener + ] + ); +}; diff --git a/src/hooks/useTransferToL2.js b/src/hooks/useTransferToL2.js new file mode 100644 index 00000000..dd1128e3 --- /dev/null +++ b/src/hooks/useTransferToL2.js @@ -0,0 +1,199 @@ +import {useCallback} from 'react'; + +import {track, TrackEvent} from '../analytics'; +import {deposit, depositEth} from '../api/bridge'; +import {allowance, approve, balanceOf, ethBalanceOf} from '../api/erc20'; +import { + ActionType, + stepOf, + TransactionHashPrefix, + TransferError, + TransferStep, + TransferToL2Steps +} from '../enums'; +import {starknet} from '../libs'; +import {useLogMessageToL2Listener} from '../providers/EventManagerProvider'; +import {useSelectedToken} from '../providers/TransferProvider'; +import {useL1Wallet, useL2Wallet} from '../providers/WalletsProvider'; +import utils from '../utils'; +import {useTokenBridgeContract, useTokenContract} from './useContract'; +import {useLogger} from './useLogger'; +import {useMaxTotalBalance} from './useTokenConstant'; +import {useTransfer} from './useTransfer'; +import {useTransferProgress} from './useTransferProgress'; + +export const useTransferToL2 = () => { + const logger = useLogger('useTransferToL2'); + const {account: l1Account, chainId: l1ChainId, config: l1Config} = useL1Wallet(); + const {account: l2Account, chainId: l2ChainId} = useL2Wallet(); + const {handleProgress, handleData, handleError} = useTransfer(TransferToL2Steps); + const selectedToken = useSelectedToken(); + const getTokenContract = useTokenContract(); + const getTokenBridgeContract = useTokenBridgeContract(); + const progressOptions = useTransferProgress(); + const addLogMessageToL2Listener = useLogMessageToL2Listener(); + const maxTotalBalance = useMaxTotalBalance(); + + return useCallback( + async amount => { + const {symbol, decimals, name, tokenAddress, bridgeAddress} = selectedToken; + const tokenContract = getTokenContract(tokenAddress); + const bridgeContract = getTokenBridgeContract(bridgeAddress); + const isEthToken = utils.token.isEth(symbol); + const tokenBridgeAddress = bridgeAddress[l1ChainId]; + + const readAllowance = () => { + return allowance({ + owner: l1Account, + spender: tokenBridgeAddress, + contract: tokenContract, + decimals + }); + }; + + const sendApproval = async () => { + return approve({ + spender: tokenBridgeAddress, + value: starknet.constants.MASK_250, + contract: tokenContract, + options: {from: l1Account} + }); + }; + + const sendDeposit = () => { + track(TrackEvent.TRANSFER.TRANSFER_TO_L2_INITIATED, { + from_address: l1Account, + to_address: l2Account, + amount, + symbol + }); + const depositHandler = isEthToken ? depositEth : deposit; + return depositHandler({ + recipient: l2Account, + contract: bridgeContract, + options: {from: l1Account}, + emitter: onTransactionHash, + amount, + decimals + }); + }; + + const onTransactionHash = (error, transactionHash) => { + if (!error) { + logger.log('Tx signed', {transactionHash}); + handleProgress( + progressOptions.deposit(amount, symbol, stepOf(TransferStep.DEPOSIT, TransferToL2Steps)) + ); + } else { + track(TrackEvent.TRANSFER.TRANSFER_TO_L2_REJECT, error); + logger.error(error.message); + handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, error)); + } + }; + + const onLogMessageToL2 = (error, event) => { + if (!error) { + logger.log('Done', event.transactionHash); + handleData({ + type: ActionType.TRANSFER_TO_L2, + sender: l1Account, + recipient: l2Account, + name, + symbol, + amount, + ...extractTransactionsHashFromEvent(event) + }); + } else { + track(TrackEvent.TRANSFER.TRANSFER_TO_L2_ERROR, error); + logger.error(error.message); + handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, error)); + } + }; + + const extractTransactionsHashFromEvent = event => { + const {to_address, from_address, selector, payload, nonce} = event.returnValues; + const l1hash = event.transactionHash; + const l2hash = utils.blockchain.starknet.getTransactionHash( + TransactionHashPrefix.L1_HANDLER, + from_address, + to_address, + selector, + payload, + l2ChainId, + nonce + ); + track(TrackEvent.TRANSFER.TRANSFER_TO_L2_SUCCESS, {l1hash, l2hash}); + return { + l1hash, + l2hash + }; + }; + + const isMaxBalanceExceeded = async () => { + const tokenBridgeBalance = await (isEthToken + ? ethBalanceOf(tokenBridgeAddress) + : balanceOf({ + account: tokenBridgeAddress, + decimals, + contract: tokenContract + })); + return maxTotalBalance < tokenBridgeBalance + Number(amount); + }; + + try { + logger.log('TransferToL2 called'); + if (await isMaxBalanceExceeded()) { + track( + TrackEvent.TRANSFER.TRANSFER_TO_L2_REJECT, + progressOptions.error(TransferError.MAX_TOTAL_BALANCE_ERROR) + ); + logger.error(`Prevented ${symbol} deposit due to max balance exceeded`); + handleError(progressOptions.error(TransferError.MAX_TOTAL_BALANCE_ERROR)); + return; + } + if (!isEthToken) { + logger.log('Token needs approval'); + handleProgress( + progressOptions.approval(symbol, stepOf(TransferStep.APPROVE, TransferToL2Steps)) + ); + const allow = await readAllowance(); + logger.log('Current allow value', {allow}); + if (allow < amount) { + logger.log('Allow value is smaller then amount, sending approve tx...', {amount}); + await sendApproval(); + } + } + handleProgress( + progressOptions.waitForConfirm( + l1Config.name, + stepOf(TransferStep.CONFIRM_TX, TransferToL2Steps) + ) + ); + addLogMessageToL2Listener(onLogMessageToL2); + logger.log('Calling deposit'); + await sendDeposit(); + } catch (ex) { + track(TrackEvent.TRANSFER.TRANSFER_TO_L2_ERROR, ex); + logger.error(ex.message, {ex}); + handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, ex)); + } + }, + [ + selectedToken, + addLogMessageToL2Listener, + l1ChainId, + l2ChainId, + l1Account, + l2Account, + l1Config, + getTokenBridgeContract, + getTokenContract, + handleData, + handleError, + handleProgress, + logger, + progressOptions, + maxTotalBalance + ] + ); +}; diff --git a/src/hooks/useWalletHandlerProvider.js b/src/hooks/useWalletHandlerProvider.js index 3a1d8cb7..2ce88eea 100644 --- a/src/hooks/useWalletHandlerProvider.js +++ b/src/hooks/useWalletHandlerProvider.js @@ -10,6 +10,7 @@ const SUPPORTED_HANDLERS_REGISTRY = { export const useWalletHandlerProvider = () => { const [handlers, setHandlers] = useState([]); + useEffect(() => { const walletHandlers = []; WalletsConfig.forEach(walletConfig => { @@ -21,9 +22,11 @@ export const useWalletHandlerProvider = () => { }); setHandlers(walletHandlers); }, []); + return useCallback( - type => - type ? handlers.filter(walletHandler => walletHandler.config.type === type) : handlers, + type => { + return type ? handlers.filter(walletHandler => walletHandler.config.type === type) : handlers; + }, [handlers] ); }; diff --git a/src/hooks/useWindowSize.js b/src/hooks/useWindowSize.js index 660e2afc..28412bc2 100644 --- a/src/hooks/useWindowSize.js +++ b/src/hooks/useWindowSize.js @@ -5,6 +5,7 @@ export const useWindowSize = () => { width: undefined, height: undefined }); + useEffect(() => { function handleResize() { setWindowSize({ @@ -16,5 +17,6 @@ export const useWindowSize = () => { handleResize(); return () => window.removeEventListener('resize', handleResize); }, []); // Empty array ensures that effect is only run on mount + return windowSize; }; diff --git a/src/index.js b/src/index.js index 0c24bc90..3672d3a7 100644 --- a/src/index.js +++ b/src/index.js @@ -1,15 +1,23 @@ +import splitbee from '@splitbee/web'; import React from 'react'; import ReactDOM from 'react-dom'; import {App} from './App'; import {ModalWrapper} from './components/UI'; +import envs from './config/envs'; import './index.scss'; import {Providers} from './providers'; import utils from './utils'; +const {env} = envs; + utils.printPackageInfo(process.env.REACT_APP_NAME, process.env.REACT_APP_VERSION, '#734d7e'); -if (process.env.NODE_ENV === 'development' || utils.browser.getUrlParameter('debugApp')) { +if (env !== 'development') { + splitbee.init(); +} + +if (env === 'development' || utils.browser.getUrlParameter('debugApp')) { utils.logger.setLogLevel(utils.logger.getLogger().DEBUG); } diff --git a/src/index.scss b/src/index.scss index b388a3c9..3c6671c2 100644 --- a/src/index.scss +++ b/src/index.scss @@ -3,12 +3,61 @@ @import './styles/fonts.module'; @font-face { - font-family: 'Inter'; + font-family: Inter; + font-weight: 100; + font-style: normal; + src: url('assets/fonts/Inter/Inter-Thin.ttf') format('truetype'); +} + +@font-face { + font-family: Inter; + font-weight: 200; + font-style: normal; + src: url('assets/fonts/Inter/Inter-ExtraLight.ttf') format('truetype'); +} + +@font-face { + font-family: Inter; + font-weight: 300; + font-style: normal; + src: url('assets/fonts/Inter/Inter-Light.ttf') format('truetype'); +} + +@font-face { + font-family: Inter; font-weight: 400; font-style: normal; src: url('assets/fonts/Inter/Inter-Regular.ttf') format('truetype'); } +@font-face { + font-family: Inter; + font-weight: 500; + font-style: normal; + src: url('assets/fonts/Inter/Inter-Medium.ttf') format('truetype'); +} + +@font-face { + font-family: Inter; + font-weight: 600; + font-style: normal; + src: url('assets/fonts/Inter/Inter-SemiBold.ttf') format('truetype'); +} + +@font-face { + font-family: Inter; + font-weight: 700; + font-style: normal; + src: url('assets/fonts/Inter/Inter-Bold.ttf') format('truetype'); +} + +@font-face { + font-family: Inter; + font-weight: 800; + font-style: normal; + src: url('assets/fonts/Inter/Inter-ExtraBold.ttf') format('truetype'); +} + html, body { padding: 0; diff --git a/src/providers/EventManagerProvider/EventManagerProvider.js b/src/providers/EventManagerProvider/EventManagerProvider.js new file mode 100644 index 00000000..331c2858 --- /dev/null +++ b/src/providers/EventManagerProvider/EventManagerProvider.js @@ -0,0 +1,170 @@ +import PropTypes from 'prop-types'; +import React, {useEffect} from 'react'; + +import {EventName, SelectorName} from '../../enums'; +import {useL1TokenBridgeContract, useLogger, useStarknetContract} from '../../hooks'; +import {starknet} from '../../libs'; +import {useL1Tokens, useL2Tokens} from '../TokensProvider'; +import {useL1Wallet, useL2Wallet} from '../WalletsProvider'; +import {EventManagerContext} from './event-manager-context'; + +const listeners = {}; + +const eventsQueue = {}; + +export const EventManagerProvider = ({children}) => { + const logger = useLogger(EventManagerProvider.displayName); + const starknetContract = useStarknetContract(); + const getTokenBridgeContract = useL1TokenBridgeContract(); + const {account: l1Account, chainId: l1ChainId} = useL1Wallet(); + const {account: l2Account, chainId: l2ChainId} = useL2Wallet(); + const l1Tokens = useL1Tokens(); + const l2Tokens = useL2Tokens(); + + useEffect(() => { + addLogDepositWithdrawalListeners(); + addLogMessageToL2Listener(); + }, []); + + const addListener = (eventName, callback) => { + logger.log(`Registered to ${eventName} event.`); + if (!listeners[eventName]) { + listeners[eventName] = []; + } + listeners[eventName].push(callback); + }; + + const insertEventToQueue = (eventName, event) => { + logger.log(`Insert event ${eventName} to queue.`); + if (!eventsQueue[eventName]) { + eventsQueue[eventName] = []; + } + eventsQueue[eventName].push(event); + }; + + const emitListeners = (eventName, error, event) => { + logger.log(`Event ${eventName} emitted to listeners.`, event); + listeners[eventName]?.forEach(listener => listener(error, event)); + cleanListeners(eventName); + }; + + const cleanListeners = eventName => { + logger.log(`Clean listeners for event ${eventName}.`); + listeners[eventName] = []; + }; + + const removeFromQueue = (eventName, index) => { + logger.log(`Remove event ${eventName} at index ${index} from queue.`); + eventsQueue[eventName].splice(index, 1); + }; + + const onLogWithdrawal = (error, event) => { + logger.log(`Event ${EventName.L1.LOG_WITHDRAWAL} dispatched internal.`, {error, event}); + emitListeners(EventName.L1.LOG_WITHDRAWAL, error, event); + }; + + const onLogDeposit = (error, event) => { + logger.log(`Event ${EventName.L1.LOG_DEPOSIT} dispatched internal.`, {error, event}); + const matchedLogMessageToL2EventIndex = eventsQueue[EventName.L1.LOG_MESSAGE_TO_L2]?.findIndex( + e => e.transactionHash === event.transactionHash + ); + logger.log(`Searching matched ${EventName.L1.LOG_MESSAGE_TO_L2} event.`); + if (matchedLogMessageToL2EventIndex > -1) { + logger.log( + `Found matched ${EventName.L1.LOG_MESSAGE_TO_L2} event at index ${matchedLogMessageToL2EventIndex}.`, + eventsQueue + ); + emitListeners(EventName.L1.LOG_DEPOSIT, error, event); + emitListeners( + EventName.L1.LOG_MESSAGE_TO_L2, + error, + eventsQueue[EventName.L1.LOG_MESSAGE_TO_L2][matchedLogMessageToL2EventIndex] + ); + removeFromQueue(EventName.L1.LOG_MESSAGE_TO_L2, matchedLogMessageToL2EventIndex); + } else { + logger.log(`Didn't found matched ${EventName.L1.LOG_MESSAGE_TO_L2} event.`); + insertEventToQueue(EventName.L1.LOG_DEPOSIT, event); + emitListeners(EventName.L1.LOG_DEPOSIT, error, event); + } + }; + + const onLogMessageToL2 = (error, event) => { + logger.log(`Event ${EventName.L1.LOG_MESSAGE_TO_L2} dispatched internal.`, {error, event}); + const matchedLogDepositEventIndex = eventsQueue[EventName.L1.LOG_DEPOSIT]?.findIndex( + e => e.transactionHash === event.transactionHash + ); + logger.log(`Searching matched ${EventName.L1.LOG_DEPOSIT} event.`); + if (matchedLogDepositEventIndex > -1) { + logger.log( + `Found matched ${EventName.L1.LOG_DEPOSIT} event at index ${matchedLogDepositEventIndex}.` + ); + removeFromQueue(EventName.L1.LOG_DEPOSIT, matchedLogDepositEventIndex); + emitListeners(EventName.L1.LOG_MESSAGE_TO_L2, error, event); + } else { + logger.log(`Didn't found matched ${EventName.L1.LOG_DEPOSIT} event.`); + insertEventToQueue(EventName.L1.LOG_MESSAGE_TO_L2, event); + } + }; + + const addLogDepositWithdrawalListeners = () => { + l1Tokens.forEach(l1Token => { + const bridgeContract = getTokenBridgeContract(l1Token.bridgeAddress); + logger.log(`Add ${EventName.L1.LOG_DEPOSIT} listener for token ${l1Token.symbol}.`); + addContractEventListener( + bridgeContract, + EventName.L1.LOG_DEPOSIT, + { + sender: l1Account, + l2Recipient: l2Account + }, + onLogDeposit + ); + logger.log(`Add ${EventName.L1.LOG_WITHDRAWAL} listener for token ${l1Token.symbol}.`); + addContractEventListener( + bridgeContract, + EventName.L1.LOG_WITHDRAWAL, + { + recipient: l1Account + }, + onLogWithdrawal + ); + }); + }; + + const addLogMessageToL2Listener = () => { + logger.log(`Add ${EventName.L1.LOG_MESSAGE_TO_L2} listener.`); + const l1BridgesAddresses = l1Tokens.map(token => token.bridgeAddress[l1ChainId]); + const l2BridgesAddress = l2Tokens.map(token => token.bridgeAddress[l2ChainId]); + addContractEventListener( + starknetContract, + EventName.L1.LOG_MESSAGE_TO_L2, + { + from_address: l1BridgesAddresses, + to_address: l2BridgesAddress, + selector: starknet.hash.getSelectorFromName(SelectorName.HANDLE_DEPOSIT) + }, + onLogMessageToL2 + ); + }; + + const addContractEventListener = (contract, eventName, filter, handler) => { + contract.events[eventName]( + { + filter + }, + (error, event) => handler(error, event) + ); + }; + + const value = { + addListener + }; + + return <EventManagerContext.Provider value={value}>{children}</EventManagerContext.Provider>; +}; + +EventManagerProvider.displayName = 'EventManagerProvider'; + +EventManagerProvider.propTypes = { + children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) +}; diff --git a/src/providers/EventManagerProvider/event-manager-context.js b/src/providers/EventManagerProvider/event-manager-context.js new file mode 100644 index 00000000..9533c708 --- /dev/null +++ b/src/providers/EventManagerProvider/event-manager-context.js @@ -0,0 +1,5 @@ +import {createContext} from 'react'; + +export const EventManagerContext = createContext({ + addListener: (eventName, callback) => ({eventName, callback}) +}); diff --git a/src/providers/EventManagerProvider/event-manager-hooks.js b/src/providers/EventManagerProvider/event-manager-hooks.js new file mode 100644 index 00000000..d9f2337d --- /dev/null +++ b/src/providers/EventManagerProvider/event-manager-hooks.js @@ -0,0 +1,29 @@ +import {useCallback, useContext} from 'react'; + +import {EventName} from '../../enums'; +import {EventManagerContext} from './event-manager-context'; + +export const useEventListener = () => { + return useContext(EventManagerContext); +}; + +export const useLogMessageToL2Listener = () => { + const {addListener} = useContext(EventManagerContext); + + return useCallback( + callback => addListener(EventName.L1.LOG_MESSAGE_TO_L2, callback), + [addListener] + ); +}; + +export const useLogDepositListener = () => { + const {addListener} = useContext(EventManagerContext); + + return useCallback(callback => addListener(EventName.L1.LOG_DEPOSIT, callback), [addListener]); +}; + +export const useLogWithdrawalListener = () => { + const {addListener} = useContext(EventManagerContext); + + return useCallback(callback => addListener(EventName.L1.LOG_WITHDRAWAL, callback), [addListener]); +}; diff --git a/src/providers/EventManagerProvider/index.js b/src/providers/EventManagerProvider/index.js new file mode 100644 index 00000000..37658f4c --- /dev/null +++ b/src/providers/EventManagerProvider/index.js @@ -0,0 +1,3 @@ +export * from './event-manager-context'; +export * from './event-manager-hooks'; +export * from './EventManagerProvider'; diff --git a/src/providers/MenuProvider/menu-hooks.js b/src/providers/MenuProvider/menu-hooks.js index 4b82cce8..53a23232 100644 --- a/src/providers/MenuProvider/menu-hooks.js +++ b/src/providers/MenuProvider/menu-hooks.js @@ -9,6 +9,7 @@ export const useMenu = () => { return { menu, menuProps, + showFaqMenu: useShowMenu(MenuType.FAQ), showAccountMenu: useShowMenu(MenuType.ACCOUNT), showTransferMenu: useShowMenu(MenuType.TRANSFER), showSelectTokenMenu: useShowMenu(MenuType.SELECT_TOKEN), diff --git a/src/providers/ModalProvider/modal-hooks.js b/src/providers/ModalProvider/modal-hooks.js index 8ff7e069..7353cfe1 100644 --- a/src/providers/ModalProvider/modal-hooks.js +++ b/src/providers/ModalProvider/modal-hooks.js @@ -18,12 +18,20 @@ export const useHideModal = () => { }, [hideModal]); }; -export const useProgressModal = () => { +export const useProgressModal = (steps = []) => { const {showModal} = useContext(ModalContext); return useCallback( - (title, message, type = ModalType.INFO) => { + (title, message, activeStep = 0, type = ModalType.INFO) => { showModal({ + headerComponentPath: steps.length > 0 ? 'UI/Stepper/Stepper' : null, + headerComponentProps: + steps.length > 0 + ? { + steps, + activeStep + } + : null, componentPath: 'UI/Modal/ProgressModal/ProgressModal', componentProps: { message @@ -36,18 +44,23 @@ export const useProgressModal = () => { ); }; -export const useTransactionSubmittedModal = () => { +export const useTransactionSubmittedModal = steps => { const {showModal} = useContext(ModalContext); return useCallback( transfer => { showModal({ + headerComponentPath: 'UI/Stepper/Stepper', + headerComponentProps: { + steps, + activeStep: steps.length + }, componentPath: 'UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal', componentProps: { transfer }, title: utils.getTranslation('modals.transactionSubmitted.title_txt'), - isClosable: true + withButtons: true }); }, [showModal] @@ -62,10 +75,22 @@ export const useErrorModal = () => { showModal({ title, body, - isClosable: true, + withButtons: true, type: ModalType.ERROR }); }, [showModal] ); }; + +export const useOnboardingModal = () => { + const {showModal} = useContext(ModalContext); + + return useCallback(() => { + showModal({ + componentPath: 'UI/Modal/OnboardingModal/OnboardingModal', + title: utils.getTranslation('modals.onboarding.title_txt'), + withButtons: true + }); + }, [showModal]); +}; diff --git a/src/providers/ModalProvider/modal-reducer.js b/src/providers/ModalProvider/modal-reducer.js index 9bbce9d8..2c70d461 100644 --- a/src/providers/ModalProvider/modal-reducer.js +++ b/src/providers/ModalProvider/modal-reducer.js @@ -5,10 +5,11 @@ export const actions = { export const initialState = { show: false, + headerComponentPath: '', + headerComponentProps: null, componentPath: '', componentProps: null, withButtons: false, - isClosable: false, body: '' }; diff --git a/src/providers/TokensProvider/TokensProvider.js b/src/providers/TokensProvider/TokensProvider.js index ac85b8de..3de4e039 100644 --- a/src/providers/TokensProvider/TokensProvider.js +++ b/src/providers/TokensProvider/TokensProvider.js @@ -1,12 +1,15 @@ import PropTypes from 'prop-types'; import React, {useEffect, useReducer} from 'react'; +import constants from '../../config/constants'; import {useLogger} from '../../hooks'; import {useL1TokenBalance, useL2TokenBalance} from '../../hooks/useTokenBalance'; import {useL1Wallet, useL2Wallet} from '../WalletsProvider'; import {TokensContext} from './tokens-context'; import {actions, initialState, reducer} from './tokens-reducer'; +const {FETCH_TOKEN_BALANCE_MAX_RETRY} = constants; + export const TokensProvider = ({children}) => { const logger = useLogger(TokensProvider.displayName); const [tokens, dispatch] = useReducer(reducer, initialState); @@ -20,40 +23,42 @@ export const TokensProvider = ({children}) => { }, []); const updateTokenBalance = symbol => { - logger.log(`Update token balance`, {symbol}); - const tokensToUpdate = symbol ? tokens.filter(token => token.symbol === symbol) : tokens; - logger.log(`Tokens to update`, {tokensToUpdate}); - for (let index = 0; index < tokensToUpdate.length; index++) { - const token = tokensToUpdate[index]; - if (token.isLoading) { - logger.log('Token already loading, skip balance update'); - break; + logger.log(symbol ? `Update ${symbol} token balance` : 'Update all tokens balances'); + const tokensToUpdate = tokens + .map((t, index) => ({...t, index})) + .filter(t => !symbol || t.symbol === symbol); + logger.log('Tokens to update:', {tokensToUpdate}); + + tokensToUpdate.forEach(token => { + if (!token.isLoading) { + updateToken(token.index, {isLoading: true}); + fetchBalance(token.isL1 ? getL1TokenBalance : getL2TokenBalance, token); } - logger.log(`Update balance for token ${token.symbol}`, {token}); - if (!('balance' in token)) { - updateTokenState(index, {isLoading: true}); - } else { - logger.log(`Token already have a balance of ${token.balance}, don't set isLoading prop`); + }); + }; + + const fetchBalance = async (fn, token, retry = 1) => { + try { + const balance = await fn(token); + logger.log(`New ${token.isL1 ? 'L1' : 'L2'} ${token.symbol} token balance is ${balance}`); + return updateToken(token.index, {balance, isLoading: false}); + } catch (ex) { + logger.error(`Failed to fetch token ${token.symbol} balance: ${ex.message}, retry again`, { + ex + }); + if (retry === FETCH_TOKEN_BALANCE_MAX_RETRY) { + return updateToken(token.index, {balance: null, isLoading: false}); } - const getBalance = token.isL1 ? getL1TokenBalance : getL2TokenBalance; - getBalance(token) - .then(balance => { - logger.log(`New ${token.symbol} token balance is ${balance}`); - updateTokenState(index, {balance, isLoading: false}); - }) - .catch(ex => { - logger.error(`Failed to fetch token ${token.symbol} balance: ${ex.message}`, {ex}); - updateTokenState(index, {balance: null, isLoading: false}); - }); + return fetchBalance(fn, token, retry + 1); } }; - const updateTokenState = (index, args) => { + const updateToken = (index, props) => { dispatch({ - type: actions.UPDATE_TOKEN_STATE, + type: actions.UPDATE_TOKEN, payload: { index, - args + props } }); }; diff --git a/src/providers/TokensProvider/tokens-hooks.js b/src/providers/TokensProvider/tokens-hooks.js index e9334762..82c1f694 100644 --- a/src/providers/TokensProvider/tokens-hooks.js +++ b/src/providers/TokensProvider/tokens-hooks.js @@ -19,20 +19,24 @@ export const useTokens = () => { export const useL2Tokens = () => { const {tokens} = useContext(TokensContext); + return useMemo(() => tokens.filter(t => t.isL2), [tokens]); }; export const useL1Tokens = () => { const {tokens} = useContext(TokensContext); + return useMemo(() => tokens.filter(t => t.isL1), [tokens]); }; export const useL2Token = () => { const l2Tokens = useL2Tokens(); + return useCallback(symbol => l2Tokens.find(token => token.symbol === symbol), [l2Tokens]); }; export const useL1Token = () => { const l1Tokens = useL1Tokens(); + return useCallback(symbol => l1Tokens.find(token => token.symbol === symbol), [l1Tokens]); }; diff --git a/src/providers/TokensProvider/tokens-reducer.js b/src/providers/TokensProvider/tokens-reducer.js index 03a33041..8e401fe7 100644 --- a/src/providers/TokensProvider/tokens-reducer.js +++ b/src/providers/TokensProvider/tokens-reducer.js @@ -1,22 +1,23 @@ +import envs from '../../config/envs'; import {l1tokens, l2tokens} from '../../config/tokens'; export const actions = { - UPDATE_TOKEN_STATE: 'Tokens/UPDATE_TOKEN_STATE' + UPDATE_TOKEN: 'Tokens/UPDATE_TOKEN' }; export const initialState = [ - ...l1tokens.map(t => ({...t, isL1: true})), - ...l2tokens.map(t => ({...t, isL2: true})) + ...l1tokens.filter(t => envs.supportedTokens.includes(t.symbol)).map(t => ({...t, isL1: true})), + ...l2tokens.filter(t => envs.supportedTokens.includes(t.symbol)).map(t => ({...t, isL2: true})) ]; export const reducer = (state, action) => { switch (action.type) { - case actions.UPDATE_TOKEN_STATE: { - const {index, args} = action.payload; - const token = {...state[index], ...args}; - const tokens = [...state]; - tokens[index] = token; - return tokens; + case actions.UPDATE_TOKEN: { + const {index, props} = action.payload; + const newToken = {...state[index], ...props}; + const clonedTokens = [...state]; + clonedTokens[index] = newToken; + return clonedTokens; } default: diff --git a/src/providers/TransfersLogProvider/TransfersLogProvider.js b/src/providers/TransfersLogProvider/TransfersLogProvider.js index db35e22a..ba29931f 100644 --- a/src/providers/TransfersLogProvider/TransfersLogProvider.js +++ b/src/providers/TransfersLogProvider/TransfersLogProvider.js @@ -2,24 +2,26 @@ import PropTypes from 'prop-types'; import React, {useEffect, useReducer} from 'react'; import useDeepCompareEffect from 'use-deep-compare-effect'; -import constants from '../../config/constants'; -import {isCompleted} from '../../enums'; +import envs from '../../config/envs'; +import {isCompleted, isConsumed} from '../../enums'; import {useLogger} from '../../hooks'; import {starknet} from '../../libs'; import utils from '../../utils'; import {useBlockHash} from '../BlockHashProvider'; +import {useTokens} from '../TokensProvider'; import {TransfersLogContext} from './transfers-log-context'; import {actions, initialState, reducer} from './transfers-log-reducer'; -const {LOCAL_STORAGE_TRANSFERS_KEY} = constants; +const {localStorageTransfersLogKey} = envs; export const TransfersLogProvider = ({children}) => { const logger = useLogger(TransfersLogProvider.displayName); const [transfers, dispatch] = useReducer(reducer, initialState); const blockHash = useBlockHash(); + const {updateTokenBalance} = useTokens(); useEffect(() => { - const storedTransfers = utils.storage.getItem(LOCAL_STORAGE_TRANSFERS_KEY); + const storedTransfers = getTransfersFromStorage(); if (Array.isArray(storedTransfers)) { setTransfers(storedTransfers); } @@ -27,7 +29,6 @@ export const TransfersLogProvider = ({children}) => { useDeepCompareEffect(() => { const updateTransfers = async () => { - logger.log(`Update transfers`); if (!blockHash) { return; } @@ -37,17 +38,18 @@ export const TransfersLogProvider = ({children}) => { } try { logger.log(`Checking tx status ${transfer.l2hash}`); - const newStatus = await starknet.defaultProvider.getTransactionStatus(transfer.l2hash); - if (transfer.status !== newStatus.tx_status) { - logger.log( - !transfer.status - ? `New status ${newStatus.tx_status}` - : `Status changed from ${transfer.status}->${newStatus.tx_status}` - ); + const {tx_status} = await starknet.defaultProvider.getTransactionStatus(transfer.l2hash); + if (transfer.status !== tx_status) { + logger.log(`Status changed from ${transfer.status}->${tx_status}`); + } else { + logger.log(`Status is still ${tx_status}`); + } + if (isConsumed(tx_status)) { + updateTokenBalance(transfer.symbol); } return { ...transfer, - status: newStatus.tx_status, + status: tx_status, lastChecked: blockHash }; } catch (error) { @@ -61,32 +63,48 @@ export const TransfersLogProvider = ({children}) => { const newTransfer = await checkTransaction(transfer); newTransfers.push(newTransfer); } - logger.log(`Done update transfers`, {newTransfers}); if (newTransfers.length) { + logger.log('Transfers updated', {newTransfers}); setTransfers(newTransfers); - utils.storage.setItem(LOCAL_STORAGE_TRANSFERS_KEY, newTransfers); + saveTransfersToStorage(newTransfers); } }; updateTransfers(); }, [blockHash, transfers]); - const addTransfer = payload => { + const updateTransfer = transfer => { + dispatch({ + type: actions.UPDATE_TRANSFER, + transfer + }); + }; + + const addTransfer = newTransfer => { dispatch({ type: actions.ADD_TRANSFER, - payload + newTransfer }); }; - const setTransfers = payload => { + const setTransfers = transfers => { dispatch({ type: actions.SET_TRANSFERS, - payload + transfers }); }; + const getTransfersFromStorage = () => { + return utils.storage.getItem(localStorageTransfersLogKey); + }; + + const saveTransfersToStorage = transfers => { + utils.storage.setItem(localStorageTransfersLogKey, transfers); + }; + const context = { transfers, - addTransfer + addTransfer, + updateTransfer }; return <TransfersLogContext.Provider value={context}>{children}</TransfersLogContext.Provider>; diff --git a/src/providers/TransfersLogProvider/transfers-log-context.js b/src/providers/TransfersLogProvider/transfers-log-context.js index b7a70864..6780689d 100644 --- a/src/providers/TransfersLogProvider/transfers-log-context.js +++ b/src/providers/TransfersLogProvider/transfers-log-context.js @@ -2,5 +2,6 @@ import {createContext} from 'react'; export const TransfersLogContext = createContext({ transfers: [], - addTransfer: t => t + addTransfer: newTransfer => newTransfer, + updateTransfer: transfer => transfer }); diff --git a/src/providers/TransfersLogProvider/transfers-log-reducer.js b/src/providers/TransfersLogProvider/transfers-log-reducer.js index 95585ce5..5b08c9e6 100644 --- a/src/providers/TransfersLogProvider/transfers-log-reducer.js +++ b/src/providers/TransfersLogProvider/transfers-log-reducer.js @@ -2,7 +2,8 @@ import {v4 as uuidv4} from 'uuid'; export const actions = { SET_TRANSFERS: 'TransfersLog/SET_TRANSFERS', - ADD_TRANSFER: 'TransfersLog/ADD_TRANSFER' + ADD_TRANSFER: 'TransfersLog/ADD_TRANSFER', + UPDATE_TRANSFER: 'TransfersLog/UPDATE_TRANSFER' }; export const initialState = []; @@ -10,17 +11,22 @@ export const initialState = []; export const reducer = (state, action) => { switch (action.type) { case actions.SET_TRANSFERS: - return action.payload; + return action.transfers; case actions.ADD_TRANSFER: { - const transfer = action.payload; + const {newTransfer} = action; + return [{id: uuidv4(), timestamp: new Date().getTime(), ...newTransfer}, ...state]; + } + + case actions.UPDATE_TRANSFER: { + const {transfer} = action; const index = state.findIndex(t => t.id === transfer.id); if (index > -1) { const transfers = [...state]; transfers[index] = transfer; return transfers; } - return [{id: uuidv4(), timestamp: new Date().getTime(), ...transfer}, ...state]; + return state; } default: diff --git a/src/providers/WalletsProvider/WalletsProvider.js b/src/providers/WalletsProvider/WalletsProvider.js index 6514b667..c416ae13 100644 --- a/src/providers/WalletsProvider/WalletsProvider.js +++ b/src/providers/WalletsProvider/WalletsProvider.js @@ -2,7 +2,7 @@ import PropTypes from 'prop-types'; import React, {useEffect, useReducer} from 'react'; import {useWallet} from 'use-wallet'; -import {WalletStatus} from '../../enums'; +import {ChainType, WalletStatus} from '../../enums'; import {useConfig} from '../../hooks'; import {getStarknet} from '../../libs'; import {useIsL1, useIsL2} from '../TransferProvider'; @@ -41,7 +41,7 @@ export const WalletsProvider = ({children}) => { }; const connectL2Wallet = async walletConfig => { - await getStarknet(!autoConnect && {showModal: true}).enable(); + await getStarknet().enable(!autoConnect && {showModal: true}); setL2WalletConfig(walletConfig); }; @@ -74,7 +74,7 @@ export const WalletsProvider = ({children}) => { const maybeUpdateL1Wallet = () => { // To support serializable object in the store - let serialError = error ? {...error} : null; + const serialError = error ? {...error} : null; updateL1Wallet({ account, status, @@ -97,8 +97,8 @@ export const WalletsProvider = ({children}) => { } finally { updateL2Wallet({ status, - chainId, error, + chainId: chainId === ChainType.L1.MAIN ? ChainType.L2.MAIN : ChainType.L2.GOERLI, isConnected: isL2Connected, account: selectedAddress, chainName: networkName diff --git a/src/providers/WalletsProvider/wallets-hooks.js b/src/providers/WalletsProvider/wallets-hooks.js index f5774121..05d0c336 100644 --- a/src/providers/WalletsProvider/wallets-hooks.js +++ b/src/providers/WalletsProvider/wallets-hooks.js @@ -9,7 +9,9 @@ export const useWallets = () => { const {isL1} = useTransfer(); const connectWallet = useCallback(walletConfig => wallets.connectWallet(walletConfig), []); + const resetWallet = useCallback(() => wallets.resetWallet(), []); + const swapWallets = useCallback(() => wallets.swapWallets(), []); useEffect(() => { diff --git a/src/providers/WalletsProvider/wallets-reducer.js b/src/providers/WalletsProvider/wallets-reducer.js index 4cc7883b..f2c9101c 100644 --- a/src/providers/WalletsProvider/wallets-reducer.js +++ b/src/providers/WalletsProvider/wallets-reducer.js @@ -12,7 +12,7 @@ const initialWalletState = { isConnected: false, status: WalletStatus.DISCONNECTED, chainName: '', - chainId: -1, + chainId: null, error: null, config: null }; diff --git a/src/styles/colors.module.scss b/src/styles/colors.module.scss index 3e29325e..681b6e07 100644 --- a/src/styles/colors.module.scss +++ b/src/styles/colors.module.scss @@ -1,7 +1,10 @@ -$--color-white: #ffffff; +$--color-white: #fff; $--color-white-1: #d3dae3; $--color-white-2: #d3dae3ff; -$--color-black: #000000; +$--color-white-op-10: rgba(255, 255, 255, 0.1); +$--color-white-op-20: rgba(255, 255, 255, 0.2); +$--color-white-op-50: rgba(255, 255, 255, 0.5); +$--color-black: #000; $--color-alpha: #15174e; $--color-alpha-1: #1c1e52; $--color-alpha-2: #23255b; @@ -19,13 +22,19 @@ $--color-omega: #5f666c; $--color-omega-1: #667085; $--color-success: #039855; $--color-error: #da4646; +$--color-discord: #5865f2; :export { colorBlack: $--color-black; colorWhite: $--color-white; colorWhite1: $--color-white-1; colorBeta: $--color-beta; + colorError: $--color-error; colorAlpha3: $--color-alpha-3; colorAlpha5: $--color-alpha-5; colorOmega1: $--color-omega-1; + colorDiscord: $--color-discord; + colorWhiteOp10: $--color-white-op-10; + colorWhiteOp20: $--color-white-op-20; + colorWhiteOp50: $--color-white-op-50; } diff --git a/src/utils/blockchain/starknet.js b/src/utils/blockchain/starknet.js index 6499b20e..1c198c41 100644 --- a/src/utils/blockchain/starknet.js +++ b/src/utils/blockchain/starknet.js @@ -1,15 +1,15 @@ -import {byChainId, isRejected, TransactionStatusStep} from '../../enums'; +import {ChainInfo, isRejected, TransactionStatusStep} from '../../enums'; import {getStarknet, starknet} from '../../libs'; -const {compileCalldata, Contract, defaultProvider, stark, hash, number} = starknet; +const {Contract, defaultProvider, stark, hash, number} = starknet; export const createContract = (address, ABI) => { return new Contract(ABI, address); }; -export const callContract = async (contract, method, args = [], blockIdentifier = null) => { +export const callContract = async (contract, method, ...args) => { try { - return await contract.call(method, ...args, blockIdentifier); + return await contract.call(method, args); } catch (ex) { return Promise.reject(ex); } @@ -17,13 +17,13 @@ export const callContract = async (contract, method, args = [], blockIdentifier export const sendTransaction = async (contract, method, args = {}) => { try { - const methodSelector = stark.getSelectorFromName(method); - const compiledCalldata = compileCalldata(args); - return getStarknet().signer.invokeFunction( - contract.connectedTo, - methodSelector, - compiledCalldata - ); + const calldata = stark.compileCalldata(args); + const transaction = { + contractAddress: contract.address, + entrypoint: method, + calldata + }; + return await getStarknet().account.execute(transaction); } catch (ex) { return Promise.reject(ex); } @@ -68,8 +68,7 @@ export const getTransactionHash = ( ...additionalData ) => { const calldata = [number.hexToDecimalString(fromAddress), ...payload]; - const calldataHash = hash.hashCalldata(calldata); - const {l2IdPrefix} = byChainId(chainId); + const calldataHash = hash.computeHashOnElements(calldata); return hash.computeHashOnElements([ txHashPrefix, 0, // version @@ -77,13 +76,15 @@ export const getTransactionHash = ( selector, calldataHash, 0, // max_fee - l2IdPrefix, + ChainInfo.L2[chainId].ID_PREFIX, ...additionalData ]); }; export const hashEquals = (...data) => { - return !!data.reduce((d1, d2) => - starknet.hash.computeHashOnElements(d1) === starknet.hash.computeHashOnElements(d2) ? d1 : '' - ); + return !!data.reduce((d1, d2) => { + return starknet.hash.computeHashOnElements(d1) === starknet.hash.computeHashOnElements(d2) + ? d1 + : ''; + }); }; diff --git a/src/utils/browser.js b/src/utils/browser.js index 9de3222e..9b7956f0 100644 --- a/src/utils/browser.js +++ b/src/utils/browser.js @@ -4,8 +4,8 @@ export const openInNewTab = url => { export const getUrlParameter = name => { name = name.replace(/[[]/, '[').replace(/[\]]/, '\\]'); - const regex = new RegExp('[\\?&]' + name + '=([^&#]*)'); - const results = regex.exec(location.search); + const regex = new RegExp(`[&]${name}=([^&#]*)`); + const results = regex.exec(window.location.search); return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' ')); }; diff --git a/src/utils/date.js b/src/utils/date.js index ed5d28de..0cbdcdc2 100644 --- a/src/utils/date.js +++ b/src/utils/date.js @@ -4,26 +4,33 @@ export const getDate = timestamp => { let dd = day.getDate(); let mm = day.getMonth() + 1; if (dd < 10) { - dd = '0' + dd; + dd = `0${dd}`; } if (mm < 10) { - mm = '0' + mm; + mm = `0${mm}`; } return `${dd}/${mm}/${yyyy}`; }; export const get24Time = timestamp => { - let ut = new Date(timestamp); + const ut = new Date(timestamp); let h, m, s; h = ut.getHours(); m = ut.getMinutes(); s = ut.getSeconds(); - if (s <= 9) s = '0' + s; - if (m <= 9) m = '0' + m; - if (h <= 9) h = '0' + h; + if (s <= 9) s = `0${s}`; + if (m <= 9) m = `0${m}`; + if (h <= 9) h = `0${h}`; return `${h}:${m}:${s}`; }; export const getFullTime = timestamp => { return `${getDate(timestamp)}, ${get24Time(timestamp)}`; }; + +export const getMsFromHrs = hours => { + const parsed = parseFloat(hours, 10); + if (!isNaN(parsed)) { + return parsed * 60 * 60 * 1000; + } +}; diff --git a/src/utils/object.js b/src/utils/object.js index 532fc2da..42d0e791 100644 --- a/src/utils/object.js +++ b/src/utils/object.js @@ -9,12 +9,12 @@ export const evaluate = (template, model) => { try { let reg, res = template; - for (let key in model) { + for (const key in model) { let value = model[key] !== undefined && model[key] !== null ? model[key] : ''; if (typeof value === 'string' && value.indexOf('"') > -1) { value = value.replace(/"/g, '\\"'); } - reg = new RegExp('{{' + key + '}}', 'g'); + reg = new RegExp(`{{${key}}}`, 'g'); res = res.replace(reg, value); } return res; diff --git a/src/utils/parser.js b/src/utils/parser.js index e122a489..24849d9e 100644 --- a/src/utils/parser.js +++ b/src/utils/parser.js @@ -7,7 +7,7 @@ const TEN = 10; const DEFAULT_DECIMALS = 18; export const UNIT_MAP = {}; -for (let key in utils.unitMap) { +for (const key in utils.unitMap) { UNIT_MAP[utils.unitMap[key]] = key; } diff --git a/src/utils/storage.js b/src/utils/storage.js index b944be7d..358f0559 100644 --- a/src/utils/storage.js +++ b/src/utils/storage.js @@ -8,7 +8,7 @@ export const setItem = (key, item) => { export const getItem = key => { if (localStorage) { - let item = localStorage.getObjectHash(key); + const item = localStorage.getObjectHash(key); try { return JSON.parse(Object.values(item).join('')); } catch (ex) { @@ -20,7 +20,7 @@ export const getItem = key => { Storage.prototype.setObjectHash = function (key, myObject) { const newObject = {}; Object.keys(myObject).map(function (value) { - newObject[value] = b64e(myObject[value]); + return (newObject[value] = b64e(myObject[value])); }); this.setItem(key, b64e(JSON.stringify(newObject))); }; @@ -44,7 +44,7 @@ Storage.prototype.getObjectHash = function (key) { const b64e = function (str) { return btoa( encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function (match, p1) { - return String.fromCharCode('0x' + p1); + return String.fromCharCode(`0x${p1}`); }) ); }; @@ -53,7 +53,7 @@ const b64d = function (str) { return decodeURIComponent( Array.prototype.map .call(atob(str), function (c) { - return '%' + c.charCodeAt(0).toString(16); + return `%${c.charCodeAt(0).toString(16)}`; }) .join('') ); diff --git a/src/utils/wallet.js b/src/utils/wallet.js index 48d6a695..ed33f812 100644 --- a/src/utils/wallet.js +++ b/src/utils/wallet.js @@ -1,5 +1,6 @@ -export const formatBalance = balance => - typeof balance === 'number' ? parseFloat(balance.toFixed(5)) : 'N/A'; +export const formatBalance = balance => { + return typeof balance === 'number' ? parseFloat(balance.toFixed(5)) : 'N/A'; +}; export const shortenAddress = account => { if (!account) { diff --git a/src/wallets/argent-x.js b/src/wallets/argent-x.js index 093fb4ef..bc5e00ca 100644 --- a/src/wallets/argent-x.js +++ b/src/wallets/argent-x.js @@ -10,6 +10,6 @@ export class ArgentX { } install() { - return getStarknet({showModal: true}); + return getStarknet().enable({showModal: true}); } } diff --git a/yarn.lock b/yarn.lock index 58d6247d..cf97b6c3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -104,6 +104,13 @@ ethers "~4.0.4" lodash "^4.17.11" +"@ampproject/remapping@^2.1.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.1.2.tgz#4edca94973ded9630d20101cd8559cedb8d8bd34" + integrity sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg== + dependencies: + "@jridgewell/trace-mapping" "^0.3.0" + "@aragon/provided-connector@^6.0.8": version "6.0.8" resolved "https://registry.yarnpkg.com/@aragon/provided-connector/-/provided-connector-6.0.8.tgz#5d22ccb2a0ff599fbe6c23fdf96cb06d59ff2716" @@ -113,10 +120,27 @@ "@web3-react/types" "^6.0.7" tiny-warning "^1.0.3" -"@argent/get-starknet@^1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@argent/get-starknet/-/get-starknet-1.1.3.tgz#d5254038fa5aa8645cf8d845373d595a7b8b4cfe" - integrity sha512-upw+/BWg2lnf5WTWI9VJFceucn/Rjq1O4zpVUZFl/jQ7bl+XXWotrQSPD0PZVyFt0rwPu4sOkDcLEdzl+kmykw== +"@argent/get-starknet@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@argent/get-starknet/-/get-starknet-3.0.1.tgz#b3f80fd54528d4281bc5f3162d2576bb47c1c786" + integrity sha512-4jWzAU/vc6WWCrS5CabyrEVeQhYcYO6bLMgbJld+QRV6zlwgtRcsjjyfyxL9gKqP2IJI6V6dBHUdmvbxheUPQA== + +"@babel/cli@^7.16.0": + version "7.17.6" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.17.6.tgz#169e5935f1795f0b62ded5a2accafeedfe5c5363" + integrity sha512-l4w608nsDNlxZhiJ5tE3DbNmr61fIKMZ6fTBo171VEFuFMIYuJ3mHRhTLEkKKyvx2Mizkkv/0a8OJOnZqkKYNA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.4" + commander "^4.0.1" + convert-source-map "^1.1.0" + fs-readdir-recursive "^1.1.0" + glob "^7.0.0" + make-dir "^2.1.0" + slash "^2.0.0" + source-map "^0.5.0" + optionalDependencies: + "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3" + chokidar "^3.4.0" "@babel/code-frame@7.10.4": version "7.10.4" @@ -139,11 +163,23 @@ dependencies: "@babel/highlight" "^7.16.0" +"@babel/code-frame@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" + integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== + dependencies: + "@babel/highlight" "^7.16.7" + "@babel/compat-data@^7.12.1", "@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.0", "@babel/compat-data@^7.16.4": version "7.16.4" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.4.tgz#081d6bbc336ec5c2435c6346b2ae1fb98b5ac68e" integrity sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q== +"@babel/compat-data@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.7.tgz#078d8b833fbbcc95286613be8c716cef2b519fa2" + integrity sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ== + "@babel/core@7.12.3": version "7.12.3" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.3.tgz#1b436884e1e3bff6fb1328dc02b208759de92ad8" @@ -209,6 +245,43 @@ semver "^6.3.0" source-map "^0.5.0" +"@babel/core@^7.16.0": + version "7.17.8" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.8.tgz#3dac27c190ebc3a4381110d46c80e77efe172e1a" + integrity sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.17.7" + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-module-transforms" "^7.17.7" + "@babel/helpers" "^7.17.8" + "@babel/parser" "^7.17.8" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.17.3" + "@babel/types" "^7.17.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + +"@babel/eslint-parser@^7.16.3": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.17.0.tgz#eabb24ad9f0afa80e5849f8240d0e5facc2d90d6" + integrity sha512-PUEJ7ZBXbRkbq3qqM/jZ2nIuakUBqCYc7Qf52Lj7dlZ6zERnqisdHioL0l4wwQZnmskMeasqUNzLBFKs3nylXA== + dependencies: + eslint-scope "^5.1.1" + eslint-visitor-keys "^2.1.0" + semver "^6.3.0" + +"@babel/eslint-plugin@^7.14.5": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/eslint-plugin/-/eslint-plugin-7.17.7.tgz#4ee1d5b29b79130f3bb5a933358376bcbee172b8" + integrity sha512-JATUoJJXSgwI0T8juxWYtK1JSgoLpIGUsCHIv+NMXcUDA2vIe6nvAHR9vnuJgs/P1hOFw7vPwibixzfqBBLIVw== + dependencies: + eslint-rule-composer "^0.3.0" + "@babel/generator@7.13.9": version "7.13.9" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39" @@ -227,6 +300,15 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.17.3", "@babel/generator@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.7.tgz#8da2599beb4a86194a3b24df6c085931d9ee45ad" + integrity sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w== + dependencies: + "@babel/types" "^7.17.0" + jsesc "^2.5.1" + source-map "^0.5.0" + "@babel/helper-annotate-as-pure@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz#9a1f0ebcda53d9a2d00108c4ceace6a5d5f1f08d" @@ -234,6 +316,13 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-annotate-as-pure@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" + integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-builder-binary-assignment-operator-visitor@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz#f1a686b92da794020c26582eb852e9accd0d7882" @@ -252,6 +341,16 @@ browserslist "^4.17.5" semver "^6.3.0" +"@babel/helper-compilation-targets@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz#a3c2924f5e5f0379b356d4cfb313d1414dc30e46" + integrity sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w== + dependencies: + "@babel/compat-data" "^7.17.7" + "@babel/helper-validator-option" "^7.16.7" + browserslist "^4.17.5" + semver "^6.3.0" + "@babel/helper-create-class-features-plugin@^7.12.1", "@babel/helper-create-class-features-plugin@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz#090d4d166b342a03a9fec37ef4fd5aeb9c7c6a4b" @@ -286,6 +385,13 @@ resolve "^1.14.2" semver "^6.1.2" +"@babel/helper-environment-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" + integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-explode-assignable-expression@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz#753017337a15f46f9c09f674cff10cee9b9d7778" @@ -302,6 +408,15 @@ "@babel/template" "^7.16.0" "@babel/types" "^7.16.0" +"@babel/helper-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" + integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== + dependencies: + "@babel/helper-get-function-arity" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/types" "^7.16.7" + "@babel/helper-get-function-arity@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz#0088c7486b29a9cb5d948b1a1de46db66e089cfa" @@ -309,6 +424,13 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-get-function-arity@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" + integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-hoist-variables@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz#4c9023c2f1def7e28ff46fc1dbcd36a39beaa81a" @@ -316,6 +438,13 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-hoist-variables@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" + integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-member-expression-to-functions@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz#29287040efd197c77636ef75188e81da8bccd5a4" @@ -330,6 +459,13 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-module-imports@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" + integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz#1c82a8dd4cb34577502ebd2909699b194c3e9bb5" @@ -344,6 +480,20 @@ "@babel/traverse" "^7.16.0" "@babel/types" "^7.16.0" +"@babel/helper-module-transforms@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz#3943c7f777139e7954a5355c815263741a9c1cbd" + integrity sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw== + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-simple-access" "^7.17.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.17.3" + "@babel/types" "^7.17.0" + "@babel/helper-optimise-call-expression@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz#cecdb145d70c54096b1564f8e9f10cd7d193b338" @@ -356,6 +506,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== +"@babel/helper-plugin-utils@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" + integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== + "@babel/helper-remap-async-to-generator@^7.16.0", "@babel/helper-remap-async-to-generator@^7.16.4": version "7.16.4" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.4.tgz#5d7902f61349ff6b963e07f06a389ce139fbfe6e" @@ -382,6 +537,13 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-simple-access@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz#aaa473de92b7987c6dfa7ce9a7d9674724823367" + integrity sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA== + dependencies: + "@babel/types" "^7.17.0" + "@babel/helper-skip-transparent-expression-wrappers@^7.12.1", "@babel/helper-skip-transparent-expression-wrappers@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" @@ -396,16 +558,33 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-split-export-declaration@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" + integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-validator-identifier@^7.12.11", "@babel/helper-validator-identifier@^7.15.7": version "7.15.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== +"@babel/helper-validator-identifier@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" + integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== + "@babel/helper-validator-option@^7.12.1", "@babel/helper-validator-option@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== +"@babel/helper-validator-option@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" + integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== + "@babel/helper-wrap-function@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz#b3cf318afce774dfe75b86767cd6d68f3482e57c" @@ -425,6 +604,15 @@ "@babel/traverse" "^7.16.3" "@babel/types" "^7.16.0" +"@babel/helpers@^7.17.8": + version "7.17.8" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.8.tgz#288450be8c6ac7e4e44df37bcc53d345e07bc106" + integrity sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw== + dependencies: + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.17.3" + "@babel/types" "^7.17.0" + "@babel/highlight@^7.10.4", "@babel/highlight@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" @@ -434,6 +622,15 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/highlight@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" + integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + chalk "^2.0.0" + js-tokens "^4.0.0" + "@babel/parser@7.13.10": version "7.13.10" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.10.tgz#8f8f9bf7b3afa3eabd061f7a5bcdf4fec3c48409" @@ -444,6 +641,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.4.tgz#d5f92f57cf2c74ffe9b37981c0e72fee7311372e" integrity sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng== +"@babel/parser@^7.16.7", "@babel/parser@^7.17.3", "@babel/parser@^7.17.8": + version "7.17.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.8.tgz#2817fb9d885dd8132ea0f8eb615a6388cca1c240" + integrity sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ== + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.2": version "7.16.2" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz#2977fca9b212db153c195674e57cfab807733183" @@ -686,6 +888,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-syntax-flow@^7.16.0", "@babel/plugin-syntax-flow@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.7.tgz#202b147e5892b8452bbb0bb269c7ed2539ab8832" + integrity sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" @@ -700,6 +909,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-jsx@^7.12.13", "@babel/plugin-syntax-jsx@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz#50b6571d13f764266a113d77c82b4a6508bbe665" + integrity sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-jsx@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.0.tgz#f9624394317365a9a88c82358d3f8471154698f1" @@ -858,6 +1074,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-flow" "^7.12.1" +"@babel/plugin-transform-flow-strip-types@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.7.tgz#291fb140c78dabbf87f2427e7c7c332b126964b8" + integrity sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-flow" "^7.16.7" + "@babel/plugin-transform-for-of@^7.12.1", "@babel/plugin-transform-for-of@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz#f7abaced155260e2461359bbc7c7248aca5e6bd2" @@ -982,6 +1206,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-react-display-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz#7b6d40d232f4c0f550ea348593db3b21e2404340" + integrity sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-react-jsx-development@^7.12.1", "@babel/plugin-transform-react-jsx-development@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.0.tgz#1cb52874678d23ab11d0d16488d54730807303ef" @@ -989,6 +1220,13 @@ dependencies: "@babel/plugin-transform-react-jsx" "^7.16.0" +"@babel/plugin-transform-react-jsx-development@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz#43a00724a3ed2557ed3f276a01a929e6686ac7b8" + integrity sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.16.7" + "@babel/plugin-transform-react-jsx-self@^7.12.1": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.16.0.tgz#09202158abbc716a08330f392bfb98d6b9acfa0c" @@ -1014,6 +1252,17 @@ "@babel/plugin-syntax-jsx" "^7.16.0" "@babel/types" "^7.16.0" +"@babel/plugin-transform-react-jsx@^7.16.7": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz#eac1565da176ccb1a715dae0b4609858808008c1" + integrity sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-jsx" "^7.16.7" + "@babel/types" "^7.17.0" + "@babel/plugin-transform-react-pure-annotations@^7.12.1", "@babel/plugin-transform-react-pure-annotations@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.0.tgz#23db6ddf558d8abde41b8ad9d59f48ad5532ccab" @@ -1022,6 +1271,14 @@ "@babel/helper-annotate-as-pure" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-react-pure-annotations@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz#232bfd2f12eb551d6d7d01d13fe3f86b45eb9c67" + integrity sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-transform-regenerator@^7.12.1", "@babel/plugin-transform-regenerator@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz#eaee422c84b0232d03aea7db99c97deeaf6125a4" @@ -1270,6 +1527,15 @@ core-js-compat "^3.19.1" semver "^6.3.0" +"@babel/preset-flow@^7.16.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.16.7.tgz#7fd831323ab25eeba6e4b77a589f680e30581cbd" + integrity sha512-6ceP7IyZdUYQ3wUVqyRSQXztd1YmFHWI4Xv11MIqAlE4WqxBSd/FZ61V9k+TS5Gd4mkHOtQtPp9ymRpxH4y1Ug== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-transform-flow-strip-types" "^7.16.7" + "@babel/preset-modules@^0.1.3", "@babel/preset-modules@^0.1.5": version "0.1.5" resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" @@ -1306,6 +1572,18 @@ "@babel/plugin-transform-react-jsx-development" "^7.16.0" "@babel/plugin-transform-react-pure-annotations" "^7.16.0" +"@babel/preset-react@^7.16.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.16.7.tgz#4c18150491edc69c183ff818f9f2aecbe5d93852" + integrity sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-transform-react-display-name" "^7.16.7" + "@babel/plugin-transform-react-jsx" "^7.16.7" + "@babel/plugin-transform-react-jsx-development" "^7.16.7" + "@babel/plugin-transform-react-pure-annotations" "^7.16.7" + "@babel/preset-typescript@7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.12.1.tgz#86480b483bb97f75036e8864fe404cc782cc311b" @@ -1350,6 +1628,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.13.10", "@babel/runtime@^7.17.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.7": + version "7.17.8" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.8.tgz#3e56e4aff81befa55ac3ac6a0967349fd1c5bca2" + integrity sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/template@^7.10.4", "@babel/template@^7.12.13", "@babel/template@^7.16.0", "@babel/template@^7.3.3": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6" @@ -1359,6 +1644,15 @@ "@babel/parser" "^7.16.0" "@babel/types" "^7.16.0" +"@babel/template@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" + integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/types" "^7.16.7" + "@babel/traverse@7.13.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.0.tgz#6d95752475f86ee7ded06536de309a65fc8966cc" @@ -1389,6 +1683,22 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.17.3": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.3.tgz#0ae0f15b27d9a92ba1f2263358ea7c4e7db47b57" + integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.17.3" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.17.3" + "@babel/types" "^7.17.0" + debug "^4.1.0" + globals "^11.1.0" + "@babel/types@7.13.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.0.tgz#74424d2816f0171b4100f0ab34e9a374efdf7f80" @@ -1406,6 +1716,14 @@ "@babel/helper-validator-identifier" "^7.15.7" to-fast-properties "^2.0.0" +"@babel/types@^7.16.7", "@babel/types@^7.17.0": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" + integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + to-fast-properties "^2.0.0" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -1429,6 +1747,107 @@ resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-10.1.0.tgz#f0950bba18819512d42f7197e56c518aa491cf18" integrity sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg== +"@emotion/babel-plugin@^11.7.1": + version "11.7.2" + resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.7.2.tgz#fec75f38a6ab5b304b0601c74e2a5e77c95e5fa0" + integrity sha512-6mGSCWi9UzXut/ZAN6lGFu33wGR3SJisNl3c0tvlmb8XChH1b2SUvxvnOh7hvLpqyRdHHU9AiazV3Cwbk5SXKQ== + dependencies: + "@babel/helper-module-imports" "^7.12.13" + "@babel/plugin-syntax-jsx" "^7.12.13" + "@babel/runtime" "^7.13.10" + "@emotion/hash" "^0.8.0" + "@emotion/memoize" "^0.7.5" + "@emotion/serialize" "^1.0.2" + babel-plugin-macros "^2.6.1" + convert-source-map "^1.5.0" + escape-string-regexp "^4.0.0" + find-root "^1.1.0" + source-map "^0.5.7" + stylis "4.0.13" + +"@emotion/cache@^11.7.1": + version "11.7.1" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.7.1.tgz#08d080e396a42e0037848214e8aa7bf879065539" + integrity sha512-r65Zy4Iljb8oyjtLeCuBH8Qjiy107dOYC6SJq7g7GV5UCQWMObY4SJDPGFjiiVpPrOJ2hmJOoBiYTC7hwx9E2A== + dependencies: + "@emotion/memoize" "^0.7.4" + "@emotion/sheet" "^1.1.0" + "@emotion/utils" "^1.0.0" + "@emotion/weak-memoize" "^0.2.5" + stylis "4.0.13" + +"@emotion/hash@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" + integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== + +"@emotion/is-prop-valid@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.1.2.tgz#34ad6e98e871aa6f7a20469b602911b8b11b3a95" + integrity sha512-3QnhqeL+WW88YjYbQL5gUIkthuMw7a0NGbZ7wfFVk2kg/CK5w8w5FFa0RzWjyY1+sujN0NWbtSHH6OJmWHtJpQ== + dependencies: + "@emotion/memoize" "^0.7.4" + +"@emotion/memoize@^0.7.4", "@emotion/memoize@^0.7.5": + version "0.7.5" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.5.tgz#2c40f81449a4e554e9fc6396910ed4843ec2be50" + integrity sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ== + +"@emotion/react@^11.8.2": + version "11.8.2" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.8.2.tgz#e51f5e6372e22e82780836c9288da19af4b51e70" + integrity sha512-+1bcHBaNJv5nkIIgnGKVsie3otS0wF9f1T1hteF3WeVvMNQEtfZ4YyFpnphGoot3ilU/wWMgP2SgIDuHLE/wAA== + dependencies: + "@babel/runtime" "^7.13.10" + "@emotion/babel-plugin" "^11.7.1" + "@emotion/cache" "^11.7.1" + "@emotion/serialize" "^1.0.2" + "@emotion/utils" "^1.1.0" + "@emotion/weak-memoize" "^0.2.5" + hoist-non-react-statics "^3.3.1" + +"@emotion/serialize@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.0.2.tgz#77cb21a0571c9f68eb66087754a65fa97bfcd965" + integrity sha512-95MgNJ9+/ajxU7QIAruiOAdYNjxZX7G2mhgrtDWswA21VviYIRP1R5QilZ/bDY42xiKsaktP4egJb3QdYQZi1A== + dependencies: + "@emotion/hash" "^0.8.0" + "@emotion/memoize" "^0.7.4" + "@emotion/unitless" "^0.7.5" + "@emotion/utils" "^1.0.0" + csstype "^3.0.2" + +"@emotion/sheet@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.1.0.tgz#56d99c41f0a1cda2726a05aa6a20afd4c63e58d2" + integrity sha512-u0AX4aSo25sMAygCuQTzS+HsImZFuS8llY8O7b9MDRzbJM0kVJlAz6KNDqcG7pOuQZJmj/8X/rAW+66kMnMW+g== + +"@emotion/styled@^11.8.1": + version "11.8.1" + resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.8.1.tgz#856f6f63aceef0eb783985fa2322e2bf66d04e17" + integrity sha512-OghEVAYBZMpEquHZwuelXcRjRJQOVayvbmNR0zr174NHdmMgrNkLC6TljKC5h9lZLkN5WGrdUcrKlOJ4phhoTQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@emotion/babel-plugin" "^11.7.1" + "@emotion/is-prop-valid" "^1.1.2" + "@emotion/serialize" "^1.0.2" + "@emotion/utils" "^1.1.0" + +"@emotion/unitless@^0.7.5": + version "0.7.5" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" + integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== + +"@emotion/utils@^1.0.0", "@emotion/utils@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.1.0.tgz#86b0b297f3f1a0f2bdb08eeac9a2f49afd40d0cf" + integrity sha512-iRLa/Y4Rs5H/f2nimczYmS5kFJEbpiVvgN3XVfZ022IYhuNA1IRSHEizcof88LtCTXtl9S2Cxt32KgaXEu72JQ== + +"@emotion/weak-memoize@^0.2.5": + version "0.2.5" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" + integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== + "@eslint/eslintrc@^0.4.3": version "0.4.3" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" @@ -1490,6 +1909,21 @@ "@ethersproject/properties" "^5.0.3" "@ethersproject/strings" "^5.0.4" +"@ethersproject/abi@^5.5.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.6.0.tgz#ea07cbc1eec2374d32485679c12408005895e9f3" + integrity sha512-AhVByTwdXCc2YQ20v300w6KVHle9g2OFc28ZAFCPnJyEpkv1xKXjZcSTgWOlv1i+0dqlgF8RCF2Rn2KC1t+1Vg== + dependencies: + "@ethersproject/address" "^5.6.0" + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/constants" "^5.6.0" + "@ethersproject/hash" "^5.6.0" + "@ethersproject/keccak256" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.0" + "@ethersproject/abstract-provider@^5.5.0": version "5.5.1" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.5.1.tgz#2f1f6e8a3ab7d378d8ad0b5718460f85649710c5" @@ -1503,6 +1937,19 @@ "@ethersproject/transactions" "^5.5.0" "@ethersproject/web" "^5.5.0" +"@ethersproject/abstract-provider@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.6.0.tgz#0c4ac7054650dbd9c476cf5907f588bbb6ef3061" + integrity sha512-oPMFlKLN+g+y7a79cLK3WiLcjWFnZQtXWgnLAbHZcN3s7L4v90UHpTOrLk+m3yr0gt+/h9STTM6zrr7PM8uoRw== + dependencies: + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/networks" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/transactions" "^5.6.0" + "@ethersproject/web" "^5.6.0" + "@ethersproject/abstract-signer@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.5.0.tgz#590ff6693370c60ae376bf1c7ada59eb2a8dd08d" @@ -1514,6 +1961,17 @@ "@ethersproject/logger" "^5.5.0" "@ethersproject/properties" "^5.5.0" +"@ethersproject/abstract-signer@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.6.0.tgz#9cd7ae9211c2b123a3b29bf47aab17d4d016e3e7" + integrity sha512-WOqnG0NJKtI8n0wWZPReHtaLkDByPL67tn4nBaDAhmVq8sjHTPbCdz4DRhVu/cfTOvfy9w3iq5QZ7BX7zw56BQ== + dependencies: + "@ethersproject/abstract-provider" "^5.6.0" + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.5.0.tgz#bcc6f576a553f21f3dd7ba17248f81b473c9c78f" @@ -1525,6 +1983,17 @@ "@ethersproject/logger" "^5.5.0" "@ethersproject/rlp" "^5.5.0" +"@ethersproject/address@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.6.0.tgz#13c49836d73e7885fc148ad633afad729da25012" + integrity sha512-6nvhYXjbXsHPS+30sHZ+U4VMagFC/9zAk6Gd/h3S21YW4+yfb0WfRtaAIZ4kfM4rrVwqiy284LP0GtL5HXGLxQ== + dependencies: + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/keccak256" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/rlp" "^5.6.0" + "@ethersproject/base64@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.5.0.tgz#881e8544e47ed976930836986e5eb8fab259c090" @@ -1532,6 +2001,13 @@ dependencies: "@ethersproject/bytes" "^5.5.0" +"@ethersproject/base64@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.6.0.tgz#a12c4da2a6fb86d88563216b0282308fc15907c9" + integrity sha512-2Neq8wxJ9xHxCF9TUgmKeSh9BXJ6OAxWfeGWvbauPh8FuHEjamgHilllx8KkSd5ErxyHIX7Xv3Fkcud2kY9ezw== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.5.0.tgz#875b143f04a216f4f8b96245bde942d42d279527" @@ -1541,6 +2017,15 @@ "@ethersproject/logger" "^5.5.0" bn.js "^4.11.9" +"@ethersproject/bignumber@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.6.0.tgz#116c81b075c57fa765a8f3822648cf718a8a0e26" + integrity sha512-VziMaXIUHQlHJmkv1dlcd6GY2PmT0khtAqaMctCIDogxkrarMzA9L94KN1NeXqqOfFD6r0sJT3vCTOFSmZ07DA== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + bn.js "^4.11.9" + "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.5.0.tgz#cb11c526de657e7b45d2e0f0246fb3b9d29a601c" @@ -1548,6 +2033,13 @@ dependencies: "@ethersproject/logger" "^5.5.0" +"@ethersproject/bytes@^5.6.0": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.6.1.tgz#24f916e411f82a8a60412344bf4a813b917eefe7" + integrity sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g== + dependencies: + "@ethersproject/logger" "^5.6.0" + "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.5.0.tgz#d2a2cd7d94bd1d58377d1d66c4f53c9be4d0a45e" @@ -1555,6 +2047,13 @@ dependencies: "@ethersproject/bignumber" "^5.5.0" +"@ethersproject/constants@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.6.0.tgz#55e3eb0918584d3acc0688e9958b0cedef297088" + integrity sha512-SrdaJx2bK0WQl23nSpV/b1aq293Lh0sUaZT/yYKPDKn4tlAbkH96SPJwIhwSwTsoQQZxuh1jnqsKwyymoiBdWA== + dependencies: + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.0.4": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.5.0.tgz#7cee76d08f88d1873574c849e0207dcb32380cc9" @@ -1569,6 +2068,20 @@ "@ethersproject/properties" "^5.5.0" "@ethersproject/strings" "^5.5.0" +"@ethersproject/hash@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.6.0.tgz#d24446a5263e02492f9808baa99b6e2b4c3429a2" + integrity sha512-fFd+k9gtczqlr0/BruWLAu7UAOas1uRRJvOR84uDf4lNZ+bTkGl366qvniUZHKtlqxBRU65MkOobkmvmpHU+jA== + dependencies: + "@ethersproject/abstract-signer" "^5.6.0" + "@ethersproject/address" "^5.6.0" + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/keccak256" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.0" + "@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.0.0-beta.130", "@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.5.0.tgz#e4b1f9d7701da87c564ffe336f86dcee82983492" @@ -1577,11 +2090,24 @@ "@ethersproject/bytes" "^5.5.0" js-sha3 "0.8.0" +"@ethersproject/keccak256@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.6.0.tgz#fea4bb47dbf8f131c2e1774a1cecbfeb9d606459" + integrity sha512-tk56BJ96mdj/ksi7HWZVWGjCq0WVl/QvfhFQNeL8fxhBlGoP+L80uDCiQcpJPd+2XxkivS3lwRm3E0CXTfol0w== + dependencies: + "@ethersproject/bytes" "^5.6.0" + js-sha3 "0.8.0" + "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.5.0.tgz#0c2caebeff98e10aefa5aef27d7441c7fd18cf5d" integrity sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg== +"@ethersproject/logger@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.6.0.tgz#d7db1bfcc22fd2e4ab574cba0bb6ad779a9a3e7a" + integrity sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg== + "@ethersproject/networks@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.5.0.tgz#babec47cab892c51f8dd652ce7f2e3e14283981a" @@ -1589,6 +2115,13 @@ dependencies: "@ethersproject/logger" "^5.5.0" +"@ethersproject/networks@^5.6.0": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.6.1.tgz#7a21ed1f83e86121737b16841961ec99ccf5c9c7" + integrity sha512-b2rrupf3kCTcc3jr9xOWBuHylSFtbpJf79Ga7QR98ienU2UqGimPGEsYMgbI29KHJfA5Us89XwGVmxrlxmSrMg== + dependencies: + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.5.0.tgz#61f00f2bb83376d2071baab02245f92070c59995" @@ -1596,6 +2129,13 @@ dependencies: "@ethersproject/logger" "^5.5.0" +"@ethersproject/properties@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.6.0.tgz#38904651713bc6bdd5bdd1b0a4287ecda920fa04" + integrity sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg== + dependencies: + "@ethersproject/logger" "^5.6.0" + "@ethersproject/rlp@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.5.0.tgz#530f4f608f9ca9d4f89c24ab95db58ab56ab99a0" @@ -1604,6 +2144,14 @@ "@ethersproject/bytes" "^5.5.0" "@ethersproject/logger" "^5.5.0" +"@ethersproject/rlp@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.6.0.tgz#55a7be01c6f5e64d6e6e7edb6061aa120962a717" + integrity sha512-dz9WR1xpcTL+9DtOT/aDO+YyxSSdO8YIS0jyZwHHSlAmnxA6cKU3TrTd4Xc/bHayctxTgGLYNuVVoiXE4tTq1g== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/signing-key@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.5.0.tgz#2aa37169ce7e01e3e80f2c14325f624c29cedbe0" @@ -1616,6 +2164,18 @@ elliptic "6.5.4" hash.js "1.1.7" +"@ethersproject/signing-key@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.6.0.tgz#4f02e3fb09e22b71e2e1d6dc4bcb5dafa69ce042" + integrity sha512-S+njkhowmLeUu/r7ir8n78OUKx63kBdMCPssePS89So1TH4hZqnWFsThEd/GiXYp9qMxVrydf7KdM9MTGPFukA== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + bn.js "^4.11.9" + elliptic "6.5.4" + hash.js "1.1.7" + "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.5.0.tgz#e6784d00ec6c57710755699003bc747e98c5d549" @@ -1625,6 +2185,15 @@ "@ethersproject/constants" "^5.5.0" "@ethersproject/logger" "^5.5.0" +"@ethersproject/strings@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.6.0.tgz#9891b26709153d996bf1303d39a7f4bc047878fd" + integrity sha512-uv10vTtLTZqrJuqBZR862ZQjTIa724wGPWQqZrofaPI/kUsf53TBG0I0D+hQ1qyNtllbNzaW+PDPHHUI6/65Mg== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/constants" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.5.0.tgz#7e9bf72e97bcdf69db34fe0d59e2f4203c7a2908" @@ -1640,6 +2209,21 @@ "@ethersproject/rlp" "^5.5.0" "@ethersproject/signing-key" "^5.5.0" +"@ethersproject/transactions@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.6.0.tgz#4b594d73a868ef6e1529a2f8f94a785e6791ae4e" + integrity sha512-4HX+VOhNjXHZyGzER6E/LVI2i6lf9ejYeWD6l4g50AdmimyuStKc39kvKf1bXWQMg7QNVh+uC7dYwtaZ02IXeg== + dependencies: + "@ethersproject/address" "^5.6.0" + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/constants" "^5.6.0" + "@ethersproject/keccak256" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/rlp" "^5.6.0" + "@ethersproject/signing-key" "^5.6.0" + "@ethersproject/web@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.5.0.tgz#0e5bb21a2b58fb4960a705bfc6522a6acf461e28" @@ -1651,11 +2235,27 @@ "@ethersproject/properties" "^5.5.0" "@ethersproject/strings" "^5.5.0" +"@ethersproject/web@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.6.0.tgz#4bf8b3cbc17055027e1a5dd3c357e37474eaaeb8" + integrity sha512-G/XHj0hV1FxI2teHRfCGvfBUHFmU+YOSbCxlAMqJklxSa7QMiHFQfAxvwY2PFqgvdkxEKwRNr/eCjfAPEm2Ctg== + dependencies: + "@ethersproject/base64" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.0" + "@gar/promisify@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.2.tgz#30aa825f11d438671d585bd44e7fd564535fc210" integrity sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw== +"@gar/promisify@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + "@hapi/address@2.x.x": version "2.1.4" resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" @@ -1688,10 +2288,10 @@ dependencies: "@hapi/hoek" "^8.3.0" -"@headlessui/react@^1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.4.2.tgz#87e264f190dbebbf8dfdd900530da973dad24576" - integrity sha512-N8tv7kLhg9qGKBkVdtg572BvKvWhmiudmeEpOCyNwzOsZHCXBtl8AazGikIfUS+vBoub20Fse3BjawXDVPPdug== +"@headlessui/react@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.5.0.tgz#483b44ba2c8b8d4391e1d2c863898d7dd0cc0296" + integrity sha512-aaRnYxBb3MU2FNJf3Ut9RMTUqqU3as0aI1lQhgo2n9Fa67wRu14iOGqx93xB+uMNVfNwZ5B3y/Ndm7qZGuFeMQ== "@humanwhocodes/config-array@^0.5.0": version "0.5.0" @@ -1707,10 +2307,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== -"@hutson/parse-repository-url@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" - integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== +"@isaacs/string-locale-compare@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" + integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" @@ -1899,6 +2499,31 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" +"@jridgewell/resolve-uri@^3.0.3": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz#68eb521368db76d040a6315cdb24bf2483037b9c" + integrity sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.11" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz#771a1d8d744eeb71b6adb35808e1a6c7b9b8c8ec" + integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg== + +"@jridgewell/trace-mapping@^0.3.0", "@jridgewell/trace-mapping@^0.3.4": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz#f6a0832dffd5b8a6aaa633b7d9f8e8e94c83a0c3" + integrity sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@ledgerhq/cryptoassets@^6.27.0": + version "6.27.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/cryptoassets/-/cryptoassets-6.27.0.tgz#1a4efdef07858e8cb1b2dd4c1b9e110f1ed60f3f" + integrity sha512-fM1tm+xJSkbgEB73RtWeTeogcWRkpAcgZX+hBGbvq7anhbRwF2jD4EL897SRNwDuvCKFfpSMxpSUaSvEmj9Lcw== + dependencies: + invariant "2" + "@ledgerhq/devices@^4.78.0": version "4.78.0" resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-4.78.0.tgz#149b572f0616096e2bd5eb14ce14d0061c432be6" @@ -1908,11 +2533,26 @@ "@ledgerhq/logs" "^4.72.0" rxjs "^6.5.3" +"@ledgerhq/devices@^6.24.1": + version "6.24.1" + resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-6.24.1.tgz#9696d7831aa1a1a8204cdfa55df13f892b7da162" + integrity sha512-6SNXWXxojUF6WKXMVIbRs15Mveg+9k0RKJK/PKlwZh929Lnr/NcbONWdwPjWKZAp1g82eEPT4jIkG6qc4QXlcA== + dependencies: + "@ledgerhq/errors" "^6.10.0" + "@ledgerhq/logs" "^6.10.0" + rxjs "6" + semver "^7.3.5" + "@ledgerhq/errors@^4.78.0": version "4.78.0" resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-4.78.0.tgz#23daf3af54d03b1bda3e616002b555da1bdb705a" integrity sha512-FX6zHZeiNtegBvXabK6M5dJ+8OV8kQGGaGtuXDeK/Ss5EmG4Ltxc6Lnhe8hiHpm9pCHtktOsnUVL7IFBdHhYUg== +"@ledgerhq/errors@^6.10.0": + version "6.10.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-6.10.0.tgz#dda9127b65f653fbb2f74a55e8f0e550d69de6e4" + integrity sha512-fQFnl2VIXh9Yd41lGjReCeK+Q2hwxQJvLZfqHnKqWapTz68NHOv5QcI0OHuZVNEbv0xhgdLhi5b65kgYeQSUVg== + "@ledgerhq/hw-app-eth@^4.3.0": version "4.78.0" resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-eth/-/hw-app-eth-4.78.0.tgz#fbd7ffe7f371d0c32a53f38c5149ab8d13514297" @@ -1921,6 +2561,20 @@ "@ledgerhq/errors" "^4.78.0" "@ledgerhq/hw-transport" "^4.78.0" +"@ledgerhq/hw-app-eth@^6.26.0": + version "6.27.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-eth/-/hw-app-eth-6.27.0.tgz#944f901a95ed3d82759e3fb011859b1b357620a9" + integrity sha512-7uyXu7dCsFmgGWSaXqasxb9Cegrw54HtCeMcZIkq1yqR9ik0ipQIPG1/qW+TqWfS6VYNkorUSsnKc67Cc+0MwA== + dependencies: + "@ethersproject/abi" "^5.5.0" + "@ethersproject/rlp" "^5.5.0" + "@ledgerhq/cryptoassets" "^6.27.0" + "@ledgerhq/errors" "^6.10.0" + "@ledgerhq/hw-transport" "^6.24.1" + "@ledgerhq/logs" "^6.10.0" + axios "^0.26.1" + bignumber.js "^9.0.2" + "@ledgerhq/hw-transport-node-hid-noevents@^4.78.0": version "4.78.0" resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-4.78.0.tgz#6f0dbe1bbfad6516b42ad2d6b6b34a8b07e4cd46" @@ -1954,6 +2608,16 @@ "@ledgerhq/hw-transport" "^4.24.0" u2f-api "0.2.7" +"@ledgerhq/hw-transport-webhid@^6.24.1": + version "6.24.1" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-webhid/-/hw-transport-webhid-6.24.1.tgz#6ffcf42140023be8e5c6365b944656de2e3efd82" + integrity sha512-jeOB4oSQyytJD99FU+xNUkEflgSB6hWUbzhEqnz7fExnGJhMrRT39035dEmSdwshsOFBhzR/IwTUzlwNZzhNxQ== + dependencies: + "@ledgerhq/devices" "^6.24.1" + "@ledgerhq/errors" "^6.10.0" + "@ledgerhq/hw-transport" "^6.24.1" + "@ledgerhq/logs" "^6.10.0" + "@ledgerhq/hw-transport@^4.24.0", "@ledgerhq/hw-transport@^4.78.0": version "4.78.0" resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-4.78.0.tgz#714786658e1f2fbc0569e06e2abf8d15d310d931" @@ -1963,11 +2627,25 @@ "@ledgerhq/errors" "^4.78.0" events "^3.0.0" +"@ledgerhq/hw-transport@^6.24.1": + version "6.24.1" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-6.24.1.tgz#5e787268e6d5ce4f9f0d53b0d520c1f071c2d1ae" + integrity sha512-cOhxkQJrN7DvPFLLXAS2nqAZ7NIDaFqnbgu9ugTccgbJm2/z7ClRZX/uQoI4FscswZ47MuJQdXqz4nK48phteQ== + dependencies: + "@ledgerhq/devices" "^6.24.1" + "@ledgerhq/errors" "^6.10.0" + events "^3.3.0" + "@ledgerhq/logs@^4.72.0": version "4.72.0" resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-4.72.0.tgz#43df23af013ad1135407e5cf33ca6e4c4c7708d5" integrity sha512-o+TYF8vBcyySRsb2kqBDv/KMeme8a2nwWoG+lAWzbDmWfb2/MrVWYCVYDYvjXdSoI/Cujqy1i0gIDrkdxa9chA== +"@ledgerhq/logs@^6.10.0": + version "6.10.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-6.10.0.tgz#c012c1ecc1a0e53d50e6af381618dca5268461c1" + integrity sha512-lLseUPEhSFUXYTKj6q7s2O3s2vW2ebgA11vMAlKodXGf5AFw4zUoEbTz9CoFOC9jS6xY4Qr8BmRnxP/odT4Uuw== + "@metamask/obs-store@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@metamask/obs-store/-/obs-store-7.0.0.tgz#6cae5f28306bb3e83a381bc9ae22682316095bd3" @@ -1988,6 +2666,114 @@ resolved "https://registry.yarnpkg.com/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz#af577b477c683fad17c619a78208cede06f9605c" integrity sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q== +"@mui/base@5.0.0-alpha.74": + version "5.0.0-alpha.74" + resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-alpha.74.tgz#15509242e7911446d5957375b1b18cbb72b3a750" + integrity sha512-pw3T1xNXpW8pLo9+BvtyazZb0CSjNJsjbzznlbV/aNkBfjNPXQVI3X1NDm3WSI8y6M96WDIVO7XrHAohOwALSQ== + dependencies: + "@babel/runtime" "^7.17.2" + "@emotion/is-prop-valid" "^1.1.2" + "@mui/types" "^7.1.3" + "@mui/utils" "^5.5.3" + "@popperjs/core" "^2.11.4" + clsx "^1.1.1" + prop-types "^15.7.2" + react-is "^17.0.2" + +"@mui/material@^5.5.3": + version "5.5.3" + resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.5.3.tgz#411e53a69da3f9d6664e99f1bdcdaf2760540fdc" + integrity sha512-eADa3kUYbbr1jNjcufn0a7HeU8cSo0agbrkj720hodxVFNIfzq7a2e58Z+PaZqll55kMGBvlYJ7rTcXU399x5A== + dependencies: + "@babel/runtime" "^7.17.2" + "@mui/base" "5.0.0-alpha.74" + "@mui/system" "^5.5.3" + "@mui/types" "^7.1.3" + "@mui/utils" "^5.5.3" + "@types/react-transition-group" "^4.4.4" + clsx "^1.1.1" + csstype "^3.0.11" + hoist-non-react-statics "^3.3.2" + prop-types "^15.7.2" + react-is "^17.0.2" + react-transition-group "^4.4.2" + +"@mui/private-theming@^5.5.3": + version "5.5.3" + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.5.3.tgz#c232a39dd3c268fdef7e92ccc40d51bda9eec3ab" + integrity sha512-Wf7NurY7lk8SBWelSBY2U02zxLt1773JpIcXTHuEC9/GZdQA4CXCJGl2cVQzheKhee5rZ+8JwGulrRiVl1m+4A== + dependencies: + "@babel/runtime" "^7.17.2" + "@mui/utils" "^5.5.3" + prop-types "^15.7.2" + +"@mui/styled-engine@^5.5.2": + version "5.5.2" + resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.5.2.tgz#1f92dd27d76f0b7df7aa52c7c7a710e59b2275a6" + integrity sha512-jkz5AHHbA43akBo5L3y1X1/X0f+RvXvCp3eXKt+iOf3qnKSAausbtlVz7gBbC4xIWDnP1Jb/6T+t/0/7gObRYA== + dependencies: + "@babel/runtime" "^7.17.2" + "@emotion/cache" "^11.7.1" + prop-types "^15.7.2" + +"@mui/styles@^5.5.0": + version "5.5.3" + resolved "https://registry.yarnpkg.com/@mui/styles/-/styles-5.5.3.tgz#e462adec9a24ee4f6982394c172f20221bef30d7" + integrity sha512-jxiXgyzYXDh5pUdfKvs5ZTJqQRNFUgbG9Q/hOPh0nHrKYmlrikt2Z3b9Rjrkp2QCh9R3kuy8LHlv/u+QjnnIqg== + dependencies: + "@babel/runtime" "^7.17.2" + "@emotion/hash" "^0.8.0" + "@mui/private-theming" "^5.5.3" + "@mui/types" "^7.1.3" + "@mui/utils" "^5.5.3" + clsx "^1.1.1" + csstype "^3.0.11" + hoist-non-react-statics "^3.3.2" + jss "^10.8.2" + jss-plugin-camel-case "^10.8.2" + jss-plugin-default-unit "^10.8.2" + jss-plugin-global "^10.8.2" + jss-plugin-nested "^10.8.2" + jss-plugin-props-sort "^10.8.2" + jss-plugin-rule-value-function "^10.8.2" + jss-plugin-vendor-prefixer "^10.8.2" + prop-types "^15.7.2" + +"@mui/system@^5.5.3": + version "5.5.3" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.5.3.tgz#c78d4c16009430389ffd3495d694945422d72ca5" + integrity sha512-J9JcySJuEqfEoP334K/2gEWm2vOx73Uqjii3qlFVhWRBOAJ0Pjyk0sN5W/eVRbwhUm95DNgh2V5s8dRK3vzyVw== + dependencies: + "@babel/runtime" "^7.17.2" + "@mui/private-theming" "^5.5.3" + "@mui/styled-engine" "^5.5.2" + "@mui/types" "^7.1.3" + "@mui/utils" "^5.5.3" + clsx "^1.1.1" + csstype "^3.0.11" + prop-types "^15.7.2" + +"@mui/types@^7.1.3": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.1.3.tgz#d7636f3046110bcccc63e6acfd100e2ad9ca712a" + integrity sha512-DDF0UhMBo4Uezlk+6QxrlDbchF79XG6Zs0zIewlR4c0Dt6GKVFfUtzPtHCH1tTbcSlq/L2bGEdiaoHBJ9Y1gSA== + +"@mui/utils@^5.5.3": + version "5.5.3" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.5.3.tgz#f6e1f10c0e8f4d0bf750588c2c3a96ad819c5b65" + integrity sha512-t627eVRpl3SlxVya0cIVNs8jPl4KCEiGaTSWY9iKKTcMNaeDbuRML+zv/CFHDPr1zFv+FjJSP02ySB+tZ8xIag== + dependencies: + "@babel/runtime" "^7.17.2" + "@types/prop-types" "^15.7.4" + "@types/react-is" "^16.7.1 || ^17.0.0" + prop-types "^15.7.2" + react-is "^17.0.2" + +"@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3": + version "2.1.8-no-fsevents.3" + resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz#323d72dd25103d0c4fbdce89dadf574a787b1f9b" + integrity sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ== + "@noble/hashes@^0.5.2": version "0.5.5" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-0.5.5.tgz#32ee0eecf4aa0933a97cbc5ba5a35715b917c7ab" @@ -2019,6 +2805,72 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@npmcli/arborist@^5.0.0", "@npmcli/arborist@^5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-5.0.3.tgz#3ba8e0a357eaf6e1c56d44b7379214079e57a05b" + integrity sha512-dlLhJypoPftnvlu0l21yb1PXiD7kofZ6NFIAatuAI31xHPnfo0QQjV59ocwbm+gyqgE+m25/erutzTj5LdJ+kQ== + dependencies: + "@isaacs/string-locale-compare" "^1.1.0" + "@npmcli/installed-package-contents" "^1.0.7" + "@npmcli/map-workspaces" "^2.0.0" + "@npmcli/metavuln-calculator" "^3.0.1" + "@npmcli/move-file" "^1.1.0" + "@npmcli/name-from-folder" "^1.0.1" + "@npmcli/node-gyp" "^1.0.3" + "@npmcli/package-json" "^1.0.1" + "@npmcli/run-script" "^3.0.0" + bin-links "^3.0.0" + cacache "^16.0.0" + common-ancestor-path "^1.0.1" + json-parse-even-better-errors "^2.3.1" + json-stringify-nice "^1.1.4" + mkdirp "^1.0.4" + mkdirp-infer-owner "^2.0.0" + nopt "^5.0.0" + npm-install-checks "^4.0.0" + npm-package-arg "^9.0.0" + npm-pick-manifest "^7.0.0" + npm-registry-fetch "^13.0.0" + npmlog "^6.0.1" + pacote "^13.0.5" + parse-conflict-json "^2.0.1" + proc-log "^2.0.0" + promise-all-reject-late "^1.0.0" + promise-call-limit "^1.0.1" + read-package-json-fast "^2.0.2" + readdir-scoped-modules "^1.1.0" + rimraf "^3.0.2" + semver "^7.3.5" + ssri "^8.0.1" + treeverse "^1.0.4" + walk-up-path "^1.0.0" + +"@npmcli/ci-detect@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-2.0.0.tgz#e63c91bcd4185ac1e85720a34fc48e164ece5b89" + integrity sha512-8yQtQ9ArHh/TzdUDKQwEvwCgpDuhSWTDAbiKMl3854PcT+Dk4UmWaiawuFTLy9n5twzXOBXVflWe+90/ffXQrA== + +"@npmcli/config@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-4.0.1.tgz#4aa4c184f766cef6f227d0439485e4b940968c04" + integrity sha512-pd9lYWFuDARcfXyXJKm/aHy7p9bYDKfUh/7Kg1L+3YYgCmqtqe4exFSnEIDuFO361A8xcKnj2Edev/Cj1cWbgg== + dependencies: + "@npmcli/map-workspaces" "^2.0.1" + ini "^2.0.0" + mkdirp-infer-owner "^2.0.0" + nopt "^5.0.0" + proc-log "^2.0.0" + read-package-json-fast "^2.0.3" + semver "^7.3.5" + walk-up-path "^1.0.0" + +"@npmcli/disparity-colors@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/disparity-colors/-/disparity-colors-1.0.1.tgz#b23c864c9658f9f0318d5aa6d17986619989535c" + integrity sha512-kQ1aCTTU45mPXN+pdAaRxlxr3OunkyztjbbxDY/aIcPS5CnCUrx+1+NvA6pTcYR7wmLZe37+Mi5v3nfbwPxq3A== + dependencies: + ansi-styles "^4.3.0" + "@npmcli/fs@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.0.0.tgz#589612cfad3a6ea0feafcb901d29c63fd52db09f" @@ -2027,7 +2879,58 @@ "@gar/promisify" "^1.0.1" semver "^7.3.5" -"@npmcli/move-file@^1.0.1": +"@npmcli/fs@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.0.tgz#f2a21c28386e299d1a9fae8051d35ad180e33109" + integrity sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ== + dependencies: + "@gar/promisify" "^1.1.3" + semver "^7.3.5" + +"@npmcli/git@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-3.0.0.tgz#466a18980da6b646a8112a7676688ae5347deba3" + integrity sha512-xfSBJ+KBMZWWqRHFbEgIaXG/LtELHrQZMJ72Gkb3yWdHysu/7+VGOs8ME0c3td7QNQX57Ggo3kYL6ylcd70/kA== + dependencies: + "@npmcli/promise-spawn" "^1.3.2" + lru-cache "^7.3.1" + mkdirp "^1.0.4" + npm-pick-manifest "^7.0.0" + proc-log "^2.0.0" + promise-inflight "^1.0.1" + promise-retry "^2.0.1" + semver "^7.3.5" + which "^2.0.2" + +"@npmcli/installed-package-contents@^1.0.7": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" + integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== + dependencies: + npm-bundled "^1.1.1" + npm-normalize-package-bin "^1.0.1" + +"@npmcli/map-workspaces@^2.0.0", "@npmcli/map-workspaces@^2.0.1", "@npmcli/map-workspaces@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-2.0.2.tgz#dfc87ced615afeb98a081da2aa9bba072bf6712d" + integrity sha512-ED54EslGsHFWBPN5x8JAOszuWywuoXYSi9E3HQRsgVkWnqsdTBJDSM4IFMRwmmBUbCHAxmP3wGLu1WMm4fhrOw== + dependencies: + "@npmcli/name-from-folder" "^1.0.1" + glob "^7.2.0" + minimatch "^5.0.1" + read-package-json-fast "^2.0.3" + +"@npmcli/metavuln-calculator@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-3.0.1.tgz#b486beee5f4ccde54b138f1e399aa0da8b4ab694" + integrity sha512-XnaD5UfV/qQoIEPWnfBntw8Ik5HWkxEc1wCmfHxhogdj06bwP51nAyU3QLBdhnFsmQQElqV0S8eHXn2zEXnSZw== + dependencies: + cacache "^16.0.0" + json-parse-even-better-errors "^2.3.1" + pacote "^13.0.3" + semver "^7.3.5" + +"@npmcli/move-file@^1.0.1", "@npmcli/move-file@^1.1.0", "@npmcli/move-file@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== @@ -2035,6 +2938,141 @@ mkdirp "^1.0.4" rimraf "^3.0.2" +"@npmcli/name-from-folder@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz#77ecd0a4fcb772ba6fe927e2e2e155fbec2e6b1a" + integrity sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA== + +"@npmcli/node-gyp@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz#a912e637418ffc5f2db375e93b85837691a43a33" + integrity sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA== + +"@npmcli/package-json@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-1.0.1.tgz#1ed42f00febe5293c3502fd0ef785647355f6e89" + integrity sha512-y6jnu76E9C23osz8gEMBayZmaZ69vFOIk8vR1FJL/wbEJ54+9aVG9rLTjQKSXfgYZEr50nw1txBBFfBZZe+bYg== + dependencies: + json-parse-even-better-errors "^2.3.1" + +"@npmcli/promise-spawn@^1.2.0", "@npmcli/promise-spawn@^1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz#42d4e56a8e9274fba180dabc0aea6e38f29274f5" + integrity sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg== + dependencies: + infer-owner "^1.0.4" + +"@npmcli/run-script@^3.0.0", "@npmcli/run-script@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-3.0.1.tgz#9d10b46586300074cc9e53ef320130a69567e1ce" + integrity sha512-o2fkld5hYwu9sKYzoXTpqEocMnDLaigobaPzLaGB63k/ExmLBTaB+KpfKlpcIePPnuP8RFR+0GDI4KopJCM6Xg== + dependencies: + "@npmcli/node-gyp" "^1.0.3" + "@npmcli/promise-spawn" "^1.3.2" + node-gyp "^9.0.0" + read-package-json-fast "^2.0.3" + +"@octokit/auth-token@^2.4.4": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.5.0.tgz#27c37ea26c205f28443402477ffd261311f21e36" + integrity sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g== + dependencies: + "@octokit/types" "^6.0.3" + +"@octokit/core@^3.5.1": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.6.0.tgz#3376cb9f3008d9b3d110370d90e0a1fcd5fe6085" + integrity sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q== + dependencies: + "@octokit/auth-token" "^2.4.4" + "@octokit/graphql" "^4.5.8" + "@octokit/request" "^5.6.3" + "@octokit/request-error" "^2.0.5" + "@octokit/types" "^6.0.3" + before-after-hook "^2.2.0" + universal-user-agent "^6.0.0" + +"@octokit/endpoint@^6.0.1": + version "6.0.12" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.12.tgz#3b4d47a4b0e79b1027fb8d75d4221928b2d05658" + integrity sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA== + dependencies: + "@octokit/types" "^6.0.3" + is-plain-object "^5.0.0" + universal-user-agent "^6.0.0" + +"@octokit/graphql@^4.5.8": + version "4.8.0" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.8.0.tgz#664d9b11c0e12112cbf78e10f49a05959aa22cc3" + integrity sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg== + dependencies: + "@octokit/request" "^5.6.0" + "@octokit/types" "^6.0.3" + universal-user-agent "^6.0.0" + +"@octokit/openapi-types@^11.2.0": + version "11.2.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-11.2.0.tgz#b38d7fc3736d52a1e96b230c1ccd4a58a2f400a6" + integrity sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA== + +"@octokit/plugin-paginate-rest@^2.16.8": + version "2.17.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz#32e9c7cab2a374421d3d0de239102287d791bce7" + integrity sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw== + dependencies: + "@octokit/types" "^6.34.0" + +"@octokit/plugin-request-log@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" + integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== + +"@octokit/plugin-rest-endpoint-methods@^5.12.0": + version "5.13.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz#8c46109021a3412233f6f50d28786f8e552427ba" + integrity sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA== + dependencies: + "@octokit/types" "^6.34.0" + deprecation "^2.3.1" + +"@octokit/request-error@^2.0.5", "@octokit/request-error@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.1.0.tgz#9e150357831bfc788d13a4fd4b1913d60c74d677" + integrity sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg== + dependencies: + "@octokit/types" "^6.0.3" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^5.6.0", "@octokit/request@^5.6.3": + version "5.6.3" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.3.tgz#19a022515a5bba965ac06c9d1334514eb50c48b0" + integrity sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A== + dependencies: + "@octokit/endpoint" "^6.0.1" + "@octokit/request-error" "^2.1.0" + "@octokit/types" "^6.16.1" + is-plain-object "^5.0.0" + node-fetch "^2.6.7" + universal-user-agent "^6.0.0" + +"@octokit/rest@^18.0.0": + version "18.12.0" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.12.0.tgz#f06bc4952fc87130308d810ca9d00e79f6988881" + integrity sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q== + dependencies: + "@octokit/core" "^3.5.1" + "@octokit/plugin-paginate-rest" "^2.16.8" + "@octokit/plugin-request-log" "^1.0.4" + "@octokit/plugin-rest-endpoint-methods" "^5.12.0" + +"@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.34.0": + version "6.34.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.34.0.tgz#c6021333334d1ecfb5d370a8798162ddf1ae8218" + integrity sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw== + dependencies: + "@octokit/openapi-types" "^11.2.0" + "@pmmmwh/react-refresh-webpack-plugin@0.4.3": version "0.4.3" resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.3.tgz#1eec460596d200c0236bf195b078a5d1df89b766" @@ -2047,6 +3085,11 @@ schema-utils "^2.6.5" source-map "^0.7.3" +"@popperjs/core@^2.11.4": + version "2.11.4" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.4.tgz#d8c7b8db9226d2d7664553a0741ad7d0397ee503" + integrity sha512-q/ytXxO5NKvyT37pmisQAItCFqA7FD/vNb8dgaJy3/630Fsc+Mz9/9f2SziBoIZ30TJooXyTwZmhi1zjXmObYg== + "@portis/web3-provider-engine@1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@portis/web3-provider-engine/-/web3-provider-engine-1.1.2.tgz#97f383156ea6b70fba69ae93a945fdd94159b1ba" @@ -2113,6 +3156,110 @@ estree-walker "^1.0.1" picomatch "^2.2.2" +"@semantic-release/changelog@^6.0.0": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@semantic-release/changelog/-/changelog-6.0.1.tgz#8dd0334fd8c7d50cda747d2591e4f18f816b3c9c" + integrity sha512-FT+tAGdWHr0RCM3EpWegWnvXJ05LQtBkQUaQRIExONoXjVjLuOILNm4DEKNaV+GAQyJjbLRVs57ti//GypH6PA== + dependencies: + "@semantic-release/error" "^3.0.0" + aggregate-error "^3.0.0" + fs-extra "^9.0.0" + lodash "^4.17.4" + +"@semantic-release/commit-analyzer@^9.0.1", "@semantic-release/commit-analyzer@^9.0.2": + version "9.0.2" + resolved "https://registry.yarnpkg.com/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz#a78e54f9834193b55f1073fa6258eecc9a545e03" + integrity sha512-E+dr6L+xIHZkX4zNMe6Rnwg4YQrWNXK+rNsvwOPpdFppvZO1olE2fIgWhv89TkQErygevbjsZFSIxp+u6w2e5g== + dependencies: + conventional-changelog-angular "^5.0.0" + conventional-commits-filter "^2.0.0" + conventional-commits-parser "^3.2.3" + debug "^4.0.0" + import-from "^4.0.0" + lodash "^4.17.4" + micromatch "^4.0.2" + +"@semantic-release/error@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@semantic-release/error/-/error-2.2.0.tgz#ee9d5a09c9969eade1ec864776aeda5c5cddbbf0" + integrity sha512-9Tj/qn+y2j+sjCI3Jd+qseGtHjOAeg7dU2/lVcqIQ9TV3QDaDXDYXcoOHU+7o2Hwh8L8ymL4gfuO7KxDs3q2zg== + +"@semantic-release/error@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@semantic-release/error/-/error-3.0.0.tgz#30a3b97bbb5844d695eb22f9d3aa40f6a92770c2" + integrity sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw== + +"@semantic-release/git@^10.0.0": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@semantic-release/git/-/git-10.0.1.tgz#c646e55d67fae623875bf3a06a634dd434904498" + integrity sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w== + dependencies: + "@semantic-release/error" "^3.0.0" + aggregate-error "^3.0.0" + debug "^4.0.0" + dir-glob "^3.0.0" + execa "^5.0.0" + lodash "^4.17.4" + micromatch "^4.0.0" + p-reduce "^2.0.0" + +"@semantic-release/github@^8.0.0": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-8.0.2.tgz#80114a41f6ec8ab6c0d38a436b48ff3f2223ab16" + integrity sha512-wIbfhOeuxlYzMTjtSAa2xgr54n7ZuPAS2gadyTWBpUt2PNAPgla7A6XxCXJnaKPgfVF0iFfSk3B+KlVKk6ByVg== + dependencies: + "@octokit/rest" "^18.0.0" + "@semantic-release/error" "^2.2.0" + aggregate-error "^3.0.0" + bottleneck "^2.18.1" + debug "^4.0.0" + dir-glob "^3.0.0" + fs-extra "^10.0.0" + globby "^11.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + issue-parser "^6.0.0" + lodash "^4.17.4" + mime "^3.0.0" + p-filter "^2.0.0" + p-retry "^4.0.0" + url-join "^4.0.0" + +"@semantic-release/npm@^9.0.0", "@semantic-release/npm@^9.0.1": + version "9.0.1" + resolved "https://registry.yarnpkg.com/@semantic-release/npm/-/npm-9.0.1.tgz#d81828eb1fb771e2767b3a8ee989915e1af27075" + integrity sha512-I5nVZklxBzfMFwemhRNbSrkiN/dsH3c7K9+KSk6jUnq0rdLFUuJt7EBsysq4Ir3moajQgFkfEryEHPqiKJj20g== + dependencies: + "@semantic-release/error" "^3.0.0" + aggregate-error "^3.0.0" + execa "^5.0.0" + fs-extra "^10.0.0" + lodash "^4.17.15" + nerf-dart "^1.0.0" + normalize-url "^6.0.0" + npm "^8.3.0" + rc "^1.2.8" + read-pkg "^5.0.0" + registry-auth-token "^4.0.0" + semver "^7.1.2" + tempy "^1.0.0" + +"@semantic-release/release-notes-generator@^10.0.0", "@semantic-release/release-notes-generator@^10.0.2": + version "10.0.3" + resolved "https://registry.yarnpkg.com/@semantic-release/release-notes-generator/-/release-notes-generator-10.0.3.tgz#85f7ca78bfa6b01fb5fda0ac48112855d69171dc" + integrity sha512-k4x4VhIKneOWoBGHkx0qZogNjCldLPRiAjnIpMnlUh6PtaWXp/T+C9U7/TaNDDtgDa5HMbHl4WlREdxHio6/3w== + dependencies: + conventional-changelog-angular "^5.0.0" + conventional-changelog-writer "^5.0.0" + conventional-commits-filter "^2.0.0" + conventional-commits-parser "^3.2.3" + debug "^4.0.0" + get-stream "^6.0.0" + import-from "^4.0.0" + into-stream "^6.0.0" + lodash "^4.17.4" + read-pkg-up "^7.0.0" + "@sindresorhus/is@^0.14.0": version "0.14.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" @@ -2132,6 +3279,11 @@ dependencies: "@sinonjs/commons" "^1.7.0" +"@splitbee/web@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@splitbee/web/-/web-0.3.0.tgz#676ebe877b6d82a10ece6527a07f70b1994d242e" + integrity sha512-jNPDKg0GQGa4jCaBc6JQsv0NHmBA80WCwZE49nFyhcbo32WF0GyqXeice7ZApy7OUHI16bAUAzm4MOQw3gvxfQ== + "@surma/rollup-plugin-off-main-thread@^1.1.1": version "1.4.2" resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-1.4.2.tgz#e6786b6af5799f82f7ab3a82e53f6182d2b91a58" @@ -2299,6 +3451,11 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + "@toruslabs/eccrypto@^1.1.7": version "1.1.8" resolved "https://registry.yarnpkg.com/@toruslabs/eccrypto/-/eccrypto-1.1.8.tgz#ce1eac9c3964a091cdc74956a62036b5719a41eb" @@ -2532,6 +3689,11 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== +"@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" @@ -2584,7 +3746,7 @@ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.2.tgz#4c62fae93eb479660c3bd93f9d24d561597a8281" integrity sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA== -"@types/prop-types@*": +"@types/prop-types@*", "@types/prop-types@^15.7.4": version "15.7.4" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ== @@ -2594,6 +3756,20 @@ resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df" integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== +"@types/react-is@^16.7.1 || ^17.0.0": + version "17.0.3" + resolved "https://registry.yarnpkg.com/@types/react-is/-/react-is-17.0.3.tgz#2d855ba575f2fc8d17ef9861f084acc4b90a137a" + integrity sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw== + dependencies: + "@types/react" "*" + +"@types/react-transition-group@^4.4.4": + version "4.4.4" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.4.tgz#acd4cceaa2be6b757db61ed7b432e103242d163e" + integrity sha512-7gAPz7anVK5xzbeQW9wFBDg7G++aPLAFY0QaSMOou9rJZpbuI58WAuJrgu+qR92l61grlnCUe7AFX8KGahAgug== + dependencies: + "@types/react" "*" + "@types/react@*": version "17.0.37" resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.37.tgz#6884d0aa402605935c397ae689deed115caad959" @@ -2610,6 +3786,11 @@ dependencies: "@types/node" "*" +"@types/retry@^0.12.0": + version "0.12.1" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.1.tgz#d8f1c0d0dc23afad6dc16a9e993a0865774b4065" + integrity sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g== + "@types/scheduler@*": version "0.16.2" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" @@ -2728,6 +3909,13 @@ eslint-scope "^5.0.0" eslint-utils "^2.0.0" +"@typescript-eslint/experimental-utils@^5.0.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.17.0.tgz#303ba1d766d715c3225a31845b54941889e52f6c" + integrity sha512-U4sM5z0/ymSYqQT6I7lz8l0ZZ9zrya5VIwrwAP5WOJVabVtVsIpTMxPQe+D3qLyePT+VlETUTO2nA1+PufPx9Q== + dependencies: + "@typescript-eslint/utils" "5.17.0" + "@typescript-eslint/parser@^4.1.0", "@typescript-eslint/parser@^4.5.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.33.0.tgz#dfe797570d9694e560528d18eecad86c8c744899" @@ -2746,6 +3934,14 @@ "@typescript-eslint/types" "4.33.0" "@typescript-eslint/visitor-keys" "4.33.0" +"@typescript-eslint/scope-manager@5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.17.0.tgz#4cea7d0e0bc0e79eb60cad431c89120987c3f952" + integrity sha512-062iCYQF/doQ9T2WWfJohQKKN1zmmXVfAcS3xaiialiw8ZUGy05Em6QVNYJGO34/sU1a7a+90U3dUNfqUDHr3w== + dependencies: + "@typescript-eslint/types" "5.17.0" + "@typescript-eslint/visitor-keys" "5.17.0" + "@typescript-eslint/types@3.10.1": version "3.10.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727" @@ -2756,6 +3952,11 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== +"@typescript-eslint/types@5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.17.0.tgz#861ec9e669ffa2aa9b873dd4d28d9b1ce26d216f" + integrity sha512-AgQ4rWzmCxOZLioFEjlzOI3Ch8giDWx8aUDxyNw9iOeCvD3GEYAB7dxWGQy4T/rPVe8iPmu73jPHuaSqcjKvxw== + "@typescript-eslint/typescript-estree@3.10.1": version "3.10.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz#fd0061cc38add4fad45136d654408569f365b853" @@ -2783,6 +3984,31 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.17.0.tgz#a7cba7dfc8f9cc2ac78c18584e684507df4f2488" + integrity sha512-X1gtjEcmM7Je+qJRhq7ZAAaNXYhTgqMkR10euC4Si6PIjb+kwEQHSxGazXUQXFyqfEXdkGf6JijUu5R0uceQzg== + dependencies: + "@typescript-eslint/types" "5.17.0" + "@typescript-eslint/visitor-keys" "5.17.0" + debug "^4.3.2" + globby "^11.0.4" + is-glob "^4.0.3" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.17.0", "@typescript-eslint/utils@^5.13.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.17.0.tgz#549a9e1d491c6ccd3624bc3c1b098f5cfb45f306" + integrity sha512-DVvndq1QoxQH+hFv+MUQHrrWZ7gQ5KcJzyjhzcqB1Y2Xes1UQQkTRPUfRpqhS8mhTWsSb2+iyvDW1Lef5DD7vA== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.17.0" + "@typescript-eslint/types" "5.17.0" + "@typescript-eslint/typescript-estree" "5.17.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + "@typescript-eslint/visitor-keys@3.10.1": version "3.10.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz#cd4274773e3eb63b2e870ac602274487ecd1e931" @@ -2798,6 +4024,14 @@ "@typescript-eslint/types" "4.33.0" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.17.0.tgz#52daae45c61b0211b4c81b53a71841911e479128" + integrity sha512-6K/zlc4OfCagUu7Am/BD5k8PSWQOgh34Nrv9Rxe2tBzlJ7uOeJ/h7ugCGDCeEZHT6k2CJBhbk9IsbkPI0uvUkA== + dependencies: + "@typescript-eslint/types" "5.17.0" + eslint-visitor-keys "^3.0.0" + "@walletconnect/browser-utils@^1.6.6": version "1.6.6" resolved "https://registry.yarnpkg.com/@walletconnect/browser-utils/-/browser-utils-1.6.6.tgz#a985b48c99c65a986a051d66a4910010a10a0c56" @@ -3240,7 +4474,7 @@ abab@^2.0.3, abab@^2.0.5: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== -abbrev@1: +abbrev@1, abbrev@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== @@ -3319,11 +4553,6 @@ acorn@^8.2.4, acorn@^8.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.6.0.tgz#e3692ba0eb1a0c83eaa4f37f5fa7368dd7142895" integrity sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw== -add-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" - integrity sha1-anmQQ3ynNtXhKI25K9MmbV9csqo= - address@1.1.2, address@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" @@ -3347,13 +4576,22 @@ aes-js@^3.1.1, aes-js@^3.1.2: resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.1.2.tgz#db9aabde85d5caabbfc0d4f2a4446960f627146a" integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ== -agent-base@6: +agent-base@6, agent-base@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" +agentkeepalive@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" + integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== + dependencies: + debug "^4.1.0" + depd "^1.1.2" + humanize-ms "^1.2.1" + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -3367,12 +4605,12 @@ ajv-errors@^1.0.0: resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== -ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: +ajv-keywords@^3.0.0, ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.0.1, ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -3402,6 +4640,13 @@ amdefine@>=0.0.4: resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= +ansi-align@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= + dependencies: + string-width "^2.0.0" + ansi-colors@^3.0.0: version "3.2.4" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" @@ -3419,6 +4664,13 @@ ansi-escapes@^4.2.1, ansi-escapes@^4.3.0, ansi-escapes@^4.3.1: dependencies: type-fest "^0.21.3" +ansi-escapes@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" + integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== + dependencies: + type-fest "^1.0.2" + ansi-html@0.0.7, ansi-html@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" @@ -3429,6 +4681,11 @@ ansi-regex@^2.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= +ansi-regex@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== + ansi-regex@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" @@ -3439,6 +4696,11 @@ ansi-regex@^5.0.0, ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -3451,7 +4713,7 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0, ansi-styles@^4.1.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0, ansi-styles@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== @@ -3463,6 +4725,21 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== +ansi-styles@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.1.0.tgz#87313c102b8118abd57371afab34618bf7350ed3" + integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ== + +ansicolors@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" + integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk= + +ansistyles@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" + integrity sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk= + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -3484,6 +4761,24 @@ aproba@^1.0.3, aproba@^1.1.1: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +"aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +archy@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= + +are-we-there-yet@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz#ba20bd6b553e31d62fc8c31bd23d22b95734390d" + integrity sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + are-we-there-yet@~1.1.2: version "1.1.7" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" @@ -3499,6 +4794,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argv-formatter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/argv-formatter/-/argv-formatter-1.0.0.tgz#a0ca0cbc29a5b73e836eebe1cbf6c5e0e4eb82f9" + integrity sha1-oMoMvCmltz6Dbuvhy/bF4OTrgvk= + aria-query@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" @@ -3517,12 +4817,19 @@ arity-n@^1.0.4: resolved "https://registry.yarnpkg.com/arity-n/-/arity-n-1.0.4.tgz#d9e76b11733e08569c0847ae7b39b2860b30b745" integrity sha1-2edrEXM+CFacCEeuezmyhgswt0U= +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8= + dependencies: + arr-flatten "^1.0.1" + arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= -arr-flatten@^1.1.0: +arr-flatten@^1.0.1, arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== @@ -3532,6 +4839,11 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -3575,6 +4887,11 @@ array-uniq@^1.0.1: resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= + array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" @@ -3608,7 +4925,7 @@ arrify@^2.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== -asap@~2.0.6: +asap@^2.0.0, asap@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= @@ -3721,6 +5038,18 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +autoprefixer@^7.1.2: + version "7.2.6" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.2.6.tgz#256672f86f7c735da849c4f07d008abb056067dc" + integrity sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ== + dependencies: + browserslist "^2.11.3" + caniuse-lite "^1.0.30000805" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^6.0.17" + postcss-value-parser "^3.2.3" + autoprefixer@^9.6.1: version "9.8.8" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.8.tgz#fd4bd4595385fa6f06599de749a4d5f7a474957a" @@ -3769,6 +5098,13 @@ axios@^0.23.0: dependencies: follow-redirects "^1.14.4" +axios@^0.26.1: + version "0.26.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.26.1.tgz#1ede41c51fcf51bbbd6fd43669caaa4f0495aaa9" + integrity sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA== + dependencies: + follow-redirects "^1.14.8" + axobject-query@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" @@ -4021,7 +5357,7 @@ babel-plugin-jest-hoist@^26.6.2: "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-plugin-macros@2.8.0: +babel-plugin-macros@2.8.0, babel-plugin-macros@^2.6.1: version "2.8.0" resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== @@ -4475,11 +5811,21 @@ backoff@^2.5.0: dependencies: precond "0.2" +bail@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" + integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +balanced-match@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9" + integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA== + base-x@^3.0.2, base-x@^3.0.8: version "3.0.9" resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" @@ -4522,6 +5868,11 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +before-after-hook@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" + integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== + bfj@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/bfj/-/bfj-7.0.2.tgz#1988ce76f3add9ac2913fd8ba47aad9e651bfbb2" @@ -4547,17 +5898,34 @@ bignumber.js@^9.0.0: resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5" integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA== +bignumber.js@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.2.tgz#71c6c6bed38de64e24a65ebe16cfcf23ae693673" + integrity sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw== + bignumber.js@~8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-8.0.2.tgz#d8c4e1874359573b1ef03011a2d861214aeef137" integrity sha512-EiuvFrnbv0jFixEQ9f58jo7X0qI2lNGIr/MxntmVzQc5JUweDSh8y8hbTCAomFtqwUPIOWcLXP0VEOSZTG7FFw== +bin-links@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-3.0.0.tgz#8273063638919f6ba4fbe890de9438c1b3adf0b7" + integrity sha512-fC7kPWcEkAWBgCKxmAMqZldlIeHsXwQy9JXzrppAVQiukGiDKxmYesJcBKWu6UMwx/5GOfo10wtK/4zy+Xt/mg== + dependencies: + cmd-shim "^4.0.1" + mkdirp-infer-owner "^2.0.0" + npm-normalize-package-bin "^1.0.0" + read-cmd-shim "^2.0.0" + rimraf "^3.0.0" + write-file-atomic "^4.0.0" + binary-extensions@^1.0.0: version "1.13.1" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== -binary-extensions@^2.0.0: +binary-extensions@^2.0.0, binary-extensions@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== @@ -4675,11 +6043,29 @@ boolbase@^1.0.0, boolbase@~1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= +bottleneck@^2.18.1: + version "2.19.5" + resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" + integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== + bowser@^2.9.0: version "2.11.0" resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== +boxen@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" + integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== + dependencies: + ansi-align "^2.0.0" + camelcase "^4.0.0" + chalk "^2.0.1" + cli-boxes "^1.0.0" + string-width "^2.0.0" + term-size "^1.2.0" + widest-line "^2.0.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -4688,6 +6074,22 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc= + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" @@ -4792,6 +6194,14 @@ browserslist@4.14.2: escalade "^3.0.2" node-releases "^1.1.61" +browserslist@^2.11.3: + version "2.11.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.3.tgz#fe36167aed1bbcde4827ebfe71347a2cc70b99b2" + integrity sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA== + dependencies: + caniuse-lite "^1.0.30000792" + electron-to-chromium "^1.3.30" + browserslist@^3.2.6: version "3.2.8" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" @@ -4923,6 +6333,11 @@ builtin-status-codes@^3.0.0: resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= + bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -4993,6 +6408,30 @@ cacache@^15.0.5: tar "^6.0.2" unique-filename "^1.1.1" +cacache@^16.0.0, cacache@^16.0.2: + version "16.0.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.0.3.tgz#0b6314bde969bd4098b03a5f90a351e8a1483f48" + integrity sha512-eC7wYodNCVb97kuHGk5P+xZsvUJHkhSEOyNwkenqQPAsOtrTjvWOE5vSPNBpz9d8X3acIf6w2Ub5s4rvOCTs4g== + dependencies: + "@npmcli/fs" "^2.1.0" + "@npmcli/move-file" "^1.1.2" + chownr "^2.0.0" + fs-minipass "^2.1.0" + glob "^7.2.0" + infer-owner "^1.0.4" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.1.11" + unique-filename "^1.1.1" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -5069,6 +6508,23 @@ camel-case@^4.1.1: pascal-case "^3.1.2" tslib "^2.0.3" +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase-keys@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" + integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= + dependencies: + camelcase "^4.1.0" + map-obj "^2.0.0" + quick-lru "^1.0.0" + camelcase-keys@^6.2.2: version "6.2.2" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" @@ -5083,6 +6539,16 @@ camelcase@5.3.1, camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= + +camelcase@^4.0.0, camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + camelcase@^6.0.0, camelcase@^6.1.0, camelcase@^6.2.0: version "6.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.1.tgz#250fd350cfd555d0d2160b1d51510eaf8326e86e" @@ -5103,6 +6569,11 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000981, can resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001283.tgz#8573685bdae4d733ef18f78d44ba0ca5fe9e896b" integrity sha512-9RoKo841j1GQFSJz/nCXOj0sD7tHBtlowjYlrqIUS812x9/emfBLBt6IyMz1zIaYc/eRL8Cs6HPUVi2Hzq4sIg== +caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805: + version "1.0.30001322" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001322.tgz#2e4c09d11e1e8f852767dab287069a8d0c29d623" + integrity sha512-neRmrmIrCGuMnxGSoh+x7zYtQFFgnSY2jaomjU56sCkTA6JINqQrxutF459JpWcWRajvoyn95sOXq4Pqrnyjew== + capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -5110,6 +6581,19 @@ capture-exit@^2.0.0: dependencies: rsvp "^4.8.4" +capture-stack-trace@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" + integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== + +cardinal@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" + integrity sha1-fMEFXYItISlU0HsIXeolHMe8VQU= + dependencies: + ansicolors "~0.3.2" + redeyed "~2.1.0" + case-sensitive-paths-webpack-plugin@2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz#23ac613cc9a856e4f88ff8bb73bbb5e989825cf7" @@ -5120,7 +6604,12 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@2.4.2, chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: +ccount@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" + integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== + +chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -5148,7 +6637,7 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0, chalk@^4.1.0: +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -5156,11 +6645,36 @@ chalk@^4.0.0, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.1.tgz#ca57d71e82bb534a296df63bbacc4a1c22b2a4b6" + integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w== + char-regex@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== +character-entities-html4@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.4.tgz#0e64b0a3753ddbf1fdc044c5fd01d0199a02e125" + integrity sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g== + +character-entities-legacy@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" + integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== + +character-entities@^1.0.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" + integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== + +character-reference-invalid@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" + integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== + check-types@^11.1.1: version "11.1.2" resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.1.2.tgz#86a7c12bf5539f6324eb0e70ca8896c0e38f3e2f" @@ -5192,6 +6706,21 @@ chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" +chokidar@^3.4.0: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + chokidar@^3.4.1: version "3.5.2" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" @@ -5222,11 +6751,23 @@ chrome-trace-event@^1.0.2: resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +cidr-regex@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-3.1.1.tgz#ba1972c57c66f61875f18fd7dd487469770b571d" + integrity sha512-RBqYd32aDwbCMFJRL6wHOlDNYJsPNTt8vC82ErHF5vKt8QQzxm1FrkW8s/R5pVrXMf17sba09Uoy91PKiddAsw== + dependencies: + ip-regex "^4.1.0" + cids@^0.7.1: version "0.7.5" resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2" @@ -5246,6 +6787,11 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" +circular-json@^0.3.1: + version "0.3.3" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== + cjs-module-lexer@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" @@ -5278,6 +6824,19 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== +cli-boxes@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= + +cli-columns@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-4.0.0.tgz#9fe4d65975238d55218c41bd2ed296a7fa555646" + integrity sha512-XW2Vg+w+L9on9wtwKpyzluIPCWXjaBahI7mTcYjx+BVIYD9c3yqcv/yKC7CmdCZat4rq2yiE1UMSJC5ivKfMtQ== + dependencies: + string-width "^4.2.3" + strip-ansi "^6.0.1" + cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" @@ -5285,7 +6844,16 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-truncate@2.1.0, cli-truncate@^2.1.0: +cli-table3@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.1.tgz#36ce9b7af4847f288d3cdd081fbd09bf7bd237b8" + integrity sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA== + dependencies: + string-width "^4.2.0" + optionalDependencies: + colors "1.4.0" + +cli-truncate@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== @@ -5293,6 +6861,14 @@ cli-truncate@2.1.0, cli-truncate@^2.1.0: slice-ansi "^3.0.0" string-width "^4.2.0" +cli-truncate@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" + integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== + dependencies: + slice-ansi "^5.0.0" + string-width "^5.0.0" + cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" @@ -5320,6 +6896,21 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" +clone-regexp@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-1.0.1.tgz#051805cd33173375d82118fc0918606da39fd60f" + integrity sha512-Fcij9IwRW27XedRIJnSOEupS7RVcXtObJXbcUOX93UCLqqOdRpkvzKywOOSizmEK/Is3S/RHX9dLdfo6R1Q1mw== + dependencies: + is-regexp "^1.0.0" + is-supported-regexp-flag "^1.0.0" + +clone-regexp@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-2.2.0.tgz#7d65e00885cd8796405c35a737e7a86b7429e36f" + integrity sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q== + dependencies: + is-regexp "^2.0.0" + clone-response@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" @@ -5332,11 +6923,23 @@ clone@2.1.2, clone@^2.0.0, clone@^2.1.1: resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= -clsx@^1.1.0: +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +clsx@^1.1.0, clsx@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== +cmd-shim@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-4.1.0.tgz#b3a904a6743e9fede4148c6f3800bf2a08135bdd" + integrity sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw== + dependencies: + mkdirp-infer-owner "^2.0.0" + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -5364,6 +6967,11 @@ coinstring@^2.0.0: bs58 "^2.0.1" create-hash "^1.1.1" +collapse-white-space@^1.0.2: + version "1.0.6" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" + integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== + collect-v8-coverage@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" @@ -5409,6 +7017,11 @@ color-string@^1.6.0: color-name "^1.0.0" simple-swizzle "^0.2.2" +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + color@^3.0.0: version "3.2.1" resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" @@ -5417,16 +7030,29 @@ color@^3.0.0: color-convert "^1.9.3" color-string "^1.6.0" -colorette@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" - integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== +colord@^2.9.2: + version "2.9.2" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.2.tgz#25e2bacbbaa65991422c07ea209e2089428effb1" + integrity sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ== colorette@^2.0.16: version "2.0.16" resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== +colors@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +columnify@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" + integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== + dependencies: + strip-ansi "^6.0.1" + wcwidth "^1.0.0" + combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -5439,16 +7065,21 @@ commander@^2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^4.0.0, commander@^4.1.1: +commander@^4.0.0, commander@^4.0.1, commander@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== -commander@^8.2.0: +commander@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== +common-ancestor-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" + integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== + common-tags@^1.8.0: version "1.8.2" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" @@ -5514,15 +7145,17 @@ concat-stream@^1.5.0, concat-stream@^1.5.1: readable-stream "^2.2.2" typedarray "^0.0.6" -concat-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" - integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== +configstore@^3.0.0: + version "3.1.5" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.5.tgz#e9af331fadc14dabd544d3e7e76dc446a09a530f" + integrity sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA== dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.0.2" - typedarray "^0.0.6" + dot-prop "^4.2.1" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + unique-string "^1.0.0" + write-file-atomic "^2.0.0" + xdg-basedir "^3.0.0" confusing-browser-globals@^1.0.10: version "1.0.10" @@ -5539,7 +7172,7 @@ console-browserify@^1.1.0: resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== -console-control-strings@^1.0.0, console-control-strings@~1.1.0: +console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= @@ -5554,119 +7187,39 @@ content-disposition@0.5.3: resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== dependencies: - safe-buffer "5.1.2" - -content-hash@^2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/content-hash/-/content-hash-2.5.2.tgz#bbc2655e7c21f14fd3bfc7b7d4bfe6e454c9e211" - integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== - dependencies: - cids "^0.7.1" - multicodec "^0.5.5" - multihashes "^0.4.15" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -conventional-changelog-angular@^5.0.12: - version "5.0.13" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c" - integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== - dependencies: - compare-func "^2.0.0" - q "^1.5.1" - -conventional-changelog-atom@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz#a759ec61c22d1c1196925fca88fe3ae89fd7d8de" - integrity sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw== - dependencies: - q "^1.5.1" - -conventional-changelog-codemirror@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz#398e9530f08ce34ec4640af98eeaf3022eb1f7dc" - integrity sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw== - dependencies: - q "^1.5.1" - -conventional-changelog-config-spec@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-config-spec/-/conventional-changelog-config-spec-2.1.0.tgz#874a635287ef8b581fd8558532bf655d4fb59f2d" - integrity sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ== - -conventional-changelog-conventionalcommits@4.6.1, conventional-changelog-conventionalcommits@^4.5.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.1.tgz#f4c0921937050674e578dc7875f908351ccf4014" - integrity sha512-lzWJpPZhbM1R0PIzkwzGBCnAkH5RKJzJfFQZcl/D+2lsJxAwGnDKBqn/F4C1RD31GJNn8NuKWQzAZDAVXPp2Mw== - dependencies: - compare-func "^2.0.0" - lodash "^4.17.15" - q "^1.5.1" - -conventional-changelog-core@^4.2.1: - version "4.2.4" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz#e50d047e8ebacf63fac3dc67bf918177001e1e9f" - integrity sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg== - dependencies: - add-stream "^1.0.0" - conventional-changelog-writer "^5.0.0" - conventional-commits-parser "^3.2.0" - dateformat "^3.0.0" - get-pkg-repo "^4.0.0" - git-raw-commits "^2.0.8" - git-remote-origin-url "^2.0.0" - git-semver-tags "^4.1.1" - lodash "^4.17.15" - normalize-package-data "^3.0.0" - q "^1.5.1" - read-pkg "^3.0.0" - read-pkg-up "^3.0.0" - through2 "^4.0.0" - -conventional-changelog-ember@^2.0.9: - version "2.0.9" - resolved "https://registry.yarnpkg.com/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz#619b37ec708be9e74a220f4dcf79212ae1c92962" - integrity sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A== - dependencies: - q "^1.5.1" - -conventional-changelog-eslint@^3.0.9: - version "3.0.9" - resolved "https://registry.yarnpkg.com/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz#689bd0a470e02f7baafe21a495880deea18b7cdb" - integrity sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA== - dependencies: - q "^1.5.1" + safe-buffer "5.1.2" -conventional-changelog-express@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz#420c9d92a347b72a91544750bffa9387665a6ee8" - integrity sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ== +content-hash@^2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/content-hash/-/content-hash-2.5.2.tgz#bbc2655e7c21f14fd3bfc7b7d4bfe6e454c9e211" + integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== dependencies: - q "^1.5.1" + cids "^0.7.1" + multicodec "^0.5.5" + multihashes "^0.4.15" -conventional-changelog-jquery@^3.0.11: - version "3.0.11" - resolved "https://registry.yarnpkg.com/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz#d142207400f51c9e5bb588596598e24bba8994bf" - integrity sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw== +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +conventional-changelog-angular@^5.0.0: + version "5.0.13" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c" + integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== dependencies: + compare-func "^2.0.0" q "^1.5.1" -conventional-changelog-jshint@^2.0.9: - version "2.0.9" - resolved "https://registry.yarnpkg.com/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz#f2d7f23e6acd4927a238555d92c09b50fe3852ff" - integrity sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA== +conventional-changelog-conventionalcommits@^4.6.3: + version "4.6.3" + resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz#0765490f56424b46f6cb4db9135902d6e5a36dc2" + integrity sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g== dependencies: compare-func "^2.0.0" + lodash "^4.17.15" q "^1.5.1" -conventional-changelog-preset-loader@^2.3.4: - version "2.3.4" - resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c" - integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== - conventional-changelog-writer@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.0.tgz#c4042f3f1542f2f41d7d2e0d6cad23aba8df8eec" @@ -5682,24 +7235,7 @@ conventional-changelog-writer@^5.0.0: split "^1.0.0" through2 "^4.0.0" -conventional-changelog@3.1.24: - version "3.1.24" - resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-3.1.24.tgz#ebd180b0fd1b2e1f0095c4b04fd088698348a464" - integrity sha512-ed6k8PO00UVvhExYohroVPXcOJ/K1N0/drJHx/faTH37OIZthlecuLIRX/T6uOp682CAoVoFpu+sSEaeuH6Asg== - dependencies: - conventional-changelog-angular "^5.0.12" - conventional-changelog-atom "^2.0.8" - conventional-changelog-codemirror "^2.0.8" - conventional-changelog-conventionalcommits "^4.5.0" - conventional-changelog-core "^4.2.1" - conventional-changelog-ember "^2.0.9" - conventional-changelog-eslint "^3.0.9" - conventional-changelog-express "^2.0.6" - conventional-changelog-jquery "^3.0.11" - conventional-changelog-jshint "^2.0.9" - conventional-changelog-preset-loader "^2.3.4" - -conventional-commits-filter@^2.0.7: +conventional-commits-filter@^2.0.0, conventional-commits-filter@^2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== @@ -5707,10 +7243,10 @@ conventional-commits-filter@^2.0.7: lodash.ismatch "^4.4.0" modify-values "^1.0.0" -conventional-commits-parser@^3.2.0: - version "3.2.3" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.3.tgz#fc43704698239451e3ef35fd1d8ed644f46bd86e" - integrity sha512-YyRDR7On9H07ICFpRm/igcdjIqebXbvf4Cff+Pf0BrBys1i1EOzx9iFXNlAbdrLAR8jf7bkUYkDAr8pEy0q4Pw== +conventional-commits-parser@^3.2.3: + version "3.2.4" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz#a7d3b77758a202a9b2293d2112a8d8052c740972" + integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== dependencies: JSONStream "^1.0.4" is-text-path "^1.0.1" @@ -5719,20 +7255,6 @@ conventional-commits-parser@^3.2.0: split2 "^3.0.0" through2 "^4.0.0" -conventional-recommended-bump@6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz#cfa623285d1de554012f2ffde70d9c8a22231f55" - integrity sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw== - dependencies: - concat-stream "^2.0.0" - conventional-changelog-preset-loader "^2.3.4" - conventional-commits-filter "^2.0.7" - conventional-commits-parser "^3.2.0" - git-raw-commits "^2.0.8" - git-semver-tags "^4.1.1" - meow "^8.0.0" - q "^1.5.1" - convert-source-map@1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" @@ -5745,7 +7267,7 @@ convert-source-map@^0.3.3: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190" integrity sha1-8dgClQr33SYxof6+BZZVDIarMZA= -convert-source-map@^1.4.0, convert-source-map@^1.5.1, convert-source-map@^1.6.0, convert-source-map@^1.7.0: +convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.5.1, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.8.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== @@ -5832,6 +7354,16 @@ cors@^2.8.1: object-assign "^4" vary "^1" +cosmiconfig@^3.0.1, cosmiconfig@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-3.1.0.tgz#640a94bf9847f321800403cd273af60665c73397" + integrity sha512-zedsBhLSbPBms+kE7AH4vHg6JsKDz6epSv2/+5XHs8ILHlgDciSJfSWf8sX9aQ52Jb7KI7VswUTsLpR/G0cr2Q== + dependencies: + is-directory "^0.3.1" + js-yaml "^3.9.0" + parse-json "^3.0.0" + require-from-string "^2.0.1" + cosmiconfig@^5.0.0: version "5.2.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" @@ -5880,6 +7412,13 @@ create-ecdh@^4.0.0: bn.js "^4.1.0" elliptic "^6.5.3" +create-error-class@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= + dependencies: + capture-stack-trace "^1.0.0" + create-hash@^1.1.0, create-hash@^1.1.1, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" @@ -5920,6 +7459,15 @@ cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -5953,6 +7501,11 @@ crypto-random-string@^1.0.0: resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + css-blank-pseudo@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz#dfdefd3254bf8a82027993674ccf35483bfcb3c5" @@ -5973,6 +7526,11 @@ css-declaration-sorter@^4.0.1: postcss "^7.0.1" timsort "^0.3.0" +css-functions-list@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.0.1.tgz#1460df7fb584d1692c30b105151dbb988c8094f9" + integrity sha512-PriDuifDt4u4rkDgnqRCLnjfMatufLmWNfQnGCq34xZwpY3oabwhB9SqRBmuvWUgndbemCFlKqg+nO7C2q0SBw== + css-has-pseudo@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz#3c642ab34ca242c59c41a125df9105841f6966ee" @@ -6048,6 +7606,14 @@ css-tree@^1.1.2: mdn-data "2.0.14" source-map "^0.6.1" +css-vendor@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-2.0.8.tgz#e47f91d3bd3117d49180a3c935e62e3d9f7f449d" + integrity sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ== + dependencies: + "@babel/runtime" "^7.8.3" + is-in-browser "^1.0.2" + css-what@^3.2.1: version "3.4.2" resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" @@ -6189,11 +7755,23 @@ cssstyle@^2.3.0: dependencies: cssom "~0.3.6" +csstype@^3.0.11: + version "3.0.11" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.11.tgz#d66700c5eacfac1940deb4e3ee5642792d85cd33" + integrity sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw== + csstype@^3.0.2: version "3.0.10" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.10.tgz#2ad3a7bed70f35b965707c092e5f30b327c290e5" integrity sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA== +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + cyclist@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" @@ -6212,11 +7790,6 @@ damerau-levenshtein@^1.0.7: resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz#64368003512a1a6992593741a09a9d31a836f55d" integrity sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw== -dargs@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" - integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== - dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -6266,14 +7839,26 @@ debug@=3.1.0: dependencies: ms "2.0.0" -debug@^3.1.1, debug@^3.2.6, debug@^3.2.7: +debug@^3.0.0, debug@^3.0.1, debug@^3.1.1, debug@^3.2.6, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" -decamelize-keys@^1.1.0: +debug@^4.0.0, debug@^4.3.3, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debuglog@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= + +decamelize-keys@^1.0.0, decamelize-keys@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= @@ -6281,7 +7866,7 @@ decamelize-keys@^1.1.0: decamelize "^1.1.0" map-obj "^1.0.0" -decamelize@^1.1.0, decamelize@^1.2.0: +decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -6350,6 +7935,13 @@ default-gateway@^4.2.0: execa "^1.0.0" ip-regex "^2.1.0" +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + defer-to-connect@^1.0.1: version "1.1.3" resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" @@ -6417,6 +8009,20 @@ del@^4.1.1: pify "^4.0.1" rimraf "^2.6.3" +del@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/del/-/del-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952" + integrity sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ== + dependencies: + globby "^11.0.1" + graceful-fs "^4.2.4" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.2" + p-map "^4.0.0" + rimraf "^3.0.2" + slash "^3.0.0" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -6427,11 +8033,16 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= -depd@~1.1.2: +depd@^1.1.2, depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= +deprecation@^2.0.0, deprecation@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + dequal@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.2.tgz#85ca22025e3a87e65ef75a7a437b35284a7e319d" @@ -6462,17 +8073,12 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" -detect-indent@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" - integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== - detect-libc@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= -detect-newline@^3.0.0, detect-newline@^3.1.0: +detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== @@ -6495,6 +8101,14 @@ detect-port-alt@1.1.6: address "^1.0.1" debug "^2.6.0" +dezalgo@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= + dependencies: + asap "^2.0.0" + wrappy "1" + diff-sequences@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" @@ -6505,6 +8119,11 @@ diff-sequences@^27.4.0: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.4.0.tgz#d783920ad8d06ec718a060d00196dfef25b132a5" integrity sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww== +diff@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -6519,7 +8138,14 @@ dijkstrajs@^1.0.1: resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.2.tgz#2e48c0d3b825462afe75ab4ad5e829c8ece36257" integrity sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg== -dir-glob@^3.0.1: +dir-glob@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" + integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== + dependencies: + path-type "^3.0.0" + +dir-glob@^3.0.0, dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== @@ -6572,6 +8198,14 @@ dom-converter@^0.2.0: dependencies: utila "~0.4" +dom-helpers@^5.0.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" + integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== + dependencies: + "@babel/runtime" "^7.8.7" + csstype "^3.0.2" + dom-serializer@0: version "0.2.2" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" @@ -6599,7 +8233,7 @@ domain-browser@^1.1.1: resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== -domelementtype@1: +domelementtype@1, domelementtype@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== @@ -6616,6 +8250,13 @@ domexception@^2.0.1: dependencies: webidl-conversions "^5.0.0" +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + domhandler@^4.0.0, domhandler@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.0.tgz#16c658c626cf966967e306f966b431f77d4a5626" @@ -6623,7 +8264,7 @@ domhandler@^4.0.0, domhandler@^4.2.0: dependencies: domelementtype "^2.2.0" -domutils@^1.7.0: +domutils@^1.5.1, domutils@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== @@ -6648,6 +8289,13 @@ dot-case@^3.0.4: no-case "^3.0.4" tslib "^2.0.3" +dot-prop@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4" + integrity sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ== + dependencies: + is-obj "^1.0.0" + dot-prop@^5.1.0, dot-prop@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" @@ -6665,14 +8313,6 @@ dotenv@8.2.0: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== -dotgitignore@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/dotgitignore/-/dotgitignore-2.1.0.tgz#a4b15a4e4ef3cf383598aaf1dfa4a04bcc089b7b" - integrity sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA== - dependencies: - find-up "^3.0.0" - minimatch "^3.0.4" - dotignore@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/dotignore/-/dotignore-0.1.2.tgz#f942f2200d28c3a76fbdd6f0ee9f3257c8a2e905" @@ -6689,6 +8329,13 @@ drbg.js@^1.0.1: create-hash "^1.1.2" create-hmac "^1.1.4" +duplexer2@~0.1.0: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= + dependencies: + readable-stream "^2.0.2" + duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" @@ -6709,6 +8356,11 @@ duplexify@^3.4.2, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -6727,6 +8379,11 @@ ejs@^2.6.1: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== +electron-to-chromium@^1.3.30: + version "1.4.98" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.98.tgz#1a9a0dec9792e78c5be1df052b6c74078d6b1b16" + integrity sha512-1IdsuSAnIGVxoYT1LkcUFb9MfjRxdHhCU9qiaDzhl1XvYgK9c8E2O9aJOPgGMQ68CSI8NxmLwrYhjvGauT8yuw== + electron-to-chromium@^1.3.47, electron-to-chromium@^1.3.564, electron-to-chromium@^1.3.896: version "1.4.5" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.5.tgz#912e8fd1645edee2f0f212558f40916eb538b1f9" @@ -6791,7 +8448,7 @@ encoding-down@5.0.4, encoding-down@~5.0.0: level-errors "^2.0.0" xtend "^4.0.1" -encoding@^0.1.11: +encoding@^0.1.11, encoding@^0.1.13: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== @@ -6814,18 +8471,32 @@ enhanced-resolve@^4.3.0: memory-fs "^0.5.0" tapable "^1.0.0" -enquirer@^2.3.5, enquirer@^2.3.6: +enquirer@^2.3.5: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== dependencies: ansi-colors "^4.1.1" +entities@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + entities@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== +env-ci@^5.0.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/env-ci/-/env-ci-5.5.0.tgz#43364e3554d261a586dec707bc32be81112b545f" + integrity sha512-o0JdWIbOLP+WJKIUt36hz1ImQQFuN92nhsfTkHHap+J8CiI8WgGpH/a9jEGHh4/TU5BUUGjlnKXNoDb57+ne+A== + dependencies: + execa "^5.0.0" + fromentries "^1.3.2" + java-properties "^1.0.0" + env-cmd@^10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/env-cmd/-/env-cmd-10.1.0.tgz#c7f5d3b550c9519f137fdac4dd8fb6866a8c8c4b" @@ -6839,6 +8510,11 @@ env-paths@^2.2.0: resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + errno@^0.1.3, errno@~0.1.1, errno@~0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" @@ -6846,7 +8522,7 @@ errno@^0.1.3, errno@~0.1.1, errno@~0.1.7: dependencies: prr "~1.0.1" -error-ex@^1.3.1: +error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== @@ -7000,6 +8676,14 @@ eslint-plugin-flowtype@^5.2.0: lodash "^4.17.15" string-natural-compare "^3.0.1" +eslint-plugin-flowtype@^8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz#e1557e37118f24734aa3122e7536a038d34a4912" + integrity sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ== + dependencies: + lodash "^4.17.21" + string-natural-compare "^3.0.1" + eslint-plugin-import@^2.22.1: version "2.25.3" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.3.tgz#a554b5f66e08fb4f6dc99221866e57cfff824766" @@ -7026,7 +8710,14 @@ eslint-plugin-jest@^24.1.0: dependencies: "@typescript-eslint/experimental-utils" "^4.0.1" -eslint-plugin-jsx-a11y@^6.3.1: +eslint-plugin-jest@^25.3.0: + version "25.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz#ff4ac97520b53a96187bad9c9814e7d00de09a6a" + integrity sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ== + dependencies: + "@typescript-eslint/experimental-utils" "^5.0.0" + +eslint-plugin-jsx-a11y@^6.3.1, eslint-plugin-jsx-a11y@^6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz#cdbf2df901040ca140b6ec14715c988889c2a6d8" integrity sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g== @@ -7076,6 +8767,26 @@ eslint-plugin-react@^7.21.5: semver "^6.3.0" string.prototype.matchall "^4.0.6" +eslint-plugin-react@^7.23.2: + version "7.29.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.29.4.tgz#4717de5227f55f3801a5fd51a16a4fa22b5914d2" + integrity sha512-CVCXajliVh509PcZYRFyu/BoUEz452+jtQJq2b3Bae4v3xBUWPLCmtmBM+ZinG4MzwmxJgJ2M5rMqhqLVn7MtQ== + dependencies: + array-includes "^3.1.4" + array.prototype.flatmap "^1.2.5" + doctrine "^2.1.0" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.5" + object.fromentries "^2.0.5" + object.hasown "^1.1.0" + object.values "^1.1.5" + prop-types "^15.8.1" + resolve "^2.0.0-next.3" + semver "^6.3.0" + string.prototype.matchall "^4.0.6" + eslint-plugin-testing-library@^3.9.2: version "3.10.2" resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-3.10.2.tgz#609ec2b0369da7cf2e6d9edff5da153cc31d87bd" @@ -7083,6 +8794,18 @@ eslint-plugin-testing-library@^3.9.2: dependencies: "@typescript-eslint/experimental-utils" "^3.10.1" +eslint-plugin-testing-library@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.1.0.tgz#6ad539a53d4e897d3045902f8e534e07cebd4e8b" + integrity sha512-YSNzasJUbyhOTe14ZPygeOBvcPvcaNkwHwrj4vdf+uirr2D32JTDaKi6CP5Os2aWtOcvt4uBSPXp9h5xGoqvWQ== + dependencies: + "@typescript-eslint/utils" "^5.13.0" + +eslint-rule-composer@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9" + integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== + eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" @@ -7118,11 +8841,16 @@ eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3 resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== -eslint-visitor-keys@^2.0.0: +eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== +eslint-visitor-keys@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + eslint-webpack-plugin@^2.5.2: version "2.6.0" resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-2.6.0.tgz#3bd4ada4e539cb1f6687d2f619073dbb509361cd" @@ -7190,7 +8918,7 @@ espree@^7.3.0, espree@^7.3.1: acorn-jsx "^5.3.1" eslint-visitor-keys "^1.3.0" -esprima@^4.0.0, esprima@^4.0.1: +esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -7824,6 +9552,19 @@ exec-sh@^0.3.2: resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -7852,7 +9593,7 @@ execa@^4.0.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" -execa@^5.1.1: +execa@^5.0.0, execa@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== @@ -7867,6 +9608,20 @@ execa@^5.1.1: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +execall@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execall/-/execall-1.0.0.tgz#73d0904e395b3cab0658b08d09ec25307f29bb73" + integrity sha1-c9CQTjlbPKsGWLCNCewlMH8pu3M= + dependencies: + clone-regexp "^1.0.0" + +execall@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/execall/-/execall-2.0.0.tgz#16a06b5fe5099df7d00be5d9c06eecded1663b45" + integrity sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow== + dependencies: + clone-regexp "^2.1.0" + exit-on-epipe@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" @@ -7877,6 +9632,13 @@ exit@^0.1.2: resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s= + dependencies: + is-posix-bracket "^0.1.0" + expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" @@ -7890,6 +9652,13 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc= + dependencies: + fill-range "^2.1.0" + expand-template@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" @@ -7965,11 +9734,18 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@~3.0.2: +extend@^3.0.0, extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE= + dependencies: + is-extglob "^1.0.0" + extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" @@ -8022,6 +9798,17 @@ fast-glob@^3.1.1: merge2 "^1.3.0" micromatch "^4.0.4" +fast-glob@^3.2.11, fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -8037,6 +9824,11 @@ fast-safe-stringify@^2.0.6, fast-safe-stringify@^2.1.1: resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== +fastest-levenshtein@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" + integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== + fastq@^1.6.0: version "1.13.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" @@ -8070,13 +9862,28 @@ figgy-pudding@^3.5.1: resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== -figures@^3.1.0: +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + +figures@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: escape-string-regexp "^1.0.5" +file-entry-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -8097,11 +9904,27 @@ file-uri-to-path@1.0.0: resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== +filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= + filesize@6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.1.0.tgz#e81bdaa780e2451d714d71c0d7a4f3238d37ad00" integrity sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg== +fill-range@^2.1.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" + integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q== + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^3.0.0" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -8150,6 +9973,11 @@ find-cache-dir@^3.3.1: make-dir "^3.0.2" pkg-dir "^4.1.0" +find-root@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== + find-up@4.1.0, find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -8158,6 +9986,14 @@ find-up@4.1.0, find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" @@ -8172,13 +10008,12 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== +find-versions@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-4.0.0.tgz#3c57e573bf97769b8cb8df16934b627915da4965" + integrity sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ== dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" + semver-regex "^3.1.2" find-yarn-workspace-root@^1.2.1: version "1.2.1" @@ -8188,6 +10023,16 @@ find-yarn-workspace-root@^1.2.1: fs-extra "^4.0.3" micromatch "^3.1.4" +flat-cache@^1.2.1: + version "1.3.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" + integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg== + dependencies: + circular-json "^0.3.1" + graceful-fs "^4.1.2" + rimraf "~2.6.2" + write "^0.2.1" + flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -8236,6 +10081,11 @@ follow-redirects@^1.14.4: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.6.tgz#8cfb281bbc035b3c067d6cd975b0f6ade6e855cd" integrity sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A== +follow-redirects@^1.14.8: + version "1.14.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7" + integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w== + for-each@^0.3.3, for-each@~0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" @@ -8243,11 +10093,18 @@ for-each@^0.3.3, for-each@~0.3.3: dependencies: is-callable "^1.1.3" -for-in@^1.0.2: +for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= + dependencies: + for-in "^1.0.1" + foreach@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" @@ -8313,7 +10170,7 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= -from2@^2.1.0: +from2@^2.1.0, from2@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= @@ -8321,18 +10178,25 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" -fs-access@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a" - integrity sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o= - dependencies: - null-check "^1.0.0" +fromentries@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" + integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== +fs-extra@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.1.tgz#27de43b4320e833f6867cc044bfce29fdf0ef3b8" + integrity sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^4.0.2, fs-extra@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" @@ -8360,7 +10224,7 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^9.0.1: +fs-extra@^9.0.0, fs-extra@^9.0.1: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -8377,13 +10241,18 @@ fs-minipass@^1.2.7: dependencies: minipass "^2.6.0" -fs-minipass@^2.0.0: +fs-minipass@^2.0.0, fs-minipass@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: minipass "^3.0.0" +fs-readdir-recursive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== + fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" @@ -8459,6 +10328,20 @@ ganache-core@^2.6.0: ethereumjs-wallet "0.6.5" web3 "1.2.11" +gauge@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.3.tgz#286cf105c1962c659f0963058fb05116c1b82d3f" + integrity sha512-ICw1DhAwMtb22rYFwEHgJcx1JCwJGv3x6G0OQUq56Nge+H4Q8JEwr8iveS0XFlsUNSI67F5ffMGK25bK4Pmskw== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -8509,21 +10392,21 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-pkg-repo@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" - integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== - dependencies: - "@hutson/parse-repository-url" "^3.0.0" - hosted-git-info "^4.0.0" - through2 "^2.0.0" - yargs "^16.2.0" - get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= +get-stdin@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" + integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g= + +get-stdin@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" + integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== + get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" @@ -8568,45 +10451,38 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -git-raw-commits@^2.0.8: - version "2.0.10" - resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.10.tgz#e2255ed9563b1c9c3ea6bd05806410290297bbc1" - integrity sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ== - dependencies: - dargs "^7.0.0" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^3.0.0" - through2 "^4.0.0" - -git-remote-origin-url@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" - integrity sha1-UoJlna4hBxRaERJhEq0yFuxfpl8= - dependencies: - gitconfiglocal "^1.0.0" - pify "^2.3.0" - -git-semver-tags@^4.0.0, git-semver-tags@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-4.1.1.tgz#63191bcd809b0ec3e151ba4751c16c444e5b5780" - integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA== - dependencies: - meow "^8.0.0" - semver "^6.0.0" - -gitconfiglocal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" - integrity sha1-QdBF84UaXqiPA/JMocYXgRRGS5s= +git-log-parser@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/git-log-parser/-/git-log-parser-1.2.0.tgz#2e6a4c1b13fc00028207ba795a7ac31667b9fd4a" + integrity sha1-LmpMGxP8AAKCB7p5WnrDFme5/Uo= dependencies: - ini "^1.3.2" + argv-formatter "~1.0.0" + spawn-error-forwarder "~1.0.0" + split2 "~1.0.0" + stream-combiner2 "~1.1.1" + through2 "~2.0.0" + traverse "~0.6.6" github-from-package@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= + dependencies: + is-glob "^2.0.0" + glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" @@ -8622,7 +10498,7 @@ glob-parent@^5.1.2, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" -glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== @@ -8646,7 +10522,14 @@ glob@~7.1.1, glob@~7.1.7: once "^1.3.0" path-is-absolute "^1.0.0" -global-modules@2.0.0: +global-dirs@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= + dependencies: + ini "^1.3.4" + +global-modules@2.0.0, global-modules@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== @@ -8699,6 +10582,18 @@ globby@11.0.1: merge2 "^1.3.0" slash "^3.0.0" +globby@^11.0.0, globby@^11.0.1, globby@^11.0.4, globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + globby@^11.0.3: version "11.0.4" resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" @@ -8722,6 +10617,23 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" +globby@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" + integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= + dependencies: + array-union "^1.0.1" + dir-glob "^2.0.0" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +globjoin@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" + integrity sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM= + globule@^1.0.0: version "1.3.3" resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.3.tgz#811919eeac1ab7344e905f2e3be80a13447973c2" @@ -8731,10 +10643,17 @@ globule@^1.0.0: lodash "~4.17.10" minimatch "~3.0.2" -goober@^2.0.35: - version "2.1.1" - resolved "https://registry.yarnpkg.com/goober/-/goober-2.1.1.tgz#2328a6dae015c3cd30fc55a70090037a244ad2f6" - integrity sha512-TkGCqHxE4g5DtdpwxFCi53bXRtvw0BoSgCihVSIOioe9kfkqin5wXG8BQKykN0tjzmxZJ81qU2KWinZf5qKVlw== +gonzales-pe@^4.0.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.3.0.tgz#fe9dec5f3c557eead09ff868c65826be54d067b3" + integrity sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ== + dependencies: + minimist "^1.2.5" + +goober@^2.1.1: + version "2.1.8" + resolved "https://registry.yarnpkg.com/goober/-/goober-2.1.8.tgz#e592c04d093cb38f77b38cfcb012b7811c85765e" + integrity sha512-S0C85gCzcfFCMSdjD/CxyQMt1rbf2qEg6hmDzxk2FfD7+7Ogk55m8ZFUMtqNaZM4VVX/qaU9AzSORG+Gf4ZpAQ== got@9.6.0: version "9.6.0" @@ -8753,6 +10672,23 @@ got@9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" +got@^6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= + dependencies: + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" + got@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" @@ -8778,6 +10714,11 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== +graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.9" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" + integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== + growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" @@ -8843,6 +10784,11 @@ has-bigints@^1.0.1: resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -8877,7 +10823,7 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" -has-unicode@^2.0.0: +has-unicode@^2.0.0, has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= @@ -8977,6 +10923,13 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" +hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" @@ -8985,6 +10938,11 @@ home-or-tmp@^2.0.0: os-homedir "^1.0.0" os-tmpdir "^1.0.1" +hook-std@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hook-std/-/hook-std-2.0.0.tgz#ff9aafdebb6a989a354f729bb6445cf4a3a7077c" + integrity sha512-zZ6T5WcuBMIUVh49iPQS9t977t7C0l7OtHrpeMb5uk48JdflRX0NSFvCekfYNmGQETnLq9W/isMyHl69kxGi8g== + hoopy@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" @@ -9002,6 +10960,13 @@ hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: dependencies: lru-cache "^6.0.0" +hosted-git-info@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-5.0.0.tgz#df7a06678b4ebd722139786303db80fdf302ea56" + integrity sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q== + dependencies: + lru-cache "^7.5.1" + hpack.js@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" @@ -9052,6 +11017,16 @@ html-minifier-terser@^5.0.1: relateurl "^0.2.7" terser "^4.6.3" +html-tags@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b" + integrity sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos= + +html-tags@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" + integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== + html-webpack-plugin@4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz#625097650886b97ea5dae331c320e3238f6c121c" @@ -9067,6 +11042,18 @@ html-webpack-plugin@4.5.0: tapable "^1.1.3" util.promisify "1.0.0" +htmlparser2@^3.9.2: + version "3.10.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + dependencies: + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" + htmlparser2@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" @@ -9077,7 +11064,7 @@ htmlparser2@^6.1.0: domutils "^2.5.2" entities "^2.0.0" -http-cache-semantics@^4.0.0: +http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== @@ -9138,6 +11125,15 @@ http-proxy-agent@^4.0.1: agent-base "6" debug "4" +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + http-proxy-middleware@0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" @@ -9189,11 +11185,23 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -husky@^7.0.1: +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= + dependencies: + ms "^2.0.0" + +husky@^7.0.4: version "7.0.4" resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.4.tgz#242048245dc49c8fb1bf0cc7cfb98dd722531535" integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ== +hyphenate-style-name@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" + integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== + iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -9239,6 +11247,18 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= +ignore-walk@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-4.0.1.tgz#fc840e8346cf88a3a9380c5b17933cd8f4d39fa3" + integrity sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw== + dependencies: + minimatch "^3.0.4" + +ignore@^3.3.3, ignore@^3.3.5: + version "3.3.10" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== + ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -9249,6 +11269,11 @@ ignore@^5.1.4, ignore@^5.1.8: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.9.tgz#9ec1a5cbe8e1446ec60d4420060d43aa6e7382fb" integrity sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ== +ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + immediate@^3.2.3: version "3.3.0" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" @@ -9294,6 +11319,29 @@ import-from@^2.1.0: dependencies: resolve-from "^3.0.0" +import-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-4.0.0.tgz#2710b8d66817d232e16f4166e319248d3d5492e2" + integrity sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ== + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= + +import-lazy@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" + integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== + +import-local@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-0.1.1.tgz#b1179572aacdc11c6a91009fb430dbcab5f668a8" + integrity sha1-sReVcqrNwRxqkQCftDDbyrX2aKg= + dependencies: + pkg-dir "^2.0.0" + resolve-cwd "^2.0.0" + import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" @@ -9315,6 +11363,18 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= + dependencies: + repeating "^2.0.0" + +indent-string@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= + indent-string@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" @@ -9338,7 +11398,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -9353,11 +11413,29 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.2, ini@^1.3.5, ini@~1.3.0: +ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== +ini@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== + +init-package-json@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-3.0.1.tgz#c3f2cc7d86e82be419cfc0122c1478090898fa1c" + integrity sha512-TGY3Ouc/zKzanMEfA4v/4b+kaCYqMrdriQQ0iPktKeIcoIkejULFt1ounGWFoJwq2cbdCwNxZsp8vaUhuz1caQ== + dependencies: + npm-package-arg "^9.0.0" + promzard "^0.3.0" + read "^1.0.7" + read-package-json "^5.0.0" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "^3.0.0" + internal-ip@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" @@ -9375,7 +11453,15 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" -invariant@^2.2.2: +into-stream@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-6.0.0.tgz#4bfc1244c0128224e18b8870e85b2de8e66c6702" + integrity sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA== + dependencies: + from2 "^2.3.0" + p-is-promise "^3.0.0" + +invariant@2, invariant@^2.2.2: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -9387,6 +11473,11 @@ ip-regex@^2.1.0: resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= +ip-regex@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" + integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== + ip@^1.1.0, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" @@ -9421,6 +11512,24 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-alphabetical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" + integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== + +is-alphanumeric@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4" + integrity sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ= + +is-alphanumerical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" + integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-arguments@^1.0.4: version "1.1.1" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" @@ -9468,7 +11577,7 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-buffer@^1.1.5: +is-buffer@^1.1.4, is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== @@ -9483,6 +11592,13 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.4: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== +is-ci@^1.0.10: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + dependencies: + ci-info "^1.5.0" + is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -9490,6 +11606,13 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" +is-cidr@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-4.0.2.tgz#94c7585e4c6c77ceabf920f8cde51b8c0fda8814" + integrity sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA== + dependencies: + cidr-regex "^3.1.1" + is-color-stop@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" @@ -9509,6 +11632,13 @@ is-core-module@^2.0.0, is-core-module@^2.2.0, is-core-module@^2.5.0, is-core-mod dependencies: has "^1.0.3" +is-core-module@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" + integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== + dependencies: + has "^1.0.3" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -9530,6 +11660,11 @@ is-date-object@^1.0.1: dependencies: has-tostringtag "^1.0.0" +is-decimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" + integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== + is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" @@ -9558,6 +11693,18 @@ is-docker@^2.0.0: resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== +is-dotfile@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ= + dependencies: + is-primitive "^2.0.0" + is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -9570,6 +11717,11 @@ is-extendable@^1.0.1: dependencies: is-plain-object "^2.0.4" +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= + is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -9602,6 +11754,11 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-fullwidth-code-point@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" + integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== + is-function@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" @@ -9619,6 +11776,13 @@ is-generator-function@^1.0.7: dependencies: has-tostringtag "^1.0.0" +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= + dependencies: + is-extglob "^1.0.0" + is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" @@ -9638,6 +11802,29 @@ is-hex-prefixed@1.0.0: resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" integrity sha1-fY035q135dEnFIkTxXPggtd39VQ= +is-hexadecimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" + integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== + +is-in-browser@^1.0.2, is-in-browser@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" + integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU= + +is-installed-globally@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= + dependencies: + global-dirs "^0.1.0" + is-path-inside "^1.0.0" + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= + is-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" @@ -9648,6 +11835,11 @@ is-negative-zero@^2.0.1: resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== +is-npm@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= + is-number-object@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" @@ -9655,6 +11847,13 @@ is-number-object@^1.0.4: dependencies: has-tostringtag "^1.0.0" +is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8= + dependencies: + kind-of "^3.0.2" + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -9662,12 +11861,17 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" +is-number@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== + is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^1.0.1: +is-obj@^1.0.0, is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= @@ -9682,7 +11886,7 @@ is-object@^1.0.1: resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== -is-path-cwd@^2.0.0: +is-path-cwd@^2.0.0, is-path-cwd@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== @@ -9694,6 +11898,13 @@ is-path-in-cwd@^2.0.0: dependencies: is-path-inside "^2.1.0" +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= + dependencies: + path-is-inside "^1.0.1" + is-path-inside@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" @@ -9701,6 +11912,11 @@ is-path-inside@^2.1.0: dependencies: path-is-inside "^1.0.2" +is-path-inside@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" @@ -9713,11 +11929,31 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= + is-potential-custom-element-name@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= + +is-redirect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= + is-regex@^1.0.4, is-regex@^1.1.4, is-regex@~1.1.3: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" @@ -9731,6 +11967,11 @@ is-regexp@^1.0.0: resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= +is-regexp@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-2.1.0.tgz#cd734a56864e23b956bf4e7c66c396a4c0b22c2d" + integrity sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA== + is-resolvable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" @@ -9773,6 +12014,11 @@ is-string@^1.0.5, is-string@^1.0.7: dependencies: has-tostringtag "^1.0.0" +is-supported-regexp-flag@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.1.tgz#21ee16518d2c1dd3edd3e9a0d57e50207ac364ca" + integrity sha512-3vcJecUUrpgCqc/ca0aWeNu64UGgxcvO60K/Fkr1N6RSvfGCTU60UKN68JDmKokgba0rFFJs12EnzOQa14ubKQ== + is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" @@ -9803,6 +12049,11 @@ is-typedarray@1.0.0, is-typedarray@^1.0.0, is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + is-weakref@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.1.tgz#842dba4ec17fa9ac9850df2d6efbc1737274f2a2" @@ -9810,11 +12061,21 @@ is-weakref@^1.0.1: dependencies: call-bind "^1.0.0" +is-whitespace-character@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" + integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w== + is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== +is-word-character@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" + integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== + is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" @@ -9872,6 +12133,17 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= +issue-parser@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/issue-parser/-/issue-parser-6.0.0.tgz#b1edd06315d4f2044a9755daf85fdafde9b4014a" + integrity sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA== + dependencies: + lodash.capitalize "^4.2.1" + lodash.escaperegexp "^4.1.2" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.uniqby "^4.7.0" + istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" @@ -9932,6 +12204,11 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" +java-properties@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/java-properties/-/java-properties-1.0.2.tgz#ccd1fa73907438a5b5c38982269d0e771fe78211" + integrity sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ== + javascript-natural-sort@0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz#f9e2303d4507f6d74355a73664d1440fb5a0ef59" @@ -10396,7 +12673,7 @@ jest@26.6.0: import-local "^3.0.2" jest-cli "^26.6.0" -js-base64@^2.1.8: +js-base64@^2.1.8, js-base64@^2.1.9: version "2.6.4" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== @@ -10436,7 +12713,7 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@^3.13.1: +js-yaml@^3.13.1, js-yaml@^3.9.0: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -10519,7 +12796,7 @@ json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-parse-even-better-errors@^2.3.0: +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== @@ -10591,6 +12868,11 @@ json-stable-stringify@^1.0.1: dependencies: jsonify "~0.0.0" +json-stringify-nice@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" + integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== + json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -10641,7 +12923,7 @@ jsonify@~0.0.0: resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= -jsonparse@^1.2.0: +jsonparse@^1.2.0, jsonparse@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= @@ -10661,6 +12943,76 @@ jsprim@^1.2.2: json-schema "0.4.0" verror "1.10.0" +jss-plugin-camel-case@^10.8.2: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.9.0.tgz#4921b568b38d893f39736ee8c4c5f1c64670aaf7" + integrity sha512-UH6uPpnDk413/r/2Olmw4+y54yEF2lRIV8XIZyuYpgPYTITLlPOsq6XB9qeqv+75SQSg3KLocq5jUBXW8qWWww== + dependencies: + "@babel/runtime" "^7.3.1" + hyphenate-style-name "^1.0.3" + jss "10.9.0" + +jss-plugin-default-unit@^10.8.2: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.9.0.tgz#bb23a48f075bc0ce852b4b4d3f7582bc002df991" + integrity sha512-7Ju4Q9wJ/MZPsxfu4T84mzdn7pLHWeqoGd/D8O3eDNNJ93Xc8PxnLmV8s8ZPNRYkLdxZqKtm1nPQ0BM4JRlq2w== + dependencies: + "@babel/runtime" "^7.3.1" + jss "10.9.0" + +jss-plugin-global@^10.8.2: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.9.0.tgz#fc07a0086ac97aca174e37edb480b69277f3931f" + integrity sha512-4G8PHNJ0x6nwAFsEzcuVDiBlyMsj2y3VjmFAx/uHk/R/gzJV+yRHICjT4MKGGu1cJq2hfowFWCyrr/Gg37FbgQ== + dependencies: + "@babel/runtime" "^7.3.1" + jss "10.9.0" + +jss-plugin-nested@^10.8.2: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.9.0.tgz#cc1c7d63ad542c3ccc6e2c66c8328c6b6b00f4b3" + integrity sha512-2UJnDrfCZpMYcpPYR16oZB7VAC6b/1QLsRiAutOt7wJaaqwCBvNsosLEu/fUyKNQNGdvg2PPJFDO5AX7dwxtoA== + dependencies: + "@babel/runtime" "^7.3.1" + jss "10.9.0" + tiny-warning "^1.0.2" + +jss-plugin-props-sort@^10.8.2: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.9.0.tgz#30e9567ef9479043feb6e5e59db09b4de687c47d" + integrity sha512-7A76HI8bzwqrsMOJTWKx/uD5v+U8piLnp5bvru7g/3ZEQOu1+PjHvv7bFdNO3DwNPC9oM0a//KwIJsIcDCjDzw== + dependencies: + "@babel/runtime" "^7.3.1" + jss "10.9.0" + +jss-plugin-rule-value-function@^10.8.2: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.9.0.tgz#379fd2732c0746fe45168011fe25544c1a295d67" + integrity sha512-IHJv6YrEf8pRzkY207cPmdbBstBaE+z8pazhPShfz0tZSDtRdQua5jjg6NMz3IbTasVx9FdnmptxPqSWL5tyJg== + dependencies: + "@babel/runtime" "^7.3.1" + jss "10.9.0" + tiny-warning "^1.0.2" + +jss-plugin-vendor-prefixer@^10.8.2: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.9.0.tgz#aa9df98abfb3f75f7ed59a3ec50a5452461a206a" + integrity sha512-MbvsaXP7iiVdYVSEoi+blrW+AYnTDvHTW6I6zqi7JcwXdc6I9Kbm234nEblayhF38EftoenbM+5218pidmC5gA== + dependencies: + "@babel/runtime" "^7.3.1" + css-vendor "^2.0.8" + jss "10.9.0" + +jss@10.9.0, jss@^10.8.2: + version "10.9.0" + resolved "https://registry.yarnpkg.com/jss/-/jss-10.9.0.tgz#7583ee2cdc904a83c872ba695d1baab4b59c141b" + integrity sha512-YpzpreB6kUunQBbrlArlsMpXYyndt9JATbt95tajx0t4MTJJcCJdd4hdNpHmOIDiUJrF/oX5wtVFrS3uofWfGw== + dependencies: + "@babel/runtime" "^7.3.1" + csstype "^3.0.2" + is-in-browser "^1.1.3" + tiny-warning "^1.0.2" + "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz#720b97bfe7d901b927d87c3773637ae8ea48781b" @@ -10669,6 +13021,16 @@ jsprim@^1.2.2: array-includes "^3.1.3" object.assign "^4.1.2" +just-diff-apply@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-4.0.1.tgz#da89c5a4ccb14aa8873c70e2c3b6695cef45dab5" + integrity sha512-AKOkzB5P6FkfP21UlZVX/OPXx/sC2GagpLX9cBxqHqDuRjwmZ/AJRKSNrB9jHPpRW1W1ONs6gly1gW46t055nQ== + +just-diff@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-5.0.1.tgz#db8fe1cfeea1156f2374bfb289826dca28e7e390" + integrity sha512-X00TokkRIDotUIf3EV4xUm6ELc/IkqhS/vPSHdWnsM5y0HoNMfEqrazizI7g78lpHvnRSRt/PFfKtRqJCOGIuQ== + keccak@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.1.tgz#ae30a0e94dbe43414f741375cff6d64c8bea0bff" @@ -10754,6 +13116,16 @@ klona@^2.0.4: resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc" integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== +known-css-properties@^0.24.0: + version "0.24.0" + resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.24.0.tgz#19aefd85003ae5698a5560d2b55135bf5432155c" + integrity sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA== + +known-css-properties@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.5.0.tgz#6ff66943ed4a5b55657ee095779a91f4536f8084" + integrity sha512-LOS0CoS8zcZnB1EjLw4LLqDXw8nvt3AGH5dXLQP3D9O1nLLA+9GC5GnPl5mmF+JiQAtSX4VyZC7KvEtcA4kUtA== + language-subtag-registry@~0.3.2: version "0.3.21" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a" @@ -10774,6 +13146,13 @@ last-call-webpack-plugin@^3.0.0: lodash "^4.17.5" webpack-sources "^1.1.0" +latest-version@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" + integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= + dependencies: + package-json "^4.0.0" + level-codec@^9.0.0: version "9.0.2" resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.2.tgz#fd60df8c64786a80d44e63423096ffead63d8cbc" @@ -10935,45 +13314,173 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +libnpmaccess@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-6.0.2.tgz#a694908ce7ee923ac2c2c2ca4ac457d52ce61b8f" + integrity sha512-/o/Kdio2IO0RJq8D+1K18FlNzt8CxF5hNDCQdPivMUcQyf3sCSZiS1Z86wDXlrmRtUvmsr31SK46vmPx66zaKQ== + dependencies: + aproba "^2.0.0" + minipass "^3.1.1" + npm-package-arg "^9.0.1" + npm-registry-fetch "^13.0.0" + +libnpmdiff@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-4.0.2.tgz#42081867ceef748783332030dafbece8b667336e" + integrity sha512-VKayY5f1dGVGpuar0Nqp6tabgk2sQE7+lmqiKidokRtMl68mWGxRHbf4mnUmFV3K3GLk3LKaw6qOjQCfMR8A+g== + dependencies: + "@npmcli/disparity-colors" "^1.0.1" + "@npmcli/installed-package-contents" "^1.0.7" + binary-extensions "^2.2.0" + diff "^5.0.0" + minimatch "^3.0.4" + npm-package-arg "^9.0.1" + pacote "^13.0.5" + tar "^6.1.0" + +libnpmexec@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-4.0.2.tgz#321b40c4bf77ca5e2735f5a312b270bb2eb445bf" + integrity sha512-3vTHWX5XfvyHa+7xrlErkNo0o+16WT0je+4pZcBBhh1Nx5NhWrTvBpyNCZAszJn4LyhKctVz/ZSTkxIZfDJBLg== + dependencies: + "@npmcli/arborist" "^5.0.0" + "@npmcli/ci-detect" "^2.0.0" + "@npmcli/run-script" "^3.0.0" + chalk "^4.1.0" + mkdirp-infer-owner "^2.0.0" + npm-package-arg "^9.0.1" + npmlog "^6.0.1" + pacote "^13.0.5" + proc-log "^2.0.0" + read "^1.0.7" + read-package-json-fast "^2.0.2" + walk-up-path "^1.0.0" + +libnpmfund@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-3.0.1.tgz#18dcf25c7d4d28dca73fa73ef5bcd3f7e8aaef1a" + integrity sha512-VXtKDWCfgyNgY9ioAx0/KmI4dQwCt4kkOEjfMa1ygTXMQisj3HvWa3ppMtrwp/LSE6VIGSaniRI/8YNomcwebA== + dependencies: + "@npmcli/arborist" "^5.0.0" + +libnpmhook@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-8.0.2.tgz#a0a03c09df79553516377068c91c91152be63c18" + integrity sha512-2Rgz+vuQEpzmgxZvnUNA6tjwPPvlwAT6DwUp+CDFlvBcFZsVGlmSrHgZRea5X1hknyqOz3or8l9REja42w7Yow== + dependencies: + aproba "^2.0.0" + npm-registry-fetch "^13.0.0" + +libnpmorg@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-4.0.2.tgz#40b73b90aded260e1597c4be247cc1d1983c8881" + integrity sha512-e64VgxlZesrRDW2mpwrIFTWi8nGHsInuS7qDp7iO1C3KQ4Z0LwVPRwomVt5pq28Da1aJzOaM77Sox+0EWVzhFg== + dependencies: + aproba "^2.0.0" + npm-registry-fetch "^13.0.0" + +libnpmpack@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-4.0.2.tgz#da12a656a3516b90171b09086498dc3b9063fe5c" + integrity sha512-BeRDo3isvb7g4n2aOIytEUlJg6CPTKSRuH+6GYue/CyRMXGGl6sqUWIy6Fj8fcXKAIoR2QEWOkSM5HzTWV8Liw== + dependencies: + "@npmcli/run-script" "^3.0.0" + npm-package-arg "^9.0.1" + pacote "^13.0.5" + +libnpmpublish@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-6.0.2.tgz#b9edb96edf69ae54bf93e312b4e5f8c27bc20cb3" + integrity sha512-A9RBB1KTh8/xPMt5n8Le+lyOMEgKpG+/2OuZQOjLPiW5iFfuoQJjSHtaRipvjmBdO0XpwqAmeaHZzPtmy++Fjg== + dependencies: + normalize-package-data "^4.0.0" + npm-package-arg "^9.0.1" + npm-registry-fetch "^13.0.0" + semver "^7.1.3" + ssri "^8.0.1" + +libnpmsearch@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-5.0.2.tgz#e44bdd47a3dc85f0daab76d73235e42eb808f3fb" + integrity sha512-lx3qLm+vOQzdYFGfL2tNldQVN08EatkvpOLRghsWQ47Y+jINFvDe3s5unsMLLF89CfQFqdaYLJ992yQLCwDbtQ== + dependencies: + npm-registry-fetch "^13.0.0" + +libnpmteam@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-4.0.2.tgz#0b2411275a43ca3fe59526f3ee2fd297cf12c2ea" + integrity sha512-1ZuzHLEMzOBsAALjupZnaFx2qG9Ki/XvB92vmR1HpSFA3ltEKjPMz9mB0JJZsRTZ+ajvUI7Gy8VuAIkNLXW1xA== + dependencies: + aproba "^2.0.0" + npm-registry-fetch "^13.0.0" + +libnpmversion@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-3.0.1.tgz#378ef2b092a4a633772b1e66620ce3c431dc3697" + integrity sha512-ZxOVWmMX+RBkOeJSiNPdhMqRaAOJXf3EDfvC6Mr90+NaM+gKptiw/NJBT3jKfZKbLn/wuC0Ey/sc4YNLoBk0Qw== + dependencies: + "@npmcli/git" "^3.0.0" + "@npmcli/run-script" "^3.0.0" + json-parse-even-better-errors "^2.3.1" + proc-log "^2.0.0" + semver "^7.3.5" + stringify-package "^1.0.1" + +lilconfig@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.4.tgz#f4507d043d7058b380b6a8f5cb7bcd4b34cee082" + integrity sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA== + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -lint-staged@^11.0.1: - version "11.2.6" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-11.2.6.tgz#f477b1af0294db054e5937f171679df63baa4c43" - integrity sha512-Vti55pUnpvPE0J9936lKl0ngVeTdSZpEdTNhASbkaWX7J5R9OEifo1INBGQuGW4zmy6OG+TcWPJ3m5yuy5Q8Tg== +lint-staged@^12.1.2: + version "12.3.7" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-12.3.7.tgz#ad0e2014302f704f9cf2c0ebdb97ac63d0f17be0" + integrity sha512-/S4D726e2GIsDVWIk1XGvheCaDm1SJRQp8efamZFWJxQMVEbOwSysp7xb49Oo73KYCdy97mIWinhlxcoNqIfIQ== dependencies: - cli-truncate "2.1.0" - colorette "^1.4.0" - commander "^8.2.0" - cosmiconfig "^7.0.1" - debug "^4.3.2" - enquirer "^2.3.6" + cli-truncate "^3.1.0" + colorette "^2.0.16" + commander "^8.3.0" + debug "^4.3.3" execa "^5.1.1" - listr2 "^3.12.2" + lilconfig "2.0.4" + listr2 "^4.0.1" micromatch "^4.0.4" normalize-path "^3.0.0" - please-upgrade-node "^3.2.0" - string-argv "0.3.1" - stringify-object "3.3.0" - supports-color "8.1.1" + object-inspect "^1.12.0" + pidtree "^0.5.0" + string-argv "^0.3.1" + supports-color "^9.2.1" + yaml "^1.10.2" -listr2@^3.12.2: - version "3.13.5" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.13.5.tgz#105a813f2eb2329c4aae27373a281d610ee4985f" - integrity sha512-3n8heFQDSk+NcwBn3CgxEibZGaRzx+pC64n3YjpMD1qguV4nWus3Al+Oo3KooqFKTQEJ1v7MmnbnyyNspgx3NA== +listr2@^4.0.1: + version "4.0.5" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-4.0.5.tgz#9dcc50221583e8b4c71c43f9c7dfd0ef546b75d5" + integrity sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA== dependencies: cli-truncate "^2.1.0" colorette "^2.0.16" log-update "^4.0.0" p-map "^4.0.0" rfdc "^1.3.0" - rxjs "^7.4.0" + rxjs "^7.5.5" through "^2.3.8" wrap-ansi "^7.0.0" +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" @@ -11048,28 +13555,41 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= +lodash.capitalize@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz#f826c9b4e2a8511d84e3aca29db05e1a4f3b72a9" + integrity sha1-+CbJtOKoUR2E46yinbBeGk87cqk= + lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= +lodash.escaperegexp@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" + integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= + lodash.ismatch@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= + lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -11105,6 +13625,11 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= +lodash.uniqby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" + integrity sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI= + lodash.values@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-4.3.0.tgz#a3a6c2b0ebecc5c2cba1c17e6e620fe81b53d347" @@ -11120,6 +13645,13 @@ lodash@4.17.21, "lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17. resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +log-symbols@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== + dependencies: + chalk "^2.0.1" + log-update@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" @@ -11135,6 +13667,11 @@ loglevel@^1.6.8, loglevel@^1.7.1, loglevel@^1.8.0: resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.0.tgz#e7ec73a57e1e7b419cb6c6ac06bf050b67356114" integrity sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA== +longest-streak@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4" + integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg== + looper@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/looper/-/looper-2.0.0.tgz#66cd0c774af3d4fedac53794f742db56da8f09ec" @@ -11152,6 +13689,14 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + lower-case@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" @@ -11183,6 +13728,14 @@ lru-cache@^3.2.0: dependencies: pseudomap "^1.0.1" +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -11190,6 +13743,11 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +lru-cache@^7.3.1, lru-cache@^7.5.1, lru-cache@^7.7.1: + version "7.7.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.7.1.tgz#03d2846b1ad2dcc7931a9340b8711d9798fcb0c6" + integrity sha512-cRffBiTW8s73eH4aTXqBcTLU0xQnwGV3/imttRHGWCrbergmnK4D6JXQd8qin5z43HnDwRI+o7mVW0LEB+tpAw== + ltgt@^2.1.2, ltgt@~2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" @@ -11212,7 +13770,14 @@ magic-string@^0.25.0, magic-string@^0.25.7: dependencies: sourcemap-codec "^1.4.4" -make-dir@^2.0.0: +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + +make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== @@ -11227,6 +13792,28 @@ make-dir@^3.0.0, make-dir@^3.0.2: dependencies: semver "^6.0.0" +make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6: + version "10.0.6" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.0.6.tgz#671269de09cc51208413460898efb7b36adf5534" + integrity sha512-4Gfh6lV3TLXmj7qz79hBFuvVqjYSMW6v2+sxtdX4LFQU0rK3V/txRjE0DoZb7X0IF3t9f8NO3CxPSWlvdckhVA== + dependencies: + agentkeepalive "^4.2.1" + cacache "^16.0.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.5.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-fetch "^2.0.3" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^6.1.1" + ssri "^8.0.1" + makeerror@1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" @@ -11239,11 +13826,16 @@ map-cache@^0.2.2: resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= -map-obj@^1.0.0: +map-obj@^1.0.0, map-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= +map-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" + integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= + map-obj@^4.0.0: version "4.3.0" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" @@ -11256,6 +13848,43 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +markdown-escapes@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" + integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== + +markdown-table@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" + integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== + +marked-terminal@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-5.1.1.tgz#d2edc2991841d893ee943b44b40b2ee9518b4d9f" + integrity sha512-+cKTOx9P4l7HwINYhzbrBSyzgxO2HaHKGZGuB1orZsMIgXYaJyfidT81VXRdpelW/PcHEWxywscePVgI/oUF6g== + dependencies: + ansi-escapes "^5.0.0" + cardinal "^2.1.1" + chalk "^5.0.0" + cli-table3 "^0.6.1" + node-emoji "^1.11.0" + supports-hyperlinks "^2.2.0" + +marked@^4.0.10: + version "4.0.12" + resolved "https://registry.yarnpkg.com/marked/-/marked-4.0.12.tgz#2262a4e6fd1afd2f13557726238b69a48b982f7d" + integrity sha512-hgibXWrEDNBWgGiK18j/4lkS6ihTe9sxtV4Q1OQppb/0zzyPSzoFANBa5MfsG/zgsWklmNnhm0XACZOH/0HBiQ== + +math-random@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" + integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== + +mathml-tag-names@^2.0.1, mathml-tag-names@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" + integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -11265,6 +13894,13 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" +mdast-util-compact@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.4.tgz#d531bb7667b5123abf20859be086c4d06c894593" + integrity sha512-3YDMQHI5vRiS2uygEFYaqckibpJtKq5Sj2c8JioeOQBU6INpKbdWzfyLqFFnDwEcEnRFIdMsguzs5pC1Jp4Isg== + dependencies: + unist-util-visit "^1.1.0" + mdn-data@2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" @@ -11320,6 +13956,37 @@ memory-fs@^0.5.0: errno "^0.1.3" readable-stream "^2.0.1" +meow@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +meow@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975" + integrity sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A== + dependencies: + camelcase-keys "^4.0.0" + decamelize-keys "^1.0.0" + loud-rejection "^1.0.0" + minimist "^1.1.3" + minimist-options "^3.0.1" + normalize-package-data "^2.3.4" + read-pkg-up "^3.0.0" + redent "^2.0.0" + trim-newlines "^2.0.0" + meow@^8.0.0: version "8.1.2" resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" @@ -11365,7 +14032,7 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0: +merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== @@ -11412,6 +14079,25 @@ microevent.ts@~0.1.1: resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== +micromatch@^2.3.11: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -11431,7 +14117,7 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.2, micromatch@^4.0.4: +micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== @@ -11469,6 +14155,11 @@ mime@^2.4.4: resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== +mime@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" + integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== + mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -11523,6 +14214,20 @@ minimatch@3.0.4, minimatch@^3.0.4, minimatch@~3.0.2: dependencies: brace-expansion "^1.1.7" +minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== + dependencies: + brace-expansion "^2.0.1" + minimist-options@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -11532,11 +14237,24 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" +minimist-options@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" + integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@~1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minimist@^1.1.3: + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + minipass-collect@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" @@ -11544,6 +14262,17 @@ minipass-collect@^1.0.2: dependencies: minipass "^3.0.0" +minipass-fetch@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.0.3.tgz#688bbd0c2b019642778dc808b6950dd908d192b3" + integrity sha512-VA+eiiUtaIvpQJXISwE3OiMvQwAWrgKb97F0aXlCS1Ahikr8fEQq8m3Hf7Kv9KT3nokuHigJKsDMB6atU04olQ== + dependencies: + minipass "^3.1.6" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + minipass-flush@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" @@ -11551,13 +14280,28 @@ minipass-flush@^1.0.5: dependencies: minipass "^3.0.0" -minipass-pipeline@^1.2.2: +minipass-json-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" + integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== + dependencies: + jsonparse "^1.3.1" + minipass "^3.0.0" + +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== dependencies: minipass "^3.0.0" +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + minipass@^2.6.0, minipass@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" @@ -11573,6 +14317,13 @@ minipass@^3.0.0, minipass@^3.1.1: dependencies: yallist "^4.0.0" +minipass@^3.1.6: + version "3.1.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.6.tgz#3b8150aa688a711a1521af5e8779c1d3bb4f45ee" + integrity sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ== + dependencies: + yallist "^4.0.0" + minizlib@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" @@ -11580,7 +14331,7 @@ minizlib@^1.3.3: dependencies: minipass "^2.9.0" -minizlib@^2.1.1: +minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== @@ -11617,6 +14368,15 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== +mkdirp-infer-owner@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" + integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== + dependencies: + chownr "^2.0.0" + infer-owner "^1.0.4" + mkdirp "^1.0.3" + mkdirp-promise@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" @@ -11673,7 +14433,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1: +ms@^2.0.0, ms@^2.1.1, ms@^2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -11731,6 +14491,11 @@ multihashes@^0.4.15, multihashes@~0.4.15: multibase "^0.7.0" varint "^5.0.0" +mute-stream@~0.0.4: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + nan@^2.12.1, nan@^2.13.2, nan@^2.14.0, nan@^2.14.2, nan@^2.2.1: version "2.15.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" @@ -11746,6 +14511,11 @@ nanoid@^3.1.30: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.30.tgz#63f93cc548d2a113dc5dfbc63bfa09e2b9b64362" integrity sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ== +nanoid@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.2.tgz#c89622fafb4381cd221421c69ec58547a1eec557" + integrity sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA== + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -11785,11 +14555,21 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== +negotiator@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1, neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== +nerf-dart@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/nerf-dart/-/nerf-dart-1.0.0.tgz#e6dab7febf5ad816ea81cf5c629c5a0ebde72c1a" + integrity sha1-5tq3/r9a2Bbqgc9cYpxaDr3nLBo= + next-tick@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" @@ -11825,6 +14605,13 @@ node-addon-api@^4.2.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.2.0.tgz#117cbb5a959dff0992e1c586ae0393573e4d2a87" integrity sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q== +node-emoji@^1.11.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" + integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== + dependencies: + lodash "^4.17.21" + node-fetch@2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" @@ -11845,6 +14632,13 @@ node-fetch@^2.6.0, node-fetch@^2.6.1: dependencies: whatwg-url "^5.0.0" +node-fetch@^2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + node-forge@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" @@ -11871,6 +14665,22 @@ node-gyp@^7.1.0: tar "^6.0.2" which "^2.0.2" +node-gyp@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.0.0.tgz#e1da2067427f3eb5bb56820cb62bc6b1e4bd2089" + integrity sha512-Ma6p4s+XCTPxCuAMrOA/IJRmVy16R8Sdhtwl4PrCr7IBlj4cPawF0vg/l7nOT1jPbuNS7lIRJpBSvVsXwEZuzw== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^10.0.3" + nopt "^5.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + node-hid@^0.7.9: version "0.7.9" resolved "https://registry.yarnpkg.com/node-hid/-/node-hid-0.7.9.tgz#cc0cdf1418a286a7667f0b63642b5eeb544ccd05" @@ -11974,7 +14784,7 @@ nopt@^5.0.0: dependencies: abbrev "1" -normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -11994,7 +14804,17 @@ normalize-package-data@^3.0.0: semver "^7.3.4" validate-npm-package-license "^3.0.1" -normalize-path@^2.1.1: +normalize-package-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-4.0.0.tgz#1122d5359af21d4cd08718b92b058a658594177c" + integrity sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g== + dependencies: + hosted-git-info "^5.0.0" + is-core-module "^2.8.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + +normalize-path@^2.0.1, normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= @@ -12011,6 +14831,11 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= +normalize-selector@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03" + integrity sha1-0LFF62kRicY6eNIB3E/bEpPvDAM= + normalize-url@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" @@ -12031,6 +14856,87 @@ normalize-url@^4.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== +normalize-url@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +npm-audit-report@^2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-2.1.5.tgz#a5b8850abe2e8452fce976c8960dd432981737b5" + integrity sha512-YB8qOoEmBhUH1UJgh1xFAv7Jg1d+xoNhsDYiFQlEFThEBui0W1vIz2ZK6FVg4WZjwEdl7uBQlm1jy3MUfyHeEw== + dependencies: + chalk "^4.0.0" + +npm-bundled@^1.1.1, npm-bundled@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" + integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-install-checks@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-4.0.0.tgz#a37facc763a2fde0497ef2c6d0ac7c3fbe00d7b4" + integrity sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w== + dependencies: + semver "^7.1.1" + +npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +npm-package-arg@^9.0.0, npm-package-arg@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-9.0.1.tgz#db9c6379c45d79db88ee6dd40d3ec6a9d9a4d13a" + integrity sha512-Xs9wznfEAmZAR61qsYH3iN24V/qMYYkvAR5CRQNMvC6PjN2fHtO8y9XP/xdp5K+Icx+u1wMBMgWRPCmAEChSog== + dependencies: + hosted-git-info "^5.0.0" + semver "^7.3.5" + validate-npm-package-name "^3.0.0" + +npm-packlist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-4.0.0.tgz#ba54713f8ee2ad919a6dc9f1b9ec7aa291466703" + integrity sha512-gL6XC/iw9YSmqArmZOGSkyy+yIZf2f7uH0p4Vmxef/irn73vd9/rDkCtvm+a9rh/QK2xGYfCAMOghM06ymzC0A== + dependencies: + glob "^7.2.0" + ignore-walk "^4.0.1" + npm-bundled "^1.1.2" + npm-normalize-package-bin "^1.0.1" + +npm-pick-manifest@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-7.0.0.tgz#e3b18b09678a47e894f90941bef8204ea5d96c3b" + integrity sha512-njM1AcdioFaKd0JSGtLO09YA1WRwctjGQJbnHGmKS+u+uwP8oFvtZtOQWPYdxrnY5eJud3wn8OpH4sEIx6+GEQ== + dependencies: + npm-install-checks "^4.0.0" + npm-normalize-package-bin "^1.0.1" + npm-package-arg "^9.0.0" + semver "^7.3.5" + +npm-profile@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-6.0.2.tgz#b2da9887d16d1f0d1ce8a9c3b37a48454a372919" + integrity sha512-0Fq8l+A10YXnnS63E3HThWjOb7+19Wsh1nOVutC2fKuowar8t/5PpINsbcm5xQ2dA28uAu+wjFfUyiEVSMz4Jw== + dependencies: + npm-registry-fetch "^13.0.0" + proc-log "^2.0.0" + +npm-registry-fetch@^13.0.0, npm-registry-fetch@^13.0.1: + version "13.1.0" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-13.1.0.tgz#71bed52e30a4b27441604bbba79c7db8e0e34cb5" + integrity sha512-TIYL5X8CcwDhbFMXFDShNcpG6OMCYK6VzvSr6MUWP20tCU2DJ4ao2qQg3DT+3Pet8mO6/cgbZpon4LMh3duYLg== + dependencies: + make-fetch-happen "^10.0.6" + minipass "^3.1.6" + minipass-fetch "^2.0.3" + minipass-json-stream "^1.0.1" + minizlib "^2.1.2" + npm-package-arg "^9.0.1" + proc-log "^2.0.0" + npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -12045,6 +14951,88 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" +npm-user-validate@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.1.tgz#31428fc5475fe8416023f178c0ab47935ad8c561" + integrity sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw== + +npm@^8.3.0: + version "8.5.5" + resolved "https://registry.yarnpkg.com/npm/-/npm-8.5.5.tgz#814a84d4abcf69718628297428eceb556d816a18" + integrity sha512-a1vl26nokCNlD+my/iNYmOUPx/hpYR4ZyZk8gb7/A2XXtrPZf2gTSJOnVjS77jQS+BSfIVQpipZwXWCL0+5wzg== + dependencies: + "@isaacs/string-locale-compare" "^1.1.0" + "@npmcli/arborist" "^5.0.3" + "@npmcli/ci-detect" "^2.0.0" + "@npmcli/config" "^4.0.1" + "@npmcli/map-workspaces" "^2.0.2" + "@npmcli/package-json" "^1.0.1" + "@npmcli/run-script" "^3.0.1" + abbrev "~1.1.1" + ansicolors "~0.3.2" + ansistyles "~0.1.3" + archy "~1.0.0" + cacache "^16.0.2" + chalk "^4.1.2" + chownr "^2.0.0" + cli-columns "^4.0.0" + cli-table3 "^0.6.1" + columnify "^1.6.0" + fastest-levenshtein "^1.0.12" + glob "^7.2.0" + graceful-fs "^4.2.9" + hosted-git-info "^5.0.0" + ini "^2.0.0" + init-package-json "^3.0.1" + is-cidr "^4.0.2" + json-parse-even-better-errors "^2.3.1" + libnpmaccess "^6.0.2" + libnpmdiff "^4.0.2" + libnpmexec "^4.0.2" + libnpmfund "^3.0.1" + libnpmhook "^8.0.2" + libnpmorg "^4.0.2" + libnpmpack "^4.0.2" + libnpmpublish "^6.0.2" + libnpmsearch "^5.0.2" + libnpmteam "^4.0.2" + libnpmversion "^3.0.1" + make-fetch-happen "^10.0.6" + minipass "^3.1.6" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + mkdirp-infer-owner "^2.0.0" + ms "^2.1.2" + node-gyp "^9.0.0" + nopt "^5.0.0" + npm-audit-report "^2.1.5" + npm-install-checks "^4.0.0" + npm-package-arg "^9.0.1" + npm-pick-manifest "^7.0.0" + npm-profile "^6.0.2" + npm-registry-fetch "^13.0.1" + npm-user-validate "^1.0.1" + npmlog "^6.0.1" + opener "^1.5.2" + pacote "^13.0.5" + parse-conflict-json "^2.0.1" + proc-log "^2.0.0" + qrcode-terminal "^0.12.0" + read "~1.0.7" + read-package-json "^5.0.0" + read-package-json-fast "^2.0.3" + readdir-scoped-modules "^1.1.0" + rimraf "^3.0.2" + semver "^7.3.5" + ssri "^8.0.1" + tar "^6.1.11" + text-table "~0.2.0" + tiny-relative-date "^1.3.0" + treeverse "^1.0.4" + validate-npm-package-name "~3.0.0" + which "^2.0.2" + write-file-atomic "^4.0.1" + npmlog@^4.0.0, npmlog@^4.0.1, npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" @@ -12055,6 +15043,16 @@ npmlog@^4.0.0, npmlog@^4.0.1, npmlog@^4.1.2: gauge "~2.7.3" set-blocking "~2.0.0" +npmlog@^6.0.0, npmlog@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.1.tgz#06f1344a174c06e8de9c6c70834cfba2964bba17" + integrity sha512-BTHDvY6nrRHuRfyjt1MAufLxYdVXZfd099H4+i1f0lPywNQyI4foeNXJRObB/uy+TYqUW0vAD9gbdSOXPst7Eg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.0" + set-blocking "^2.0.0" + nth-check@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" @@ -12069,11 +15067,6 @@ nth-check@^2.0.0: dependencies: boolbase "^1.0.0" -null-check@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd" - integrity sha1-l33/1xdgErnsMNKjnbXPcqBDnt0= - num2fraction@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" @@ -12121,6 +15114,11 @@ object-inspect@^1.11.0, object-inspect@^1.9.0, object-inspect@~1.11.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== +object-inspect@^1.12.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" + integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== + object-is@^1.0.1: version "1.1.5" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" @@ -12191,6 +15189,14 @@ object.hasown@^1.1.0: define-properties "^1.1.3" es-abstract "^1.19.1" +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo= + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" @@ -12260,6 +15266,11 @@ open@^7.0.2: is-docker "^2.0.0" is-wsl "^2.1.1" +opener@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== + opn@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" @@ -12336,11 +15347,23 @@ p-each-series@^2.1.0: resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== +p-filter@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-filter/-/p-filter-2.1.0.tgz#1b1472562ae7a0f742f0f3d3d3718ea66ff9c09c" + integrity sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw== + dependencies: + p-map "^2.0.0" + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= +p-is-promise@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-3.0.0.tgz#58e78c7dfe2e163cf2a04ff869e7c1dba64a5971" + integrity sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ== + p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -12383,13 +15406,6 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - p-map@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" @@ -12402,6 +15418,11 @@ p-map@^4.0.0: dependencies: aggregate-error "^3.0.0" +p-reduce@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" + integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== + p-retry@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" @@ -12409,6 +15430,14 @@ p-retry@^3.0.1: dependencies: retry "^0.12.0" +p-retry@^4.0.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.1.tgz#8fcddd5cdf7a67a0911a9cf2ef0e5df7f602316c" + integrity sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA== + dependencies: + "@types/retry" "^0.12.0" + retry "^0.13.1" + p-timeout@^1.1.1: version "1.2.1" resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" @@ -12426,6 +15455,43 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +package-json@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" + integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= + dependencies: + got "^6.7.1" + registry-auth-token "^3.0.1" + registry-url "^3.0.3" + semver "^5.1.0" + +pacote@^13.0.3, pacote@^13.0.5: + version "13.0.5" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-13.0.5.tgz#d6f370b11112492d8257ae1178a003b36d4bb261" + integrity sha512-6CYfot3/rUAn3qqzF2d/jrrXm5HlBtvaSgfmg0VtOUAdJ8fbSq21BJwftMGArkL71yXHIbUJ7Bt5B04547HELA== + dependencies: + "@npmcli/git" "^3.0.0" + "@npmcli/installed-package-contents" "^1.0.7" + "@npmcli/promise-spawn" "^1.2.0" + "@npmcli/run-script" "^3.0.1" + cacache "^16.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + infer-owner "^1.0.4" + minipass "^3.1.6" + mkdirp "^1.0.4" + npm-package-arg "^9.0.0" + npm-packlist "^4.0.0" + npm-pick-manifest "^7.0.0" + npm-registry-fetch "^13.0.1" + proc-log "^2.0.0" + promise-retry "^2.0.1" + read-package-json "^5.0.0" + read-package-json-fast "^2.0.3" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.1.11" + pako@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/pako/-/pako-2.0.4.tgz#6cebc4bbb0b6c73b0d5b8d7e8476e2b2fbea576d" @@ -12471,11 +15537,56 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" +parse-conflict-json@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-2.0.1.tgz#76647dd072e6068bcaff20be6ccea68a18e1fb58" + integrity sha512-Y7nYw+QaSGBto1LB9lgwOR05Rtz5SbuTf+Oe7HJ6SYQ/DHsvRjQ8O03oWdJbvkt6GzDWospgyZbGmjDYL0sDgA== + dependencies: + json-parse-even-better-errors "^2.3.1" + just-diff "^5.0.1" + just-diff-apply "^4.0.1" + +parse-entities@^1.0.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" + integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + parse-headers@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.4.tgz#9eaf2d02bed2d1eff494331ce3df36d7924760bf" integrity sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw== +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-json@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-3.0.0.tgz#fa6f47b18e23826ead32f263e744d0e1e847fb13" + integrity sha1-+m9HsY4jgm6tMvJj50TQ4ehH+xM= + dependencies: + error-ex "^1.3.1" + parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -12545,6 +15656,13 @@ path-dirname@^1.0.0: resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -12560,7 +15678,7 @@ path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.2: +path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= @@ -12585,6 +15703,15 @@ path-to-regexp@0.1.7: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -12633,6 +15760,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== +pidtree@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.5.0.tgz#ad5fbc1de78b8a5f99d6fbdd4f6e4eee21d1aca1" + integrity sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA== + pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -12672,6 +15804,14 @@ pirates@^4.0.1: dependencies: node-modules-regexp "^1.0.0" +pkg-conf@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.1.0.tgz#2126514ca6f2abfebd168596df18ba57867f0058" + integrity sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg= + dependencies: + find-up "^2.0.0" + load-json-file "^4.0.0" + pkg-dir@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" @@ -12700,13 +15840,6 @@ pkg-up@3.1.0: dependencies: find-up "^3.0.0" -please-upgrade-node@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" - integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== - dependencies: - semver-compare "^1.0.0" - pngjs@^3.3.0: version "3.4.0" resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" @@ -12940,6 +16073,15 @@ postcss-gap-properties@^2.0.0: dependencies: postcss "^7.0.2" +postcss-html@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.12.0.tgz#39b6adb4005dfc5464df7999c0f81c95bced7e50" + integrity sha512-KxKUpj7AY7nlCbLcTOYxdfJnGE7QFAfU2n95ADj1Q90RM/pOLdz8k3n4avOyRFs7MDQHcRzJQWM1dehCwJxisQ== + dependencies: + htmlparser2 "^3.9.2" + remark "^8.0.0" + unist-util-find-all-after "^1.0.1" + postcss-image-set-function@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz#28920a2f29945bed4c3198d7df6496d410d3f288" @@ -12964,6 +16106,13 @@ postcss-lab-function@^2.0.1: postcss "^7.0.2" postcss-values-parser "^2.0.0" +postcss-less@^1.1.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-1.1.5.tgz#a6f0ce180cf3797eeee1d4adc0e9e6d6db665609" + integrity sha512-QQIiIqgEjNnquc0d4b6HDOSFZxbFQoy4MPpli2lSLpKhMyBkKwwca2HFqu4xzxlKID/F2fxSOowwtKpgczhF7A== + dependencies: + postcss "^5.2.16" + postcss-load-config@^2.0.0: version "2.1.2" resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" @@ -12996,6 +16145,11 @@ postcss-media-minmax@^4.0.0: dependencies: postcss "^7.0.2" +postcss-media-query-parser@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" + integrity sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ= + postcss-merge-longhand@^4.0.11: version "4.0.11" resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" @@ -13299,6 +16453,21 @@ postcss-replace-overflow-wrap@^3.0.0: dependencies: postcss "^7.0.2" +postcss-reporter@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-5.0.0.tgz#a14177fd1342829d291653f2786efd67110332c3" + integrity sha512-rBkDbaHAu5uywbCR2XE8a25tats3xSOsGNx6mppK6Q9kSFGKc/FyAzfci+fWM2l+K402p1D0pNcfDGxeje5IKg== + dependencies: + chalk "^2.0.1" + lodash "^4.17.4" + log-symbols "^2.0.0" + postcss "^6.0.8" + +postcss-resolve-nested-selector@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" + integrity sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4= + postcss-safe-parser@5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-5.0.2.tgz#459dd27df6bc2ba64608824ba39e45dacf5e852d" @@ -13306,6 +16475,38 @@ postcss-safe-parser@5.0.2: dependencies: postcss "^8.1.0" +postcss-safe-parser@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-3.0.1.tgz#b753eff6c7c0aea5e8375fbe4cde8bf9063ff142" + integrity sha1-t1Pv9sfArqXoN1++TN6L+QY/8UI= + dependencies: + postcss "^6.0.6" + +postcss-safe-parser@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz#bb4c29894171a94bc5c996b9a30317ef402adaa1" + integrity sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ== + +postcss-sass@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/postcss-sass/-/postcss-sass-0.2.0.tgz#e55516441e9526ba4b380a730d3a02e9eaa78c7a" + integrity sha512-cUmYzkP747fPCQE6d+CH2l1L4VSyIlAzZsok3HPjb5Gzsq3jE+VjpAdGlPsnQ310WKWI42sw+ar0UNN59/f3hg== + dependencies: + gonzales-pe "^4.0.3" + postcss "^6.0.6" + +postcss-scss@^1.0.2: + version "1.0.6" + resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-1.0.6.tgz#ab903f3bb20161bc177896462293a53d4bff5f7a" + integrity sha512-4EFYGHcEw+H3E06PT/pQQri06u/1VIIPjeJQaM8skB80vZuXMhp4cSNV5azmdNkontnOID/XYWEvEEELLFB1ww== + dependencies: + postcss "^6.0.23" + +postcss-scss@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-4.0.3.tgz#36c23c19a804274e722e83a54d20b838ab4767ac" + integrity sha512-j4KxzWovfdHsyxwl1BxkUal/O4uirvHgdzMKS1aWJBAV0qh2qj5qAZqpeBfVUYGWv+4iK9Az7SPyZ4fyNju1uA== + postcss-selector-matches@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz#71c8248f917ba2cc93037c9637ee09c64436fcff" @@ -13322,7 +16523,7 @@ postcss-selector-not@^4.0.0: balanced-match "^1.0.0" postcss "^7.0.2" -postcss-selector-parser@^3.0.0: +postcss-selector-parser@^3.0.0, postcss-selector-parser@^3.1.0: version "3.1.2" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== @@ -13348,6 +16549,14 @@ postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: cssesc "^3.0.0" util-deprecate "^1.0.2" +postcss-selector-parser@^6.0.6, postcss-selector-parser@^6.0.9: + version "6.0.9" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz#ee71c3b9ff63d9cd130838876c13a2ec1a992b2f" + integrity sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + postcss-svgo@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz#343a2cdbac9505d416243d496f724f38894c941e" @@ -13366,12 +16575,12 @@ postcss-unique-selectors@^4.0.1: postcss "^7.0.0" uniqs "^2.0.0" -postcss-value-parser@^3.0.0: +postcss-value-parser@^3.0.0, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: version "3.3.1" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== -postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== @@ -13394,6 +16603,25 @@ postcss@7.0.36: source-map "^0.6.1" supports-color "^6.1.0" +postcss@^5.2.16: + version "5.2.18" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" + integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg== + dependencies: + chalk "^1.1.3" + js-base64 "^2.1.9" + source-map "^0.5.6" + supports-color "^3.2.3" + +postcss@^6.0.14, postcss@^6.0.17, postcss@^6.0.23, postcss@^6.0.6, postcss@^6.0.8: + version "6.0.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" + integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== + dependencies: + chalk "^2.4.1" + source-map "^0.6.1" + supports-color "^5.4.0" + postcss@^7, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: version "7.0.39" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" @@ -13411,6 +16639,15 @@ postcss@^8.1.0: picocolors "^1.0.0" source-map-js "^1.0.1" +postcss@^8.4.12, postcss@^8.4.4: + version "8.4.12" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.12.tgz#1e7de78733b28970fa4743f7da6f3763648b1905" + integrity sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg== + dependencies: + nanoid "^3.3.1" + picocolors "^1.0.0" + source-map-js "^1.0.2" + preact@10.4.1: version "10.4.1" resolved "https://registry.yarnpkg.com/preact/-/preact-10.4.1.tgz#9b3ba020547673a231c6cf16f0fbaef0e8863431" @@ -13467,6 +16704,11 @@ prepend-http@^2.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= + prettier-linter-helpers@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" @@ -13474,6 +16716,31 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" +prettier-stylelint@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/prettier-stylelint/-/prettier-stylelint-0.4.2.tgz#62845e342f786218b008da69eef14f0a5c05bcfb" + integrity sha512-CmatjDsW8xKMtWg/Tc6/W02wC59p50kkItrXmkgbhR4b2EKMU5Pm55x1WuCahkkZeZoNVReWRxA8VL/s69mkBg== + dependencies: + cosmiconfig "^3.0.1" + debug "^3.0.1" + get-stdin "^5.0.1" + globby "^6.1.0" + ignore "^3.3.5" + import-local "^0.1.1" + meow "^3.7.0" + pify "^3.0.0" + prettier "^1.7.0" + resolve-from "^4.0.0" + stylelint "^8.1.1" + temp-write "^3.3.0" + tempy "^0.2.1" + update-notifier "^2.2.0" + +prettier@^1.7.0: + version "1.19.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== + prettier@^2.5.1: version "2.5.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" @@ -13521,6 +16788,11 @@ private@^0.1.6, private@^0.1.8: resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== +proc-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-2.0.0.tgz#25f8cb346a5d08e27f2422b3ca6ba8379bcbf8ba" + integrity sha512-I/35MfCX2H8jBUhKN8JB8nmqvQo/nKdrBodBY7L3RhDSPPyvOHwLYNmPuhwuJq7a7C3vgFKWGQM+ecPStcvOHA== + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -13536,11 +16808,29 @@ progress@^2.0.0: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== +promise-all-reject-late@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" + integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== + +promise-call-limit@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.1.tgz#4bdee03aeb85674385ca934da7114e9bcd3c6e24" + integrity sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q== + promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + promise-to-callback@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/promise-to-callback/-/promise-to-callback-1.0.0.tgz#5d2a749010bfb67d963598fcd3960746a68feef7" @@ -13572,6 +16862,22 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" +promzard@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" + integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= + dependencies: + read "1" + +prop-types@^15.6.2, prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" @@ -13594,7 +16900,7 @@ prr@~1.0.1: resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= -pseudomap@^1.0.1: +pseudomap@^1.0.1, pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= @@ -13714,6 +17020,11 @@ q@^1.1.2, q@^1.5.1: resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= +qrcode-terminal@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" + integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== + qrcode@1.4.4: version "1.4.4" resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.4.4.tgz#f0c43568a7e7510a55efc3b88d9602f71963ea83" @@ -13788,6 +17099,11 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +quick-lru@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" + integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= + quick-lru@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" @@ -13800,6 +17116,15 @@ raf@^3.4.1: dependencies: performance-now "^2.1.0" +randomatic@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" + integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== + dependencies: + is-number "^4.0.0" + kind-of "^6.0.0" + math-random "^1.0.1" + randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.0.6, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -13830,7 +17155,7 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -rc@^1.2.7: +rc@^1.0.1, rc@^1.1.6, rc@^1.2.7, rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -13896,19 +17221,19 @@ react-error-overlay@^6.0.9: resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== -react-hot-toast@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/react-hot-toast/-/react-hot-toast-2.1.1.tgz#56409ab406b534e9e58274cf98d80355ba0fdda0" - integrity sha512-Odrp4wue0fHh0pOfZt5H+9nWCMtqs3wdlFSzZPp7qsxfzmbE26QmGWIh6hG43CukiPeOjA8WQhBJU8JwtWvWbQ== +react-hot-toast@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/react-hot-toast/-/react-hot-toast-2.2.0.tgz#ab6f4caed4214b9534f94bb8cfaaf21b051e62b9" + integrity sha512-248rXw13uhf/6TNDVzagX+y7R8J183rp7MwUMNkcrBRyHj/jWOggfXTGlM8zAOuh701WyVW+eUaWG2LeSufX9g== dependencies: - goober "^2.0.35" + goober "^2.1.1" -react-is@^16.8.1: +react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-is@^17.0.1: +react-is@^17.0.1, react-is@^17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== @@ -13984,6 +17309,16 @@ react-scripts@4.0.3: optionalDependencies: fsevents "^2.1.3" +react-transition-group@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.2.tgz#8b59a56f09ced7b55cbd53c36768b922890d5470" + integrity sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg== + dependencies: + "@babel/runtime" "^7.5.5" + dom-helpers "^5.0.1" + loose-envify "^1.4.0" + prop-types "^15.6.2" + react@^17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" @@ -13992,6 +17327,37 @@ react@^17.0.2: loose-envify "^1.1.0" object-assign "^4.1.1" +read-cmd-shim@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz#4a50a71d6f0965364938e9038476f7eede3928d9" + integrity sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw== + +read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" + integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== + dependencies: + json-parse-even-better-errors "^2.3.0" + npm-normalize-package-bin "^1.0.1" + +read-package-json@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-5.0.0.tgz#d62602755547e152a3923c220238d9a7f0b60745" + integrity sha512-1cjk2MV5ONDMn34uxSID3X8NY7VKsXfJnjbcVdFMvHEnJOBzU6MJ7/3yg6QFVZDq5/1yFNrKBUK9kGnonyGP2Q== + dependencies: + glob "^7.2.0" + json-parse-even-better-errors "^2.3.1" + normalize-package-data "^4.0.0" + npm-normalize-package-bin "^1.0.1" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + read-pkg-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" @@ -14000,7 +17366,7 @@ read-pkg-up@^3.0.0: find-up "^2.0.0" read-pkg "^3.0.0" -read-pkg-up@^7.0.1: +read-pkg-up@^7.0.0, read-pkg-up@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== @@ -14009,6 +17375,15 @@ read-pkg-up@^7.0.1: read-pkg "^5.2.0" type-fest "^0.8.1" +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" @@ -14018,7 +17393,7 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -read-pkg@^5.2.0: +read-pkg@^5.0.0, read-pkg@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== @@ -14028,6 +17403,13 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" +read@1, read@^1.0.7, read@~1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= + dependencies: + mute-stream "~0.0.4" + "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.8, readable-stream@^2.2.9, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" @@ -14041,7 +17423,7 @@ read-pkg@^5.2.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -14070,6 +17452,16 @@ readable-stream@~1.0.15: isarray "0.0.1" string_decoder "~0.10.x" +readdir-scoped-modules@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" + integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== + dependencies: + debuglog "^1.0.1" + dezalgo "^1.0.0" + graceful-fs "^4.1.2" + once "^1.3.0" + readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" @@ -14093,6 +17485,22 @@ recursive-readdir@2.2.2: dependencies: minimatch "3.0.4" +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +redent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" + integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= + dependencies: + indent-string "^3.0.0" + strip-indent "^2.0.0" + redent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" @@ -14101,6 +17509,13 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" +redeyed@~2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-2.1.1.tgz#8984b5815d99cb220469c99eeeffe38913e6cc0b" + integrity sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs= + dependencies: + esprima "~4.0.0" + regenerate-unicode-properties@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326" @@ -14144,6 +17559,13 @@ regenerator-transform@^0.14.2: dependencies: "@babel/runtime" "^7.8.4" +regex-cache@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ== + dependencies: + is-equal-shallow "^0.1.3" + regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -14191,6 +17613,28 @@ regexpu-core@^4.7.1: unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.0.0" +registry-auth-token@^3.0.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" + integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A== + dependencies: + rc "^1.1.6" + safe-buffer "^5.0.1" + +registry-auth-token@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" + integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== + dependencies: + rc "^1.2.8" + +registry-url@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= + dependencies: + rc "^1.0.1" + regjsgen@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" @@ -14220,6 +17664,56 @@ relateurl@^0.2.7: resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= +remark-parse@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-4.0.0.tgz#99f1f049afac80382366e2e0d0bd55429dd45d8b" + integrity sha512-XZgICP2gJ1MHU7+vQaRM+VA9HEL3X253uwUM/BGgx3iv6TH2B3bF3B8q00DKcyP9YrJV+/7WOWEWBFF/u8cIsw== + dependencies: + collapse-white-space "^1.0.2" + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + is-word-character "^1.0.0" + markdown-escapes "^1.0.0" + parse-entities "^1.0.2" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + trim "0.0.1" + trim-trailing-lines "^1.0.0" + unherit "^1.0.4" + unist-util-remove-position "^1.0.0" + vfile-location "^2.0.0" + xtend "^4.0.1" + +remark-stringify@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-4.0.0.tgz#4431884c0418f112da44991b4e356cfe37facd87" + integrity sha512-xLuyKTnuQer3ke9hkU38SUYLiTmS078QOnoFavztmbt/pAJtNSkNtFgR0U//uCcmG0qnyxao+PDuatQav46F1w== + dependencies: + ccount "^1.0.0" + is-alphanumeric "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + longest-streak "^2.0.1" + markdown-escapes "^1.0.0" + markdown-table "^1.1.0" + mdast-util-compact "^1.0.0" + parse-entities "^1.0.2" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + stringify-entities "^1.0.1" + unherit "^1.0.4" + xtend "^4.0.1" + +remark@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/remark/-/remark-8.0.0.tgz#287b6df2fe1190e263c1d15e486d3fa835594d6d" + integrity sha512-K0PTsaZvJlXTl9DN6qYlvjTkqSZBFELhROZMrblm2rB+085flN84nz4g/BscKRMqDvhzlK1oQ/xnWQumdeNZYw== + dependencies: + remark-parse "^4.0.0" + remark-stringify "^4.0.0" + unified "^6.0.0" + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -14241,7 +17735,7 @@ repeat-element@^1.1.2: resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== -repeat-string@^1.6.1: +repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= @@ -14253,6 +17747,11 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" +replace-ext@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" + integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= + request@^2.67.0, request@^2.79.0, request@^2.85.0, request@^2.88.0, request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" @@ -14284,7 +17783,7 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -require-from-string@^2.0.2: +require-from-string@^2.0.1, require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== @@ -14405,6 +17904,11 @@ retry@^0.12.0: resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -14452,6 +17956,13 @@ rimraf@^3.0.0, rimraf@^3.0.2: dependencies: glob "^7.1.3" +rimraf@~2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -14550,19 +18061,19 @@ rustbn.js@~0.2.0: resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== -rxjs@^6.5.3, rxjs@^6.6.3: +rxjs@6, rxjs@^6.5.3, rxjs@^6.6.3: version "6.6.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== dependencies: tslib "^1.9.0" -rxjs@^7.4.0: - version "7.4.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.4.0.tgz#a12a44d7eebf016f5ff2441b87f28c9a51cebc68" - integrity sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w== +rxjs@^7.5.5: + version "7.5.5" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f" + integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== dependencies: - tslib "~2.1.0" + tslib "^2.1.0" safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" @@ -14754,6 +18265,40 @@ selfsigned@^1.10.8: dependencies: node-forge "^0.10.0" +semantic-release@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-19.0.2.tgz#6011683c06d7b416e5faa5a3f43b22bbf3798aa8" + integrity sha512-7tPonjZxukKECmClhsfyMKDt0GR38feIC2HxgyYaBi+9tDySBLjK/zYDLhh+m6yjnHIJa9eBTKYE7k63ZQcYbw== + dependencies: + "@semantic-release/commit-analyzer" "^9.0.2" + "@semantic-release/error" "^3.0.0" + "@semantic-release/github" "^8.0.0" + "@semantic-release/npm" "^9.0.0" + "@semantic-release/release-notes-generator" "^10.0.0" + aggregate-error "^3.0.0" + cosmiconfig "^7.0.0" + debug "^4.0.0" + env-ci "^5.0.0" + execa "^5.0.0" + figures "^3.0.0" + find-versions "^4.0.0" + get-stream "^6.0.0" + git-log-parser "^1.2.0" + hook-std "^2.0.0" + hosted-git-info "^4.0.0" + lodash "^4.17.21" + marked "^4.0.10" + marked-terminal "^5.0.0" + micromatch "^4.0.2" + p-each-series "^2.1.0" + p-reduce "^2.0.0" + read-pkg-up "^7.0.0" + resolve-from "^5.0.0" + semver "^7.3.2" + semver-diff "^3.1.1" + signale "^1.2.1" + yargs "^16.2.0" + semaphore-async-await@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz#857bef5e3644601ca4b9570b87e9df5ca12974fa" @@ -14764,12 +18309,26 @@ semaphore@>=1.0.1, semaphore@^1.0.3, semaphore@^1.1.0: resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa" integrity sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA== -semver-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" - integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= +semver-diff@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= + dependencies: + semver "^5.0.3" -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: +semver-diff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== + dependencies: + semver "^6.3.0" + +semver-regex@^3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-3.1.3.tgz#b2bcc6f97f63269f286994e297e229b6245d0dc3" + integrity sha512-Aqi54Mk9uYTjVexLnR67rTyBusmwd04cLkHy9hNvk3+G3nT2Oyg7E0l4XVbOaNwIvQ3hHeYxGcyEy+mKreyBFQ== + +"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -14789,7 +18348,7 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.1.1, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: +semver@^7.1.1, semver@^7.1.2, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== @@ -14964,6 +18523,20 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== +signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signale@^1.2.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/signale/-/signale-1.4.0.tgz#c4be58302fb0262ac00fc3d886a7c113759042f1" + integrity sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w== + dependencies: + chalk "^2.3.2" + figures "^2.0.0" + pkg-conf "^2.1.0" + simple-concat@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" @@ -15014,6 +18587,13 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +slice-ansi@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== + dependencies: + is-fullwidth-code-point "^2.0.0" + slice-ansi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" @@ -15032,6 +18612,19 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== + dependencies: + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.0.0" + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -15083,6 +18676,23 @@ sockjs@^0.3.21: uuid "^3.4.0" websocket-driver "^0.7.4" +socks-proxy-agent@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz#e664e8f1aaf4e1fb3df945f09e3d94f911137f87" + integrity sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew== + dependencies: + agent-base "^6.0.2" + debug "^4.3.1" + socks "^2.6.1" + +socks@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.2.tgz#ec042d7960073d40d94268ff3bb727dc685f111a" + integrity sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA== + dependencies: + ip "^1.1.5" + smart-buffer "^4.2.0" + sort-keys@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" @@ -15100,6 +18710,11 @@ source-map-js@^1.0.1: resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.1.tgz#a1741c131e3c77d048252adfa24e23b908670caf" integrity sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA== +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: version "0.5.3" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" @@ -15174,6 +18789,11 @@ sourcemap-codec@^1.4.4: resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== +spawn-error-forwarder@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz#1afd94738e999b0346d7b9fc373be55e07577029" + integrity sha1-Gv2Uc46ZmwNG17n8NzvlXgdXcCk= + spdx-correct@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" @@ -15223,6 +18843,16 @@ spdy@^4.0.2: select-hose "^2.0.0" spdy-transport "^3.0.0" +specificity@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.3.2.tgz#99e6511eceef0f8d9b57924937aac2cb13d13c42" + integrity sha512-Nc/QN/A425Qog7j9aHmwOrlwX2e7pNI47ciwxwy4jOlvbbMHkNNJchit+FX+UjF3IAdiaaV5BKeWuDUnws6G1A== + +specificity@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019" + integrity sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg== + split-on-first@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" @@ -15242,6 +18872,13 @@ split2@^3.0.0: dependencies: readable-stream "^3.0.0" +split2@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-1.0.0.tgz#52e2e221d88c75f9a73f90556e263ff96772b314" + integrity sha1-UuLiIdiMdfmnP5BVbiY/+WdysxQ= + dependencies: + through2 "~2.0.0" + split@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" @@ -15300,32 +18937,14 @@ stackframe@^1.1.1: resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA== -standard-version@^9.3.1: - version "9.3.2" - resolved "https://registry.yarnpkg.com/standard-version/-/standard-version-9.3.2.tgz#28db8c1be66fd2d736f28f7c5de7619e64cd6dab" - integrity sha512-u1rfKP4o4ew7Yjbfycv80aNMN2feTiqseAhUhrrx2XtdQGmu7gucpziXe68Z4YfHVqlxVEzo4aUA0Iu3VQOTgQ== - dependencies: - chalk "^2.4.2" - conventional-changelog "3.1.24" - conventional-changelog-config-spec "2.1.0" - conventional-changelog-conventionalcommits "4.6.1" - conventional-recommended-bump "6.1.0" - detect-indent "^6.0.0" - detect-newline "^3.1.0" - dotgitignore "^2.1.0" - figures "^3.1.0" - find-up "^5.0.0" - fs-access "^1.0.1" - git-semver-tags "^4.0.0" - semver "^7.1.1" - stringify-package "^1.0.1" - yargs "^16.0.0" - -starknet@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/starknet/-/starknet-3.0.0.tgz#9519bcd4730f7251286c76ca7ad37c5ef0500afc" - integrity sha512-cm51mRfF+N8RGfzsRnvpP9d+58K3snBI+zlnyKxhjAb7ZoHXd/JDRfSYYuzep+QqFQetYa3uvTPPRZ5uJIRoAg== +starknet@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/starknet/-/starknet-3.7.0.tgz#bcddd1dbb0f63006c867ce9cd27a910c822da9f6" + integrity sha512-aT3F9jb3mBh0x/Qf+xLwEJTFUi3FdWMLFKEaVC6HIb7gG7l7ZgSsXCl2ZYu6wCeoDBlopxoQqzNdNM7SpW/9gQ== dependencies: + "@ledgerhq/hw-app-eth" "^6.26.0" + "@ledgerhq/hw-transport" "^6.24.1" + "@ledgerhq/hw-transport-webhid" "^6.24.1" axios "^0.23.0" bn.js "^5.2.0" elliptic "^6.5.4" @@ -15337,6 +18956,11 @@ starknet@^3.0.0: superstruct "^0.15.3" url-join "^4.0.1" +state-toggle@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" + integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ== + static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -15373,6 +18997,14 @@ stream-browserify@^3.0.0: inherits "~2.0.4" readable-stream "^3.5.0" +stream-combiner2@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" + integrity sha1-+02KFCDqNidk4hrUeAOXvry0HL4= + dependencies: + duplexer2 "~0.1.0" + readable-stream "^2.0.2" + stream-each@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" @@ -15415,7 +19047,7 @@ strict-uri-encode@^2.0.0: resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= -string-argv@0.3.1: +string-argv@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== @@ -15451,6 +19083,14 @@ string-width@^1.0.1: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" @@ -15460,6 +19100,15 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" +string-width@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + string.prototype.matchall@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz#5abb5dabc94c7b0ea2380f65ba610b3a544b15fa" @@ -15518,7 +19167,17 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -stringify-object@3.3.0, stringify-object@^3.3.0: +stringify-entities@^1.0.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-1.3.2.tgz#a98417e5471fd227b3e45d3db1861c11caf668f7" + integrity sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A== + dependencies: + character-entities-html4 "^1.0.0" + character-entities-legacy "^1.0.0" + is-alphanumerical "^1.0.0" + is-hexadecimal "^1.0.0" + +stringify-object@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== @@ -15546,6 +19205,13 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" @@ -15560,6 +19226,20 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" +strip-ansi@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + dependencies: + ansi-regex "^6.0.1" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -15595,6 +19275,18 @@ strip-hex-prefix@1.0.0: dependencies: is-hex-prefixed "1.0.0" +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= + dependencies: + get-stdin "^4.0.1" + +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= + strip-indent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" @@ -15620,33 +19312,201 @@ style-loader@1.3.0: loader-utils "^2.0.0" schema-utils "^2.7.0" +style-search@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" + integrity sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI= + stylehacks@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +stylelint-config-css-modules@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/stylelint-config-css-modules/-/stylelint-config-css-modules-4.1.0.tgz#b507bc074ba5bfda9f40f0be79b540db249f0c78" + integrity sha512-w6d552NscwvpUEaUcmq8GgWXKRv6lVHLbDj6QIHSM2vCWr83qRqRvXBJCfXDyaG/J3Zojw2inU9VvU99ZlXuUw== + optionalDependencies: + stylelint-scss "^4.2.0" + +stylelint-config-prettier@^9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/stylelint-config-prettier/-/stylelint-config-prettier-9.0.3.tgz#0dccebeff359dcc393c9229184408b08964d561c" + integrity sha512-5n9gUDp/n5tTMCq1GLqSpA30w2sqWITSSEiAWQlpxkKGAUbjcemQ0nbkRvRUa0B1LgD3+hCvdL7B1eTxy1QHJg== + +stylelint-config-recommended-scss@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-5.0.2.tgz#193f483861c76a36ece24c52eb6baca4838f4a48" + integrity sha512-b14BSZjcwW0hqbzm9b0S/ScN2+3CO3O4vcMNOw2KGf8lfVSwJ4p5TbNEXKwKl1+0FMtgRXZj6DqVUe/7nGnuBg== + dependencies: + postcss-scss "^4.0.2" + stylelint-config-recommended "^6.0.0" + stylelint-scss "^4.0.0" + +stylelint-config-recommended@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-6.0.0.tgz#fd2523a322836005ad9bf473d3e5534719c09f9d" + integrity sha512-ZorSSdyMcxWpROYUvLEMm0vSZud2uB7tX1hzBZwvVY9SV/uly4AvvJPPhCcymZL3fcQhEQG5AELmrxWqtmzacw== + +stylelint-config-standard-scss@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/stylelint-config-standard-scss/-/stylelint-config-standard-scss-3.0.0.tgz#dafc4fa5538d0ed833bf0a7d391e075683ffd96c" + integrity sha512-zt3ZbzIbllN1iCmc94e4pDxqpkzeR6CJo5DDXzltshuXr+82B8ylHyMMARNnUYrZH80B7wgY7UkKTYCFM0UUyw== + dependencies: + stylelint-config-recommended-scss "^5.0.2" + stylelint-config-standard "^24.0.0" + +stylelint-config-standard@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-24.0.0.tgz#6823f207ab997ae0b641f9a636d007cc44d77541" + integrity sha512-+RtU7fbNT+VlNbdXJvnjc3USNPZRiRVp/d2DxOF/vBDDTi0kH5RX2Ny6errdtZJH3boO+bmqIYEllEmok4jiuw== + dependencies: + stylelint-config-recommended "^6.0.0" + +stylelint-prettier@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/stylelint-prettier/-/stylelint-prettier-2.0.0.tgz#ead781aea522379f2ffa2d136bafdfc451d699a5" + integrity sha512-jvT3G+9lopkeB0ARmDPszyfaOnvnIF+30QCjZxyt7E6fynI1T9mOKgYDNb9bXX17M7PXMZaX3j/26wqakjp1tw== + dependencies: + prettier-linter-helpers "^1.0.0" + +stylelint-scss@^4.0.0, stylelint-scss@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/stylelint-scss/-/stylelint-scss-4.2.0.tgz#e25fd390ee38a7e89fcfaec2a8f9dce2ec6ddee8" + integrity sha512-HHHMVKJJ5RM9pPIbgJ/XA67h9H0407G68Rm69H4fzFbFkyDMcTV1Byep3qdze5+fJ3c0U7mJrbj6S0Fg072uZA== + dependencies: + lodash "^4.17.21" + postcss-media-query-parser "^0.2.3" + postcss-resolve-nested-selector "^0.1.1" + postcss-selector-parser "^6.0.6" + postcss-value-parser "^4.1.0" + +stylelint@^14.1.0: + version "14.6.1" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-14.6.1.tgz#aff137b0254515fc36b91921d88a3eb2edc194bf" + integrity sha512-FfNdvZUZdzh9KDQxDnO7Opp+prKh8OQVuSW8S13cBtxrooCbm6J6royhUeb++53WPMt04VB+ZbOz/QmzAijs6Q== + dependencies: + balanced-match "^2.0.0" + colord "^2.9.2" + cosmiconfig "^7.0.1" + css-functions-list "^3.0.1" + debug "^4.3.4" + execall "^2.0.0" + fast-glob "^3.2.11" + fastest-levenshtein "^1.0.12" + file-entry-cache "^6.0.1" + get-stdin "^8.0.0" + global-modules "^2.0.0" + globby "^11.1.0" + globjoin "^0.1.4" + html-tags "^3.1.0" + ignore "^5.2.0" + import-lazy "^4.0.0" + imurmurhash "^0.1.4" + is-plain-object "^5.0.0" + known-css-properties "^0.24.0" + mathml-tag-names "^2.1.3" + meow "^9.0.0" + micromatch "^4.0.4" + normalize-path "^3.0.0" + normalize-selector "^0.2.0" + picocolors "^1.0.0" + postcss "^8.4.12" + postcss-media-query-parser "^0.2.3" + postcss-resolve-nested-selector "^0.1.1" + postcss-safe-parser "^6.0.0" + postcss-selector-parser "^6.0.9" + postcss-value-parser "^4.2.0" + resolve-from "^5.0.0" + specificity "^0.4.1" + string-width "^4.2.3" + strip-ansi "^6.0.1" + style-search "^0.1.0" + supports-hyperlinks "^2.2.0" + svg-tags "^1.0.0" + table "^6.8.0" + v8-compile-cache "^2.3.0" + write-file-atomic "^4.0.1" + +stylelint@^8.1.1: + version "8.4.0" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-8.4.0.tgz#c2dbaeb17236917819f9206e1c0df5fddf6f83c3" + integrity sha512-56hPH5mTFnk8LzlEuTWq0epa34fHuS54UFYQidBOFt563RJBNi1nz1F2HK2MoT1X1waq47milvRsRahFCCJs/Q== + dependencies: + autoprefixer "^7.1.2" + balanced-match "^1.0.0" + chalk "^2.0.1" + cosmiconfig "^3.1.0" + debug "^3.0.0" + execall "^1.0.0" + file-entry-cache "^2.0.0" + get-stdin "^5.0.1" + globby "^7.0.0" + globjoin "^0.1.4" + html-tags "^2.0.0" + ignore "^3.3.3" + imurmurhash "^0.1.4" + known-css-properties "^0.5.0" + lodash "^4.17.4" + log-symbols "^2.0.0" + mathml-tag-names "^2.0.1" + meow "^4.0.0" + micromatch "^2.3.11" + normalize-selector "^0.2.0" + pify "^3.0.0" + postcss "^6.0.6" + postcss-html "^0.12.0" + postcss-less "^1.1.0" + postcss-media-query-parser "^0.2.3" + postcss-reporter "^5.0.0" + postcss-resolve-nested-selector "^0.1.1" + postcss-safe-parser "^3.0.1" + postcss-sass "^0.2.0" + postcss-scss "^1.0.2" + postcss-selector-parser "^3.1.0" + postcss-value-parser "^3.3.0" + resolve-from "^4.0.0" + specificity "^0.3.1" + string-width "^2.1.0" + style-search "^0.1.0" + sugarss "^1.0.0" + svg-tags "^1.0.0" + table "^4.0.1" + +stylis@4.0.13: + version "4.0.13" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.13.tgz#f5db332e376d13cc84ecfe5dace9a2a51d954c91" + integrity sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag== + +sugarss@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-1.0.1.tgz#be826d9003e0f247735f92365dc3fd7f1bae9e44" + integrity sha512-3qgLZytikQQEVn1/FrhY7B68gPUUGY3R1Q1vTiD5xT+Ti1DP/8iZuwFet9ONs5+bmL8pZoDQ6JrQHVgrNlK6mA== + dependencies: + postcss "^6.0.14" superstruct@^0.15.3: version "0.15.3" resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.15.3.tgz#07edfc715259ebfe3b4b2e4cb53e8e45b51674a4" integrity sha512-wilec1Rg3FtKuRjRyCt70g5W29YUEuaLnybdVQUI+VQ7m0bw8k7TzrRv5iYmo6IpjLVrwxP5t3RgjAVqhYh4Fg== -supports-color@8.1.1, supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^5.3.0: +supports-color@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= + dependencies: + has-flag "^1.0.0" + +supports-color@^5.3.0, supports-color@^5.4.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -15667,7 +19527,19 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.0.0: +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-color@^9.2.1: + version "9.2.2" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.2.2.tgz#502acaf82f2b7ee78eb7c83dcac0f89694e5a7bb" + integrity sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA== + +supports-hyperlinks@^2.0.0, supports-hyperlinks@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== @@ -15680,6 +19552,11 @@ svg-parser@^2.0.2: resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== +svg-tags@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" + integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= + svgo@^1.0.0, svgo@^1.2.2: version "1.3.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" @@ -15721,6 +19598,18 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== +table@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc" + integrity sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg== + dependencies: + ajv "^6.0.1" + ajv-keywords "^3.0.0" + chalk "^2.1.0" + lodash "^4.17.4" + slice-ansi "1.0.0" + string-width "^2.1.1" + table@^6.0.9: version "6.7.3" resolved "https://registry.yarnpkg.com/table/-/table-6.7.3.tgz#255388439715a738391bd2ee4cbca89a4d05a9b7" @@ -15732,6 +19621,17 @@ table@^6.0.9: string-width "^4.2.3" strip-ansi "^6.0.1" +table@^6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" + integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" @@ -15792,7 +19692,7 @@ tar@^4.0.2: safe-buffer "^5.2.1" yallist "^3.1.1" -tar@^6.0.2: +tar@^6.0.2, tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: version "6.1.11" resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== @@ -15809,6 +19709,31 @@ temp-dir@^1.0.0: resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= +temp-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" + integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== + +temp-write@^3.3.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-3.4.0.tgz#8cff630fb7e9da05f047c74ce4ce4d685457d492" + integrity sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI= + dependencies: + graceful-fs "^4.1.2" + is-stream "^1.1.0" + make-dir "^1.0.0" + pify "^3.0.0" + temp-dir "^1.0.0" + uuid "^3.0.1" + +tempy@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.2.1.tgz#9038e4dbd1c201b74472214179bc2c6f7776e54c" + integrity sha512-LB83o9bfZGrntdqPuRdanIVCPReam9SOZKW0fOy5I9X3A854GGWi0tjCqoXEk84XIEYBc/x9Hq3EFop/H5wJaw== + dependencies: + temp-dir "^1.0.0" + unique-string "^1.0.0" + tempy@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.3.0.tgz#6f6c5b295695a16130996ad5ab01a8bd726e8bf8" @@ -15818,6 +19743,24 @@ tempy@^0.3.0: type-fest "^0.3.1" unique-string "^1.0.0" +tempy@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tempy/-/tempy-1.0.1.tgz#30fe901fd869cfb36ee2bd999805aa72fbb035de" + integrity sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w== + dependencies: + del "^6.0.0" + is-stream "^2.0.0" + temp-dir "^2.0.0" + type-fest "^0.16.0" + unique-string "^2.0.0" + +term-size@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= + dependencies: + execa "^0.7.0" + terminal-link@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" @@ -15888,7 +19831,7 @@ text-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== -text-table@0.2.0, text-table@^0.2.0: +text-table@0.2.0, text-table@^0.2.0, text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= @@ -15898,7 +19841,7 @@ throat@^5.0.0: resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== -through2@^2.0.0, through2@^2.0.3: +through2@^2.0.0, through2@^2.0.3, through2@~2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== @@ -15945,7 +19888,12 @@ tiny-invariant@^1.0.6: resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.2.0.tgz#a1141f86b672a9148c72e978a19a73b9b94a15a9" integrity sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg== -tiny-warning@^1.0.3: +tiny-relative-date@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" + integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== + +tiny-warning@^1.0.2, tiny-warning@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== @@ -16060,6 +20008,26 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= +traverse@~0.6.6: + version "0.6.6" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" + integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= + +treeverse@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-1.0.4.tgz#a6b0ebf98a1bca6846ddc7ecbc900df08cb9cd5f" + integrity sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g== + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= + +trim-newlines@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" + integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= + trim-newlines@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" @@ -16070,6 +20038,21 @@ trim-right@^1.0.1: resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= +trim-trailing-lines@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0" + integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ== + +trim@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= + +trough@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" + integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== + "true-case-path@^1.0.2": version "1.0.3" resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d" @@ -16102,16 +20085,11 @@ tslib@^1.8.1, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.0.3: +tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0: version "2.3.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== -tslib@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" - integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== - tsutils@^3.17.1, tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -16165,6 +20143,11 @@ type-detect@4.0.8: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== +type-fest@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" + integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== + type-fest@^0.18.0: version "0.18.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" @@ -16195,6 +20178,11 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-fest@^1.0.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" + integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== + type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -16272,6 +20260,14 @@ underscore@1.9.1: resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== +unherit@^1.0.4: + version "1.1.3" + resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" + integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ== + dependencies: + inherits "^2.0.0" + xtend "^4.0.0" + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" @@ -16295,6 +20291,18 @@ unicode-property-aliases-ecmascript@^2.0.0: resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== +unified@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba" + integrity sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-plain-obj "^1.1.0" + trough "^1.0.0" + vfile "^2.0.0" + x-is-string "^0.1.0" + union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" @@ -16336,6 +20344,56 @@ unique-string@^1.0.0: dependencies: crypto-random-string "^1.0.0" +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + +unist-util-find-all-after@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-1.0.5.tgz#5751a8608834f41d117ad9c577770c5f2f1b2899" + integrity sha512-lWgIc3rrTMTlK1Y0hEuL+k+ApzFk78h+lsaa2gHf63Gp5Ww+mt11huDniuaoq1H+XMK2lIIjjPkncxXcDp3QDw== + dependencies: + unist-util-is "^3.0.0" + +unist-util-is@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd" + integrity sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A== + +unist-util-remove-position@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz#ec037348b6102c897703eee6d0294ca4755a2020" + integrity sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A== + dependencies: + unist-util-visit "^1.1.0" + +unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6" + integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ== + +unist-util-visit-parents@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz#25e43e55312166f3348cae6743588781d112c1e9" + integrity sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g== + dependencies: + unist-util-is "^3.0.0" + +unist-util-visit@^1.1.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3" + integrity sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw== + dependencies: + unist-util-visit-parents "^2.0.0" + +universal-user-agent@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" + integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== + universalify@^0.1.0, universalify@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -16369,11 +20427,32 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" +unzip-response@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= + upath@^1.1.1, upath@^1.1.2, upath@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== +update-notifier@^2.2.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" + integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== + dependencies: + boxen "^1.2.1" + chalk "^2.0.1" + configstore "^3.0.0" + import-lazy "^2.1.0" + is-ci "^1.0.10" + is-installed-globally "^0.1.0" + is-npm "^1.0.0" + latest-version "^3.0.0" + semver-diff "^2.0.0" + xdg-basedir "^3.0.0" + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -16386,7 +20465,7 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= -url-join@^4.0.1: +url-join@^4.0.0, url-join@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== @@ -16453,6 +20532,11 @@ use-async-memo@^1.2.3: resolved "https://registry.yarnpkg.com/use-async-memo/-/use-async-memo-1.2.3.tgz#fe49d7ae1cd850199cf9e4a8ee483e31ed85659f" integrity sha512-AjZ1Wy1vfOSlaxohqoLIpauV+jwph/p0N72PBzxeEcjrZ4Mf/4o1Vav4bLaAPYuHLJZo+4M/4TIcAk7XC6H98g== +use-breakpoint@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/use-breakpoint/-/use-breakpoint-3.0.1.tgz#9534ca7a93e067781b45f9ab05e88675bb5962bd" + integrity sha512-gQ3zg55Aa/AAicxJSsKBSs5B4pcQv8PNMaJXS+P7TzvWJ6QLY7Napa2erkA6gZDmFFdkjWsztyOax5a5nuoLGQ== + use-deep-compare-effect@^1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/use-deep-compare-effect/-/use-deep-compare-effect-1.8.1.tgz#ef0ce3b3271edb801da1ec23bf0754ef4189d0c6" @@ -16579,7 +20663,7 @@ uuid@3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== -uuid@^3.3.2, uuid@^3.4.0: +uuid@^3.0.1, uuid@^3.3.2, uuid@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== @@ -16589,7 +20673,7 @@ uuid@^8.3.0, uuid@^8.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-compile-cache@^2.0.3: +v8-compile-cache@^2.0.3, v8-compile-cache@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== @@ -16608,7 +20692,7 @@ valid-url@^1.0.9: resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200" integrity sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA= -validate-npm-package-license@^3.0.1: +validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== @@ -16616,6 +20700,13 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= + dependencies: + builtins "^1.0.3" + varint@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" @@ -16640,6 +20731,28 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +vfile-location@^2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.6.tgz#8a274f39411b8719ea5728802e10d9e0dff1519e" + integrity sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA== + +vfile-message@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.1.1.tgz#5833ae078a1dfa2d96e9647886cd32993ab313e1" + integrity sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA== + dependencies: + unist-util-stringify-position "^1.1.1" + +vfile@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a" + integrity sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w== + dependencies: + is-buffer "^1.1.4" + replace-ext "1.0.0" + unist-util-stringify-position "^1.0.0" + vfile-message "^1.0.0" + vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" @@ -16659,6 +20772,11 @@ w3c-xmlserializer@^2.0.0: dependencies: xml-name-validator "^3.0.0" +walk-up-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" + integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== + walker@^1.0.7, walker@~1.0.5: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" @@ -16710,6 +20828,13 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" +wcwidth@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + web3-bzz@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.11.tgz#41bc19a77444bd5365744596d778b811880f707f" @@ -16720,10 +20845,10 @@ web3-bzz@1.2.11: swarm-js "^0.1.40" underscore "1.9.1" -web3-bzz@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.6.1.tgz#8430eb3cbb69baaee4981d190b840748c37a9ec2" - integrity sha512-JbnFNbRlwwHJZPtVuCxo7rC4U4OTg+mPsyhjgPQJJhS0a6Y54OgVWYk9UA/95HqbmTJwTtX329gJoSsseEfrng== +web3-bzz@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.7.1.tgz#ea1e7d27050eca089bc5d71b7f7688d20b68a25d" + integrity sha512-sVeUSINx4a4pfdnT+3ahdRdpDPvZDf4ZT/eBF5XtqGWq1mhGTl8XaQAk15zafKVm6Onq28vN8abgB/l+TrG8kA== dependencies: "@types/node" "^12.12.6" got "9.6.0" @@ -16746,6 +20871,14 @@ web3-core-helpers@1.6.1: web3-eth-iban "1.6.1" web3-utils "1.6.1" +web3-core-helpers@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.7.1.tgz#6dc34eff6ad31149db6c7cc2babbf574a09970cd" + integrity sha512-xn7Sx+s4CyukOJdlW8bBBDnUCWndr+OCJAlUe/dN2wXiyaGRiCWRhuQZrFjbxLeBt1fYFH7uWyYHhYU6muOHgw== + dependencies: + web3-eth-iban "1.7.1" + web3-utils "1.7.1" + web3-core-method@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.11.tgz#f880137d1507a0124912bf052534f168b8d8fbb6" @@ -16769,6 +20902,17 @@ web3-core-method@1.6.1: web3-core-subscriptions "1.6.1" web3-utils "1.6.1" +web3-core-method@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.7.1.tgz#912c87d0f107d3f823932cf8a716852e3250e557" + integrity sha512-383wu5FMcEphBFl5jCjk502JnEg3ugHj7MQrsX7DY76pg5N5/dEzxeEMIJFCN6kr5Iq32NINOG3VuJIyjxpsEg== + dependencies: + "@ethersproject/transactions" "^5.0.0-beta.135" + web3-core-helpers "1.7.1" + web3-core-promievent "1.7.1" + web3-core-subscriptions "1.7.1" + web3-utils "1.7.1" + web3-core-promievent@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.11.tgz#51fe97ca0ddec2f99bf8c3306a7a8e4b094ea3cf" @@ -16783,6 +20927,13 @@ web3-core-promievent@1.6.1: dependencies: eventemitter3 "4.0.4" +web3-core-promievent@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.7.1.tgz#7f78ec100a696954d0c882dac619fec28b2efc96" + integrity sha512-Vd+CVnpPejrnevIdxhCkzMEywqgVbhHk/AmXXceYpmwA6sX41c5a65TqXv1i3FWRJAz/dW7oKz9NAzRIBAO/kA== + dependencies: + eventemitter3 "4.0.4" + web3-core-requestmanager@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.11.tgz#fe6eb603fbaee18530293a91f8cf26d8ae28c45a" @@ -16805,6 +20956,17 @@ web3-core-requestmanager@1.6.1: web3-providers-ipc "1.6.1" web3-providers-ws "1.6.1" +web3-core-requestmanager@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.7.1.tgz#5cd7507276ca449538fe11cb4f363de8507502e5" + integrity sha512-/EHVTiMShpZKiq0Jka0Vgguxi3vxq1DAHKxg42miqHdUsz4/cDWay2wGALDR2x3ofDB9kqp7pb66HsvQImQeag== + dependencies: + util "^0.12.0" + web3-core-helpers "1.7.1" + web3-providers-http "1.7.1" + web3-providers-ipc "1.7.1" + web3-providers-ws "1.7.1" + web3-core-subscriptions@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.11.tgz#beca908fbfcb050c16f45f3f0f4c205e8505accd" @@ -16822,6 +20984,14 @@ web3-core-subscriptions@1.6.1: eventemitter3 "4.0.4" web3-core-helpers "1.6.1" +web3-core-subscriptions@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.7.1.tgz#f7c834ee3544f4a5641a989304f61fde6a523e0b" + integrity sha512-NZBsvSe4J+Wt16xCf4KEtBbxA9TOwSVr8KWfUQ0tC2KMdDYdzNswl0Q9P58xaVuNlJ3/BH+uDFZJJ5E61BSA1Q== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.7.1" + web3-core@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.11.tgz#1043cacc1becb80638453cc5b2a14be9050288a7" @@ -16848,6 +21018,19 @@ web3-core@1.6.1: web3-core-requestmanager "1.6.1" web3-utils "1.6.1" +web3-core@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.7.1.tgz#ef9b7f03909387b9ab783f34cdc5ebcb50248368" + integrity sha512-HOyDPj+4cNyeNPwgSeUkhtS0F+Pxc2obcm4oRYPW5ku6jnTO34pjaij0us+zoY3QEusR8FfAKVK1kFPZnS7Dzw== + dependencies: + "@types/bn.js" "^4.11.5" + "@types/node" "^12.12.6" + bignumber.js "^9.0.0" + web3-core-helpers "1.7.1" + web3-core-method "1.7.1" + web3-core-requestmanager "1.7.1" + web3-utils "1.7.1" + web3-eth-abi@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.11.tgz#a887494e5d447c2926d557a3834edd66e17af9b0" @@ -16865,6 +21048,14 @@ web3-eth-abi@1.6.1: "@ethersproject/abi" "5.0.7" web3-utils "1.6.1" +web3-eth-abi@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.7.1.tgz#6632003220a4defee4de8215dc703e43147382ea" + integrity sha512-8BVBOoFX1oheXk+t+uERBibDaVZ5dxdcefpbFTWcBs7cdm0tP8CD1ZTCLi5Xo+1bolVHNH2dMSf/nEAssq5pUA== + dependencies: + "@ethersproject/abi" "5.0.7" + web3-utils "1.7.1" + web3-eth-accounts@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.11.tgz#a9e3044da442d31903a7ce035a86d8fa33f90520" @@ -16882,10 +21073,10 @@ web3-eth-accounts@1.2.11: web3-core-method "1.2.11" web3-utils "1.2.11" -web3-eth-accounts@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.6.1.tgz#aeb0dfb52c4391773550569732975b471212583f" - integrity sha512-rGn3jwnuOKwaQRu4SiShz0YAQ87aVDBKs4HO43+XTCI1q1Y1jn3NOsG3BW9ZHaOckev4+zEyxze/Bsh2oEk24w== +web3-eth-accounts@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.7.1.tgz#f938060d08f4b641bebe743809b0018fd4e4ba51" + integrity sha512-3xGQ2bkTQc7LFoqGWxp5cQDrKndlX05s7m0rAFVoyZZODMqrdSGjMPMqmWqHzJRUswNEMc+oelqSnGBubqhguQ== dependencies: "@ethereumjs/common" "^2.5.0" "@ethereumjs/tx" "^3.3.2" @@ -16894,10 +21085,10 @@ web3-eth-accounts@1.6.1: ethereumjs-util "^7.0.10" scrypt-js "^3.0.1" uuid "3.3.2" - web3-core "1.6.1" - web3-core-helpers "1.6.1" - web3-core-method "1.6.1" - web3-utils "1.6.1" + web3-core "1.7.1" + web3-core-helpers "1.7.1" + web3-core-method "1.7.1" + web3-utils "1.7.1" web3-eth-contract@1.2.11: version "1.2.11" @@ -16914,7 +21105,21 @@ web3-eth-contract@1.2.11: web3-eth-abi "1.2.11" web3-utils "1.2.11" -web3-eth-contract@1.6.1, web3-eth-contract@^1.6.1: +web3-eth-contract@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.7.1.tgz#3f5147e5f1441ae388c985ba95023d02503378ae" + integrity sha512-HpnbkPYkVK3lOyos2SaUjCleKfbF0SP3yjw7l551rAAi5sIz/vwlEzdPWd0IHL7ouxXbO0tDn7jzWBRcD3sTbA== + dependencies: + "@types/bn.js" "^4.11.5" + web3-core "1.7.1" + web3-core-helpers "1.7.1" + web3-core-method "1.7.1" + web3-core-promievent "1.7.1" + web3-core-subscriptions "1.7.1" + web3-eth-abi "1.7.1" + web3-utils "1.7.1" + +web3-eth-contract@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.6.1.tgz#4b0a2c0b37015d70146e54c7cb3f035a58fbeec0" integrity sha512-GXqTe3mF6kpbOAakiNc7wtJ120/gpuKMTZjuGFKeeY8aobRLfbfgKzM9IpyqVZV2v5RLuGXDuurVN2KPgtu3hQ== @@ -16943,19 +21148,19 @@ web3-eth-ens@1.2.11: web3-eth-contract "1.2.11" web3-utils "1.2.11" -web3-eth-ens@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.6.1.tgz#801bd5fb5237377ec2ed8517a9fe4634f2269c7a" - integrity sha512-ngprtbnoRgxg8s1wXt9nXpD3h1P+p7XnKXrp/8GdFI9uDmrbSQPRfzBw86jdZgOmy78hAnWmrHI6pBInmgi2qQ== +web3-eth-ens@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.7.1.tgz#18ddb22e14e50108f9515c9d17f14560d69ff397" + integrity sha512-DVCF76i9wM93DrPQwLrYiCw/UzxFuofBsuxTVugrnbm0SzucajLLNftp3ITK0c4/lV3x9oo5ER/wD6RRMHQnvw== dependencies: content-hash "^2.5.2" eth-ens-namehash "2.0.8" - web3-core "1.6.1" - web3-core-helpers "1.6.1" - web3-core-promievent "1.6.1" - web3-eth-abi "1.6.1" - web3-eth-contract "1.6.1" - web3-utils "1.6.1" + web3-core "1.7.1" + web3-core-helpers "1.7.1" + web3-core-promievent "1.7.1" + web3-eth-abi "1.7.1" + web3-eth-contract "1.7.1" + web3-utils "1.7.1" web3-eth-iban@1.2.11: version "1.2.11" @@ -16973,6 +21178,14 @@ web3-eth-iban@1.6.1: bn.js "^4.11.9" web3-utils "1.6.1" +web3-eth-iban@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.7.1.tgz#2148dff256392491df36b175e393b03c6874cd31" + integrity sha512-XG4I3QXuKB/udRwZdNEhdYdGKjkhfb/uH477oFVMLBqNimU/Cw8yXUI5qwFKvBHM+hMQWfzPDuSDEDKC2uuiMg== + dependencies: + bn.js "^4.11.9" + web3-utils "1.7.1" + web3-eth-personal@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.11.tgz#a38b3942a1d87a62070ce0622a941553c3d5aa70" @@ -16985,17 +21198,17 @@ web3-eth-personal@1.2.11: web3-net "1.2.11" web3-utils "1.2.11" -web3-eth-personal@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.6.1.tgz#9b524fb9f92b51163f46920ee2663d34a4897c8d" - integrity sha512-ItsC89Ln02+irzJjK6ALcLrMZfbVUCqVbmb/ieDKJ+eLW3pNkBNwoUzaydh92d5NzxNZgNxuQWVdlFyYX2hkEw== +web3-eth-personal@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.7.1.tgz#38635f94223f951422105e5fcb7f7ba767a3ee9f" + integrity sha512-02H6nFBNfNmFjMGZL6xcDi0r7tUhxrUP91FTFdoLyR94eIJDadPp4rpXfG7MVES873i1PReh4ep5pSCHbc3+Pg== dependencies: "@types/node" "^12.12.6" - web3-core "1.6.1" - web3-core-helpers "1.6.1" - web3-core-method "1.6.1" - web3-net "1.6.1" - web3-utils "1.6.1" + web3-core "1.7.1" + web3-core-helpers "1.7.1" + web3-core-method "1.7.1" + web3-net "1.7.1" + web3-utils "1.7.1" web3-eth@1.2.11: version "1.2.11" @@ -17016,23 +21229,23 @@ web3-eth@1.2.11: web3-net "1.2.11" web3-utils "1.2.11" -web3-eth@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.6.1.tgz#a25aba1ac213d872ecf3f81c7b4ab8072ecae224" - integrity sha512-kOV1ZgCKypSo5BQyltRArS7ZC3bRpIKAxSgzl7pUFinUb/MxfbM9KGeNxUXoCfTSErcCQJaDjcS6bSre5EMKuQ== - dependencies: - web3-core "1.6.1" - web3-core-helpers "1.6.1" - web3-core-method "1.6.1" - web3-core-subscriptions "1.6.1" - web3-eth-abi "1.6.1" - web3-eth-accounts "1.6.1" - web3-eth-contract "1.6.1" - web3-eth-ens "1.6.1" - web3-eth-iban "1.6.1" - web3-eth-personal "1.6.1" - web3-net "1.6.1" - web3-utils "1.6.1" +web3-eth@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.7.1.tgz#721599865f675b43877f5a18babfb7ae087449f7" + integrity sha512-Uz3gO4CjTJ+hMyJZAd2eiv2Ur1uurpN7sTMATWKXYR/SgG+SZgncnk/9d8t23hyu4lyi2GiVL1AqVqptpRElxg== + dependencies: + web3-core "1.7.1" + web3-core-helpers "1.7.1" + web3-core-method "1.7.1" + web3-core-subscriptions "1.7.1" + web3-eth-abi "1.7.1" + web3-eth-accounts "1.7.1" + web3-eth-contract "1.7.1" + web3-eth-ens "1.7.1" + web3-eth-iban "1.7.1" + web3-eth-personal "1.7.1" + web3-net "1.7.1" + web3-utils "1.7.1" web3-net@1.2.11: version "1.2.11" @@ -17043,14 +21256,14 @@ web3-net@1.2.11: web3-core-method "1.2.11" web3-utils "1.2.11" -web3-net@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.6.1.tgz#7a630a804ec9f81908ae52ccbb4ebbb9530b3906" - integrity sha512-gpnqKEIwfUHh5ik7wsQFlCje1DfcmGv+Sk7LCh1hCqn++HEDQxJ/mZCrMo11ZZpZHCH7c87imdxTg96GJnRxDw== +web3-net@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.7.1.tgz#c75ff7ccabb949cf15e9098505516eb1ed8e37de" + integrity sha512-8yPNp2gvjInWnU7DCoj4pIPNhxzUjrxKlODsyyXF8j0q3Z2VZuQp+c63gL++r2Prg4fS8t141/HcJw4aMu5sVA== dependencies: - web3-core "1.6.1" - web3-core-method "1.6.1" - web3-utils "1.6.1" + web3-core "1.7.1" + web3-core-method "1.7.1" + web3-utils "1.7.1" web3-provider-engine@14.0.6: version "14.0.6" @@ -17149,6 +21362,14 @@ web3-providers-http@1.6.1: web3-core-helpers "1.6.1" xhr2-cookies "1.1.0" +web3-providers-http@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.7.1.tgz#3e00e013f013766aade28da29247daa1a937e759" + integrity sha512-dmiO6G4dgAa3yv+2VD5TduKNckgfR97VI9YKXVleWdcpBoKXe2jofhdvtafd42fpIoaKiYsErxQNcOC5gI/7Vg== + dependencies: + web3-core-helpers "1.7.1" + xhr2-cookies "1.1.0" + web3-providers-ipc@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.11.tgz#d16d6c9be1be6e0b4f4536c4acc16b0f4f27ef21" @@ -17166,6 +21387,14 @@ web3-providers-ipc@1.6.1: oboe "2.1.5" web3-core-helpers "1.6.1" +web3-providers-ipc@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.7.1.tgz#cde879a2ba57b1deac2e1030de90d185b793dd50" + integrity sha512-uNgLIFynwnd5M9ZC0lBvRQU5iLtU75hgaPpc7ZYYR+kjSk2jr2BkEAQhFVJ8dlqisrVmmqoAPXOEU0flYZZgNQ== + dependencies: + oboe "2.1.5" + web3-core-helpers "1.7.1" + web3-providers-ws@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.11.tgz#a1dfd6d9778d840561d9ec13dd453046451a96bb" @@ -17185,6 +21414,15 @@ web3-providers-ws@1.6.1: web3-core-helpers "1.6.1" websocket "^1.0.32" +web3-providers-ws@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.7.1.tgz#b6b3919ce155eff29b21bc3f205a098299a8c1b2" + integrity sha512-Uj0n5hdrh0ESkMnTQBsEUS2u6Unqdc7Pe4Zl+iZFb7Yn9cIGsPJBl7/YOP4137EtD5ueXAv+MKwzcelpVhFiFg== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.7.1" + websocket "^1.0.32" + web3-shh@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.11.tgz#f5d086f9621c9a47e98d438010385b5f059fd88f" @@ -17195,15 +21433,15 @@ web3-shh@1.2.11: web3-core-subscriptions "1.2.11" web3-net "1.2.11" -web3-shh@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.6.1.tgz#eebaab2e5e6be80fe2585c6c094fa10a03349ca7" - integrity sha512-oP00HbAtybLCGlLOZUYXOdeB9xq88k2l0TtStvKBtmFqRt+zVk5TxEeuOnVPRxNhcA2Un8RUw6FtvgZlWStu9A== +web3-shh@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.7.1.tgz#c6a0fc67321dd585085e3e3be8f2c1c8d61636ef" + integrity sha512-NO+jpEjo8kYX6c7GiaAm57Sx93PLYkWYUCWlZmUOW7URdUcux8VVluvTWklGPvdM9H1WfDrol91DjuSW+ykyqg== dependencies: - web3-core "1.6.1" - web3-core-method "1.6.1" - web3-core-subscriptions "1.6.1" - web3-net "1.6.1" + web3-core "1.7.1" + web3-core-method "1.7.1" + web3-core-subscriptions "1.7.1" + web3-net "1.7.1" web3-utils@1.2.11: version "1.2.11" @@ -17232,6 +21470,19 @@ web3-utils@1.6.1, web3-utils@^1.6.1: randombytes "^2.1.0" utf8 "3.0.0" +web3-utils@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.7.1.tgz#77d8bacaf426c66027d8aa4864d77f0ed211aacd" + integrity sha512-fef0EsqMGJUgiHPdX+KN9okVWshbIumyJPmR+btnD1HgvoXijKEkuKBv0OmUqjbeqmLKP2/N9EiXKJel5+E1Dw== + dependencies: + bn.js "^4.11.9" + ethereum-bloom-filters "^1.0.6" + ethereumjs-util "^7.1.0" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" + web3@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.11.tgz#50f458b2e8b11aa37302071c170ed61cff332975" @@ -17245,18 +21496,18 @@ web3@1.2.11: web3-shh "1.2.11" web3-utils "1.2.11" -web3@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.6.1.tgz#c9e68fe7b3073adddf35393441f950ec69b92735" - integrity sha512-c299lLiyb2/WOcxh7TinwvbATaMmrgNIeAzbLbmOKHI0LcwyfsB1eu2ReOIrfrCYDYRW2KAjYr7J7gHawqDNPQ== +web3@^1.7.0: + version "1.7.1" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.7.1.tgz#4d01371a2c0c07dba089f8009dabd2b11821c5e8" + integrity sha512-RKVdyZ5FuVEykj62C1o2tc0teJciSOh61jpVB9yb344dBHO3ZV4XPPP24s/PPqIMXmVFN00g2GD9M/v1SoHO/A== dependencies: - web3-bzz "1.6.1" - web3-core "1.6.1" - web3-eth "1.6.1" - web3-eth-personal "1.6.1" - web3-net "1.6.1" - web3-shh "1.6.1" - web3-utils "1.6.1" + web3-bzz "1.7.1" + web3-core "1.7.1" + web3-eth "1.7.1" + web3-eth-personal "1.7.1" + web3-net "1.7.1" + web3-shh "1.7.1" + web3-utils "1.7.1" webidl-conversions@^3.0.0: version "3.0.1" @@ -17502,13 +21753,20 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" -wide-align@^1.1.0: +wide-align@^1.1.0, wide-align@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: string-width "^1.0.2 || 2 || 3 || 4" +widest-line@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" + integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== + dependencies: + string-width "^2.1.1" + word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -17718,6 +21976,15 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= +write-file-atomic@^2.0.0: + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + write-file-atomic@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" @@ -17728,6 +21995,21 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" +write-file-atomic@^4.0.0, write-file-atomic@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.1.tgz#9faa33a964c1c85ff6f849b80b42a88c2c537c8f" + integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +write@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= + dependencies: + mkdirp "^0.5.1" + ws@7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/ws/-/ws-7.1.2.tgz#c672d1629de8bb27a9699eb599be47aeeedd8f73" @@ -17768,6 +22050,16 @@ ws@^7.4.6: resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b" integrity sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA== +x-is-string@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" + integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI= + +xdg-basedir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" + integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= + xhr-request-promise@^0.1.2: version "0.1.3" resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" @@ -17847,6 +22139,11 @@ yaeti@^0.0.6: resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc= +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" @@ -17857,7 +22154,7 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.10.0, yaml@^1.7.2: +yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== @@ -17916,7 +22213,7 @@ yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^16.0.0, yargs@^16.2.0: +yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== From ffa93371dafec19bccd0b2c9a8b34b996b8d72a9 Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Mon, 4 Apr 2022 07:48:37 +0000 Subject: [PATCH 117/211] prerelease: v1.0.0-dev.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [1.0.0-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v0.0.1...v1.0.0-dev.1) (2022-04-04) ### ⚠ BREAKING CHANGES * alpha version (#126) ### 💉 Improvements * utils ([#82](https://github.com/starkware-libs/starkgate-frontend/issues/82)) ([c38e56e](https://github.com/starkware-libs/starkgate-frontend/commit/c38e56e1d942b3350e45811a435da22472dcf00e)) ### 🔧 Fixes * add missing env poll block number interval ([d364cb4](https://github.com/starkware-libs/starkgate-frontend/commit/d364cb44b8bf1ef62bba3cf08a13cd48c2897c6e)) * **getTransactionHash:** add fee and version to calculation ([#90](https://github.com/starkware-libs/starkgate-frontend/issues/90)) ([938ffe0](https://github.com/starkware-libs/starkgate-frontend/commit/938ffe079c794409df04982096de22fd6e9d31ad)) * redux error on switching menu "non-serializable value was detected" ([#89](https://github.com/starkware-libs/starkgate-frontend/issues/89)) ([9dc4972](https://github.com/starkware-libs/starkgate-frontend/commit/9dc49729c9cef14c016be348fe170f084d478843)) * remove pending transfer toast ([#92](https://github.com/starkware-libs/starkgate-frontend/issues/92)) ([20f51f3](https://github.com/starkware-libs/starkgate-frontend/commit/20f51f3d68bf5d9c8a1212e6442fa5d246fbbeb2)) * update ETH token addresses and add SLF token ([#84](https://github.com/starkware-libs/starkgate-frontend/issues/84)) ([2c5a9df](https://github.com/starkware-libs/starkgate-frontend/commit/2c5a9df17acf28fb3c87bf91a245dc0f0f6e5b2e)) ### 🧩 Features * alpha version ([#126](https://github.com/starkware-libs/starkgate-frontend/issues/126)) ([5b15ca0](https://github.com/starkware-libs/starkgate-frontend/commit/5b15ca0b1c87f25beab2f30367384d63503d8ef9)) * handle browser support ([#96](https://github.com/starkware-libs/starkgate-frontend/issues/96)) ([56d920d](https://github.com/starkware-libs/starkgate-frontend/commit/56d920d46af53e9d60368321435aed86e463063e)) * remove redux and use providers ([#98](https://github.com/starkware-libs/starkgate-frontend/issues/98)) ([ed38ae4](https://github.com/starkware-libs/starkgate-frontend/commit/ed38ae4925468e7331f974a618f3d4da04773ca8)) * **toasts:** add link to transfer log ([#79](https://github.com/starkware-libs/starkgate-frontend/issues/79)) ([b743b85](https://github.com/starkware-libs/starkgate-frontend/commit/b743b85be4d573a93e3dbfe1e58fdbd8042a5e61)) * use blockNumber=pending for balanceOf calls ([#58](https://github.com/starkware-libs/starkgate-frontend/issues/58)) ([9a84b05](https://github.com/starkware-libs/starkgate-frontend/commit/9a84b05142a8ea44e2e2dd0a39aba39f35b327b4)) --- CHANGELOG.md | 28 ++++++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..36c17b9c --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,28 @@ +## [1.0.0-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v0.0.1...v1.0.0-dev.1) (2022-04-04) + + +### ⚠ BREAKING CHANGES + +* alpha version (#126) + +### 💉 Improvements + +* utils ([#82](https://github.com/starkware-libs/starkgate-frontend/issues/82)) ([c38e56e](https://github.com/starkware-libs/starkgate-frontend/commit/c38e56e1d942b3350e45811a435da22472dcf00e)) + + +### 🔧 Fixes + +* add missing env poll block number interval ([d364cb4](https://github.com/starkware-libs/starkgate-frontend/commit/d364cb44b8bf1ef62bba3cf08a13cd48c2897c6e)) +* **getTransactionHash:** add fee and version to calculation ([#90](https://github.com/starkware-libs/starkgate-frontend/issues/90)) ([938ffe0](https://github.com/starkware-libs/starkgate-frontend/commit/938ffe079c794409df04982096de22fd6e9d31ad)) +* redux error on switching menu "non-serializable value was detected" ([#89](https://github.com/starkware-libs/starkgate-frontend/issues/89)) ([9dc4972](https://github.com/starkware-libs/starkgate-frontend/commit/9dc49729c9cef14c016be348fe170f084d478843)) +* remove pending transfer toast ([#92](https://github.com/starkware-libs/starkgate-frontend/issues/92)) ([20f51f3](https://github.com/starkware-libs/starkgate-frontend/commit/20f51f3d68bf5d9c8a1212e6442fa5d246fbbeb2)) +* update ETH token addresses and add SLF token ([#84](https://github.com/starkware-libs/starkgate-frontend/issues/84)) ([2c5a9df](https://github.com/starkware-libs/starkgate-frontend/commit/2c5a9df17acf28fb3c87bf91a245dc0f0f6e5b2e)) + + +### 🧩 Features + +* alpha version ([#126](https://github.com/starkware-libs/starkgate-frontend/issues/126)) ([5b15ca0](https://github.com/starkware-libs/starkgate-frontend/commit/5b15ca0b1c87f25beab2f30367384d63503d8ef9)) +* handle browser support ([#96](https://github.com/starkware-libs/starkgate-frontend/issues/96)) ([56d920d](https://github.com/starkware-libs/starkgate-frontend/commit/56d920d46af53e9d60368321435aed86e463063e)) +* remove redux and use providers ([#98](https://github.com/starkware-libs/starkgate-frontend/issues/98)) ([ed38ae4](https://github.com/starkware-libs/starkgate-frontend/commit/ed38ae4925468e7331f974a618f3d4da04773ca8)) +* **toasts:** add link to transfer log ([#79](https://github.com/starkware-libs/starkgate-frontend/issues/79)) ([b743b85](https://github.com/starkware-libs/starkgate-frontend/commit/b743b85be4d573a93e3dbfe1e58fdbd8042a5e61)) +* use blockNumber=pending for balanceOf calls ([#58](https://github.com/starkware-libs/starkgate-frontend/issues/58)) ([9a84b05](https://github.com/starkware-libs/starkgate-frontend/commit/9a84b05142a8ea44e2e2dd0a39aba39f35b327b4)) diff --git a/package.json b/package.json index 4bc4b958..6743d68b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "0.0.0", + "version": "1.0.0-dev.1", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From b5e07f759eb1dcc86e8cfbc38c9eae2a19d66b10 Mon Sep 17 00:00:00 2001 From: CarmitKl <96685244+CarmitKl@users.noreply.github.com> Date: Mon, 4 Apr 2022 11:29:34 +0300 Subject: [PATCH 118/211] chore: change faq text link (#128) --- src/config/faqs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config/faqs.js b/src/config/faqs.js index 92cf4f69..c642ee96 100644 --- a/src/config/faqs.js +++ b/src/config/faqs.js @@ -88,7 +88,7 @@ export const faqs = [ </li> </ol> <p> - *Take a look at the <a href="https://starknet.io/documentation/starkgate-token-bridge/" target="_blank">documentation</a> to see the updated numbers, stay tuned. + *Take a look at the <a href="https://starknet.io/documentation/starkgate-token-bridge/#limitations" target="_blank">documentation</a> to see the updated numbers, stay tuned. </p> <p> We plan to gradually ease these limitations and lift them completely, as confidence grows. From 9d13c3bf01090b3f0db2d392ae3747d56fd3c9a5 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Mon, 4 Apr 2022 11:29:54 +0300 Subject: [PATCH 119/211] fix: empty callback in promise .then (#127) --- src/analytics/track.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/analytics/track.js b/src/analytics/track.js index b290baa9..338098cd 100644 --- a/src/analytics/track.js +++ b/src/analytics/track.js @@ -4,14 +4,13 @@ import utils from '../utils'; const logger = utils.logger.getLogger('Analytics'); -export const track = (event, data) => { +export const track = async (event, data) => { logger.debug('Sending track event...', {event, data}); - splitbee.track(event, data).then(() => { - logger.debug('Track event sent.'); - }); + await splitbee.track(event, data); + logger.debug('Track event sent.'); }; -export const setUser = data => { +export const setUser = async data => { logger.debug('Set user', data); - splitbee.user.set(data).then(); + await splitbee.user.set(data); }; From 93e76f67aefc90812e0dfb6a7bc356936735c57b Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Mon, 4 Apr 2022 08:31:58 +0000 Subject: [PATCH 120/211] prerelease: v1.0.0-dev.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [1.0.0-dev.2](https://github.com/starkware-libs/starkgate-frontend/compare/v1.0.0-dev.1...v1.0.0-dev.2) (2022-04-04) ### 🔧 Fixes * empty callback in promise .then ([#127](https://github.com/starkware-libs/starkgate-frontend/issues/127)) ([9d13c3b](https://github.com/starkware-libs/starkgate-frontend/commit/9d13c3bf01090b3f0db2d392ae3747d56fd3c9a5)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 36c17b9c..13f87ef4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [1.0.0-dev.2](https://github.com/starkware-libs/starkgate-frontend/compare/v1.0.0-dev.1...v1.0.0-dev.2) (2022-04-04) + + +### 🔧 Fixes + +* empty callback in promise .then ([#127](https://github.com/starkware-libs/starkgate-frontend/issues/127)) ([9d13c3b](https://github.com/starkware-libs/starkgate-frontend/commit/9d13c3bf01090b3f0db2d392ae3747d56fd3c9a5)) + ## [1.0.0-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v0.0.1...v1.0.0-dev.1) (2022-04-04) diff --git a/package.json b/package.json index 6743d68b..8c3bfc20 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.0.0-dev.1", + "version": "1.0.0-dev.2", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 72a615269b58a23ff94995da0aa4511ca1f219ed Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Mon, 4 Apr 2022 11:58:01 +0300 Subject: [PATCH 121/211] chore(ci): fix if statement for running push workflow --- .github/workflows/push.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index c25b9531..9aadd085 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -10,7 +10,7 @@ jobs: release-version: name: Releasing a version runs-on: ubuntu-latest - if: ${{ !contains(github.event.head_commit.message, 'release') || (github.ref_name == 'master' && !contains(github.event.head_commit.message, 'release')) }} + if: ${{ !startsWith(github.event.head_commit.message, 'release') || (github.ref_name == 'master' && !startsWith(github.event.head_commit.message, 'release')) }} steps: - uses: actions/checkout@v2 with: From ec98f867878d95d43eaf9a88a0f11d43288091e4 Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Mon, 4 Apr 2022 09:00:33 +0000 Subject: [PATCH 122/211] release: v1.0.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [1.0.0](https://github.com/starkware-libs/starkgate-frontend/compare/v0.0.1...v1.0.0) (2022-04-04) ### ⚠ BREAKING CHANGES * alpha version (#126) ### 💉 Improvements * utils ([#82](https://github.com/starkware-libs/starkgate-frontend/issues/82)) ([c38e56e](https://github.com/starkware-libs/starkgate-frontend/commit/c38e56e1d942b3350e45811a435da22472dcf00e)) ### 🧩 Features * alpha version ([#126](https://github.com/starkware-libs/starkgate-frontend/issues/126)) ([5b15ca0](https://github.com/starkware-libs/starkgate-frontend/commit/5b15ca0b1c87f25beab2f30367384d63503d8ef9)) * handle browser support ([#96](https://github.com/starkware-libs/starkgate-frontend/issues/96)) ([56d920d](https://github.com/starkware-libs/starkgate-frontend/commit/56d920d46af53e9d60368321435aed86e463063e)) * remove redux and use providers ([#98](https://github.com/starkware-libs/starkgate-frontend/issues/98)) ([ed38ae4](https://github.com/starkware-libs/starkgate-frontend/commit/ed38ae4925468e7331f974a618f3d4da04773ca8)) * **toasts:** add link to transfer log ([#79](https://github.com/starkware-libs/starkgate-frontend/issues/79)) ([b743b85](https://github.com/starkware-libs/starkgate-frontend/commit/b743b85be4d573a93e3dbfe1e58fdbd8042a5e61)) * use blockNumber=pending for balanceOf calls ([#58](https://github.com/starkware-libs/starkgate-frontend/issues/58)) ([9a84b05](https://github.com/starkware-libs/starkgate-frontend/commit/9a84b05142a8ea44e2e2dd0a39aba39f35b327b4)) ### 🔧 Fixes * add missing env poll block number interval ([d364cb4](https://github.com/starkware-libs/starkgate-frontend/commit/d364cb44b8bf1ef62bba3cf08a13cd48c2897c6e)) * empty callback in promise .then ([#127](https://github.com/starkware-libs/starkgate-frontend/issues/127)) ([9d13c3b](https://github.com/starkware-libs/starkgate-frontend/commit/9d13c3bf01090b3f0db2d392ae3747d56fd3c9a5)) * **getTransactionHash:** add fee and version to calculation ([#90](https://github.com/starkware-libs/starkgate-frontend/issues/90)) ([938ffe0](https://github.com/starkware-libs/starkgate-frontend/commit/938ffe079c794409df04982096de22fd6e9d31ad)) * redux error on switching menu "non-serializable value was detected" ([#89](https://github.com/starkware-libs/starkgate-frontend/issues/89)) ([9dc4972](https://github.com/starkware-libs/starkgate-frontend/commit/9dc49729c9cef14c016be348fe170f084d478843)) * remove pending transfer toast ([#92](https://github.com/starkware-libs/starkgate-frontend/issues/92)) ([20f51f3](https://github.com/starkware-libs/starkgate-frontend/commit/20f51f3d68bf5d9c8a1212e6442fa5d246fbbeb2)) * update ETH token addresses and add SLF token ([#84](https://github.com/starkware-libs/starkgate-frontend/issues/84)) ([2c5a9df](https://github.com/starkware-libs/starkgate-frontend/commit/2c5a9df17acf28fb3c87bf91a245dc0f0f6e5b2e)) --- CHANGELOG.md | 30 ++++++++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 13f87ef4..a0a40f03 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,33 @@ +## [1.0.0](https://github.com/starkware-libs/starkgate-frontend/compare/v0.0.1...v1.0.0) (2022-04-04) + + +### ⚠ BREAKING CHANGES + +* alpha version (#126) + +### 💉 Improvements + +* utils ([#82](https://github.com/starkware-libs/starkgate-frontend/issues/82)) ([c38e56e](https://github.com/starkware-libs/starkgate-frontend/commit/c38e56e1d942b3350e45811a435da22472dcf00e)) + + +### 🧩 Features + +* alpha version ([#126](https://github.com/starkware-libs/starkgate-frontend/issues/126)) ([5b15ca0](https://github.com/starkware-libs/starkgate-frontend/commit/5b15ca0b1c87f25beab2f30367384d63503d8ef9)) +* handle browser support ([#96](https://github.com/starkware-libs/starkgate-frontend/issues/96)) ([56d920d](https://github.com/starkware-libs/starkgate-frontend/commit/56d920d46af53e9d60368321435aed86e463063e)) +* remove redux and use providers ([#98](https://github.com/starkware-libs/starkgate-frontend/issues/98)) ([ed38ae4](https://github.com/starkware-libs/starkgate-frontend/commit/ed38ae4925468e7331f974a618f3d4da04773ca8)) +* **toasts:** add link to transfer log ([#79](https://github.com/starkware-libs/starkgate-frontend/issues/79)) ([b743b85](https://github.com/starkware-libs/starkgate-frontend/commit/b743b85be4d573a93e3dbfe1e58fdbd8042a5e61)) +* use blockNumber=pending for balanceOf calls ([#58](https://github.com/starkware-libs/starkgate-frontend/issues/58)) ([9a84b05](https://github.com/starkware-libs/starkgate-frontend/commit/9a84b05142a8ea44e2e2dd0a39aba39f35b327b4)) + + +### 🔧 Fixes + +* add missing env poll block number interval ([d364cb4](https://github.com/starkware-libs/starkgate-frontend/commit/d364cb44b8bf1ef62bba3cf08a13cd48c2897c6e)) +* empty callback in promise .then ([#127](https://github.com/starkware-libs/starkgate-frontend/issues/127)) ([9d13c3b](https://github.com/starkware-libs/starkgate-frontend/commit/9d13c3bf01090b3f0db2d392ae3747d56fd3c9a5)) +* **getTransactionHash:** add fee and version to calculation ([#90](https://github.com/starkware-libs/starkgate-frontend/issues/90)) ([938ffe0](https://github.com/starkware-libs/starkgate-frontend/commit/938ffe079c794409df04982096de22fd6e9d31ad)) +* redux error on switching menu "non-serializable value was detected" ([#89](https://github.com/starkware-libs/starkgate-frontend/issues/89)) ([9dc4972](https://github.com/starkware-libs/starkgate-frontend/commit/9dc49729c9cef14c016be348fe170f084d478843)) +* remove pending transfer toast ([#92](https://github.com/starkware-libs/starkgate-frontend/issues/92)) ([20f51f3](https://github.com/starkware-libs/starkgate-frontend/commit/20f51f3d68bf5d9c8a1212e6442fa5d246fbbeb2)) +* update ETH token addresses and add SLF token ([#84](https://github.com/starkware-libs/starkgate-frontend/issues/84)) ([2c5a9df](https://github.com/starkware-libs/starkgate-frontend/commit/2c5a9df17acf28fb3c87bf91a245dc0f0f6e5b2e)) + ## [1.0.0-dev.2](https://github.com/starkware-libs/starkgate-frontend/compare/v1.0.0-dev.1...v1.0.0-dev.2) (2022-04-04) diff --git a/package.json b/package.json index 8c3bfc20..f282f0f5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.0.0-dev.2", + "version": "1.0.0", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 1e95d330e5a47a4182f77bf7cb1af4d3a39adcbe Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 5 Apr 2022 15:39:22 +0300 Subject: [PATCH 123/211] feat: support more tokens on testnet (#133) --- .env.testing | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env.testing b/.env.testing index 672ed324..719334c4 100644 --- a/.env.testing +++ b/.env.testing @@ -7,4 +7,4 @@ REACT_APP_STARKNET_CONTRACT_ADDRESS=0xde29d060D45901Fb19ED6C6e959EB22d8626708e REACT_APP_ETHERSCAN_URL=https://goerli.etherscan.io REACT_APP_VOYAGER_URL=https://goerli.voyager.online REACT_APP_LOCAL_STORAGE_TRANSFERS_LOG_KEY=STARKGATE_TRANSFERS -REACT_APP_SUPPORTED_TOKENS=ETH +REACT_APP_SUPPORTED_TOKENS=ETH,WBTC,USDC,USDT,DAI,SLF From fb4618b4a0c4171296858e904fcc94b56e04215c Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 5 Apr 2022 15:39:41 +0300 Subject: [PATCH 124/211] fix: when clicking Max button on L2 network 0 is shown instead of max balance (#134) --- CHANGELOG.md | 30 +++++++++----------- src/components/Features/Transfer/Transfer.js | 2 +- 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a0a40f03..3effb881 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,36 +30,32 @@ ## [1.0.0-dev.2](https://github.com/starkware-libs/starkgate-frontend/compare/v1.0.0-dev.1...v1.0.0-dev.2) (2022-04-04) - ### 🔧 Fixes -* empty callback in promise .then ([#127](https://github.com/starkware-libs/starkgate-frontend/issues/127)) ([9d13c3b](https://github.com/starkware-libs/starkgate-frontend/commit/9d13c3bf01090b3f0db2d392ae3747d56fd3c9a5)) +- empty callback in promise .then ([#127](https://github.com/starkware-libs/starkgate-frontend/issues/127)) ([9d13c3b](https://github.com/starkware-libs/starkgate-frontend/commit/9d13c3bf01090b3f0db2d392ae3747d56fd3c9a5)) ## [1.0.0-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v0.0.1...v1.0.0-dev.1) (2022-04-04) - ### ⚠ BREAKING CHANGES -* alpha version (#126) +- alpha version (#126) ### 💉 Improvements -* utils ([#82](https://github.com/starkware-libs/starkgate-frontend/issues/82)) ([c38e56e](https://github.com/starkware-libs/starkgate-frontend/commit/c38e56e1d942b3350e45811a435da22472dcf00e)) - +- utils ([#82](https://github.com/starkware-libs/starkgate-frontend/issues/82)) ([c38e56e](https://github.com/starkware-libs/starkgate-frontend/commit/c38e56e1d942b3350e45811a435da22472dcf00e)) ### 🔧 Fixes -* add missing env poll block number interval ([d364cb4](https://github.com/starkware-libs/starkgate-frontend/commit/d364cb44b8bf1ef62bba3cf08a13cd48c2897c6e)) -* **getTransactionHash:** add fee and version to calculation ([#90](https://github.com/starkware-libs/starkgate-frontend/issues/90)) ([938ffe0](https://github.com/starkware-libs/starkgate-frontend/commit/938ffe079c794409df04982096de22fd6e9d31ad)) -* redux error on switching menu "non-serializable value was detected" ([#89](https://github.com/starkware-libs/starkgate-frontend/issues/89)) ([9dc4972](https://github.com/starkware-libs/starkgate-frontend/commit/9dc49729c9cef14c016be348fe170f084d478843)) -* remove pending transfer toast ([#92](https://github.com/starkware-libs/starkgate-frontend/issues/92)) ([20f51f3](https://github.com/starkware-libs/starkgate-frontend/commit/20f51f3d68bf5d9c8a1212e6442fa5d246fbbeb2)) -* update ETH token addresses and add SLF token ([#84](https://github.com/starkware-libs/starkgate-frontend/issues/84)) ([2c5a9df](https://github.com/starkware-libs/starkgate-frontend/commit/2c5a9df17acf28fb3c87bf91a245dc0f0f6e5b2e)) - +- add missing env poll block number interval ([d364cb4](https://github.com/starkware-libs/starkgate-frontend/commit/d364cb44b8bf1ef62bba3cf08a13cd48c2897c6e)) +- **getTransactionHash:** add fee and version to calculation ([#90](https://github.com/starkware-libs/starkgate-frontend/issues/90)) ([938ffe0](https://github.com/starkware-libs/starkgate-frontend/commit/938ffe079c794409df04982096de22fd6e9d31ad)) +- redux error on switching menu "non-serializable value was detected" ([#89](https://github.com/starkware-libs/starkgate-frontend/issues/89)) ([9dc4972](https://github.com/starkware-libs/starkgate-frontend/commit/9dc49729c9cef14c016be348fe170f084d478843)) +- remove pending transfer toast ([#92](https://github.com/starkware-libs/starkgate-frontend/issues/92)) ([20f51f3](https://github.com/starkware-libs/starkgate-frontend/commit/20f51f3d68bf5d9c8a1212e6442fa5d246fbbeb2)) +- update ETH token addresses and add SLF token ([#84](https://github.com/starkware-libs/starkgate-frontend/issues/84)) ([2c5a9df](https://github.com/starkware-libs/starkgate-frontend/commit/2c5a9df17acf28fb3c87bf91a245dc0f0f6e5b2e)) ### 🧩 Features -* alpha version ([#126](https://github.com/starkware-libs/starkgate-frontend/issues/126)) ([5b15ca0](https://github.com/starkware-libs/starkgate-frontend/commit/5b15ca0b1c87f25beab2f30367384d63503d8ef9)) -* handle browser support ([#96](https://github.com/starkware-libs/starkgate-frontend/issues/96)) ([56d920d](https://github.com/starkware-libs/starkgate-frontend/commit/56d920d46af53e9d60368321435aed86e463063e)) -* remove redux and use providers ([#98](https://github.com/starkware-libs/starkgate-frontend/issues/98)) ([ed38ae4](https://github.com/starkware-libs/starkgate-frontend/commit/ed38ae4925468e7331f974a618f3d4da04773ca8)) -* **toasts:** add link to transfer log ([#79](https://github.com/starkware-libs/starkgate-frontend/issues/79)) ([b743b85](https://github.com/starkware-libs/starkgate-frontend/commit/b743b85be4d573a93e3dbfe1e58fdbd8042a5e61)) -* use blockNumber=pending for balanceOf calls ([#58](https://github.com/starkware-libs/starkgate-frontend/issues/58)) ([9a84b05](https://github.com/starkware-libs/starkgate-frontend/commit/9a84b05142a8ea44e2e2dd0a39aba39f35b327b4)) +- alpha version ([#126](https://github.com/starkware-libs/starkgate-frontend/issues/126)) ([5b15ca0](https://github.com/starkware-libs/starkgate-frontend/commit/5b15ca0b1c87f25beab2f30367384d63503d8ef9)) +- handle browser support ([#96](https://github.com/starkware-libs/starkgate-frontend/issues/96)) ([56d920d](https://github.com/starkware-libs/starkgate-frontend/commit/56d920d46af53e9d60368321435aed86e463063e)) +- remove redux and use providers ([#98](https://github.com/starkware-libs/starkgate-frontend/issues/98)) ([ed38ae4](https://github.com/starkware-libs/starkgate-frontend/commit/ed38ae4925468e7331f974a618f3d4da04773ca8)) +- **toasts:** add link to transfer log ([#79](https://github.com/starkware-libs/starkgate-frontend/issues/79)) ([b743b85](https://github.com/starkware-libs/starkgate-frontend/commit/b743b85be4d573a93e3dbfe1e58fdbd8042a5e61)) +- use blockNumber=pending for balanceOf calls ([#58](https://github.com/starkware-libs/starkgate-frontend/issues/58)) ([9a84b05](https://github.com/starkware-libs/starkgate-frontend/commit/9a84b05142a8ea44e2e2dd0a39aba39f35b327b4)) diff --git a/src/components/Features/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer.js index 6857108e..0fa30c98 100644 --- a/src/components/Features/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer.js @@ -65,7 +65,7 @@ export const Transfer = () => { const onMaxClick = () => { try { track(TrackEvent.TRANSFER.MAX_CLICK); - setAmount(String(Math.min(selectedToken.balance, Number(maxDeposit)))); + setAmount(String(Math.min(selectedToken.balance, isL1 ? Number(maxDeposit) : Infinity))); } catch (ex) { setAmount(selectedToken.balance); } From e8848f883eeab3d8029ce390d9623987c99add76 Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Tue, 5 Apr 2022 12:41:27 +0000 Subject: [PATCH 125/211] prerelease: v1.1.0-dev.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [1.1.0-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.0.0...v1.1.0-dev.1) (2022-04-05) ### 🧩 Features * support more tokens on testnet ([#133](https://github.com/starkware-libs/starkgate-frontend/issues/133)) ([1e95d33](https://github.com/starkware-libs/starkgate-frontend/commit/1e95d330e5a47a4182f77bf7cb1af4d3a39adcbe)) ### 🔧 Fixes * when clicking Max button on L2 network 0 is shown instead of max balance ([#134](https://github.com/starkware-libs/starkgate-frontend/issues/134)) ([fb4618b](https://github.com/starkware-libs/starkgate-frontend/commit/fb4618b4a0c4171296858e904fcc94b56e04215c)) --- CHANGELOG.md | 12 ++++++++++++ package.json | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3effb881..6eb11871 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ +## [1.1.0-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.0.0...v1.1.0-dev.1) (2022-04-05) + + +### 🧩 Features + +* support more tokens on testnet ([#133](https://github.com/starkware-libs/starkgate-frontend/issues/133)) ([1e95d33](https://github.com/starkware-libs/starkgate-frontend/commit/1e95d330e5a47a4182f77bf7cb1af4d3a39adcbe)) + + +### 🔧 Fixes + +* when clicking Max button on L2 network 0 is shown instead of max balance ([#134](https://github.com/starkware-libs/starkgate-frontend/issues/134)) ([fb4618b](https://github.com/starkware-libs/starkgate-frontend/commit/fb4618b4a0c4171296858e904fcc94b56e04215c)) + ## [1.0.0](https://github.com/starkware-libs/starkgate-frontend/compare/v0.0.1...v1.0.0) (2022-04-04) diff --git a/package.json b/package.json index f282f0f5..18f92df9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.0.0", + "version": "1.1.0-dev.1", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From d94b8ea9cec4cf96da3b5fcd7e829b7f4ff5661c Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 5 Apr 2022 22:00:25 +0300 Subject: [PATCH 126/211] fix: invalidation of negative amounts and too many decimal points (#135) --- CHANGELOG.md | 35 +++++++-------- src/__tests__/utils/number.spec.js | 35 +++++++++++++++ src/components/Features/Transfer/Transfer.js | 44 +++++++++++++------ .../Features/Transfer/Transfer.strings.js | 11 ++--- src/config/strings.js | 2 + src/utils/index.js | 2 + src/utils/number.js | 14 ++++++ 7 files changed, 105 insertions(+), 38 deletions(-) create mode 100644 src/__tests__/utils/number.spec.js create mode 100644 src/utils/number.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 6eb11871..8fdca8ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,44 +1,39 @@ ## [1.1.0-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.0.0...v1.1.0-dev.1) (2022-04-05) - ### 🧩 Features -* support more tokens on testnet ([#133](https://github.com/starkware-libs/starkgate-frontend/issues/133)) ([1e95d33](https://github.com/starkware-libs/starkgate-frontend/commit/1e95d330e5a47a4182f77bf7cb1af4d3a39adcbe)) - +- support more tokens on testnet ([#133](https://github.com/starkware-libs/starkgate-frontend/issues/133)) ([1e95d33](https://github.com/starkware-libs/starkgate-frontend/commit/1e95d330e5a47a4182f77bf7cb1af4d3a39adcbe)) ### 🔧 Fixes -* when clicking Max button on L2 network 0 is shown instead of max balance ([#134](https://github.com/starkware-libs/starkgate-frontend/issues/134)) ([fb4618b](https://github.com/starkware-libs/starkgate-frontend/commit/fb4618b4a0c4171296858e904fcc94b56e04215c)) +- when clicking Max button on L2 network 0 is shown instead of max balance ([#134](https://github.com/starkware-libs/starkgate-frontend/issues/134)) ([fb4618b](https://github.com/starkware-libs/starkgate-frontend/commit/fb4618b4a0c4171296858e904fcc94b56e04215c)) ## [1.0.0](https://github.com/starkware-libs/starkgate-frontend/compare/v0.0.1...v1.0.0) (2022-04-04) - ### ⚠ BREAKING CHANGES -* alpha version (#126) +- alpha version (#126) ### 💉 Improvements -* utils ([#82](https://github.com/starkware-libs/starkgate-frontend/issues/82)) ([c38e56e](https://github.com/starkware-libs/starkgate-frontend/commit/c38e56e1d942b3350e45811a435da22472dcf00e)) - +- utils ([#82](https://github.com/starkware-libs/starkgate-frontend/issues/82)) ([c38e56e](https://github.com/starkware-libs/starkgate-frontend/commit/c38e56e1d942b3350e45811a435da22472dcf00e)) ### 🧩 Features -* alpha version ([#126](https://github.com/starkware-libs/starkgate-frontend/issues/126)) ([5b15ca0](https://github.com/starkware-libs/starkgate-frontend/commit/5b15ca0b1c87f25beab2f30367384d63503d8ef9)) -* handle browser support ([#96](https://github.com/starkware-libs/starkgate-frontend/issues/96)) ([56d920d](https://github.com/starkware-libs/starkgate-frontend/commit/56d920d46af53e9d60368321435aed86e463063e)) -* remove redux and use providers ([#98](https://github.com/starkware-libs/starkgate-frontend/issues/98)) ([ed38ae4](https://github.com/starkware-libs/starkgate-frontend/commit/ed38ae4925468e7331f974a618f3d4da04773ca8)) -* **toasts:** add link to transfer log ([#79](https://github.com/starkware-libs/starkgate-frontend/issues/79)) ([b743b85](https://github.com/starkware-libs/starkgate-frontend/commit/b743b85be4d573a93e3dbfe1e58fdbd8042a5e61)) -* use blockNumber=pending for balanceOf calls ([#58](https://github.com/starkware-libs/starkgate-frontend/issues/58)) ([9a84b05](https://github.com/starkware-libs/starkgate-frontend/commit/9a84b05142a8ea44e2e2dd0a39aba39f35b327b4)) - +- alpha version ([#126](https://github.com/starkware-libs/starkgate-frontend/issues/126)) ([5b15ca0](https://github.com/starkware-libs/starkgate-frontend/commit/5b15ca0b1c87f25beab2f30367384d63503d8ef9)) +- handle browser support ([#96](https://github.com/starkware-libs/starkgate-frontend/issues/96)) ([56d920d](https://github.com/starkware-libs/starkgate-frontend/commit/56d920d46af53e9d60368321435aed86e463063e)) +- remove redux and use providers ([#98](https://github.com/starkware-libs/starkgate-frontend/issues/98)) ([ed38ae4](https://github.com/starkware-libs/starkgate-frontend/commit/ed38ae4925468e7331f974a618f3d4da04773ca8)) +- **toasts:** add link to transfer log ([#79](https://github.com/starkware-libs/starkgate-frontend/issues/79)) ([b743b85](https://github.com/starkware-libs/starkgate-frontend/commit/b743b85be4d573a93e3dbfe1e58fdbd8042a5e61)) +- use blockNumber=pending for balanceOf calls ([#58](https://github.com/starkware-libs/starkgate-frontend/issues/58)) ([9a84b05](https://github.com/starkware-libs/starkgate-frontend/commit/9a84b05142a8ea44e2e2dd0a39aba39f35b327b4)) ### 🔧 Fixes -* add missing env poll block number interval ([d364cb4](https://github.com/starkware-libs/starkgate-frontend/commit/d364cb44b8bf1ef62bba3cf08a13cd48c2897c6e)) -* empty callback in promise .then ([#127](https://github.com/starkware-libs/starkgate-frontend/issues/127)) ([9d13c3b](https://github.com/starkware-libs/starkgate-frontend/commit/9d13c3bf01090b3f0db2d392ae3747d56fd3c9a5)) -* **getTransactionHash:** add fee and version to calculation ([#90](https://github.com/starkware-libs/starkgate-frontend/issues/90)) ([938ffe0](https://github.com/starkware-libs/starkgate-frontend/commit/938ffe079c794409df04982096de22fd6e9d31ad)) -* redux error on switching menu "non-serializable value was detected" ([#89](https://github.com/starkware-libs/starkgate-frontend/issues/89)) ([9dc4972](https://github.com/starkware-libs/starkgate-frontend/commit/9dc49729c9cef14c016be348fe170f084d478843)) -* remove pending transfer toast ([#92](https://github.com/starkware-libs/starkgate-frontend/issues/92)) ([20f51f3](https://github.com/starkware-libs/starkgate-frontend/commit/20f51f3d68bf5d9c8a1212e6442fa5d246fbbeb2)) -* update ETH token addresses and add SLF token ([#84](https://github.com/starkware-libs/starkgate-frontend/issues/84)) ([2c5a9df](https://github.com/starkware-libs/starkgate-frontend/commit/2c5a9df17acf28fb3c87bf91a245dc0f0f6e5b2e)) +- add missing env poll block number interval ([d364cb4](https://github.com/starkware-libs/starkgate-frontend/commit/d364cb44b8bf1ef62bba3cf08a13cd48c2897c6e)) +- empty callback in promise .then ([#127](https://github.com/starkware-libs/starkgate-frontend/issues/127)) ([9d13c3b](https://github.com/starkware-libs/starkgate-frontend/commit/9d13c3bf01090b3f0db2d392ae3747d56fd3c9a5)) +- **getTransactionHash:** add fee and version to calculation ([#90](https://github.com/starkware-libs/starkgate-frontend/issues/90)) ([938ffe0](https://github.com/starkware-libs/starkgate-frontend/commit/938ffe079c794409df04982096de22fd6e9d31ad)) +- redux error on switching menu "non-serializable value was detected" ([#89](https://github.com/starkware-libs/starkgate-frontend/issues/89)) ([9dc4972](https://github.com/starkware-libs/starkgate-frontend/commit/9dc49729c9cef14c016be348fe170f084d478843)) +- remove pending transfer toast ([#92](https://github.com/starkware-libs/starkgate-frontend/issues/92)) ([20f51f3](https://github.com/starkware-libs/starkgate-frontend/commit/20f51f3d68bf5d9c8a1212e6442fa5d246fbbeb2)) +- update ETH token addresses and add SLF token ([#84](https://github.com/starkware-libs/starkgate-frontend/issues/84)) ([2c5a9df](https://github.com/starkware-libs/starkgate-frontend/commit/2c5a9df17acf28fb3c87bf91a245dc0f0f6e5b2e)) ## [1.0.0-dev.2](https://github.com/starkware-libs/starkgate-frontend/compare/v1.0.0-dev.1...v1.0.0-dev.2) (2022-04-04) diff --git a/src/__tests__/utils/number.spec.js b/src/__tests__/utils/number.spec.js new file mode 100644 index 00000000..821ebc23 --- /dev/null +++ b/src/__tests__/utils/number.spec.js @@ -0,0 +1,35 @@ +import utils from '../../utils'; + +const {afterDecimal, isNegative, isZero} = utils.number; + +describe('afterDecimal', () => { + it.only('should return number of decimals places', () => { + expect(afterDecimal('')).toEqual(0); + expect(afterDecimal(0)).toEqual(0); + expect(afterDecimal('0')).toEqual(0); + expect(afterDecimal(0.1)).toEqual(1); + expect(afterDecimal('0.1')).toEqual(1); + expect(afterDecimal(0.00001)).toEqual(5); + expect(afterDecimal('0.00000001')).toEqual(8); + }); +}); + +describe('isZero', () => { + it('should return true for zero numbers', () => { + expect(isZero(0.0)).toBeTruthy(); + expect(isZero(-0.0)).toBeTruthy(); + expect(isZero(0)).toBeTruthy(); + expect(isZero('0')).toBeTruthy(); + expect(isZero(0.1)).toBeFalsy(); + expect(isZero(0.000001)).toBeFalsy(); + }); +}); + +describe('isNegative', () => { + it('should return true for negative numbers', () => { + expect(isNegative(0)).toBeFalsy(); + expect(isNegative(-1)).toBeTruthy(); + expect(isNegative(-0.1)).toBeTruthy(); + expect(isNegative('-0.1')).toBeTruthy(); + }); +}); diff --git a/src/components/Features/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer.js index 0fa30c98..b1619c3a 100644 --- a/src/components/Features/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer.js @@ -6,6 +6,7 @@ import {useMaxDeposit, useTransferToL1, useTransferToL2} from '../../../hooks'; import {useMenu} from '../../../providers/MenuProvider'; import {useL1Token, useL2Token, useTokens} from '../../../providers/TokensProvider'; import {useAmount, useIsL1, useIsL2, useTransfer} from '../../../providers/TransferProvider'; +import utils from '../../../utils'; import { Loading, Menu, @@ -17,7 +18,12 @@ import { } from '../../UI'; import {LoadingSize} from '../../UI/Loading/Loading.enums'; import styles from './Transfer.module.scss'; -import {INSUFFICIENT_BALANCE_ERROR_MSG, MAX_DEPOSIT_ERROR_MSG} from './Transfer.strings'; +import { + INSUFFICIENT_BALANCE_ERROR_MSG, + MAX_DEPOSIT_ERROR_MSG, + NEGATIVE_VALUE_ERROR_MSG, + TOO_MANY_DIGITS_ERROR_MSG +} from './Transfer.strings'; export const Transfer = () => { const [isL1, swapToL1] = useIsL1(); @@ -44,24 +50,36 @@ export const Transfer = () => { useEffect(() => { if (selectedToken) { setHasInputError(false); - if (selectedToken.isLoading || Math.ceil(amount) === 0 || (isL1 && !maxDeposit)) { + if (selectedToken.isLoading || utils.number.isZero(amount) || (isL1 && !maxDeposit)) { setIsButtonDisabled(true); } else { - if (amount > selectedToken.balance) { - setHasInputError(true); - setErrorMsg(INSUFFICIENT_BALANCE_ERROR_MSG); - setIsButtonDisabled(true); - } else if (isL1 && amount > maxDeposit) { - setHasInputError(true); - setErrorMsg(MAX_DEPOSIT_ERROR_MSG); - setIsButtonDisabled(true); - } else { - setIsButtonDisabled(false); - } + validateAmount(); } } }, [amount, selectedToken, maxDeposit, isL1]); + const validateAmount = () => { + let errorMsg = ''; + + if (utils.number.afterDecimal(amount) > selectedToken.decimals) { + errorMsg = TOO_MANY_DIGITS_ERROR_MSG; + } else if (utils.number.isNegative(amount)) { + errorMsg = NEGATIVE_VALUE_ERROR_MSG; + } else if (amount > selectedToken.balance) { + errorMsg = INSUFFICIENT_BALANCE_ERROR_MSG; + } else if (isL1 && amount > maxDeposit) { + errorMsg = MAX_DEPOSIT_ERROR_MSG; + } + + if (errorMsg) { + setHasInputError(true); + setErrorMsg(errorMsg); + setIsButtonDisabled(true); + } else { + setIsButtonDisabled(false); + } + }; + const onMaxClick = () => { try { track(TrackEvent.TRANSFER.MAX_CLICK); diff --git a/src/components/Features/Transfer/Transfer.strings.js b/src/components/Features/Transfer/Transfer.strings.js index 2fad1fc4..2f6b47df 100644 --- a/src/components/Features/Transfer/Transfer.strings.js +++ b/src/components/Features/Transfer/Transfer.strings.js @@ -1,7 +1,8 @@ import utils from '../../../utils'; -export const INSUFFICIENT_BALANCE_ERROR_MSG = utils.getTranslation( - 'menus.transfer.insufficient_balance_error_msg' -); - -export const MAX_DEPOSIT_ERROR_MSG = utils.getTranslation('menus.transfer.max_deposit_error_msg'); +export const { + insufficient_balance_error_msg: INSUFFICIENT_BALANCE_ERROR_MSG, + max_deposit_error_msg: MAX_DEPOSIT_ERROR_MSG, + too_many_digits_error_msg: TOO_MANY_DIGITS_ERROR_MSG, + negative_value_error_msg: NEGATIVE_VALUE_ERROR_MSG +} = utils.getTranslation('menus.transfer'); diff --git a/src/config/strings.js b/src/config/strings.js index ddda9cb8..b873e46a 100644 --- a/src/config/strings.js +++ b/src/config/strings.js @@ -41,6 +41,8 @@ const strings = { transfer: { to_txt: 'to', from_txt: 'from', + negative_value_error_msg: 'Amount must be a positive number', + too_many_digits_error_msg: 'Too many decimal places', insufficient_balance_error_msg: 'Insufficient balance', max_deposit_error_msg: 'You have exceeded the maximum transfer amount. Please reduce the amount and try again.', diff --git a/src/utils/index.js b/src/utils/index.js index b60be0cd..ba82514f 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -3,6 +3,7 @@ import * as blockchain from './blockchain'; import * as browser from './browser'; import * as date from './date'; import * as logger from './logger'; +import * as number from './number'; import * as object from './object'; import * as parser from './parser'; import * as storage from './storage'; @@ -32,6 +33,7 @@ const utils = { blockchain, logger, storage, + number, printPackageInfo, getTranslation }; diff --git a/src/utils/number.js b/src/utils/number.js new file mode 100644 index 00000000..92ced3df --- /dev/null +++ b/src/utils/number.js @@ -0,0 +1,14 @@ +export const afterDecimal = num => { + if (Number.isInteger(Number(num))) { + return 0; + } + return num.toString().split('.')[1]?.length; +}; + +export const isZero = num => { + return Math.sign(num) === 0; +}; + +export const isNegative = num => { + return Math.sign(num) === -1; +}; From 96bce1aea3b703a9385741acde41b4043f91dc0b Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Tue, 5 Apr 2022 19:02:12 +0000 Subject: [PATCH 127/211] prerelease: v1.1.0-dev.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [1.1.0-dev.2](https://github.com/starkware-libs/starkgate-frontend/compare/v1.1.0-dev.1...v1.1.0-dev.2) (2022-04-05) ### 🔧 Fixes * invalidation of negative amounts and too many decimal points ([#135](https://github.com/starkware-libs/starkgate-frontend/issues/135)) ([d94b8ea](https://github.com/starkware-libs/starkgate-frontend/commit/d94b8ea9cec4cf96da3b5fcd7e829b7f4ff5661c)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8fdca8ac..6582cebd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [1.1.0-dev.2](https://github.com/starkware-libs/starkgate-frontend/compare/v1.1.0-dev.1...v1.1.0-dev.2) (2022-04-05) + + +### 🔧 Fixes + +* invalidation of negative amounts and too many decimal points ([#135](https://github.com/starkware-libs/starkgate-frontend/issues/135)) ([d94b8ea](https://github.com/starkware-libs/starkgate-frontend/commit/d94b8ea9cec4cf96da3b5fcd7e829b7f4ff5661c)) + ## [1.1.0-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.0.0...v1.1.0-dev.1) (2022-04-05) ### 🧩 Features diff --git a/package.json b/package.json index 18f92df9..29cec291 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.1.0-dev.1", + "version": "1.1.0-dev.2", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From ee43011cdd372a742e20d618a89066edaf24043a Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Wed, 6 Apr 2022 01:30:04 +0300 Subject: [PATCH 128/211] chore(prettier): ignore CHANGELOG.md --- .prettierignore | 1 + CHANGELOG.md | 56 ++++++++++++++++++++++++------------------------- 2 files changed, 29 insertions(+), 28 deletions(-) diff --git a/.prettierignore b/.prettierignore index e3fbd983..ae4d63a5 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,2 +1,3 @@ build node_modules +CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 6582cebd..c86222eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,67 +9,67 @@ ### 🧩 Features -- support more tokens on testnet ([#133](https://github.com/starkware-libs/starkgate-frontend/issues/133)) ([1e95d33](https://github.com/starkware-libs/starkgate-frontend/commit/1e95d330e5a47a4182f77bf7cb1af4d3a39adcbe)) +* support more tokens on testnet ([#133](https://github.com/starkware-libs/starkgate-frontend/issues/133)) ([1e95d33](https://github.com/starkware-libs/starkgate-frontend/commit/1e95d330e5a47a4182f77bf7cb1af4d3a39adcbe)) ### 🔧 Fixes -- when clicking Max button on L2 network 0 is shown instead of max balance ([#134](https://github.com/starkware-libs/starkgate-frontend/issues/134)) ([fb4618b](https://github.com/starkware-libs/starkgate-frontend/commit/fb4618b4a0c4171296858e904fcc94b56e04215c)) +* when clicking Max button on L2 network 0 is shown instead of max balance ([#134](https://github.com/starkware-libs/starkgate-frontend/issues/134)) ([fb4618b](https://github.com/starkware-libs/starkgate-frontend/commit/fb4618b4a0c4171296858e904fcc94b56e04215c)) ## [1.0.0](https://github.com/starkware-libs/starkgate-frontend/compare/v0.0.1...v1.0.0) (2022-04-04) ### ⚠ BREAKING CHANGES -- alpha version (#126) +* alpha version (#126) ### 💉 Improvements -- utils ([#82](https://github.com/starkware-libs/starkgate-frontend/issues/82)) ([c38e56e](https://github.com/starkware-libs/starkgate-frontend/commit/c38e56e1d942b3350e45811a435da22472dcf00e)) +* utils ([#82](https://github.com/starkware-libs/starkgate-frontend/issues/82)) ([c38e56e](https://github.com/starkware-libs/starkgate-frontend/commit/c38e56e1d942b3350e45811a435da22472dcf00e)) ### 🧩 Features -- alpha version ([#126](https://github.com/starkware-libs/starkgate-frontend/issues/126)) ([5b15ca0](https://github.com/starkware-libs/starkgate-frontend/commit/5b15ca0b1c87f25beab2f30367384d63503d8ef9)) -- handle browser support ([#96](https://github.com/starkware-libs/starkgate-frontend/issues/96)) ([56d920d](https://github.com/starkware-libs/starkgate-frontend/commit/56d920d46af53e9d60368321435aed86e463063e)) -- remove redux and use providers ([#98](https://github.com/starkware-libs/starkgate-frontend/issues/98)) ([ed38ae4](https://github.com/starkware-libs/starkgate-frontend/commit/ed38ae4925468e7331f974a618f3d4da04773ca8)) -- **toasts:** add link to transfer log ([#79](https://github.com/starkware-libs/starkgate-frontend/issues/79)) ([b743b85](https://github.com/starkware-libs/starkgate-frontend/commit/b743b85be4d573a93e3dbfe1e58fdbd8042a5e61)) -- use blockNumber=pending for balanceOf calls ([#58](https://github.com/starkware-libs/starkgate-frontend/issues/58)) ([9a84b05](https://github.com/starkware-libs/starkgate-frontend/commit/9a84b05142a8ea44e2e2dd0a39aba39f35b327b4)) +* alpha version ([#126](https://github.com/starkware-libs/starkgate-frontend/issues/126)) ([5b15ca0](https://github.com/starkware-libs/starkgate-frontend/commit/5b15ca0b1c87f25beab2f30367384d63503d8ef9)) +* handle browser support ([#96](https://github.com/starkware-libs/starkgate-frontend/issues/96)) ([56d920d](https://github.com/starkware-libs/starkgate-frontend/commit/56d920d46af53e9d60368321435aed86e463063e)) +* remove redux and use providers ([#98](https://github.com/starkware-libs/starkgate-frontend/issues/98)) ([ed38ae4](https://github.com/starkware-libs/starkgate-frontend/commit/ed38ae4925468e7331f974a618f3d4da04773ca8)) +* **toasts:** add link to transfer log ([#79](https://github.com/starkware-libs/starkgate-frontend/issues/79)) ([b743b85](https://github.com/starkware-libs/starkgate-frontend/commit/b743b85be4d573a93e3dbfe1e58fdbd8042a5e61)) +* use blockNumber=pending for balanceOf calls ([#58](https://github.com/starkware-libs/starkgate-frontend/issues/58)) ([9a84b05](https://github.com/starkware-libs/starkgate-frontend/commit/9a84b05142a8ea44e2e2dd0a39aba39f35b327b4)) ### 🔧 Fixes -- add missing env poll block number interval ([d364cb4](https://github.com/starkware-libs/starkgate-frontend/commit/d364cb44b8bf1ef62bba3cf08a13cd48c2897c6e)) -- empty callback in promise .then ([#127](https://github.com/starkware-libs/starkgate-frontend/issues/127)) ([9d13c3b](https://github.com/starkware-libs/starkgate-frontend/commit/9d13c3bf01090b3f0db2d392ae3747d56fd3c9a5)) -- **getTransactionHash:** add fee and version to calculation ([#90](https://github.com/starkware-libs/starkgate-frontend/issues/90)) ([938ffe0](https://github.com/starkware-libs/starkgate-frontend/commit/938ffe079c794409df04982096de22fd6e9d31ad)) -- redux error on switching menu "non-serializable value was detected" ([#89](https://github.com/starkware-libs/starkgate-frontend/issues/89)) ([9dc4972](https://github.com/starkware-libs/starkgate-frontend/commit/9dc49729c9cef14c016be348fe170f084d478843)) -- remove pending transfer toast ([#92](https://github.com/starkware-libs/starkgate-frontend/issues/92)) ([20f51f3](https://github.com/starkware-libs/starkgate-frontend/commit/20f51f3d68bf5d9c8a1212e6442fa5d246fbbeb2)) -- update ETH token addresses and add SLF token ([#84](https://github.com/starkware-libs/starkgate-frontend/issues/84)) ([2c5a9df](https://github.com/starkware-libs/starkgate-frontend/commit/2c5a9df17acf28fb3c87bf91a245dc0f0f6e5b2e)) +* add missing env poll block number interval ([d364cb4](https://github.com/starkware-libs/starkgate-frontend/commit/d364cb44b8bf1ef62bba3cf08a13cd48c2897c6e)) +* empty callback in promise .then ([#127](https://github.com/starkware-libs/starkgate-frontend/issues/127)) ([9d13c3b](https://github.com/starkware-libs/starkgate-frontend/commit/9d13c3bf01090b3f0db2d392ae3747d56fd3c9a5)) +* **getTransactionHash:** add fee and version to calculation ([#90](https://github.com/starkware-libs/starkgate-frontend/issues/90)) ([938ffe0](https://github.com/starkware-libs/starkgate-frontend/commit/938ffe079c794409df04982096de22fd6e9d31ad)) +* redux error on switching menu "non-serializable value was detected" ([#89](https://github.com/starkware-libs/starkgate-frontend/issues/89)) ([9dc4972](https://github.com/starkware-libs/starkgate-frontend/commit/9dc49729c9cef14c016be348fe170f084d478843)) +* remove pending transfer toast ([#92](https://github.com/starkware-libs/starkgate-frontend/issues/92)) ([20f51f3](https://github.com/starkware-libs/starkgate-frontend/commit/20f51f3d68bf5d9c8a1212e6442fa5d246fbbeb2)) +* update ETH token addresses and add SLF token ([#84](https://github.com/starkware-libs/starkgate-frontend/issues/84)) ([2c5a9df](https://github.com/starkware-libs/starkgate-frontend/commit/2c5a9df17acf28fb3c87bf91a245dc0f0f6e5b2e)) ## [1.0.0-dev.2](https://github.com/starkware-libs/starkgate-frontend/compare/v1.0.0-dev.1...v1.0.0-dev.2) (2022-04-04) ### 🔧 Fixes -- empty callback in promise .then ([#127](https://github.com/starkware-libs/starkgate-frontend/issues/127)) ([9d13c3b](https://github.com/starkware-libs/starkgate-frontend/commit/9d13c3bf01090b3f0db2d392ae3747d56fd3c9a5)) +* empty callback in promise .then ([#127](https://github.com/starkware-libs/starkgate-frontend/issues/127)) ([9d13c3b](https://github.com/starkware-libs/starkgate-frontend/commit/9d13c3bf01090b3f0db2d392ae3747d56fd3c9a5)) ## [1.0.0-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v0.0.1...v1.0.0-dev.1) (2022-04-04) ### ⚠ BREAKING CHANGES -- alpha version (#126) +* alpha version (#126) ### 💉 Improvements -- utils ([#82](https://github.com/starkware-libs/starkgate-frontend/issues/82)) ([c38e56e](https://github.com/starkware-libs/starkgate-frontend/commit/c38e56e1d942b3350e45811a435da22472dcf00e)) +* utils ([#82](https://github.com/starkware-libs/starkgate-frontend/issues/82)) ([c38e56e](https://github.com/starkware-libs/starkgate-frontend/commit/c38e56e1d942b3350e45811a435da22472dcf00e)) ### 🔧 Fixes -- add missing env poll block number interval ([d364cb4](https://github.com/starkware-libs/starkgate-frontend/commit/d364cb44b8bf1ef62bba3cf08a13cd48c2897c6e)) -- **getTransactionHash:** add fee and version to calculation ([#90](https://github.com/starkware-libs/starkgate-frontend/issues/90)) ([938ffe0](https://github.com/starkware-libs/starkgate-frontend/commit/938ffe079c794409df04982096de22fd6e9d31ad)) -- redux error on switching menu "non-serializable value was detected" ([#89](https://github.com/starkware-libs/starkgate-frontend/issues/89)) ([9dc4972](https://github.com/starkware-libs/starkgate-frontend/commit/9dc49729c9cef14c016be348fe170f084d478843)) -- remove pending transfer toast ([#92](https://github.com/starkware-libs/starkgate-frontend/issues/92)) ([20f51f3](https://github.com/starkware-libs/starkgate-frontend/commit/20f51f3d68bf5d9c8a1212e6442fa5d246fbbeb2)) -- update ETH token addresses and add SLF token ([#84](https://github.com/starkware-libs/starkgate-frontend/issues/84)) ([2c5a9df](https://github.com/starkware-libs/starkgate-frontend/commit/2c5a9df17acf28fb3c87bf91a245dc0f0f6e5b2e)) +* add missing env poll block number interval ([d364cb4](https://github.com/starkware-libs/starkgate-frontend/commit/d364cb44b8bf1ef62bba3cf08a13cd48c2897c6e)) +* **getTransactionHash:** add fee and version to calculation ([#90](https://github.com/starkware-libs/starkgate-frontend/issues/90)) ([938ffe0](https://github.com/starkware-libs/starkgate-frontend/commit/938ffe079c794409df04982096de22fd6e9d31ad)) +* redux error on switching menu "non-serializable value was detected" ([#89](https://github.com/starkware-libs/starkgate-frontend/issues/89)) ([9dc4972](https://github.com/starkware-libs/starkgate-frontend/commit/9dc49729c9cef14c016be348fe170f084d478843)) +* remove pending transfer toast ([#92](https://github.com/starkware-libs/starkgate-frontend/issues/92)) ([20f51f3](https://github.com/starkware-libs/starkgate-frontend/commit/20f51f3d68bf5d9c8a1212e6442fa5d246fbbeb2)) +* update ETH token addresses and add SLF token ([#84](https://github.com/starkware-libs/starkgate-frontend/issues/84)) ([2c5a9df](https://github.com/starkware-libs/starkgate-frontend/commit/2c5a9df17acf28fb3c87bf91a245dc0f0f6e5b2e)) ### 🧩 Features -- alpha version ([#126](https://github.com/starkware-libs/starkgate-frontend/issues/126)) ([5b15ca0](https://github.com/starkware-libs/starkgate-frontend/commit/5b15ca0b1c87f25beab2f30367384d63503d8ef9)) -- handle browser support ([#96](https://github.com/starkware-libs/starkgate-frontend/issues/96)) ([56d920d](https://github.com/starkware-libs/starkgate-frontend/commit/56d920d46af53e9d60368321435aed86e463063e)) -- remove redux and use providers ([#98](https://github.com/starkware-libs/starkgate-frontend/issues/98)) ([ed38ae4](https://github.com/starkware-libs/starkgate-frontend/commit/ed38ae4925468e7331f974a618f3d4da04773ca8)) -- **toasts:** add link to transfer log ([#79](https://github.com/starkware-libs/starkgate-frontend/issues/79)) ([b743b85](https://github.com/starkware-libs/starkgate-frontend/commit/b743b85be4d573a93e3dbfe1e58fdbd8042a5e61)) -- use blockNumber=pending for balanceOf calls ([#58](https://github.com/starkware-libs/starkgate-frontend/issues/58)) ([9a84b05](https://github.com/starkware-libs/starkgate-frontend/commit/9a84b05142a8ea44e2e2dd0a39aba39f35b327b4)) +* alpha version ([#126](https://github.com/starkware-libs/starkgate-frontend/issues/126)) ([5b15ca0](https://github.com/starkware-libs/starkgate-frontend/commit/5b15ca0b1c87f25beab2f30367384d63503d8ef9)) +* handle browser support ([#96](https://github.com/starkware-libs/starkgate-frontend/issues/96)) ([56d920d](https://github.com/starkware-libs/starkgate-frontend/commit/56d920d46af53e9d60368321435aed86e463063e)) +* remove redux and use providers ([#98](https://github.com/starkware-libs/starkgate-frontend/issues/98)) ([ed38ae4](https://github.com/starkware-libs/starkgate-frontend/commit/ed38ae4925468e7331f974a618f3d4da04773ca8)) +* **toasts:** add link to transfer log ([#79](https://github.com/starkware-libs/starkgate-frontend/issues/79)) ([b743b85](https://github.com/starkware-libs/starkgate-frontend/commit/b743b85be4d573a93e3dbfe1e58fdbd8042a5e61)) +* use blockNumber=pending for balanceOf calls ([#58](https://github.com/starkware-libs/starkgate-frontend/issues/58)) ([9a84b05](https://github.com/starkware-libs/starkgate-frontend/commit/9a84b05142a8ea44e2e2dd0a39aba39f35b327b4)) From c45d6016dafefc8ff2a84738497f712f2cf1f654 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Wed, 6 Apr 2022 12:17:05 +0300 Subject: [PATCH 129/211] chore: fix reference to bridge address for WBTC --- src/config/tokens.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config/tokens.js b/src/config/tokens.js index 75b740ae..9250aaae 100644 --- a/src/config/tokens.js +++ b/src/config/tokens.js @@ -15,7 +15,7 @@ const l1tokens = [ symbol: 'WBTC', decimals: 8, bridgeAddress: { - [ChainType.MAIN]: '', + [ChainType.L1.MAIN]: '', [ChainType.L1.GOERLI]: '0xf29aE3446Ce4688fCc792b232C21D1B9581E7baC' }, tokenAddress: { From 96d6b240d0e6ec6e82b5cb3b418c7b1478541e09 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Wed, 6 Apr 2022 19:53:39 +0300 Subject: [PATCH 130/211] fix: new event driven implementation for deposit and withdraw (#139) --- src/abis/l1/StarknetERC20Bridge.json | 214 +++++++++++++----- src/abis/l1/StarknetEthBridge.json | 214 +++++++++++++----- src/hooks/useTransferToL1.js | 10 +- src/hooks/useTransferToL2.js | 33 +-- .../EventManagerProvider.js | 126 ++++------- .../event-manager-context.js | 3 +- .../event-manager-hooks.js | 27 ++- 7 files changed, 403 insertions(+), 224 deletions(-) diff --git a/src/abis/l1/StarknetERC20Bridge.json b/src/abis/l1/StarknetERC20Bridge.json index b371dbcd..6966aab7 100644 --- a/src/abis/l1/StarknetERC20Bridge.json +++ b/src/abis/l1/StarknetERC20Bridge.json @@ -2,8 +2,33 @@ { "anonymous": false, "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, { "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + } + ], + "name": "LogDeposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, "internalType": "address", "name": "sender", "type": "address" @@ -14,14 +39,51 @@ "name": "amount", "type": "uint256" }, + { + "indexed": true, + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "name": "LogDepositCancelRequest", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, { "indexed": false, "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", "name": "l2Recipient", "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "nonce", + "type": "uint256" } ], - "name": "LogDeposit", + "name": "LogDepositReclaimed", "type": "event" }, { @@ -112,7 +174,7 @@ "anonymous": false, "inputs": [ { - "indexed": false, + "indexed": true, "internalType": "address", "name": "recipient", "type": "address" @@ -127,6 +189,20 @@ "name": "LogWithdrawal", "type": "event" }, + { + "inputs": [], + "name": "acceptGovernance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "cancelNomination", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -145,6 +221,52 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "name": "depositCancelRequest", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "name": "depositReclaim", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -171,6 +293,25 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "testGovernor", + "type": "address" + } + ], + "name": "isGovernor", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "maxDeposit", @@ -200,12 +341,12 @@ { "inputs": [ { - "internalType": "uint256", - "name": "l2TokenBridge_", - "type": "uint256" + "internalType": "address", + "name": "newGovernor", + "type": "address" } ], - "name": "setL2TokenBridge", + "name": "nominateNewGovernor", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -213,12 +354,12 @@ { "inputs": [ { - "internalType": "uint256", - "name": "maxDeposit_", - "type": "uint256" + "internalType": "address", + "name": "governorForRemoval", + "type": "address" } ], - "name": "setMaxDeposit", + "name": "removeGovernor", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -227,25 +368,11 @@ "inputs": [ { "internalType": "uint256", - "name": "maxTotalBalance_", + "name": "l2TokenBridge_", "type": "uint256" } ], - "name": "setMaxTotalBalance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "starknetAcceptGovernance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "starknetCancelNomination", + "name": "setL2TokenBridge", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -253,31 +380,12 @@ { "inputs": [ { - "internalType": "address", - "name": "testGovernor", - "type": "address" - } - ], - "name": "starknetIsGovernor", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newGovernor", - "type": "address" + "internalType": "uint256", + "name": "maxDeposit_", + "type": "uint256" } ], - "name": "starknetNominateNewGovernor", + "name": "setMaxDeposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -285,12 +393,12 @@ { "inputs": [ { - "internalType": "address", - "name": "governorForRemoval", - "type": "address" + "internalType": "uint256", + "name": "maxTotalBalance_", + "type": "uint256" } ], - "name": "starknetRemoveGovernor", + "name": "setMaxTotalBalance", "outputs": [], "stateMutability": "nonpayable", "type": "function" diff --git a/src/abis/l1/StarknetEthBridge.json b/src/abis/l1/StarknetEthBridge.json index 198423a3..4c66fe47 100644 --- a/src/abis/l1/StarknetEthBridge.json +++ b/src/abis/l1/StarknetEthBridge.json @@ -2,8 +2,33 @@ { "anonymous": false, "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, { "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + } + ], + "name": "LogDeposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, "internalType": "address", "name": "sender", "type": "address" @@ -14,14 +39,51 @@ "name": "amount", "type": "uint256" }, + { + "indexed": true, + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "name": "LogDepositCancelRequest", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, { "indexed": false, "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", "name": "l2Recipient", "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "nonce", + "type": "uint256" } ], - "name": "LogDeposit", + "name": "LogDepositReclaimed", "type": "event" }, { @@ -112,7 +174,7 @@ "anonymous": false, "inputs": [ { - "indexed": false, + "indexed": true, "internalType": "address", "name": "recipient", "type": "address" @@ -127,6 +189,20 @@ "name": "LogWithdrawal", "type": "event" }, + { + "inputs": [], + "name": "acceptGovernance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "cancelNomination", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -140,6 +216,52 @@ "stateMutability": "payable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "name": "depositCancelRequest", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "name": "depositReclaim", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -166,6 +288,25 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "testGovernor", + "type": "address" + } + ], + "name": "isGovernor", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "maxDeposit", @@ -195,12 +336,12 @@ { "inputs": [ { - "internalType": "uint256", - "name": "l2TokenBridge_", - "type": "uint256" + "internalType": "address", + "name": "newGovernor", + "type": "address" } ], - "name": "setL2TokenBridge", + "name": "nominateNewGovernor", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -208,12 +349,12 @@ { "inputs": [ { - "internalType": "uint256", - "name": "maxDeposit_", - "type": "uint256" + "internalType": "address", + "name": "governorForRemoval", + "type": "address" } ], - "name": "setMaxDeposit", + "name": "removeGovernor", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -222,25 +363,11 @@ "inputs": [ { "internalType": "uint256", - "name": "maxTotalBalance_", + "name": "l2TokenBridge_", "type": "uint256" } ], - "name": "setMaxTotalBalance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "starknetAcceptGovernance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "starknetCancelNomination", + "name": "setL2TokenBridge", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -248,31 +375,12 @@ { "inputs": [ { - "internalType": "address", - "name": "testGovernor", - "type": "address" - } - ], - "name": "starknetIsGovernor", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newGovernor", - "type": "address" + "internalType": "uint256", + "name": "maxDeposit_", + "type": "uint256" } ], - "name": "starknetNominateNewGovernor", + "name": "setMaxDeposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -280,12 +388,12 @@ { "inputs": [ { - "internalType": "address", - "name": "governorForRemoval", - "type": "address" + "internalType": "uint256", + "name": "maxTotalBalance_", + "type": "uint256" } ], - "name": "starknetRemoveGovernor", + "name": "setMaxTotalBalance", "outputs": [], "stateMutability": "nonpayable", "type": "function" diff --git a/src/hooks/useTransferToL1.js b/src/hooks/useTransferToL1.js index e26d2613..1e6717c6 100644 --- a/src/hooks/useTransferToL1.js +++ b/src/hooks/useTransferToL1.js @@ -11,7 +11,7 @@ import { TransferStep, TransferToL1Steps } from '../enums'; -import {useLogWithdrawalListener} from '../providers/EventManagerProvider'; +import {useWithdrawalListener} from '../providers/EventManagerProvider'; import {useL1Token} from '../providers/TokensProvider'; import {useSelectedToken} from '../providers/TransferProvider'; import {useL1Wallet, useL2Wallet} from '../providers/WalletsProvider'; @@ -111,7 +111,7 @@ export const useCompleteTransferToL1 = () => { const progressOptions = useTransferProgress(); const getL1Token = useL1Token(); const getL1TokenBridgeContract = useL1TokenBridgeContract(); - const addLogWithdrawalListener = useLogWithdrawalListener(); + const addWithdrawalListener = useWithdrawalListener(); return useCallback( async transfer => { @@ -152,7 +152,7 @@ export const useCompleteTransferToL1 = () => { } }; - const onLogWithdrawal = (error, event) => { + const onWithdrawal = (error, event) => { if (!error) { const {transactionHash: l1hash} = event; logger.log('Done', l1hash); @@ -173,7 +173,7 @@ export const useCompleteTransferToL1 = () => { stepOf(TransferStep.CONFIRM_TX, CompleteTransferToL1Steps) ) ); - addLogWithdrawalListener(onLogWithdrawal); + addWithdrawalListener(onWithdrawal); logger.log('Calling withdraw'); await sendWithdrawal(); } catch (ex) { @@ -192,7 +192,7 @@ export const useCompleteTransferToL1 = () => { handleProgress, logger, progressOptions, - addLogWithdrawalListener + addWithdrawalListener ] ); }; diff --git a/src/hooks/useTransferToL2.js b/src/hooks/useTransferToL2.js index dd1128e3..280e3cbb 100644 --- a/src/hooks/useTransferToL2.js +++ b/src/hooks/useTransferToL2.js @@ -12,7 +12,7 @@ import { TransferToL2Steps } from '../enums'; import {starknet} from '../libs'; -import {useLogMessageToL2Listener} from '../providers/EventManagerProvider'; +import {useDepositListener, useDepositMessageToL2Event} from '../providers/EventManagerProvider'; import {useSelectedToken} from '../providers/TransferProvider'; import {useL1Wallet, useL2Wallet} from '../providers/WalletsProvider'; import utils from '../utils'; @@ -31,7 +31,8 @@ export const useTransferToL2 = () => { const getTokenContract = useTokenContract(); const getTokenBridgeContract = useTokenBridgeContract(); const progressOptions = useTransferProgress(); - const addLogMessageToL2Listener = useLogMessageToL2Listener(); + const addDepositListener = useDepositListener(); + const getDepositMessageToL2Event = useDepositMessageToL2Event(); const maxTotalBalance = useMaxTotalBalance(); return useCallback( @@ -91,18 +92,20 @@ export const useTransferToL2 = () => { } }; - const onLogMessageToL2 = (error, event) => { + const onDeposit = async (error, event) => { if (!error) { - logger.log('Done', event.transactionHash); - handleData({ - type: ActionType.TRANSFER_TO_L2, - sender: l1Account, - recipient: l2Account, - name, - symbol, - amount, - ...extractTransactionsHashFromEvent(event) - }); + const l2MessageEvent = await getDepositMessageToL2Event(event); + if (l2MessageEvent) { + handleData({ + type: ActionType.TRANSFER_TO_L2, + sender: l1Account, + recipient: l2Account, + name, + symbol, + amount, + ...extractTransactionsHashFromEvent(l2MessageEvent) + }); + } } else { track(TrackEvent.TRANSFER.TRANSFER_TO_L2_ERROR, error); logger.error(error.message); @@ -169,7 +172,7 @@ export const useTransferToL2 = () => { stepOf(TransferStep.CONFIRM_TX, TransferToL2Steps) ) ); - addLogMessageToL2Listener(onLogMessageToL2); + addDepositListener(onDeposit); logger.log('Calling deposit'); await sendDeposit(); } catch (ex) { @@ -180,7 +183,7 @@ export const useTransferToL2 = () => { }, [ selectedToken, - addLogMessageToL2Listener, + addDepositListener, l1ChainId, l2ChainId, l1Account, diff --git a/src/providers/EventManagerProvider/EventManagerProvider.js b/src/providers/EventManagerProvider/EventManagerProvider.js index 331c2858..e323a192 100644 --- a/src/providers/EventManagerProvider/EventManagerProvider.js +++ b/src/providers/EventManagerProvider/EventManagerProvider.js @@ -2,44 +2,41 @@ import PropTypes from 'prop-types'; import React, {useEffect} from 'react'; import {EventName, SelectorName} from '../../enums'; -import {useL1TokenBridgeContract, useLogger, useStarknetContract} from '../../hooks'; +import {useL1TokenBridgeContract, useLogger} from '../../hooks'; import {starknet} from '../../libs'; +import {parseToFelt} from '../../utils/parser'; import {useL1Tokens, useL2Tokens} from '../TokensProvider'; import {useL1Wallet, useL2Wallet} from '../WalletsProvider'; import {EventManagerContext} from './event-manager-context'; const listeners = {}; - -const eventsQueue = {}; +const filters = {}; export const EventManagerProvider = ({children}) => { const logger = useLogger(EventManagerProvider.displayName); - const starknetContract = useStarknetContract(); const getTokenBridgeContract = useL1TokenBridgeContract(); - const {account: l1Account, chainId: l1ChainId} = useL1Wallet(); + const {account: l1Account, chainId: l1ChainId, getBlockNumber} = useL1Wallet(); const {account: l2Account, chainId: l2ChainId} = useL2Wallet(); const l1Tokens = useL1Tokens(); const l2Tokens = useL2Tokens(); useEffect(() => { - addLogDepositWithdrawalListeners(); - addLogMessageToL2Listener(); + setEventFilters(); + addDepositWithdrawalListeners(); }, []); const addListener = (eventName, callback) => { logger.log(`Registered to ${eventName} event.`); - if (!listeners[eventName]) { - listeners[eventName] = []; - } + listeners[eventName] = listeners[eventName] || []; listeners[eventName].push(callback); }; - const insertEventToQueue = (eventName, event) => { - logger.log(`Insert event ${eventName} to queue.`); - if (!eventsQueue[eventName]) { - eventsQueue[eventName] = []; - } - eventsQueue[eventName].push(event); + const getPastEvents = (contract, eventName, options = {}) => { + logger.log(`Getting ${eventName} past events.`); + return contract.getPastEvents(eventName, { + filter: filters[eventName], + ...options + }); }; const emitListeners = (eventName, error, event) => { @@ -53,98 +50,54 @@ export const EventManagerProvider = ({children}) => { listeners[eventName] = []; }; - const removeFromQueue = (eventName, index) => { - logger.log(`Remove event ${eventName} at index ${index} from queue.`); - eventsQueue[eventName].splice(index, 1); - }; - - const onLogWithdrawal = (error, event) => { + const onWithdrawal = (error, event) => { logger.log(`Event ${EventName.L1.LOG_WITHDRAWAL} dispatched internal.`, {error, event}); emitListeners(EventName.L1.LOG_WITHDRAWAL, error, event); }; - const onLogDeposit = (error, event) => { + const onDeposit = (error, event) => { logger.log(`Event ${EventName.L1.LOG_DEPOSIT} dispatched internal.`, {error, event}); - const matchedLogMessageToL2EventIndex = eventsQueue[EventName.L1.LOG_MESSAGE_TO_L2]?.findIndex( - e => e.transactionHash === event.transactionHash - ); - logger.log(`Searching matched ${EventName.L1.LOG_MESSAGE_TO_L2} event.`); - if (matchedLogMessageToL2EventIndex > -1) { - logger.log( - `Found matched ${EventName.L1.LOG_MESSAGE_TO_L2} event at index ${matchedLogMessageToL2EventIndex}.`, - eventsQueue - ); - emitListeners(EventName.L1.LOG_DEPOSIT, error, event); - emitListeners( - EventName.L1.LOG_MESSAGE_TO_L2, - error, - eventsQueue[EventName.L1.LOG_MESSAGE_TO_L2][matchedLogMessageToL2EventIndex] - ); - removeFromQueue(EventName.L1.LOG_MESSAGE_TO_L2, matchedLogMessageToL2EventIndex); - } else { - logger.log(`Didn't found matched ${EventName.L1.LOG_MESSAGE_TO_L2} event.`); - insertEventToQueue(EventName.L1.LOG_DEPOSIT, event); - emitListeners(EventName.L1.LOG_DEPOSIT, error, event); - } + emitListeners(EventName.L1.LOG_DEPOSIT, error, event); }; - const onLogMessageToL2 = (error, event) => { - logger.log(`Event ${EventName.L1.LOG_MESSAGE_TO_L2} dispatched internal.`, {error, event}); - const matchedLogDepositEventIndex = eventsQueue[EventName.L1.LOG_DEPOSIT]?.findIndex( - e => e.transactionHash === event.transactionHash - ); - logger.log(`Searching matched ${EventName.L1.LOG_DEPOSIT} event.`); - if (matchedLogDepositEventIndex > -1) { - logger.log( - `Found matched ${EventName.L1.LOG_DEPOSIT} event at index ${matchedLogDepositEventIndex}.` - ); - removeFromQueue(EventName.L1.LOG_DEPOSIT, matchedLogDepositEventIndex); - emitListeners(EventName.L1.LOG_MESSAGE_TO_L2, error, event); - } else { - logger.log(`Didn't found matched ${EventName.L1.LOG_DEPOSIT} event.`); - insertEventToQueue(EventName.L1.LOG_MESSAGE_TO_L2, event); - } - }; - - const addLogDepositWithdrawalListeners = () => { + const addDepositWithdrawalListeners = () => { l1Tokens.forEach(l1Token => { const bridgeContract = getTokenBridgeContract(l1Token.bridgeAddress); logger.log(`Add ${EventName.L1.LOG_DEPOSIT} listener for token ${l1Token.symbol}.`); addContractEventListener( bridgeContract, EventName.L1.LOG_DEPOSIT, - { - sender: l1Account, - l2Recipient: l2Account - }, - onLogDeposit + filters[EventName.L1.LOG_DEPOSIT], + onDeposit ); logger.log(`Add ${EventName.L1.LOG_WITHDRAWAL} listener for token ${l1Token.symbol}.`); addContractEventListener( bridgeContract, EventName.L1.LOG_WITHDRAWAL, - { - recipient: l1Account - }, - onLogWithdrawal + filters[EventName.L1.LOG_WITHDRAWAL], + onWithdrawal ); }); }; - const addLogMessageToL2Listener = () => { - logger.log(`Add ${EventName.L1.LOG_MESSAGE_TO_L2} listener.`); + const setEventFilters = () => { + // LogMessageToL2 filter const l1BridgesAddresses = l1Tokens.map(token => token.bridgeAddress[l1ChainId]); const l2BridgesAddress = l2Tokens.map(token => token.bridgeAddress[l2ChainId]); - addContractEventListener( - starknetContract, - EventName.L1.LOG_MESSAGE_TO_L2, - { - from_address: l1BridgesAddresses, - to_address: l2BridgesAddress, - selector: starknet.hash.getSelectorFromName(SelectorName.HANDLE_DEPOSIT) - }, - onLogMessageToL2 - ); + filters[EventName.L1.LOG_MESSAGE_TO_L2] = { + from_address: l1BridgesAddresses, + to_address: l2BridgesAddress, + selector: starknet.hash.getSelectorFromName(SelectorName.HANDLE_DEPOSIT) + }; + // LogDeposit filter + filters[EventName.L1.LOG_DEPOSIT] = { + sender: l1Account, + l2Recipient: parseToFelt(l2Account).toString() + }; + // LogWithdrawal filter + filters[EventName.L1.LOG_WITHDRAWAL] = { + recipient: l1Account + }; }; const addContractEventListener = (contract, eventName, filter, handler) => { @@ -152,12 +105,13 @@ export const EventManagerProvider = ({children}) => { { filter }, - (error, event) => handler(error, event) + handler ); }; const value = { - addListener + addListener, + getPastEvents }; return <EventManagerContext.Provider value={value}>{children}</EventManagerContext.Provider>; diff --git a/src/providers/EventManagerProvider/event-manager-context.js b/src/providers/EventManagerProvider/event-manager-context.js index 9533c708..a1c700d2 100644 --- a/src/providers/EventManagerProvider/event-manager-context.js +++ b/src/providers/EventManagerProvider/event-manager-context.js @@ -1,5 +1,6 @@ import {createContext} from 'react'; export const EventManagerContext = createContext({ - addListener: (eventName, callback) => ({eventName, callback}) + addListener: (eventName, callback) => ({eventName, callback}), + getPastEvents: async (contract, eventName, options) => ({contract, eventName, options}) }); diff --git a/src/providers/EventManagerProvider/event-manager-hooks.js b/src/providers/EventManagerProvider/event-manager-hooks.js index d9f2337d..67fce439 100644 --- a/src/providers/EventManagerProvider/event-manager-hooks.js +++ b/src/providers/EventManagerProvider/event-manager-hooks.js @@ -1,29 +1,34 @@ import {useCallback, useContext} from 'react'; import {EventName} from '../../enums'; +import {useStarknetContract} from '../../hooks'; import {EventManagerContext} from './event-manager-context'; export const useEventListener = () => { return useContext(EventManagerContext); }; -export const useLogMessageToL2Listener = () => { - const {addListener} = useContext(EventManagerContext); - - return useCallback( - callback => addListener(EventName.L1.LOG_MESSAGE_TO_L2, callback), - [addListener] - ); -}; - -export const useLogDepositListener = () => { +export const useDepositListener = () => { const {addListener} = useContext(EventManagerContext); return useCallback(callback => addListener(EventName.L1.LOG_DEPOSIT, callback), [addListener]); }; -export const useLogWithdrawalListener = () => { +export const useWithdrawalListener = () => { const {addListener} = useContext(EventManagerContext); return useCallback(callback => addListener(EventName.L1.LOG_WITHDRAWAL, callback), [addListener]); }; + +export const useDepositMessageToL2Event = () => { + const {getPastEvents} = useContext(EventManagerContext); + const starknetContract = useStarknetContract(); + + return useCallback(async depositEvent => { + const {blockNumber, transactionHash} = depositEvent; + const pastEvents = await getPastEvents(starknetContract, EventName.L1.LOG_MESSAGE_TO_L2, { + fromBlock: blockNumber + }); + return pastEvents.find(e => e.transactionHash === transactionHash); + }, []); +}; From bf4231a287916539771e6a91f07f8d4a2a85e62c Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Wed, 6 Apr 2022 16:55:14 +0000 Subject: [PATCH 131/211] prerelease: v1.1.0-dev.3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [1.1.0-dev.3](https://github.com/starkware-libs/starkgate-frontend/compare/v1.1.0-dev.2...v1.1.0-dev.3) (2022-04-06) ### 🔧 Fixes * new event driven implementation for deposit and withdraw ([#139](https://github.com/starkware-libs/starkgate-frontend/issues/139)) ([96d6b24](https://github.com/starkware-libs/starkgate-frontend/commit/96d6b240d0e6ec6e82b5cb3b418c7b1478541e09)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c86222eb..c298aa0b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [1.1.0-dev.3](https://github.com/starkware-libs/starkgate-frontend/compare/v1.1.0-dev.2...v1.1.0-dev.3) (2022-04-06) + + +### 🔧 Fixes + +* new event driven implementation for deposit and withdraw ([#139](https://github.com/starkware-libs/starkgate-frontend/issues/139)) ([96d6b24](https://github.com/starkware-libs/starkgate-frontend/commit/96d6b240d0e6ec6e82b5cb3b418c7b1478541e09)) + ## [1.1.0-dev.2](https://github.com/starkware-libs/starkgate-frontend/compare/v1.1.0-dev.1...v1.1.0-dev.2) (2022-04-05) diff --git a/package.json b/package.json index 29cec291..eb56d463 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.1.0-dev.2", + "version": "1.1.0-dev.3", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From b071093dd53a09244582263054333dfceba27707 Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Wed, 6 Apr 2022 20:05:13 +0000 Subject: [PATCH 132/211] release: v1.1.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [1.1.0](https://github.com/starkware-libs/starkgate-frontend/compare/v1.0.0...v1.1.0) (2022-04-06) ### 🧩 Features * support more tokens on testnet ([#133](https://github.com/starkware-libs/starkgate-frontend/issues/133)) ([1e95d33](https://github.com/starkware-libs/starkgate-frontend/commit/1e95d330e5a47a4182f77bf7cb1af4d3a39adcbe)) ### 🔧 Fixes * invalidation of negative amounts and too many decimal points ([#135](https://github.com/starkware-libs/starkgate-frontend/issues/135)) ([d94b8ea](https://github.com/starkware-libs/starkgate-frontend/commit/d94b8ea9cec4cf96da3b5fcd7e829b7f4ff5661c)) * new event driven implementation for deposit and withdraw ([#139](https://github.com/starkware-libs/starkgate-frontend/issues/139)) ([96d6b24](https://github.com/starkware-libs/starkgate-frontend/commit/96d6b240d0e6ec6e82b5cb3b418c7b1478541e09)) * when clicking Max button on L2 network 0 is shown instead of max balance ([#134](https://github.com/starkware-libs/starkgate-frontend/issues/134)) ([fb4618b](https://github.com/starkware-libs/starkgate-frontend/commit/fb4618b4a0c4171296858e904fcc94b56e04215c)) --- CHANGELOG.md | 14 ++++++++++++++ package.json | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c298aa0b..101c09ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,17 @@ +## [1.1.0](https://github.com/starkware-libs/starkgate-frontend/compare/v1.0.0...v1.1.0) (2022-04-06) + + +### 🧩 Features + +* support more tokens on testnet ([#133](https://github.com/starkware-libs/starkgate-frontend/issues/133)) ([1e95d33](https://github.com/starkware-libs/starkgate-frontend/commit/1e95d330e5a47a4182f77bf7cb1af4d3a39adcbe)) + + +### 🔧 Fixes + +* invalidation of negative amounts and too many decimal points ([#135](https://github.com/starkware-libs/starkgate-frontend/issues/135)) ([d94b8ea](https://github.com/starkware-libs/starkgate-frontend/commit/d94b8ea9cec4cf96da3b5fcd7e829b7f4ff5661c)) +* new event driven implementation for deposit and withdraw ([#139](https://github.com/starkware-libs/starkgate-frontend/issues/139)) ([96d6b24](https://github.com/starkware-libs/starkgate-frontend/commit/96d6b240d0e6ec6e82b5cb3b418c7b1478541e09)) +* when clicking Max button on L2 network 0 is shown instead of max balance ([#134](https://github.com/starkware-libs/starkgate-frontend/issues/134)) ([fb4618b](https://github.com/starkware-libs/starkgate-frontend/commit/fb4618b4a0c4171296858e904fcc94b56e04215c)) + ## [1.1.0-dev.3](https://github.com/starkware-libs/starkgate-frontend/compare/v1.1.0-dev.2...v1.1.0-dev.3) (2022-04-06) diff --git a/package.json b/package.json index eb56d463..301e079a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.1.0-dev.3", + "version": "1.1.0", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 8d9fe7957e09c739e1e79801eaf507178854f944 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Mon, 11 Apr 2022 13:24:48 +0300 Subject: [PATCH 133/211] feat: terms of use (#141) --- .env.development | 2 + .env.production | 2 + .env.testing | 2 + package.json | 2 + src/App.js | 43 +- src/App.module.scss | 7 +- src/analytics/track-event.js | 11 +- src/components/Containers/Footer/Footer.js | 4 +- .../Containers/Footer/Footer.module.scss | 12 +- src/components/Containers/Header/Header.js | 31 +- .../Containers/Header/Header.module.scss | 9 +- .../Containers/Header/Header.strings.js | 4 +- src/components/Containers/Main/Main.js | 34 -- .../Containers/Main/Main.module.scss | 5 - src/components/Containers/index.js | 1 - .../Features/Bridge/Bridge.module.scss | 15 - src/components/Features/Faq/Faq.js | 30 - src/components/Features/Faq/Faq.module.scss | 84 --- src/components/Features/Faq/Faq.strings.js | 3 - src/components/Features/index.js | 3 - .../FullScreenContainer.js | 21 + .../FullScreenContainer.module.scss | 49 ++ .../UI/StyledBackground/StyledBackground.js | 40 ++ .../StyledBackground.module.scss | 12 + .../UI/WalletButton/WalletButton.js | 8 +- .../UI/WalletButton/WalletButton.module.scss | 3 +- src/components/UI/index.js | 2 + src/config/envs.js | 4 +- src/config/strings.js | 16 +- src/enums/Breakpoint.js | 8 + src/enums/MenuType.js | 3 +- src/index.js | 11 +- src/index.scss | 11 - src/providers/AppProvider/AppProvider.js | 47 ++ src/providers/AppProvider/app-context.js | 10 + src/providers/AppProvider/app-hooks.js | 17 + src/providers/AppProvider/app-reducer.js | 35 ++ src/providers/AppProvider/index.js | 3 + .../EventManagerProvider.js | 2 +- src/providers/MenuProvider/menu-hooks.js | 1 - src/providers/index.js | 2 + .../Features => routes}/Bridge/Bridge.js | 30 +- src/routes/Bridge/Bridge.module.scss | 26 + src/routes/Faq/Faq.js | 29 + src/routes/Faq/Faq.module.scss | 32 + src/routes/Faq/Faq.strings.js | 5 + .../Login/Login.constants.js | 0 .../Features => routes}/Login/Login.js | 60 +- .../Login/Login.module.scss | 2 +- .../Login/Login.strings.js | 2 +- src/routes/ProtectedRoute.js | 16 + src/routes/Terms/Terms.js | 558 ++++++++++++++++++ src/routes/Terms/Terms.module.scss | 32 + src/routes/Terms/Terms.strings.js | 7 + src/routes/index.js | 5 + src/styles/colors.module.scss | 1 + yarn.lock | 29 + 57 files changed, 1171 insertions(+), 272 deletions(-) delete mode 100644 src/components/Containers/Main/Main.js delete mode 100644 src/components/Containers/Main/Main.module.scss delete mode 100644 src/components/Features/Bridge/Bridge.module.scss delete mode 100644 src/components/Features/Faq/Faq.js delete mode 100644 src/components/Features/Faq/Faq.module.scss delete mode 100644 src/components/Features/Faq/Faq.strings.js create mode 100644 src/components/UI/FullScreenContainer/FullScreenContainer.js create mode 100644 src/components/UI/FullScreenContainer/FullScreenContainer.module.scss create mode 100644 src/components/UI/StyledBackground/StyledBackground.js create mode 100644 src/components/UI/StyledBackground/StyledBackground.module.scss create mode 100644 src/providers/AppProvider/AppProvider.js create mode 100644 src/providers/AppProvider/app-context.js create mode 100644 src/providers/AppProvider/app-hooks.js create mode 100644 src/providers/AppProvider/app-reducer.js create mode 100644 src/providers/AppProvider/index.js rename src/{components/Features => routes}/Bridge/Bridge.js (63%) create mode 100644 src/routes/Bridge/Bridge.module.scss create mode 100644 src/routes/Faq/Faq.js create mode 100644 src/routes/Faq/Faq.module.scss create mode 100644 src/routes/Faq/Faq.strings.js rename src/{components/Features => routes}/Login/Login.constants.js (100%) rename src/{components/Features => routes}/Login/Login.js (71%) rename src/{components/Features => routes}/Login/Login.module.scss (98%) rename src/{components/Features => routes}/Login/Login.strings.js (92%) create mode 100644 src/routes/ProtectedRoute.js create mode 100644 src/routes/Terms/Terms.js create mode 100644 src/routes/Terms/Terms.module.scss create mode 100644 src/routes/Terms/Terms.strings.js create mode 100644 src/routes/index.js diff --git a/.env.development b/.env.development index 991aa28e..ff0c3018 100644 --- a/.env.development +++ b/.env.development @@ -1,3 +1,4 @@ +REACT_APP_URL=https://devnet-goerli.starkgate.starknet.io REACT_APP_AUTO_CONNECT=false # 20 seconds REACT_APP_POLL_BLOCK_NUMBER_INTERVAL=20000 @@ -8,5 +9,6 @@ REACT_APP_ETHERSCAN_URL=https://goerli.etherscan.io REACT_APP_VOYAGER_URL=https://goerli.voyager.online REACT_APP_LOCAL_STORAGE_TRANSFERS_LOG_KEY=STARKGATE_TRANSFERS REACT_APP_LOCAL_STORAGE_ONBOARDING_TIMESTAMP_KEY=STARKGATE_ONBOARDING_TIMESTAMP +REACT_APP_LOCAL_STORAGE_ACCEPT_TERMS=STARKGATE_ACCEPT_TERMS REACT_APP_ONBOARDING_MODAL_TIMEOUT_HRS=24 REACT_APP_SUPPORTED_TOKENS=ETH,WBTC,USDC,USDT,DAI,SLF diff --git a/.env.production b/.env.production index 474b1aa9..6de75808 100644 --- a/.env.production +++ b/.env.production @@ -1,3 +1,4 @@ +REACT_APP_URL=https://starkgate.starknet.io REACT_APP_AUTO_CONNECT=false # 30 seconds REACT_APP_POLL_BLOCK_NUMBER_INTERVAL=30000 @@ -8,5 +9,6 @@ REACT_APP_ETHERSCAN_URL=https://etherscan.io REACT_APP_VOYAGER_URL=https://voyager.online REACT_APP_LOCAL_STORAGE_TRANSFERS_LOG_KEY=STARKGATE_TRANSFERS REACT_APP_LOCAL_STORAGE_ONBOARDING_TIMESTAMP_KEY=STARKGATE_ONBOARDING_TIMESTAMP +REACT_APP_LOCAL_STORAGE_ACCEPT_TERMS=STARKGATE_ACCEPT_TERMS REACT_APP_ONBOARDING_MODAL_TIMEOUT_HRS=24 REACT_APP_SUPPORTED_TOKENS=ETH diff --git a/.env.testing b/.env.testing index 719334c4..daaec135 100644 --- a/.env.testing +++ b/.env.testing @@ -1,3 +1,4 @@ +REACT_APP_URL=https://goerli.starkgate.starknet.io REACT_APP_AUTO_CONNECT=false # 20 seconds REACT_APP_POLL_BLOCK_NUMBER_INTERVAL=20000 @@ -7,4 +8,5 @@ REACT_APP_STARKNET_CONTRACT_ADDRESS=0xde29d060D45901Fb19ED6C6e959EB22d8626708e REACT_APP_ETHERSCAN_URL=https://goerli.etherscan.io REACT_APP_VOYAGER_URL=https://goerli.voyager.online REACT_APP_LOCAL_STORAGE_TRANSFERS_LOG_KEY=STARKGATE_TRANSFERS +REACT_APP_LOCAL_STORAGE_ACCEPT_TERMS=STARKGATE_ACCEPT_TERMS REACT_APP_SUPPORTED_TOKENS=ETH,WBTC,USDC,USDT,DAI,SLF diff --git a/package.json b/package.json index 301e079a..77216893 100644 --- a/package.json +++ b/package.json @@ -65,6 +65,8 @@ "react": "^17.0.2", "react-dom": "^17.0.2", "react-hot-toast": "^2.2.0", + "react-router": "^6.3.0", + "react-router-dom": "6", "react-scripts": "4.0.3", "starknet": "^3.7.0", "use-async-memo": "^1.2.3", diff --git a/src/App.js b/src/App.js index 908ac5f2..98a56252 100644 --- a/src/App.js +++ b/src/App.js @@ -1,12 +1,39 @@ import React from 'react'; +import {Route, Routes, useLocation} from 'react-router-dom'; import styles from './App.module.scss'; -import {Footer, Header, Main} from './components/Containers'; +import {Footer, Header} from './components/Containers'; +import {StyledBackground} from './components/UI'; +import {useApp} from './providers/AppProvider'; +import {Faq, Bridge, Login, ProtectedRoute, Terms} from './routes'; -export const App = () => ( - <div className={styles.app}> - <Header /> - <Main /> - <Footer /> - </div> -); +export const App = () => { + const {isLoggedIn, isAcceptTerms} = useApp(); + const {pathname} = useLocation(); + const informativeRoutes = ['/terms', '/faq']; + + return ( + <div className={styles.app}> + <Header /> + <StyledBackground withLightAccent={!informativeRoutes.includes(pathname)}> + <Routes> + <Route + element={ + <ProtectedRoute + isAllowed={isLoggedIn && isAcceptTerms} + redirectPath={isLoggedIn ? '/terms' : '/login'} + > + <Bridge /> + </ProtectedRoute> + } + path="/" + /> + <Route element={<Terms />} path="/terms" /> + <Route element={<Login />} path="/login" /> + <Route element={<Faq />} path="/faq" /> + </Routes> + </StyledBackground> + <Footer /> + </div> + ); +}; diff --git a/src/App.module.scss b/src/App.module.scss index 5adc9a58..9ea30172 100644 --- a/src/App.module.scss +++ b/src/App.module.scss @@ -1,9 +1,4 @@ .app { - overflow: hidden; - flex-direction: column; display: flex; - background-image: url('assets/img/stars.png'); - background-size: cover; - background-repeat: no-repeat; - background-position: center center; + flex-direction: column; } diff --git a/src/analytics/track-event.js b/src/analytics/track-event.js index 7a676501..32fb9c8a 100644 --- a/src/analytics/track-event.js +++ b/src/analytics/track-event.js @@ -5,7 +5,6 @@ export const TrackEvent = { SELECT_TOKEN_MENU: 'SELECT_TOKEN_MENU', ACCOUNT_MENU: 'ACCOUNT_MENU', TRANSFER_MENU: 'TRANSFER_MENU', - FAQ_MENU: 'FAQ_MENU', /** * Transfer menu @@ -55,6 +54,16 @@ export const TrackEvent = { LOGIN_ERROR: 'LOGIN_SCREEN/login_error' }, + /** + * Terms screen + */ + TERMS_SCREEN: 'TERMS_SCREEN', + TERMS: { + ACCEPT_CLICK: 'TERMS_SCREEN/accept_click' + }, + + FAQ_SCREEN: 'FAQ_SCREEN', + /** * Tabs */ diff --git a/src/components/Containers/Footer/Footer.js b/src/components/Containers/Footer/Footer.js index 8ec7d0ba..f67e92e8 100644 --- a/src/components/Containers/Footer/Footer.js +++ b/src/components/Containers/Footer/Footer.js @@ -10,9 +10,7 @@ export const Footer = () => { return !isMobile(breakpoint) ? ( <footer className={styles.footer}> - <div className={styles.copyright}> - <center>{RIGHTS_TXT}</center> - </div> + <div className={styles.copyright}>{RIGHTS_TXT}</div> </footer> ) : null; }; diff --git a/src/components/Containers/Footer/Footer.module.scss b/src/components/Containers/Footer/Footer.module.scss index 5abb6db2..1d0139cf 100644 --- a/src/components/Containers/Footer/Footer.module.scss +++ b/src/components/Containers/Footer/Footer.module.scss @@ -7,12 +7,20 @@ $copyright-color: $--color-beta; font-size: 13px; height: #{$height}px; border-top: 1px solid transparent; + width: 100%; + display: flex; + justify-content: space-around; + align-items: center; + position: absolute; + bottom: 0; + left: 0; + right: 0; + overflow: hidden; + background: transparent; .copyright { color: $copyright-color; - display: flex; font-size: 12px; line-height: 24px; - margin: auto; } } diff --git a/src/components/Containers/Header/Header.js b/src/components/Containers/Header/Header.js index 41591538..124ffe5e 100644 --- a/src/components/Containers/Header/Header.js +++ b/src/components/Containers/Header/Header.js @@ -1,4 +1,5 @@ import React from 'react'; +import {useNavigate, useLocation} from 'react-router-dom'; import useBreakpoint from 'use-breakpoint'; import {track} from '../../../analytics'; @@ -6,40 +7,59 @@ import {ReactComponent as StarkGateLogo} from '../../../assets/img/starkgate.svg import constants from '../../../config/constants'; import {Breakpoint} from '../../../enums'; import {useColors} from '../../../hooks'; +import {useLogin} from '../../../providers/AppProvider'; import {useMenu} from '../../../providers/MenuProvider'; import {useIsL1, useIsL2} from '../../../providers/TransferProvider'; import {useL1Wallet, useL2Wallet, useWallets} from '../../../providers/WalletsProvider'; import utils from '../../../utils'; import {Tab, WalletButton} from '../../UI'; import styles from './Header.module.scss'; -import {CHAIN_TXT, TAB_DISCORD_TXT, TAB_FAQ_TXT} from './Header.strings'; +import {CHAIN_TXT, TAB_DISCORD_TXT, TAB_FAQ_TXT, TAB_TERMS_TXT} from './Header.strings'; const {DISCORD_LINK_URL} = constants; export const Header = () => { - const {chainName, isConnected} = useWallets(); - const {showAccountMenu, showTransferMenu, showFaqMenu} = useMenu(); + const navigate = useNavigate(); + const {pathname} = useLocation(); + const {chainName} = useWallets(); + const {showAccountMenu, showTransferMenu} = useMenu(); const [, swapToL1] = useIsL1(); const [, swapToL2] = useIsL2(); const {account: l1Account, isConnected: isL1AccountConnected, config: l1Config} = useL1Wallet(); const {account: l2Account, isConnected: isL2AccountConnected, config: l2Config} = useL2Wallet(); const {breakpoint} = useBreakpoint(Breakpoint); const {colorDiscord, colorWhiteOp50} = useColors(); + const {isLoggedIn} = useLogin(); + + const maybeNavigateToIndex = () => { + pathname !== '/' && navigate('/'); + }; const onL2WalletButtonClick = () => { + maybeNavigateToIndex(); swapToL2(); showAccountMenu(); }; const onL1WalletButtonClick = () => { + maybeNavigateToIndex(); swapToL1(); showAccountMenu(); }; const onLogoClick = () => { + maybeNavigateToIndex(); showTransferMenu(); }; + const onTabFaqClick = () => { + navigate('faq', {replace: true}); + }; + + const onTabTermsClick = () => { + navigate('terms', {replace: true}); + }; + const onTabDiscordClick = () => { track(TrackEvent.DISCORD_TAB_CLICK); utils.browser.openInNewTab(DISCORD_LINK_URL); @@ -51,13 +71,14 @@ export const Header = () => { <div className={utils.object.toClasses(styles.logo, 'row')} onClick={onLogoClick}> <StarkGateLogo /> </div> - {isConnected && ( + {isLoggedIn && ( <div className={utils.object.toClasses(styles.chain, 'row')}>{CHAIN_TXT(chainName)}</div> )} </div> <div className={utils.object.toClasses(styles.right, 'row')}> - <Tab color={colorWhiteOp50} label={TAB_FAQ_TXT} onClick={showFaqMenu} /> + <Tab color={colorWhiteOp50} label={TAB_TERMS_TXT} onClick={onTabTermsClick} /> + <Tab color={colorWhiteOp50} label={TAB_FAQ_TXT} onClick={onTabFaqClick} /> <Tab color={colorDiscord} label={TAB_DISCORD_TXT} onClick={onTabDiscordClick} /> {isL1AccountConnected && ( <WalletButton diff --git a/src/components/Containers/Header/Header.module.scss b/src/components/Containers/Header/Header.module.scss index 57e639b0..188fdfbc 100644 --- a/src/components/Containers/Header/Header.module.scss +++ b/src/components/Containers/Header/Header.module.scss @@ -8,12 +8,17 @@ $chain-color: $--color-white-1; height: #{$height}px; border-bottom: 1px solid transparent; justify-content: space-between; - padding: 0 40px; background: $background-color; box-shadow: 0 4px 30px rgba(0, 0, 0, 0.05); transition: 0.3s ease-in-out; + position: absolute; + top: 0; + left: 0; + right: 0; + overflow: hidden; .left { + padding: 30px; display: flex; flex-direction: column; align-items: flex-start; @@ -39,6 +44,7 @@ $chain-color: $--color-white-1; } .right { + padding: 30px; display: flex; flex-direction: row; @@ -51,7 +57,6 @@ $chain-color: $--color-white-1; &.mobile { height: #{$height - 10}px; - padding: 0 30px; .left { .logo { diff --git a/src/components/Containers/Header/Header.strings.js b/src/components/Containers/Header/Header.strings.js index 65ec0f51..d290efe6 100644 --- a/src/components/Containers/Header/Header.strings.js +++ b/src/components/Containers/Header/Header.strings.js @@ -7,4 +7,6 @@ export const CHAIN_TXT = chainName => export const TAB_DISCORD_TXT = utils.getTranslation('containers.header.tab_discord_txt'); -export const TAB_FAQ_TXT = utils.getTranslation('containers.header.tab_faq'); +export const TAB_FAQ_TXT = utils.getTranslation('containers.header.tab_faq_txt'); + +export const TAB_TERMS_TXT = utils.getTranslation('containers.header.tab_terms_txt'); diff --git a/src/components/Containers/Main/Main.js b/src/components/Containers/Main/Main.js deleted file mode 100644 index 453e2751..00000000 --- a/src/components/Containers/Main/Main.js +++ /dev/null @@ -1,34 +0,0 @@ -import React, {useEffect, useState} from 'react'; - -import {useVars, useWindowSize} from '../../../hooks'; -import {EventManagerProvider} from '../../../providers/EventManagerProvider'; -import {TokensProvider} from '../../../providers/TokensProvider'; -import {useL1Wallet, useL2Wallet} from '../../../providers/WalletsProvider'; -import {Bridge, Login} from '../../Features'; -import styles from './Main.module.scss'; - -export const Main = () => { - const windowSize = useWindowSize(); - const {mainOffset} = useVars(); - const {isConnected: isL1Connected} = useL1Wallet(); - const {isConnected: isL2Connected} = useL2Wallet(); - const [height, setHeight] = useState(null); - - useEffect(() => { - setHeight(document.body.offsetHeight - mainOffset); - }, [windowSize]); - - return ( - <main className={styles.main} style={{height}}> - {isL1Connected && isL2Connected ? ( - <TokensProvider> - <EventManagerProvider> - <Bridge /> - </EventManagerProvider> - </TokensProvider> - ) : ( - <Login /> - )} - </main> - ); -}; diff --git a/src/components/Containers/Main/Main.module.scss b/src/components/Containers/Main/Main.module.scss deleted file mode 100644 index fb35a370..00000000 --- a/src/components/Containers/Main/Main.module.scss +++ /dev/null @@ -1,5 +0,0 @@ -.main { - display: flex; - flex-direction: column; - overflow-y: auto; -} diff --git a/src/components/Containers/index.js b/src/components/Containers/index.js index 90346829..c0789a3d 100644 --- a/src/components/Containers/index.js +++ b/src/components/Containers/index.js @@ -1,3 +1,2 @@ -export * from './Main/Main'; export * from './Footer/Footer'; export * from './Header/Header'; diff --git a/src/components/Features/Bridge/Bridge.module.scss b/src/components/Features/Bridge/Bridge.module.scss deleted file mode 100644 index 26649c54..00000000 --- a/src/components/Features/Bridge/Bridge.module.scss +++ /dev/null @@ -1,15 +0,0 @@ -@import '../../../index'; - -$background-color: $--color-alpha; - -.bridge { - display: flex; - flex-direction: column; - background: $background-color; - border-radius: 20px; - padding: 20px; - width: 500px; - max-height: 650px; - margin: auto; - transition: 0.3s ease-in-out; -} diff --git a/src/components/Features/Faq/Faq.js b/src/components/Features/Faq/Faq.js deleted file mode 100644 index b264c56e..00000000 --- a/src/components/Features/Faq/Faq.js +++ /dev/null @@ -1,30 +0,0 @@ -import React from 'react'; - -import {faqs} from '../../../config/faqs'; -import {useMenu} from '../../../providers/MenuProvider'; -import {BackButton, Menu, MenuTitle} from '../../UI'; -import styles from './Faq.module.scss'; -import {TITLE_TXT} from './Faq.strings'; - -export const Faq = () => { - const {showTransferMenu} = useMenu(); - - return ( - <Menu> - <div className={styles.faq}> - <BackButton onClick={showTransferMenu} /> - <MenuTitle text={TITLE_TXT} /> - <div className={styles.container}> - <ol> - {faqs.map((faq, i) => ( - <li key={`faq-${i}`} className={styles.question}> - <h4 dangerouslySetInnerHTML={{__html: faq.question}} /> - <div className={styles.answer} dangerouslySetInnerHTML={{__html: faq.answer}} /> - </li> - ))} - </ol> - </div> - </div> - </Menu> - ); -}; diff --git a/src/components/Features/Faq/Faq.module.scss b/src/components/Features/Faq/Faq.module.scss deleted file mode 100644 index 197f3947..00000000 --- a/src/components/Features/Faq/Faq.module.scss +++ /dev/null @@ -1,84 +0,0 @@ -@import '../../../index'; - -$color: $--color-white; -$link-color: $--color-gamma; -$link-color-hover: $--color-gamma-1; -$visited-link-color: $--color-alpha-6; -$visited-link-color-hover: $--color-alpha-6-hover; -$border-color: $--color-alpha-3; -$background-answer: $--color-alpha-3; - -.faq { - color: $color; - overflow-y: auto; - text-align: left; - - a { - color: $link-color; - - &:hover { - color: $link-color-hover; - } - - &:visited { - color: $visited-link-color; - - &:hover { - color: $visited-link-color-hover; - } - } - } - - ol { - line-height: 1.6; - padding-inline-start: 20px; - margin-block-start: 0; - padding-right: 16px; - - .question { - position: relative; - margin-bottom: 40px; - - &::marker { - font-size: 16px; - font-weight: 600; - } - - h4 { - letter-spacing: 0.7px; - } - - & * { - position: relative; - z-index: 1; - } - - .answer { - &::before { - content: ''; - position: absolute; - display: block; - z-index: 0; - top: -10px; - left: -20px; - width: 462px; - height: calc(100% + 20px); - background-color: $background-answer; - border-radius: 7px; - } - } - } - } - - .container { - color: $color; - padding: 15px; - margin: 10px 0; - overflow-y: auto; - max-height: 450px; - - > ol { - margin-top: -20px; - } - } -} diff --git a/src/components/Features/Faq/Faq.strings.js b/src/components/Features/Faq/Faq.strings.js deleted file mode 100644 index c0b501df..00000000 --- a/src/components/Features/Faq/Faq.strings.js +++ /dev/null @@ -1,3 +0,0 @@ -import utils from '../../../utils'; - -export const TITLE_TXT = utils.getTranslation('menus.faq.title_txt'); diff --git a/src/components/Features/index.js b/src/components/Features/index.js index 1eaa1378..e1774175 100644 --- a/src/components/Features/index.js +++ b/src/components/Features/index.js @@ -1,7 +1,4 @@ export * from './Account/Account'; -export * from './Bridge/Bridge'; -export * from './Login/Login'; -export * from './Faq/Faq'; export * from './SelectToken/SelectToken'; export * from './Transfer/Transfer'; export * from './TransferLog/TransferLog'; diff --git a/src/components/UI/FullScreenContainer/FullScreenContainer.js b/src/components/UI/FullScreenContainer/FullScreenContainer.js new file mode 100644 index 00000000..24d1eac4 --- /dev/null +++ b/src/components/UI/FullScreenContainer/FullScreenContainer.js @@ -0,0 +1,21 @@ +import PropTypes from 'prop-types'; +import React from 'react'; +import useBreakpoint from 'use-breakpoint'; + +import {Breakpoint} from '../../../enums'; +import {toClasses} from '../../../utils/object'; +import styles from './FullScreenContainer.module.scss'; + +export const FullScreenContainer = ({children}) => { + const {breakpoint} = useBreakpoint(Breakpoint); + + return ( + <div className={toClasses(styles.fullScreenContainer, styles[breakpoint.toLowerCase()])}> + {children} + </div> + ); +}; + +FullScreenContainer.propTypes = { + children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) +}; diff --git a/src/components/UI/FullScreenContainer/FullScreenContainer.module.scss b/src/components/UI/FullScreenContainer/FullScreenContainer.module.scss new file mode 100644 index 00000000..74f4a8c3 --- /dev/null +++ b/src/components/UI/FullScreenContainer/FullScreenContainer.module.scss @@ -0,0 +1,49 @@ +@import '../../../index'; + +$link-color: $--color-gamma; +$link-color-hover: $--color-gamma-1; +$visited-link-color: $--color-alpha-6; +$visited-link-color-hover: $--color-alpha-6-hover; +$color: $--color-white; +$shadow-color: $--color-black; + +.fullScreenContainer { + left: 0; + right: 0; + position: absolute; + padding: 0 300px; + top: 0; + bottom: #{$--footer-height}px; + color: $color; + overflow: auto; + text-shadow: 1px 1px $shadow-color; + transition: 0.3s ease-in-out; + + &.laptop { + padding: 0 200px; + } + + &.tablet { + padding: 0 100px; + } + + &.mobile { + padding: 0 20px; + } + + a { + color: $link-color; + + &:hover { + color: $link-color-hover; + } + + &:visited { + color: $visited-link-color; + + &:hover { + color: $visited-link-color-hover; + } + } + } +} diff --git a/src/components/UI/StyledBackground/StyledBackground.js b/src/components/UI/StyledBackground/StyledBackground.js new file mode 100644 index 00000000..c5d5690a --- /dev/null +++ b/src/components/UI/StyledBackground/StyledBackground.js @@ -0,0 +1,40 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import lightAccentBackgroundPath from '../../../assets/img/light-accent.png'; +import starsBackgroundPath from '../../../assets/img/stars.png'; +import styles from './StyledBackground.module.scss'; + +export const StyledBackground = ({withStars = true, withLightAccent = true, children}) => { + const stars = `url(${starsBackgroundPath})`; + const lightAccent = `url(${lightAccentBackgroundPath})`; + + let backgroundImage = ''; + + if (withStars) { + backgroundImage += stars; + } + if (withLightAccent) { + if (withStars) { + backgroundImage += ','; + } + backgroundImage += lightAccent; + } + + return ( + <div + className={styles.styledBackground} + style={{ + backgroundImage + }} + > + {children} + </div> + ); +}; + +StyledBackground.propTypes = { + withStars: PropTypes.bool, + withLightAccent: PropTypes.bool, + children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) +}; diff --git a/src/components/UI/StyledBackground/StyledBackground.module.scss b/src/components/UI/StyledBackground/StyledBackground.module.scss new file mode 100644 index 00000000..9d059f82 --- /dev/null +++ b/src/components/UI/StyledBackground/StyledBackground.module.scss @@ -0,0 +1,12 @@ +@import '../../../index'; + +.styledBackground { + position: absolute; + background-size: cover; + background-repeat: no-repeat; + background-position: center center; + top: #{$--header-height}px; + bottom: 0; + left: 0; + right: 0; +} diff --git a/src/components/UI/WalletButton/WalletButton.js b/src/components/UI/WalletButton/WalletButton.js index b091b1c1..7f61a3b1 100644 --- a/src/components/UI/WalletButton/WalletButton.js +++ b/src/components/UI/WalletButton/WalletButton.js @@ -2,7 +2,7 @@ import PropTypes from 'prop-types'; import React from 'react'; import useBreakpoint from 'use-breakpoint'; -import {isMobile, isTablet, Breakpoint} from '../../../enums'; +import {Breakpoint, isDesktop, isMobile, isMobileOrTablet} from '../../../enums'; import {useColors} from '../../../hooks'; import utils from '../../../utils'; import {toClasses} from '../../../utils/object'; @@ -17,10 +17,10 @@ export const WalletButton = ({account, logoPath, onClick}) => { const getText = () => { const address = utils.wallet.shortenAddress(account); - if (isTablet(breakpoint)) { - return address; - } else if (isMobile(breakpoint)) { + if (isMobileOrTablet(breakpoint)) { return ''; + } else if (!isDesktop(breakpoint)) { + return address; } return BTN_TXT(address); }; diff --git a/src/components/UI/WalletButton/WalletButton.module.scss b/src/components/UI/WalletButton/WalletButton.module.scss index 62e2609a..c55a3398 100644 --- a/src/components/UI/WalletButton/WalletButton.module.scss +++ b/src/components/UI/WalletButton/WalletButton.module.scss @@ -9,7 +9,8 @@ } } - &.tablet { + &.laptop, + .tablet { width: 150px; font-size: 16px; } diff --git a/src/components/UI/index.js b/src/components/UI/index.js index e7841159..37c9f647 100644 --- a/src/components/UI/index.js +++ b/src/components/UI/index.js @@ -30,5 +30,7 @@ export * from './LogoutButton/LogoutButton'; export * from './AccountAddress/AccountAddress'; export * from './RefreshIcon/RefreshIcon'; export * from './Stepper/Stepper'; +export * from './StyledBackground/StyledBackground'; +export * from './FullScreenContainer/FullScreenContainer'; export * from './Modal'; export * from './Toast'; diff --git a/src/config/envs.js b/src/config/envs.js index b866d7b2..effcb35c 100644 --- a/src/config/envs.js +++ b/src/config/envs.js @@ -2,6 +2,7 @@ import utils from '../utils'; const envs = { env: process.env.NODE_ENV, + appUrl: process.env.REACT_APP_URL, autoConnect: Boolean(process.env.REACT_APP_AUTO_CONNECT), pollBlockNumberInterval: Number(process.env.REACT_APP_POLL_BLOCK_NUMBER_INTERVAL), supportedTokens: process.env.REACT_APP_SUPPORTED_TOKENS.split(','), @@ -19,7 +20,8 @@ const envs = { localStorageTransfersLogKey: process.env.REACT_APP_LOCAL_STORAGE_TRANSFERS_LOG_KEY, localStorageOnboardingExpirationTimestampKey: process.env.REACT_APP_LOCAL_STORAGE_ONBOARDING_TIMESTAMP_KEY, - onboardingModalTimeoutHrs: process.env.REACT_APP_ONBOARDING_MODAL_TIMEOUT_HRS + onboardingModalTimeoutHrs: process.env.REACT_APP_ONBOARDING_MODAL_TIMEOUT_HRS, + localStorageAcceptTermsKey: process.env.REACT_APP_LOCAL_STORAGE_ACCEPT_TERMS }; export default envs; diff --git a/src/config/strings.js b/src/config/strings.js index b873e46a..a71d41fd 100644 --- a/src/config/strings.js +++ b/src/config/strings.js @@ -4,12 +4,23 @@ const strings = { chain_txt: '{{chainName}} testnet', wallet_btn_txt: 'Account | {{address}}', tab_discord_txt: 'Discord', - tab_faq: 'FAQ' + tab_terms_txt: 'Terms', + tab_faq_txt: 'FAQ' }, footer: { rights_txt: '© 2022 StarkWare Industries Ltd. All Rights Reserved' } }, + screens: { + faq: { + title_txt: 'FAQ' + }, + terms: { + title_txt: 'Terms of Service', + last_revised_txt: 'Last Revised: April 4, 2022', + accept_btn_txt: 'I Accept' + } + }, menus: { back_btn_txt: 'Back', login: { @@ -50,9 +61,6 @@ const strings = { balance_title_txt: 'Available balance', input_placeholder_txt: '0.00', transfer_btn_txt: 'Transfer' - }, - faq: { - title_txt: 'FAQ' } }, modals: { diff --git a/src/enums/Breakpoint.js b/src/enums/Breakpoint.js index d42b367a..27800c26 100644 --- a/src/enums/Breakpoint.js +++ b/src/enums/Breakpoint.js @@ -5,6 +5,10 @@ export const Breakpoint = { DESKTOP: 1200 }; +export const isMobileOrTablet = breakpoint => { + return isMobile(breakpoint) || isTablet(breakpoint); +}; + export const isMobile = breakpoint => { return Breakpoint[breakpoint] === Breakpoint.MOBILE; }; @@ -12,3 +16,7 @@ export const isMobile = breakpoint => { export const isTablet = breakpoint => { return Breakpoint[breakpoint] === Breakpoint.TABLET; }; + +export const isDesktop = breakpoint => { + return Breakpoint[breakpoint] === Breakpoint.DESKTOP; +}; diff --git a/src/enums/MenuType.js b/src/enums/MenuType.js index 91ab0a0c..e8413fe4 100644 --- a/src/enums/MenuType.js +++ b/src/enums/MenuType.js @@ -1,6 +1,5 @@ export const MenuType = { TRANSFER: 'TRANSFER', SELECT_TOKEN: 'SELECT_TOKEN', - ACCOUNT: 'ACCOUNT', - FAQ: 'FAQ' + ACCOUNT: 'ACCOUNT' }; diff --git a/src/index.js b/src/index.js index 3672d3a7..50233202 100644 --- a/src/index.js +++ b/src/index.js @@ -1,6 +1,7 @@ import splitbee from '@splitbee/web'; import React from 'react'; import ReactDOM from 'react-dom'; +import {BrowserRouter} from 'react-router-dom'; import {App} from './App'; import {ModalWrapper} from './components/UI'; @@ -22,9 +23,11 @@ if (env === 'development' || utils.browser.getUrlParameter('debugApp')) { } ReactDOM.render( - <Providers> - <App /> - <ModalWrapper /> - </Providers>, + <BrowserRouter> + <Providers> + <App /> + <ModalWrapper /> + </Providers> + </BrowserRouter>, document.getElementById('root') ); diff --git a/src/index.scss b/src/index.scss index 3c6671c2..b99a92a2 100644 --- a/src/index.scss +++ b/src/index.scss @@ -66,20 +66,9 @@ body { width: 100%; font-family: $--primary-font; background-color: $--color-alpha-3; - background-image: url('assets/img/light-accent.png'); - background-size: cover; - background-repeat: no-repeat; - background-position: center center; transition: 0.3s; } -header, -footer { - display: flex; - align-items: center; - justify-content: space-between; -} - .center { top: 50%; left: 50%; diff --git a/src/providers/AppProvider/AppProvider.js b/src/providers/AppProvider/AppProvider.js new file mode 100644 index 00000000..00f0f67d --- /dev/null +++ b/src/providers/AppProvider/AppProvider.js @@ -0,0 +1,47 @@ +import PropTypes from 'prop-types'; +import React, {useReducer} from 'react'; + +import envs from '../../config/envs'; +import utils from '../../utils'; +import {AppContext} from './app-context'; +import {actions, initialState, reducer} from './app-reducer'; + +const {localStorageAcceptTermsKey} = envs; + +export const AppProvider = ({children}) => { + const [state, dispatch] = useReducer(reducer, initialState); + + const login = () => { + dispatch({ + type: actions.SET_IS_LOGGED_IN, + isLoggedIn: true + }); + }; + + const logout = () => { + dispatch({ + type: actions.SET_IS_LOGGED_IN, + isLoggedIn: false + }); + }; + + const acceptTerms = () => { + utils.storage.setItem(localStorageAcceptTermsKey, true); + dispatch({ + type: actions.SET_ACCEPT_TERMS + }); + }; + + const value = { + ...state, + acceptTerms, + login, + logout + }; + + return <AppContext.Provider value={value}>{children}</AppContext.Provider>; +}; + +AppProvider.propTypes = { + children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) +}; diff --git a/src/providers/AppProvider/app-context.js b/src/providers/AppProvider/app-context.js new file mode 100644 index 00000000..59c7dc1d --- /dev/null +++ b/src/providers/AppProvider/app-context.js @@ -0,0 +1,10 @@ +import {createContext} from 'react'; + +import {initialState} from './app-reducer'; + +export const AppContext = createContext({ + ...initialState, + acceptTerms: () => {}, + login: () => {}, + logout: () => {} +}); diff --git a/src/providers/AppProvider/app-hooks.js b/src/providers/AppProvider/app-hooks.js new file mode 100644 index 00000000..fe8a304b --- /dev/null +++ b/src/providers/AppProvider/app-hooks.js @@ -0,0 +1,17 @@ +import {useContext} from 'react'; + +import {AppContext} from './app-context'; + +export const useApp = () => useContext(AppContext); + +export const useTerms = () => { + const {isAcceptTerms, acceptTerms} = useApp(); + + return {isAcceptTerms, acceptTerms}; +}; + +export const useLogin = () => { + const {isLoggedIn, login, logout} = useApp(); + + return {isLoggedIn, login, logout}; +}; diff --git a/src/providers/AppProvider/app-reducer.js b/src/providers/AppProvider/app-reducer.js new file mode 100644 index 00000000..9d7f676c --- /dev/null +++ b/src/providers/AppProvider/app-reducer.js @@ -0,0 +1,35 @@ +import envs from '../../config/envs'; +import utils from '../../utils'; + +const {localStorageAcceptTermsKey} = envs; + +export const actions = { + SET_ACCEPT_TERMS: 'App/SET_ACCEPT_TERMS', + SET_IS_LOGGED_IN: 'App/SET_IS_LOGGED_IN' +}; + +export const initialState = { + isAcceptTerms: utils.storage.getItem(localStorageAcceptTermsKey), + isLoggedIn: false +}; + +export const reducer = (state, action) => { + switch (action.type) { + case actions.SET_ACCEPT_TERMS: { + return { + ...state, + isAcceptTerms: true + }; + } + + case actions.SET_IS_LOGGED_IN: { + return { + ...state, + isLoggedIn: action.isLoggedIn + }; + } + + default: + return state; + } +}; diff --git a/src/providers/AppProvider/index.js b/src/providers/AppProvider/index.js new file mode 100644 index 00000000..5b98ad77 --- /dev/null +++ b/src/providers/AppProvider/index.js @@ -0,0 +1,3 @@ +export * from './app-context'; +export * from './app-hooks'; +export * from './AppProvider'; diff --git a/src/providers/EventManagerProvider/EventManagerProvider.js b/src/providers/EventManagerProvider/EventManagerProvider.js index e323a192..8e410ff1 100644 --- a/src/providers/EventManagerProvider/EventManagerProvider.js +++ b/src/providers/EventManagerProvider/EventManagerProvider.js @@ -15,7 +15,7 @@ const filters = {}; export const EventManagerProvider = ({children}) => { const logger = useLogger(EventManagerProvider.displayName); const getTokenBridgeContract = useL1TokenBridgeContract(); - const {account: l1Account, chainId: l1ChainId, getBlockNumber} = useL1Wallet(); + const {account: l1Account, chainId: l1ChainId} = useL1Wallet(); const {account: l2Account, chainId: l2ChainId} = useL2Wallet(); const l1Tokens = useL1Tokens(); const l2Tokens = useL2Tokens(); diff --git a/src/providers/MenuProvider/menu-hooks.js b/src/providers/MenuProvider/menu-hooks.js index 53a23232..4b82cce8 100644 --- a/src/providers/MenuProvider/menu-hooks.js +++ b/src/providers/MenuProvider/menu-hooks.js @@ -9,7 +9,6 @@ export const useMenu = () => { return { menu, menuProps, - showFaqMenu: useShowMenu(MenuType.FAQ), showAccountMenu: useShowMenu(MenuType.ACCOUNT), showTransferMenu: useShowMenu(MenuType.TRANSFER), showSelectTokenMenu: useShowMenu(MenuType.SELECT_TOKEN), diff --git a/src/providers/index.js b/src/providers/index.js index 2afc5b45..27cbc64e 100644 --- a/src/providers/index.js +++ b/src/providers/index.js @@ -1,3 +1,4 @@ +import {AppProvider} from './AppProvider'; import {BlockHashProvider} from './BlockHashProvider'; import {MenuProvider} from './MenuProvider'; import {ModalProvider} from './ModalProvider'; @@ -8,6 +9,7 @@ import {WalletsProvider} from './WalletsProvider'; import {combineProviders} from './combine-providers'; export const Providers = combineProviders([ + AppProvider, MenuProvider, TransferProvider, ModalProvider, diff --git a/src/components/Features/Bridge/Bridge.js b/src/routes/Bridge/Bridge.js similarity index 63% rename from src/components/Features/Bridge/Bridge.js rename to src/routes/Bridge/Bridge.js index f2206f25..878bd284 100644 --- a/src/components/Features/Bridge/Bridge.js +++ b/src/routes/Bridge/Bridge.js @@ -1,13 +1,15 @@ import React, {useEffect} from 'react'; -import {Account, Faq, SelectToken, ToastProvider, Transfer} from '..'; -import {setUser, track, TrackEvent} from '../../../analytics'; -import envs from '../../../config/envs'; -import {MenuType} from '../../../enums'; -import {useMenu} from '../../../providers/MenuProvider'; -import {useOnboardingModal} from '../../../providers/ModalProvider'; -import {useL1Wallet, useL2Wallet} from '../../../providers/WalletsProvider'; -import utils from '../../../utils'; +import {setUser, track, TrackEvent} from '../../analytics'; +import {Account, SelectToken, ToastProvider, Transfer} from '../../components/Features'; +import envs from '../../config/envs'; +import {MenuType} from '../../enums'; +import {EventManagerProvider} from '../../providers/EventManagerProvider'; +import {useMenu} from '../../providers/MenuProvider'; +import {useOnboardingModal} from '../../providers/ModalProvider'; +import {TokensProvider} from '../../providers/TokensProvider'; +import {useL1Wallet, useL2Wallet} from '../../providers/WalletsProvider'; +import utils from '../../utils'; import styles from './Bridge.module.scss'; const {localStorageOnboardingExpirationTimestampKey, onboardingModalTimeoutHrs} = envs; @@ -46,8 +48,6 @@ export const Bridge = () => { return <SelectToken />; case MenuType.ACCOUNT: return <Account {...menuProps[MenuType.ACCOUNT]} />; - case MenuType.FAQ: - return <Faq />; case MenuType.TRANSFER: default: return <Transfer />; @@ -56,8 +56,14 @@ export const Bridge = () => { return ( <div className={styles.bridge}> - <ToastProvider /> - {renderMenu()} + <TokensProvider> + <EventManagerProvider> + <div className={styles.bridgeMenu}> + <ToastProvider /> + {renderMenu()} + </div> + </EventManagerProvider> + </TokensProvider> </div> ); }; diff --git a/src/routes/Bridge/Bridge.module.scss b/src/routes/Bridge/Bridge.module.scss new file mode 100644 index 00000000..172f0921 --- /dev/null +++ b/src/routes/Bridge/Bridge.module.scss @@ -0,0 +1,26 @@ +@import '../../index'; + +$background-color: $--color-alpha; + +.bridge { + display: flex; + flex-direction: column; + overflow: auto; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + + .bridgeMenu { + display: flex; + flex-direction: column; + background: $background-color; + border-radius: 20px; + padding: 20px; + width: 500px; + max-height: 650px; + margin: auto; + transition: 0.3s ease-in-out; + } +} diff --git a/src/routes/Faq/Faq.js b/src/routes/Faq/Faq.js new file mode 100644 index 00000000..04d32f34 --- /dev/null +++ b/src/routes/Faq/Faq.js @@ -0,0 +1,29 @@ +import React, {useEffect} from 'react'; + +import {track, TrackEvent} from '../../analytics'; +import {FullScreenContainer} from '../../components/UI'; +import {faqs} from '../../config/faqs'; +import styles from './Faq.module.scss'; +import {TITLE_TXT} from './Faq.strings'; + +export const Faq = () => { + useEffect(() => { + track(TrackEvent.FAQ_SCREEN); + }, []); + + return ( + <FullScreenContainer> + <div className={styles.faq}> + <h1>{TITLE_TXT}</h1> + <ol> + {faqs.map((faq, i) => ( + <li key={`faq-${i}`} className={styles.question}> + <h2 dangerouslySetInnerHTML={{__html: faq.question}} /> + <div dangerouslySetInnerHTML={{__html: faq.answer}} /> + </li> + ))} + </ol> + </div> + </FullScreenContainer> + ); +}; diff --git a/src/routes/Faq/Faq.module.scss b/src/routes/Faq/Faq.module.scss new file mode 100644 index 00000000..6f0929d0 --- /dev/null +++ b/src/routes/Faq/Faq.module.scss @@ -0,0 +1,32 @@ +@import '../../index'; + +.faq { + ol { + line-height: 1.6; + padding-inline-start: 20px; + margin-block-start: 0; + padding-right: 16px; + + .question { + position: relative; + + &:not(:last-child) { + margin-bottom: 60px; + } + + &::marker { + font-size: 24px; + font-weight: 600; + } + + h2 { + letter-spacing: 0.7px; + } + + & * { + position: relative; + z-index: 1; + } + } + } +} diff --git a/src/routes/Faq/Faq.strings.js b/src/routes/Faq/Faq.strings.js new file mode 100644 index 00000000..112efadd --- /dev/null +++ b/src/routes/Faq/Faq.strings.js @@ -0,0 +1,5 @@ +import utils from '../../utils'; + +const {title_txt} = utils.getTranslation('screens.faq'); + +export const TITLE_TXT = title_txt; diff --git a/src/components/Features/Login/Login.constants.js b/src/routes/Login/Login.constants.js similarity index 100% rename from src/components/Features/Login/Login.constants.js rename to src/routes/Login/Login.constants.js diff --git a/src/components/Features/Login/Login.js b/src/routes/Login/Login.js similarity index 71% rename from src/components/Features/Login/Login.js rename to src/routes/Login/Login.js index 04c3adbe..5d48f769 100644 --- a/src/components/Features/Login/Login.js +++ b/src/routes/Login/Login.js @@ -1,12 +1,14 @@ import React, {useEffect, useRef, useState} from 'react'; +import {useNavigate} from 'react-router-dom'; -import {track, TrackEvent} from '../../../analytics'; -import {ChainInfo, NetworkType, WalletStatus, WalletType} from '../../../enums'; -import {useConfig, useWalletHandlerProvider} from '../../../hooks'; -import {useHideModal, useProgressModal} from '../../../providers/ModalProvider'; -import {useL1Wallet, useL2Wallet, useWallets} from '../../../providers/WalletsProvider'; -import utils from '../../../utils'; -import {Menu, WalletLogin} from '../../UI'; +import {track, TrackEvent} from '../../analytics'; +import {WalletLogin} from '../../components/UI'; +import {ChainInfo, NetworkType, WalletStatus, WalletType} from '../../enums'; +import {useConfig, useWalletHandlerProvider} from '../../hooks'; +import {useLogin} from '../../providers/AppProvider'; +import {useHideModal, useProgressModal} from '../../providers/ModalProvider'; +import {useL1Wallet, useL2Wallet, useWallets} from '../../providers/WalletsProvider'; +import utils from '../../utils'; import {AUTO_CONNECT_TIMEOUT_DURATION, MODAL_TIMEOUT_DURATION} from './Login.constants'; import styles from './Login.module.scss'; import { @@ -27,8 +29,10 @@ export const Login = () => { const showProgressModal = useProgressModal(); const getWalletHandlers = useWalletHandlerProvider(); const {status, error} = useWallets(); - const {connectWallet: connectL1Wallet, isConnected} = useL1Wallet(); - const {connectWallet: connectL2Wallet} = useL2Wallet(); + const {connectWallet: connectL1Wallet, isConnected: isConnectedL1Wallet} = useL1Wallet(); + const {connectWallet: connectL2Wallet, isConnected: isConnectedL2Wallet} = useL2Wallet(); + const {login} = useLogin(); + const navigate = useNavigate(); useEffect(() => { track(TrackEvent.LOGIN_SCREEN); @@ -51,8 +55,14 @@ export const Login = () => { }, [walletType, getWalletHandlers]); useEffect(() => { - isConnected && setWalletType(WalletType.L2); - }, [isConnected]); + if (isConnectedL1Wallet && isConnectedL2Wallet) { + login(); + navigate('/'); + } + if (isConnectedL1Wallet) { + setWalletType(WalletType.L2); + } + }, [isConnectedL1Wallet, isConnectedL2Wallet]); useEffect(() => { error && handleError(error); @@ -148,21 +158,19 @@ export const Login = () => { }; return ( - <Menu> - <div className={utils.object.toClasses(styles.login, 'center')}> - <div className={styles.content}> - <div className={styles.title}>{TITLE_TXT}</div> - <p> - {SUBTITLE_TXT(walletType === WalletType.L1 ? NetworkType.L1.name : NetworkType.L2.name)} - </p> - <div className={styles.container}>{renderLoginWallets()}</div> - {errorMsg && <div className={styles.errorMsg}>{errorMsg}</div>} - </div> - <div className={styles.separator} /> - <div className={styles.download}> - {DOWNLOAD_TEXT[0]} <span onClick={onDownloadClick}>{DOWNLOAD_TEXT[1]}</span> - </div> + <div className={utils.object.toClasses(styles.login, 'center')}> + <div className={styles.content}> + <div className={styles.title}>{TITLE_TXT}</div> + <p> + {SUBTITLE_TXT(walletType === WalletType.L1 ? NetworkType.L1.name : NetworkType.L2.name)} + </p> + <div className={styles.container}>{renderLoginWallets()}</div> + {errorMsg && <div className={styles.errorMsg}>{errorMsg}</div>} + </div> + <div className={styles.separator} /> + <div className={styles.download}> + {DOWNLOAD_TEXT[0]} <span onClick={onDownloadClick}>{DOWNLOAD_TEXT[1]}</span> </div> - </Menu> + </div> ); }; diff --git a/src/components/Features/Login/Login.module.scss b/src/routes/Login/Login.module.scss similarity index 98% rename from src/components/Features/Login/Login.module.scss rename to src/routes/Login/Login.module.scss index c1de3017..e65cd784 100644 --- a/src/components/Features/Login/Login.module.scss +++ b/src/routes/Login/Login.module.scss @@ -1,4 +1,4 @@ -@import '../../../index'; +@import '../../index'; $background-color: $--color-alpha; $text-color: $--color-white; diff --git a/src/components/Features/Login/Login.strings.js b/src/routes/Login/Login.strings.js similarity index 92% rename from src/components/Features/Login/Login.strings.js rename to src/routes/Login/Login.strings.js index dfb60394..98fe3f36 100644 --- a/src/components/Features/Login/Login.strings.js +++ b/src/routes/Login/Login.strings.js @@ -1,4 +1,4 @@ -import utils from '../../../utils'; +import utils from '../../utils'; const {title_txt, subtitle_txt, download_txt, modal_txt, unsupported_browser_txt} = utils.getTranslation('menus.login'); diff --git a/src/routes/ProtectedRoute.js b/src/routes/ProtectedRoute.js new file mode 100644 index 00000000..5563eeb8 --- /dev/null +++ b/src/routes/ProtectedRoute.js @@ -0,0 +1,16 @@ +import PropTypes from 'prop-types'; +import React from 'react'; +import {Navigate} from 'react-router-dom'; + +export const ProtectedRoute = ({isAllowed, redirectPath, children}) => { + if (!isAllowed) { + return <Navigate replace to={redirectPath} />; + } + return children; +}; + +ProtectedRoute.propTypes = { + isAllowed: PropTypes.bool, + redirectPath: PropTypes.string, + children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) +}; diff --git a/src/routes/Terms/Terms.js b/src/routes/Terms/Terms.js new file mode 100644 index 00000000..6e3fceab --- /dev/null +++ b/src/routes/Terms/Terms.js @@ -0,0 +1,558 @@ +import React, {useEffect, useRef, useState} from 'react'; +import {useNavigate} from 'react-router-dom'; + +import {track, TrackEvent} from '../../analytics'; +import {Button, FullScreenContainer} from '../../components/UI'; +import {useColors, useConfig} from '../../hooks'; +import {useTerms} from '../../providers/AppProvider'; +import {useL1Wallet, useL2Wallet} from '../../providers/WalletsProvider'; +import styles from './Terms.module.scss'; +import {ACCEPT_BTN_TXT, LAST_REVISED_TXT, TITLE_TXT} from './Terms.strings'; + +const STARKWARE_SITE_URL = 'https://starkware.co/'; +const STARKNET_DOCS_URL = 'https://starknet.io/documentation/'; +const STARKGATE_MAIL_ADDRESS = 'starkgate@starknet.io'; +const STARKGATE_CONTRACTS_URL = + 'https://github.com/starkware-libs/starkgate-contracts/tree/main/src/starkware/starknet/apps/starkgate'; + +export const Terms = () => { + const navigate = useNavigate(); + const termsRef = useRef(); + const acceptButtonRef = useRef(); + const {appUrl} = useConfig(); + const {isAcceptTerms, acceptTerms} = useTerms(); + const {colorGamma1, colorWhite} = useColors(); + const {account: l1account} = useL1Wallet(); + const {account: l2account} = useL2Wallet(); + const [marginBottom, setMarginBottom] = useState(); + const [acceptButtonEnable, setAcceptButtonEnable] = useState(false); + + useEffect(() => { + track(TrackEvent.TERMS_SCREEN); + setMarginBottom(acceptButtonRef?.current?.clientHeight); + }, []); + + const onScroll = () => { + if (termsRef.current) { + const {scrollTop, scrollHeight, clientHeight} = termsRef.current; + if (scrollTop + clientHeight === scrollHeight) { + setAcceptButtonEnable(true); + } + } + }; + + const accept = () => { + track(TrackEvent.TERMS.ACCEPT_CLICK, {l1account, l2account}); + acceptTerms(); + navigate('/'); + }; + + return ( + <FullScreenContainer> + <div + ref={termsRef} + className={styles.terms} + style={{ + marginBottom + }} + onScroll={onScroll} + > + <h1>{TITLE_TXT}</h1> + <h4>{LAST_REVISED_TXT}</h4> + <div> + <p> + <a href={STARKWARE_SITE_URL} rel="noreferrer" target="_blank"> + StarkWare Industries Ltd. + </a>{' '} + (&#34;<b>StarkWare</b>&#34;, &#34;<b>we</b>&#34;, &#34;<b>our</b>&#34;) welcomes you + (the &#34;<b>User(s)</b>&#34;, or &#34; + <b>you</b>&#34;) to{' '} + <a href={appUrl} rel="noreferrer" target="_blank"> + {appUrl} + </a>{' '} + (the &#34;<b>Site&#34;</b> + ), a website that provides information and hosts a user interface (the &#34; + <b>Interface</b> + &#34;) to a pair of smart contracts on the Ethereum blockchain and on the StarkNet + network that facilitates your ability to conduct transactions with your ETH and ERC-20 + tokens that reside on Layer 1 in a gas-efficient manner, via the StarkNet Alpha network + and its STARK-based computational compression capabilities (the &#34;<b>Bridge</b> + &#34;). Each User may use the Site, Interface and/or Bridge<sup>1</sup> in accordance + with, and subject to, the terms and conditions hereunder. + </p> + <ol> + <li> + <h2>Acceptance of the Terms</h2> + <p> + By entering, connecting to, accessing or using the Site, Interface and/or the + Bridge, you acknowledge that you have read and understood the following Terms of + Service (collectively, the &#34;<b>Terms</b>&#34;), and the terms of our{' '} + <b>Privacy Policy</b> available at https://starknet.io/privacy-policy/ and you agree + to be bound by them and to comply with all applicable laws and regulations regarding + your use of the Site, Interface and the Bridge, and you acknowledge that these Terms + constitute a binding and enforceable legal contract between StarkWare and you.{' '} + <b> + IF YOU DO NOT AGREE TO THESE TERMS, PLEASE DO NOT ENTER, CONNECT TO, ACCESS OR USE + THE SITE, INTERFACE AND/OR BRIDGE IN ANY MANNER. + </b> + </p> + <p> + <b> + THE BRIDGE OPERATES IN PART ON STARKNET, A PERMISSIONLESS DECENTRALIZED VALIDITY + -ROLLUP THAT OPERATES AS AN L2 NETWORK OVER ETHEREUM. WHEN YOU USE THE BRIDGE, YOU + ARE ALSO USING STARKNET TO SCALE YOUR ETHEREUM TRANSACTIONS. BY USING THE BRIDGE, + YOU ACKNOWLEDGE AND AGREE THAT YOU HAVE READ, AND AGREE TO, THE STARKNET TERMS OF + USE LOCATED AT https://starknet.io/terms/, WHICH WILL APPLY TO ANY USE BY YOU OF + THE BRIDGE AND/OR OF STARKNET. + </b> + </p> + <p> + The Site, Interface and Bridge are available only to individuals who (a) are at + least eighteen (18) years old; and (b) possess the legal capacity to enter into + these Terms (on behalf of themselves and their organization) and to form a binding + agreement under any applicable law. You hereby represent that you possess the legal + authority to enter into these Terms on your and (if applicable) your organization’s + behalf and to form a binding agreement under any applicable law, to use the Site, + Interface and Bridge in accordance with these Terms, and to fully perform your + obligations hereunder. + </p> + <p> + For the avoidance of doubt, if you are acting on behalf of an organization, any act + or omission performed by you in connection with the Site, Interface and/or Bridge + shall obligate your organization. + </p> + <p> + <b> + Please be advised that these Terms contain provisions, including an Agreement to + Arbitrate, that govern how claims that you may have or assert against StarkWare + are resolved, which will require the parties to submit claims they may have + against one another to binding and final arbitration. Under the Agreement to + Arbitrate, the parties will (1) only be permitted to pursue claims against each + other on an individual basis, not as a plaintiff or class member in any class or + representative action or proceeding and (2) only be permitted to seek relief + (including monetary, injunctive, and declaratory relief) on an individual basis. + </b> + </p> + </li> + <li> + <h2>The Site, Interface and Bridge - Explanation and Certain Risk Factors</h2> + <p> + <b> + The Site and Interface <i>do not</i> offer the Bridge, which is a pair of + autonomously functioning smart contracts on the Ethereum Blockchain and StarkNet, + and which may be accessed independently without use of the Site or the Interface. + <sup>2</sup> + </b> + </p> + <p> + Use of the Bridge and any activity thereon is subject to any additional terms and + conditions that may be included in the Bridge, including those located at the{' '} + <a href={STARKGATE_CONTRACTS_URL} rel="noreferrer" target="_blank"> + following link + </a> + . + </p> + <p> + <b> + <i>YOUR USE OF THE BRIDGE IS ENTIRELY AT YOUR OWN RISK.</i> + </b> + </p> + <p> + On the Site, you will have the ability via the Interface to access the Bridge. More + information about the Bridge is available{' '} + <a href={STARKGATE_CONTRACTS_URL} rel="noreferrer" target="_blank"> + here + </a> + . + </p> + <p> + <i>Decentralized Protocol</i>: The Bridge is a pair of decentralized smart + contracts, one running on the Ethereum blockchain and the other on StarkNet. The + Interface provides an Interface to access the Bridge in a user-friendly manner, + [however due to its decentralized nature StarkWare does not control the Bridge1]. + The Bridge is non-custodial. StarkWare does not have any ability to control or + modify how you conduct transactions on Ethereum or StarkNet. By using the Bridge, + you acknowledge and recognize that use of the Bridge is at your own risk and will be + subject to the rules encoded within the Bridge, including as to when and on what + terms and at which speed your transactions are conducted on Ethereum and/or + StarkNet, neither of which StarkWare can influence or fully control. + </p> + <p> + <i>Risk Disclosures Relating to Blockchain</i>. By utilizing the Bridge, you + represent that you understand the inherent risks associated with cryptocurrency + systems; and warrant that you have an understanding of the usage and intricacies of + cryptographic tokens, digital assets, blockchains and other distributed and + decentralized systems, and smart contracts. In particular, you are aware and + recognize that any transactions conducted on a blockchain cannot be undone or + reversed. + </p> + <p> + <i>Information</i>. The site may contain information regarding the Bridge or + particular instances of the Bridge. Such information is provided for informational + purposes only, without any representation or warranty. StarkWare does not assume any + responsibility or liability for the accuracy or inaccuracy of any such information. + Before acting upon or making any decisions on the basis of such information, you are + responsible to independently verify such information. + </p> + <p> + <i>Fees</i>. StarkWare reserves the right to charge fees for use of the bridge , and + in such case shall display to you any applicable fees prior to you incurring the + fee. There are fees and costs associated with using the Bridge, a description of + which can be found{' '} + <a href={`${STARKNET_DOCS_URL}/fee-mechanism`} rel="noreferrer" target="_blank"> + here + </a> + . + </p> + <p> + <i>We are not responsible for any loss</i>: The Bridge, StarkNet and other + blockchain networks are decentralized systems that are still under active + development, and therefore: (a) may contain bugs, errors and defects, (b) may + function improperly or be subject to periods of downtime and unavailability, (c) may + result in total or partial loss or corruption of cryptocurrencies with respect to + which they are used and/or data, (d) may be modified at any time, including through + the release of subsequent versions, all with or without notice to you, or (e) may + have security vulnerabilities and be subject to hacking. StarkWare will not be + liable or responsible for any losses or damages to you, including without limitation + any loss of funds on Ethereum and/or StarkNet with which you conduct your + transactions using the Bridge, as a result of any of the foregoing. + </p> + <p> + <b> + WITHOUT LIMITING THE GENERALITY OF ANY OTHER PROVISION OF THE TERMS, YOU + ACKNOWLEDGE AND AGREE THAT YOU ASSUME FULL RESPONSIBILITY FOR YOUR USE OF THE + SITE, THE INTERFACE, AND THE BRIDGE, ALL OF WHICH WILL BE AT YOUR OWN RISK. + RECOGNIZING SUCH, YOU UNDERSTAND AND AGREE THAT, TO THE FULLEST EXTENT PERMITTED + BY APPLICABLE LAW, NEITHER STARKWARE NOR ITS SHAREHOLDERS, OFFICERS OR DIRECTORS + WILL BE LIABLE TO YOU FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + CONSEQUENTIAL, PUNITIVE, EXEMPLARY OR OTHER DAMAGES OF ANY KIND, INCLUDING WITHOUT + LIMITATION DAMAGES FOR LOSS OF PROFITS, GOODWILL, USE, DATA, CRYPTOCURRENCIES OR + OTHER TANGIBLE OR INTANGIBLE LOSSES OR ANY OTHER DAMAGES BASED ON CONTRACT, TORT, + STRICT LIABILITY OR ANY OTHER THEORY (EVEN IF STARKWARE HAD BEEN ADVISED OF THE + POSSIBILITY OF SUCH DAMAGES), RESULTING FROM THE SITE, THE INTERFACE OR THE + BRIDGE. + </b> + </p> + <p> + <b> + SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF CERTAIN WARRANTIES OR THE + LIMITATION OR EXCLUSION OF LIABILITY FOR DIRECT, INDIRECT, INCIDENTAL OR + CONSEQUENTIAL DAMAGES. ACCORDINGLY, IN SUCH JURISDICTIONS THE FOREGOING WILL BE + REINTERPRETED SO AS TO BE EFFECTIVE TO GREATEST EXTENT POSSIBLE UNDER APPLICABLE + LAW. + </b> + </p> + </li> + <li> + <h2>Use Restrictions; Compliance</h2> + <p> + There are certain conducts which are strictly prohibited when using the Site and + Interface. Please read the following restrictions carefully. Failure to comply with + any of the provisions set forth herein may result (at StarkWare’s sole discretion) + in the termination of your use of the Site and/or Interface and may also expose you + to civil and/or criminal liability. + </p> + <p> + The Interface and/or Bridge may not be available or appropriate for use in certain + jurisdictions. By accessing or using the Interface and/or Bridge, you agree that you + are solely and entirely responsible for compliance with all laws and regulations + that may apply to you. You may not use the Interface and/or Bridge if you are a + citizen, resident, or member of any jurisdiction or group that is subject to + economic sanctions, or if your use of the Interface and/or Bridge would be illegal + or otherwise violate any applicable law. You may not use the Interface in connection + with or which would involve proceeds of any unlawful activity. + </p> + </li> + <li> + <h2>Minors</h2> + <p> + The Site, Interface and Bridge are intended for Users over the age of eighteen (18). + </p> + </li> + <li> + <h2>Contacting us via the Site</h2> + <p> + In order to contact us, please email us at:{' '} + <a href={`mailto:${STARKGATE_MAIL_ADDRESS}`}>{STARKGATE_MAIL_ADDRESS}</a> + </p> + </li> + <li> + <h2>Links to Third Party Sites</h2> + <p> + Certain links provided herein may permit our Users to leave this Site and enter non- + StarkWare sites or platform. Those linked sites and platform are provided solely as + a convenience to you. These linked sites and platform are not under the control of + StarkWare and it is not responsible for the availability of such external sites or + platform, and does not endorse and is not responsible or liable for any content + including but not limited to content advertising, products or other information on + or available from such linked sites and platform or any link contained in linked + sites or service. In addition, StarkWare is not responsible or liable for such + linked sites and platform’ privacy practices and/or any other practices. Your access + to, use of and reliance upon any such sites, platform and content and your dealings + with such third parties are at your sole risk and expense. You further acknowledge + and agree that StarkWare shall not be responsible or liable, directly or indirectly, + for any damage or loss caused or alleged to be caused, by or in connection with use + of or reliance on any platform, content, products or other materials available on or + through such linked sites or resource. + </p> + </li> + <li> + <h2>Availability</h2> + <p> + The Site’s, the Interface’s and the Bridge’s availability and functionality depends + on various factors, such as communication networks and public blockchain networks. + StarkWare does not warrant or guarantee that the Site and/or Interface and/or Bridge + will operate and/or be available at all times without disruption or interruption, or + that it will be immune from unauthorized access or error-free. + </p> + </li> + <li> + <h2>Changes to The Site</h2> + <p> + StarkWare reserves the right to modify, correct, amend, enhance, improve, make any + other changes to, or discontinue, temporarily or permanently this Site and/or the + Interface and/or Bridge1 (or any part thereof) without notice, at any time. In + addition, you hereby acknowledge that the content provided under this Site may be + changed, extended in terms of content and form or removed at any time without any + notice to you. You agree that StarkWare shall not be liable to you or to any third + party for any modification, suspension, or discontinuance of this Site or the + Interface or the Bridge. You hereby agree that StarkWare is not responsible for any + errors or malfunctions that may occur in connection with the performance of such + changes. + </p> + </li> + <li> + <h2>Disclaimers and No Warranties</h2> + <p> + TO THE FULLEST EXTENT LEGALLY PERMISSIBLE, THE SITE AND THE INTERFACE ARE PROVIDED + ON AN &#34;<b>AS IS</b>&#34;, &#34;<b>WITH ALL FAULTS</b>&#34; AND &#34; + <b>AS AVAILABLE</b>&#34; BASIS, AND STARKWARE, INCLUDING ITS VENDORS, OFFICERS, + SHAREHOLDERS, SUB-CONTRACTORS, DIRECTORS, EMPLOYEES, AFFILIATES, SUBSIDIARIES, + LICENSORS, AGENTS AND SUPPLIERS (COLLECTIVELY, &#34; + <b>STARKWARE’S REPRESENTATIVES</b> + &#34;), DISCLAIM ALL WARRANTIES OF ANY KIND, EXPRESS, IMPLIED OR STATUTORY, + INCLUDING BUT NOT LIMITED TO WARRANTIES OF TITLE OR NON-INFRINGEMENT OR IMPLIED + WARRANTIES OF USE, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE AND THOSE + ARISING FROM A COURSE OF DEALING OR USAGE OF TRADE. YOU MAY HAVE ADDITIONAL CONSUMER + RIGHTS UNDER YOUR LOCAL LAWS THAT THIS AGREEMENT CANNOT CHANGE. + </p> + <p> + ADDITIONAL DISCLAIMERS AND WARRANTIES REGARDING THE BRIDGE MAY APPLY PURSUANT TO + ADDITIONAL TERMS AND CONDITIONS INCLUDED IN THE BRIDGE. + </p> + <p> + <b>WE DO NOT WARRANT</b> (I) THAT THE USE AND OPERATION OF THE SITE, THE INTERFACE + AND/OR THE BRIDGE IS OR WILL BE SECURE, TIMELY, ACCURATE, COMPLETE, UNINTERRUPTED, + WITHOUT ERRORS, OR FREE OF VIRUSES, DEFECTS, WORMS, OTHER HARMFUL COMPONENTS OR + OTHER PROGRAM LIMITATIONS, (II) THAT WE WILL CORRECT ANY ERRORS OR DEFECTS IN THE + SITE OR THE INTERFACE, (III) AND/OR MAKE ANY REPRESENTATION REGARDING THE USE, + INABILITY TO USE OR OPERATE, OR THE RESULTS OF THE USE OF THE SITE AND/OR INTERFACE + AND/OR BRIDGE (INCLUDING THAT THE RESULTS OF USING THE SITE AND/OR INTERFACE AND/OR + BRIDGE WILL MEET YOUR REQUIREMENTS). STARKWARE AND STARKWARE’S REPRESENTATIVES + DISCLAIM ALL WARRANTIES AND CONDITIONS WITH REGARD TO THE USE OF THE SITE AND THE + INTERFACE, INCLUDING BUT NOT LIMITED TO THE AVAILABILITY, RELIABILITY OR THE QUALITY + OF THE SITE AND THE INTERFACE, AND ARE NOT AND SHALL NOT BE RESPONSIBLE FOR ANY + ERROR, FAULT OR MISTAKE RELATED TO ANY CONTENT AND/OR INFORMATION DISPLAYED WITHIN + THE SITE OR THE INTERFACE. + </p> + <p> + WE ARE NOT RESPONSIBLE AND HAVE NO LIABILITY FOR ANY ITEM OR SERVICE PROVIDED BY ANY + PERSON OR ENTITY OTHER THAN STARKWARE. + </p> + <p> + WE ARE NOT RESPONSIBLE FOR ANY CONSEQUENCES TO YOU OR OTHERS THAT MAY RESULT FROM + TECHNICAL PROBLEMS (INCLUDING WITHOUT LIMITATION IN CONNECTION WITH THE INTERNET + SUCH AS SLOW CONNECTIONS, TRAFFIC CONGESTION, OVERLOAD OF SERVERS, DELAYS OR + INTERRUPTIONS) OR ANY TELECOMMUNICATIONS OR INTERNET PROVIDERS OR ANY BLOCKCHAIN + NETWORK. + </p> + <p> + YOU AGREE THAT USE OF THE SITE, THE INTERFACE AND/OR THE BRIDGE IS ENTIRELY AT YOUR + OWN RISK. + </p> + <p> + INASMUCH AS SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSIONS OR LIMITATIONS AS SET + FORTH HEREIN, THE FULL EXTENT OF THE ABOVE EXCLUSIONS AND LIMITATIONS MAY NOT APPLY. + </p> + </li> + <li> + <h2>Limitation of Liability</h2> + <p> + TO THE MAXIMUM EXTENT LEGALLY PERMISSIBLE, IN NO EVENT SHALL STARKWARE, INCLUDING + STARKWARE’S REPRESENTATIVES BE LIABLE FOR ANY DAMAGES WHATSOEVER, INCLUDING, BUT NOT + LIMITED TO, DIRECT, INDIRECT, SPECIAL, PUNITIVE, EXEMPLARY, INCIDENTAL OR + CONSEQUENTIAL DAMAGES OF ANY KIND, UNDER ANY LEGAL THEORY (INCLUDING, WITHOUT + LIMITATION, CONTRACT, NEGLIGENCE, TORT OR STRICT LIABILITY), INCLUDING, WITHOUT + LIMITATION, LOSS OF GOODWILL, PROFITS OR DATA AND BUSINESS INTERRUPTION, ARISING + HEREUNDER, RESULTING FROM OR ARISING OUT OF THE SITE, THE INTERFACE AND/OR THE + STARKWARE, AND/OR THE FAILURE OF THE SITE, THE INTERFACE AND/OR THE STARKWARE TO + PERFORM AS REPRESENTED OR EXPECTED, OR FROM ANY CONTENT, OR FROM THE PERFORMANCE OR + FAILURE OF STARKWARE TO PERFORM UNDER THESE TERMS, ANY OTHER ACT OR OMISSION OF + STARKWARE OR STARKWARE ‘S REPRESENTATIVES BY ANY OTHER CAUSE WHATSOEVER; OR BASED + UPON BREACH OF WARRANTY, GUARANTEE OR CONDITION, BREACH OF CONTRACT, NEGLIGENCE, + STRICT LIABILITY, TORT, OR ANY OTHER LEGAL THEORY, REGARDLESS OF WHETHER STARKWARE + OR STARKWARE’S REPRESENTATIVES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + </p> + <p> + IN ANY CASE, WITHOUT LIMITING THE GENERALITY OF THE FOREGOING AND TO THE MAXIMUM + EXTENT LEGALLY PERMISSIBLE, STARKWARE AND STARKWARE’S REPRESENTATIVES’ TOTAL + AGGREGATE LIABILITY FOR ALL DAMAGES OR LOSSES WHATSOEVER ARISING HEREUNDER OR IN + CONNECTION WITH YOUR USE OR INABILITY TO USE THE SITE, THE INTERFACE AND/OR THE + BRIDGE SHALL BE LIMITED TO THE AMOUNT ACTUALLY PAID BY YOU, IF ANY, TO STARKWARE FOR + USE OF THE SITE, INTERFACE OR BRIDGE IN RESPECT OF THE PARTICULAR TRANSACTION IN + CONNECTION WITH WHICH THE LOSS OCCURRED, OR $US 10.00, WHICHEVER IS GREATER. YOU + WILL NOT, AND WAIVE ANY RIGHT TO, SEEK TO RECOVER ANY OTHER DAMAGES, INCLUDING + CONSEQUENTIAL, LOST PROFITS, LOSS OF FUNDS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES + FROM STARKWARE AND FROM STARKWARE’S REPRESENTATIVES. + </p> + <p> + INASMUCH AS SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSIONS OR LIMITATIONS AS SET + FORTH HEREIN, THE FULL EXTENT OF THE ABOVE EXCLUSIONS AND LIMITATIONS MAY NOT APPLY. + </p> + </li> + <li> + <h2>Release of Claims</h2> + <p> + The source code of the software underlying the Bridge is publicly accessible. Before + using the Interface and the Bridge, it is your responsibility to familiarize + yourself with the functionality and methods of operation of the Bridge. You + expressly agree that you assume all risks in connection with your access and use of + the Interface and your interaction with the Bridge. You further expressly waive and + release us from any and all liability, claims, causes of action, or damages arising + from or in any way relating to your use of the Interface and your interaction with + the Bridge. + </p> + </li> + <li> + <h2>Amendments to the Terms</h2> + <p> + StarkWare may, at its sole discretion, change the Terms from time to time, including + any other policies incorporated thereto, so please re-visit this page frequently. In + case of any material change, we will make reasonable efforts to post a clear notice + on the Site regarding such change. Such material changes will take effect seven (7) + days after such notice was provided on our Site. Otherwise, all other changes to + these Terms are effective as of the stated &quotLast Revised&#34; date and your + continued use of the Site or the Interface or the Bridge on or after the Last + Revised date will constitute acceptance of, and agreement to be bound by, those + changes. In the event that the Terms should be amended to comply with any legal + requirements or security concerns, the amendments may take effect immediately, or as + required by the law and without any prior notice. + </p> + </li> + <li> + <h2> + Termination of these Terms and the Termination of the Site’s and Interface’s and + Bridge’s Operation + </h2> + <p> + At any time, StarkWare may without notice discontinue your use of the Site or the + Interface or the Bridge, at its sole discretion, in addition to any other remedies + that may be available to StarkWare under any applicable law. + </p> + <p> + Additionally, StarkWare may at any time, at its sole discretion, cease the operation + of the Site or the Interface or the Bridge or any part thereof, temporarily or + permanently, delete any information or content from the Site or correct, modify, + amend, enhance, improve and make any other changes thereto or discontinue displaying + or providing any information, Content or features therein without giving any prior + notice. You agree and acknowledge that StarkWare does not assume any responsibility + with respect to, or in connection with the termination of the Site’s or the + Interface’s or the Bridge’s operation and loss of any data. The provisions of these + Terms that, by their nature and content, must survive the termination of these Terms + in order to achieve the fundamental purposes of these Terms shall so survive. + Without limiting the generality of the forgoing, the Intellectual Property, + Disclaimer and Warranties, Limitation of Liability, Indemnification and General + sections will survive the termination of the Terms. + </p> + </li> + <li> + <h2> + Governing Law; Jurisdiction; Agreement to Arbitrate; No Class Action; Waiver of + Right to Jury Trial + </h2> + <p> + Any claim relating to the Site, the Interface, the Bridge or the use thereof will be + governed by and interpreted in accordance with the laws of Singapore, without + reference to its conflict-of-laws principles and the United Nations Convention + Relating to a Uniform Law on the International Sale of Goods may not be applied. + </p> + <p> + All disputes arising out of or in connection with the present contract shall be + finally settled under the Rules of Arbitration of the International Chamber of + Commerce by one or more arbitrators appointed in accordance with the said Rules. The + arbitration will be conducted in the English language and held by teleconference or, + if teleconference is not possible, in Singapore (the &#34; + <b>Agreement to Arbitrate</b> + &#34;). + </p> + <p> + You must bring any and all claims or disputes against us in your individual capacity + and not as a plaintiff in or member of any purported class action, collective + action, private attorney general action, or other representative proceeding. This + provision applies to class arbitration. + </p> + <p>You and we both agree to waive the right to demand a trial by jury.</p> + <p> + Notwithstanding the foregoing, StarkWare may seek injunctive relief in any court of + competent jurisdiction. + </p> + </li> + <li> + <h2>General</h2> + <p> + (a) These Terms constitute the entire terms and conditions between you and StarkWare + relating to the subject matter herein and supersedes any and all prior or + contemporaneous written or oral agreements or understandings between you and + StarkWare, (b) these Terms do not, and shall not be construed to create any + relationship, partnership, joint venture, employer-employee, agency, or + franchisor-franchisee relationship between the parties hereto, (c) no waiver by + either party of any breach or default hereunder will be deemed to be a waiver of any + preceding or subsequent breach or default, (d) any heading, caption or section title + contained herein is inserted only as a matter of convenience, and in no way defines + or explains any section or provision hereof, (e){' '} + <b> + YOU ACKNOWLEDGE AND AGREE THAT ANY CAUSE OF ACTION THAT YOU MAY HAVE ARISING OUT + OF OR RELATED TO THE SITE MUST COMMENCE WITHIN ONE (1) YEAR AFTER THE CAUSE OF + ACTION ACCRUES. OTHERWISE, SUCH CAUSE OF ACTION IS PERMANENTLY BARRED + </b> + , (f) if any provision hereof is adjudged by any court of competent jurisdiction to + be unenforceable, that provision shall be limited or eliminated to the minimum + extent necessary so that these Terms shall otherwise remain in full force and effect + while most nearly adhering to the intent expressed herein, (g) you may not assign or + transfer these Terms (including all rights and obligations hereunder) without our + prior written consent and any attempt to do so in violation of the foregoing shall + be void. We may assign or transfer these Terms without restriction or notification, + (h) no amendment hereof will be binding unless in writing and signed by StarkWare, + and (i) the parties agree that all correspondence relating to these Terms shall be + written and in the English language. + </p> + </li> + </ol> + </div> + </div> + {!isAcceptTerms && ( + <div ref={acceptButtonRef} className={styles.acceptButton}> + <Button + colorBackground={colorGamma1} + colorBackgroundHover={colorGamma1} + colorBorder={colorGamma1} + colorText={colorWhite} + height={0} + isDisabled={!acceptButtonEnable} + style={{ + width: '100%' + }} + text={ACCEPT_BTN_TXT} + onClick={accept} + /> + <p> + By clicking the &#34;I Accept&#34; button, you are accepting our{' '} + <a href={`${appUrl}/terms`} rel="noreferrer" target="_blank"> + Terms of Service + </a> + </p> + </div> + )} + </FullScreenContainer> + ); +}; diff --git a/src/routes/Terms/Terms.module.scss b/src/routes/Terms/Terms.module.scss new file mode 100644 index 00000000..85d26c84 --- /dev/null +++ b/src/routes/Terms/Terms.module.scss @@ -0,0 +1,32 @@ +@import '../../index'; + +.terms { + padding-left: inherit; + padding-right: inherit; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: auto; + line-height: 1.7; + + b { + letter-spacing: 0.5px; + } + + li::marker { + font-size: 24px; + font-weight: bold; + } +} + +.acceptButton { + padding-left: inherit; + padding-right: inherit; + text-align: center; + position: absolute; + bottom: 0; + left: 0; + right: 0; +} diff --git a/src/routes/Terms/Terms.strings.js b/src/routes/Terms/Terms.strings.js new file mode 100644 index 00000000..e85d26d4 --- /dev/null +++ b/src/routes/Terms/Terms.strings.js @@ -0,0 +1,7 @@ +import utils from '../../utils'; + +const {title_txt, accept_btn_txt, last_revised_txt} = utils.getTranslation('screens.terms'); + +export const TITLE_TXT = title_txt; +export const ACCEPT_BTN_TXT = accept_btn_txt; +export const LAST_REVISED_TXT = last_revised_txt; diff --git a/src/routes/index.js b/src/routes/index.js new file mode 100644 index 00000000..7b773c35 --- /dev/null +++ b/src/routes/index.js @@ -0,0 +1,5 @@ +export * from './Bridge/Bridge'; +export * from './Terms/Terms'; +export * from './Login/Login'; +export * from './Faq/Faq'; +export * from './ProtectedRoute'; diff --git a/src/styles/colors.module.scss b/src/styles/colors.module.scss index 681b6e07..ff7be163 100644 --- a/src/styles/colors.module.scss +++ b/src/styles/colors.module.scss @@ -37,4 +37,5 @@ $--color-discord: #5865f2; colorWhiteOp10: $--color-white-op-10; colorWhiteOp20: $--color-white-op-20; colorWhiteOp50: $--color-white-op-50; + colorGamma1: $--color-gamma-1; } diff --git a/yarn.lock b/yarn.lock index cf97b6c3..795a051e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1635,6 +1635,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.7.6": + version "7.17.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72" + integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/template@^7.10.4", "@babel/template@^7.12.13", "@babel/template@^7.16.0", "@babel/template@^7.3.3": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6" @@ -10914,6 +10921,13 @@ hex-color-regex@^1.1.0: resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== +history@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/history/-/history-5.3.0.tgz#1548abaa245ba47992f063a0783db91ef201c73b" + integrity sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ== + dependencies: + "@babel/runtime" "^7.7.6" + hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -17243,6 +17257,21 @@ react-refresh@^0.8.3: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f" integrity sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg== +react-router-dom@6: + version "6.3.0" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.3.0.tgz#a0216da813454e521905b5fa55e0e5176123f43d" + integrity sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw== + dependencies: + history "^5.2.0" + react-router "6.3.0" + +react-router@6.3.0, react-router@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.3.0.tgz#3970cc64b4cb4eae0c1ea5203a80334fdd175557" + integrity sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ== + dependencies: + history "^5.2.0" + react-scripts@4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-4.0.3.tgz#b1cafed7c3fa603e7628ba0f187787964cb5d345" From 5cdc483e7f5477b10be86cd54aa3772f959e4b67 Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Mon, 11 Apr 2022 10:26:48 +0000 Subject: [PATCH 134/211] prerelease: v1.2.0-dev.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [1.2.0-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.1.0...v1.2.0-dev.1) (2022-04-11) ### 🧩 Features * terms of use ([#141](https://github.com/starkware-libs/starkgate-frontend/issues/141)) ([8d9fe79](https://github.com/starkware-libs/starkgate-frontend/commit/8d9fe7957e09c739e1e79801eaf507178854f944)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 101c09ab..8e7ad3b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [1.2.0-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.1.0...v1.2.0-dev.1) (2022-04-11) + + +### 🧩 Features + +* terms of use ([#141](https://github.com/starkware-libs/starkgate-frontend/issues/141)) ([8d9fe79](https://github.com/starkware-libs/starkgate-frontend/commit/8d9fe7957e09c739e1e79801eaf507178854f944)) + ## [1.1.0](https://github.com/starkware-libs/starkgate-frontend/compare/v1.0.0...v1.1.0) (2022-04-06) diff --git a/package.json b/package.json index 77216893..7eb72d5e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.1.0", + "version": "1.2.0-dev.1", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 14ae412467611422de667737250ee1afbe9340a9 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Mon, 11 Apr 2022 20:20:19 +0300 Subject: [PATCH 135/211] chore: add faq (#147) --- src/config/faqs.js | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/src/config/faqs.js b/src/config/faqs.js index c642ee96..a34c8fbe 100644 --- a/src/config/faqs.js +++ b/src/config/faqs.js @@ -4,9 +4,9 @@ export const faqs = [ answer: ` <p> To understand how StarkGate works, please see this post, the - <a href="//starknet.io/documentation/starkgate-token-bridge/" target="_blank">Technical Documentation</a>, - the <a href="//github.com/starkware-libs/starkgate-contracts/tree/main/src/starkware/starknet/apps/starkgate" target="_blank">contract’s code</a>, - and the <a href="//github.com/starkware-libs/starkgate-frontend" target="_blank">application code</a>. + <a href='//starknet.io/documentation/starkgate-token-bridge/' target='_blank'>Technical Documentation</a>, + the <a href='//github.com/starkware-libs/starkgate-contracts/tree/main/src/starkware/starknet/apps/starkgate' target='_blank'>contract’s code</a>, + and the <a href='//github.com/starkware-libs/starkgate-frontend' target='_blank'>application code</a>. </p> ` }, @@ -17,7 +17,7 @@ export const faqs = [ The first version currently has some restrictions that may affect your ability to use StarkGate: </p> - <ol type="a"> + <ol type='a'> <li>Make sure you are browsing from Chrome.</li> <li>Make sure you are not using incognito mode.</li> <li> @@ -39,14 +39,14 @@ export const faqs = [ question: 'I performed the operation and have been waiting for completion for a long time. Why is that, and what should I do? ', answer: ` - <ol type="a"> + <ol type='a'> <li> This is an Alpha version of StarkGate operating on an <b>Alpha</b> version of StarkNet. As a result, significant delays may occure due to congestion of the system. </li> <li> If you encounter a significant delay, we recommend that you: - <ol type="i"> + <ol type='i'> <li>Do not exit the browser and then re-enter.</li> <li>Do not try to perform the same operation over and over again.</li> </ol> @@ -60,9 +60,9 @@ export const faqs = [ answer: ` <p> Our recommendation is to wait, and here is the reason why: - The process of sending transactions from StarkNet to Ethereum is divided into <a href="https://starknet.io/documentation/starkgate-token-bridge/" target="_blank">two stages</a>. + The process of sending transactions from StarkNet to Ethereum is divided into <a href='https://starknet.io/documentation/starkgate-token-bridge/' target='_blank'>two stages</a>. </p> - <ol type="i"> + <ol type='i'> <li>A waiting period of several hours is expected between the stages.</li> <li> At the end of the first step, you will be required to sign in order to complete the transfer. @@ -79,7 +79,7 @@ export const faqs = [ <p> StarkGate Alpha has two limitations at its first stage in order to reduce risk: </p> - <ol type="a"> + <ol type='a'> <li> The total value locked (TVL) in the bridge on Ethereum is limited for each token type. </li> @@ -88,7 +88,7 @@ export const faqs = [ </li> </ol> <p> - *Take a look at the <a href="https://starknet.io/documentation/starkgate-token-bridge/#limitations" target="_blank">documentation</a> to see the updated numbers, stay tuned. + *Take a look at the <a href='https://starknet.io/documentation/starkgate-token-bridge/#limitations' target='_blank'>documentation</a> to see the updated numbers, stay tuned. </p> <p> We plan to gradually ease these limitations and lift them completely, as confidence grows. @@ -126,7 +126,7 @@ export const faqs = [ "I can't find solutions to the problems I encountered while using StarkGate. Where can I get help?", answer: ` <p>We have opened a - <a href="https://discord.com/login?redirect_to=%2Fchannels%2F793094838509764618%2F957558236662366219" target="_blank">community channel on Discord</a> + <a href='https://discord.com/login?redirect_to=%2Fchannels%2F793094838509764618%2F957558236662366219' target='_blank'>community channel on Discord</a> to help each other use StarkGate.</p> ` }, @@ -135,9 +135,20 @@ export const faqs = [ answer: ` <p> Initially, StarkGate Alpha will only support ETH. After time period of successful use, we will add support for: - WBTC, USDC, USDT and Dai. All relevant contract addresses, both on Ethereum and StarkNet, are available in this <a href="https://github.com/starkware-libs/starknet-addresses" target="_blank">repo</a>. + WBTC, USDC, USDT and Dai. All relevant contract addresses, both on Ethereum and StarkNet, are available in this <a href='https://github.com/starkware-libs/starknet-addresses' target='_blank'>repo</a>. Further down the road, we will publish the mechanism for adding support for additional tokens. </p> ` + }, + { + question: + "Where's the best place to write detailed feedback to help improve future versions of StarkGate?", + answer: ` + <p>Here:</p> + <ul> + <li><a href="https://forms.reform.app/starkware/StarkGate_Feedback/yhyalh" target='_blank'>StarkGate Alpha on Goerli</a></li> + <li><a href="https://forms.reform.app/TeRuSp/StarkGate-Feedback-Mainnet/bcoscx" target='_blank'>StarkGate Alpha on Mainnet</a></li> + </ul> + ` } ]; From 51da4aa7f8d5045c4e5dea34e59cef20a12363b9 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Thu, 14 Apr 2022 13:13:33 +0300 Subject: [PATCH 136/211] fix(Faq): question 8 (#157) --- src/config/faqs.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/config/faqs.js b/src/config/faqs.js index a34c8fbe..67021f9d 100644 --- a/src/config/faqs.js +++ b/src/config/faqs.js @@ -62,7 +62,7 @@ export const faqs = [ Our recommendation is to wait, and here is the reason why: The process of sending transactions from StarkNet to Ethereum is divided into <a href='https://starknet.io/documentation/starkgate-token-bridge/' target='_blank'>two stages</a>. </p> - <ol type='i'> + <ol type='a'> <li>A waiting period of several hours is expected between the stages.</li> <li> At the end of the first step, you will be required to sign in order to complete the transfer. @@ -133,11 +133,16 @@ export const faqs = [ { question: 'Why can’t I use StarkGate with {insert favorite}Token?', answer: ` - <p> - Initially, StarkGate Alpha will only support ETH. After time period of successful use, we will add support for: - WBTC, USDC, USDT and Dai. All relevant contract addresses, both on Ethereum and StarkNet, are available in this <a href='https://github.com/starkware-libs/starknet-addresses' target='_blank'>repo</a>. - Further down the road, we will publish the mechanism for adding support for additional tokens. - </p> + <ol type='a'> + <li> + StarkGate Alpha on Goerli supports ETH and a few other ERC-20 tokens. The full list and the relevant contract addresses on Goerli, + both on Ethereum and StarkNet, are available in this <a href='https://github.com/starkware-libs/starknet-addresses' target='_blank'>repo</a>. + </li> + <li> + On Mainnet, initially, StarkGate Alpha will only support ETH to allow use of the fee mechanism. + Later on, we will add support for WBTC, USDC, USDT, and DAI. Further down the road, we will publish the mechanism for adding support for additional tokens. + The relevant contract addresses on Mainnet are available in this <a href='https://github.com/starkware-libs/starknet-addresses/blob/master/bridged_tokens/mainnet.json' target='_blank'>repo</a>. + </li> ` }, { From d885f7f37208752a6eba92acee3402319955a99e Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Thu, 14 Apr 2022 10:15:19 +0000 Subject: [PATCH 137/211] prerelease: v1.2.0-dev.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [1.2.0-dev.2](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.0-dev.1...v1.2.0-dev.2) (2022-04-14) ### 🔧 Fixes * **Faq:** question 8 ([#157](https://github.com/starkware-libs/starkgate-frontend/issues/157)) ([51da4aa](https://github.com/starkware-libs/starkgate-frontend/commit/51da4aa7f8d5045c4e5dea34e59cef20a12363b9)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e7ad3b2..2f531ed6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [1.2.0-dev.2](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.0-dev.1...v1.2.0-dev.2) (2022-04-14) + + +### 🔧 Fixes + +* **Faq:** question 8 ([#157](https://github.com/starkware-libs/starkgate-frontend/issues/157)) ([51da4aa](https://github.com/starkware-libs/starkgate-frontend/commit/51da4aa7f8d5045c4e5dea34e59cef20a12363b9)) + ## [1.2.0-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.1.0...v1.2.0-dev.1) (2022-04-11) diff --git a/package.json b/package.json index 7eb72d5e..bddd4412 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.2.0-dev.1", + "version": "1.2.0-dev.2", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From afa5294c5bdc428a7b0d4d569b0deefe884b54d8 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Wed, 13 Apr 2022 12:55:55 +0300 Subject: [PATCH 138/211] fix: unsupported chain id does not showing (#151) --- .env.development | 2 +- .env.production | 2 +- .env.testing | 2 +- package.json | 2 +- src/App.js | 21 +++---- src/components/Containers/Header/Header.js | 34 +++++----- .../Containers/Header/Header.strings.js | 8 +-- .../UI/LoginErrorMessage/LoginErrorMessage.js | 12 ++++ .../LoginErrorMessage.module.scss | 14 +++++ src/components/UI/index.js | 1 + src/config/envs.js | 2 +- src/config/strings.js | 3 +- src/enums/ChainType.js | 8 +-- src/enums/ErrorType.js | 4 ++ src/enums/index.js | 1 + src/providers/AppProvider/app-hooks.js | 6 +- .../WalletProvider/WalletProvider.js | 5 +- .../WalletsProvider/WalletsProvider.js | 4 +- src/routes/Login/Login.js | 62 ++++++++----------- src/routes/Login/Login.module.scss | 12 ---- src/routes/Login/Login.strings.js | 11 +++- yarn.lock | 8 +-- 22 files changed, 118 insertions(+), 106 deletions(-) create mode 100644 src/components/UI/LoginErrorMessage/LoginErrorMessage.js create mode 100644 src/components/UI/LoginErrorMessage/LoginErrorMessage.module.scss create mode 100644 src/enums/ErrorType.js diff --git a/.env.development b/.env.development index ff0c3018..cec0a4b5 100644 --- a/.env.development +++ b/.env.development @@ -3,7 +3,7 @@ REACT_APP_AUTO_CONNECT=false # 20 seconds REACT_APP_POLL_BLOCK_NUMBER_INTERVAL=20000 # goerli testnet -REACT_APP_SUPPORTED_CHAIN_IDS=5 +REACT_APP_SUPPORTED_CHAIN_ID=5 REACT_APP_STARKNET_CONTRACT_ADDRESS=0xde29d060D45901Fb19ED6C6e959EB22d8626708e REACT_APP_ETHERSCAN_URL=https://goerli.etherscan.io REACT_APP_VOYAGER_URL=https://goerli.voyager.online diff --git a/.env.production b/.env.production index 6de75808..f128ade0 100644 --- a/.env.production +++ b/.env.production @@ -3,7 +3,7 @@ REACT_APP_AUTO_CONNECT=false # 30 seconds REACT_APP_POLL_BLOCK_NUMBER_INTERVAL=30000 # mainnet -REACT_APP_SUPPORTED_CHAIN_IDS=1 +REACT_APP_SUPPORTED_CHAIN_ID=1 REACT_APP_STARKNET_CONTRACT_ADDRESS= REACT_APP_ETHERSCAN_URL=https://etherscan.io REACT_APP_VOYAGER_URL=https://voyager.online diff --git a/.env.testing b/.env.testing index daaec135..1f9889b6 100644 --- a/.env.testing +++ b/.env.testing @@ -3,7 +3,7 @@ REACT_APP_AUTO_CONNECT=false # 20 seconds REACT_APP_POLL_BLOCK_NUMBER_INTERVAL=20000 # goerli testnet -REACT_APP_SUPPORTED_CHAIN_IDS=5 +REACT_APP_SUPPORTED_CHAIN_ID=5 REACT_APP_STARKNET_CONTRACT_ADDRESS=0xde29d060D45901Fb19ED6C6e959EB22d8626708e REACT_APP_ETHERSCAN_URL=https://goerli.etherscan.io REACT_APP_VOYAGER_URL=https://goerli.voyager.online diff --git a/package.json b/package.json index bddd4412..09d4169d 100644 --- a/package.json +++ b/package.json @@ -72,7 +72,7 @@ "use-async-memo": "^1.2.3", "use-breakpoint": "^3.0.1", "use-deep-compare-effect": "^1.8.1", - "use-wallet": "^0.13.4", + "use-wallet": "^0.13.6", "uuid": "^8.3.2", "web3": "^1.7.0" }, diff --git a/src/App.js b/src/App.js index 98a56252..75d10ab1 100644 --- a/src/App.js +++ b/src/App.js @@ -1,36 +1,33 @@ import React from 'react'; -import {Route, Routes, useLocation} from 'react-router-dom'; +import {Navigate, Route, Routes, useLocation} from 'react-router-dom'; import styles from './App.module.scss'; import {Footer, Header} from './components/Containers'; import {StyledBackground} from './components/UI'; -import {useApp} from './providers/AppProvider'; -import {Faq, Bridge, Login, ProtectedRoute, Terms} from './routes'; +import {useApp, useLogin} from './providers/AppProvider'; +import {Bridge, Faq, Login, ProtectedRoute, Terms} from './routes'; export const App = () => { - const {isLoggedIn, isAcceptTerms} = useApp(); + const {isAcceptTerms} = useApp(); const {pathname} = useLocation(); - const informativeRoutes = ['/terms', '/faq']; + const {isLoggedIn} = useLogin(); return ( <div className={styles.app}> <Header /> - <StyledBackground withLightAccent={!informativeRoutes.includes(pathname)}> + <StyledBackground withLightAccent={!['/terms', '/faq'].includes(pathname)}> <Routes> <Route element={ - <ProtectedRoute - isAllowed={isLoggedIn && isAcceptTerms} - redirectPath={isLoggedIn ? '/terms' : '/login'} - > - <Bridge /> + <ProtectedRoute isAllowed={isAcceptTerms} redirectPath={'/terms'}> + {isLoggedIn ? <Bridge /> : <Login />} </ProtectedRoute> } path="/" /> <Route element={<Terms />} path="/terms" /> - <Route element={<Login />} path="/login" /> <Route element={<Faq />} path="/faq" /> + <Route element={<Navigate replace to="/" />} path="*" /> </Routes> </StyledBackground> <Footer /> diff --git a/src/components/Containers/Header/Header.js b/src/components/Containers/Header/Header.js index 124ffe5e..6fd6b57f 100644 --- a/src/components/Containers/Header/Header.js +++ b/src/components/Containers/Header/Header.js @@ -1,63 +1,64 @@ import React from 'react'; -import {useNavigate, useLocation} from 'react-router-dom'; +import {useLocation, useNavigate} from 'react-router-dom'; import useBreakpoint from 'use-breakpoint'; import {track} from '../../../analytics'; import {ReactComponent as StarkGateLogo} from '../../../assets/img/starkgate.svg'; import constants from '../../../config/constants'; +import envs from '../../../config/envs'; import {Breakpoint} from '../../../enums'; import {useColors} from '../../../hooks'; import {useLogin} from '../../../providers/AppProvider'; import {useMenu} from '../../../providers/MenuProvider'; import {useIsL1, useIsL2} from '../../../providers/TransferProvider'; -import {useL1Wallet, useL2Wallet, useWallets} from '../../../providers/WalletsProvider'; +import {useL1Wallet, useL2Wallet} from '../../../providers/WalletsProvider'; import utils from '../../../utils'; import {Tab, WalletButton} from '../../UI'; import styles from './Header.module.scss'; import {CHAIN_TXT, TAB_DISCORD_TXT, TAB_FAQ_TXT, TAB_TERMS_TXT} from './Header.strings'; const {DISCORD_LINK_URL} = constants; +const {env} = envs; export const Header = () => { const navigate = useNavigate(); const {pathname} = useLocation(); - const {chainName} = useWallets(); const {showAccountMenu, showTransferMenu} = useMenu(); const [, swapToL1] = useIsL1(); const [, swapToL2] = useIsL2(); - const {account: l1Account, isConnected: isL1AccountConnected, config: l1Config} = useL1Wallet(); - const {account: l2Account, isConnected: isL2AccountConnected, config: l2Config} = useL2Wallet(); + const {account: l1Account, config: l1Config} = useL1Wallet(); + const {account: l2Account, config: l2Config} = useL2Wallet(); const {breakpoint} = useBreakpoint(Breakpoint); const {colorDiscord, colorWhiteOp50} = useColors(); const {isLoggedIn} = useLogin(); - const maybeNavigateToIndex = () => { + const maybeNavigateToBridge = () => { pathname !== '/' && navigate('/'); }; const onL2WalletButtonClick = () => { - maybeNavigateToIndex(); swapToL2(); showAccountMenu(); + maybeNavigateToBridge(); }; const onL1WalletButtonClick = () => { - maybeNavigateToIndex(); swapToL1(); showAccountMenu(); + maybeNavigateToBridge(); }; const onLogoClick = () => { - maybeNavigateToIndex(); showTransferMenu(); + maybeNavigateToBridge(); }; const onTabFaqClick = () => { - navigate('faq', {replace: true}); + navigate('/faq'); }; const onTabTermsClick = () => { - navigate('terms', {replace: true}); + navigate('/terms'); }; const onTabDiscordClick = () => { @@ -71,23 +72,22 @@ export const Header = () => { <div className={utils.object.toClasses(styles.logo, 'row')} onClick={onLogoClick}> <StarkGateLogo /> </div> - {isLoggedIn && ( - <div className={utils.object.toClasses(styles.chain, 'row')}>{CHAIN_TXT(chainName)}</div> + {env !== 'production' && ( + <div className={utils.object.toClasses(styles.chain, 'row')}>{CHAIN_TXT}</div> )} </div> - <div className={utils.object.toClasses(styles.right, 'row')}> + <Tab color={colorDiscord} label={TAB_DISCORD_TXT} onClick={onTabDiscordClick} /> <Tab color={colorWhiteOp50} label={TAB_TERMS_TXT} onClick={onTabTermsClick} /> <Tab color={colorWhiteOp50} label={TAB_FAQ_TXT} onClick={onTabFaqClick} /> - <Tab color={colorDiscord} label={TAB_DISCORD_TXT} onClick={onTabDiscordClick} /> - {isL1AccountConnected && ( + {isLoggedIn && ( <WalletButton account={l1Account} logoPath={l1Config?.logoPath} onClick={onL1WalletButtonClick} /> )} - {isL2AccountConnected && ( + {isLoggedIn && ( <WalletButton account={l2Account} logoPath={l2Config?.logoPath} diff --git a/src/components/Containers/Header/Header.strings.js b/src/components/Containers/Header/Header.strings.js index d290efe6..c797f5a9 100644 --- a/src/components/Containers/Header/Header.strings.js +++ b/src/components/Containers/Header/Header.strings.js @@ -1,12 +1,6 @@ import utils from '../../../utils'; -export const CHAIN_TXT = chainName => - utils.string.capitalize( - utils.object.evaluate(utils.getTranslation('containers.header.chain_txt'), {chainName}) - ); - +export const CHAIN_TXT = utils.getTranslation('containers.header.chain_txt'); export const TAB_DISCORD_TXT = utils.getTranslation('containers.header.tab_discord_txt'); - export const TAB_FAQ_TXT = utils.getTranslation('containers.header.tab_faq_txt'); - export const TAB_TERMS_TXT = utils.getTranslation('containers.header.tab_terms_txt'); diff --git a/src/components/UI/LoginErrorMessage/LoginErrorMessage.js b/src/components/UI/LoginErrorMessage/LoginErrorMessage.js new file mode 100644 index 00000000..ba8ea14a --- /dev/null +++ b/src/components/UI/LoginErrorMessage/LoginErrorMessage.js @@ -0,0 +1,12 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import styles from './LoginErrorMessage.module.scss'; + +export const LoginErrorMessage = ({message}) => { + return <div className={styles.loginErrorMessage}>❗ {message}</div>; +}; + +LoginErrorMessage.propTypes = { + message: PropTypes.string +}; diff --git a/src/components/UI/LoginErrorMessage/LoginErrorMessage.module.scss b/src/components/UI/LoginErrorMessage/LoginErrorMessage.module.scss new file mode 100644 index 00000000..3b60159c --- /dev/null +++ b/src/components/UI/LoginErrorMessage/LoginErrorMessage.module.scss @@ -0,0 +1,14 @@ +@import '../../../index'; + +.loginErrorMessage { + text-align: center; + margin-top: 20px; + line-height: 20px; + padding: 7px; + font-size: 15px; + font-weight: 500; + border: 1px solid $--color-error; + color: $--color-error; + background-color: $--color-white; + border-radius: 7px; +} diff --git a/src/components/UI/index.js b/src/components/UI/index.js index 37c9f647..851e484d 100644 --- a/src/components/UI/index.js +++ b/src/components/UI/index.js @@ -32,5 +32,6 @@ export * from './RefreshIcon/RefreshIcon'; export * from './Stepper/Stepper'; export * from './StyledBackground/StyledBackground'; export * from './FullScreenContainer/FullScreenContainer'; +export * from './LoginErrorMessage/LoginErrorMessage'; export * from './Modal'; export * from './Toast'; diff --git a/src/config/envs.js b/src/config/envs.js index effcb35c..0d385195 100644 --- a/src/config/envs.js +++ b/src/config/envs.js @@ -6,7 +6,7 @@ const envs = { autoConnect: Boolean(process.env.REACT_APP_AUTO_CONNECT), pollBlockNumberInterval: Number(process.env.REACT_APP_POLL_BLOCK_NUMBER_INTERVAL), supportedTokens: process.env.REACT_APP_SUPPORTED_TOKENS.split(','), - supportedChainIds: process.env.REACT_APP_SUPPORTED_CHAIN_IDS.split(' ').map(id => Number(id)), + supportedChainId: Number(process.env.REACT_APP_SUPPORTED_CHAIN_ID), starknetContractAddress: process.env.REACT_APP_STARKNET_CONTRACT_ADDRESS, etherscanUrl: process.env.REACT_APP_ETHERSCAN_URL, etherscanTxUrl: tx => diff --git a/src/config/strings.js b/src/config/strings.js index a71d41fd..6a041d0a 100644 --- a/src/config/strings.js +++ b/src/config/strings.js @@ -1,7 +1,7 @@ const strings = { containers: { header: { - chain_txt: '{{chainName}} testnet', + chain_txt: 'Goerli testnet', wallet_btn_txt: 'Account | {{address}}', tab_discord_txt: 'Discord', tab_terms_txt: 'Terms', @@ -28,6 +28,7 @@ const strings = { subtitle_txt: 'Please select {{networkName}} wallet to connect with this dApp:', download_txt: ['Don’t have a wallet?', 'Download Here'], modal_txt: 'Waiting for confirmation from {{walletName}}', + unsupported_chain_id_txt: 'Please select {{chainName}} in your wallet', unsupported_browser_txt: "Note - The current version of StarkGate (Alpha) doesn't support your browser. Use Chrome to connect." }, diff --git a/src/enums/ChainType.js b/src/enums/ChainType.js index 09bdceb0..5de207ff 100644 --- a/src/enums/ChainType.js +++ b/src/enums/ChainType.js @@ -12,19 +12,19 @@ export const ChainType = { export const ChainInfo = { L1: { [ChainType.L1.MAIN]: { - NAME: 'main' + NAME: 'Ethereum Mainnet' }, [ChainType.L1.GOERLI]: { - NAME: 'goerli' + NAME: 'Goerli Testnet' } }, L2: { [ChainType.L2.MAIN]: { - NAME: 'main', + NAME: 'Ethereum Mainnet', ID_PREFIX: '23448594291968334' }, [ChainType.L2.GOERLI]: { - NAME: 'goerli', + NAME: 'Goerli Testnet', ID_PREFIX: '1536727068981429685321' } } diff --git a/src/enums/ErrorType.js b/src/enums/ErrorType.js new file mode 100644 index 00000000..f9b7cb0e --- /dev/null +++ b/src/enums/ErrorType.js @@ -0,0 +1,4 @@ +export const ErrorType = { + UNSUPPORTED_BROWSER: 0, + UNSUPPORTED_CHAIN_ID: 1 +}; diff --git a/src/enums/index.js b/src/enums/index.js index d338434f..b611f0f3 100644 --- a/src/enums/index.js +++ b/src/enums/index.js @@ -12,3 +12,4 @@ export * from './Breakpoint'; export * from './ToastType'; export * from './TransferError'; export * from './TransferStep'; +export * from './ErrorType'; diff --git a/src/providers/AppProvider/app-hooks.js b/src/providers/AppProvider/app-hooks.js index fe8a304b..7a9b6f1e 100644 --- a/src/providers/AppProvider/app-hooks.js +++ b/src/providers/AppProvider/app-hooks.js @@ -1,5 +1,6 @@ import {useContext} from 'react'; +import {useL1Wallet, useL2Wallet} from '../WalletsProvider'; import {AppContext} from './app-context'; export const useApp = () => useContext(AppContext); @@ -11,7 +12,8 @@ export const useTerms = () => { }; export const useLogin = () => { - const {isLoggedIn, login, logout} = useApp(); + const {isConnected: isL1Connected} = useL1Wallet(); + const {isConnected: isL2Connected} = useL2Wallet(); - return {isLoggedIn, login, logout}; + return {isLoggedIn: isL1Connected && isL2Connected}; }; diff --git a/src/providers/WalletProvider/WalletProvider.js b/src/providers/WalletProvider/WalletProvider.js index e0bf4725..063dc4e5 100644 --- a/src/providers/WalletProvider/WalletProvider.js +++ b/src/providers/WalletProvider/WalletProvider.js @@ -5,13 +5,14 @@ import {UseWalletProvider as UseWalletProviderWrapper} from 'use-wallet'; import {useConfig} from '../../hooks'; export const WalletProvider = ({children}) => { - const {pollBalanceInterval, pollBlockNumberInterval, supportedChainIds} = useConfig(); + const {pollBalanceInterval, pollBlockNumberInterval, supportedChainId} = useConfig(); + return ( <UseWalletProviderWrapper autoConnect={false} connectors={{ injected: { - chainId: supportedChainIds + chainId: [supportedChainId] } }} pollBalanceInterval={pollBalanceInterval} diff --git a/src/providers/WalletsProvider/WalletsProvider.js b/src/providers/WalletsProvider/WalletsProvider.js index c416ae13..f2b37f95 100644 --- a/src/providers/WalletsProvider/WalletsProvider.js +++ b/src/providers/WalletsProvider/WalletsProvider.js @@ -74,12 +74,12 @@ export const WalletsProvider = ({children}) => { const maybeUpdateL1Wallet = () => { // To support serializable object in the store - const serialError = error ? {...error} : null; + const serializedError = status === 'error' ? {...error} : null; updateL1Wallet({ account, status, chainId, - error: serialError, + error: serializedError, chainName: networkName, isConnected: isConnected() }); diff --git a/src/routes/Login/Login.js b/src/routes/Login/Login.js index 5d48f769..88fba421 100644 --- a/src/routes/Login/Login.js +++ b/src/routes/Login/Login.js @@ -1,11 +1,9 @@ import React, {useEffect, useRef, useState} from 'react'; -import {useNavigate} from 'react-router-dom'; import {track, TrackEvent} from '../../analytics'; -import {WalletLogin} from '../../components/UI'; -import {ChainInfo, NetworkType, WalletStatus, WalletType} from '../../enums'; +import {LoginErrorMessage, WalletLogin} from '../../components/UI'; +import {ChainInfo, ErrorType, NetworkType, WalletStatus, WalletType} from '../../enums'; import {useConfig, useWalletHandlerProvider} from '../../hooks'; -import {useLogin} from '../../providers/AppProvider'; import {useHideModal, useProgressModal} from '../../providers/ModalProvider'; import {useL1Wallet, useL2Wallet, useWallets} from '../../providers/WalletsProvider'; import utils from '../../utils'; @@ -16,57 +14,53 @@ import { MODAL_TXT, SUBTITLE_TXT, TITLE_TXT, - UNSUPPORTED_BROWSER_TXT + UNSUPPORTED_BROWSER_TXT, + UNSUPPORTED_CHAIN_ID_TXT } from './Login.strings'; export const Login = () => { const {autoConnect} = useConfig(); const [selectedWalletName, setSelectedWalletName] = useState(''); - const [errorMsg, setErrorMsg] = useState(''); + const [error, setError] = useState(null); const [walletType, setWalletType] = useState(WalletType.L1); const modalTimeoutId = useRef(null); const hideModal = useHideModal(); const showProgressModal = useProgressModal(); const getWalletHandlers = useWalletHandlerProvider(); - const {status, error} = useWallets(); + const {status, error: walletError} = useWallets(); const {connectWallet: connectL1Wallet, isConnected: isConnectedL1Wallet} = useL1Wallet(); - const {connectWallet: connectL2Wallet, isConnected: isConnectedL2Wallet} = useL2Wallet(); - const {login} = useLogin(); - const navigate = useNavigate(); + const {connectWallet: connectL2Wallet} = useL2Wallet(); + const {supportedChainId} = useConfig(); useEffect(() => { track(TrackEvent.LOGIN_SCREEN); + if (!utils.browser.isChrome()) { + setError({type: ErrorType.UNSUPPORTED_BROWSER, message: UNSUPPORTED_BROWSER_TXT}); + } }, []); useEffect(() => { let timeoutId; - if (!utils.browser.isChrome()) { - track(TrackEvent.LOGIN.LOGIN_ERROR, {message: UNSUPPORTED_BROWSER_TXT}); - setErrorMsg(UNSUPPORTED_BROWSER_TXT); - return; - } - if (autoConnect) { + if (error) { + track(TrackEvent.LOGIN.LOGIN_ERROR, error); + } else if (!error && autoConnect) { const handlers = getWalletHandlers(walletType); if (handlers.length > 0) { timeoutId = setTimeout(() => onWalletConnect(handlers[0]), AUTO_CONNECT_TIMEOUT_DURATION); } } return () => clearTimeout(timeoutId); - }, [walletType, getWalletHandlers]); + }, [error, walletType, getWalletHandlers]); useEffect(() => { - if (isConnectedL1Wallet && isConnectedL2Wallet) { - login(); - navigate('/'); - } if (isConnectedL1Wallet) { setWalletType(WalletType.L2); } - }, [isConnectedL1Wallet, isConnectedL2Wallet]); + }, [isConnectedL1Wallet]); useEffect(() => { - error && handleError(error); - }, [error]); + walletError && handleWalletError(walletError); + }, [walletError]); useEffect(() => { switch (status) { @@ -75,7 +69,7 @@ export const Login = () => { break; case WalletStatus.CONNECTED: setSelectedWalletName(''); - setErrorMsg(''); + setError(null); maybeHideModal(); break; case WalletStatus.ERROR: @@ -109,18 +103,14 @@ export const Login = () => { } }; - const handleError = error => { + const handleWalletError = error => { if (error.name === 'ChainUnsupportedError') { - const message = error.message.replace(/\d+/g, match => { - let msg = match; - const chainName = utils.string.capitalize(ChainInfo.L1[Number(match)]?.NAME); - if (chainName) { - msg += ` (${utils.string.capitalize(ChainInfo.L1[Number(match)].NAME)})`; - } - return msg; + setError({ + type: ErrorType.UNSUPPORTED_CHAIN_ID, + message: utils.object.evaluate(UNSUPPORTED_CHAIN_ID_TXT, { + chainName: ChainInfo.L1[supportedChainId].NAME + }) }); - track(TrackEvent.LOGIN.LOGIN_ERROR, {message}); - setErrorMsg(message); } }; @@ -165,7 +155,7 @@ export const Login = () => { {SUBTITLE_TXT(walletType === WalletType.L1 ? NetworkType.L1.name : NetworkType.L2.name)} </p> <div className={styles.container}>{renderLoginWallets()}</div> - {errorMsg && <div className={styles.errorMsg}>{errorMsg}</div>} + {error && <LoginErrorMessage message={error.message} />} </div> <div className={styles.separator} /> <div className={styles.download}> diff --git a/src/routes/Login/Login.module.scss b/src/routes/Login/Login.module.scss index e65cd784..e05d1fee 100644 --- a/src/routes/Login/Login.module.scss +++ b/src/routes/Login/Login.module.scss @@ -5,7 +5,6 @@ $text-color: $--color-white; $download-color: $--color-white-1; $download-button-color: $--color-beta; $container-color: $--color-alpha-3; -$error-color: $--color-error; .login { position: absolute; @@ -40,17 +39,6 @@ $error-color: $--color-error; box-sizing: border-box; border-radius: 8px; } - - .errorMsg { - margin-top: 20px; - line-height: 20px; - padding: 7px; - font-size: 14px; - border: 1px solid $error-color; - color: $error-color; - background-color: $text-color; - border-radius: 7px; - } } .download { diff --git a/src/routes/Login/Login.strings.js b/src/routes/Login/Login.strings.js index 98fe3f36..051d04d2 100644 --- a/src/routes/Login/Login.strings.js +++ b/src/routes/Login/Login.strings.js @@ -1,10 +1,17 @@ import utils from '../../utils'; -const {title_txt, subtitle_txt, download_txt, modal_txt, unsupported_browser_txt} = - utils.getTranslation('menus.login'); +const { + title_txt, + subtitle_txt, + download_txt, + modal_txt, + unsupported_chain_id_txt, + unsupported_browser_txt +} = utils.getTranslation('menus.login'); export const TITLE_TXT = title_txt; export const DOWNLOAD_TEXT = download_txt; export const UNSUPPORTED_BROWSER_TXT = unsupported_browser_txt; export const SUBTITLE_TXT = networkName => utils.object.evaluate(subtitle_txt, {networkName}); export const MODAL_TXT = walletName => utils.object.evaluate(modal_txt, {walletName}); +export const UNSUPPORTED_CHAIN_ID_TXT = unsupported_chain_id_txt; diff --git a/yarn.lock b/yarn.lock index 795a051e..ae8c7a6b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -20574,10 +20574,10 @@ use-deep-compare-effect@^1.8.1: "@babel/runtime" "^7.12.5" dequal "^2.0.2" -use-wallet@^0.13.4: - version "0.13.4" - resolved "https://registry.yarnpkg.com/use-wallet/-/use-wallet-0.13.4.tgz#78c8facfdd910a03719ef808043534a8f367c20a" - integrity sha512-C5bBobwAKi/SbIX+JzHkxChqU1A2tIcx8fQPoL0gzTGYkqvH97EchnT8yRQGMl2RiICua2nGMLrfa42Yexzs+Q== +use-wallet@^0.13.6: + version "0.13.6" + resolved "https://registry.yarnpkg.com/use-wallet/-/use-wallet-0.13.6.tgz#4ba24005550943fe6640d4a29fbf7e8bfa8c879b" + integrity sha512-GBypStD/y4tqUtWuDG2qhAr8XoTqMzoUybFQmHYOireeprmjqXPKFimhW7OpOZqt1hB21FmDYoGyFUgrbOzpeQ== dependencies: "@aragon/provided-connector" "^6.0.8" "@typescript-eslint/parser" "^4.1.0" From 55e25f769bb175c436fdbcaf8a7ad992891380b9 Mon Sep 17 00:00:00 2001 From: CarmitKl <96685244+CarmitKl@users.noreply.github.com> Date: Wed, 13 Apr 2022 15:26:59 +0300 Subject: [PATCH 139/211] fix: app crashed when trying to connect while ArgentX wasn't installed --- src/config/envs.js | 2 +- src/providers/WalletsProvider/WalletsProvider.js | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/config/envs.js b/src/config/envs.js index 0d385195..fcf52fec 100644 --- a/src/config/envs.js +++ b/src/config/envs.js @@ -3,7 +3,7 @@ import utils from '../utils'; const envs = { env: process.env.NODE_ENV, appUrl: process.env.REACT_APP_URL, - autoConnect: Boolean(process.env.REACT_APP_AUTO_CONNECT), + autoConnect: process.env.REACT_APP_AUTO_CONNECT === 'true', pollBlockNumberInterval: Number(process.env.REACT_APP_POLL_BLOCK_NUMBER_INTERVAL), supportedTokens: process.env.REACT_APP_SUPPORTED_TOKENS.split(','), supportedChainId: Number(process.env.REACT_APP_SUPPORTED_CHAIN_ID), diff --git a/src/providers/WalletsProvider/WalletsProvider.js b/src/providers/WalletsProvider/WalletsProvider.js index f2b37f95..9d0dea31 100644 --- a/src/providers/WalletsProvider/WalletsProvider.js +++ b/src/providers/WalletsProvider/WalletsProvider.js @@ -41,8 +41,11 @@ export const WalletsProvider = ({children}) => { }; const connectL2Wallet = async walletConfig => { - await getStarknet().enable(!autoConnect && {showModal: true}); - setL2WalletConfig(walletConfig); + try { + await getStarknet().enable(!autoConnect && {showModal: true}); + setL2WalletConfig(walletConfig); + // eslint-disable-next-line no-empty + } catch {} }; const resetWallet = () => { From 06e3507c576a05a5c7cec94097c68026fcb045cf Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Thu, 14 Apr 2022 10:19:41 +0000 Subject: [PATCH 140/211] prerelease: v1.2.0-dev.3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [1.2.0-dev.3](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.0-dev.2...v1.2.0-dev.3) (2022-04-14) ### 🔧 Fixes * app crashed when trying to connect while ArgentX wasn't installed ([55e25f7](https://github.com/starkware-libs/starkgate-frontend/commit/55e25f769bb175c436fdbcaf8a7ad992891380b9)) * unsupported chain id does not showing ([#151](https://github.com/starkware-libs/starkgate-frontend/issues/151)) ([afa5294](https://github.com/starkware-libs/starkgate-frontend/commit/afa5294c5bdc428a7b0d4d569b0deefe884b54d8)) --- CHANGELOG.md | 8 ++++++++ package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f531ed6..6f45db76 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +## [1.2.0-dev.3](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.0-dev.2...v1.2.0-dev.3) (2022-04-14) + + +### 🔧 Fixes + +* app crashed when trying to connect while ArgentX wasn't installed ([55e25f7](https://github.com/starkware-libs/starkgate-frontend/commit/55e25f769bb175c436fdbcaf8a7ad992891380b9)) +* unsupported chain id does not showing ([#151](https://github.com/starkware-libs/starkgate-frontend/issues/151)) ([afa5294](https://github.com/starkware-libs/starkgate-frontend/commit/afa5294c5bdc428a7b0d4d569b0deefe884b54d8)) + ## [1.2.0-dev.2](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.0-dev.1...v1.2.0-dev.2) (2022-04-14) diff --git a/package.json b/package.json index 09d4169d..a105e375 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.2.0-dev.2", + "version": "1.2.0-dev.3", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 1e4afac22a575945a585a76505d49766ca4ba7c2 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Thu, 14 Apr 2022 13:32:03 +0300 Subject: [PATCH 141/211] fix: accept button stayed disabled when browser zoom is different from 100% (#158) --- src/routes/Terms/Terms.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/Terms/Terms.js b/src/routes/Terms/Terms.js index 6e3fceab..50486cf9 100644 --- a/src/routes/Terms/Terms.js +++ b/src/routes/Terms/Terms.js @@ -35,7 +35,7 @@ export const Terms = () => { const onScroll = () => { if (termsRef.current) { const {scrollTop, scrollHeight, clientHeight} = termsRef.current; - if (scrollTop + clientHeight === scrollHeight) { + if (Math.ceil(scrollTop + clientHeight) >= scrollHeight) { setAcceptButtonEnable(true); } } From e4220fcac76e7769a6b3a3129e3150168091b93f Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Thu, 14 Apr 2022 10:33:33 +0000 Subject: [PATCH 142/211] prerelease: v1.2.0-dev.4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [1.2.0-dev.4](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.0-dev.3...v1.2.0-dev.4) (2022-04-14) ### 🔧 Fixes * accept button stayed disabled when browser zoom is different from 100% ([#158](https://github.com/starkware-libs/starkgate-frontend/issues/158)) ([1e4afac](https://github.com/starkware-libs/starkgate-frontend/commit/1e4afac22a575945a585a76505d49766ca4ba7c2)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f45db76..e1594256 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [1.2.0-dev.4](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.0-dev.3...v1.2.0-dev.4) (2022-04-14) + + +### 🔧 Fixes + +* accept button stayed disabled when browser zoom is different from 100% ([#158](https://github.com/starkware-libs/starkgate-frontend/issues/158)) ([1e4afac](https://github.com/starkware-libs/starkgate-frontend/commit/1e4afac22a575945a585a76505d49766ca4ba7c2)) + ## [1.2.0-dev.3](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.0-dev.2...v1.2.0-dev.3) (2022-04-14) diff --git a/package.json b/package.json index a105e375..5928703c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.2.0-dev.3", + "version": "1.2.0-dev.4", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 8ae5b7a3a5e48eaee021c56ad43780666926557c Mon Sep 17 00:00:00 2001 From: guyvelleman <93535692+guyvelleman@users.noreply.github.com> Date: Tue, 12 Apr 2022 19:26:21 +0300 Subject: [PATCH 143/211] ci: add nginx configuration file for app routing (#150) --- Dockerfile.frontend | 4 ++++ nginx.conf | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 nginx.conf diff --git a/Dockerfile.frontend b/Dockerfile.frontend index 6cae4f90..07c6fecd 100644 --- a/Dockerfile.frontend +++ b/Dockerfile.frontend @@ -16,6 +16,10 @@ RUN yarn build:$BUILD_ENV # production environment FROM nginx:stable-alpine +# Delete default configuration file. +RUN rm /etc/nginx/conf.d/default.conf +# Copies static resources from builder stage COPY --from=build /app/build /usr/share/nginx/html +COPY ./nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 00000000..77437f5d --- /dev/null +++ b/nginx.conf @@ -0,0 +1,16 @@ +server { + listen 80; + listen [::]:80; + server_name localhost; + + location / { + root /usr/share/nginx/html; + try_files $uri /index.html; + index index.html index.htm; + } + + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } +} From 173d3c800a0d6647a8577e8981117caabab68286 Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Thu, 14 Apr 2022 10:41:55 +0000 Subject: [PATCH 144/211] release: v1.2.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [1.2.0](https://github.com/starkware-libs/starkgate-frontend/compare/v1.1.0...v1.2.0) (2022-04-14) ### 🧩 Features * terms of use ([#141](https://github.com/starkware-libs/starkgate-frontend/issues/141)) ([8d9fe79](https://github.com/starkware-libs/starkgate-frontend/commit/8d9fe7957e09c739e1e79801eaf507178854f944)) ### 🔧 Fixes * accept button stayed disabled when browser zoom is different from 100% ([#158](https://github.com/starkware-libs/starkgate-frontend/issues/158)) ([1e4afac](https://github.com/starkware-libs/starkgate-frontend/commit/1e4afac22a575945a585a76505d49766ca4ba7c2)) * app crashed when trying to connect while ArgentX wasn't installed ([55e25f7](https://github.com/starkware-libs/starkgate-frontend/commit/55e25f769bb175c436fdbcaf8a7ad992891380b9)) * **Faq:** question 8 ([#157](https://github.com/starkware-libs/starkgate-frontend/issues/157)) ([51da4aa](https://github.com/starkware-libs/starkgate-frontend/commit/51da4aa7f8d5045c4e5dea34e59cef20a12363b9)) * unsupported chain id does not showing ([#151](https://github.com/starkware-libs/starkgate-frontend/issues/151)) ([afa5294](https://github.com/starkware-libs/starkgate-frontend/commit/afa5294c5bdc428a7b0d4d569b0deefe884b54d8)) --- CHANGELOG.md | 15 +++++++++++++++ package.json | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e1594256..4ece442a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,18 @@ +## [1.2.0](https://github.com/starkware-libs/starkgate-frontend/compare/v1.1.0...v1.2.0) (2022-04-14) + + +### 🧩 Features + +* terms of use ([#141](https://github.com/starkware-libs/starkgate-frontend/issues/141)) ([8d9fe79](https://github.com/starkware-libs/starkgate-frontend/commit/8d9fe7957e09c739e1e79801eaf507178854f944)) + + +### 🔧 Fixes + +* accept button stayed disabled when browser zoom is different from 100% ([#158](https://github.com/starkware-libs/starkgate-frontend/issues/158)) ([1e4afac](https://github.com/starkware-libs/starkgate-frontend/commit/1e4afac22a575945a585a76505d49766ca4ba7c2)) +* app crashed when trying to connect while ArgentX wasn't installed ([55e25f7](https://github.com/starkware-libs/starkgate-frontend/commit/55e25f769bb175c436fdbcaf8a7ad992891380b9)) +* **Faq:** question 8 ([#157](https://github.com/starkware-libs/starkgate-frontend/issues/157)) ([51da4aa](https://github.com/starkware-libs/starkgate-frontend/commit/51da4aa7f8d5045c4e5dea34e59cef20a12363b9)) +* unsupported chain id does not showing ([#151](https://github.com/starkware-libs/starkgate-frontend/issues/151)) ([afa5294](https://github.com/starkware-libs/starkgate-frontend/commit/afa5294c5bdc428a7b0d4d569b0deefe884b54d8)) + ## [1.2.0-dev.4](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.0-dev.3...v1.2.0-dev.4) (2022-04-14) diff --git a/package.json b/package.json index 5928703c..e26c1406 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.2.0-dev.4", + "version": "1.2.0", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From b77ba118934e95859cb4409ba22be3c8ac25fd79 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Mon, 18 Apr 2022 15:52:26 +0300 Subject: [PATCH 145/211] refactor: move to hooks useConstants, useEnvs, useTranslation (#159) --- .eslintrc.js | 1 + src/components/Containers/Footer/Footer.js | 7 +- .../Containers/Footer/Footer.module.scss | 7 +- .../Containers/Footer/Footer.strings.js | 3 - src/components/Containers/Header/Header.js | 19 ++- .../Containers/Header/Header.module.scss | 12 +- .../Containers/Header/Header.strings.js | 6 - src/components/Features/Account/Account.js | 14 +-- .../Features/Account/Account.strings.js | 4 - .../Features/SelectToken/SelectToken.js | 6 +- .../SelectToken/SelectToken.module.scss | 3 - .../SelectToken/SelectToken.strings.js | 3 - .../Features/ToastProvider/ToastProvider.js | 6 +- .../ToastProvider/ToastProvider.strings.js | 3 - src/components/Features/Transfer/Transfer.js | 24 ++-- .../Features/Transfer/Transfer.module.scss | 7 +- .../Features/Transfer/Transfer.strings.js | 8 -- .../Features/TransferLog/TransferLog.js | 14 +-- .../TransferLog/TransferLog.module.scss | 11 +- .../TransferLog/TransferLog.strings.js | 5 - .../AccountAddress.constants.js | 1 - .../UI/AccountAddress/AccountAddress.js | 9 +- .../AccountAddress/AccountAddress.module.scss | 13 +- .../AccountAddress/AccountAddress.strings.js | 3 - src/components/UI/BackButton/BackButton.js | 16 ++- .../UI/BackButton/BackButton.module.scss | 10 +- .../UI/BackButton/BackButton.strings.js | 3 - src/components/UI/Badge/Badge.module.scss | 4 +- src/components/UI/Button/Button.js | 3 +- src/components/UI/Circle/Circle.module.scss | 6 +- .../UI/CryptoLogo/CryptoLogo.constants.js | 1 - .../UI/CryptoLogo/CryptoLogo.enums.js | 5 - src/components/UI/CryptoLogo/CryptoLogo.js | 9 +- src/components/UI/Input/Input.Module.scss | 7 +- .../UI/LinkButton/LinkButton.module.scss | 16 +-- src/components/UI/Loading/Loading.enums.js | 6 - src/components/UI/Loading/Loading.js | 7 ++ src/components/UI/Loading/Loading.module.scss | 4 +- .../UI/LogoutButton/LogoutButton.js | 6 +- .../UI/LogoutButton/LogoutButton.strings.js | 3 - src/components/UI/MaxButton/MaxButton.js | 16 ++- .../UI/MaxButton/MaxButton.module.scss | 4 +- .../UI/MaxButton/MaxButton.strings.js | 3 - .../UI/MenuTitle/MenuTitle.module.scss | 4 +- src/components/UI/Modal/Modal/Modal.js | 3 +- .../UI/Modal/Modal/Modal.module.scss | 10 +- .../UI/Modal/ModalBody/ModalBody.js | 2 +- .../UI/Modal/ModalBody/ModalBody.module.scss | 7 +- .../UI/Modal/ModalFooter/ModalFooter.js | 3 +- .../UI/Modal/ModalHeader/ModalHeader.js | 2 +- .../Modal/ModalHeader/ModalHeader.module.scss | 4 +- .../Modal/ModalMessage/TransferToL1Message.js | 8 +- src/components/UI/Modal/ModalWrapper.js | 11 +- .../Modal/OnboardingModal/OnboardingModal.js | 8 +- .../OnboardingModal.strings.js | 7 -- .../TransactionSubmittedModal.constants.js | 7 -- .../TransactionSubmittedModal.js | 28 ++--- .../TransactionSubmittedModal.strings.js | 9 -- src/components/UI/NetworkMenu/NetworkMenu.js | 6 +- .../UI/NetworkMenu/NetworkMenu.module.scss | 7 +- .../UI/NetworkMenu/NetworkMenu.strings.js | 6 - .../UI/NetworkTitle/NetworkTitle.js | 2 +- .../UI/NetworkTitle/NetworkTitle.module.scss | 4 +- .../UI/RefreshIcon/RefreshIcon.module.scss | 7 +- src/components/UI/SearchToken/SearchToken.js | 5 +- .../UI/SearchToken/SearchToken.module.scss | 4 +- .../UI/SearchToken/SearchToken.strings.js | 3 - .../UI/SelectTokenRow/SelectTokenRow.js | 5 +- .../SelectTokenRow/SelectTokenRow.module.scss | 19 +-- .../CompleteTransferToL1Toast.js | 19 ++- .../CompleteTransferToL1Toast.module.scss | 7 +- .../CompleteTransferToL1Toast.strings.js | 9 -- .../UI/Toast/ToastBody/ToastBody.module.scss | 4 +- .../UI/Toast/ToastFooter/ToastFooter.js | 6 +- .../Toast/ToastFooter/ToastFooter.module.scss | 4 +- .../Toast/ToastFooter/ToastFooter.strings.js | 3 - .../Toast/ToastHeader/ToastHeader.module.scss | 4 +- .../UI/Toast/TransferToast/TransferToast.js | 10 +- .../TransferToast/TransferToast.strings.js | 7 -- .../UI/TokenBalance/TokenBalance.js | 8 +- .../UI/TokenBalance/TokenBalance.module.scss | 7 +- .../UI/TokenBalance/TokenBalance.strings.js | 3 - src/components/UI/TokenInput/TokenInput.js | 38 +++--- .../UI/TokenInput/TokenInput.module.scss | 7 +- .../UI/TokenInput/TokenInput.strings.js | 3 - .../UI/TokenSelector/TokenSelector.js | 2 +- .../TokenSelector/TokenSelector.module.scss | 13 +- .../UI/TransferButton/TransferButton.js | 6 +- .../TransferButton/TransferButton.strings.js | 3 - .../TransferLogContainer.js | 18 ++- .../TransferLogContainer.module.scss | 13 +- .../TransferLogContainer.strings.js | 10 -- .../TransferMenuTab.module.scss | 13 +- .../UI/WalletButton/WalletButton.constants.js | 2 - .../UI/WalletButton/WalletButton.js | 10 +- .../UI/WalletButton/WalletButton.strings.js | 4 - .../UI/WalletLogin/WalletLogin.module.scss | 9 +- src/config/constants.js | 8 +- src/config/strings.js | 117 +++++++++--------- .../Modal.constants.js => enums/ModalSize.js} | 7 -- src/enums/ModalType.js | 6 + src/enums/index.js | 2 + src/hooks/index.js | 4 +- src/hooks/useConfig.js | 5 - src/hooks/useConstants.js | 5 + src/hooks/useContract.js | 5 +- src/hooks/useEnvs.js | 5 + src/hooks/useTransferProgress.js | 3 +- src/hooks/useTranslation.js | 5 + src/providers/AppProvider/AppProvider.js | 5 +- .../BlockHashProvider/BlockHashProvider.js | 4 +- src/providers/ModalProvider/modal-hooks.js | 10 +- .../TokensProvider/TokensProvider.js | 6 +- .../TransfersLogProvider.js | 6 +- .../WalletProvider/WalletProvider.js | 5 +- .../WalletsProvider/WalletsProvider.js | 4 +- src/routes/Bridge/Bridge.js | 5 +- src/routes/Bridge/Bridge.module.scss | 4 +- src/routes/Faq/Faq.js | 6 +- src/routes/Faq/Faq.strings.js | 5 - src/routes/Login/Login.constants.js | 2 - src/routes/Login/Login.js | 42 ++++--- src/routes/Login/Login.module.scss | 20 ++- src/routes/Login/Login.strings.js | 17 --- src/routes/Terms/Terms.js | 20 ++- src/routes/Terms/Terms.strings.js | 7 -- 126 files changed, 429 insertions(+), 652 deletions(-) delete mode 100644 src/components/Containers/Footer/Footer.strings.js delete mode 100644 src/components/Containers/Header/Header.strings.js delete mode 100644 src/components/Features/Account/Account.strings.js delete mode 100644 src/components/Features/SelectToken/SelectToken.strings.js delete mode 100644 src/components/Features/ToastProvider/ToastProvider.strings.js delete mode 100644 src/components/Features/Transfer/Transfer.strings.js delete mode 100644 src/components/Features/TransferLog/TransferLog.strings.js delete mode 100644 src/components/UI/AccountAddress/AccountAddress.constants.js delete mode 100644 src/components/UI/AccountAddress/AccountAddress.strings.js delete mode 100644 src/components/UI/BackButton/BackButton.strings.js delete mode 100644 src/components/UI/CryptoLogo/CryptoLogo.constants.js delete mode 100644 src/components/UI/CryptoLogo/CryptoLogo.enums.js delete mode 100644 src/components/UI/Loading/Loading.enums.js delete mode 100644 src/components/UI/LogoutButton/LogoutButton.strings.js delete mode 100644 src/components/UI/MaxButton/MaxButton.strings.js delete mode 100644 src/components/UI/Modal/OnboardingModal/OnboardingModal.strings.js delete mode 100644 src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.constants.js delete mode 100644 src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.strings.js delete mode 100644 src/components/UI/NetworkMenu/NetworkMenu.strings.js delete mode 100644 src/components/UI/SearchToken/SearchToken.strings.js delete mode 100644 src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.strings.js delete mode 100644 src/components/UI/Toast/ToastFooter/ToastFooter.strings.js delete mode 100644 src/components/UI/Toast/TransferToast/TransferToast.strings.js delete mode 100644 src/components/UI/TokenBalance/TokenBalance.strings.js delete mode 100644 src/components/UI/TokenInput/TokenInput.strings.js delete mode 100644 src/components/UI/TransferButton/TransferButton.strings.js delete mode 100644 src/components/UI/TransferLogContainer/TransferLogContainer.strings.js delete mode 100644 src/components/UI/WalletButton/WalletButton.constants.js delete mode 100644 src/components/UI/WalletButton/WalletButton.strings.js rename src/{components/UI/Modal/Modal/Modal.constants.js => enums/ModalSize.js} (61%) create mode 100644 src/enums/ModalType.js delete mode 100644 src/hooks/useConfig.js create mode 100644 src/hooks/useConstants.js create mode 100644 src/hooks/useEnvs.js create mode 100644 src/hooks/useTranslation.js delete mode 100644 src/routes/Faq/Faq.strings.js delete mode 100644 src/routes/Login/Login.constants.js delete mode 100644 src/routes/Login/Login.strings.js delete mode 100644 src/routes/Terms/Terms.strings.js diff --git a/.eslintrc.js b/.eslintrc.js index ae670f2b..bf41fc46 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -39,6 +39,7 @@ module.exports = { 'no-confusing-arrow': ['error', {allowParens: true}], 'no-console': 'warn', 'no-var': 'warn', + 'no-unused-vars': 'error', 'object-shorthand': 'error', 'prefer-const': 'warn', 'prefer-template': 'warn', diff --git a/src/components/Containers/Footer/Footer.js b/src/components/Containers/Footer/Footer.js index f67e92e8..8e3f50ce 100644 --- a/src/components/Containers/Footer/Footer.js +++ b/src/components/Containers/Footer/Footer.js @@ -1,16 +1,17 @@ import React from 'react'; import useBreakpoint from 'use-breakpoint'; -import {isMobile, Breakpoint} from '../../../enums'; +import {Breakpoint, isMobile} from '../../../enums'; +import {useTranslation} from '../../../hooks'; import styles from './Footer.module.scss'; -import {RIGHTS_TXT} from './Footer.strings'; export const Footer = () => { + const {rightsTxt} = useTranslation('containers.footer'); const {breakpoint} = useBreakpoint(Breakpoint); return !isMobile(breakpoint) ? ( <footer className={styles.footer}> - <div className={styles.copyright}>{RIGHTS_TXT}</div> + <div className={styles.copyright}>{rightsTxt}</div> </footer> ) : null; }; diff --git a/src/components/Containers/Footer/Footer.module.scss b/src/components/Containers/Footer/Footer.module.scss index 1d0139cf..74d47e77 100644 --- a/src/components/Containers/Footer/Footer.module.scss +++ b/src/components/Containers/Footer/Footer.module.scss @@ -1,11 +1,8 @@ @import '../../../index'; -$height: $--footer-height; -$copyright-color: $--color-beta; - .footer { font-size: 13px; - height: #{$height}px; + height: #{$--footer-height}px; border-top: 1px solid transparent; width: 100%; display: flex; @@ -19,7 +16,7 @@ $copyright-color: $--color-beta; background: transparent; .copyright { - color: $copyright-color; + color: $--color-beta; font-size: 12px; line-height: 24px; } diff --git a/src/components/Containers/Footer/Footer.strings.js b/src/components/Containers/Footer/Footer.strings.js deleted file mode 100644 index 47454e13..00000000 --- a/src/components/Containers/Footer/Footer.strings.js +++ /dev/null @@ -1,3 +0,0 @@ -import utils from '../../../utils'; - -export const RIGHTS_TXT = utils.getTranslation('containers.footer.rights_txt'); diff --git a/src/components/Containers/Header/Header.js b/src/components/Containers/Header/Header.js index 6fd6b57f..258c3e0c 100644 --- a/src/components/Containers/Header/Header.js +++ b/src/components/Containers/Header/Header.js @@ -4,10 +4,8 @@ import useBreakpoint from 'use-breakpoint'; import {track} from '../../../analytics'; import {ReactComponent as StarkGateLogo} from '../../../assets/img/starkgate.svg'; -import constants from '../../../config/constants'; -import envs from '../../../config/envs'; import {Breakpoint} from '../../../enums'; -import {useColors} from '../../../hooks'; +import {useColors, useConstants, useEnvs, useTranslation} from '../../../hooks'; import {useLogin} from '../../../providers/AppProvider'; import {useMenu} from '../../../providers/MenuProvider'; import {useIsL1, useIsL2} from '../../../providers/TransferProvider'; @@ -15,12 +13,11 @@ import {useL1Wallet, useL2Wallet} from '../../../providers/WalletsProvider'; import utils from '../../../utils'; import {Tab, WalletButton} from '../../UI'; import styles from './Header.module.scss'; -import {CHAIN_TXT, TAB_DISCORD_TXT, TAB_FAQ_TXT, TAB_TERMS_TXT} from './Header.strings'; - -const {DISCORD_LINK_URL} = constants; -const {env} = envs; export const Header = () => { + const {DISCORD_LINK_URL} = useConstants(); + const {env} = useEnvs(); + const {tabDiscordTxt, tabFaqTxt, tabTermsTxt, chainTxt} = useTranslation('containers.header'); const navigate = useNavigate(); const {pathname} = useLocation(); const {showAccountMenu, showTransferMenu} = useMenu(); @@ -73,13 +70,13 @@ export const Header = () => { <StarkGateLogo /> </div> {env !== 'production' && ( - <div className={utils.object.toClasses(styles.chain, 'row')}>{CHAIN_TXT}</div> + <div className={utils.object.toClasses(styles.chain, 'row')}>{chainTxt}</div> )} </div> <div className={utils.object.toClasses(styles.right, 'row')}> - <Tab color={colorDiscord} label={TAB_DISCORD_TXT} onClick={onTabDiscordClick} /> - <Tab color={colorWhiteOp50} label={TAB_TERMS_TXT} onClick={onTabTermsClick} /> - <Tab color={colorWhiteOp50} label={TAB_FAQ_TXT} onClick={onTabFaqClick} /> + <Tab color={colorDiscord} label={tabDiscordTxt} onClick={onTabDiscordClick} /> + <Tab color={colorWhiteOp50} label={tabTermsTxt} onClick={onTabTermsClick} /> + <Tab color={colorWhiteOp50} label={tabFaqTxt} onClick={onTabFaqClick} /> {isLoggedIn && ( <WalletButton account={l1Account} diff --git a/src/components/Containers/Header/Header.module.scss b/src/components/Containers/Header/Header.module.scss index 188fdfbc..a99a92ef 100644 --- a/src/components/Containers/Header/Header.module.scss +++ b/src/components/Containers/Header/Header.module.scss @@ -1,14 +1,10 @@ @import '../../../index'; -$height: $--header-height; -$background-color: $--color-alpha-5; -$chain-color: $--color-white-1; - .header { - height: #{$height}px; + height: #{$--header-height}px; border-bottom: 1px solid transparent; justify-content: space-between; - background: $background-color; + background: $--color-alpha-5; box-shadow: 0 4px 30px rgba(0, 0, 0, 0.05); transition: 0.3s ease-in-out; position: absolute; @@ -35,7 +31,7 @@ $chain-color: $--color-white-1; .chain { transition: 0.3s ease-in-out; - color: $chain-color; + color: $--color-white-1; font-size: 13px; font-weight: 500; opacity: 0.6; @@ -56,7 +52,7 @@ $chain-color: $--color-white-1; } &.mobile { - height: #{$height - 10}px; + height: #{$--header-height - 10}px; .left { .logo { diff --git a/src/components/Containers/Header/Header.strings.js b/src/components/Containers/Header/Header.strings.js deleted file mode 100644 index c797f5a9..00000000 --- a/src/components/Containers/Header/Header.strings.js +++ /dev/null @@ -1,6 +0,0 @@ -import utils from '../../../utils'; - -export const CHAIN_TXT = utils.getTranslation('containers.header.chain_txt'); -export const TAB_DISCORD_TXT = utils.getTranslation('containers.header.tab_discord_txt'); -export const TAB_FAQ_TXT = utils.getTranslation('containers.header.tab_faq_txt'); -export const TAB_TERMS_TXT = utils.getTranslation('containers.header.tab_terms_txt'); diff --git a/src/components/Features/Account/Account.js b/src/components/Features/Account/Account.js index 1090e8e6..45522187 100644 --- a/src/components/Features/Account/Account.js +++ b/src/components/Features/Account/Account.js @@ -2,9 +2,7 @@ import PropTypes from 'prop-types'; import React from 'react'; import {track, TrackEvent} from '../../../analytics'; -import constants from '../../../config/constants'; -import envs from '../../../config/envs'; -import {useCompleteTransferToL1} from '../../../hooks'; +import {useCompleteTransferToL1, useConstants, useEnvs, useTranslation} from '../../../hooks'; import {useMenu} from '../../../providers/MenuProvider'; import {useTransfer} from '../../../providers/TransferProvider'; import {useAccountTransfersLog} from '../../../providers/TransfersLogProvider'; @@ -20,13 +18,11 @@ import { } from '../../UI'; import {LinkButton} from '../../UI/LinkButton/LinkButton'; import {TransferLog} from '../TransferLog/TransferLog'; -import {TITLE_TXT} from './Account.strings'; - -const {etherscanAccountUrl, voyagerAccountUrl} = envs; - -const {ETHERSCAN, VOYAGER} = constants; export const Account = ({transferId}) => { + const {titleTxt} = useTranslation('menus.account'); + const {etherscanAccountUrl, voyagerAccountUrl} = useEnvs(); + const {ETHERSCAN, VOYAGER} = useConstants(); const {showTransferMenu} = useMenu(); const {account, resetWallet} = useWallets(); const {isL1, isL2, fromNetwork} = useTransfer(); @@ -71,7 +67,7 @@ export const Account = ({transferId}) => { <Menu> <div> <BackButton onClick={() => showTransferMenu()} /> - <MenuTitle text={TITLE_TXT(fromNetwork.name)} /> + <MenuTitle text={utils.object.evaluate(titleTxt, {network: fromNetwork.name})} /> <AccountAddress address={account} onClick={onAccountAddressClick} /> {isL1 && ( <LinkButton diff --git a/src/components/Features/Account/Account.strings.js b/src/components/Features/Account/Account.strings.js deleted file mode 100644 index 4e104e7e..00000000 --- a/src/components/Features/Account/Account.strings.js +++ /dev/null @@ -1,4 +0,0 @@ -import utils from '../../../utils'; - -export const TITLE_TXT = network => - utils.object.evaluate(utils.getTranslation('menus.account.title_txt'), {network}); diff --git a/src/components/Features/SelectToken/SelectToken.js b/src/components/Features/SelectToken/SelectToken.js index 05351d75..b391b560 100644 --- a/src/components/Features/SelectToken/SelectToken.js +++ b/src/components/Features/SelectToken/SelectToken.js @@ -3,15 +3,15 @@ import React, {useEffect, useState} from 'react'; import {track, TrackEvent} from '../../../analytics'; import L1Logo from '../../../assets/svg/tokens/eth.svg'; import L2Logo from '../../../assets/svg/tokens/starknet.svg'; -import {useColors} from '../../../hooks'; +import {useColors, useTranslation} from '../../../hooks'; import {useMenu} from '../../../providers/MenuProvider'; import {useTokens} from '../../../providers/TokensProvider'; import {useTransfer} from '../../../providers/TransferProvider'; import {BackButton, Menu, MenuTitle, RefreshIcon, SearchToken, SelectTokenList} from '../../UI'; import styles from './SelectToken.module.scss'; -import {TITLE_TXT} from './SelectToken.strings'; export const SelectToken = () => { + const {titleTxt} = useTranslation('menus.selectToken'); const {tokens, updateTokenBalance} = useTokens(); const {colorBeta} = useColors(); const {showTransferMenu} = useMenu(); @@ -34,7 +34,7 @@ export const SelectToken = () => { <Menu> <div className={styles.selectToken}> <BackButton onClick={() => showTransferMenu()} /> - <MenuTitle text={TITLE_TXT} /> + <MenuTitle text={titleTxt} /> <div className={styles.name}> <MenuTitle color={colorBeta} text={fromNetwork.name} /> <RefreshIcon onClick={updateTokenBalance} /> diff --git a/src/components/Features/SelectToken/SelectToken.module.scss b/src/components/Features/SelectToken/SelectToken.module.scss index b36049fe..d4486f74 100644 --- a/src/components/Features/SelectToken/SelectToken.module.scss +++ b/src/components/Features/SelectToken/SelectToken.module.scss @@ -1,8 +1,5 @@ @import '../../../index'; -$color: $--color-white; -$network-color: $--color-beta; - .selectToken { padding: 0 20px; position: relative; diff --git a/src/components/Features/SelectToken/SelectToken.strings.js b/src/components/Features/SelectToken/SelectToken.strings.js deleted file mode 100644 index 7a47146e..00000000 --- a/src/components/Features/SelectToken/SelectToken.strings.js +++ /dev/null @@ -1,3 +0,0 @@ -import utils from '../../../utils'; - -export const TITLE_TXT = utils.getTranslation('menus.selectToken.title_txt'); diff --git a/src/components/Features/ToastProvider/ToastProvider.js b/src/components/Features/ToastProvider/ToastProvider.js index e28b388d..44117e1f 100644 --- a/src/components/Features/ToastProvider/ToastProvider.js +++ b/src/components/Features/ToastProvider/ToastProvider.js @@ -14,19 +14,19 @@ import { NetworkType, ToastType } from '../../../enums'; -import {useCompleteTransferToL1, usePrevious} from '../../../hooks'; +import {useCompleteTransferToL1, usePrevious, useTranslation} from '../../../hooks'; import {useMenu} from '../../../providers/MenuProvider'; import {useIsL1, useIsL2} from '../../../providers/TransferProvider'; import {useTransfersLog} from '../../../providers/TransfersLogProvider'; import utils from '../../../utils'; import {CompleteTransferToL1Toast, ToastBody, TransferToast} from '../../UI'; import styles from './ToastProvider.module.scss'; -import {ALPHA_DISCLAIMER_MSG} from './ToastProvider.strings'; const toastsMap = {}; const toastsDismissed = {}; export const ToastProvider = () => { + const {alphaDisclaimerMsg} = useTranslation('toasts'); const {transfers} = useTransfersLog(); const prevTransfers = usePrevious(transfers); const completeTransferToL1 = useCompleteTransferToL1(); @@ -61,7 +61,7 @@ export const ToastProvider = () => { }; const showAlphaDisclaimerToast = () => { - toast.success(ALPHA_DISCLAIMER_MSG, { + toast.success(alphaDisclaimerMsg, { id: 'alphaDisclaimer', position: isMobile(breakpoint) ? 'bottom-center' : 'bottom-left', icon: '❗' diff --git a/src/components/Features/ToastProvider/ToastProvider.strings.js b/src/components/Features/ToastProvider/ToastProvider.strings.js deleted file mode 100644 index 02f64783..00000000 --- a/src/components/Features/ToastProvider/ToastProvider.strings.js +++ /dev/null @@ -1,3 +0,0 @@ -import utils from '../../../utils'; - -export const ALPHA_DISCLAIMER_MSG = utils.getTranslation('toasts.alpha_disclaimer_msg'); diff --git a/src/components/Features/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer.js index b1619c3a..c8515ee2 100644 --- a/src/components/Features/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer.js @@ -2,13 +2,14 @@ import React, {useEffect, useState} from 'react'; import {track, TrackEvent} from '../../../analytics'; import {ActionType, NetworkType} from '../../../enums'; -import {useMaxDeposit, useTransferToL1, useTransferToL2} from '../../../hooks'; +import {useMaxDeposit, useTransferToL1, useTransferToL2, useTranslation} from '../../../hooks'; import {useMenu} from '../../../providers/MenuProvider'; import {useL1Token, useL2Token, useTokens} from '../../../providers/TokensProvider'; import {useAmount, useIsL1, useIsL2, useTransfer} from '../../../providers/TransferProvider'; import utils from '../../../utils'; import { Loading, + LoadingSize, Menu, NetworkMenu, NetworkSwap, @@ -16,16 +17,15 @@ import { TransferButton, TransferMenuTab } from '../../UI'; -import {LoadingSize} from '../../UI/Loading/Loading.enums'; import styles from './Transfer.module.scss'; -import { - INSUFFICIENT_BALANCE_ERROR_MSG, - MAX_DEPOSIT_ERROR_MSG, - NEGATIVE_VALUE_ERROR_MSG, - TOO_MANY_DIGITS_ERROR_MSG -} from './Transfer.strings'; export const Transfer = () => { + const { + insufficientBalanceErrorMsg, + maxDepositErrorMsg, + tooManyDigitsErrorMsg, + negativeValueErrorMsg + } = useTranslation('menus.transfer'); const [isL1, swapToL1] = useIsL1(); const [isL2, swapToL2] = useIsL2(); const [amount, setAmount] = useAmount(); @@ -62,13 +62,13 @@ export const Transfer = () => { let errorMsg = ''; if (utils.number.afterDecimal(amount) > selectedToken.decimals) { - errorMsg = TOO_MANY_DIGITS_ERROR_MSG; + errorMsg = tooManyDigitsErrorMsg; } else if (utils.number.isNegative(amount)) { - errorMsg = NEGATIVE_VALUE_ERROR_MSG; + errorMsg = negativeValueErrorMsg; } else if (amount > selectedToken.balance) { - errorMsg = INSUFFICIENT_BALANCE_ERROR_MSG; + errorMsg = insufficientBalanceErrorMsg; } else if (isL1 && amount > maxDeposit) { - errorMsg = MAX_DEPOSIT_ERROR_MSG; + errorMsg = maxDepositErrorMsg; } if (errorMsg) { diff --git a/src/components/Features/Transfer/Transfer.module.scss b/src/components/Features/Transfer/Transfer.module.scss index dc8ca23d..47f40931 100644 --- a/src/components/Features/Transfer/Transfer.module.scss +++ b/src/components/Features/Transfer/Transfer.module.scss @@ -1,14 +1,11 @@ @import '../../../index'; -$background-color: $--color-alpha-1; -$error-msg-color: $--color-error; - .transfer { transition: 0.3s ease-in-out; .tabsContainer { display: flex; - background: $background-color; + background: $--color-alpha-1; border-radius: 10px; padding: 10px; } @@ -16,6 +13,6 @@ $error-msg-color: $--color-error; .errorMsg { font-size: 12px; line-height: 24px; - color: $error-msg-color; + color: $--color-error; } } diff --git a/src/components/Features/Transfer/Transfer.strings.js b/src/components/Features/Transfer/Transfer.strings.js deleted file mode 100644 index 2f6b47df..00000000 --- a/src/components/Features/Transfer/Transfer.strings.js +++ /dev/null @@ -1,8 +0,0 @@ -import utils from '../../../utils'; - -export const { - insufficient_balance_error_msg: INSUFFICIENT_BALANCE_ERROR_MSG, - max_deposit_error_msg: MAX_DEPOSIT_ERROR_MSG, - too_many_digits_error_msg: TOO_MANY_DIGITS_ERROR_MSG, - negative_value_error_msg: NEGATIVE_VALUE_ERROR_MSG -} = utils.getTranslation('menus.transfer'); diff --git a/src/components/Features/TransferLog/TransferLog.js b/src/components/Features/TransferLog/TransferLog.js index 2777962a..07eda91f 100644 --- a/src/components/Features/TransferLog/TransferLog.js +++ b/src/components/Features/TransferLog/TransferLog.js @@ -1,7 +1,6 @@ import PropTypes from 'prop-types'; import React, {useEffect, useState} from 'react'; -import envs from '../../../config/envs'; import { isOnChain, isRejected, @@ -10,18 +9,15 @@ import { TransactionStatusFriendlyMessage, TransactionStatusStep } from '../../../enums'; -import {useColors} from '../../../hooks'; +import {useColors, useEnvs, useTranslation} from '../../../hooks'; import {useTransfer} from '../../../providers/TransferProvider'; import utils from '../../../utils'; -import {Button, CryptoLogo} from '../../UI'; -import {CryptoLogoSize} from '../../UI/CryptoLogo/CryptoLogo.enums'; +import {Button, CryptoLogo, CryptoLogoSize} from '../../UI'; import {LinkButton} from '../../UI/LinkButton/LinkButton'; import styles from './TransferLog.module.scss'; -import {COMPLETE_TRANSFER_BTN_TXT} from './TransferLog.strings'; - -const {voyagerTxUrl, etherscanTxUrl} = envs; export const TransferLog = ({transfer, onCompleteTransferClick, onTxClick}) => { + const {voyagerTxUrl, etherscanTxUrl} = useEnvs(); const {symbol, timestamp, name, amount, status, l1hash, l2hash} = transfer; const [sign, setSign] = useState(''); const {action, isL1} = useTransfer(); @@ -91,7 +87,9 @@ export const TransferLog = ({transfer, onCompleteTransferClick, onTxClick}) => { }; const CompleteTransferButton = ({onClick}) => { + const {completeTransferBtnTxt} = useTranslation('menus.account.transferLogContainer.transferLog'); const {colorBeta} = useColors(); + return ( <Button colorBackground="transparent" @@ -102,7 +100,7 @@ const CompleteTransferButton = ({onClick}) => { fontSize: '12px', padding: '14px' }} - text={COMPLETE_TRANSFER_BTN_TXT} + text={completeTransferBtnTxt} onClick={onClick} /> ); diff --git a/src/components/Features/TransferLog/TransferLog.module.scss b/src/components/Features/TransferLog/TransferLog.module.scss index b2fb48bb..b255e807 100644 --- a/src/components/Features/TransferLog/TransferLog.module.scss +++ b/src/components/Features/TransferLog/TransferLog.module.scss @@ -1,10 +1,5 @@ @import '../../../index'; -$color: $--color-alpha-6; -$hr-color: $--color-alpha-3; -$error-color: $--color-error; -$marker-color: $--color-beta-1; - .transferLog { display: flex; flex-direction: row; @@ -39,10 +34,10 @@ $marker-color: $--color-beta-1; .data { font-size: 13px; - color: $color; + color: $--color-alpha-6; &.error { - color: $error-color; + color: $--color-error; } } @@ -56,6 +51,6 @@ hr { &:not(:last-child) { display: block; - border: 1px solid $hr-color; + border: 1px solid $--color-alpha-3; } } diff --git a/src/components/Features/TransferLog/TransferLog.strings.js b/src/components/Features/TransferLog/TransferLog.strings.js deleted file mode 100644 index bde1cb8e..00000000 --- a/src/components/Features/TransferLog/TransferLog.strings.js +++ /dev/null @@ -1,5 +0,0 @@ -import utils from '../../../utils'; - -export const COMPLETE_TRANSFER_BTN_TXT = utils.getTranslation( - 'menus.account.transferLogContainer.transferLog.complete_transfer_btn_txt' -); diff --git a/src/components/UI/AccountAddress/AccountAddress.constants.js b/src/components/UI/AccountAddress/AccountAddress.constants.js deleted file mode 100644 index dfae1c26..00000000 --- a/src/components/UI/AccountAddress/AccountAddress.constants.js +++ /dev/null @@ -1 +0,0 @@ -export const COPIED_ANIMATION_TIMEOUT_INTERVAL = 1000; diff --git a/src/components/UI/AccountAddress/AccountAddress.js b/src/components/UI/AccountAddress/AccountAddress.js index a5c51174..d350c70d 100644 --- a/src/components/UI/AccountAddress/AccountAddress.js +++ b/src/components/UI/AccountAddress/AccountAddress.js @@ -2,13 +2,14 @@ import PropTypes from 'prop-types'; import React, {useRef} from 'react'; import {ReactComponent as CopyIcon} from '../../../assets/svg/icons/copy.svg'; -import {useAnimation} from '../../../hooks'; +import {useAnimation, useTranslation} from '../../../hooks'; import utils from '../../../utils'; -import {COPIED_ANIMATION_TIMEOUT_INTERVAL} from './AccountAddress.constants'; import styles from './AccountAddress.module.scss'; -import {COPIED_MSG_TXT} from './AccountAddress.strings'; + +const COPIED_ANIMATION_TIMEOUT_INTERVAL = 1000; export const AccountAddress = ({address, onClick}) => { + const {copiedMsgTxt} = useTranslation('menus.account'); const [isAnimate, startAnimation] = useAnimation(COPIED_ANIMATION_TIMEOUT_INTERVAL); const ref = useRef(); @@ -26,7 +27,7 @@ export const AccountAddress = ({address, onClick}) => { <CopyIcon onClick={onCopyClick} /> </div> <div className={utils.object.toClasses(styles.copiedMsg, isAnimate && styles.copied)}> - {COPIED_MSG_TXT} + {copiedMsgTxt} </div> </> ); diff --git a/src/components/UI/AccountAddress/AccountAddress.module.scss b/src/components/UI/AccountAddress/AccountAddress.module.scss index 80d9d775..13737e5f 100644 --- a/src/components/UI/AccountAddress/AccountAddress.module.scss +++ b/src/components/UI/AccountAddress/AccountAddress.module.scss @@ -1,13 +1,8 @@ @import '../../../index'; -$background-color: $--color-alpha-3; -$color: $--color-white-1; -$path-stroke-color-hover: $--color-gamma; -$msg-color: $--color-gamma-1; - .accountAddress { - background: $background-color; - color: $color; + background: $--color-alpha-3; + color: $--color-white-1; padding: 7px 10px 7px 15px; border-radius: 7px; font-size: 16px; @@ -21,7 +16,7 @@ $msg-color: $--color-gamma-1; &:hover { path { - stroke: $path-stroke-color-hover; + stroke: $--color-gamma; } } } @@ -30,7 +25,7 @@ $msg-color: $--color-gamma-1; .copiedMsg { opacity: 0; transition: 0.3s ease-in-out; - color: $msg-color; + color: $--color-gamma-1; font-size: 13px; float: right; text-transform: capitalize; diff --git a/src/components/UI/AccountAddress/AccountAddress.strings.js b/src/components/UI/AccountAddress/AccountAddress.strings.js deleted file mode 100644 index 18044439..00000000 --- a/src/components/UI/AccountAddress/AccountAddress.strings.js +++ /dev/null @@ -1,3 +0,0 @@ -import utils from '../../../utils'; - -export const COPIED_MSG_TXT = utils.getTranslation('menus.account.copied_msg_txt'); diff --git a/src/components/UI/BackButton/BackButton.js b/src/components/UI/BackButton/BackButton.js index 49e9608b..3583bc6e 100644 --- a/src/components/UI/BackButton/BackButton.js +++ b/src/components/UI/BackButton/BackButton.js @@ -2,14 +2,18 @@ import PropTypes from 'prop-types'; import React from 'react'; import {ReactComponent as BackIcon} from '../../../assets/svg/icons/back.svg'; +import {useTranslation} from '../../../hooks'; import styles from './BackButton.module.scss'; -import {BTN_TXT} from './BackButton.strings'; -export const BackButton = ({onClick}) => ( - <div className={styles.backButton} onClick={onClick}> - <BackIcon /> {BTN_TXT} - </div> -); +export const BackButton = ({onClick}) => { + const {backBtnTxt} = useTranslation('menus'); + + return ( + <div className={styles.backButton} onClick={onClick}> + <BackIcon /> {backBtnTxt} + </div> + ); +}; BackButton.propTypes = { onClick: PropTypes.func diff --git a/src/components/UI/BackButton/BackButton.module.scss b/src/components/UI/BackButton/BackButton.module.scss index 13f0dc51..4ba3f7d3 100644 --- a/src/components/UI/BackButton/BackButton.module.scss +++ b/src/components/UI/BackButton/BackButton.module.scss @@ -1,15 +1,11 @@ @import '../../../index'; -$color: $--color-alpha-6; -$hover-color: $--color-alpha-6-hover; -$svg-hover-fill-color: $--color-alpha-6-hover; - .backButton { display: flex; align-items: center; font-size: 14px; text-transform: capitalize; - color: $color; + color: $--color-alpha-6; margin: 20px 0; cursor: pointer; transition: 0.3s ease-in-out; @@ -19,11 +15,11 @@ $svg-hover-fill-color: $--color-alpha-6-hover; } &:hover { - color: $hover-color; + color: $--color-alpha-6-hover; svg { path { - fill: $svg-hover-fill-color; + fill: $--color-alpha-6-hover; } } } diff --git a/src/components/UI/BackButton/BackButton.strings.js b/src/components/UI/BackButton/BackButton.strings.js deleted file mode 100644 index 35101268..00000000 --- a/src/components/UI/BackButton/BackButton.strings.js +++ /dev/null @@ -1,3 +0,0 @@ -import utils from '../../../utils'; - -export const BTN_TXT = utils.getTranslation('menus.back_btn_txt'); diff --git a/src/components/UI/Badge/Badge.module.scss b/src/components/UI/Badge/Badge.module.scss index c75b6fb1..17807d73 100644 --- a/src/components/UI/Badge/Badge.module.scss +++ b/src/components/UI/Badge/Badge.module.scss @@ -1,9 +1,7 @@ @import '../../../index'; -$background-color: $--color-gamma; - .badge { - background: $background-color; + background: $--color-gamma; border-radius: 3px; text-transform: uppercase; font-weight: bold; diff --git a/src/components/UI/Button/Button.js b/src/components/UI/Button/Button.js index 371bf206..5a61d3f1 100644 --- a/src/components/UI/Button/Button.js +++ b/src/components/UI/Button/Button.js @@ -2,8 +2,7 @@ import PropTypes from 'prop-types'; import React, {useState} from 'react'; import utils from '../../../utils'; -import {Loading} from '../Loading/Loading'; -import {LoadingSize} from '../Loading/Loading.enums'; +import {Loading, LoadingSize} from '../Loading/Loading'; import styles from './Button.module.scss'; export const Button = ({ diff --git a/src/components/UI/Circle/Circle.module.scss b/src/components/UI/Circle/Circle.module.scss index cf218b94..6e130b68 100644 --- a/src/components/UI/Circle/Circle.module.scss +++ b/src/components/UI/Circle/Circle.module.scss @@ -1,11 +1,9 @@ @import '../../../index'; -$default-background-color: linear-gradient(0deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.2)), - $--color-white; - .circle { margin: 0 10px 0 0; - background: $default-background-color; + background: linear-gradient(0deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.2)), + $--color-white; border-radius: 50%; display: flex; } diff --git a/src/components/UI/CryptoLogo/CryptoLogo.constants.js b/src/components/UI/CryptoLogo/CryptoLogo.constants.js deleted file mode 100644 index 2ebfd571..00000000 --- a/src/components/UI/CryptoLogo/CryptoLogo.constants.js +++ /dev/null @@ -1 +0,0 @@ -export const CIRCLE_LOGO_SIZE_DIFF = 14; diff --git a/src/components/UI/CryptoLogo/CryptoLogo.enums.js b/src/components/UI/CryptoLogo/CryptoLogo.enums.js deleted file mode 100644 index 6c42316b..00000000 --- a/src/components/UI/CryptoLogo/CryptoLogo.enums.js +++ /dev/null @@ -1,5 +0,0 @@ -export const CryptoLogoSize = { - SMALL: 30, - MEDIUM: 50, - LARGE: 70 -}; diff --git a/src/components/UI/CryptoLogo/CryptoLogo.js b/src/components/UI/CryptoLogo/CryptoLogo.js index b9bc6d0b..89a83052 100644 --- a/src/components/UI/CryptoLogo/CryptoLogo.js +++ b/src/components/UI/CryptoLogo/CryptoLogo.js @@ -3,9 +3,16 @@ import React from 'react'; import {Circle} from '../Circle/Circle'; import {DynamicIcon} from '../DynamicIcon/DynamicIcon'; -import {CIRCLE_LOGO_SIZE_DIFF} from './CryptoLogo.constants'; import styles from './CryptoLogo.module.scss'; +const CIRCLE_LOGO_SIZE_DIFF = 14; + +export const CryptoLogoSize = { + SMALL: 30, + MEDIUM: 50, + LARGE: 70 +}; + export const CryptoLogo = ({symbol, color, size}) => { return symbol ? ( <Circle color={color} size={size}> diff --git a/src/components/UI/Input/Input.Module.scss b/src/components/UI/Input/Input.Module.scss index e58a79ee..42680abd 100644 --- a/src/components/UI/Input/Input.Module.scss +++ b/src/components/UI/Input/Input.Module.scss @@ -1,11 +1,8 @@ @import '../../../index'; -$font: $--primary-font; -$color: $--color-white; - input { &.input { - font-family: $font; + font-family: $--primary-font; background-color: transparent; padding: 5px; border-radius: 5px; @@ -13,7 +10,7 @@ input { font-size: 15px; line-height: 24px; outline: none; - color: $color; + color: $--color-white; transition: all 0.3s ease-out; display: inline-block; max-width: 100%; diff --git a/src/components/UI/LinkButton/LinkButton.module.scss b/src/components/UI/LinkButton/LinkButton.module.scss index 1b7517cc..f12400b2 100644 --- a/src/components/UI/LinkButton/LinkButton.module.scss +++ b/src/components/UI/LinkButton/LinkButton.module.scss @@ -1,16 +1,10 @@ @import '../../../index'; -$color: $--color-gamma-1; -$border-color: $--color-gamma-1; -$color-hover: $--color-gamma; -$border-color-hover: $--color-gamma; -$path-fill-color-hover: $--color-gamma; - .linkButton { - color: $color; + color: $--color-gamma-1; padding: 3px 10px; border-radius: 7px; - border-color: $border-color; + border-color: $--color-gamma-1; border-style: solid; border-width: 1px; font-size: 12px; @@ -29,12 +23,12 @@ $path-fill-color-hover: $--color-gamma; } &:hover { - color: $color-hover; - border-color: $border-color-hover; + color: $--color-gamma; + border-color: $--color-gamma; svg { path { - fill: $path-fill-color-hover; + fill: $--color-gamma; } } } diff --git a/src/components/UI/Loading/Loading.enums.js b/src/components/UI/Loading/Loading.enums.js deleted file mode 100644 index f8170d15..00000000 --- a/src/components/UI/Loading/Loading.enums.js +++ /dev/null @@ -1,6 +0,0 @@ -export const LoadingSize = { - SMALL: 20, - MEDIUM: 50, - LARGE: 70, - XL: 110 -}; diff --git a/src/components/UI/Loading/Loading.js b/src/components/UI/Loading/Loading.js index eff89510..43c1df03 100644 --- a/src/components/UI/Loading/Loading.js +++ b/src/components/UI/Loading/Loading.js @@ -4,6 +4,13 @@ import React, {useEffect, useState} from 'react'; import {Keyframes} from '../KeyFrames/KeyFrames'; import styles from './Loading.module.scss'; +export const LoadingSize = { + SMALL: 20, + MEDIUM: 50, + LARGE: 70, + XL: 110 +}; + export const Loading = ({size, color}) => { const [keyFrameSize, setKeyFrameSize] = useState(size - size / 10); diff --git a/src/components/UI/Loading/Loading.module.scss b/src/components/UI/Loading/Loading.module.scss index 2da2d6d6..cfb15d69 100644 --- a/src/components/UI/Loading/Loading.module.scss +++ b/src/components/UI/Loading/Loading.module.scss @@ -1,7 +1,5 @@ @import '../../../index'; -$border-color: $--color-white; - .loading { display: inline-block; position: relative; @@ -10,7 +8,7 @@ $border-color: $--color-white; div { position: absolute; - border: 4px solid $border-color; + border: 4px solid $--color-white; opacity: 1; border-radius: 50%; animation: loading 1s cubic-bezier(0, 0.2, 0.8, 1) infinite; diff --git a/src/components/UI/LogoutButton/LogoutButton.js b/src/components/UI/LogoutButton/LogoutButton.js index a1a4a9ed..792f0527 100644 --- a/src/components/UI/LogoutButton/LogoutButton.js +++ b/src/components/UI/LogoutButton/LogoutButton.js @@ -1,11 +1,11 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {useColors} from '../../../hooks'; +import {useColors, useTranslation} from '../../../hooks'; import {Button} from '../index'; -import {BTN_TXT} from './LogoutButton.strings'; export const LogoutButton = ({onClick, isDisabled}) => { + const {logoutBtnTxt} = useTranslation('menus.account'); const {colorAlpha5, colorWhite} = useColors(); return ( @@ -21,7 +21,7 @@ export const LogoutButton = ({onClick, isDisabled}) => { borderRadius: '7px', fontSize: '16px' }} - text={BTN_TXT} + text={logoutBtnTxt} onClick={onClick} /> ); diff --git a/src/components/UI/LogoutButton/LogoutButton.strings.js b/src/components/UI/LogoutButton/LogoutButton.strings.js deleted file mode 100644 index 040f6526..00000000 --- a/src/components/UI/LogoutButton/LogoutButton.strings.js +++ /dev/null @@ -1,3 +0,0 @@ -import utils from '../../../utils'; - -export const BTN_TXT = utils.getTranslation('menus.account.logout_btn_txt'); diff --git a/src/components/UI/MaxButton/MaxButton.js b/src/components/UI/MaxButton/MaxButton.js index 09249444..9d2dc300 100644 --- a/src/components/UI/MaxButton/MaxButton.js +++ b/src/components/UI/MaxButton/MaxButton.js @@ -1,14 +1,18 @@ import PropTypes from 'prop-types'; import React from 'react'; +import {useTranslation} from '../../../hooks'; import styles from './MaxButton.module.scss'; -import {BTN_TXT} from './MaxButton.strings'; -export const MaxButton = ({onClick}) => ( - <div className={styles.maxButton} onClick={onClick}> - {BTN_TXT} - </div> -); +export const MaxButton = ({onClick}) => { + const {maxBtnTxt} = useTranslation('menus.transfer'); + + return ( + <div className={styles.maxButton} onClick={onClick}> + {maxBtnTxt} + </div> + ); +}; MaxButton.propTypes = { onClick: PropTypes.func diff --git a/src/components/UI/MaxButton/MaxButton.module.scss b/src/components/UI/MaxButton/MaxButton.module.scss index 0495a040..d633d288 100644 --- a/src/components/UI/MaxButton/MaxButton.module.scss +++ b/src/components/UI/MaxButton/MaxButton.module.scss @@ -1,12 +1,10 @@ @import '../../../index'; -$color: $--color-white; - .maxButton { text-transform: uppercase; font-weight: 600; font-size: 15px; - color: $color; + color: $--color-white; cursor: pointer; z-index: 1; margin: 0 20px; diff --git a/src/components/UI/MaxButton/MaxButton.strings.js b/src/components/UI/MaxButton/MaxButton.strings.js deleted file mode 100644 index a2af64cb..00000000 --- a/src/components/UI/MaxButton/MaxButton.strings.js +++ /dev/null @@ -1,3 +0,0 @@ -import utils from '../../../utils'; - -export const BTN_TXT = utils.getTranslation('menus.transfer.max_btn_txt'); diff --git a/src/components/UI/MenuTitle/MenuTitle.module.scss b/src/components/UI/MenuTitle/MenuTitle.module.scss index e249ce2a..430d70d7 100644 --- a/src/components/UI/MenuTitle/MenuTitle.module.scss +++ b/src/components/UI/MenuTitle/MenuTitle.module.scss @@ -1,9 +1,7 @@ @import '../../../index'; -$color: $--color-white; - .menuTitle { font-size: 26px; font-weight: bold; - color: $color; + color: $--color-white; } diff --git a/src/components/UI/Modal/Modal/Modal.js b/src/components/UI/Modal/Modal/Modal.js index fd411623..4289d10a 100644 --- a/src/components/UI/Modal/Modal/Modal.js +++ b/src/components/UI/Modal/Modal/Modal.js @@ -2,12 +2,13 @@ import PropTypes from 'prop-types'; import React from 'react'; import {createPortal} from 'react-dom'; +import {ModalSize, ModalType} from '../../../../enums'; import utils from '../../../../utils'; -import {ModalSize, ModalType} from './Modal.constants'; import styles from './Modal.module.scss'; export const Modal = ({show, type = ModalType.INFO, size = ModalSize.MEDIUM, children}) => { const {width} = size; + return show ? createPortal( <div className={utils.object.toClasses(styles.modal, styles[type])}> diff --git a/src/components/UI/Modal/Modal/Modal.module.scss b/src/components/UI/Modal/Modal/Modal.module.scss index 9e222d5d..3b2031d4 100644 --- a/src/components/UI/Modal/Modal/Modal.module.scss +++ b/src/components/UI/Modal/Modal/Modal.module.scss @@ -1,11 +1,7 @@ @import '../../../../index'; -$backdrop-color: rgba(0, 0, 0, 0.5); -$background-color: $--color-white; -$error-color: $--color-error; - .modal { - background: $backdrop-color; + background: rgba(0, 0, 0, 0.5); top: 0; left: 0; right: 0; @@ -18,14 +14,14 @@ $error-color: $--color-error; left: 50%; position: absolute; transform: translate(-50%, -50%); - background: $background-color; + background: $--color-white; box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1); border-radius: 10px; padding: 20px 40px; overflow: auto; &.error { - border: 1px solid $error-color; + border: 1px solid $--color-error; } } } diff --git a/src/components/UI/Modal/ModalBody/ModalBody.js b/src/components/UI/Modal/ModalBody/ModalBody.js index 08ed2727..c4122474 100644 --- a/src/components/UI/Modal/ModalBody/ModalBody.js +++ b/src/components/UI/Modal/ModalBody/ModalBody.js @@ -1,8 +1,8 @@ import PropTypes from 'prop-types'; import React from 'react'; +import {ModalType} from '../../../../enums'; import utils from '../../../../utils'; -import {ModalType} from '../Modal/Modal.constants'; import styles from './ModalBody.module.scss'; export const ModalBody = ({type = ModalType.INFO, children}) => ( diff --git a/src/components/UI/Modal/ModalBody/ModalBody.module.scss b/src/components/UI/Modal/ModalBody/ModalBody.module.scss index 7476eb36..08ff761e 100644 --- a/src/components/UI/Modal/ModalBody/ModalBody.module.scss +++ b/src/components/UI/Modal/ModalBody/ModalBody.module.scss @@ -1,19 +1,16 @@ @import '../../../../index'; -$color: $--color-omega; -$error-color: $--color-error; - .modalBody { padding: 25px 0; font-size: 16px; line-height: 22px; letter-spacing: 0.03em; - color: $color; + color: $--color-omega; white-space: break-spaces; overflow: hidden; text-overflow: ellipsis; &.error { - color: $error-color; + color: $--color-error; } } diff --git a/src/components/UI/Modal/ModalFooter/ModalFooter.js b/src/components/UI/Modal/ModalFooter/ModalFooter.js index ccb0bb37..37dc7bac 100644 --- a/src/components/UI/Modal/ModalFooter/ModalFooter.js +++ b/src/components/UI/Modal/ModalFooter/ModalFooter.js @@ -1,15 +1,16 @@ import PropTypes from 'prop-types'; import React from 'react'; +import {ModalType} from '../../../../enums'; import {useColors} from '../../../../hooks'; import {toClasses} from '../../../../utils/object'; import {Button} from '../../Button/Button'; -import {ModalType} from '../Modal/Modal.constants'; import styles from './ModalFooter.module.scss'; export const ModalFooter = ({type, onClose}) => { const {colorError, colorAlpha3, colorWhite} = useColors(); const color = type === ModalType.ERROR ? colorError : colorAlpha3; + return ( <div className={toClasses(styles.modalFooter, styles[type])}> <Button diff --git a/src/components/UI/Modal/ModalHeader/ModalHeader.js b/src/components/UI/Modal/ModalHeader/ModalHeader.js index 93bd1f1b..ce37cb63 100644 --- a/src/components/UI/Modal/ModalHeader/ModalHeader.js +++ b/src/components/UI/Modal/ModalHeader/ModalHeader.js @@ -1,8 +1,8 @@ import PropTypes from 'prop-types'; import React from 'react'; +import {ModalType} from '../../../../enums'; import utils from '../../../../utils'; -import {ModalType} from '../Modal/Modal.constants'; import styles from './ModalHeader.module.scss'; export const ModalHeader = ({type = ModalType.INFO, children}) => { diff --git a/src/components/UI/Modal/ModalHeader/ModalHeader.module.scss b/src/components/UI/Modal/ModalHeader/ModalHeader.module.scss index aeaddd36..1123b3e1 100644 --- a/src/components/UI/Modal/ModalHeader/ModalHeader.module.scss +++ b/src/components/UI/Modal/ModalHeader/ModalHeader.module.scss @@ -1,7 +1,5 @@ @import '../../../../index'; -$error-color: $--color-error; - .modalHeader { display: flex; justify-content: space-between; @@ -16,6 +14,6 @@ $error-color: $--color-error; } &.error { - color: $error-color; + color: $--color-error; } } diff --git a/src/components/UI/Modal/ModalMessage/TransferToL1Message.js b/src/components/UI/Modal/ModalMessage/TransferToL1Message.js index 82569d18..c1fe8eaf 100644 --- a/src/components/UI/Modal/ModalMessage/TransferToL1Message.js +++ b/src/components/UI/Modal/ModalMessage/TransferToL1Message.js @@ -1,12 +1,18 @@ +import {useConstants} from '../../../../hooks'; import {toClasses} from '../../../../utils/object'; import styles from './ModalMessage.module.scss'; export const TransferToL1Message = () => { + const {STARKGATE_DOCS_URL} = useConstants(); + return ( <div className={toClasses(styles.modalMessage, styles.transferMessage)}> <center> The StarkNet → Ethereum transfer divided into two stages ( - <a href="https://starknet.io/documentation/starkgate-token-bridge/">Docs</a>): + <a href={STARKGATE_DOCS_URL} rel="noreferrer" target="_blank"> + Docs + </a> + ): </center> <ul> <li>A waiting period of several hours is expected between the stages.</li> diff --git a/src/components/UI/Modal/ModalWrapper.js b/src/components/UI/Modal/ModalWrapper.js index 6123622a..9c01558c 100644 --- a/src/components/UI/Modal/ModalWrapper.js +++ b/src/components/UI/Modal/ModalWrapper.js @@ -1,8 +1,15 @@ import React, {lazy, Suspense} from 'react'; import {useHideModal, useModal} from '../../../providers/ModalProvider'; -import {LoadingSize} from '../Loading/Loading.enums'; -import {Loading, Modal, ModalBody, ModalFooter, ModalHeader, ModalTitle} from '../index'; +import { + Loading, + LoadingSize, + Modal, + ModalBody, + ModalFooter, + ModalHeader, + ModalTitle +} from '../index'; import {ModalText} from './ModalText/ModalText'; export const ModalWrapper = () => { diff --git a/src/components/UI/Modal/OnboardingModal/OnboardingModal.js b/src/components/UI/Modal/OnboardingModal/OnboardingModal.js index 353a1ffe..ba6b541e 100644 --- a/src/components/UI/Modal/OnboardingModal/OnboardingModal.js +++ b/src/components/UI/Modal/OnboardingModal/OnboardingModal.js @@ -1,15 +1,17 @@ import React from 'react'; +import {useTranslation} from '../../../../hooks'; import {IncognitoMessage} from '../ModalMessage'; import styles from './OnboardingModal.module.scss'; -import {SUBTITLE_TXT, BULLETS_TXT} from './OnboardingModal.strings'; const OnboardingModal = () => { + const {subtitleTxt, bulletsTxt} = useTranslation('modals.onboarding'); + return ( <div className={styles.onboardingModal}> - <h3>{SUBTITLE_TXT}</h3> + <h3>{subtitleTxt}</h3> <ul> - {BULLETS_TXT.map((bullet, i) => ( + {bulletsTxt.map((bullet, i) => ( <li key={`b-${i}`}>{bullet}</li> ))} </ul> diff --git a/src/components/UI/Modal/OnboardingModal/OnboardingModal.strings.js b/src/components/UI/Modal/OnboardingModal/OnboardingModal.strings.js deleted file mode 100644 index 9bff3767..00000000 --- a/src/components/UI/Modal/OnboardingModal/OnboardingModal.strings.js +++ /dev/null @@ -1,7 +0,0 @@ -import utils from '../../../../utils'; - -const {title_txt, subtitle_txt, bullets_txt} = utils.getTranslation('modals.onboarding'); - -export const TITLE_TXT = title_txt; -export const SUBTITLE_TXT = subtitle_txt; -export const BULLETS_TXT = bullets_txt; diff --git a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.constants.js b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.constants.js deleted file mode 100644 index 0018ac8c..00000000 --- a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.constants.js +++ /dev/null @@ -1,7 +0,0 @@ -import utils from '../../../../utils'; - -export const ETHERSCAN_TX_URL = (chainName, transactionHash) => - utils.object.evaluate('https://{{chainName}}etherscan.io/tx/{{transactionHash}}', { - chainName, - transactionHash - }); diff --git a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js index 904f1b8a..aa914c6e 100644 --- a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js +++ b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js @@ -3,37 +3,31 @@ import React from 'react'; import {ReactComponent as EtherscanLogo} from '../../../../assets/svg/etherscan.svg'; import {ReactComponent as StarkNetLogo} from '../../../../assets/svg/tokens/starknet.svg'; -import constants from '../../../../config/constants'; -import envs from '../../../../config/envs'; import {ActionType} from '../../../../enums'; -import {useColors} from '../../../../hooks'; +import {useColors, useConstants, useEnvs, useTranslation} from '../../../../hooks'; import utils from '../../../../utils'; import {Button} from '../../Button/Button'; import {Circle} from '../../Circle/Circle'; import {TransferToL1Message, TransferToL2Message} from '../ModalMessage'; import {ModalText} from '../ModalText/ModalText'; import styles from './TransactionSubmittedModal.module.scss'; -import { - BTN_TEXT, - COMPLETE_TRANSFER_TO_L1_TXT, - TRANSFER_TO_L1_TXT, - TRANSFER_TO_L2_TXT -} from './TransactionSubmittedModal.strings'; - -const {ETHERSCAN, VOYAGER} = constants; -const {etherscanTxUrl, voyagerTxUrl} = envs; const TransactionSubmittedModal = ({transfer}) => { + const {ETHERSCAN, VOYAGER} = useConstants(); + const {etherscanTxUrl, voyagerTxUrl} = useEnvs(); + const {completeTransferToL1Txt, transferToL1Txt, transferToL2Txt} = useTranslation( + 'modals.transactionSubmitted' + ); const {type, l2hash, l1hash} = transfer; const isTransferCompleted = l1hash && l2hash; const explorerButtons = []; const textMessage = type === ActionType.TRANSFER_TO_L2 - ? TRANSFER_TO_L2_TXT + ? transferToL2Txt : isTransferCompleted - ? COMPLETE_TRANSFER_TO_L1_TXT - : TRANSFER_TO_L1_TXT; + ? completeTransferToL1Txt + : transferToL1Txt; const messageComponent = type === ActionType.TRANSFER_TO_L2 ? ( @@ -83,6 +77,8 @@ const TransactionSubmittedModal = ({transfer}) => { const TransactionSubmittedModalButton = ({networkName, networkLogo, onClick}) => { const {colorAlpha3, colorWhite, colorWhite1} = useColors(); + const {btnTxt} = useTranslation('modals.transactionSubmitted'); + return ( <Button colorBackground={colorWhite} @@ -93,7 +89,7 @@ const TransactionSubmittedModalButton = ({networkName, networkLogo, onClick}) => {networkLogo} </Circle> } - text={BTN_TEXT(networkName)} + text={utils.object.evaluate(btnTxt, {explorer: networkName})} onClick={onClick} /> ); diff --git a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.strings.js b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.strings.js deleted file mode 100644 index 44f45157..00000000 --- a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.strings.js +++ /dev/null @@ -1,9 +0,0 @@ -import utils from '../../../../utils'; - -const {btn_txt, transfer_to_l1_txt, complete_transfer_to_l1_txt, transfer_to_l2_txt} = - utils.getTranslation('modals.transactionSubmitted'); - -export const COMPLETE_TRANSFER_TO_L1_TXT = complete_transfer_to_l1_txt; -export const TRANSFER_TO_L1_TXT = transfer_to_l1_txt; -export const TRANSFER_TO_L2_TXT = transfer_to_l2_txt; -export const BTN_TEXT = explorer => utils.object.evaluate(btn_txt, {explorer}); diff --git a/src/components/UI/NetworkMenu/NetworkMenu.js b/src/components/UI/NetworkMenu/NetworkMenu.js index 54965953..0731bedd 100644 --- a/src/components/UI/NetworkMenu/NetworkMenu.js +++ b/src/components/UI/NetworkMenu/NetworkMenu.js @@ -1,16 +1,18 @@ import PropTypes from 'prop-types'; import React from 'react'; +import {useTranslation} from '../../../hooks'; import {NetworkTitle} from '../NetworkTitle/NetworkTitle'; import {TokenBalance} from '../TokenBalance/TokenBalance'; import {Badge} from '../index'; import styles from './NetworkMenu.module.scss'; -import {FROM, TO} from './NetworkMenu.strings'; export const NetworkMenu = ({networkData, tokenData, isTarget, onRefreshClick, children}) => { + const {toTxt, fromTxt} = useTranslation('menus.transfer'); + return ( <div className={styles.networkMenu}> - <Badge text={isTarget ? TO : FROM} /> + <Badge text={isTarget ? toTxt : fromTxt} /> <div className={styles.networkContainer}> <NetworkTitle networkData={networkData} /> <TokenBalance tokenData={tokenData} onRefreshClick={onRefreshClick} /> diff --git a/src/components/UI/NetworkMenu/NetworkMenu.module.scss b/src/components/UI/NetworkMenu/NetworkMenu.module.scss index 6dd9369c..deaee98d 100644 --- a/src/components/UI/NetworkMenu/NetworkMenu.module.scss +++ b/src/components/UI/NetworkMenu/NetworkMenu.module.scss @@ -1,11 +1,8 @@ @import '../../../index'; -$background-color: $--color-alpha-1; -$box-shadow-color: rgba(0, 0, 0, 0.1); - .networkMenu { - background: $background-color; - box-shadow: 0 4px 30px $box-shadow-color; + background: $--color-alpha-1; + box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1); border-radius: 20px; height: 100%; margin-top: 10px; diff --git a/src/components/UI/NetworkMenu/NetworkMenu.strings.js b/src/components/UI/NetworkMenu/NetworkMenu.strings.js deleted file mode 100644 index d5bd5692..00000000 --- a/src/components/UI/NetworkMenu/NetworkMenu.strings.js +++ /dev/null @@ -1,6 +0,0 @@ -import utils from '../../../utils'; - -const {to_txt, from_txt} = utils.getTranslation('menus.transfer'); - -export const TO = to_txt; -export const FROM = from_txt; diff --git a/src/components/UI/NetworkTitle/NetworkTitle.js b/src/components/UI/NetworkTitle/NetworkTitle.js index 919f098a..1ec907be 100644 --- a/src/components/UI/NetworkTitle/NetworkTitle.js +++ b/src/components/UI/NetworkTitle/NetworkTitle.js @@ -1,7 +1,7 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {CryptoLogoSize} from '../CryptoLogo/CryptoLogo.enums'; +import {CryptoLogoSize} from '../CryptoLogo/CryptoLogo'; import {CryptoLogo} from '../index'; import styles from './NetworkTitle.module.scss'; diff --git a/src/components/UI/NetworkTitle/NetworkTitle.module.scss b/src/components/UI/NetworkTitle/NetworkTitle.module.scss index 98480fad..2132ac06 100644 --- a/src/components/UI/NetworkTitle/NetworkTitle.module.scss +++ b/src/components/UI/NetworkTitle/NetworkTitle.module.scss @@ -1,12 +1,10 @@ @import '../../../index'; -$color: $--color-white; - .networkTitle { display: flex; align-items: center; font-weight: 600; font-size: 15px; - color: $color; + color: $--color-white; text-transform: capitalize; } diff --git a/src/components/UI/RefreshIcon/RefreshIcon.module.scss b/src/components/UI/RefreshIcon/RefreshIcon.module.scss index 70c3f6b7..5ac0532e 100644 --- a/src/components/UI/RefreshIcon/RefreshIcon.module.scss +++ b/src/components/UI/RefreshIcon/RefreshIcon.module.scss @@ -1,17 +1,14 @@ @import '../../../index'; -$color: $--color-alpha-6; -$color-hover: $--color-white; - svg { &.refreshIcon { - fill: $color; + fill: $--color-alpha-6; margin: 2px 0 0 5px; transition: 0.3s ease-in-out; &:hover { cursor: pointer; - fill: $color-hover; + fill: $--color-white; } } diff --git a/src/components/UI/SearchToken/SearchToken.js b/src/components/UI/SearchToken/SearchToken.js index 3c9cc526..0cf39366 100644 --- a/src/components/UI/SearchToken/SearchToken.js +++ b/src/components/UI/SearchToken/SearchToken.js @@ -2,11 +2,12 @@ import PropTypes from 'prop-types'; import React, {useEffect, useState} from 'react'; import {ReactComponent as SearchIcon} from '../../../assets/svg/icons/search.svg'; +import {useTranslation} from '../../../hooks'; import {Input} from '../index'; import styles from './SearchToken.module.scss'; -import {SEARCH_PLACEHOLDER} from './SearchToken.strings'; export const SearchToken = ({tokens, onSearchResults}) => { + const {searchPlaceholder} = useTranslation('menus.selectToken'); const [searchTerm, setSearchTerm] = useState(''); const handleChange = event => { @@ -22,7 +23,7 @@ export const SearchToken = ({tokens, onSearchResults}) => { <div className={styles.searchToken}> <SearchIcon /> <Input - placeholder={SEARCH_PLACEHOLDER} + placeholder={searchPlaceholder} style={{fontSize: '20px', width: '100%'}} value={searchTerm} onChange={handleChange} diff --git a/src/components/UI/SearchToken/SearchToken.module.scss b/src/components/UI/SearchToken/SearchToken.module.scss index 080fc2d7..6ffa022f 100644 --- a/src/components/UI/SearchToken/SearchToken.module.scss +++ b/src/components/UI/SearchToken/SearchToken.module.scss @@ -1,12 +1,10 @@ -$border-color: rgba(255, 255, 255, 0.05); - .searchToken { display: flex; flex-direction: row; align-items: center; margin: 15px 0 10px 0; padding: 0 10px; - border: 1px solid $border-color; + border: 1px solid rgba(255, 255, 255, 0.05); border-radius: 7px; svg { diff --git a/src/components/UI/SearchToken/SearchToken.strings.js b/src/components/UI/SearchToken/SearchToken.strings.js deleted file mode 100644 index 87c47fbc..00000000 --- a/src/components/UI/SearchToken/SearchToken.strings.js +++ /dev/null @@ -1,3 +0,0 @@ -import utils from '../../../utils'; - -export const SEARCH_PLACEHOLDER = utils.getTranslation('menus.selectToken.search_placeholder'); diff --git a/src/components/UI/SelectTokenRow/SelectTokenRow.js b/src/components/UI/SelectTokenRow/SelectTokenRow.js index 427861fe..bbda6932 100644 --- a/src/components/UI/SelectTokenRow/SelectTokenRow.js +++ b/src/components/UI/SelectTokenRow/SelectTokenRow.js @@ -2,9 +2,8 @@ import PropTypes from 'prop-types'; import React from 'react'; import utils from '../../../utils'; -import {CryptoLogoSize} from '../CryptoLogo/CryptoLogo.enums'; -import {LoadingSize} from '../Loading/Loading.enums'; -import {CryptoLogo, Loading} from '../index'; +import {CryptoLogoSize} from '../CryptoLogo/CryptoLogo'; +import {CryptoLogo, Loading, LoadingSize} from '../index'; import styles from './SelectTokenRow.module.scss'; export const SelectTokenRow = ({tokenData, onClick}) => { diff --git a/src/components/UI/SelectTokenRow/SelectTokenRow.module.scss b/src/components/UI/SelectTokenRow/SelectTokenRow.module.scss index 7ece0252..fdcc2f70 100644 --- a/src/components/UI/SelectTokenRow/SelectTokenRow.module.scss +++ b/src/components/UI/SelectTokenRow/SelectTokenRow.module.scss @@ -1,12 +1,5 @@ @import '../../../index'; -$hr-color: rgba(255, 255, 255, 0.05); -$symbol-color: $--color-white; -$name-color: $--color-alpha-6-hover; -$balance-color: $--color-alpha-6-hover; -$name-color-hover: $--color-white; -$balance-color-hover: $--color-white; - .selectTokenRow { cursor: pointer; @@ -15,7 +8,7 @@ $balance-color-hover: $--color-white; } hr { - border-color: $hr-color; + border-color: rgba(255, 255, 255, 0.05); } &:first-child { @@ -37,7 +30,7 @@ $balance-color-hover: $--color-white; align-items: center; .symbol { - color: $symbol-color; + color: $--color-white; font-weight: 600; font-size: 18px; text-transform: uppercase; @@ -47,7 +40,7 @@ $balance-color-hover: $--color-white; .name { font-size: 16px; - color: $name-color; + color: $--color-alpha-6-hover; text-transform: capitalize; transition: 0.4s ease-in-out; } @@ -59,7 +52,7 @@ $balance-color-hover: $--color-white; .balance { float: right; font-size: 18px; - color: $balance-color; + color: $--color-alpha-6-hover; text-transform: uppercase; transition: 0.4s ease-in-out; } @@ -70,13 +63,13 @@ $balance-color-hover: $--color-white; .data { .left { .name { - color: $name-color-hover; + color: $--color-white; } } .right { .balance { - color: $balance-color-hover; + color: $--color-white; } } } diff --git a/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.js b/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.js index ade273ec..76e92147 100644 --- a/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.js +++ b/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.js @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import React from 'react'; import {ReactComponent as L1Logo} from '../../../../assets/svg/tokens/eth.svg'; -import {useColors} from '../../../../hooks'; +import {useColors, useTranslation} from '../../../../hooks'; import {TransferData} from '../../../Features'; import {ToastBody} from '../ToastBody/ToastBody'; import {ToastButton, ToastButtons} from '../ToastButton/ToastButton'; @@ -11,12 +11,6 @@ import {ToastFooter, TransferLogLink} from '../ToastFooter/ToastFooter'; import {ToastHeader} from '../ToastHeader/ToastHeader'; import {ToastSeparator} from '../ToastSeparator/ToastSeparator'; import styles from './CompleteTransferToL1Toast.module.scss'; -import { - BODY_TXT, - DISMISS_BTN_TXT, - TITLE_TXT, - COMPLETE_TRANSFER_BTN_TXT -} from './CompleteTransferToL1Toast.strings'; export const CompleteTransferToL1Toast = ({ t, @@ -27,6 +21,9 @@ export const CompleteTransferToL1Toast = ({ onClose }) => { const {colorBeta, colorOmega1} = useColors(); + const {titleTxt, bodyTxt, dismissBtnTxt, completeTransferBtnTxt} = + useTranslation('toasts.completeTransfer'); + return ( <Transition appear={true} @@ -44,13 +41,13 @@ export const CompleteTransferToL1Toast = ({ <L1Logo style={{opacity: 0.5}} /> </div> <div className={styles.right}> - <ToastHeader title={TITLE_TXT} withClose={true} onClose={onClose} /> - <ToastBody body={BODY_TXT} style={{paddingRight: '20px'}} /> + <ToastHeader title={titleTxt} withClose={true} onClose={onClose} /> + <ToastBody body={bodyTxt} style={{paddingRight: '20px'}} /> <ToastButtons> - <ToastButton color={colorOmega1} text={DISMISS_BTN_TXT} onClick={onDismiss} /> + <ToastButton color={colorOmega1} text={dismissBtnTxt} onClick={onDismiss} /> <ToastButton color={colorBeta} - text={COMPLETE_TRANSFER_BTN_TXT} + text={completeTransferBtnTxt} onClick={onCompleteTransfer} /> </ToastButtons> diff --git a/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.module.scss b/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.module.scss index ff750580..a35b5fdb 100644 --- a/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.module.scss +++ b/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.module.scss @@ -1,11 +1,8 @@ @import '../../../../index'; -$background-color: $--color-white; -$left-background-color: $--color-white-2; - .completeTransferToL1Toast { width: 400px; - background: $background-color; + background: $--color-white; box-shadow: 0 12px 16px -4px rgba(16, 24, 40, 0.1), 0 4px 6px -2px rgba(16, 24, 40, 0.05); border-radius: 8px; @@ -17,7 +14,7 @@ $left-background-color: $--color-white-2; .left { width: 30%; - background: $left-background-color; + background: $--color-white-2; border-radius: 8px 0 0 8px; } diff --git a/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.strings.js b/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.strings.js deleted file mode 100644 index 3ea9de3f..00000000 --- a/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.strings.js +++ /dev/null @@ -1,9 +0,0 @@ -import utils from '../../../../utils'; - -const {title_txt, body_txt, dismiss_btn_txt, complete_transfer_btn_txt} = - utils.getTranslation('toasts.completeTransfer'); - -export const TITLE_TXT = title_txt; -export const BODY_TXT = body_txt; -export const DISMISS_BTN_TXT = dismiss_btn_txt; -export const COMPLETE_TRANSFER_BTN_TXT = complete_transfer_btn_txt; diff --git a/src/components/UI/Toast/ToastBody/ToastBody.module.scss b/src/components/UI/Toast/ToastBody/ToastBody.module.scss index 418c377c..64294a2b 100644 --- a/src/components/UI/Toast/ToastBody/ToastBody.module.scss +++ b/src/components/UI/Toast/ToastBody/ToastBody.module.scss @@ -1,11 +1,9 @@ @import '../../../../index'; -$color: $--color-omega-1; - .toastBody { font-style: normal; font-weight: normal; font-size: 14px; line-height: 18px; - color: $color; + color: $--color-omega-1; } diff --git a/src/components/UI/Toast/ToastFooter/ToastFooter.js b/src/components/UI/Toast/ToastFooter/ToastFooter.js index a81669c7..9c38730a 100644 --- a/src/components/UI/Toast/ToastFooter/ToastFooter.js +++ b/src/components/UI/Toast/ToastFooter/ToastFooter.js @@ -1,17 +1,19 @@ import PropTypes from 'prop-types'; import React from 'react'; +import {useTranslation} from '../../../../hooks'; import styles from './ToastFooter.module.scss'; -import {TRANSFER_LOG_LINK_BTN_TXT} from './ToastFooter.strings'; export const ToastFooter = ({children}) => { return <div className={styles.toastFooter}>{children}</div>; }; export const TransferLogLink = ({onClick}) => { + const {transferLogLink} = useTranslation('toasts'); + return ( <div className={styles.transferLogLink} onClick={onClick}> - {TRANSFER_LOG_LINK_BTN_TXT} + {transferLogLink} </div> ); }; diff --git a/src/components/UI/Toast/ToastFooter/ToastFooter.module.scss b/src/components/UI/Toast/ToastFooter/ToastFooter.module.scss index f8d25616..6a9eb67f 100644 --- a/src/components/UI/Toast/ToastFooter/ToastFooter.module.scss +++ b/src/components/UI/Toast/ToastFooter/ToastFooter.module.scss @@ -1,7 +1,5 @@ @import '../../../../index'; -$color: $--color-omega; - .toastFooter { margin-bottom: 5px; display: flex; @@ -12,7 +10,7 @@ $color: $--color-omega; cursor: pointer; font-size: 11px; line-height: 18px; - color: $color; + color: $--color-omega; width: 114px; text-decoration: underline; align-self: flex-end; diff --git a/src/components/UI/Toast/ToastFooter/ToastFooter.strings.js b/src/components/UI/Toast/ToastFooter/ToastFooter.strings.js deleted file mode 100644 index 04082c31..00000000 --- a/src/components/UI/Toast/ToastFooter/ToastFooter.strings.js +++ /dev/null @@ -1,3 +0,0 @@ -import utils from '../../../../utils'; - -export const TRANSFER_LOG_LINK_BTN_TXT = utils.getTranslation('toasts.transfer_log_link'); diff --git a/src/components/UI/Toast/ToastHeader/ToastHeader.module.scss b/src/components/UI/Toast/ToastHeader/ToastHeader.module.scss index 2029291a..692d7c90 100644 --- a/src/components/UI/Toast/ToastHeader/ToastHeader.module.scss +++ b/src/components/UI/Toast/ToastHeader/ToastHeader.module.scss @@ -1,7 +1,5 @@ @import '../../../../index'; -$color-title: $--color-black; - .toastHeader { display: flex; margin-bottom: 5px; @@ -11,7 +9,7 @@ $color-title: $--color-black; font-weight: 500; font-size: 14px; line-height: 24px; - color: $color-title; + color: $--color-black; } .close { diff --git a/src/components/UI/Toast/TransferToast/TransferToast.js b/src/components/UI/Toast/TransferToast/TransferToast.js index d011b8f7..e58f22fa 100644 --- a/src/components/UI/Toast/TransferToast/TransferToast.js +++ b/src/components/UI/Toast/TransferToast/TransferToast.js @@ -2,23 +2,25 @@ import PropTypes from 'prop-types'; import React from 'react'; import {isConsumed, isPending, isRejected} from '../../../../enums'; +import {useTranslation} from '../../../../hooks'; import {TransferData} from '../../../Features'; import {ToastFooter, TransferLogLink} from '../ToastFooter/ToastFooter'; import {ToastHeader} from '../ToastHeader/ToastHeader'; import {ToastSeparator} from '../ToastSeparator/ToastSeparator'; -import {CONSUMED_TXT, PENDING_TXT, REJECTED_TXT} from './TransferToast.strings'; export const TransferToast = ({transfer, isLoading, onTransferLogLinkClick, onClose}) => { + const {pendingTxt, consumedTxt, rejectedTxt} = useTranslation('toasts.pendingTransfer'); + const getTitle = () => { const {status} = transfer; if (isPending(status)) { - return PENDING_TXT; + return pendingTxt; } if (isConsumed(status)) { - return CONSUMED_TXT; + return consumedTxt; } if (isRejected(status)) { - return REJECTED_TXT; + return rejectedTxt; } }; diff --git a/src/components/UI/Toast/TransferToast/TransferToast.strings.js b/src/components/UI/Toast/TransferToast/TransferToast.strings.js deleted file mode 100644 index a88ff5cb..00000000 --- a/src/components/UI/Toast/TransferToast/TransferToast.strings.js +++ /dev/null @@ -1,7 +0,0 @@ -import utils from '../../../../utils'; - -const {pending_txt, consumed_txt, rejected_txt} = utils.getTranslation('toasts.pendingTransfer'); - -export const REJECTED_TXT = rejected_txt; -export const PENDING_TXT = pending_txt; -export const CONSUMED_TXT = consumed_txt; diff --git a/src/components/UI/TokenBalance/TokenBalance.js b/src/components/UI/TokenBalance/TokenBalance.js index 7d1c5e6a..a6c3b423 100644 --- a/src/components/UI/TokenBalance/TokenBalance.js +++ b/src/components/UI/TokenBalance/TokenBalance.js @@ -1,19 +1,19 @@ import PropTypes from 'prop-types'; import React from 'react'; +import {useTranslation} from '../../../hooks'; import utils from '../../../utils'; import {toClasses} from '../../../utils/object'; -import {LoadingSize} from '../Loading/Loading.enums'; -import {Loading, RefreshIcon} from '../index'; +import {Loading, LoadingSize, RefreshIcon} from '../index'; import styles from './TokenBalance.module.scss'; -import {TITLE_TXT} from './TokenBalance.strings'; export const TokenBalance = ({tokenData, onRefreshClick}) => { const {symbol, isLoading, balance} = tokenData; + const {balanceTitleTxt} = useTranslation('menus.transfer'); return ( <div className={toClasses(styles.tokenBalance, isLoading && styles.loading)}> - <span>{TITLE_TXT}</span> + <span>{balanceTitleTxt}</span> <div className={styles.balanceRow}> <div className={styles.balance}> {isLoading ? <Loading size={LoadingSize.SMALL} /> : utils.wallet.formatBalance(balance)} diff --git a/src/components/UI/TokenBalance/TokenBalance.module.scss b/src/components/UI/TokenBalance/TokenBalance.module.scss index 2927ccba..7657761a 100644 --- a/src/components/UI/TokenBalance/TokenBalance.module.scss +++ b/src/components/UI/TokenBalance/TokenBalance.module.scss @@ -1,10 +1,7 @@ @import '../../../index'; -$color: $--color-alpha-6; -$balance-color: $--color-white; - .tokenBalance { - color: $color; + color: $--color-alpha-6; font-size: 14px; text-align: right; letter-spacing: 0.01em; @@ -17,7 +14,7 @@ $balance-color: $--color-white; .balance { display: flex; line-height: 24px; - color: $balance-color; + color: $--color-white; .symbol { margin-left: 5px; diff --git a/src/components/UI/TokenBalance/TokenBalance.strings.js b/src/components/UI/TokenBalance/TokenBalance.strings.js deleted file mode 100644 index a1da53dc..00000000 --- a/src/components/UI/TokenBalance/TokenBalance.strings.js +++ /dev/null @@ -1,3 +0,0 @@ -import utils from '../../../utils'; - -export const TITLE_TXT = utils.getTranslation('menus.transfer.balance_title_txt'); diff --git a/src/components/UI/TokenInput/TokenInput.js b/src/components/UI/TokenInput/TokenInput.js index 7eaf4c49..0eacbf9e 100644 --- a/src/components/UI/TokenInput/TokenInput.js +++ b/src/components/UI/TokenInput/TokenInput.js @@ -1,12 +1,12 @@ import PropTypes from 'prop-types'; import React from 'react'; +import {useTranslation} from '../../../hooks'; import utils from '../../../utils'; import {MaxButton} from '../MaxButton/MaxButton'; import {TokenSelector} from '../TokenSelector/TokenSelector'; import {Input} from '../index'; import styles from './TokenInput.module.scss'; -import {INPUT_PLACEHOLDER} from './TokenInput.strings'; export const TokenInput = ({ value, @@ -15,22 +15,26 @@ export const TokenInput = ({ onMaxClick, onTokenSelect, onInputChange -}) => ( - <div className={utils.object.toClasses(styles.tokenInput, hasError && styles.hasError)}> - <Input - placeholder={INPUT_PLACEHOLDER} - style={{ - fontSize: '24px', - fontWeight: '600' - }} - type="number" - value={value} - onChange={onInputChange} - /> - <MaxButton onClick={onMaxClick} /> - <TokenSelector tokenData={tokenData} onClick={onTokenSelect} /> - </div> -); +}) => { + const {inputPlaceholderTxt} = useTranslation('menus.transfer'); + + return ( + <div className={utils.object.toClasses(styles.tokenInput, hasError && styles.hasError)}> + <Input + placeholder={inputPlaceholderTxt} + style={{ + fontSize: '24px', + fontWeight: '600' + }} + type="number" + value={value} + onChange={onInputChange} + /> + <MaxButton onClick={onMaxClick} /> + <TokenSelector tokenData={tokenData} onClick={onTokenSelect} /> + </div> + ); +}; TokenInput.propTypes = { value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), diff --git a/src/components/UI/TokenInput/TokenInput.module.scss b/src/components/UI/TokenInput/TokenInput.module.scss index 94bb0ad8..236ead3c 100644 --- a/src/components/UI/TokenInput/TokenInput.module.scss +++ b/src/components/UI/TokenInput/TokenInput.module.scss @@ -1,13 +1,10 @@ @import '../../../index'; -$background-color: $--color-alpha-2; -$error-color: $--color-error; - .tokenInput { display: flex; flex-direction: row; align-items: center; - background: $background-color; + background: $--color-alpha-2; height: 50px; margin: 20px 0; padding: 10px; @@ -16,7 +13,7 @@ $error-color: $--color-error; &.hasError { margin: 20px 0 10px 0; - border-color: $error-color; + border-color: $--color-error; border-style: solid; border-width: 1px; } diff --git a/src/components/UI/TokenInput/TokenInput.strings.js b/src/components/UI/TokenInput/TokenInput.strings.js deleted file mode 100644 index b08f5a63..00000000 --- a/src/components/UI/TokenInput/TokenInput.strings.js +++ /dev/null @@ -1,3 +0,0 @@ -import utils from '../../../utils'; - -export const INPUT_PLACEHOLDER = utils.getTranslation('menus.transfer.input_placeholder_txt'); diff --git a/src/components/UI/TokenSelector/TokenSelector.js b/src/components/UI/TokenSelector/TokenSelector.js index 687b8d7f..823c536b 100644 --- a/src/components/UI/TokenSelector/TokenSelector.js +++ b/src/components/UI/TokenSelector/TokenSelector.js @@ -3,7 +3,7 @@ import React from 'react'; import {ReactComponent as DownArrowIcon} from '../../../assets/svg/icons/collapse.svg'; import {useColors} from '../../../hooks'; -import {CryptoLogoSize} from '../CryptoLogo/CryptoLogo.enums'; +import {CryptoLogoSize} from '../CryptoLogo/CryptoLogo'; import {CryptoLogo, Icon} from '../index'; import styles from './TokenSelector.module.scss'; diff --git a/src/components/UI/TokenSelector/TokenSelector.module.scss b/src/components/UI/TokenSelector/TokenSelector.module.scss index 30a1d452..d9bbb707 100644 --- a/src/components/UI/TokenSelector/TokenSelector.module.scss +++ b/src/components/UI/TokenSelector/TokenSelector.module.scss @@ -1,25 +1,20 @@ @import '../../../index'; -$color: $--color-alpha-6; -$background-color: $--color-alpha-5; -$color-hover: $--color-alpha-6-hover; -$background-color-hover: $--color-alpha-5-hover; - .tokenSelector { display: flex; align-items: center; font-weight: 500; font-size: 15px; - color: $color; + color: $--color-alpha-6; text-transform: capitalize; cursor: pointer; padding: 10px 5px 10px 15px; - background: $background-color; + background: $--color-alpha-5; border-radius: 7px; transition: 0.3s ease-in-out; &:hover { - color: $color-hover; - background: $background-color-hover; + color: $--color-alpha-6-hover; + background: $--color-alpha-5-hover; } } diff --git a/src/components/UI/TransferButton/TransferButton.js b/src/components/UI/TransferButton/TransferButton.js index ec67ad62..6e00e885 100644 --- a/src/components/UI/TransferButton/TransferButton.js +++ b/src/components/UI/TransferButton/TransferButton.js @@ -1,12 +1,12 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {useColors} from '../../../hooks'; +import {useColors, useTranslation} from '../../../hooks'; import {Button} from '../index'; -import {BTN_TXT} from './TransferButton.strings'; export const TransferButton = props => { const {colorBeta, colorWhite} = useColors(); + const {transferBtnTxt} = useTranslation('menus.transfer'); return ( <Button @@ -19,7 +19,7 @@ export const TransferButton = props => { borderRadius: '7px', fontSize: '16px' }} - text={BTN_TXT} + text={transferBtnTxt} {...props} /> ); diff --git a/src/components/UI/TransferButton/TransferButton.strings.js b/src/components/UI/TransferButton/TransferButton.strings.js deleted file mode 100644 index d4aa0b2b..00000000 --- a/src/components/UI/TransferButton/TransferButton.strings.js +++ /dev/null @@ -1,3 +0,0 @@ -import utils from '../../../utils'; - -export const BTN_TXT = utils.getTranslation('menus.transfer.transfer_btn_txt'); diff --git a/src/components/UI/TransferLogContainer/TransferLogContainer.js b/src/components/UI/TransferLogContainer/TransferLogContainer.js index 3c6f2579..a9f3228b 100644 --- a/src/components/UI/TransferLogContainer/TransferLogContainer.js +++ b/src/components/UI/TransferLogContainer/TransferLogContainer.js @@ -2,18 +2,16 @@ import PropTypes from 'prop-types'; import React, {useState} from 'react'; import {ReactComponent as CollapseIcon} from '../../../assets/svg/icons/collapse.svg'; +import {useTranslation} from '../../../hooks'; import {useMenu} from '../../../providers/MenuProvider'; import utils from '../../../utils'; import styles from './TransferLogContainer.module.scss'; -import { - EMPTY_MSG_TXT, - OVERVIEW_TXT, - TITLE_TXT, - VIEW_MORE_TXT -} from './TransferLogContainer.strings'; export const TransferLogContainer = ({transferIndex, children, onShowTransfers}) => { const {resetMenuProps} = useMenu(); + const {titleTxt, overviewTxt, emptyMsgTxt, viewMoreTxt} = useTranslation( + 'menus.account.transferLogContainer' + ); const [showChildren, setShowChildren] = useState(false); const toggleShowChildren = () => { @@ -24,15 +22,15 @@ export const TransferLogContainer = ({transferIndex, children, onShowTransfers}) const renderChildren = () => { if (!children) { - return <div className={styles.empty}>{EMPTY_MSG_TXT}</div>; + return <div className={styles.empty}>{emptyMsgTxt}</div>; } else if (showChildren || transferIndex > -1) { return children; } return ( <div className={styles.viewMore}> - {Array.isArray(children) ? children.length : 1} {OVERVIEW_TXT}{' '} - <span onClick={toggleShowChildren}>{VIEW_MORE_TXT}</span> + {Array.isArray(children) ? children.length : 1} {overviewTxt}{' '} + <span onClick={toggleShowChildren}>{viewMoreTxt}</span> </div> ); }; @@ -40,7 +38,7 @@ export const TransferLogContainer = ({transferIndex, children, onShowTransfers}) return ( <div className={styles.transferLogContainer}> <div className={utils.object.toClasses(styles.title, showChildren && styles.showChildren)}> - {TITLE_TXT} + {titleTxt} {children && ( <div> <CollapseIcon onClick={toggleShowChildren} /> diff --git a/src/components/UI/TransferLogContainer/TransferLogContainer.module.scss b/src/components/UI/TransferLogContainer/TransferLogContainer.module.scss index 14f8a297..e25b4799 100644 --- a/src/components/UI/TransferLogContainer/TransferLogContainer.module.scss +++ b/src/components/UI/TransferLogContainer/TransferLogContainer.module.scss @@ -1,15 +1,10 @@ @import '../../../index'; -$color: $--color-white; -$border-color: $--color-alpha-3; -$empty-msg-color: $--color-white-1; -$view-more-color: $--color-gamma-1; - .transferLogContainer { - color: $color; + color: $--color-white; padding: 13px; border-radius: 7px; - border-color: $border-color; + border-color: $--color-alpha-3; border-style: solid; border-width: 2px; margin: 10px 0; @@ -39,7 +34,7 @@ $view-more-color: $--color-gamma-1; } .empty { - color: $empty-msg-color; + color: $--color-white-1; font-size: 12px; opacity: 0.3; } @@ -50,7 +45,7 @@ $view-more-color: $--color-gamma-1; span { cursor: pointer; text-transform: capitalize; - color: $view-more-color; + color: $--color-gamma-1; } } } diff --git a/src/components/UI/TransferLogContainer/TransferLogContainer.strings.js b/src/components/UI/TransferLogContainer/TransferLogContainer.strings.js deleted file mode 100644 index 10447e87..00000000 --- a/src/components/UI/TransferLogContainer/TransferLogContainer.strings.js +++ /dev/null @@ -1,10 +0,0 @@ -import utils from '../../../utils'; - -const {title_txt, overview_txt, empty_msg_txt, view_more_txt} = utils.getTranslation( - 'menus.account.transferLogContainer' -); - -export const TITLE_TXT = title_txt; -export const OVERVIEW_TXT = overview_txt; -export const EMPTY_MSG_TXT = empty_msg_txt; -export const VIEW_MORE_TXT = view_more_txt; diff --git a/src/components/UI/TransferMenuTab/TransferMenuTab.module.scss b/src/components/UI/TransferMenuTab/TransferMenuTab.module.scss index 1be872e5..56a6e557 100644 --- a/src/components/UI/TransferMenuTab/TransferMenuTab.module.scss +++ b/src/components/UI/TransferMenuTab/TransferMenuTab.module.scss @@ -1,17 +1,12 @@ @import '../../../index'; -$background-color: $--color-alpha-1; -$color: $--color-white; -$active-background-color: $--color-alpha-4; -$active-box-shadow-color: rgba(0, 0, 0, 0.1); - .transferMenuTab { - background: $background-color; + background: $--color-alpha-1; border-radius: 10px; font-weight: 500; font-size: 14px; line-height: 24px; - color: $color; + color: $--color-white; padding: 5px; text-align: center; width: 100%; @@ -20,7 +15,7 @@ $active-box-shadow-color: rgba(0, 0, 0, 0.1); transition: 0.3s ease-in-out; &.isActive { - background: $active-background-color; - box-shadow: 0 4px 10px $active-box-shadow-color; + background: $--color-alpha-4; + box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1); } } diff --git a/src/components/UI/WalletButton/WalletButton.constants.js b/src/components/UI/WalletButton/WalletButton.constants.js deleted file mode 100644 index e79b5b05..00000000 --- a/src/components/UI/WalletButton/WalletButton.constants.js +++ /dev/null @@ -1,2 +0,0 @@ -export const WALLET_LOGO_SIZE = 30; -export const WALLET_LOGO_SIZE_MOBILE = 40; diff --git a/src/components/UI/WalletButton/WalletButton.js b/src/components/UI/WalletButton/WalletButton.js index 7f61a3b1..7cd515fd 100644 --- a/src/components/UI/WalletButton/WalletButton.js +++ b/src/components/UI/WalletButton/WalletButton.js @@ -3,16 +3,18 @@ import React from 'react'; import useBreakpoint from 'use-breakpoint'; import {Breakpoint, isDesktop, isMobile, isMobileOrTablet} from '../../../enums'; -import {useColors} from '../../../hooks'; +import {useColors, useTranslation} from '../../../hooks'; import utils from '../../../utils'; import {toClasses} from '../../../utils/object'; import {Button, DynamicIcon} from '../index'; -import {WALLET_LOGO_SIZE, WALLET_LOGO_SIZE_MOBILE} from './WalletButton.constants'; import styles from './WalletButton.module.scss'; -import {BTN_TXT} from './WalletButton.strings'; + +const WALLET_LOGO_SIZE = 30; +const WALLET_LOGO_SIZE_MOBILE = 40; export const WalletButton = ({account, logoPath, onClick}) => { const {colorBeta, colorWhite, colorWhiteOp10, colorWhiteOp20} = useColors(); + const {walletBtnTxt} = useTranslation('containers.header'); const {breakpoint} = useBreakpoint(Breakpoint); const getText = () => { @@ -22,7 +24,7 @@ export const WalletButton = ({account, logoPath, onClick}) => { } else if (!isDesktop(breakpoint)) { return address; } - return BTN_TXT(address); + return utils.object.evaluate(walletBtnTxt, {address}); }; return ( diff --git a/src/components/UI/WalletButton/WalletButton.strings.js b/src/components/UI/WalletButton/WalletButton.strings.js deleted file mode 100644 index b54ee676..00000000 --- a/src/components/UI/WalletButton/WalletButton.strings.js +++ /dev/null @@ -1,4 +0,0 @@ -import utils from '../../../utils'; - -export const BTN_TXT = address => - utils.object.evaluate(utils.getTranslation('containers.header.wallet_btn_txt'), {address}); diff --git a/src/components/UI/WalletLogin/WalletLogin.module.scss b/src/components/UI/WalletLogin/WalletLogin.module.scss index 2fd5dd7a..6d55e99a 100644 --- a/src/components/UI/WalletLogin/WalletLogin.module.scss +++ b/src/components/UI/WalletLogin/WalletLogin.module.scss @@ -1,8 +1,5 @@ @import '../../../index'; -$text-color: $--color-white; -$background-color-hover: $--color-alpha-1; - .walletLogin { display: flex; padding: 15px 20px; @@ -30,14 +27,14 @@ $background-color-hover: $--color-alpha-1; display: flex; align-items: center; line-height: 150%; - color: $text-color; + color: $--color-white; } .description { font-size: 12px; display: flex; align-items: center; - color: $text-color; + color: $--color-white; opacity: 0.5; line-height: 150%; } @@ -49,7 +46,7 @@ $background-color-hover: $--color-alpha-1; } &:hover { - background: $background-color-hover; + background: $--color-alpha-1; box-sizing: border-box; border-radius: 8px; diff --git a/src/config/constants.js b/src/config/constants.js index 544398ad..7c060799 100644 --- a/src/config/constants.js +++ b/src/config/constants.js @@ -2,7 +2,13 @@ const constants = { ETHERSCAN: 'Etherscan', VOYAGER: 'Voyager', DISCORD_LINK_URL: '//discord.gg/MRjKBXtaDt', - FETCH_TOKEN_BALANCE_MAX_RETRY: 5 + FETCH_TOKEN_BALANCE_MAX_RETRY: 5, + STARKWARE_SITE_URL: 'https://starkware.co/', + STARKGATE_DOCS_URL: 'https://starknet.io/documentation/starkgate-token-bridge', + STARKNET_DOCS_URL: 'https://starknet.io/documentation/', + STARKGATE_MAIL_ADDRESS: 'starkgate@starknet.io', + STARKGATE_CONTRACTS_URL: + 'https://github.com/starkware-libs/starkgate-contracts/tree/main/src/starkware/starknet/apps/starkgate' }; export default constants; diff --git a/src/config/strings.js b/src/config/strings.js index 6a041d0a..e64478c0 100644 --- a/src/config/strings.js +++ b/src/config/strings.js @@ -1,76 +1,77 @@ const strings = { containers: { header: { - chain_txt: 'Goerli testnet', - wallet_btn_txt: 'Account | {{address}}', - tab_discord_txt: 'Discord', - tab_terms_txt: 'Terms', - tab_faq_txt: 'FAQ' + chainTxt: 'Goerli testnet', + walletBtnTxt: 'Account | {{address}}', + tabDiscordTxt: 'Discord', + tabTermsTxt: 'Terms', + tabFaqTxt: 'FAQ' }, footer: { - rights_txt: '© 2022 StarkWare Industries Ltd. All Rights Reserved' + rightsTxt: '© 2022 StarkWare Industries Ltd. All Rights Reserved' } }, screens: { faq: { - title_txt: 'FAQ' + titleTxt: 'FAQ' }, terms: { - title_txt: 'Terms of Service', - last_revised_txt: 'Last Revised: April 4, 2022', - accept_btn_txt: 'I Accept' + titleTxt: 'Terms of Service', + lastRevisedTxt: 'Last Revised: April 4, 2022', + notesTitleTxt: 'Notes', + acceptBtnTxt: 'I Accept' } }, menus: { - back_btn_txt: 'Back', + backBtnTxt: 'Back', login: { - title_txt: 'Login', - subtitle_txt: 'Please select {{networkName}} wallet to connect with this dApp:', - download_txt: ['Don’t have a wallet?', 'Download Here'], - modal_txt: 'Waiting for confirmation from {{walletName}}', - unsupported_chain_id_txt: 'Please select {{chainName}} in your wallet', - unsupported_browser_txt: + titleTxt: 'Login', + subtitleTxt: 'Please select {{networkName}} wallet to connect with this dApp:', + downloadTxt: ['Don’t have a wallet?', 'Download Here'], + modalTxt: 'Waiting for confirmation from {{walletName}}', + unsupportedChainIdTxt: 'Please select {{chainName}} in your wallet', + unsupportedBrowserTxt: "Note - The current version of StarkGate (Alpha) doesn't support your browser. Use Chrome to connect." }, account: { - title_txt: '{{network}} Account', - copied_msg_txt: 'Copied!', - logout_btn_txt: 'Logout', + titleTxt: '{{network}} Account', + copiedMsgTxt: 'Copied!', + logoutBtnTxt: 'Logout', transferLogContainer: { - title_txt: 'Transfers log', - overview_txt: 'recent transfers', - empty_msg_txt: 'Transfers will appear here...', - view_more_txt: 'View more', + titleTxt: 'Transfers log', + overviewTxt: 'recent transfers', + emptyMsgTxt: 'Transfers will appear here...', + viewMoreTxt: 'View more', transferLog: { - complete_transfer_btn_txt: 'Complete transfer' + completeTransferBtnTxt: 'Complete transfer' } } }, selectToken: { - title_txt: 'Select token from:', - search_placeholder: 'Token name, symbol, or address' + titleTxt: 'Select token from:', + searchPlaceholder: 'Token name, symbol, or address' }, transfer: { - to_txt: 'to', - from_txt: 'from', - negative_value_error_msg: 'Amount must be a positive number', - too_many_digits_error_msg: 'Too many decimal places', - insufficient_balance_error_msg: 'Insufficient balance', - max_deposit_error_msg: + toTxt: 'to', + fromTxt: 'from', + negativeValueErrorMsg: 'Amount must be a positive number', + tooManyDigitsErrorMsg: 'Too many decimal places', + insufficientBalanceErrorMsg: 'Insufficient balance', + maxDepositErrorMsg: 'You have exceeded the maximum transfer amount. Please reduce the amount and try again.', - max_btn_txt: 'Max', - balance_title_txt: 'Available balance', - input_placeholder_txt: '0.00', - transfer_btn_txt: 'Transfer' + maxBtnTxt: 'Max', + balanceTitleTxt: 'Available balance', + inputPlaceholderTxt: '0.00', + transferBtnTxt: 'Transfer' } }, modals: { transactionSubmitted: { - title_txt: 'Transaction sent', - btn_txt: 'View on {{explorer}}', - transfer_to_l1_txt: 'Your transaction is now being processing on StarkNet.', - transfer_to_l2_txt: 'Your transaction has been successfully sent to StarkNet!', - complete_transfer_to_l1_txt: 'Your transfer is completed on Ethereum!' + titleTxt: 'Transaction sent', + btnTxt: 'View on {{explorer}}', + transferToL1Txt: 'Your transaction is now being processing on StarkNet.', + transferToL2Txt: 'Your transaction has been successfully sent to StarkNet!', + completeTransferToL1Txt: 'Your transfer is completed on Ethereum!' }, transferProgress: { approval: { @@ -93,16 +94,16 @@ const strings = { type: '{{walletName}}', message: 'Waiting for confirmation from {{walletName}}' }, - confirm_txt: 'Confirm this transaction in your wallet', - max_total_balance_error_msg: + confirmTxt: 'Confirm this transaction in your wallet', + maxTotalBalanceErrorMsg: 'We have reached the upper limit of the amount we allow the bridge to hold at this point so it is not possible to use the token you have chosen now.\n\nPlease try later or use another token.', - error_title: 'Transaction error', - limitation_error_title: 'Limitation error' + errorTitle: 'Transaction error', + limitationErrorTitle: 'Limitation error' }, onboarding: { - title_txt: 'Before takeoff, a few important notes!', - subtitle_txt: 'While using StarkGate Alpha:', - bullets_txt: [ + titleTxt: 'Before takeoff, a few important notes!', + subtitleTxt: 'While using StarkGate Alpha:', + bulletsTxt: [ 'Use Google Chrome', 'Refrain from switching browsers', 'Do not refresh the page while the transfer is being processed', @@ -111,20 +112,20 @@ const strings = { } }, toasts: { - alpha_disclaimer_msg: + alphaDisclaimerMsg: 'This is an ALPHA version of StarkNet, and its Bridge. As such, delays may occur, and catastrophic bugs may lurk. Thanks, OGs, for trying it at this early stage.', - transfer_log_link: 'View on Transfer Log', + transferLogLink: 'View on Transfer Log', pendingTransfer: { - pending_txt: 'Waiting for transaction to be accepted on StarkNet', - consumed_txt: 'Transaction accepted on StarkNet', - rejected_txt: 'Transaction rejected on StarkNet' + pendingTxt: 'Waiting for transaction to be accepted on StarkNet', + consumedTxt: 'Transaction accepted on StarkNet', + rejectedTxt: 'Transaction rejected on StarkNet' }, completeTransfer: { - title_txt: 'StarkNet finished processing your transfer!', - body_txt: + titleTxt: 'StarkNet finished processing your transfer!', + bodyTxt: 'Click on Complete Transfer to transfer the funds from StarkNet Bridge to your Ethereum address.', - dismiss_btn_txt: 'Dismiss', - complete_transfer_btn_txt: 'Complete Transfer' + dismissBtnTxt: 'Dismiss', + completeTransferBtnTxt: 'Complete Transfer' } } }; diff --git a/src/components/UI/Modal/Modal/Modal.constants.js b/src/enums/ModalSize.js similarity index 61% rename from src/components/UI/Modal/Modal/Modal.constants.js rename to src/enums/ModalSize.js index 5644456c..d3823c64 100644 --- a/src/components/UI/Modal/Modal/Modal.constants.js +++ b/src/enums/ModalSize.js @@ -12,10 +12,3 @@ export const ModalSize = { height: 500 } }; - -export const ModalType = { - INFO: 'info', - SUCCESS: 'success', - WARNING: 'warning', - ERROR: 'error' -}; diff --git a/src/enums/ModalType.js b/src/enums/ModalType.js new file mode 100644 index 00000000..779c1ab9 --- /dev/null +++ b/src/enums/ModalType.js @@ -0,0 +1,6 @@ +export const ModalType = { + INFO: 'info', + SUCCESS: 'success', + WARNING: 'warning', + ERROR: 'error' +}; diff --git a/src/enums/index.js b/src/enums/index.js index b611f0f3..55fa1ba6 100644 --- a/src/enums/index.js +++ b/src/enums/index.js @@ -12,4 +12,6 @@ export * from './Breakpoint'; export * from './ToastType'; export * from './TransferError'; export * from './TransferStep'; +export * from './ModalSize'; +export * from './ModalType'; export * from './ErrorType'; diff --git a/src/hooks/index.js b/src/hooks/index.js index 026bcce1..d0eaf927 100644 --- a/src/hooks/index.js +++ b/src/hooks/index.js @@ -11,6 +11,8 @@ export * from './usePrevious'; export * from './useTransfer'; export * from './useTransferToL1'; export * from './useTransferToL2'; -export * from './useConfig'; +export * from './useEnvs'; export * from './useTransferProgress'; export * from './useTokenConstant'; +export * from './useConstants'; +export * from './useTranslation'; diff --git a/src/hooks/useConfig.js b/src/hooks/useConfig.js deleted file mode 100644 index 0f7728e1..00000000 --- a/src/hooks/useConfig.js +++ /dev/null @@ -1,5 +0,0 @@ -import {useMemo} from 'react'; - -import config from '../config/envs.js'; - -export const useConfig = () => useMemo(() => config, []); diff --git a/src/hooks/useConstants.js b/src/hooks/useConstants.js new file mode 100644 index 00000000..a3f335a0 --- /dev/null +++ b/src/hooks/useConstants.js @@ -0,0 +1,5 @@ +import {useMemo} from 'react'; + +import constants from '../config/constants'; + +export const useConstants = () => useMemo(() => constants, []); diff --git a/src/hooks/useContract.js b/src/hooks/useContract.js index 99dee7ab..79885611 100644 --- a/src/hooks/useContract.js +++ b/src/hooks/useContract.js @@ -2,14 +2,12 @@ import {useCallback, useMemo} from 'react'; import {L1_ERC20_ABI, L1_ERC20_BRIDGE_ABI, L1_ETH_BRIDGE_ABI, L1_MESSAGING_ABI} from '../abis/l1'; import {L2_BRIDGE_ABI, L2_ERC20_ABI} from '../abis/l2'; -import envs from '../config/envs'; import {NetworkType} from '../enums'; import {useL1Token} from '../providers/TokensProvider'; import {useTransfer} from '../providers/TransferProvider'; import {useL1Wallet, useL2Wallet} from '../providers/WalletsProvider'; import utils from '../utils'; - -const {starknetContractAddress} = envs; +import {useEnvs} from './useEnvs'; const cache = {}; @@ -80,6 +78,7 @@ export const useL1TokenContract = () => { }; export const useStarknetContract = () => { + const {starknetContractAddress} = useEnvs(); const {chainId} = useL1Wallet(); const getContract = useContract( L1_MESSAGING_ABI, diff --git a/src/hooks/useEnvs.js b/src/hooks/useEnvs.js new file mode 100644 index 00000000..915a5563 --- /dev/null +++ b/src/hooks/useEnvs.js @@ -0,0 +1,5 @@ +import {useMemo} from 'react'; + +import envs from '../config/envs.js'; + +export const useEnvs = () => useMemo(() => envs, []); diff --git a/src/hooks/useTransferProgress.js b/src/hooks/useTransferProgress.js index 3dd960f0..6cecbf1e 100644 --- a/src/hooks/useTransferProgress.js +++ b/src/hooks/useTransferProgress.js @@ -2,9 +2,10 @@ import {useMemo} from 'react'; import {TransferError} from '../enums'; import utils from '../utils'; +import {useTranslation} from './useTranslation'; export const useTransferProgress = () => { - const transferProgressStrings = utils.getTranslation('modals.transferProgress'); + const transferProgressStrings = useTranslation('modals.transferProgress'); return useMemo( () => ({ diff --git a/src/hooks/useTranslation.js b/src/hooks/useTranslation.js new file mode 100644 index 00000000..76824bfe --- /dev/null +++ b/src/hooks/useTranslation.js @@ -0,0 +1,5 @@ +import {useMemo} from 'react'; + +import utils from '../utils'; + +export const useTranslation = path => useMemo(() => utils.getTranslation(path), [path]); diff --git a/src/providers/AppProvider/AppProvider.js b/src/providers/AppProvider/AppProvider.js index 00f0f67d..fb38dbf9 100644 --- a/src/providers/AppProvider/AppProvider.js +++ b/src/providers/AppProvider/AppProvider.js @@ -1,14 +1,13 @@ import PropTypes from 'prop-types'; import React, {useReducer} from 'react'; -import envs from '../../config/envs'; +import {useEnvs} from '../../hooks'; import utils from '../../utils'; import {AppContext} from './app-context'; import {actions, initialState, reducer} from './app-reducer'; -const {localStorageAcceptTermsKey} = envs; - export const AppProvider = ({children}) => { + const {localStorageAcceptTermsKey} = useEnvs(); const [state, dispatch] = useReducer(reducer, initialState); const login = () => { diff --git a/src/providers/BlockHashProvider/BlockHashProvider.js b/src/providers/BlockHashProvider/BlockHashProvider.js index 5c48229b..eae9b31a 100644 --- a/src/providers/BlockHashProvider/BlockHashProvider.js +++ b/src/providers/BlockHashProvider/BlockHashProvider.js @@ -1,12 +1,12 @@ import PropTypes from 'prop-types'; import React, {useCallback, useEffect, useState} from 'react'; -import {useConfig} from '../../hooks'; +import {useEnvs} from '../../hooks'; import {starknet} from '../../libs'; import {BlockHashContext} from './block-hash-context'; export const BlockHashProvider = ({children}) => { - const {pollBlockNumberInterval} = useConfig(); + const {pollBlockNumberInterval} = useEnvs(); const [blockHash, setBlockHash] = useState(); const fetchBlockHash = useCallback(async () => { diff --git a/src/providers/ModalProvider/modal-hooks.js b/src/providers/ModalProvider/modal-hooks.js index 7353cfe1..add2042b 100644 --- a/src/providers/ModalProvider/modal-hooks.js +++ b/src/providers/ModalProvider/modal-hooks.js @@ -1,7 +1,7 @@ import {useCallback, useContext} from 'react'; -import {ModalType} from '../../components/UI/Modal/Modal/Modal.constants'; -import utils from '../../utils'; +import {ModalType} from '../../enums'; +import {useTranslation} from '../../hooks'; import {ModalContext} from './modal-context'; export const useModal = () => { @@ -46,6 +46,7 @@ export const useProgressModal = (steps = []) => { export const useTransactionSubmittedModal = steps => { const {showModal} = useContext(ModalContext); + const {titleTxt} = useTranslation('modals.transactionSubmitted'); return useCallback( transfer => { @@ -59,7 +60,7 @@ export const useTransactionSubmittedModal = steps => { componentProps: { transfer }, - title: utils.getTranslation('modals.transactionSubmitted.title_txt'), + title: titleTxt, withButtons: true }); }, @@ -85,11 +86,12 @@ export const useErrorModal = () => { export const useOnboardingModal = () => { const {showModal} = useContext(ModalContext); + const {titleTxt} = useTranslation('modals.onboarding'); return useCallback(() => { showModal({ componentPath: 'UI/Modal/OnboardingModal/OnboardingModal', - title: utils.getTranslation('modals.onboarding.title_txt'), + title: titleTxt, withButtons: true }); }, [showModal]); diff --git a/src/providers/TokensProvider/TokensProvider.js b/src/providers/TokensProvider/TokensProvider.js index 3de4e039..35403f75 100644 --- a/src/providers/TokensProvider/TokensProvider.js +++ b/src/providers/TokensProvider/TokensProvider.js @@ -1,17 +1,15 @@ import PropTypes from 'prop-types'; import React, {useEffect, useReducer} from 'react'; -import constants from '../../config/constants'; -import {useLogger} from '../../hooks'; +import {useConstants, useLogger} from '../../hooks'; import {useL1TokenBalance, useL2TokenBalance} from '../../hooks/useTokenBalance'; import {useL1Wallet, useL2Wallet} from '../WalletsProvider'; import {TokensContext} from './tokens-context'; import {actions, initialState, reducer} from './tokens-reducer'; -const {FETCH_TOKEN_BALANCE_MAX_RETRY} = constants; - export const TokensProvider = ({children}) => { const logger = useLogger(TokensProvider.displayName); + const {FETCH_TOKEN_BALANCE_MAX_RETRY} = useConstants(); const [tokens, dispatch] = useReducer(reducer, initialState); const {account: l1Account} = useL1Wallet(); const {account: l2Account} = useL2Wallet(); diff --git a/src/providers/TransfersLogProvider/TransfersLogProvider.js b/src/providers/TransfersLogProvider/TransfersLogProvider.js index ba29931f..70b6b584 100644 --- a/src/providers/TransfersLogProvider/TransfersLogProvider.js +++ b/src/providers/TransfersLogProvider/TransfersLogProvider.js @@ -2,9 +2,8 @@ import PropTypes from 'prop-types'; import React, {useEffect, useReducer} from 'react'; import useDeepCompareEffect from 'use-deep-compare-effect'; -import envs from '../../config/envs'; import {isCompleted, isConsumed} from '../../enums'; -import {useLogger} from '../../hooks'; +import {useEnvs, useLogger} from '../../hooks'; import {starknet} from '../../libs'; import utils from '../../utils'; import {useBlockHash} from '../BlockHashProvider'; @@ -12,9 +11,8 @@ import {useTokens} from '../TokensProvider'; import {TransfersLogContext} from './transfers-log-context'; import {actions, initialState, reducer} from './transfers-log-reducer'; -const {localStorageTransfersLogKey} = envs; - export const TransfersLogProvider = ({children}) => { + const {localStorageTransfersLogKey} = useEnvs(); const logger = useLogger(TransfersLogProvider.displayName); const [transfers, dispatch] = useReducer(reducer, initialState); const blockHash = useBlockHash(); diff --git a/src/providers/WalletProvider/WalletProvider.js b/src/providers/WalletProvider/WalletProvider.js index 063dc4e5..4cfca992 100644 --- a/src/providers/WalletProvider/WalletProvider.js +++ b/src/providers/WalletProvider/WalletProvider.js @@ -2,11 +2,10 @@ import PropTypes from 'prop-types'; import React from 'react'; import {UseWalletProvider as UseWalletProviderWrapper} from 'use-wallet'; -import {useConfig} from '../../hooks'; +import {useEnvs} from '../../hooks'; export const WalletProvider = ({children}) => { - const {pollBalanceInterval, pollBlockNumberInterval, supportedChainId} = useConfig(); - + const {pollBalanceInterval, pollBlockNumberInterval, supportedChainId} = useEnvs(); return ( <UseWalletProviderWrapper autoConnect={false} diff --git a/src/providers/WalletsProvider/WalletsProvider.js b/src/providers/WalletsProvider/WalletsProvider.js index 9d0dea31..0e37bf52 100644 --- a/src/providers/WalletsProvider/WalletsProvider.js +++ b/src/providers/WalletsProvider/WalletsProvider.js @@ -3,14 +3,14 @@ import React, {useEffect, useReducer} from 'react'; import {useWallet} from 'use-wallet'; import {ChainType, WalletStatus} from '../../enums'; -import {useConfig} from '../../hooks'; +import {useEnvs} from '../../hooks'; import {getStarknet} from '../../libs'; import {useIsL1, useIsL2} from '../TransferProvider'; import {WalletsContext} from './wallets-context'; import {actions, initialState, reducer} from './wallets-reducer'; export const WalletsProvider = ({children}) => { - const {autoConnect} = useConfig(); + const {autoConnect} = useEnvs(); const [state, dispatch] = useReducer(reducer, initialState); const {status, connect, reset, isConnected, error, account, chainId, networkName} = useWallet(); const {selectedAddress, isConnected: isL2Connected, enable} = getStarknet(); diff --git a/src/routes/Bridge/Bridge.js b/src/routes/Bridge/Bridge.js index 878bd284..64550aff 100644 --- a/src/routes/Bridge/Bridge.js +++ b/src/routes/Bridge/Bridge.js @@ -2,8 +2,8 @@ import React, {useEffect} from 'react'; import {setUser, track, TrackEvent} from '../../analytics'; import {Account, SelectToken, ToastProvider, Transfer} from '../../components/Features'; -import envs from '../../config/envs'; import {MenuType} from '../../enums'; +import {useEnvs} from '../../hooks'; import {EventManagerProvider} from '../../providers/EventManagerProvider'; import {useMenu} from '../../providers/MenuProvider'; import {useOnboardingModal} from '../../providers/ModalProvider'; @@ -12,9 +12,8 @@ import {useL1Wallet, useL2Wallet} from '../../providers/WalletsProvider'; import utils from '../../utils'; import styles from './Bridge.module.scss'; -const {localStorageOnboardingExpirationTimestampKey, onboardingModalTimeoutHrs} = envs; - export const Bridge = () => { + const {localStorageOnboardingExpirationTimestampKey, onboardingModalTimeoutHrs} = useEnvs(); const {menu, menuProps} = useMenu(); const {account: l1account} = useL1Wallet(); const {account: l2account} = useL2Wallet(); diff --git a/src/routes/Bridge/Bridge.module.scss b/src/routes/Bridge/Bridge.module.scss index 172f0921..ae7cd882 100644 --- a/src/routes/Bridge/Bridge.module.scss +++ b/src/routes/Bridge/Bridge.module.scss @@ -1,7 +1,5 @@ @import '../../index'; -$background-color: $--color-alpha; - .bridge { display: flex; flex-direction: column; @@ -15,7 +13,7 @@ $background-color: $--color-alpha; .bridgeMenu { display: flex; flex-direction: column; - background: $background-color; + background: $--color-alpha; border-radius: 20px; padding: 20px; width: 500px; diff --git a/src/routes/Faq/Faq.js b/src/routes/Faq/Faq.js index 04d32f34..efe11a7c 100644 --- a/src/routes/Faq/Faq.js +++ b/src/routes/Faq/Faq.js @@ -3,10 +3,12 @@ import React, {useEffect} from 'react'; import {track, TrackEvent} from '../../analytics'; import {FullScreenContainer} from '../../components/UI'; import {faqs} from '../../config/faqs'; +import {useTranslation} from '../../hooks'; import styles from './Faq.module.scss'; -import {TITLE_TXT} from './Faq.strings'; export const Faq = () => { + const {titleTxt} = useTranslation('screens.faq'); + useEffect(() => { track(TrackEvent.FAQ_SCREEN); }, []); @@ -14,7 +16,7 @@ export const Faq = () => { return ( <FullScreenContainer> <div className={styles.faq}> - <h1>{TITLE_TXT}</h1> + <h1>{titleTxt}</h1> <ol> {faqs.map((faq, i) => ( <li key={`faq-${i}`} className={styles.question}> diff --git a/src/routes/Faq/Faq.strings.js b/src/routes/Faq/Faq.strings.js deleted file mode 100644 index 112efadd..00000000 --- a/src/routes/Faq/Faq.strings.js +++ /dev/null @@ -1,5 +0,0 @@ -import utils from '../../utils'; - -const {title_txt} = utils.getTranslation('screens.faq'); - -export const TITLE_TXT = title_txt; diff --git a/src/routes/Login/Login.constants.js b/src/routes/Login/Login.constants.js deleted file mode 100644 index 1be8ce1f..00000000 --- a/src/routes/Login/Login.constants.js +++ /dev/null @@ -1,2 +0,0 @@ -export const MODAL_TIMEOUT_DURATION = 2000; -export const AUTO_CONNECT_TIMEOUT_DURATION = 100; diff --git a/src/routes/Login/Login.js b/src/routes/Login/Login.js index 88fba421..bf7652e1 100644 --- a/src/routes/Login/Login.js +++ b/src/routes/Login/Login.js @@ -3,23 +3,25 @@ import React, {useEffect, useRef, useState} from 'react'; import {track, TrackEvent} from '../../analytics'; import {LoginErrorMessage, WalletLogin} from '../../components/UI'; import {ChainInfo, ErrorType, NetworkType, WalletStatus, WalletType} from '../../enums'; -import {useConfig, useWalletHandlerProvider} from '../../hooks'; +import {useEnvs, useTranslation, useWalletHandlerProvider} from '../../hooks'; import {useHideModal, useProgressModal} from '../../providers/ModalProvider'; import {useL1Wallet, useL2Wallet, useWallets} from '../../providers/WalletsProvider'; import utils from '../../utils'; -import {AUTO_CONNECT_TIMEOUT_DURATION, MODAL_TIMEOUT_DURATION} from './Login.constants'; import styles from './Login.module.scss'; -import { - DOWNLOAD_TEXT, - MODAL_TXT, - SUBTITLE_TXT, - TITLE_TXT, - UNSUPPORTED_BROWSER_TXT, - UNSUPPORTED_CHAIN_ID_TXT -} from './Login.strings'; + +const MODAL_TIMEOUT_DURATION = 2000; +const AUTO_CONNECT_TIMEOUT_DURATION = 100; export const Login = () => { - const {autoConnect} = useConfig(); + const { + titleTxt, + subtitleTxt, + downloadTxt, + modalTxt, + unsupportedBrowserTxt, + unsupportedChainIdTxt + } = useTranslation('menus.login'); + const {autoConnect, supportedChainId} = useEnvs(); const [selectedWalletName, setSelectedWalletName] = useState(''); const [error, setError] = useState(null); const [walletType, setWalletType] = useState(WalletType.L1); @@ -30,12 +32,11 @@ export const Login = () => { const {status, error: walletError} = useWallets(); const {connectWallet: connectL1Wallet, isConnected: isConnectedL1Wallet} = useL1Wallet(); const {connectWallet: connectL2Wallet} = useL2Wallet(); - const {supportedChainId} = useConfig(); useEffect(() => { track(TrackEvent.LOGIN_SCREEN); if (!utils.browser.isChrome()) { - setError({type: ErrorType.UNSUPPORTED_BROWSER, message: UNSUPPORTED_BROWSER_TXT}); + setError({type: ErrorType.UNSUPPORTED_BROWSER, message: unsupportedBrowserTxt}); } }, []); @@ -107,7 +108,7 @@ export const Login = () => { if (error.name === 'ChainUnsupportedError') { setError({ type: ErrorType.UNSUPPORTED_CHAIN_ID, - message: utils.object.evaluate(UNSUPPORTED_CHAIN_ID_TXT, { + message: utils.object.evaluate(unsupportedChainIdTxt, { chainName: ChainInfo.L1[supportedChainId].NAME }) }); @@ -117,7 +118,10 @@ export const Login = () => { const maybeShowModal = () => { maybeHideModal(); modalTimeoutId.current = setTimeout(() => { - showProgressModal(selectedWalletName, MODAL_TXT(selectedWalletName)); + showProgressModal( + selectedWalletName, + utils.object.evaluate(modalTxt, {walletName: selectedWalletName}) + ); }, MODAL_TIMEOUT_DURATION); }; @@ -150,16 +154,18 @@ export const Login = () => { return ( <div className={utils.object.toClasses(styles.login, 'center')}> <div className={styles.content}> - <div className={styles.title}>{TITLE_TXT}</div> + <div className={styles.title}>{titleTxt}</div> <p> - {SUBTITLE_TXT(walletType === WalletType.L1 ? NetworkType.L1.name : NetworkType.L2.name)} + {utils.object.evaluate(subtitleTxt, { + networkName: walletType === WalletType.L1 ? NetworkType.L1.name : NetworkType.L2.name + })} </p> <div className={styles.container}>{renderLoginWallets()}</div> {error && <LoginErrorMessage message={error.message} />} </div> <div className={styles.separator} /> <div className={styles.download}> - {DOWNLOAD_TEXT[0]} <span onClick={onDownloadClick}>{DOWNLOAD_TEXT[1]}</span> + {downloadTxt[0]} <span onClick={onDownloadClick}>{downloadTxt[1]}</span> </div> </div> ); diff --git a/src/routes/Login/Login.module.scss b/src/routes/Login/Login.module.scss index e05d1fee..d631f1a0 100644 --- a/src/routes/Login/Login.module.scss +++ b/src/routes/Login/Login.module.scss @@ -1,15 +1,9 @@ @import '../../index'; -$background-color: $--color-alpha; -$text-color: $--color-white; -$download-color: $--color-white-1; -$download-button-color: $--color-beta; -$container-color: $--color-alpha-3; - .login { position: absolute; width: 450px; - background: $background-color; + background: $--color-alpha; box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1); border-radius: 20px; @@ -18,7 +12,7 @@ $container-color: $--color-alpha-3; p { font-size: 12px; - color: $text-color; + color: $--color-white; opacity: 0.7; } @@ -29,13 +23,13 @@ $container-color: $--color-alpha-3; line-height: 30px; text-align: center; letter-spacing: 0.01em; - color: $text-color; + color: $--color-white; text-transform: capitalize; } .container { margin-top: 20px; - border: 1px solid $container-color; + border: 1px solid $--color-alpha-3; box-sizing: border-box; border-radius: 8px; } @@ -47,11 +41,11 @@ $container-color: $--color-alpha-3; line-height: 17px; text-align: center; letter-spacing: 0.01em; - color: $download-color; + color: $--color-white-1; span { cursor: pointer; - color: $download-button-color; + color: $--color-beta; text-decoration: underline; } } @@ -60,5 +54,5 @@ $container-color: $--color-alpha-3; .separator { height: 1px; width: 100%; - background: $container-color; + background: $--color-alpha-3; } diff --git a/src/routes/Login/Login.strings.js b/src/routes/Login/Login.strings.js deleted file mode 100644 index 051d04d2..00000000 --- a/src/routes/Login/Login.strings.js +++ /dev/null @@ -1,17 +0,0 @@ -import utils from '../../utils'; - -const { - title_txt, - subtitle_txt, - download_txt, - modal_txt, - unsupported_chain_id_txt, - unsupported_browser_txt -} = utils.getTranslation('menus.login'); - -export const TITLE_TXT = title_txt; -export const DOWNLOAD_TEXT = download_txt; -export const UNSUPPORTED_BROWSER_TXT = unsupported_browser_txt; -export const SUBTITLE_TXT = networkName => utils.object.evaluate(subtitle_txt, {networkName}); -export const MODAL_TXT = walletName => utils.object.evaluate(modal_txt, {walletName}); -export const UNSUPPORTED_CHAIN_ID_TXT = unsupported_chain_id_txt; diff --git a/src/routes/Terms/Terms.js b/src/routes/Terms/Terms.js index 50486cf9..70a8a987 100644 --- a/src/routes/Terms/Terms.js +++ b/src/routes/Terms/Terms.js @@ -3,23 +3,19 @@ import {useNavigate} from 'react-router-dom'; import {track, TrackEvent} from '../../analytics'; import {Button, FullScreenContainer} from '../../components/UI'; -import {useColors, useConfig} from '../../hooks'; +import {useColors, useConstants, useEnvs, useTranslation} from '../../hooks'; import {useTerms} from '../../providers/AppProvider'; import {useL1Wallet, useL2Wallet} from '../../providers/WalletsProvider'; import styles from './Terms.module.scss'; -import {ACCEPT_BTN_TXT, LAST_REVISED_TXT, TITLE_TXT} from './Terms.strings'; - -const STARKWARE_SITE_URL = 'https://starkware.co/'; -const STARKNET_DOCS_URL = 'https://starknet.io/documentation/'; -const STARKGATE_MAIL_ADDRESS = 'starkgate@starknet.io'; -const STARKGATE_CONTRACTS_URL = - 'https://github.com/starkware-libs/starkgate-contracts/tree/main/src/starkware/starknet/apps/starkgate'; export const Terms = () => { + const {STARKWARE_SITE_URL, STARKNET_DOCS_URL, STARKGATE_MAIL_ADDRESS, STARKGATE_CONTRACTS_URL} = + useConstants(); + const {titleTxt, lastRevisedTxt, acceptBtnTxt} = useTranslation('screens.terms'); const navigate = useNavigate(); const termsRef = useRef(); const acceptButtonRef = useRef(); - const {appUrl} = useConfig(); + const {appUrl} = useEnvs(); const {isAcceptTerms, acceptTerms} = useTerms(); const {colorGamma1, colorWhite} = useColors(); const {account: l1account} = useL1Wallet(); @@ -57,8 +53,8 @@ export const Terms = () => { }} onScroll={onScroll} > - <h1>{TITLE_TXT}</h1> - <h4>{LAST_REVISED_TXT}</h4> + <h1>{titleTxt}</h1> + <h4>{lastRevisedTxt}</h4> <div> <p> <a href={STARKWARE_SITE_URL} rel="noreferrer" target="_blank"> @@ -542,7 +538,7 @@ export const Terms = () => { style={{ width: '100%' }} - text={ACCEPT_BTN_TXT} + text={acceptBtnTxt} onClick={accept} /> <p> diff --git a/src/routes/Terms/Terms.strings.js b/src/routes/Terms/Terms.strings.js deleted file mode 100644 index e85d26d4..00000000 --- a/src/routes/Terms/Terms.strings.js +++ /dev/null @@ -1,7 +0,0 @@ -import utils from '../../utils'; - -const {title_txt, accept_btn_txt, last_revised_txt} = utils.getTranslation('screens.terms'); - -export const TITLE_TXT = title_txt; -export const ACCEPT_BTN_TXT = accept_btn_txt; -export const LAST_REVISED_TXT = last_revised_txt; From 81cd99e0e0c57fc3087491333e8f41dd89843cda Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Mon, 18 Apr 2022 12:54:00 +0000 Subject: [PATCH 146/211] prerelease: v1.2.1-dev.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### [1.2.1-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.0...v1.2.1-dev.1) (2022-04-18) ### 💉 Improvements * move to hooks useConstants, useEnvs, useTranslation ([#159](https://github.com/starkware-libs/starkgate-frontend/issues/159)) ([b77ba11](https://github.com/starkware-libs/starkgate-frontend/commit/b77ba118934e95859cb4409ba22be3c8ac25fd79)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ece442a..f1594916 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +### [1.2.1-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.0...v1.2.1-dev.1) (2022-04-18) + + +### 💉 Improvements + +* move to hooks useConstants, useEnvs, useTranslation ([#159](https://github.com/starkware-libs/starkgate-frontend/issues/159)) ([b77ba11](https://github.com/starkware-libs/starkgate-frontend/commit/b77ba118934e95859cb4409ba22be3c8ac25fd79)) + ## [1.2.0](https://github.com/starkware-libs/starkgate-frontend/compare/v1.1.0...v1.2.0) (2022-04-14) diff --git a/package.json b/package.json index e26c1406..bb32f87e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.2.0", + "version": "1.2.1-dev.1", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From a8cad802e13fcd7b940eed5d60a8f943d82662a9 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Thu, 21 Apr 2022 23:48:45 +0300 Subject: [PATCH 147/211] refactor: useTracking (#160) --- src/analytics/track-event.js | 30 ++++---- src/components/Containers/Header/Header.js | 7 +- src/components/Features/Account/Account.js | 44 ++++++------ .../Features/SelectToken/SelectToken.js | 6 +- src/components/Features/Transfer/Transfer.js | 14 ++-- src/hooks/index.js | 1 + src/hooks/useTracking.js | 69 +++++++++++++++++++ src/hooks/useTransferToL1.js | 22 +++--- src/hooks/useTransferToL2.js | 18 +++-- src/routes/Bridge/Bridge.js | 15 ++-- src/routes/Faq/Faq.js | 7 +- src/routes/Login/Login.js | 13 ++-- src/routes/Terms/Terms.js | 8 +-- 13 files changed, 167 insertions(+), 87 deletions(-) create mode 100644 src/hooks/useTracking.js diff --git a/src/analytics/track-event.js b/src/analytics/track-event.js index 32fb9c8a..ea40f06f 100644 --- a/src/analytics/track-event.js +++ b/src/analytics/track-event.js @@ -12,18 +12,24 @@ export const TrackEvent = { TRANSFER: { SWAP_NETWORK: 'TRANSFER_MENU/swap_network', MAX_CLICK: 'TRANSFER_MENU/max_click', - TRANSFER_TO_L2_INITIATED: 'TRANSFER_MENU/transfer_to_l2_initiated', - TRANSFER_TO_L2_SUCCESS: 'TRANSFER_MENU/transfer_to_l2_success', - TRANSFER_TO_L2_REJECT: 'TRANSFER_MENU/transfer_to_l2_reject', - TRANSFER_TO_L2_ERROR: 'TRANSFER_MENU/transfer_to_l2_error', - TRANSFER_TO_L1_INITIATED: 'TRANSFER_MENU/transfer_to_l1_initiated', - TRANSFER_TO_L1_SUCCESS: 'TRANSFER_MENU/transfer_to_l1_success', - TRANSFER_TO_L1_REJECT: 'TRANSFER_MENU/transfer_to_l1_reject', - TRANSFER_TO_L1_ERROR: 'TRANSFER_MENU/transfer_to_l1_error', - COMPLETE_TRANSFER_TO_L1_INITIATED: 'TRANSFER_MENU/complete_transfer_to_l1_initiated', - COMPLETE_TRANSFER_TO_L1_SUCCESS: 'TRANSFER_MENU/complete_transfer_to_l1_success', - COMPLETE_TRANSFER_TO_L1_REJECT: 'TRANSFER_MENU/complete_transfer_to_l1_reject', - COMPLETE_TRANSFER_TO_L1_ERROR: 'TRANSFER_MENU/complete_transfer_to_l1_error' + TRANSFER_TO_L2: { + INITIATED: 'TRANSFER_MENU/transfer_to_l2_initiated', + SUCCESS: 'TRANSFER_MENU/transfer_to_l2_success', + ERROR: 'TRANSFER_MENU/transfer_to_l2_error', + REJECT: 'TRANSFER_MENU/transfer_to_l2_reject' + }, + TRANSFER_TO_L1: { + INITIATED: 'TRANSFER_MENU/transfer_to_l1_initiated', + SUCCESS: 'TRANSFER_MENU/transfer_to_l1_success', + ERROR: 'TRANSFER_MENU/transfer_to_l1_error', + REJECT: 'TRANSFER_MENU/transfer_to_l1_reject' + }, + COMPLETE_TRANSFER_TO_L1: { + INITIATED: 'TRANSFER_MENU/complete_transfer_to_l1_initiated', + SUCCESS: 'TRANSFER_MENU/complete_transfer_to_l1_success', + ERROR: 'TRANSFER_MENU/complete_transfer_to_l1_error', + REJECT: 'TRANSFER_MENU/complete_transfer_to_l1_reject' + } }, /** diff --git a/src/components/Containers/Header/Header.js b/src/components/Containers/Header/Header.js index 258c3e0c..00fe13a1 100644 --- a/src/components/Containers/Header/Header.js +++ b/src/components/Containers/Header/Header.js @@ -2,10 +2,10 @@ import React from 'react'; import {useLocation, useNavigate} from 'react-router-dom'; import useBreakpoint from 'use-breakpoint'; -import {track} from '../../../analytics'; +import {TrackEvent} from '../../../analytics'; import {ReactComponent as StarkGateLogo} from '../../../assets/img/starkgate.svg'; import {Breakpoint} from '../../../enums'; -import {useColors, useConstants, useEnvs, useTranslation} from '../../../hooks'; +import {useColors, useConstants, useEnvs, useTracking, useTranslation} from '../../../hooks'; import {useLogin} from '../../../providers/AppProvider'; import {useMenu} from '../../../providers/MenuProvider'; import {useIsL1, useIsL2} from '../../../providers/TransferProvider'; @@ -16,6 +16,7 @@ import styles from './Header.module.scss'; export const Header = () => { const {DISCORD_LINK_URL} = useConstants(); + const [trackDiscordClick] = useTracking(TrackEvent.DISCORD_TAB_CLICK); const {env} = useEnvs(); const {tabDiscordTxt, tabFaqTxt, tabTermsTxt, chainTxt} = useTranslation('containers.header'); const navigate = useNavigate(); @@ -59,7 +60,7 @@ export const Header = () => { }; const onTabDiscordClick = () => { - track(TrackEvent.DISCORD_TAB_CLICK); + trackDiscordClick(); utils.browser.openInNewTab(DISCORD_LINK_URL); }; diff --git a/src/components/Features/Account/Account.js b/src/components/Features/Account/Account.js index 45522187..6eb62d90 100644 --- a/src/components/Features/Account/Account.js +++ b/src/components/Features/Account/Account.js @@ -1,8 +1,13 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {track, TrackEvent} from '../../../analytics'; -import {useCompleteTransferToL1, useConstants, useEnvs, useTranslation} from '../../../hooks'; +import { + useAccountTracking, + useCompleteTransferToL1, + useConstants, + useEnvs, + useTranslation +} from '../../../hooks'; import {useMenu} from '../../../providers/MenuProvider'; import {useTransfer} from '../../../providers/TransferProvider'; import {useAccountTransfersLog} from '../../../providers/TransfersLogProvider'; @@ -21,6 +26,13 @@ import {TransferLog} from '../TransferLog/TransferLog'; export const Account = ({transferId}) => { const {titleTxt} = useTranslation('menus.account'); + const [ + trackTxLinkClick, + trackAccountLinkClick, + trackViewTransfersLog, + trackCompleteTransferClick, + trackAddressCopied + ] = useAccountTracking(); const {etherscanAccountUrl, voyagerAccountUrl} = useEnvs(); const {ETHERSCAN, VOYAGER} = useConstants(); const {showTransferMenu} = useMenu(); @@ -36,56 +48,40 @@ export const Account = ({transferId}) => { key={index} transfer={transfer} onCompleteTransferClick={() => onCompleteTransferClick(transfer)} - onTxClick={onTxClick} + onTxClick={trackTxLinkClick} /> )) : null; }; - const onTxClick = () => { - track(TrackEvent.ACCOUNT.TX_LINK_CLICK); - }; - const onCompleteTransferClick = transfer => { - track(TrackEvent.ACCOUNT.COMPLETE_TRANSFER_CLICK); + trackCompleteTransferClick(); completeTransferToL1(transfer); }; - const onAccountLinkClick = () => { - track(TrackEvent.ACCOUNT.ACCOUNT_LINK_CLICK); - }; - - const onShowTransfers = () => { - track(TrackEvent.ACCOUNT.VIEW_TRANSFERS_LOG); - }; - - const onAccountAddressClick = () => { - track(TrackEvent.ACCOUNT.ADDRESS_COPIED); - }; - return ( <Menu> <div> <BackButton onClick={() => showTransferMenu()} /> <MenuTitle text={utils.object.evaluate(titleTxt, {network: fromNetwork.name})} /> - <AccountAddress address={account} onClick={onAccountAddressClick} /> + <AccountAddress address={account} onClick={trackAddressCopied} /> {isL1 && ( <LinkButton text={ETHERSCAN} url={etherscanAccountUrl(account)} - onClick={onAccountLinkClick} + onClick={trackAccountLinkClick} /> )} {isL2 && ( <LinkButton text={VOYAGER} url={voyagerAccountUrl(account)} - onClick={onAccountLinkClick} + onClick={trackAccountLinkClick} /> )} <TransferLogContainer transferIndex={utils.object.findIndexById(transfers, transferId)} - onShowTransfers={onShowTransfers} + onShowTransfers={trackViewTransfersLog} > {renderTransfers()} </TransferLogContainer> diff --git a/src/components/Features/SelectToken/SelectToken.js b/src/components/Features/SelectToken/SelectToken.js index b391b560..167496f7 100644 --- a/src/components/Features/SelectToken/SelectToken.js +++ b/src/components/Features/SelectToken/SelectToken.js @@ -1,9 +1,8 @@ import React, {useEffect, useState} from 'react'; -import {track, TrackEvent} from '../../../analytics'; import L1Logo from '../../../assets/svg/tokens/eth.svg'; import L2Logo from '../../../assets/svg/tokens/starknet.svg'; -import {useColors, useTranslation} from '../../../hooks'; +import {useColors, useTranslation, useSelectTokenTracking} from '../../../hooks'; import {useMenu} from '../../../providers/MenuProvider'; import {useTokens} from '../../../providers/TokensProvider'; import {useTransfer} from '../../../providers/TransferProvider'; @@ -11,6 +10,7 @@ import {BackButton, Menu, MenuTitle, RefreshIcon, SearchToken, SelectTokenList} import styles from './SelectToken.module.scss'; export const SelectToken = () => { + const [trackSelectToken] = useSelectTokenTracking(); const {titleTxt} = useTranslation('menus.selectToken'); const {tokens, updateTokenBalance} = useTokens(); const {colorBeta} = useColors(); @@ -25,7 +25,7 @@ export const SelectToken = () => { const onTokenSelect = tokenData => { const {symbol} = tokenData; - track(TrackEvent.SELECT_TOKEN.TOKEN_SELECTED, {symbol}); + trackSelectToken(symbol); selectToken(symbol); showTransferMenu(); }; diff --git a/src/components/Features/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer.js index c8515ee2..805cb211 100644 --- a/src/components/Features/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer.js @@ -1,8 +1,13 @@ import React, {useEffect, useState} from 'react'; -import {track, TrackEvent} from '../../../analytics'; import {ActionType, NetworkType} from '../../../enums'; -import {useMaxDeposit, useTransferToL1, useTransferToL2, useTranslation} from '../../../hooks'; +import { + useMaxDeposit, + useTransferToL1, + useTransferToL2, + useTransferTracking, + useTranslation +} from '../../../hooks'; import {useMenu} from '../../../providers/MenuProvider'; import {useL1Token, useL2Token, useTokens} from '../../../providers/TokensProvider'; import {useAmount, useIsL1, useIsL2, useTransfer} from '../../../providers/TransferProvider'; @@ -26,6 +31,7 @@ export const Transfer = () => { tooManyDigitsErrorMsg, negativeValueErrorMsg } = useTranslation('menus.transfer'); + const [trackMaxClick, trackSwapNetworks] = useTransferTracking(); const [isL1, swapToL1] = useIsL1(); const [isL2, swapToL2] = useIsL2(); const [amount, setAmount] = useAmount(); @@ -82,7 +88,7 @@ export const Transfer = () => { const onMaxClick = () => { try { - track(TrackEvent.TRANSFER.MAX_CLICK); + trackMaxClick(); setAmount(String(Math.min(selectedToken.balance, isL1 ? Number(maxDeposit) : Infinity))); } catch (ex) { setAmount(selectedToken.balance); @@ -94,7 +100,7 @@ export const Transfer = () => { }; const onSwapClick = () => { - track(TrackEvent.TRANSFER.SWAP_NETWORK); + trackSwapNetworks(); isL2 ? swapToL1() : swapToL2(); }; diff --git a/src/hooks/index.js b/src/hooks/index.js index d0eaf927..58d2197d 100644 --- a/src/hooks/index.js +++ b/src/hooks/index.js @@ -16,3 +16,4 @@ export * from './useTransferProgress'; export * from './useTokenConstant'; export * from './useConstants'; export * from './useTranslation'; +export * from './useTracking'; diff --git a/src/hooks/useTracking.js b/src/hooks/useTracking.js new file mode 100644 index 00000000..0d1760e8 --- /dev/null +++ b/src/hooks/useTracking.js @@ -0,0 +1,69 @@ +import {useCallback} from 'react'; + +import {track, TrackEvent} from '../analytics'; +import {MenuType} from '../enums'; + +export const useTracking = events => { + if (typeof events === 'string') { + events = [events]; + } + + const trackEvent = useCallback(event => data => track(event, data), []); + + return events.map(trackEvent, [events]); +}; + +export const useMenuTracking = () => { + const [trackAccountMenu, trackTransferMenu, trackSelectTokenMenu] = useTracking([ + TrackEvent.ACCOUNT_MENU, + TrackEvent.TRANSFER_MENU, + TrackEvent.SELECT_TOKEN_MENU + ]); + + return useCallback(menu => { + switch (menu) { + case MenuType.ACCOUNT: + trackAccountMenu(); + break; + case MenuType.SELECT_TOKEN: + trackSelectTokenMenu(); + break; + case MenuType.TRANSFER: + default: + trackTransferMenu(); + break; + } + }, []); +}; + +export const useLoginTracking = () => { + return useTracking([TrackEvent.LOGIN_SCREEN, ...Object.values(TrackEvent.LOGIN)]); +}; + +export const useTermsTracking = () => { + return useTracking([TrackEvent.TERMS_SCREEN, ...Object.values(TrackEvent.TERMS)]); +}; + +export const useTransferTracking = () => { + return useTracking([TrackEvent.TRANSFER.MAX_CLICK, TrackEvent.TRANSFER.SWAP_NETWORK]); +}; + +export const useTransferToL1Tracking = () => { + return useTracking([...Object.values(TrackEvent.TRANSFER.TRANSFER_TO_L1)]); +}; + +export const useTransferToL2Tracking = () => { + return useTracking([...Object.values(TrackEvent.TRANSFER.TRANSFER_TO_L2)]); +}; + +export const useCompleteTransferToL1Tracking = () => { + return useTracking([...Object.values(TrackEvent.TRANSFER.COMPLETE_TRANSFER_TO_L1)]); +}; + +export const useAccountTracking = () => { + return useTracking([...Object.values(TrackEvent.ACCOUNT)]); +}; + +export const useSelectTokenTracking = () => { + return useTracking([...Object.values(TrackEvent.SELECT_TOKEN)]); +}; diff --git a/src/hooks/useTransferToL1.js b/src/hooks/useTransferToL1.js index 1e6717c6..c5fa0e42 100644 --- a/src/hooks/useTransferToL1.js +++ b/src/hooks/useTransferToL1.js @@ -1,6 +1,5 @@ import {useCallback} from 'react'; -import {track, TrackEvent} from '../analytics'; import {initiateWithdraw, withdraw} from '../api/bridge'; import { ActionType, @@ -18,11 +17,13 @@ import {useL1Wallet, useL2Wallet} from '../providers/WalletsProvider'; import utils from '../utils'; import {useL1TokenBridgeContract, useTokenBridgeContract} from './useContract'; import {useLogger} from './useLogger'; +import {useCompleteTransferToL1Tracking, useTransferToL1Tracking} from './useTracking'; import {useTransfer} from './useTransfer'; import {useTransferProgress} from './useTransferProgress'; export const useTransferToL1 = () => { const logger = useLogger('useTransferToL1'); + const [trackInitiated, trackSuccess, trackError] = useTransferToL1Tracking(); const {account: l1Account} = useL1Wallet(); const {account: l2Account, config: l2Config} = useL2Wallet(); const selectedToken = useSelectedToken(); @@ -35,7 +36,7 @@ export const useTransferToL1 = () => { const {decimals, bridgeAddress, name, symbol} = selectedToken; const sendInitiateWithdraw = () => { - track(TrackEvent.TRANSFER.TRANSFER_TO_L1_INITIATED, { + trackInitiated({ from_address: l2Account, to_address: l1Account, amount, @@ -71,9 +72,7 @@ export const useTransferToL1 = () => { logger.log('Waiting for tx to be received on L2'); await utils.blockchain.starknet.waitForTransaction(l2hash, TransactionStatus.RECEIVED); logger.log('Done', {l2hash}); - track(TrackEvent.TRANSFER.TRANSFER_TO_L1_SUCCESS, { - l2hash - }); + trackSuccess(l2hash); handleData({ type: ActionType.TRANSFER_TO_L1, sender: l2Account, @@ -85,7 +84,7 @@ export const useTransferToL1 = () => { }); } catch (ex) { logger.error(ex.message, {ex}); - track(TrackEvent.TRANSFER.TRANSFER_TO_L1_ERROR, ex); + trackError(ex); handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, ex)); } }, @@ -112,13 +111,14 @@ export const useCompleteTransferToL1 = () => { const getL1Token = useL1Token(); const getL1TokenBridgeContract = useL1TokenBridgeContract(); const addWithdrawalListener = useWithdrawalListener(); + const [trackInitiated, trackSuccess, trackError, trackReject] = useCompleteTransferToL1Tracking(); return useCallback( async transfer => { const {symbol, amount, l2hash} = transfer; const sendWithdrawal = () => { - track(TrackEvent.TRANSFER.COMPLETE_TRANSFER_TO_L1_INITIATED, { + trackInitiated({ to_address: l1Account, l2hash, amount, @@ -146,7 +146,7 @@ export const useCompleteTransferToL1 = () => { ) ); } else { - track(TrackEvent.TRANSFER.COMPLETE_TRANSFER_TO_L1_REJECT, error); + trackReject(error); logger.error(error.message); handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, error)); } @@ -156,10 +156,10 @@ export const useCompleteTransferToL1 = () => { if (!error) { const {transactionHash: l1hash} = event; logger.log('Done', l1hash); - track(TrackEvent.TRANSFER.COMPLETE_TRANSFER_TO_L1_SUCCESS, {l1hash}); + trackSuccess(l1hash); handleData({...transfer, l1hash}); } else { - track(TrackEvent.TRANSFER.COMPLETE_TRANSFER_TO_L1_ERROR, error); + trackError(error); logger.error(error.message); handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, error)); } @@ -177,7 +177,7 @@ export const useCompleteTransferToL1 = () => { logger.log('Calling withdraw'); await sendWithdrawal(); } catch (ex) { - track(TrackEvent.TRANSFER.COMPLETE_TRANSFER_TO_L1_ERROR, ex); + trackError(ex); logger.error(ex.message, {ex}); handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, ex)); } diff --git a/src/hooks/useTransferToL2.js b/src/hooks/useTransferToL2.js index 280e3cbb..c7a5e1eb 100644 --- a/src/hooks/useTransferToL2.js +++ b/src/hooks/useTransferToL2.js @@ -1,6 +1,5 @@ import {useCallback} from 'react'; -import {track, TrackEvent} from '../analytics'; import {deposit, depositEth} from '../api/bridge'; import {allowance, approve, balanceOf, ethBalanceOf} from '../api/erc20'; import { @@ -19,11 +18,13 @@ import utils from '../utils'; import {useTokenBridgeContract, useTokenContract} from './useContract'; import {useLogger} from './useLogger'; import {useMaxTotalBalance} from './useTokenConstant'; +import {useTransferToL2Tracking} from './useTracking'; import {useTransfer} from './useTransfer'; import {useTransferProgress} from './useTransferProgress'; export const useTransferToL2 = () => { const logger = useLogger('useTransferToL2'); + const [trackInitiated, trackSuccess, trackError, trackReject] = useTransferToL2Tracking(); const {account: l1Account, chainId: l1ChainId, config: l1Config} = useL1Wallet(); const {account: l2Account, chainId: l2ChainId} = useL2Wallet(); const {handleProgress, handleData, handleError} = useTransfer(TransferToL2Steps); @@ -62,7 +63,7 @@ export const useTransferToL2 = () => { }; const sendDeposit = () => { - track(TrackEvent.TRANSFER.TRANSFER_TO_L2_INITIATED, { + trackInitiated({ from_address: l1Account, to_address: l2Account, amount, @@ -86,7 +87,7 @@ export const useTransferToL2 = () => { progressOptions.deposit(amount, symbol, stepOf(TransferStep.DEPOSIT, TransferToL2Steps)) ); } else { - track(TrackEvent.TRANSFER.TRANSFER_TO_L2_REJECT, error); + trackReject(error); logger.error(error.message); handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, error)); } @@ -107,7 +108,7 @@ export const useTransferToL2 = () => { }); } } else { - track(TrackEvent.TRANSFER.TRANSFER_TO_L2_ERROR, error); + trackError(error); logger.error(error.message); handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, error)); } @@ -125,7 +126,7 @@ export const useTransferToL2 = () => { l2ChainId, nonce ); - track(TrackEvent.TRANSFER.TRANSFER_TO_L2_SUCCESS, {l1hash, l2hash}); + trackSuccess({l1hash, l2hash}); return { l1hash, l2hash @@ -146,10 +147,7 @@ export const useTransferToL2 = () => { try { logger.log('TransferToL2 called'); if (await isMaxBalanceExceeded()) { - track( - TrackEvent.TRANSFER.TRANSFER_TO_L2_REJECT, - progressOptions.error(TransferError.MAX_TOTAL_BALANCE_ERROR) - ); + trackReject(progressOptions.error(TransferError.MAX_TOTAL_BALANCE_ERROR)); logger.error(`Prevented ${symbol} deposit due to max balance exceeded`); handleError(progressOptions.error(TransferError.MAX_TOTAL_BALANCE_ERROR)); return; @@ -176,7 +174,7 @@ export const useTransferToL2 = () => { logger.log('Calling deposit'); await sendDeposit(); } catch (ex) { - track(TrackEvent.TRANSFER.TRANSFER_TO_L2_ERROR, ex); + trackError(ex); logger.error(ex.message, {ex}); handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, ex)); } diff --git a/src/routes/Bridge/Bridge.js b/src/routes/Bridge/Bridge.js index 64550aff..cd3ad2aa 100644 --- a/src/routes/Bridge/Bridge.js +++ b/src/routes/Bridge/Bridge.js @@ -1,9 +1,9 @@ import React, {useEffect} from 'react'; -import {setUser, track, TrackEvent} from '../../analytics'; +import {setUser} from '../../analytics'; import {Account, SelectToken, ToastProvider, Transfer} from '../../components/Features'; import {MenuType} from '../../enums'; -import {useEnvs} from '../../hooks'; +import {useEnvs, useMenuTracking} from '../../hooks'; import {EventManagerProvider} from '../../providers/EventManagerProvider'; import {useMenu} from '../../providers/MenuProvider'; import {useOnboardingModal} from '../../providers/ModalProvider'; @@ -13,21 +13,22 @@ import utils from '../../utils'; import styles from './Bridge.module.scss'; export const Bridge = () => { + const trackMenu = useMenuTracking(); + const showOnboardingModal = useOnboardingModal(); const {localStorageOnboardingExpirationTimestampKey, onboardingModalTimeoutHrs} = useEnvs(); const {menu, menuProps} = useMenu(); const {account: l1account} = useL1Wallet(); const {account: l2account} = useL2Wallet(); - const showOnboardingModal = useOnboardingModal(); + + useEffect(() => { + trackMenu(menu); + }, [menu]); useEffect(() => { setUser({l1account, l2account}); maybeShowOnboardingModal(); }, []); - useEffect(() => { - track(TrackEvent[`${menu}_MENU`]); - }, [menu]); - const maybeShowOnboardingModal = () => { const onboardingTimestamp = utils.storage.getItem(localStorageOnboardingExpirationTimestampKey); const now = Date.now(); diff --git a/src/routes/Faq/Faq.js b/src/routes/Faq/Faq.js index efe11a7c..085f8b9f 100644 --- a/src/routes/Faq/Faq.js +++ b/src/routes/Faq/Faq.js @@ -1,16 +1,17 @@ import React, {useEffect} from 'react'; -import {track, TrackEvent} from '../../analytics'; +import {TrackEvent} from '../../analytics'; import {FullScreenContainer} from '../../components/UI'; import {faqs} from '../../config/faqs'; -import {useTranslation} from '../../hooks'; +import {useTracking, useTranslation} from '../../hooks'; import styles from './Faq.module.scss'; export const Faq = () => { const {titleTxt} = useTranslation('screens.faq'); + const [trackFaqScreen] = useTracking(TrackEvent.FAQ_SCREEN); useEffect(() => { - track(TrackEvent.FAQ_SCREEN); + trackFaqScreen(); }, []); return ( diff --git a/src/routes/Login/Login.js b/src/routes/Login/Login.js index bf7652e1..5c971bb3 100644 --- a/src/routes/Login/Login.js +++ b/src/routes/Login/Login.js @@ -1,9 +1,8 @@ import React, {useEffect, useRef, useState} from 'react'; -import {track, TrackEvent} from '../../analytics'; import {LoginErrorMessage, WalletLogin} from '../../components/UI'; import {ChainInfo, ErrorType, NetworkType, WalletStatus, WalletType} from '../../enums'; -import {useEnvs, useTranslation, useWalletHandlerProvider} from '../../hooks'; +import {useEnvs, useLoginTracking, useTranslation, useWalletHandlerProvider} from '../../hooks'; import {useHideModal, useProgressModal} from '../../providers/ModalProvider'; import {useL1Wallet, useL2Wallet, useWallets} from '../../providers/WalletsProvider'; import utils from '../../utils'; @@ -21,6 +20,8 @@ export const Login = () => { unsupportedBrowserTxt, unsupportedChainIdTxt } = useTranslation('menus.login'); + const [trackLoginScreen, trackDownloadClick, trackWalletClick, trackLoginError] = + useLoginTracking(); const {autoConnect, supportedChainId} = useEnvs(); const [selectedWalletName, setSelectedWalletName] = useState(''); const [error, setError] = useState(null); @@ -34,7 +35,7 @@ export const Login = () => { const {connectWallet: connectL2Wallet} = useL2Wallet(); useEffect(() => { - track(TrackEvent.LOGIN_SCREEN); + trackLoginScreen(); if (!utils.browser.isChrome()) { setError({type: ErrorType.UNSUPPORTED_BROWSER, message: unsupportedBrowserTxt}); } @@ -43,7 +44,7 @@ export const Login = () => { useEffect(() => { let timeoutId; if (error) { - track(TrackEvent.LOGIN.LOGIN_ERROR, error); + trackLoginError(error); } else if (!error && autoConnect) { const handlers = getWalletHandlers(walletType); if (handlers.length > 0) { @@ -88,7 +89,7 @@ export const Login = () => { const onWalletConnect = walletHandler => { const {config} = walletHandler; const {name} = config; - track(TrackEvent.LOGIN.WALLET_CLICK, {name}); + trackWalletClick(name); if (!walletHandler.isInstalled()) { return walletHandler.install(); } @@ -97,7 +98,7 @@ export const Login = () => { }; const onDownloadClick = () => { - track(TrackEvent.LOGIN.DOWNLOAD_CLICK, {walletType}); + trackDownloadClick(walletType); const handlers = getWalletHandlers(walletType); if (handlers.length > 0) { return handlers[0].install(); diff --git a/src/routes/Terms/Terms.js b/src/routes/Terms/Terms.js index 70a8a987..d675594b 100644 --- a/src/routes/Terms/Terms.js +++ b/src/routes/Terms/Terms.js @@ -1,9 +1,8 @@ import React, {useEffect, useRef, useState} from 'react'; import {useNavigate} from 'react-router-dom'; -import {track, TrackEvent} from '../../analytics'; import {Button, FullScreenContainer} from '../../components/UI'; -import {useColors, useConstants, useEnvs, useTranslation} from '../../hooks'; +import {useColors, useConstants, useEnvs, useTermsTracking, useTranslation} from '../../hooks'; import {useTerms} from '../../providers/AppProvider'; import {useL1Wallet, useL2Wallet} from '../../providers/WalletsProvider'; import styles from './Terms.module.scss'; @@ -11,6 +10,7 @@ import styles from './Terms.module.scss'; export const Terms = () => { const {STARKWARE_SITE_URL, STARKNET_DOCS_URL, STARKGATE_MAIL_ADDRESS, STARKGATE_CONTRACTS_URL} = useConstants(); + const [trackTermsScreen, trackAcceptClick] = useTermsTracking(); const {titleTxt, lastRevisedTxt, acceptBtnTxt} = useTranslation('screens.terms'); const navigate = useNavigate(); const termsRef = useRef(); @@ -24,7 +24,7 @@ export const Terms = () => { const [acceptButtonEnable, setAcceptButtonEnable] = useState(false); useEffect(() => { - track(TrackEvent.TERMS_SCREEN); + trackTermsScreen(); setMarginBottom(acceptButtonRef?.current?.clientHeight); }, []); @@ -38,7 +38,7 @@ export const Terms = () => { }; const accept = () => { - track(TrackEvent.TERMS.ACCEPT_CLICK, {l1account, l2account}); + trackAcceptClick({l1account, l2account}); acceptTerms(); navigate('/'); }; From 50f2d29e36fc8934e14f7a7aab184e3406b18df7 Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Thu, 21 Apr 2022 20:50:17 +0000 Subject: [PATCH 148/211] prerelease: v1.2.1-dev.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### [1.2.1-dev.2](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.1-dev.1...v1.2.1-dev.2) (2022-04-21) ### 💉 Improvements * useTracking ([#160](https://github.com/starkware-libs/starkgate-frontend/issues/160)) ([a8cad80](https://github.com/starkware-libs/starkgate-frontend/commit/a8cad802e13fcd7b940eed5d60a8f943d82662a9)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f1594916..54488f7d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +### [1.2.1-dev.2](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.1-dev.1...v1.2.1-dev.2) (2022-04-21) + + +### 💉 Improvements + +* useTracking ([#160](https://github.com/starkware-libs/starkgate-frontend/issues/160)) ([a8cad80](https://github.com/starkware-libs/starkgate-frontend/commit/a8cad802e13fcd7b940eed5d60a8f943d82662a9)) + ### [1.2.1-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.0...v1.2.1-dev.1) (2022-04-18) diff --git a/package.json b/package.json index bb32f87e..92245e0d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.2.1-dev.1", + "version": "1.2.1-dev.2", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 6869d0250b26d4db7ec983117060635c66dd4726 Mon Sep 17 00:00:00 2001 From: guyvelleman <93535692+guyvelleman@users.noreply.github.com> Date: Fri, 22 Apr 2022 00:25:59 +0300 Subject: [PATCH 149/211] chore(ci): helm deployment (#129) --- .github/workflows/gcr_push_workflow.yml | 2 +- .github/workflows/helm_upgrade_workflow.yml | 59 +++++++++++++++++++++ .github/workflows/push_backend_images.yml | 2 + .github/workflows/push_frontend_images.yml | 29 ++++++++++ src/config/strings.js | 1 - 5 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/helm_upgrade_workflow.yml diff --git a/.github/workflows/gcr_push_workflow.yml b/.github/workflows/gcr_push_workflow.yml index b14e7efd..7817c11c 100644 --- a/.github/workflows/gcr_push_workflow.yml +++ b/.github/workflows/gcr_push_workflow.yml @@ -17,7 +17,7 @@ on: required: true jobs: - deploy: + build: name: Build tag and push docker images to GCR. runs-on: ubuntu-latest steps: diff --git a/.github/workflows/helm_upgrade_workflow.yml b/.github/workflows/helm_upgrade_workflow.yml new file mode 100644 index 00000000..34b19803 --- /dev/null +++ b/.github/workflows/helm_upgrade_workflow.yml @@ -0,0 +1,59 @@ +name: Push docker image to GCR reusable workflow + +on: + workflow_call: + inputs: + app_name: + required: true + type: string + namespace_name: + required: true + type: string + values_file: + required: true + type: string + env_file: + required: true + type: string + secrets: + gcp_token: + required: true + AWS_ACCESS_KEY_ID: + required: true + AWS_SECRET_ACCESS_KEY: + required: true +jobs: + deploy: + name: Upgrade helm chart + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v2 + - name: Setup GKE cluster + uses: google-github-actions/get-gke-credentials@fb08709ba27618c31c09e014e1d8364b02e5042e + with: + cluster_name: web-devs + location: us-central1 + credentials: ${{ secrets.gcp_token }} + - name: Helm tool installer + uses: Azure/setup-helm@v2.0 + - name: Download starkware-third-party repo from S3. + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: us-east-2 + run: | + helm plugin install https://starkware-third-party.s3.us-east-2.amazonaws.com/k8s/helm-s3/helm-s3-v0.9.2.tar.gz + helm repo add starkware s3://starkware-third-party/helm-repo/charts + helm repo update + - name: Upgrade using helm upgrade command. + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: us-east-2 + run: | + helm upgrade ${{ inputs.app_name }} starkware/webapp-general-helm \ + --namespace=${{ inputs.namespace_name }} \ + --values ${{ inputs.values_file}} \ + --set-file configMap.frontend.envs=${{ inputs.env_file }} \ + --set frontend.image.tag=${{ github.ref_name }} diff --git a/.github/workflows/push_backend_images.yml b/.github/workflows/push_backend_images.yml index 9820a4ef..a616d27f 100644 --- a/.github/workflows/push_backend_images.yml +++ b/.github/workflows/push_backend_images.yml @@ -14,3 +14,5 @@ jobs: dockerfile: Dockerfile.backend secrets: gcp_token: ${{ secrets.STARKGATE_SA }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} diff --git a/.github/workflows/push_frontend_images.yml b/.github/workflows/push_frontend_images.yml index 5d2ae2ed..c0571699 100644 --- a/.github/workflows/push_frontend_images.yml +++ b/.github/workflows/push_frontend_images.yml @@ -14,3 +14,32 @@ jobs: dockerfile: Dockerfile.frontend secrets: gcp_token: ${{ secrets.STARKGATE_SA }} + + deploy_devnet: + if: github.event.base_ref == 'refs/heads/dev' + needs: [push-frontend-image] + uses: ./.github/workflows/helm_upgrade_workflow.yml + with: + app_name: starkgate + namespace_name: starkgate-devnet + values_file: deployment/development.yml + env_file: .env.testing + secrets: + gcp_token: ${{ secrets.STARKGATE_SA }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + + + deploy_testnet: + if: github.event.base_ref == 'refs/heads/master' + needs: [push-frontend-image] + uses: ./.github/workflows/helm_upgrade_workflow.yml + with: + app_name: starkgate + namespace_name: starkgate-goerli + values_file: deployment/testing.yml + env_file: .env.testing + secrets: + gcp_token: ${{ secrets.STARKGATE_SA }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} diff --git a/src/config/strings.js b/src/config/strings.js index e64478c0..2a46e5b5 100644 --- a/src/config/strings.js +++ b/src/config/strings.js @@ -18,7 +18,6 @@ const strings = { terms: { titleTxt: 'Terms of Service', lastRevisedTxt: 'Last Revised: April 4, 2022', - notesTitleTxt: 'Notes', acceptBtnTxt: 'I Accept' } }, From 92e092764ec53d622eacc8d8a27038869131cde5 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Fri, 22 Apr 2022 00:26:28 +0300 Subject: [PATCH 150/211] refactor: useTranslation hooks (#162) --- src/components/Containers/Footer/Footer.js | 4 +- src/components/Containers/Header/Header.js | 4 +- src/components/Features/Account/Account.js | 4 +- .../Features/SelectToken/SelectToken.js | 4 +- .../Features/ToastProvider/ToastProvider.js | 4 +- src/components/Features/Transfer/Transfer.js | 4 +- .../Features/TransferLog/TransferLog.js | 4 +- .../UI/AccountAddress/AccountAddress.js | 4 +- .../UI/LogoutButton/LogoutButton.js | 4 +- src/components/UI/MaxButton/MaxButton.js | 4 +- .../Modal/OnboardingModal/OnboardingModal.js | 4 +- .../TransactionSubmittedModal.js | 14 ++-- src/components/UI/NetworkMenu/NetworkMenu.js | 4 +- src/components/UI/SearchToken/SearchToken.js | 4 +- .../CompleteTransferToL1Toast.js | 4 +- .../UI/Toast/ToastFooter/ToastFooter.js | 4 +- .../UI/Toast/TransferToast/TransferToast.js | 4 +- .../UI/TokenBalance/TokenBalance.js | 4 +- src/components/UI/TokenInput/TokenInput.js | 4 +- .../UI/TransferButton/TransferButton.js | 4 +- .../TransferLogContainer.js | 6 +- .../UI/WalletButton/WalletButton.js | 4 +- src/hooks/useTransferProgress.js | 4 +- src/hooks/useTranslation.js | 84 +++++++++++++++++++ src/providers/ModalProvider/modal-hooks.js | 6 +- src/routes/Faq/Faq.js | 4 +- src/routes/Login/Login.js | 9 +- src/routes/Terms/Terms.js | 4 +- 28 files changed, 151 insertions(+), 60 deletions(-) diff --git a/src/components/Containers/Footer/Footer.js b/src/components/Containers/Footer/Footer.js index 8e3f50ce..1146d352 100644 --- a/src/components/Containers/Footer/Footer.js +++ b/src/components/Containers/Footer/Footer.js @@ -2,11 +2,11 @@ import React from 'react'; import useBreakpoint from 'use-breakpoint'; import {Breakpoint, isMobile} from '../../../enums'; -import {useTranslation} from '../../../hooks'; +import {useFooterTranslation} from '../../../hooks'; import styles from './Footer.module.scss'; export const Footer = () => { - const {rightsTxt} = useTranslation('containers.footer'); + const {rightsTxt} = useFooterTranslation(); const {breakpoint} = useBreakpoint(Breakpoint); return !isMobile(breakpoint) ? ( diff --git a/src/components/Containers/Header/Header.js b/src/components/Containers/Header/Header.js index 00fe13a1..ba082329 100644 --- a/src/components/Containers/Header/Header.js +++ b/src/components/Containers/Header/Header.js @@ -5,7 +5,7 @@ import useBreakpoint from 'use-breakpoint'; import {TrackEvent} from '../../../analytics'; import {ReactComponent as StarkGateLogo} from '../../../assets/img/starkgate.svg'; import {Breakpoint} from '../../../enums'; -import {useColors, useConstants, useEnvs, useTracking, useTranslation} from '../../../hooks'; +import {useColors, useConstants, useEnvs, useTracking, useHeaderTranslation} from '../../../hooks'; import {useLogin} from '../../../providers/AppProvider'; import {useMenu} from '../../../providers/MenuProvider'; import {useIsL1, useIsL2} from '../../../providers/TransferProvider'; @@ -18,7 +18,7 @@ export const Header = () => { const {DISCORD_LINK_URL} = useConstants(); const [trackDiscordClick] = useTracking(TrackEvent.DISCORD_TAB_CLICK); const {env} = useEnvs(); - const {tabDiscordTxt, tabFaqTxt, tabTermsTxt, chainTxt} = useTranslation('containers.header'); + const {tabDiscordTxt, tabFaqTxt, tabTermsTxt, chainTxt} = useHeaderTranslation(); const navigate = useNavigate(); const {pathname} = useLocation(); const {showAccountMenu, showTransferMenu} = useMenu(); diff --git a/src/components/Features/Account/Account.js b/src/components/Features/Account/Account.js index 6eb62d90..6e5af2b6 100644 --- a/src/components/Features/Account/Account.js +++ b/src/components/Features/Account/Account.js @@ -6,7 +6,7 @@ import { useCompleteTransferToL1, useConstants, useEnvs, - useTranslation + useAccountTranslation } from '../../../hooks'; import {useMenu} from '../../../providers/MenuProvider'; import {useTransfer} from '../../../providers/TransferProvider'; @@ -25,7 +25,7 @@ import {LinkButton} from '../../UI/LinkButton/LinkButton'; import {TransferLog} from '../TransferLog/TransferLog'; export const Account = ({transferId}) => { - const {titleTxt} = useTranslation('menus.account'); + const {titleTxt} = useAccountTranslation(); const [ trackTxLinkClick, trackAccountLinkClick, diff --git a/src/components/Features/SelectToken/SelectToken.js b/src/components/Features/SelectToken/SelectToken.js index 167496f7..97b1114b 100644 --- a/src/components/Features/SelectToken/SelectToken.js +++ b/src/components/Features/SelectToken/SelectToken.js @@ -2,7 +2,7 @@ import React, {useEffect, useState} from 'react'; import L1Logo from '../../../assets/svg/tokens/eth.svg'; import L2Logo from '../../../assets/svg/tokens/starknet.svg'; -import {useColors, useTranslation, useSelectTokenTracking} from '../../../hooks'; +import {useColors, useSelectTokenTranslation, useSelectTokenTracking} from '../../../hooks'; import {useMenu} from '../../../providers/MenuProvider'; import {useTokens} from '../../../providers/TokensProvider'; import {useTransfer} from '../../../providers/TransferProvider'; @@ -11,7 +11,7 @@ import styles from './SelectToken.module.scss'; export const SelectToken = () => { const [trackSelectToken] = useSelectTokenTracking(); - const {titleTxt} = useTranslation('menus.selectToken'); + const {titleTxt} = useSelectTokenTranslation(); const {tokens, updateTokenBalance} = useTokens(); const {colorBeta} = useColors(); const {showTransferMenu} = useMenu(); diff --git a/src/components/Features/ToastProvider/ToastProvider.js b/src/components/Features/ToastProvider/ToastProvider.js index 44117e1f..a824ea5a 100644 --- a/src/components/Features/ToastProvider/ToastProvider.js +++ b/src/components/Features/ToastProvider/ToastProvider.js @@ -14,7 +14,7 @@ import { NetworkType, ToastType } from '../../../enums'; -import {useCompleteTransferToL1, usePrevious, useTranslation} from '../../../hooks'; +import {useCompleteTransferToL1, usePrevious, useToastsTranslation} from '../../../hooks'; import {useMenu} from '../../../providers/MenuProvider'; import {useIsL1, useIsL2} from '../../../providers/TransferProvider'; import {useTransfersLog} from '../../../providers/TransfersLogProvider'; @@ -26,7 +26,7 @@ const toastsMap = {}; const toastsDismissed = {}; export const ToastProvider = () => { - const {alphaDisclaimerMsg} = useTranslation('toasts'); + const {alphaDisclaimerMsg} = useToastsTranslation(); const {transfers} = useTransfersLog(); const prevTransfers = usePrevious(transfers); const completeTransferToL1 = useCompleteTransferToL1(); diff --git a/src/components/Features/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer.js index 805cb211..b2e5e4f5 100644 --- a/src/components/Features/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer.js @@ -6,7 +6,7 @@ import { useTransferToL1, useTransferToL2, useTransferTracking, - useTranslation + useTransferTranslation } from '../../../hooks'; import {useMenu} from '../../../providers/MenuProvider'; import {useL1Token, useL2Token, useTokens} from '../../../providers/TokensProvider'; @@ -30,7 +30,7 @@ export const Transfer = () => { maxDepositErrorMsg, tooManyDigitsErrorMsg, negativeValueErrorMsg - } = useTranslation('menus.transfer'); + } = useTransferTranslation(); const [trackMaxClick, trackSwapNetworks] = useTransferTracking(); const [isL1, swapToL1] = useIsL1(); const [isL2, swapToL2] = useIsL2(); diff --git a/src/components/Features/TransferLog/TransferLog.js b/src/components/Features/TransferLog/TransferLog.js index 07eda91f..9a585ae9 100644 --- a/src/components/Features/TransferLog/TransferLog.js +++ b/src/components/Features/TransferLog/TransferLog.js @@ -9,7 +9,7 @@ import { TransactionStatusFriendlyMessage, TransactionStatusStep } from '../../../enums'; -import {useColors, useEnvs, useTranslation} from '../../../hooks'; +import {useColors, useEnvs, useTransferLogTranslation} from '../../../hooks'; import {useTransfer} from '../../../providers/TransferProvider'; import utils from '../../../utils'; import {Button, CryptoLogo, CryptoLogoSize} from '../../UI'; @@ -87,7 +87,7 @@ export const TransferLog = ({transfer, onCompleteTransferClick, onTxClick}) => { }; const CompleteTransferButton = ({onClick}) => { - const {completeTransferBtnTxt} = useTranslation('menus.account.transferLogContainer.transferLog'); + const {completeTransferBtnTxt} = useTransferLogTranslation(); const {colorBeta} = useColors(); return ( diff --git a/src/components/UI/AccountAddress/AccountAddress.js b/src/components/UI/AccountAddress/AccountAddress.js index d350c70d..595a8cb5 100644 --- a/src/components/UI/AccountAddress/AccountAddress.js +++ b/src/components/UI/AccountAddress/AccountAddress.js @@ -2,14 +2,14 @@ import PropTypes from 'prop-types'; import React, {useRef} from 'react'; import {ReactComponent as CopyIcon} from '../../../assets/svg/icons/copy.svg'; -import {useAnimation, useTranslation} from '../../../hooks'; +import {useAccountTranslation, useAnimation} from '../../../hooks'; import utils from '../../../utils'; import styles from './AccountAddress.module.scss'; const COPIED_ANIMATION_TIMEOUT_INTERVAL = 1000; export const AccountAddress = ({address, onClick}) => { - const {copiedMsgTxt} = useTranslation('menus.account'); + const {copiedMsgTxt} = useAccountTranslation(); const [isAnimate, startAnimation] = useAnimation(COPIED_ANIMATION_TIMEOUT_INTERVAL); const ref = useRef(); diff --git a/src/components/UI/LogoutButton/LogoutButton.js b/src/components/UI/LogoutButton/LogoutButton.js index 792f0527..48641180 100644 --- a/src/components/UI/LogoutButton/LogoutButton.js +++ b/src/components/UI/LogoutButton/LogoutButton.js @@ -1,11 +1,11 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {useColors, useTranslation} from '../../../hooks'; +import {useAccountTranslation, useColors} from '../../../hooks'; import {Button} from '../index'; export const LogoutButton = ({onClick, isDisabled}) => { - const {logoutBtnTxt} = useTranslation('menus.account'); + const {logoutBtnTxt} = useAccountTranslation(); const {colorAlpha5, colorWhite} = useColors(); return ( diff --git a/src/components/UI/MaxButton/MaxButton.js b/src/components/UI/MaxButton/MaxButton.js index 9d2dc300..2fb32ab6 100644 --- a/src/components/UI/MaxButton/MaxButton.js +++ b/src/components/UI/MaxButton/MaxButton.js @@ -1,11 +1,11 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {useTranslation} from '../../../hooks'; +import {useTransferTranslation} from '../../../hooks'; import styles from './MaxButton.module.scss'; export const MaxButton = ({onClick}) => { - const {maxBtnTxt} = useTranslation('menus.transfer'); + const {maxBtnTxt} = useTransferTranslation(); return ( <div className={styles.maxButton} onClick={onClick}> diff --git a/src/components/UI/Modal/OnboardingModal/OnboardingModal.js b/src/components/UI/Modal/OnboardingModal/OnboardingModal.js index ba6b541e..545af458 100644 --- a/src/components/UI/Modal/OnboardingModal/OnboardingModal.js +++ b/src/components/UI/Modal/OnboardingModal/OnboardingModal.js @@ -1,11 +1,11 @@ import React from 'react'; -import {useTranslation} from '../../../../hooks'; +import {useOnboardingModalTranslation} from '../../../../hooks'; import {IncognitoMessage} from '../ModalMessage'; import styles from './OnboardingModal.module.scss'; const OnboardingModal = () => { - const {subtitleTxt, bulletsTxt} = useTranslation('modals.onboarding'); + const {subtitleTxt, bulletsTxt} = useOnboardingModalTranslation(); return ( <div className={styles.onboardingModal}> diff --git a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js index aa914c6e..0db227e0 100644 --- a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js +++ b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js @@ -4,7 +4,12 @@ import React from 'react'; import {ReactComponent as EtherscanLogo} from '../../../../assets/svg/etherscan.svg'; import {ReactComponent as StarkNetLogo} from '../../../../assets/svg/tokens/starknet.svg'; import {ActionType} from '../../../../enums'; -import {useColors, useConstants, useEnvs, useTranslation} from '../../../../hooks'; +import { + useColors, + useConstants, + useEnvs, + useTransactionSubmittedModalTranslation +} from '../../../../hooks'; import utils from '../../../../utils'; import {Button} from '../../Button/Button'; import {Circle} from '../../Circle/Circle'; @@ -15,9 +20,8 @@ import styles from './TransactionSubmittedModal.module.scss'; const TransactionSubmittedModal = ({transfer}) => { const {ETHERSCAN, VOYAGER} = useConstants(); const {etherscanTxUrl, voyagerTxUrl} = useEnvs(); - const {completeTransferToL1Txt, transferToL1Txt, transferToL2Txt} = useTranslation( - 'modals.transactionSubmitted' - ); + const {completeTransferToL1Txt, transferToL1Txt, transferToL2Txt} = + useTransactionSubmittedModalTranslation(); const {type, l2hash, l1hash} = transfer; const isTransferCompleted = l1hash && l2hash; const explorerButtons = []; @@ -77,7 +81,7 @@ const TransactionSubmittedModal = ({transfer}) => { const TransactionSubmittedModalButton = ({networkName, networkLogo, onClick}) => { const {colorAlpha3, colorWhite, colorWhite1} = useColors(); - const {btnTxt} = useTranslation('modals.transactionSubmitted'); + const {btnTxt} = useTransactionSubmittedModalTranslation(); return ( <Button diff --git a/src/components/UI/NetworkMenu/NetworkMenu.js b/src/components/UI/NetworkMenu/NetworkMenu.js index 0731bedd..b509dcf5 100644 --- a/src/components/UI/NetworkMenu/NetworkMenu.js +++ b/src/components/UI/NetworkMenu/NetworkMenu.js @@ -1,14 +1,14 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {useTranslation} from '../../../hooks'; +import {useTransferTranslation} from '../../../hooks'; import {NetworkTitle} from '../NetworkTitle/NetworkTitle'; import {TokenBalance} from '../TokenBalance/TokenBalance'; import {Badge} from '../index'; import styles from './NetworkMenu.module.scss'; export const NetworkMenu = ({networkData, tokenData, isTarget, onRefreshClick, children}) => { - const {toTxt, fromTxt} = useTranslation('menus.transfer'); + const {toTxt, fromTxt} = useTransferTranslation(); return ( <div className={styles.networkMenu}> diff --git a/src/components/UI/SearchToken/SearchToken.js b/src/components/UI/SearchToken/SearchToken.js index 0cf39366..84734d22 100644 --- a/src/components/UI/SearchToken/SearchToken.js +++ b/src/components/UI/SearchToken/SearchToken.js @@ -2,12 +2,12 @@ import PropTypes from 'prop-types'; import React, {useEffect, useState} from 'react'; import {ReactComponent as SearchIcon} from '../../../assets/svg/icons/search.svg'; -import {useTranslation} from '../../../hooks'; +import {useSelectTokenTranslation} from '../../../hooks'; import {Input} from '../index'; import styles from './SearchToken.module.scss'; export const SearchToken = ({tokens, onSearchResults}) => { - const {searchPlaceholder} = useTranslation('menus.selectToken'); + const {searchPlaceholder} = useSelectTokenTranslation(); const [searchTerm, setSearchTerm] = useState(''); const handleChange = event => { diff --git a/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.js b/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.js index 76e92147..ea7f8e40 100644 --- a/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.js +++ b/src/components/UI/Toast/CompleteTransferToL1Toast/CompleteTransferToL1Toast.js @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import React from 'react'; import {ReactComponent as L1Logo} from '../../../../assets/svg/tokens/eth.svg'; -import {useColors, useTranslation} from '../../../../hooks'; +import {useColors, useCompleteTransferToastTranslation} from '../../../../hooks'; import {TransferData} from '../../../Features'; import {ToastBody} from '../ToastBody/ToastBody'; import {ToastButton, ToastButtons} from '../ToastButton/ToastButton'; @@ -22,7 +22,7 @@ export const CompleteTransferToL1Toast = ({ }) => { const {colorBeta, colorOmega1} = useColors(); const {titleTxt, bodyTxt, dismissBtnTxt, completeTransferBtnTxt} = - useTranslation('toasts.completeTransfer'); + useCompleteTransferToastTranslation(); return ( <Transition diff --git a/src/components/UI/Toast/ToastFooter/ToastFooter.js b/src/components/UI/Toast/ToastFooter/ToastFooter.js index 9c38730a..eb97863f 100644 --- a/src/components/UI/Toast/ToastFooter/ToastFooter.js +++ b/src/components/UI/Toast/ToastFooter/ToastFooter.js @@ -1,7 +1,7 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {useTranslation} from '../../../../hooks'; +import {useToastsTranslation} from '../../../../hooks'; import styles from './ToastFooter.module.scss'; export const ToastFooter = ({children}) => { @@ -9,7 +9,7 @@ export const ToastFooter = ({children}) => { }; export const TransferLogLink = ({onClick}) => { - const {transferLogLink} = useTranslation('toasts'); + const {transferLogLink} = useToastsTranslation(); return ( <div className={styles.transferLogLink} onClick={onClick}> diff --git a/src/components/UI/Toast/TransferToast/TransferToast.js b/src/components/UI/Toast/TransferToast/TransferToast.js index e58f22fa..2c7aff68 100644 --- a/src/components/UI/Toast/TransferToast/TransferToast.js +++ b/src/components/UI/Toast/TransferToast/TransferToast.js @@ -2,14 +2,14 @@ import PropTypes from 'prop-types'; import React from 'react'; import {isConsumed, isPending, isRejected} from '../../../../enums'; -import {useTranslation} from '../../../../hooks'; +import {usePendingTransferToastTranslation} from '../../../../hooks'; import {TransferData} from '../../../Features'; import {ToastFooter, TransferLogLink} from '../ToastFooter/ToastFooter'; import {ToastHeader} from '../ToastHeader/ToastHeader'; import {ToastSeparator} from '../ToastSeparator/ToastSeparator'; export const TransferToast = ({transfer, isLoading, onTransferLogLinkClick, onClose}) => { - const {pendingTxt, consumedTxt, rejectedTxt} = useTranslation('toasts.pendingTransfer'); + const {pendingTxt, consumedTxt, rejectedTxt} = usePendingTransferToastTranslation(); const getTitle = () => { const {status} = transfer; diff --git a/src/components/UI/TokenBalance/TokenBalance.js b/src/components/UI/TokenBalance/TokenBalance.js index a6c3b423..e45c14b9 100644 --- a/src/components/UI/TokenBalance/TokenBalance.js +++ b/src/components/UI/TokenBalance/TokenBalance.js @@ -1,7 +1,7 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {useTranslation} from '../../../hooks'; +import {useTransferTranslation} from '../../../hooks'; import utils from '../../../utils'; import {toClasses} from '../../../utils/object'; import {Loading, LoadingSize, RefreshIcon} from '../index'; @@ -9,7 +9,7 @@ import styles from './TokenBalance.module.scss'; export const TokenBalance = ({tokenData, onRefreshClick}) => { const {symbol, isLoading, balance} = tokenData; - const {balanceTitleTxt} = useTranslation('menus.transfer'); + const {balanceTitleTxt} = useTransferTranslation(); return ( <div className={toClasses(styles.tokenBalance, isLoading && styles.loading)}> diff --git a/src/components/UI/TokenInput/TokenInput.js b/src/components/UI/TokenInput/TokenInput.js index 0eacbf9e..ba8a26f0 100644 --- a/src/components/UI/TokenInput/TokenInput.js +++ b/src/components/UI/TokenInput/TokenInput.js @@ -1,7 +1,7 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {useTranslation} from '../../../hooks'; +import {useTransferTranslation} from '../../../hooks'; import utils from '../../../utils'; import {MaxButton} from '../MaxButton/MaxButton'; import {TokenSelector} from '../TokenSelector/TokenSelector'; @@ -16,7 +16,7 @@ export const TokenInput = ({ onTokenSelect, onInputChange }) => { - const {inputPlaceholderTxt} = useTranslation('menus.transfer'); + const {inputPlaceholderTxt} = useTransferTranslation(); return ( <div className={utils.object.toClasses(styles.tokenInput, hasError && styles.hasError)}> diff --git a/src/components/UI/TransferButton/TransferButton.js b/src/components/UI/TransferButton/TransferButton.js index 6e00e885..c99e11b7 100644 --- a/src/components/UI/TransferButton/TransferButton.js +++ b/src/components/UI/TransferButton/TransferButton.js @@ -1,12 +1,12 @@ import PropTypes from 'prop-types'; import React from 'react'; -import {useColors, useTranslation} from '../../../hooks'; +import {useColors, useTransferTranslation} from '../../../hooks'; import {Button} from '../index'; export const TransferButton = props => { const {colorBeta, colorWhite} = useColors(); - const {transferBtnTxt} = useTranslation('menus.transfer'); + const {transferBtnTxt} = useTransferTranslation(); return ( <Button diff --git a/src/components/UI/TransferLogContainer/TransferLogContainer.js b/src/components/UI/TransferLogContainer/TransferLogContainer.js index a9f3228b..0644b13d 100644 --- a/src/components/UI/TransferLogContainer/TransferLogContainer.js +++ b/src/components/UI/TransferLogContainer/TransferLogContainer.js @@ -2,16 +2,14 @@ import PropTypes from 'prop-types'; import React, {useState} from 'react'; import {ReactComponent as CollapseIcon} from '../../../assets/svg/icons/collapse.svg'; -import {useTranslation} from '../../../hooks'; +import {useTransferLogContainerTranslation} from '../../../hooks'; import {useMenu} from '../../../providers/MenuProvider'; import utils from '../../../utils'; import styles from './TransferLogContainer.module.scss'; export const TransferLogContainer = ({transferIndex, children, onShowTransfers}) => { const {resetMenuProps} = useMenu(); - const {titleTxt, overviewTxt, emptyMsgTxt, viewMoreTxt} = useTranslation( - 'menus.account.transferLogContainer' - ); + const {titleTxt, overviewTxt, emptyMsgTxt, viewMoreTxt} = useTransferLogContainerTranslation(); const [showChildren, setShowChildren] = useState(false); const toggleShowChildren = () => { diff --git a/src/components/UI/WalletButton/WalletButton.js b/src/components/UI/WalletButton/WalletButton.js index 7cd515fd..7202a275 100644 --- a/src/components/UI/WalletButton/WalletButton.js +++ b/src/components/UI/WalletButton/WalletButton.js @@ -3,7 +3,7 @@ import React from 'react'; import useBreakpoint from 'use-breakpoint'; import {Breakpoint, isDesktop, isMobile, isMobileOrTablet} from '../../../enums'; -import {useColors, useTranslation} from '../../../hooks'; +import {useColors, useHeaderTranslation} from '../../../hooks'; import utils from '../../../utils'; import {toClasses} from '../../../utils/object'; import {Button, DynamicIcon} from '../index'; @@ -14,7 +14,7 @@ const WALLET_LOGO_SIZE_MOBILE = 40; export const WalletButton = ({account, logoPath, onClick}) => { const {colorBeta, colorWhite, colorWhiteOp10, colorWhiteOp20} = useColors(); - const {walletBtnTxt} = useTranslation('containers.header'); + const {walletBtnTxt} = useHeaderTranslation(); const {breakpoint} = useBreakpoint(Breakpoint); const getText = () => { diff --git a/src/hooks/useTransferProgress.js b/src/hooks/useTransferProgress.js index 6cecbf1e..af17b954 100644 --- a/src/hooks/useTransferProgress.js +++ b/src/hooks/useTransferProgress.js @@ -2,10 +2,10 @@ import {useMemo} from 'react'; import {TransferError} from '../enums'; import utils from '../utils'; -import {useTranslation} from './useTranslation'; +import {useTransferProgressModalTranslation} from './useTranslation'; export const useTransferProgress = () => { - const transferProgressStrings = useTranslation('modals.transferProgress'); + const transferProgressStrings = useTransferProgressModalTranslation(); return useMemo( () => ({ diff --git a/src/hooks/useTranslation.js b/src/hooks/useTranslation.js index 76824bfe..e5ec1c15 100644 --- a/src/hooks/useTranslation.js +++ b/src/hooks/useTranslation.js @@ -3,3 +3,87 @@ import {useMemo} from 'react'; import utils from '../utils'; export const useTranslation = path => useMemo(() => utils.getTranslation(path), [path]); + +export const useContainersTranslation = path => { + return useTranslation(chainPath('containers', path)); +}; + +export const useHeaderTranslation = () => { + return useContainersTranslation('header'); +}; + +export const useFooterTranslation = () => { + return useContainersTranslation('footer'); +}; + +export const useMenusTranslation = path => { + return useTranslation(chainPath('menus', path)); +}; + +export const useAccountTranslation = path => { + return useMenusTranslation(chainPath('account', path)); +}; + +export const useSelectTokenTranslation = path => { + return useMenusTranslation(chainPath('selectToken', path)); +}; + +export const useTransferTranslation = path => { + return useMenusTranslation(chainPath('transfer', path)); +}; + +export const useLoginTranslation = path => { + return useMenusTranslation(chainPath('login', path)); +}; + +export const useToastsTranslation = path => { + return useTranslation(chainPath('toasts', path)); +}; + +export const useCompleteTransferToastTranslation = () => { + return useToastsTranslation('completeTransfer'); +}; + +export const usePendingTransferToastTranslation = () => { + return useToastsTranslation('pendingTransfer'); +}; + +export const useModalsTranslation = path => { + return useTranslation(chainPath('modals', path)); +}; + +export const useTransferProgressModalTranslation = () => { + return useModalsTranslation('transferProgress'); +}; + +export const useTransactionSubmittedModalTranslation = () => { + return useModalsTranslation('transactionSubmitted'); +}; + +export const useOnboardingModalTranslation = () => { + return useModalsTranslation('onboarding'); +}; + +export const useScreensTranslation = path => { + return useTranslation(chainPath('screens', path)); +}; + +export const useFaqTranslation = () => { + return useScreensTranslation('faq'); +}; + +export const useTermsTranslation = () => { + return useScreensTranslation('terms'); +}; + +export const useTransferLogContainerTranslation = () => { + return useAccountTranslation('transferLogContainer'); +}; + +export const useTransferLogTranslation = () => { + return useAccountTranslation('transferLogContainer.transferLog'); +}; + +const chainPath = (basePath, constitutivePath) => { + return constitutivePath ? `${basePath}.${constitutivePath}` : basePath; +}; diff --git a/src/providers/ModalProvider/modal-hooks.js b/src/providers/ModalProvider/modal-hooks.js index add2042b..35ada123 100644 --- a/src/providers/ModalProvider/modal-hooks.js +++ b/src/providers/ModalProvider/modal-hooks.js @@ -1,7 +1,7 @@ import {useCallback, useContext} from 'react'; import {ModalType} from '../../enums'; -import {useTranslation} from '../../hooks'; +import {useOnboardingModalTranslation, useTransactionSubmittedModalTranslation} from '../../hooks'; import {ModalContext} from './modal-context'; export const useModal = () => { @@ -46,7 +46,7 @@ export const useProgressModal = (steps = []) => { export const useTransactionSubmittedModal = steps => { const {showModal} = useContext(ModalContext); - const {titleTxt} = useTranslation('modals.transactionSubmitted'); + const {titleTxt} = useTransactionSubmittedModalTranslation(); return useCallback( transfer => { @@ -86,7 +86,7 @@ export const useErrorModal = () => { export const useOnboardingModal = () => { const {showModal} = useContext(ModalContext); - const {titleTxt} = useTranslation('modals.onboarding'); + const {titleTxt} = useOnboardingModalTranslation(); return useCallback(() => { showModal({ diff --git a/src/routes/Faq/Faq.js b/src/routes/Faq/Faq.js index 085f8b9f..2eb78afe 100644 --- a/src/routes/Faq/Faq.js +++ b/src/routes/Faq/Faq.js @@ -3,11 +3,11 @@ import React, {useEffect} from 'react'; import {TrackEvent} from '../../analytics'; import {FullScreenContainer} from '../../components/UI'; import {faqs} from '../../config/faqs'; -import {useTracking, useTranslation} from '../../hooks'; +import {useTracking, useFaqTranslation} from '../../hooks'; import styles from './Faq.module.scss'; export const Faq = () => { - const {titleTxt} = useTranslation('screens.faq'); + const {titleTxt} = useFaqTranslation(); const [trackFaqScreen] = useTracking(TrackEvent.FAQ_SCREEN); useEffect(() => { diff --git a/src/routes/Login/Login.js b/src/routes/Login/Login.js index 5c971bb3..183e56c0 100644 --- a/src/routes/Login/Login.js +++ b/src/routes/Login/Login.js @@ -2,7 +2,12 @@ import React, {useEffect, useRef, useState} from 'react'; import {LoginErrorMessage, WalletLogin} from '../../components/UI'; import {ChainInfo, ErrorType, NetworkType, WalletStatus, WalletType} from '../../enums'; -import {useEnvs, useLoginTracking, useTranslation, useWalletHandlerProvider} from '../../hooks'; +import { + useEnvs, + useLoginTracking, + useLoginTranslation, + useWalletHandlerProvider +} from '../../hooks'; import {useHideModal, useProgressModal} from '../../providers/ModalProvider'; import {useL1Wallet, useL2Wallet, useWallets} from '../../providers/WalletsProvider'; import utils from '../../utils'; @@ -19,7 +24,7 @@ export const Login = () => { modalTxt, unsupportedBrowserTxt, unsupportedChainIdTxt - } = useTranslation('menus.login'); + } = useLoginTranslation(); const [trackLoginScreen, trackDownloadClick, trackWalletClick, trackLoginError] = useLoginTracking(); const {autoConnect, supportedChainId} = useEnvs(); diff --git a/src/routes/Terms/Terms.js b/src/routes/Terms/Terms.js index d675594b..30fbee51 100644 --- a/src/routes/Terms/Terms.js +++ b/src/routes/Terms/Terms.js @@ -2,7 +2,7 @@ import React, {useEffect, useRef, useState} from 'react'; import {useNavigate} from 'react-router-dom'; import {Button, FullScreenContainer} from '../../components/UI'; -import {useColors, useConstants, useEnvs, useTermsTracking, useTranslation} from '../../hooks'; +import {useColors, useConstants, useEnvs, useTermsTracking, useTermsTranslation} from '../../hooks'; import {useTerms} from '../../providers/AppProvider'; import {useL1Wallet, useL2Wallet} from '../../providers/WalletsProvider'; import styles from './Terms.module.scss'; @@ -11,7 +11,7 @@ export const Terms = () => { const {STARKWARE_SITE_URL, STARKNET_DOCS_URL, STARKGATE_MAIL_ADDRESS, STARKGATE_CONTRACTS_URL} = useConstants(); const [trackTermsScreen, trackAcceptClick] = useTermsTracking(); - const {titleTxt, lastRevisedTxt, acceptBtnTxt} = useTranslation('screens.terms'); + const {titleTxt, lastRevisedTxt, acceptBtnTxt} = useTermsTranslation(); const navigate = useNavigate(); const termsRef = useRef(); const acceptButtonRef = useRef(); From 477209d0d45e04525dce9d9b7838734b7aedb982 Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Thu, 21 Apr 2022 21:28:06 +0000 Subject: [PATCH 151/211] prerelease: v1.2.1-dev.3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### [1.2.1-dev.3](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.1-dev.2...v1.2.1-dev.3) (2022-04-21) ### 💉 Improvements * useTranslation hooks ([#162](https://github.com/starkware-libs/starkgate-frontend/issues/162)) ([92e0927](https://github.com/starkware-libs/starkgate-frontend/commit/92e092764ec53d622eacc8d8a27038869131cde5)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 54488f7d..5b7ddd88 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +### [1.2.1-dev.3](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.1-dev.2...v1.2.1-dev.3) (2022-04-21) + + +### 💉 Improvements + +* useTranslation hooks ([#162](https://github.com/starkware-libs/starkgate-frontend/issues/162)) ([92e0927](https://github.com/starkware-libs/starkgate-frontend/commit/92e092764ec53d622eacc8d8a27038869131cde5)) + ### [1.2.1-dev.2](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.1-dev.1...v1.2.1-dev.2) (2022-04-21) diff --git a/package.json b/package.json index 92245e0d..9f9ad03b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.2.1-dev.2", + "version": "1.2.1-dev.3", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 36a1c6ffd1d367db917a0bffc6f3a33ba37be6a9 Mon Sep 17 00:00:00 2001 From: CarmitKl <96685244+CarmitKl@users.noreply.github.com> Date: Sun, 24 Apr 2022 00:14:33 +0300 Subject: [PATCH 152/211] fix: bad overflow in modal for content with very long strings (#161) --- src/components/UI/Modal/Modal/Modal.js | 5 ++++- src/components/UI/Modal/ModalBody/ModalBody.module.scss | 2 ++ src/components/UI/Modal/ModalText/ModalText.module.scss | 3 +++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/components/UI/Modal/Modal/Modal.js b/src/components/UI/Modal/Modal/Modal.js index 4289d10a..c2a28ba8 100644 --- a/src/components/UI/Modal/Modal/Modal.js +++ b/src/components/UI/Modal/Modal/Modal.js @@ -12,7 +12,10 @@ export const Modal = ({show, type = ModalType.INFO, size = ModalSize.MEDIUM, chi return show ? createPortal( <div className={utils.object.toClasses(styles.modal, styles[type])}> - <div className={utils.object.toClasses(styles.container, styles[type])} style={{width}}> + <div + className={utils.object.toClasses(styles.container, styles[type])} + style={{width, maxWidth: width}} + > {children} </div> </div>, diff --git a/src/components/UI/Modal/ModalBody/ModalBody.module.scss b/src/components/UI/Modal/ModalBody/ModalBody.module.scss index 08ff761e..7354f902 100644 --- a/src/components/UI/Modal/ModalBody/ModalBody.module.scss +++ b/src/components/UI/Modal/ModalBody/ModalBody.module.scss @@ -9,6 +9,8 @@ white-space: break-spaces; overflow: hidden; text-overflow: ellipsis; + max-width: inherit; + overflow-wrap: break-word; &.error { color: $--color-error; diff --git a/src/components/UI/Modal/ModalText/ModalText.module.scss b/src/components/UI/Modal/ModalText/ModalText.module.scss index 10d8124c..23549499 100644 --- a/src/components/UI/Modal/ModalText/ModalText.module.scss +++ b/src/components/UI/Modal/ModalText/ModalText.module.scss @@ -2,16 +2,19 @@ font-weight: 400; font-size: 17px; letter-spacing: 0.03em; + max-width: inherit; .wrap { float: left; position: relative; left: 50%; + max-width: inherit; .content { float: left; position: relative; left: -50%; + max-width: inherit; } } } From 55cdb43979d3253a5fcdc997a148d98226e874e7 Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Sat, 23 Apr 2022 21:16:21 +0000 Subject: [PATCH 153/211] prerelease: v1.2.1-dev.4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### [1.2.1-dev.4](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.1-dev.3...v1.2.1-dev.4) (2022-04-23) ### 🔧 Fixes * bad overflow in modal for content with very long strings ([#161](https://github.com/starkware-libs/starkgate-frontend/issues/161)) ([36a1c6f](https://github.com/starkware-libs/starkgate-frontend/commit/36a1c6ffd1d367db917a0bffc6f3a33ba37be6a9)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b7ddd88..0f51dbdd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +### [1.2.1-dev.4](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.1-dev.3...v1.2.1-dev.4) (2022-04-23) + + +### 🔧 Fixes + +* bad overflow in modal for content with very long strings ([#161](https://github.com/starkware-libs/starkgate-frontend/issues/161)) ([36a1c6f](https://github.com/starkware-libs/starkgate-frontend/commit/36a1c6ffd1d367db917a0bffc6f3a33ba37be6a9)) + ### [1.2.1-dev.3](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.1-dev.2...v1.2.1-dev.3) (2022-04-21) diff --git a/package.json b/package.json index 9f9ad03b..37c951ca 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.2.1-dev.3", + "version": "1.2.1-dev.4", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 56fa74b4510971d516824d5c0faae611da20d63b Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Mon, 25 Apr 2022 13:42:28 +0300 Subject: [PATCH 154/211] fix: add ETH mainnet addresses (#167) --- src/config/tokens.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/config/tokens.js b/src/config/tokens.js index 9250aaae..fb6c7108 100644 --- a/src/config/tokens.js +++ b/src/config/tokens.js @@ -6,7 +6,7 @@ const l1tokens = [ symbol: NetworkType.L1.symbol, decimals: 18, bridgeAddress: { - [ChainType.L1.MAIN]: '', + [ChainType.L1.MAIN]: '0xae0Ee0A63A2cE6BaeEFFE56e7714FB4EFE48D419', [ChainType.L1.GOERLI]: '0xc3511006C04EF1d78af4C8E0e74Ec18A6E64Ff9e' } }, @@ -83,11 +83,11 @@ const l2tokens = [ symbol: NetworkType.L1.symbol, decimals: 18, bridgeAddress: { - [ChainType.L2.MAIN]: '', + [ChainType.L2.MAIN]: '0x073314940630fd6dcda0d772d4c972c4e0a9946bef9dabf4ef84eda8ef542b82', [ChainType.L2.GOERLI]: '0x073314940630fd6dcda0d772d4c972c4e0a9946bef9dabf4ef84eda8ef542b82' }, tokenAddress: { - [ChainType.L2.MAIN]: '', + [ChainType.L2.MAIN]: '0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7', [ChainType.L2.GOERLI]: '0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7' } }, From d43867ef0e0d3fab598de2996c37a652c2859f14 Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Mon, 25 Apr 2022 10:44:24 +0000 Subject: [PATCH 155/211] prerelease: v1.2.1-dev.5 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### [1.2.1-dev.5](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.1-dev.4...v1.2.1-dev.5) (2022-04-25) ### 🔧 Fixes * add ETH mainnet addresses ([#167](https://github.com/starkware-libs/starkgate-frontend/issues/167)) ([56fa74b](https://github.com/starkware-libs/starkgate-frontend/commit/56fa74b4510971d516824d5c0faae611da20d63b)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0f51dbdd..e269a88e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +### [1.2.1-dev.5](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.1-dev.4...v1.2.1-dev.5) (2022-04-25) + + +### 🔧 Fixes + +* add ETH mainnet addresses ([#167](https://github.com/starkware-libs/starkgate-frontend/issues/167)) ([56fa74b](https://github.com/starkware-libs/starkgate-frontend/commit/56fa74b4510971d516824d5c0faae611da20d63b)) + ### [1.2.1-dev.4](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.1-dev.3...v1.2.1-dev.4) (2022-04-23) diff --git a/package.json b/package.json index 37c951ca..856e472a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.2.1-dev.4", + "version": "1.2.1-dev.5", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From e0f996a7c5a7b7fa4a395695048275a8c234dd76 Mon Sep 17 00:00:00 2001 From: avimak <avimak@gmail.com> Date: Mon, 25 Apr 2022 13:25:57 +0200 Subject: [PATCH 156/211] feat: integrated with get-starknet-wallet (#163) --- package.json | 2 +- src/assets/svg/wallets/argent/logo.svg | 8 -------- src/assets/svg/wallets/gsw/logo.svg | 8 ++++++++ src/components/UI/WalletButton/WalletButton.js | 16 ++++++++++------ src/config/faqs.js | 2 +- src/config/wallets.js | 6 +++--- src/hooks/useWalletHandlerProvider.js | 4 ++-- src/libs/starknet.js | 2 +- src/providers/WalletsProvider/WalletsProvider.js | 11 +++++++++-- .../{argent-x.js => get-starknet-wallet.js} | 2 +- src/wallets/index.js | 2 +- yarn.lock | 14 ++++++++------ 12 files changed, 45 insertions(+), 32 deletions(-) delete mode 100644 src/assets/svg/wallets/argent/logo.svg create mode 100644 src/assets/svg/wallets/gsw/logo.svg rename src/wallets/{argent-x.js => get-starknet-wallet.js} (87%) diff --git a/package.json b/package.json index 856e472a..6d4dafe2 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,6 @@ ] }, "dependencies": { - "@argent/get-starknet": "^3.0.1", "@emotion/react": "^11.8.2", "@emotion/styled": "^11.8.1", "@headlessui/react": "^1.5.0", @@ -61,6 +60,7 @@ "@mui/material": "^5.5.3", "@mui/styles": "^5.5.0", "@splitbee/web": "^0.3.0", + "get-starknet-wallet": "^0.0.5", "js-logger": "^1.6.1", "react": "^17.0.2", "react-dom": "^17.0.2", diff --git a/src/assets/svg/wallets/argent/logo.svg b/src/assets/svg/wallets/argent/logo.svg deleted file mode 100644 index 8916d826..00000000 --- a/src/assets/svg/wallets/argent/logo.svg +++ /dev/null @@ -1,8 +0,0 @@ -<svg width="112" height="112" viewBox="0 0 112 112" fill="none" xmlns="http://www.w3.org/2000/svg"> - <path - d="M66.6794 19H45.3205C44.6067 19 44.0349 19.6092 44.0193 20.3665C43.5878 41.6523 33.0936 61.855 15.0309 76.1647C14.4574 76.6188 14.3268 77.4723 14.746 78.087L27.2428 96.4236C27.6679 97.0477 28.4963 97.1885 29.0794 96.7301C40.3735 87.8411 49.4579 77.1179 55.9999 65.2324C62.542 77.1179 71.6269 87.8411 82.921 96.7301C83.5036 97.1885 84.3319 97.0477 84.7576 96.4236L97.2544 78.087C97.6731 77.4723 97.5424 76.6188 96.9695 76.1647C78.9063 61.855 68.4121 41.6523 67.981 20.3665C67.9655 19.6092 67.3931 19 66.6794 19Z" - fill="white" /> - <path - d="M96.6027 32.2766L94.327 25.2459C93.8641 23.8185 92.7367 22.7067 91.3015 22.2671L84.2367 20.0951C83.2618 19.7951 83.2515 18.4169 84.2237 18.104L91.2524 15.8286C92.6798 15.3657 93.7944 14.2358 94.234 12.8032L96.4035 5.73892C96.7035 4.7615 98.0819 4.75114 98.3973 5.72343L100.673 12.7541C101.136 14.1814 102.263 15.2933 103.698 15.7355L110.763 17.9049C111.738 18.2049 111.749 19.5831 110.776 19.8986L103.748 22.174C102.32 22.6343 101.206 23.7643 100.766 25.1994L98.5964 32.2611C98.2965 33.2385 96.9182 33.2488 96.6027 32.2766Z" - fill="white" /> -</svg> \ No newline at end of file diff --git a/src/assets/svg/wallets/gsw/logo.svg b/src/assets/svg/wallets/gsw/logo.svg new file mode 100644 index 00000000..996c95bc --- /dev/null +++ b/src/assets/svg/wallets/gsw/logo.svg @@ -0,0 +1,8 @@ +<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M19.9222 9.96097C19.9222 15.4623 15.4626 19.9219 9.96126 19.9219C4.45991 19.9219 0 15.4623 0 9.96097C0 4.45962 4.45991 0 9.96126 0C15.4626 0 19.9222 4.45962 19.9222 9.96097Z" fill="#29296E"/> +<path d="M14.5964 7.29758L14.3431 6.51503C14.2916 6.35588 14.166 6.23202 14.0063 6.18319L13.2199 5.94136C13.111 5.90812 13.1102 5.75455 13.2181 5.71954L14.001 5.46625C14.1598 5.41476 14.2837 5.28915 14.3328 5.1294L14.5743 4.34303C14.6076 4.23448 14.7611 4.2333 14.7962 4.34156L15.0495 5.12411C15.1009 5.28297 15.2266 5.40682 15.3863 5.45595L16.1727 5.69748C16.2815 5.73102 16.2827 5.88429 16.1744 5.9193L15.3916 6.1726C15.2327 6.22408 15.1089 6.34999 15.0598 6.50974L14.8182 7.29581C14.785 7.40466 14.6314 7.40584 14.5964 7.29758Z" fill="#FAFAFA"/> +<path d="M0.905762 9.80314C1.14258 9.3392 1.61093 8.98971 2.09752 8.76877C2.58911 8.55019 3.12954 8.41604 3.66026 8.3725C4.7317 8.27571 5.77548 8.45487 6.7263 8.76465C7.21613 8.91057 7.65447 9.11327 8.10723 9.31802C8.32728 9.42393 8.5341 9.54396 8.74709 9.65987L9.33547 10.0008C9.98151 10.3968 10.6078 10.7475 11.1962 11.0199C11.7861 11.29 12.3191 11.4727 12.8216 11.5659C13.3241 11.6604 13.8348 11.6592 14.4629 11.515C15.086 11.3741 15.7871 11.0702 16.5199 10.6804C17.2571 10.2903 18.0132 9.81197 18.8757 9.3445C18.7893 10.3215 18.5127 11.2376 18.0808 12.1222C17.6384 12.9963 17.0229 13.8488 16.1257 14.5393C15.2454 15.2354 14.0366 15.7205 12.806 15.7934C11.5748 15.8767 10.4037 15.6054 9.40725 15.1974C8.40701 14.7835 7.54268 14.2395 6.77661 13.6391C6.56509 13.4732 6.45153 13.379 6.29532 13.2469L5.85903 12.8648C5.56514 12.6347 5.28036 12.3596 4.98941 12.1317C4.40897 11.6465 3.83471 11.1605 3.20515 10.7393C2.88772 10.5251 2.56028 10.3265 2.18902 10.1506C2.00456 10.0656 1.80863 9.98642 1.59828 9.92405C1.38294 9.85374 1.16406 9.81197 0.905762 9.80314Z" fill="#FF4F0A"/> +<path d="M0.905762 9.8032C1.02667 8.79795 1.49532 7.85508 2.24638 7.05253C2.99363 6.25763 4.16097 5.64483 5.45629 5.56363C6.09556 5.52098 6.74454 5.59217 7.34116 5.7575C7.93513 5.92225 8.49174 6.16231 8.99333 6.44503C9.24398 6.58712 9.47845 6.74245 9.71203 6.89925L10.3345 7.37055L11.3062 8.1372C11.937 8.63939 12.5389 9.10391 13.0952 9.48754C13.6568 9.87175 14.1352 10.1524 14.5921 10.3169C15.0448 10.4963 15.6167 10.5422 16.3728 10.3522C16.7482 10.2657 17.1397 10.1077 17.5575 9.93647C17.9729 9.76113 18.4042 9.55196 18.8757 9.34456C18.819 9.84998 18.7163 10.3533 18.5212 10.8237C18.3339 11.3006 18.087 11.7672 17.7419 12.2023C17.5654 12.4141 17.3763 12.6271 17.1556 12.8236C16.935 13.0155 16.6905 13.1976 16.4204 13.3573C15.8818 13.6694 15.2428 13.8974 14.5873 13.9786C13.9319 14.061 13.2738 14.0198 12.6745 13.8927C12.072 13.7692 11.5231 13.57 11.0191 13.3399C10.0148 12.8728 9.17455 12.2856 8.43172 11.6639C8.05869 11.3536 7.7089 11.0294 7.37764 10.7002L6.98637 10.3074C6.8684 10.1936 6.74925 10.0792 6.63128 9.97442C6.15587 9.55402 5.71459 9.23277 5.22858 9.03242C4.74611 8.82267 4.12861 8.73647 3.37107 8.87827C2.61647 9.0186 1.78862 9.34485 0.905762 9.8032Z" fill="#FAFAFA"/> +<path d="M4.8866 14.9869C4.8866 15.2843 4.64536 15.5256 4.34794 15.5256C4.05051 15.5256 3.80957 15.2843 3.80957 14.9869C3.80957 14.6895 4.05051 14.4482 4.34794 14.4482C4.64536 14.4482 4.8866 14.6895 4.8866 14.9869Z" fill="#FAFAFA"/> +<path d="M4.8866 14.9869C4.8866 15.2843 4.64536 15.5256 4.34794 15.5256C4.05051 15.5256 3.80957 15.2843 3.80957 14.9869C3.80957 14.6895 4.05051 14.4482 4.34794 14.4482C4.64536 14.4482 4.8866 14.6895 4.8866 14.9869Z" fill="#FAFAFA"/> +</svg> diff --git a/src/components/UI/WalletButton/WalletButton.js b/src/components/UI/WalletButton/WalletButton.js index 7202a275..a931b6d4 100644 --- a/src/components/UI/WalletButton/WalletButton.js +++ b/src/components/UI/WalletButton/WalletButton.js @@ -27,6 +27,15 @@ export const WalletButton = ({account, logoPath, onClick}) => { return utils.object.evaluate(walletBtnTxt, {address}); }; + const renderWalletLogo = () => { + const logoSize = isMobile(breakpoint) ? WALLET_LOGO_SIZE_MOBILE : WALLET_LOGO_SIZE; + return logoPath.startsWith('data:image') ? ( + <img alt={''} height={logoSize} src={logoPath} width={logoSize} /> + ) : ( + <DynamicIcon path={logoPath} size={logoSize} /> + ); + }; + return ( <Button className={toClasses(styles.walletButton, styles[breakpoint.toLowerCase()])} @@ -35,12 +44,7 @@ export const WalletButton = ({account, logoPath, onClick}) => { colorBorder={colorBeta} colorText={colorWhite} height={0} - icon={ - <DynamicIcon - path={logoPath} - size={isMobile(breakpoint) ? WALLET_LOGO_SIZE_MOBILE : WALLET_LOGO_SIZE} - /> - } + icon={renderWalletLogo()} text={getText()} onClick={onClick} /> diff --git a/src/config/faqs.js b/src/config/faqs.js index 67021f9d..19633a4a 100644 --- a/src/config/faqs.js +++ b/src/config/faqs.js @@ -22,7 +22,7 @@ export const faqs = [ <li>Make sure you are not using incognito mode.</li> <li> Ensure that you have successfully installed the required wallets (MetaMask and - Argent X). If you haven’t installed one of these wallets, please do so and + a StarkNet wallet). If you haven’t installed one of these wallets, please do so and refresh the page. </li> <li> diff --git a/src/config/wallets.js b/src/config/wallets.js index 7aded763..5a65fd6a 100644 --- a/src/config/wallets.js +++ b/src/config/wallets.js @@ -10,11 +10,11 @@ const wallets = [ logoPath: 'wallets/metamask/logo.svg' }, { - id: 'argent', - name: 'Argent X', + id: 'gsw', + name: 'StarkNet Wallet', type: WalletType.L2, description: 'Login using a browser wallet', - logoPath: 'wallets/argent/logo.svg' + logoPath: 'wallets/gsw/logo.svg' } ]; diff --git a/src/hooks/useWalletHandlerProvider.js b/src/hooks/useWalletHandlerProvider.js index 2ce88eea..eadd665b 100644 --- a/src/hooks/useWalletHandlerProvider.js +++ b/src/hooks/useWalletHandlerProvider.js @@ -1,11 +1,11 @@ import {useCallback, useEffect, useState} from 'react'; import WalletsConfig from '../config/wallets.js'; -import {ArgentX, MetaMask} from '../wallets'; +import {GetStarknetWallet, MetaMask} from '../wallets'; const SUPPORTED_HANDLERS_REGISTRY = { metamask: MetaMask, - argent: ArgentX + gsw: GetStarknetWallet }; export const useWalletHandlerProvider = () => { diff --git a/src/libs/starknet.js b/src/libs/starknet.js index 98040233..1dd266b3 100644 --- a/src/libs/starknet.js +++ b/src/libs/starknet.js @@ -1,4 +1,4 @@ -import {getStarknet} from '@argent/get-starknet'; +import {getStarknet} from 'get-starknet-wallet'; import * as starknet from 'starknet'; export {starknet, getStarknet}; diff --git a/src/providers/WalletsProvider/WalletsProvider.js b/src/providers/WalletsProvider/WalletsProvider.js index 0e37bf52..e83679cc 100644 --- a/src/providers/WalletsProvider/WalletsProvider.js +++ b/src/providers/WalletsProvider/WalletsProvider.js @@ -42,8 +42,15 @@ export const WalletsProvider = ({children}) => { const connectL2Wallet = async walletConfig => { try { - await getStarknet().enable(!autoConnect && {showModal: true}); - setL2WalletConfig(walletConfig); + const wallet = getStarknet(); + const enabled = await wallet + .enable(!autoConnect && {showModal: true}) + .then(address => !!address?.length); + if (enabled) { + walletConfig.name = wallet.name || walletConfig.name; + walletConfig.logoPath = wallet.icon || walletConfig.logoPath; + setL2WalletConfig(walletConfig); + } // eslint-disable-next-line no-empty } catch {} }; diff --git a/src/wallets/argent-x.js b/src/wallets/get-starknet-wallet.js similarity index 87% rename from src/wallets/argent-x.js rename to src/wallets/get-starknet-wallet.js index bc5e00ca..ea2861bf 100644 --- a/src/wallets/argent-x.js +++ b/src/wallets/get-starknet-wallet.js @@ -1,6 +1,6 @@ import {getStarknet} from '../libs'; -export class ArgentX { +export class GetStarknetWallet { constructor(config) { this.config = config; } diff --git a/src/wallets/index.js b/src/wallets/index.js index 65a2afc7..18230005 100644 --- a/src/wallets/index.js +++ b/src/wallets/index.js @@ -1,2 +1,2 @@ -export * from './argent-x'; +export * from './get-starknet-wallet'; export * from './metamask'; diff --git a/yarn.lock b/yarn.lock index ae8c7a6b..1bb3ebd8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -120,11 +120,6 @@ "@web3-react/types" "^6.0.7" tiny-warning "^1.0.3" -"@argent/get-starknet@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@argent/get-starknet/-/get-starknet-3.0.1.tgz#b3f80fd54528d4281bc5f3162d2576bb47c1c786" - integrity sha512-4jWzAU/vc6WWCrS5CabyrEVeQhYcYO6bLMgbJld+QRV6zlwgtRcsjjyfyxL9gKqP2IJI6V6dBHUdmvbxheUPQA== - "@babel/cli@^7.16.0": version "7.17.6" resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.17.6.tgz#169e5935f1795f0b62ded5a2accafeedfe5c5363" @@ -6055,7 +6050,7 @@ bottleneck@^2.18.1: resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== -bowser@^2.9.0: +bowser@^2.11.0, bowser@^2.9.0: version "2.11.0" resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== @@ -10399,6 +10394,13 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== +get-starknet-wallet@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/get-starknet-wallet/-/get-starknet-wallet-0.0.5.tgz#dad317677d2367972af7a586bf73cd0069e636ab" + integrity sha512-OVOenKfqrC6TzRdyp58pSr4+APr6VaY66tlhlC3zbpK3lLgLl3XCZjnOUuI1sX8TsmhBRBlQJeO1guDnmu3b7w== + dependencies: + bowser "^2.11.0" + get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" From 59c746b981adc8a729cc8cb44f177b5ddb1a11c1 Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Mon, 25 Apr 2022 11:28:02 +0000 Subject: [PATCH 157/211] prerelease: v1.3.0-dev.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [1.3.0-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.1-dev.5...v1.3.0-dev.1) (2022-04-25) ### 🧩 Features * integrated with get-starknet-wallet ([#163](https://github.com/starkware-libs/starkgate-frontend/issues/163)) ([e0f996a](https://github.com/starkware-libs/starkgate-frontend/commit/e0f996a7c5a7b7fa4a395695048275a8c234dd76)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e269a88e..feee782d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [1.3.0-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.1-dev.5...v1.3.0-dev.1) (2022-04-25) + + +### 🧩 Features + +* integrated with get-starknet-wallet ([#163](https://github.com/starkware-libs/starkgate-frontend/issues/163)) ([e0f996a](https://github.com/starkware-libs/starkgate-frontend/commit/e0f996a7c5a7b7fa4a395695048275a8c234dd76)) + ### [1.2.1-dev.5](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.1-dev.4...v1.2.1-dev.5) (2022-04-25) diff --git a/package.json b/package.json index 6d4dafe2..a06dde6f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.2.1-dev.5", + "version": "1.3.0-dev.1", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 69324e8c838674eddc9759a282c1e4d4040c0553 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Mon, 25 Apr 2022 15:48:13 +0300 Subject: [PATCH 158/211] fix: canceled transfers shown in transfer log (#166) --- .github/workflows/push_frontend_images.yml | 1 - src/hooks/useTransferToL1.js | 36 ++++++++++--------- src/hooks/useTransferToL2.js | 34 +++++++++--------- .../EventManagerProvider.js | 15 ++++---- .../event-manager-context.js | 1 + .../event-manager-hooks.js | 27 +++++++++----- 6 files changed, 65 insertions(+), 49 deletions(-) diff --git a/.github/workflows/push_frontend_images.yml b/.github/workflows/push_frontend_images.yml index c0571699..ec6258c6 100644 --- a/.github/workflows/push_frontend_images.yml +++ b/.github/workflows/push_frontend_images.yml @@ -29,7 +29,6 @@ jobs: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - deploy_testnet: if: github.event.base_ref == 'refs/heads/master' needs: [push-frontend-image] diff --git a/src/hooks/useTransferToL1.js b/src/hooks/useTransferToL1.js index c5fa0e42..908dfa74 100644 --- a/src/hooks/useTransferToL1.js +++ b/src/hooks/useTransferToL1.js @@ -83,7 +83,7 @@ export const useTransferToL1 = () => { l2hash }); } catch (ex) { - logger.error(ex.message, {ex}); + logger.error(ex.message, ex); trackError(ex); handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, ex)); } @@ -110,7 +110,7 @@ export const useCompleteTransferToL1 = () => { const progressOptions = useTransferProgress(); const getL1Token = useL1Token(); const getL1TokenBridgeContract = useL1TokenBridgeContract(); - const addWithdrawalListener = useWithdrawalListener(); + const {addListener, removeListener} = useWithdrawalListener(); const [trackInitiated, trackSuccess, trackError, trackReject] = useCompleteTransferToL1Tracking(); return useCallback( @@ -136,7 +136,9 @@ export const useCompleteTransferToL1 = () => { }; const onTransactionHash = (error, transactionHash) => { - if (!error) { + if (error) { + onError(error); + } else { logger.log('Tx signed', {transactionHash}); handleProgress( progressOptions.withdraw( @@ -145,26 +147,27 @@ export const useCompleteTransferToL1 = () => { stepOf(TransferStep.WITHDRAW, CompleteTransferToL1Steps) ) ); - } else { - trackReject(error); - logger.error(error.message); - handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, error)); } }; const onWithdrawal = (error, event) => { - if (!error) { + if (error) { + onError(error); + } else { const {transactionHash: l1hash} = event; logger.log('Done', l1hash); trackSuccess(l1hash); handleData({...transfer, l1hash}); - } else { - trackError(error); - logger.error(error.message); - handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, error)); } }; + const onError = error => { + removeListener(); + trackError(error); + logger.error(error?.message, error); + handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, error)); + }; + try { logger.log('CompleteTransferToL1 called'); handleProgress( @@ -173,13 +176,11 @@ export const useCompleteTransferToL1 = () => { stepOf(TransferStep.CONFIRM_TX, CompleteTransferToL1Steps) ) ); - addWithdrawalListener(onWithdrawal); + addListener(onWithdrawal); logger.log('Calling withdraw'); await sendWithdrawal(); } catch (ex) { - trackError(ex); - logger.error(ex.message, {ex}); - handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, ex)); + onError(ex); } }, [ @@ -192,7 +193,8 @@ export const useCompleteTransferToL1 = () => { handleProgress, logger, progressOptions, - addWithdrawalListener + addListener, + removeListener ] ); }; diff --git a/src/hooks/useTransferToL2.js b/src/hooks/useTransferToL2.js index c7a5e1eb..41953bb6 100644 --- a/src/hooks/useTransferToL2.js +++ b/src/hooks/useTransferToL2.js @@ -32,7 +32,7 @@ export const useTransferToL2 = () => { const getTokenContract = useTokenContract(); const getTokenBridgeContract = useTokenBridgeContract(); const progressOptions = useTransferProgress(); - const addDepositListener = useDepositListener(); + const {addListener, removeListener} = useDepositListener(); const getDepositMessageToL2Event = useDepositMessageToL2Event(); const maxTotalBalance = useMaxTotalBalance(); @@ -81,20 +81,20 @@ export const useTransferToL2 = () => { }; const onTransactionHash = (error, transactionHash) => { - if (!error) { + if (error) { + onError(error); + } else { logger.log('Tx signed', {transactionHash}); handleProgress( progressOptions.deposit(amount, symbol, stepOf(TransferStep.DEPOSIT, TransferToL2Steps)) ); - } else { - trackReject(error); - logger.error(error.message); - handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, error)); } }; const onDeposit = async (error, event) => { - if (!error) { + if (error) { + onError(error); + } else { const l2MessageEvent = await getDepositMessageToL2Event(event); if (l2MessageEvent) { handleData({ @@ -107,10 +107,6 @@ export const useTransferToL2 = () => { ...extractTransactionsHashFromEvent(l2MessageEvent) }); } - } else { - trackError(error); - logger.error(error.message); - handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, error)); } }; @@ -144,6 +140,13 @@ export const useTransferToL2 = () => { return maxTotalBalance < tokenBridgeBalance + Number(amount); }; + const onError = error => { + removeListener(); + trackError(error); + logger.error(error?.message, error); + handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, error)); + }; + try { logger.log('TransferToL2 called'); if (await isMaxBalanceExceeded()) { @@ -170,18 +173,17 @@ export const useTransferToL2 = () => { stepOf(TransferStep.CONFIRM_TX, TransferToL2Steps) ) ); - addDepositListener(onDeposit); + addListener(onDeposit); logger.log('Calling deposit'); await sendDeposit(); } catch (ex) { - trackError(ex); - logger.error(ex.message, {ex}); - handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, ex)); + onError(ex); } }, [ selectedToken, - addDepositListener, + addListener, + removeListener, l1ChainId, l2ChainId, l1Account, diff --git a/src/providers/EventManagerProvider/EventManagerProvider.js b/src/providers/EventManagerProvider/EventManagerProvider.js index 8e410ff1..a32d4cef 100644 --- a/src/providers/EventManagerProvider/EventManagerProvider.js +++ b/src/providers/EventManagerProvider/EventManagerProvider.js @@ -31,6 +31,11 @@ export const EventManagerProvider = ({children}) => { listeners[eventName].push(callback); }; + const removeListeners = eventName => { + logger.log(`Remove listeners for event ${eventName}.`); + listeners[eventName] = []; + }; + const getPastEvents = (contract, eventName, options = {}) => { logger.log(`Getting ${eventName} past events.`); return contract.getPastEvents(eventName, { @@ -42,12 +47,7 @@ export const EventManagerProvider = ({children}) => { const emitListeners = (eventName, error, event) => { logger.log(`Event ${eventName} emitted to listeners.`, event); listeners[eventName]?.forEach(listener => listener(error, event)); - cleanListeners(eventName); - }; - - const cleanListeners = eventName => { - logger.log(`Clean listeners for event ${eventName}.`); - listeners[eventName] = []; + removeListeners(eventName); }; const onWithdrawal = (error, event) => { @@ -111,7 +111,8 @@ export const EventManagerProvider = ({children}) => { const value = { addListener, - getPastEvents + getPastEvents, + removeListeners }; return <EventManagerContext.Provider value={value}>{children}</EventManagerContext.Provider>; diff --git a/src/providers/EventManagerProvider/event-manager-context.js b/src/providers/EventManagerProvider/event-manager-context.js index a1c700d2..0cec28a5 100644 --- a/src/providers/EventManagerProvider/event-manager-context.js +++ b/src/providers/EventManagerProvider/event-manager-context.js @@ -2,5 +2,6 @@ import {createContext} from 'react'; export const EventManagerContext = createContext({ addListener: (eventName, callback) => ({eventName, callback}), + removeListeners: eventName => eventName, getPastEvents: async (contract, eventName, options) => ({contract, eventName, options}) }); diff --git a/src/providers/EventManagerProvider/event-manager-hooks.js b/src/providers/EventManagerProvider/event-manager-hooks.js index 67fce439..eb46f1ef 100644 --- a/src/providers/EventManagerProvider/event-manager-hooks.js +++ b/src/providers/EventManagerProvider/event-manager-hooks.js @@ -4,20 +4,31 @@ import {EventName} from '../../enums'; import {useStarknetContract} from '../../hooks'; import {EventManagerContext} from './event-manager-context'; -export const useEventListener = () => { - return useContext(EventManagerContext); +export const useEventListener = eventName => { + const {addListener, removeListeners} = useContext(EventManagerContext); + + const _addListener = useCallback( + callback => addListener(eventName, callback), + [addListener] + ); + + const _removeListeners = useCallback( + () => removeListeners(eventName), + [removeListeners] + ); + + return { + addListener: _addListener, + removeListener: _removeListeners + }; }; export const useDepositListener = () => { - const {addListener} = useContext(EventManagerContext); - - return useCallback(callback => addListener(EventName.L1.LOG_DEPOSIT, callback), [addListener]); + return useEventListener(EventName.L1.LOG_DEPOSIT); }; export const useWithdrawalListener = () => { - const {addListener} = useContext(EventManagerContext); - - return useCallback(callback => addListener(EventName.L1.LOG_WITHDRAWAL, callback), [addListener]); + return useEventListener(EventName.L1.LOG_WITHDRAWAL); }; export const useDepositMessageToL2Event = () => { From 2bed4bafc493f1357378fb69ba53646e06f43925 Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Mon, 25 Apr 2022 12:50:12 +0000 Subject: [PATCH 159/211] prerelease: v1.3.0-dev.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [1.3.0-dev.2](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0-dev.1...v1.3.0-dev.2) (2022-04-25) ### 🔧 Fixes * canceled transfers shown in transfer log ([#166](https://github.com/starkware-libs/starkgate-frontend/issues/166)) ([69324e8](https://github.com/starkware-libs/starkgate-frontend/commit/69324e8c838674eddc9759a282c1e4d4040c0553)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index feee782d..0b4b6fe4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [1.3.0-dev.2](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0-dev.1...v1.3.0-dev.2) (2022-04-25) + + +### 🔧 Fixes + +* canceled transfers shown in transfer log ([#166](https://github.com/starkware-libs/starkgate-frontend/issues/166)) ([69324e8](https://github.com/starkware-libs/starkgate-frontend/commit/69324e8c838674eddc9759a282c1e4d4040c0553)) + ## [1.3.0-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.1-dev.5...v1.3.0-dev.1) (2022-04-25) diff --git a/package.json b/package.json index a06dde6f..0ab89f8e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.3.0-dev.1", + "version": "1.3.0-dev.2", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 6c01ae5e518947294a0abd7c6e489ac0074edf38 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Mon, 25 Apr 2022 16:38:05 +0300 Subject: [PATCH 160/211] fix(deps): bump gsw version --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 0ab89f8e..caccd549 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "@mui/material": "^5.5.3", "@mui/styles": "^5.5.0", "@splitbee/web": "^0.3.0", - "get-starknet-wallet": "^0.0.5", + "get-starknet-wallet": "^0.0.8", "js-logger": "^1.6.1", "react": "^17.0.2", "react-dom": "^17.0.2", diff --git a/yarn.lock b/yarn.lock index 1bb3ebd8..71949983 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10394,10 +10394,10 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-starknet-wallet@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/get-starknet-wallet/-/get-starknet-wallet-0.0.5.tgz#dad317677d2367972af7a586bf73cd0069e636ab" - integrity sha512-OVOenKfqrC6TzRdyp58pSr4+APr6VaY66tlhlC3zbpK3lLgLl3XCZjnOUuI1sX8TsmhBRBlQJeO1guDnmu3b7w== +get-starknet-wallet@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/get-starknet-wallet/-/get-starknet-wallet-0.0.8.tgz#3c586423fc91817cb262e1b09433d81c9835a7de" + integrity sha512-VhFY1kXxLri4Vs6G9GwcyjdAPqSLDdNGPqvuCx0VsMdE4fQdJD5qGeOf+BASjO8/ZN2SYIjuEvDfV5SGs3teYA== dependencies: bowser "^2.11.0" From 6949d99af05d31f0850a7ba5b41f49c1a6047093 Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Mon, 25 Apr 2022 13:39:45 +0000 Subject: [PATCH 161/211] prerelease: v1.3.0-dev.3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [1.3.0-dev.3](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0-dev.2...v1.3.0-dev.3) (2022-04-25) ### 🔧 Fixes * **deps:** bump gsw version ([6c01ae5](https://github.com/starkware-libs/starkgate-frontend/commit/6c01ae5e518947294a0abd7c6e489ac0074edf38)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b4b6fe4..491c3be3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [1.3.0-dev.3](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0-dev.2...v1.3.0-dev.3) (2022-04-25) + + +### 🔧 Fixes + +* **deps:** bump gsw version ([6c01ae5](https://github.com/starkware-libs/starkgate-frontend/commit/6c01ae5e518947294a0abd7c6e489ac0074edf38)) + ## [1.3.0-dev.2](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0-dev.1...v1.3.0-dev.2) (2022-04-25) diff --git a/package.json b/package.json index caccd549..c7d9513b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.3.0-dev.2", + "version": "1.3.0-dev.3", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 2551a7f296de1fcdfc5dd4a819982850e6294306 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 26 Apr 2022 14:50:55 +0300 Subject: [PATCH 162/211] feat: validate starknet wallet chain ID (#168) --- src/components/UI/Button/Button.js | 1 + src/components/UI/Button/Button.module.scss | 8 +- src/enums/{ErrorType.js => LoginErrorType.js} | 2 +- src/enums/WalletErrorType.js | 4 + src/enums/index.js | 3 +- src/hooks/useTransferToL1.js | 2 +- src/providers/AppProvider/app-hooks.js | 13 ++- .../event-manager-hooks.js | 12 +- .../WalletsProvider/WalletsProvider.js | 92 ++++++--------- .../WalletsProvider/wallets-hooks.js | 106 +++++++++++++++++- src/routes/Login/Login.js | 32 ++++-- 11 files changed, 181 insertions(+), 94 deletions(-) rename src/enums/{ErrorType.js => LoginErrorType.js} (63%) create mode 100644 src/enums/WalletErrorType.js diff --git a/src/components/UI/Button/Button.js b/src/components/UI/Button/Button.js index 5a61d3f1..f54a0705 100644 --- a/src/components/UI/Button/Button.js +++ b/src/components/UI/Button/Button.js @@ -39,6 +39,7 @@ export const Button = ({ styles.button, isDisabled && styles.isDisabled, isLoading && styles.isLoading, + text && styles.hasText, className )} style={styleObj} diff --git a/src/components/UI/Button/Button.module.scss b/src/components/UI/Button/Button.module.scss index 5ad23ed4..3d897195 100644 --- a/src/components/UI/Button/Button.module.scss +++ b/src/components/UI/Button/Button.module.scss @@ -27,8 +27,10 @@ pointer-events: none; } - img, - svg { - margin-right: 10px; + &.hasText { + img, + svg { + margin-right: 10px; + } } } diff --git a/src/enums/ErrorType.js b/src/enums/LoginErrorType.js similarity index 63% rename from src/enums/ErrorType.js rename to src/enums/LoginErrorType.js index f9b7cb0e..7f07a7d1 100644 --- a/src/enums/ErrorType.js +++ b/src/enums/LoginErrorType.js @@ -1,4 +1,4 @@ -export const ErrorType = { +export const LoginErrorType = { UNSUPPORTED_BROWSER: 0, UNSUPPORTED_CHAIN_ID: 1 }; diff --git a/src/enums/WalletErrorType.js b/src/enums/WalletErrorType.js new file mode 100644 index 00000000..f89bb52f --- /dev/null +++ b/src/enums/WalletErrorType.js @@ -0,0 +1,4 @@ +export const WalletErrorType = { + CONNECTION_REJECTED_ERROR: 'ConnectionRejectedError', + CHAIN_UNSUPPORTED_ERROR: 'ChainUnsupportedError' +}; diff --git a/src/enums/index.js b/src/enums/index.js index 55fa1ba6..ae3987a5 100644 --- a/src/enums/index.js +++ b/src/enums/index.js @@ -14,4 +14,5 @@ export * from './TransferError'; export * from './TransferStep'; export * from './ModalSize'; export * from './ModalType'; -export * from './ErrorType'; +export * from './LoginErrorType'; +export * from './WalletErrorType'; diff --git a/src/hooks/useTransferToL1.js b/src/hooks/useTransferToL1.js index 908dfa74..4885bd20 100644 --- a/src/hooks/useTransferToL1.js +++ b/src/hooks/useTransferToL1.js @@ -111,7 +111,7 @@ export const useCompleteTransferToL1 = () => { const getL1Token = useL1Token(); const getL1TokenBridgeContract = useL1TokenBridgeContract(); const {addListener, removeListener} = useWithdrawalListener(); - const [trackInitiated, trackSuccess, trackError, trackReject] = useCompleteTransferToL1Tracking(); + const [trackInitiated, trackSuccess, trackError] = useCompleteTransferToL1Tracking(); return useCallback( async transfer => { diff --git a/src/providers/AppProvider/app-hooks.js b/src/providers/AppProvider/app-hooks.js index 7a9b6f1e..e618ea5a 100644 --- a/src/providers/AppProvider/app-hooks.js +++ b/src/providers/AppProvider/app-hooks.js @@ -1,5 +1,6 @@ import {useContext} from 'react'; +import {WalletStatus} from '../../enums'; import {useL1Wallet, useL2Wallet} from '../WalletsProvider'; import {AppContext} from './app-context'; @@ -12,8 +13,14 @@ export const useTerms = () => { }; export const useLogin = () => { - const {isConnected: isL1Connected} = useL1Wallet(); - const {isConnected: isL2Connected} = useL2Wallet(); + const {status: l1Status, config: l1Config} = useL1Wallet(); + const {status: l2Status, config: l2Config} = useL2Wallet(); - return {isLoggedIn: isL1Connected && isL2Connected}; + return { + isLoggedIn: + l1Status === WalletStatus.CONNECTED && + !!l1Config && + l2Status === WalletStatus.CONNECTED && + !!l2Config + }; }; diff --git a/src/providers/EventManagerProvider/event-manager-hooks.js b/src/providers/EventManagerProvider/event-manager-hooks.js index eb46f1ef..a18d1291 100644 --- a/src/providers/EventManagerProvider/event-manager-hooks.js +++ b/src/providers/EventManagerProvider/event-manager-hooks.js @@ -7,15 +7,9 @@ import {EventManagerContext} from './event-manager-context'; export const useEventListener = eventName => { const {addListener, removeListeners} = useContext(EventManagerContext); - const _addListener = useCallback( - callback => addListener(eventName, callback), - [addListener] - ); - - const _removeListeners = useCallback( - () => removeListeners(eventName), - [removeListeners] - ); + const _addListener = useCallback(callback => addListener(eventName, callback), [addListener]); + + const _removeListeners = useCallback(() => removeListeners(eventName), [removeListeners]); return { addListener: _addListener, diff --git a/src/providers/WalletsProvider/WalletsProvider.js b/src/providers/WalletsProvider/WalletsProvider.js index e83679cc..da29fd8e 100644 --- a/src/providers/WalletsProvider/WalletsProvider.js +++ b/src/providers/WalletsProvider/WalletsProvider.js @@ -2,64 +2,46 @@ import PropTypes from 'prop-types'; import React, {useEffect, useReducer} from 'react'; import {useWallet} from 'use-wallet'; -import {ChainType, WalletStatus} from '../../enums'; -import {useEnvs} from '../../hooks'; -import {getStarknet} from '../../libs'; import {useIsL1, useIsL2} from '../TransferProvider'; import {WalletsContext} from './wallets-context'; +import {useStarknetWallet} from './wallets-hooks'; import {actions, initialState, reducer} from './wallets-reducer'; +import {WalletStatus} from '../../enums'; export const WalletsProvider = ({children}) => { - const {autoConnect} = useEnvs(); const [state, dispatch] = useReducer(reducer, initialState); const {status, connect, reset, isConnected, error, account, chainId, networkName} = useWallet(); - const {selectedAddress, isConnected: isL2Connected, enable} = getStarknet(); + const { + status: l2Status, + connect: l2Connect, + isConnected: l2IsConnected, + error: l2Error, + account: l2Account, + chainId: l2ChainId, + networkName: l2NetworkName + } = useStarknetWallet(); const [isL1, swapToL1] = useIsL1(); const [isL2, swapToL2] = useIsL2(); - // Handles starknet wallet changes useEffect(() => { (isL2 || state.l2Wallet.config) && maybeUpdateL2Wallet(); - }, [selectedAddress, isL2Connected]); + }, [l2Status, l2Error, l2Account, l2ChainId, l2NetworkName]); - // Handles ethereum wallet changes useEffect(() => { (isL1 || state.l1Wallet.config) && maybeUpdateL1Wallet(); }, [status, error, account, chainId, networkName]); const connectWallet = async walletConfig => { - if (isL1) { - return connectL1Wallet(walletConfig); - } - return connectL2Wallet(walletConfig); - }; - - const connectL1Wallet = async walletConfig => { - const {connectorId} = walletConfig; - await connect(connectorId); - setL1WalletConfig(walletConfig); + return isL1 ? connectL1Wallet(walletConfig) : connectL2Wallet(walletConfig); }; - const connectL2Wallet = async walletConfig => { - try { - const wallet = getStarknet(); - const enabled = await wallet - .enable(!autoConnect && {showModal: true}) - .then(address => !!address?.length); - if (enabled) { - walletConfig.name = wallet.name || walletConfig.name; - walletConfig.logoPath = wallet.icon || walletConfig.logoPath; - setL2WalletConfig(walletConfig); - } - // eslint-disable-next-line no-empty - } catch {} + const resetWallet = () => { + return isL1 ? resetL1Wallet() : resetL2Wallet(); }; - const resetWallet = () => { - if (isL1) { - return resetL1Wallet(); - } - return resetL2Wallet(); + const connectL1Wallet = async walletConfig => { + const {connectorId} = walletConfig; + return connect(connectorId).then(() => setL1WalletConfig(walletConfig)); }; const resetL1Wallet = () => { @@ -67,6 +49,10 @@ export const WalletsProvider = ({children}) => { return reset(); }; + const connectL2Wallet = async walletConfig => { + return l2Connect(walletConfig).then(() => setL2WalletConfig(walletConfig)); + }; + const resetL2Wallet = () => { setL2WalletConfig(null); return null; @@ -78,13 +64,13 @@ export const WalletsProvider = ({children}) => { maybeUpdateL1Wallet(); } else if (state.l2Wallet.config && !state.l1Wallet.config) { swapToL2(); - await maybeUpdateL2Wallet(); + maybeUpdateL2Wallet(); } }; const maybeUpdateL1Wallet = () => { // To support serializable object in the store - const serializedError = status === 'error' ? {...error} : null; + const serializedError = status === WalletStatus.ERROR ? {...error} : null; updateL1Wallet({ account, status, @@ -95,28 +81,17 @@ export const WalletsProvider = ({children}) => { }); }; - const maybeUpdateL2Wallet = async () => { - let status, - error = null; - try { - await enable(); - status = WalletStatus.CONNECTED; - } catch (ex) { - error = ex; - status = WalletStatus.ERROR; - } finally { - updateL2Wallet({ - status, - error, - chainId: chainId === ChainType.L1.MAIN ? ChainType.L2.MAIN : ChainType.L2.GOERLI, - isConnected: isL2Connected, - account: selectedAddress, - chainName: networkName - }); - } + const maybeUpdateL2Wallet = () => { + updateL2Wallet({ + status: l2Status, + error: l2Error, + chainId: l2ChainId, + isConnected: l2IsConnected, + account: l2Account, + chainName: l2NetworkName + }); }; - // Dispatchers const updateL1Wallet = payload => { dispatch({ type: actions.UPDATE_L1_WALLET, @@ -145,7 +120,6 @@ export const WalletsProvider = ({children}) => { }); }; - // context const context = { ...state, connectWallet, diff --git a/src/providers/WalletsProvider/wallets-hooks.js b/src/providers/WalletsProvider/wallets-hooks.js index 05d0c336..b936f833 100644 --- a/src/providers/WalletsProvider/wallets-hooks.js +++ b/src/providers/WalletsProvider/wallets-hooks.js @@ -1,18 +1,24 @@ import {useCallback, useContext, useEffect, useState} from 'react'; +import {ChainInfo, ChainType, WalletErrorType, WalletStatus} from '../../enums'; +import {useEnvs} from '../../hooks'; +import {getStarknet} from '../../libs'; import {useTransfer} from '../TransferProvider'; import {WalletsContext} from './wallets-context'; export const useWallets = () => { const wallets = useContext(WalletsContext); - const [activeWallet, setActiveWallet] = useState(wallets.l1Wallet); const {isL1} = useTransfer(); + const [activeWallet, setActiveWallet] = useState(wallets.l1Wallet); - const connectWallet = useCallback(walletConfig => wallets.connectWallet(walletConfig), []); + const connectWallet = useCallback( + walletConfig => wallets.connectWallet(walletConfig), + [isL1, wallets] + ); - const resetWallet = useCallback(() => wallets.resetWallet(), []); + const resetWallet = useCallback(() => wallets.resetWallet(), [isL1, wallets]); - const swapWallets = useCallback(() => wallets.swapWallets(), []); + const swapWallets = useCallback(() => wallets.swapWallets(), [isL1, wallets]); useEffect(() => { setActiveWallet(isL1 ? wallets.l1Wallet : wallets.l2Wallet); @@ -28,7 +34,11 @@ export const useWallets = () => { export const useL1Wallet = () => { const wallets = useContext(WalletsContext); - const connectWallet = useCallback(walletConfig => wallets.connectL1Wallet(walletConfig), []); + + const connectWallet = useCallback( + walletConfig => wallets.connectL1Wallet(walletConfig), + [wallets] + ); return { connectWallet, @@ -38,10 +48,94 @@ export const useL1Wallet = () => { export const useL2Wallet = () => { const wallets = useContext(WalletsContext); - const connectWallet = useCallback(walletConfig => wallets.connectL2Wallet(walletConfig), []); + + const connectWallet = useCallback( + walletConfig => wallets.connectL2Wallet(walletConfig), + [wallets] + ); return { connectWallet, ...wallets.l2Wallet }; }; + +export const useStarknetWallet = () => { + const {autoConnect, supportedChainId} = useEnvs(); + const [error, setError] = useState(null); + const [account, setAccount] = useState(''); + const [chainId, setChainId] = useState(''); + const [networkName, setNetworkName] = useState(''); + const [status, setStatus] = useState(WalletStatus.DISCONNECTED); + + const connect = async walletConfig => { + try { + setStatus(WalletStatus.CONNECTING); + const wallet = getStarknet(); + const enabled = await wallet + .enable(!autoConnect && {showModal: true}) + .then(address => !!address?.length); + + if (enabled) { + walletConfig.name = wallet.name || walletConfig.name; + walletConfig.logoPath = wallet.icon || walletConfig.logoPath; + updateAccount(); + addAccountChangedListener(); + } + } catch { + setStatus(WalletStatus.ERROR); + } + }; + + const addAccountChangedListener = () => { + getStarknet().on('accountsChanged', () => { + updateAccount(); + }); + }; + + const updateAccount = () => { + const chainId = getCurrentChainId(); + setAccount(getStarknet().selectedAddress); + setChainId(chainId); + setNetworkName(ChainInfo.L2[chainId].NAME); + handleChain(chainId); + }; + + const getCurrentChainId = () => { + const {baseUrl} = getStarknet().provider; + if (baseUrl.includes('alpha-mainnet.starknet.io')) { + return ChainType.L2.MAIN; + } else if (baseUrl.includes('alpha4.starknet.io')) { + return ChainType.L2.GOERLI; + } else if (baseUrl.match(/^https?:\/\/localhost.*/)) { + return 'localhost'; + } + }; + + const isChainValid = chainId => { + return ( + (chainId === ChainType.L2.MAIN && supportedChainId === ChainType.L1.MAIN) || + (chainId === ChainType.L2.GOERLI && supportedChainId === ChainType.L1.GOERLI) + ); + }; + + const handleChain = chainId => { + if (isChainValid(chainId)) { + setStatus(WalletStatus.CONNECTED); + setError(null); + } else { + setStatus(WalletStatus.ERROR); + setError({name: WalletErrorType.CHAIN_UNSUPPORTED_ERROR}); + } + }; + + return { + account, + chainId, + networkName, + status, + error, + connect, + isConnected: getStarknet().isConnected + }; +}; diff --git a/src/routes/Login/Login.js b/src/routes/Login/Login.js index 183e56c0..414c9e6e 100644 --- a/src/routes/Login/Login.js +++ b/src/routes/Login/Login.js @@ -1,7 +1,14 @@ import React, {useEffect, useRef, useState} from 'react'; import {LoginErrorMessage, WalletLogin} from '../../components/UI'; -import {ChainInfo, ErrorType, NetworkType, WalletStatus, WalletType} from '../../enums'; +import { + ChainInfo, + LoginErrorType, + NetworkType, + WalletErrorType, + WalletStatus, + WalletType +} from '../../enums'; import { useEnvs, useLoginTracking, @@ -9,7 +16,8 @@ import { useWalletHandlerProvider } from '../../hooks'; import {useHideModal, useProgressModal} from '../../providers/ModalProvider'; -import {useL1Wallet, useL2Wallet, useWallets} from '../../providers/WalletsProvider'; +import {useIsL1, useIsL2} from '../../providers/TransferProvider'; +import {useWallets} from '../../providers/WalletsProvider'; import utils from '../../utils'; import styles from './Login.module.scss'; @@ -35,15 +43,16 @@ export const Login = () => { const hideModal = useHideModal(); const showProgressModal = useProgressModal(); const getWalletHandlers = useWalletHandlerProvider(); - const {status, error: walletError} = useWallets(); - const {connectWallet: connectL1Wallet, isConnected: isConnectedL1Wallet} = useL1Wallet(); - const {connectWallet: connectL2Wallet} = useL2Wallet(); + const {status, error: walletError, connectWallet, isConnected} = useWallets(); + const [, swapToL1] = useIsL1(); + const [, swapToL2] = useIsL2(); useEffect(() => { trackLoginScreen(); if (!utils.browser.isChrome()) { - setError({type: ErrorType.UNSUPPORTED_BROWSER, message: unsupportedBrowserTxt}); + setError({type: LoginErrorType.UNSUPPORTED_BROWSER, message: unsupportedBrowserTxt}); } + return () => swapToL1(); }, []); useEffect(() => { @@ -60,10 +69,11 @@ export const Login = () => { }, [error, walletType, getWalletHandlers]); useEffect(() => { - if (isConnectedL1Wallet) { + if (isConnected) { setWalletType(WalletType.L2); + swapToL2(); } - }, [isConnectedL1Wallet]); + }, [isConnected]); useEffect(() => { walletError && handleWalletError(walletError); @@ -99,7 +109,7 @@ export const Login = () => { return walletHandler.install(); } setSelectedWalletName(name); - return walletType === WalletType.L1 ? connectL1Wallet(config) : connectL2Wallet(config); + return connectWallet(config); }; const onDownloadClick = () => { @@ -111,9 +121,9 @@ export const Login = () => { }; const handleWalletError = error => { - if (error.name === 'ChainUnsupportedError') { + if (error.name === WalletErrorType.CHAIN_UNSUPPORTED_ERROR) { setError({ - type: ErrorType.UNSUPPORTED_CHAIN_ID, + type: LoginErrorType.UNSUPPORTED_CHAIN_ID, message: utils.object.evaluate(unsupportedChainIdTxt, { chainName: ChainInfo.L1[supportedChainId].NAME }) From a37b7098a245e1fba9564c01e40dbdc646d8fe28 Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Tue, 26 Apr 2022 11:52:39 +0000 Subject: [PATCH 163/211] prerelease: v1.3.0-dev.4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [1.3.0-dev.4](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0-dev.3...v1.3.0-dev.4) (2022-04-26) ### 🧩 Features * validate starknet wallet chain ID ([#168](https://github.com/starkware-libs/starkgate-frontend/issues/168)) ([2551a7f](https://github.com/starkware-libs/starkgate-frontend/commit/2551a7f296de1fcdfc5dd4a819982850e6294306)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 491c3be3..7e2fd349 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [1.3.0-dev.4](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0-dev.3...v1.3.0-dev.4) (2022-04-26) + + +### 🧩 Features + +* validate starknet wallet chain ID ([#168](https://github.com/starkware-libs/starkgate-frontend/issues/168)) ([2551a7f](https://github.com/starkware-libs/starkgate-frontend/commit/2551a7f296de1fcdfc5dd4a819982850e6294306)) + ## [1.3.0-dev.3](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0-dev.2...v1.3.0-dev.3) (2022-04-25) diff --git a/package.json b/package.json index c7d9513b..d0468d9d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.3.0-dev.3", + "version": "1.3.0-dev.4", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 18811924e99f63477e0edd4dcdbf9d35fd32cc43 Mon Sep 17 00:00:00 2001 From: CarmitKl <96685244+CarmitKl@users.noreply.github.com> Date: Tue, 26 Apr 2022 15:07:10 +0300 Subject: [PATCH 164/211] fix: isInstalled() check for gsw (#165) --- src/wallets/get-starknet-wallet.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/wallets/get-starknet-wallet.js b/src/wallets/get-starknet-wallet.js index ea2861bf..33e541bc 100644 --- a/src/wallets/get-starknet-wallet.js +++ b/src/wallets/get-starknet-wallet.js @@ -6,7 +6,8 @@ export class GetStarknetWallet { } isInstalled() { - return Boolean(window.starknet); + const version = window.starknet?.version; + return version && version !== 'uninstalled'; } install() { From 11e072a055b2020c0bae8767e992b33dc3b8e693 Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Tue, 26 Apr 2022 12:09:06 +0000 Subject: [PATCH 165/211] prerelease: v1.3.0-dev.5 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [1.3.0-dev.5](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0-dev.4...v1.3.0-dev.5) (2022-04-26) ### 🔧 Fixes * isInstalled() check for gsw ([#165](https://github.com/starkware-libs/starkgate-frontend/issues/165)) ([1881192](https://github.com/starkware-libs/starkgate-frontend/commit/18811924e99f63477e0edd4dcdbf9d35fd32cc43)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7e2fd349..a80c886c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [1.3.0-dev.5](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0-dev.4...v1.3.0-dev.5) (2022-04-26) + + +### 🔧 Fixes + +* isInstalled() check for gsw ([#165](https://github.com/starkware-libs/starkgate-frontend/issues/165)) ([1881192](https://github.com/starkware-libs/starkgate-frontend/commit/18811924e99f63477e0edd4dcdbf9d35fd32cc43)) + ## [1.3.0-dev.4](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0-dev.3...v1.3.0-dev.4) (2022-04-26) diff --git a/package.json b/package.json index d0468d9d..716cd66e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.3.0-dev.4", + "version": "1.3.0-dev.5", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 80d23d22e9a806e5f19acc47e1dc2ccfb44fffca Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Wed, 27 Apr 2022 12:45:04 +0300 Subject: [PATCH 166/211] fix: calc L2 tx hash in the background (#169) --- .../TransactionSubmittedModal.js | 5 +- src/hooks/useTransferToL1.js | 22 ++--- src/hooks/useTransferToL2.js | 78 +++++------------ src/index.js | 6 +- .../event-manager-hooks.js | 18 ++-- .../TransfersLogProvider.js | 85 ++++++++++++------- .../WalletsProvider/WalletsProvider.js | 2 +- src/providers/index.js | 11 ++- src/routes/Bridge/Bridge.js | 17 ++-- 9 files changed, 116 insertions(+), 128 deletions(-) diff --git a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js index 0db227e0..0161f192 100644 --- a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js +++ b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js @@ -48,10 +48,7 @@ const TransactionSubmittedModal = ({transfer}) => { }); } - if ( - (type === ActionType.TRANSFER_TO_L1 && !isTransferCompleted) || - type === ActionType.TRANSFER_TO_L2 - ) { + if (type === ActionType.TRANSFER_TO_L1 && !isTransferCompleted) { explorerButtons.push({ explorerName: VOYAGER, explorerUrl: voyagerTxUrl(l2hash), diff --git a/src/hooks/useTransferToL1.js b/src/hooks/useTransferToL1.js index 4885bd20..343960ce 100644 --- a/src/hooks/useTransferToL1.js +++ b/src/hooks/useTransferToL1.js @@ -136,9 +136,7 @@ export const useCompleteTransferToL1 = () => { }; const onTransactionHash = (error, transactionHash) => { - if (error) { - onError(error); - } else { + if (!error) { logger.log('Tx signed', {transactionHash}); handleProgress( progressOptions.withdraw( @@ -151,23 +149,14 @@ export const useCompleteTransferToL1 = () => { }; const onWithdrawal = (error, event) => { - if (error) { - onError(error); - } else { + if (!error) { + logger.log('Withdrawal event dispatched', event); const {transactionHash: l1hash} = event; - logger.log('Done', l1hash); trackSuccess(l1hash); handleData({...transfer, l1hash}); } }; - const onError = error => { - removeListener(); - trackError(error); - logger.error(error?.message, error); - handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, error)); - }; - try { logger.log('CompleteTransferToL1 called'); handleProgress( @@ -180,7 +169,10 @@ export const useCompleteTransferToL1 = () => { logger.log('Calling withdraw'); await sendWithdrawal(); } catch (ex) { - onError(ex); + removeListener(); + trackError(ex); + logger.error(ex?.message, ex); + handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, ex)); } }, [ diff --git a/src/hooks/useTransferToL2.js b/src/hooks/useTransferToL2.js index 41953bb6..2e8d8e5c 100644 --- a/src/hooks/useTransferToL2.js +++ b/src/hooks/useTransferToL2.js @@ -2,16 +2,9 @@ import {useCallback} from 'react'; import {deposit, depositEth} from '../api/bridge'; import {allowance, approve, balanceOf, ethBalanceOf} from '../api/erc20'; -import { - ActionType, - stepOf, - TransactionHashPrefix, - TransferError, - TransferStep, - TransferToL2Steps -} from '../enums'; +import {ActionType, stepOf, TransferError, TransferStep, TransferToL2Steps} from '../enums'; import {starknet} from '../libs'; -import {useDepositListener, useDepositMessageToL2Event} from '../providers/EventManagerProvider'; +import {useDepositListener} from '../providers/EventManagerProvider'; import {useSelectedToken} from '../providers/TransferProvider'; import {useL1Wallet, useL2Wallet} from '../providers/WalletsProvider'; import utils from '../utils'; @@ -26,14 +19,13 @@ export const useTransferToL2 = () => { const logger = useLogger('useTransferToL2'); const [trackInitiated, trackSuccess, trackError, trackReject] = useTransferToL2Tracking(); const {account: l1Account, chainId: l1ChainId, config: l1Config} = useL1Wallet(); - const {account: l2Account, chainId: l2ChainId} = useL2Wallet(); + const {account: l2Account} = useL2Wallet(); const {handleProgress, handleData, handleError} = useTransfer(TransferToL2Steps); const selectedToken = useSelectedToken(); const getTokenContract = useTokenContract(); const getTokenBridgeContract = useTokenBridgeContract(); const progressOptions = useTransferProgress(); const {addListener, removeListener} = useDepositListener(); - const getDepositMessageToL2Event = useDepositMessageToL2Event(); const maxTotalBalance = useMaxTotalBalance(); return useCallback( @@ -81,9 +73,7 @@ export const useTransferToL2 = () => { }; const onTransactionHash = (error, transactionHash) => { - if (error) { - onError(error); - } else { + if (!error) { logger.log('Tx signed', {transactionHash}); handleProgress( progressOptions.deposit(amount, symbol, stepOf(TransferStep.DEPOSIT, TransferToL2Steps)) @@ -92,43 +82,22 @@ export const useTransferToL2 = () => { }; const onDeposit = async (error, event) => { - if (error) { - onError(error); - } else { - const l2MessageEvent = await getDepositMessageToL2Event(event); - if (l2MessageEvent) { - handleData({ - type: ActionType.TRANSFER_TO_L2, - sender: l1Account, - recipient: l2Account, - name, - symbol, - amount, - ...extractTransactionsHashFromEvent(l2MessageEvent) - }); - } + if (!error) { + logger.log('Deposit event dispatched', event); + trackSuccess(event.transactionHash); + handleData({ + type: ActionType.TRANSFER_TO_L2, + sender: l1Account, + recipient: l2Account, + l1hash: event.transactionHash, + name, + symbol, + amount, + event + }); } }; - const extractTransactionsHashFromEvent = event => { - const {to_address, from_address, selector, payload, nonce} = event.returnValues; - const l1hash = event.transactionHash; - const l2hash = utils.blockchain.starknet.getTransactionHash( - TransactionHashPrefix.L1_HANDLER, - from_address, - to_address, - selector, - payload, - l2ChainId, - nonce - ); - trackSuccess({l1hash, l2hash}); - return { - l1hash, - l2hash - }; - }; - const isMaxBalanceExceeded = async () => { const tokenBridgeBalance = await (isEthToken ? ethBalanceOf(tokenBridgeAddress) @@ -140,13 +109,6 @@ export const useTransferToL2 = () => { return maxTotalBalance < tokenBridgeBalance + Number(amount); }; - const onError = error => { - removeListener(); - trackError(error); - logger.error(error?.message, error); - handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, error)); - }; - try { logger.log('TransferToL2 called'); if (await isMaxBalanceExceeded()) { @@ -177,7 +139,10 @@ export const useTransferToL2 = () => { logger.log('Calling deposit'); await sendDeposit(); } catch (ex) { - onError(ex); + removeListener(); + trackError(ex); + logger.error(ex?.message, ex); + handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, ex)); } }, [ @@ -185,7 +150,6 @@ export const useTransferToL2 = () => { addListener, removeListener, l1ChainId, - l2ChainId, l1Account, l2Account, l1Config, diff --git a/src/index.js b/src/index.js index 50233202..a2205387 100644 --- a/src/index.js +++ b/src/index.js @@ -7,7 +7,7 @@ import {App} from './App'; import {ModalWrapper} from './components/UI'; import envs from './config/envs'; import './index.scss'; -import {Providers} from './providers'; +import {AppProviders} from './providers'; import utils from './utils'; const {env} = envs; @@ -24,10 +24,10 @@ if (env === 'development' || utils.browser.getUrlParameter('debugApp')) { ReactDOM.render( <BrowserRouter> - <Providers> + <AppProviders> <App /> <ModalWrapper /> - </Providers> + </AppProviders> </BrowserRouter>, document.getElementById('root') ); diff --git a/src/providers/EventManagerProvider/event-manager-hooks.js b/src/providers/EventManagerProvider/event-manager-hooks.js index a18d1291..5ee51473 100644 --- a/src/providers/EventManagerProvider/event-manager-hooks.js +++ b/src/providers/EventManagerProvider/event-manager-hooks.js @@ -29,11 +29,15 @@ export const useDepositMessageToL2Event = () => { const {getPastEvents} = useContext(EventManagerContext); const starknetContract = useStarknetContract(); - return useCallback(async depositEvent => { - const {blockNumber, transactionHash} = depositEvent; - const pastEvents = await getPastEvents(starknetContract, EventName.L1.LOG_MESSAGE_TO_L2, { - fromBlock: blockNumber - }); - return pastEvents.find(e => e.transactionHash === transactionHash); - }, []); + return useCallback( + async depositEvent => { + const {blockNumber, transactionHash} = depositEvent; + const pastEvents = await getPastEvents(starknetContract, EventName.L1.LOG_MESSAGE_TO_L2, { + fromBlock: blockNumber - 1, + toBlock: 'latest' + }); + return pastEvents.find(e => e.transactionHash === transactionHash); + }, + [starknetContract] + ); }; diff --git a/src/providers/TransfersLogProvider/TransfersLogProvider.js b/src/providers/TransfersLogProvider/TransfersLogProvider.js index 70b6b584..52a778bb 100644 --- a/src/providers/TransfersLogProvider/TransfersLogProvider.js +++ b/src/providers/TransfersLogProvider/TransfersLogProvider.js @@ -2,21 +2,25 @@ import PropTypes from 'prop-types'; import React, {useEffect, useReducer} from 'react'; import useDeepCompareEffect from 'use-deep-compare-effect'; -import {isCompleted, isConsumed} from '../../enums'; +import {isCompleted, isConsumed, TransactionHashPrefix} from '../../enums'; import {useEnvs, useLogger} from '../../hooks'; import {starknet} from '../../libs'; import utils from '../../utils'; import {useBlockHash} from '../BlockHashProvider'; +import {useDepositMessageToL2Event} from '../EventManagerProvider'; import {useTokens} from '../TokensProvider'; +import {useL2Wallet} from '../WalletsProvider'; import {TransfersLogContext} from './transfers-log-context'; import {actions, initialState, reducer} from './transfers-log-reducer'; export const TransfersLogProvider = ({children}) => { + const [transfers, dispatch] = useReducer(reducer, initialState); const {localStorageTransfersLogKey} = useEnvs(); const logger = useLogger(TransfersLogProvider.displayName); - const [transfers, dispatch] = useReducer(reducer, initialState); const blockHash = useBlockHash(); const {updateTokenBalance} = useTokens(); + const {chainId: l2ChainId} = useL2Wallet(); + const getDepositMessageToL2Event = useDepositMessageToL2Event(); useEffect(() => { const storedTransfers = getTransfersFromStorage(); @@ -30,35 +34,11 @@ export const TransfersLogProvider = ({children}) => { if (!blockHash) { return; } - const checkTransaction = async transfer => { - if (isCompleted(transfer.status) || transfer.lastChecked === blockHash) { - return transfer; - } - try { - logger.log(`Checking tx status ${transfer.l2hash}`); - const {tx_status} = await starknet.defaultProvider.getTransactionStatus(transfer.l2hash); - if (transfer.status !== tx_status) { - logger.log(`Status changed from ${transfer.status}->${tx_status}`); - } else { - logger.log(`Status is still ${tx_status}`); - } - if (isConsumed(tx_status)) { - updateTokenBalance(transfer.symbol); - } - return { - ...transfer, - status: tx_status, - lastChecked: blockHash - }; - } catch (error) { - logger.error(`Failed to check transaction status: ${transfer.l2hash}`); - } - return transfer; - }; - const newTransfers = []; for (const transfer of transfers) { - const newTransfer = await checkTransaction(transfer); + const newTransfer = await (transfer.l2hash + ? checkTransaction(transfer) + : calcL2TransactionHash(transfer)); newTransfers.push(newTransfer); } if (newTransfers.length) { @@ -70,6 +50,53 @@ export const TransfersLogProvider = ({children}) => { updateTransfers(); }, [blockHash, transfers]); + const checkTransaction = async transfer => { + if (isCompleted(transfer.status) || transfer.lastChecked === blockHash) { + return transfer; + } + try { + logger.log(`Checking tx status ${transfer.l2hash}`); + const {tx_status} = await starknet.defaultProvider.getTransactionStatus(transfer.l2hash); + if (transfer.status !== tx_status) { + logger.log(`Status changed from ${transfer.status}->${tx_status}`); + if (isConsumed(tx_status)) { + updateTokenBalance(transfer.symbol); + } + } else { + logger.log(`Status is still ${tx_status}`); + } + return { + ...transfer, + status: tx_status, + lastChecked: blockHash + }; + } catch (error) { + logger.error(`Failed to check transaction status: ${transfer.l2hash}`); + } + return transfer; + }; + + const calcL2TransactionHash = async transfer => { + const l2MessageEvent = await getDepositMessageToL2Event(transfer.event); + if (l2MessageEvent) { + const {to_address, from_address, selector, payload, nonce} = l2MessageEvent.returnValues; + delete transfer.event; + return { + ...transfer, + l2hash: utils.blockchain.starknet.getTransactionHash( + TransactionHashPrefix.L1_HANDLER, + from_address, + to_address, + selector, + payload, + l2ChainId, + nonce + ) + }; + } + return transfer; + }; + const updateTransfer = transfer => { dispatch({ type: actions.UPDATE_TRANSFER, diff --git a/src/providers/WalletsProvider/WalletsProvider.js b/src/providers/WalletsProvider/WalletsProvider.js index da29fd8e..6b3532a9 100644 --- a/src/providers/WalletsProvider/WalletsProvider.js +++ b/src/providers/WalletsProvider/WalletsProvider.js @@ -2,11 +2,11 @@ import PropTypes from 'prop-types'; import React, {useEffect, useReducer} from 'react'; import {useWallet} from 'use-wallet'; +import {WalletStatus} from '../../enums'; import {useIsL1, useIsL2} from '../TransferProvider'; import {WalletsContext} from './wallets-context'; import {useStarknetWallet} from './wallets-hooks'; import {actions, initialState, reducer} from './wallets-reducer'; -import {WalletStatus} from '../../enums'; export const WalletsProvider = ({children}) => { const [state, dispatch] = useReducer(reducer, initialState); diff --git a/src/providers/index.js b/src/providers/index.js index 27cbc64e..18341ee2 100644 --- a/src/providers/index.js +++ b/src/providers/index.js @@ -1,20 +1,27 @@ import {AppProvider} from './AppProvider'; import {BlockHashProvider} from './BlockHashProvider'; +import {EventManagerProvider} from './EventManagerProvider'; import {MenuProvider} from './MenuProvider'; import {ModalProvider} from './ModalProvider'; +import {TokensProvider} from './TokensProvider'; import {TransferProvider} from './TransferProvider'; import {TransfersLogProvider} from './TransfersLogProvider'; import {WalletProvider} from './WalletProvider/WalletProvider'; import {WalletsProvider} from './WalletsProvider'; import {combineProviders} from './combine-providers'; -export const Providers = combineProviders([ +export const AppProviders = combineProviders([ AppProvider, MenuProvider, TransferProvider, ModalProvider, WalletProvider, WalletsProvider, - BlockHashProvider, + BlockHashProvider +]); + +export const BridgeProviders = combineProviders([ + TokensProvider, + EventManagerProvider, TransfersLogProvider ]); diff --git a/src/routes/Bridge/Bridge.js b/src/routes/Bridge/Bridge.js index cd3ad2aa..5ea59e36 100644 --- a/src/routes/Bridge/Bridge.js +++ b/src/routes/Bridge/Bridge.js @@ -4,10 +4,9 @@ import {setUser} from '../../analytics'; import {Account, SelectToken, ToastProvider, Transfer} from '../../components/Features'; import {MenuType} from '../../enums'; import {useEnvs, useMenuTracking} from '../../hooks'; -import {EventManagerProvider} from '../../providers/EventManagerProvider'; +import {BridgeProviders} from '../../providers'; import {useMenu} from '../../providers/MenuProvider'; import {useOnboardingModal} from '../../providers/ModalProvider'; -import {TokensProvider} from '../../providers/TokensProvider'; import {useL1Wallet, useL2Wallet} from '../../providers/WalletsProvider'; import utils from '../../utils'; import styles from './Bridge.module.scss'; @@ -56,14 +55,12 @@ export const Bridge = () => { return ( <div className={styles.bridge}> - <TokensProvider> - <EventManagerProvider> - <div className={styles.bridgeMenu}> - <ToastProvider /> - {renderMenu()} - </div> - </EventManagerProvider> - </TokensProvider> + <BridgeProviders> + <div className={styles.bridgeMenu}> + <ToastProvider /> + {renderMenu()} + </div> + </BridgeProviders> </div> ); }; From 9b7066fde770fc0d6da54d6c2ab8a18e21ae2c26 Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Wed, 27 Apr 2022 09:46:41 +0000 Subject: [PATCH 167/211] prerelease: v1.3.0-dev.6 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [1.3.0-dev.6](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0-dev.5...v1.3.0-dev.6) (2022-04-27) ### 🔧 Fixes * calc L2 tx hash in the background ([#169](https://github.com/starkware-libs/starkgate-frontend/issues/169)) ([80d23d2](https://github.com/starkware-libs/starkgate-frontend/commit/80d23d22e9a806e5f19acc47e1dc2ccfb44fffca)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a80c886c..0edad3b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [1.3.0-dev.6](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0-dev.5...v1.3.0-dev.6) (2022-04-27) + + +### 🔧 Fixes + +* calc L2 tx hash in the background ([#169](https://github.com/starkware-libs/starkgate-frontend/issues/169)) ([80d23d2](https://github.com/starkware-libs/starkgate-frontend/commit/80d23d22e9a806e5f19acc47e1dc2ccfb44fffca)) + ## [1.3.0-dev.5](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0-dev.4...v1.3.0-dev.5) (2022-04-26) diff --git a/package.json b/package.json index 716cd66e..d145be45 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.3.0-dev.5", + "version": "1.3.0-dev.6", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From bb0c9eef3d2c02804ba52542b4748c5e8c640c25 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Thu, 28 Apr 2022 13:33:24 +0300 Subject: [PATCH 168/211] chore: update starknet contract address on mainnet --- .env.production | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env.production b/.env.production index f128ade0..795b8c56 100644 --- a/.env.production +++ b/.env.production @@ -4,7 +4,7 @@ REACT_APP_AUTO_CONNECT=false REACT_APP_POLL_BLOCK_NUMBER_INTERVAL=30000 # mainnet REACT_APP_SUPPORTED_CHAIN_ID=1 -REACT_APP_STARKNET_CONTRACT_ADDRESS= +REACT_APP_STARKNET_CONTRACT_ADDRESS=0xc662c410C0ECf747543f5bA90660f6ABeBD9C8c4 REACT_APP_ETHERSCAN_URL=https://etherscan.io REACT_APP_VOYAGER_URL=https://voyager.online REACT_APP_LOCAL_STORAGE_TRANSFERS_LOG_KEY=STARKGATE_TRANSFERS From cde64015af4393d9d4586c33722feeb1eb8dfccb Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Thu, 28 Apr 2022 21:55:32 +0300 Subject: [PATCH 169/211] fix(utils): get url params returns undefined --- src/utils/browser.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/utils/browser.js b/src/utils/browser.js index 9b7956f0..ad867003 100644 --- a/src/utils/browser.js +++ b/src/utils/browser.js @@ -3,10 +3,11 @@ export const openInNewTab = url => { }; export const getUrlParameter = name => { - name = name.replace(/[[]/, '[').replace(/[\]]/, '\\]'); - const regex = new RegExp(`[&]${name}=([^&#]*)`); - const results = regex.exec(window.location.search); - return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' ')); + const results = new RegExp(`[?&]${name}=([^&#]*)`).exec(window.location.href); + if (results === null) { + return null; + } + return decodeURI(results[1]) || 0; }; export const isChrome = () => { From 44c675b7c4bfadee6cdbce9f25daf4e93442aa58 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Thu, 28 Apr 2022 21:57:44 +0300 Subject: [PATCH 170/211] fix: handle display of exponential balances --- src/__tests__/utils/number.spec.js | 2 +- src/__tests__/utils/wallet.spec.js | 18 ++++++++- .../UI/TokenBalance/TokenBalance.js | 6 ++- src/utils/wallet.js | 37 ++++++++++++++++--- 4 files changed, 54 insertions(+), 9 deletions(-) diff --git a/src/__tests__/utils/number.spec.js b/src/__tests__/utils/number.spec.js index 821ebc23..bdbeab34 100644 --- a/src/__tests__/utils/number.spec.js +++ b/src/__tests__/utils/number.spec.js @@ -3,7 +3,7 @@ import utils from '../../utils'; const {afterDecimal, isNegative, isZero} = utils.number; describe('afterDecimal', () => { - it.only('should return number of decimals places', () => { + it('should return number of decimals places', () => { expect(afterDecimal('')).toEqual(0); expect(afterDecimal(0)).toEqual(0); expect(afterDecimal('0')).toEqual(0); diff --git a/src/__tests__/utils/wallet.spec.js b/src/__tests__/utils/wallet.spec.js index 2011a6e0..ca3b601f 100644 --- a/src/__tests__/utils/wallet.spec.js +++ b/src/__tests__/utils/wallet.spec.js @@ -1,6 +1,6 @@ import utils from '../../utils'; -const {formatBalance, shortenAddress} = utils.wallet; +const {formatBalance, shortenAddress, shortenBalance} = utils.wallet; describe('formatBalance', () => { it('should format balance to 5 digits precision', () => { @@ -9,6 +9,10 @@ describe('formatBalance', () => { expect(formatBalance(10.000000001)).toEqual(10); }); + it('should handle exponential balances', () => { + expect(formatBalance(1.02e-9)).toEqual('0.00000000102'); + }); + it('should return N/A for non-numbers', () => { expect(formatBalance('')).toBe('N/A'); expect(formatBalance(null)).toBe('N/A'); @@ -31,3 +35,15 @@ describe('shortenAddress', () => { expect(shortenAddress(null)).toBe(''); }); }); + +describe('shortenBalance', () => { + it('should shorten long balance', () => { + expect(shortenBalance('0.00000001')).toEqual('0.00000...'); + expect(shortenBalance('0.1234567')).toEqual('0.12345...'); + }); + + it('should return the same balance for short balance', () => { + expect(shortenBalance('0.00001')).toEqual('0.00001'); + expect(shortenBalance(0.123)).toEqual(0.123); + }); +}); diff --git a/src/components/UI/TokenBalance/TokenBalance.js b/src/components/UI/TokenBalance/TokenBalance.js index e45c14b9..549a03bb 100644 --- a/src/components/UI/TokenBalance/TokenBalance.js +++ b/src/components/UI/TokenBalance/TokenBalance.js @@ -16,7 +16,11 @@ export const TokenBalance = ({tokenData, onRefreshClick}) => { <span>{balanceTitleTxt}</span> <div className={styles.balanceRow}> <div className={styles.balance}> - {isLoading ? <Loading size={LoadingSize.SMALL} /> : utils.wallet.formatBalance(balance)} + {isLoading ? ( + <Loading size={LoadingSize.SMALL} /> + ) : ( + utils.wallet.shortenBalance(utils.wallet.formatBalance(balance)) + )} <div className={styles.symbol}>{symbol}</div> </div> <RefreshIcon size={18} onClick={onRefreshClick} /> diff --git a/src/utils/wallet.js b/src/utils/wallet.js index ed33f812..97ce8fc3 100644 --- a/src/utils/wallet.js +++ b/src/utils/wallet.js @@ -1,12 +1,37 @@ export const formatBalance = balance => { - return typeof balance === 'number' ? parseFloat(balance.toFixed(5)) : 'N/A'; + if (typeof balance === 'number') { + balance = fromExponential(balance); + return typeof balance === 'string' ? balance : parseFloat(balance.toFixed(5)); + } + return 'N/A'; +}; + +export const shortenBalance = balance => { + return balance.length > 7 ? `${balance.substring(0, 7)}...` : balance; }; export const shortenAddress = account => { - if (!account) { - return ''; + return account + ? account.length <= 8 + ? account + : `${account.substring(0, 5)}...${account.substring(account.length - 3)}` + : ''; +}; + +const fromExponential = x => { + if (Math.abs(x) < 1.0) { + const e = parseInt(x.toString().split('e-')[1]); + if (e) { + x *= Math.pow(10, e - 1); + x = `0.${new Array(e).join('0')}${x.toString().substring(2)}`; + } + } else { + let e = parseInt(x.toString().split('+')[1]); + if (e > 20) { + e -= 20; + x /= Math.pow(10, e); + x += new Array(e + 1).join('0'); + } } - return account.length <= 8 - ? account - : `${account.substring(0, 5)}...${account.substring(account.length - 3)}`; + return x; }; From 7bdf85d27af55fb898ed5a97e47adc66db127530 Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Thu, 28 Apr 2022 19:14:09 +0000 Subject: [PATCH 171/211] prerelease: v1.3.0-dev.7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [1.3.0-dev.7](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0-dev.6...v1.3.0-dev.7) (2022-04-28) ### 🔧 Fixes * handle display of exponential balances ([44c675b](https://github.com/starkware-libs/starkgate-frontend/commit/44c675b7c4bfadee6cdbce9f25daf4e93442aa58)) * **utils:** get url params returns undefined ([cde6401](https://github.com/starkware-libs/starkgate-frontend/commit/cde64015af4393d9d4586c33722feeb1eb8dfccb)) --- CHANGELOG.md | 8 ++++++++ package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0edad3b8..e1538909 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +## [1.3.0-dev.7](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0-dev.6...v1.3.0-dev.7) (2022-04-28) + + +### 🔧 Fixes + +* handle display of exponential balances ([44c675b](https://github.com/starkware-libs/starkgate-frontend/commit/44c675b7c4bfadee6cdbce9f25daf4e93442aa58)) +* **utils:** get url params returns undefined ([cde6401](https://github.com/starkware-libs/starkgate-frontend/commit/cde64015af4393d9d4586c33722feeb1eb8dfccb)) + ## [1.3.0-dev.6](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0-dev.5...v1.3.0-dev.6) (2022-04-27) diff --git a/package.json b/package.json index d145be45..3fe2fce1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.3.0-dev.6", + "version": "1.3.0-dev.7", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 1d6b0230555f102473ae674467b76e2c2343d729 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Thu, 28 Apr 2022 22:19:18 +0300 Subject: [PATCH 172/211] fix: use getStarknet() provider on starknet contracts --- src/utils/blockchain/starknet.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/blockchain/starknet.js b/src/utils/blockchain/starknet.js index 1c198c41..628389a8 100644 --- a/src/utils/blockchain/starknet.js +++ b/src/utils/blockchain/starknet.js @@ -4,7 +4,7 @@ import {getStarknet, starknet} from '../../libs'; const {Contract, defaultProvider, stark, hash, number} = starknet; export const createContract = (address, ABI) => { - return new Contract(ABI, address); + return new Contract(ABI, address, getStarknet().provider); }; export const callContract = async (contract, method, ...args) => { From 44fc41e559c88b78a16f66b09cf6aa4e0ab1ac87 Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Thu, 28 Apr 2022 19:23:09 +0000 Subject: [PATCH 173/211] prerelease: v1.3.0-dev.8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [1.3.0-dev.8](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0-dev.7...v1.3.0-dev.8) (2022-04-28) ### 🔧 Fixes * use getStarknet() provider on starknet contracts ([1d6b023](https://github.com/starkware-libs/starkgate-frontend/commit/1d6b0230555f102473ae674467b76e2c2343d729)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e1538909..0032111b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [1.3.0-dev.8](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0-dev.7...v1.3.0-dev.8) (2022-04-28) + + +### 🔧 Fixes + +* use getStarknet() provider on starknet contracts ([1d6b023](https://github.com/starkware-libs/starkgate-frontend/commit/1d6b0230555f102473ae674467b76e2c2343d729)) + ## [1.3.0-dev.7](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0-dev.6...v1.3.0-dev.7) (2022-04-28) diff --git a/package.json b/package.json index 3fe2fce1..22748779 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.3.0-dev.7", + "version": "1.3.0-dev.8", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 646feeee58e1720833b0252983b2091815fba10a Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Sun, 1 May 2022 11:26:26 +0300 Subject: [PATCH 174/211] fix: use wallet provider for all provider calls (#170) --- src/providers/BlockHashProvider/BlockHashProvider.js | 4 ++-- src/providers/TransfersLogProvider/TransfersLogProvider.js | 4 ++-- src/utils/blockchain/starknet.js | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/providers/BlockHashProvider/BlockHashProvider.js b/src/providers/BlockHashProvider/BlockHashProvider.js index eae9b31a..4843e178 100644 --- a/src/providers/BlockHashProvider/BlockHashProvider.js +++ b/src/providers/BlockHashProvider/BlockHashProvider.js @@ -2,7 +2,7 @@ import PropTypes from 'prop-types'; import React, {useCallback, useEffect, useState} from 'react'; import {useEnvs} from '../../hooks'; -import {starknet} from '../../libs'; +import {getStarknet} from '../../libs'; import {BlockHashContext} from './block-hash-context'; export const BlockHashProvider = ({children}) => { @@ -10,7 +10,7 @@ export const BlockHashProvider = ({children}) => { const [blockHash, setBlockHash] = useState(); const fetchBlockHash = useCallback(async () => { - const {block_hash} = await starknet.defaultProvider.getBlock(); + const {block_hash} = await getStarknet().provider.getBlock(); setBlockHash(block_hash); }, []); diff --git a/src/providers/TransfersLogProvider/TransfersLogProvider.js b/src/providers/TransfersLogProvider/TransfersLogProvider.js index 52a778bb..b41adbb2 100644 --- a/src/providers/TransfersLogProvider/TransfersLogProvider.js +++ b/src/providers/TransfersLogProvider/TransfersLogProvider.js @@ -4,7 +4,7 @@ import useDeepCompareEffect from 'use-deep-compare-effect'; import {isCompleted, isConsumed, TransactionHashPrefix} from '../../enums'; import {useEnvs, useLogger} from '../../hooks'; -import {starknet} from '../../libs'; +import {getStarknet} from '../../libs'; import utils from '../../utils'; import {useBlockHash} from '../BlockHashProvider'; import {useDepositMessageToL2Event} from '../EventManagerProvider'; @@ -56,7 +56,7 @@ export const TransfersLogProvider = ({children}) => { } try { logger.log(`Checking tx status ${transfer.l2hash}`); - const {tx_status} = await starknet.defaultProvider.getTransactionStatus(transfer.l2hash); + const {tx_status} = await getStarknet().provider.getTransactionStatus(transfer.l2hash); if (transfer.status !== tx_status) { logger.log(`Status changed from ${transfer.status}->${tx_status}`); if (isConsumed(tx_status)) { diff --git a/src/utils/blockchain/starknet.js b/src/utils/blockchain/starknet.js index 628389a8..789bf8e3 100644 --- a/src/utils/blockchain/starknet.js +++ b/src/utils/blockchain/starknet.js @@ -1,7 +1,7 @@ import {ChainInfo, isRejected, TransactionStatusStep} from '../../enums'; import {getStarknet, starknet} from '../../libs'; -const {Contract, defaultProvider, stark, hash, number} = starknet; +const {Contract, stark, hash, number} = starknet; export const createContract = (address, ABI) => { return new Contract(ABI, address, getStarknet().provider); @@ -34,7 +34,7 @@ export const waitForTransaction = async (transactionHash, requiredStatus, retryI let processing = false; const intervalId = setInterval(async () => { if (processing) return; - const statusPromise = defaultProvider.getTransactionStatus(transactionHash); + const statusPromise = getStarknet().provider.getTransactionStatus(transactionHash); processing = true; try { const {tx_status} = await statusPromise; From cf489c8a070b0b0e7fd1b769b7876c04c9b45a87 Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Sun, 1 May 2022 08:30:45 +0000 Subject: [PATCH 175/211] prerelease: v1.3.0-dev.9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [1.3.0-dev.9](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0-dev.8...v1.3.0-dev.9) (2022-05-01) ### 🔧 Fixes * use wallet provider for all provider calls ([#170](https://github.com/starkware-libs/starkgate-frontend/issues/170)) ([646feee](https://github.com/starkware-libs/starkgate-frontend/commit/646feeee58e1720833b0252983b2091815fba10a)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0032111b..88607031 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [1.3.0-dev.9](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0-dev.8...v1.3.0-dev.9) (2022-05-01) + + +### 🔧 Fixes + +* use wallet provider for all provider calls ([#170](https://github.com/starkware-libs/starkgate-frontend/issues/170)) ([646feee](https://github.com/starkware-libs/starkgate-frontend/commit/646feeee58e1720833b0252983b2091815fba10a)) + ## [1.3.0-dev.8](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0-dev.7...v1.3.0-dev.8) (2022-04-28) diff --git a/package.json b/package.json index 22748779..3d8e756b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.3.0-dev.8", + "version": "1.3.0-dev.9", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 10b8f5708d7c9cb063469be8e3b5cfde0d42f0fa Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Mon, 2 May 2022 16:02:28 +0000 Subject: [PATCH 176/211] release: v1.3.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [1.3.0](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.0...v1.3.0) (2022-05-02) ### 💉 Improvements * move to hooks useConstants, useEnvs, useTranslation ([#159](https://github.com/starkware-libs/starkgate-frontend/issues/159)) ([b77ba11](https://github.com/starkware-libs/starkgate-frontend/commit/b77ba118934e95859cb4409ba22be3c8ac25fd79)) * useTracking ([#160](https://github.com/starkware-libs/starkgate-frontend/issues/160)) ([a8cad80](https://github.com/starkware-libs/starkgate-frontend/commit/a8cad802e13fcd7b940eed5d60a8f943d82662a9)) * useTranslation hooks ([#162](https://github.com/starkware-libs/starkgate-frontend/issues/162)) ([92e0927](https://github.com/starkware-libs/starkgate-frontend/commit/92e092764ec53d622eacc8d8a27038869131cde5)) ### 🧩 Features * integrated with get-starknet-wallet ([#163](https://github.com/starkware-libs/starkgate-frontend/issues/163)) ([e0f996a](https://github.com/starkware-libs/starkgate-frontend/commit/e0f996a7c5a7b7fa4a395695048275a8c234dd76)) * validate starknet wallet chain ID ([#168](https://github.com/starkware-libs/starkgate-frontend/issues/168)) ([2551a7f](https://github.com/starkware-libs/starkgate-frontend/commit/2551a7f296de1fcdfc5dd4a819982850e6294306)) ### 🔧 Fixes * add ETH mainnet addresses ([#167](https://github.com/starkware-libs/starkgate-frontend/issues/167)) ([56fa74b](https://github.com/starkware-libs/starkgate-frontend/commit/56fa74b4510971d516824d5c0faae611da20d63b)) * bad overflow in modal for content with very long strings ([#161](https://github.com/starkware-libs/starkgate-frontend/issues/161)) ([36a1c6f](https://github.com/starkware-libs/starkgate-frontend/commit/36a1c6ffd1d367db917a0bffc6f3a33ba37be6a9)) * calc L2 tx hash in the background ([#169](https://github.com/starkware-libs/starkgate-frontend/issues/169)) ([80d23d2](https://github.com/starkware-libs/starkgate-frontend/commit/80d23d22e9a806e5f19acc47e1dc2ccfb44fffca)) * canceled transfers shown in transfer log ([#166](https://github.com/starkware-libs/starkgate-frontend/issues/166)) ([69324e8](https://github.com/starkware-libs/starkgate-frontend/commit/69324e8c838674eddc9759a282c1e4d4040c0553)) * **deps:** bump gsw version ([6c01ae5](https://github.com/starkware-libs/starkgate-frontend/commit/6c01ae5e518947294a0abd7c6e489ac0074edf38)) * handle display of exponential balances ([44c675b](https://github.com/starkware-libs/starkgate-frontend/commit/44c675b7c4bfadee6cdbce9f25daf4e93442aa58)) * isInstalled() check for gsw ([#165](https://github.com/starkware-libs/starkgate-frontend/issues/165)) ([1881192](https://github.com/starkware-libs/starkgate-frontend/commit/18811924e99f63477e0edd4dcdbf9d35fd32cc43)) * use getStarknet() provider on starknet contracts ([1d6b023](https://github.com/starkware-libs/starkgate-frontend/commit/1d6b0230555f102473ae674467b76e2c2343d729)) * use wallet provider for all provider calls ([#170](https://github.com/starkware-libs/starkgate-frontend/issues/170)) ([646feee](https://github.com/starkware-libs/starkgate-frontend/commit/646feeee58e1720833b0252983b2091815fba10a)) * **utils:** get url params returns undefined ([cde6401](https://github.com/starkware-libs/starkgate-frontend/commit/cde64015af4393d9d4586c33722feeb1eb8dfccb)) --- CHANGELOG.md | 29 +++++++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 88607031..5cb0177d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,32 @@ +## [1.3.0](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.0...v1.3.0) (2022-05-02) + + +### 💉 Improvements + +* move to hooks useConstants, useEnvs, useTranslation ([#159](https://github.com/starkware-libs/starkgate-frontend/issues/159)) ([b77ba11](https://github.com/starkware-libs/starkgate-frontend/commit/b77ba118934e95859cb4409ba22be3c8ac25fd79)) +* useTracking ([#160](https://github.com/starkware-libs/starkgate-frontend/issues/160)) ([a8cad80](https://github.com/starkware-libs/starkgate-frontend/commit/a8cad802e13fcd7b940eed5d60a8f943d82662a9)) +* useTranslation hooks ([#162](https://github.com/starkware-libs/starkgate-frontend/issues/162)) ([92e0927](https://github.com/starkware-libs/starkgate-frontend/commit/92e092764ec53d622eacc8d8a27038869131cde5)) + + +### 🧩 Features + +* integrated with get-starknet-wallet ([#163](https://github.com/starkware-libs/starkgate-frontend/issues/163)) ([e0f996a](https://github.com/starkware-libs/starkgate-frontend/commit/e0f996a7c5a7b7fa4a395695048275a8c234dd76)) +* validate starknet wallet chain ID ([#168](https://github.com/starkware-libs/starkgate-frontend/issues/168)) ([2551a7f](https://github.com/starkware-libs/starkgate-frontend/commit/2551a7f296de1fcdfc5dd4a819982850e6294306)) + + +### 🔧 Fixes + +* add ETH mainnet addresses ([#167](https://github.com/starkware-libs/starkgate-frontend/issues/167)) ([56fa74b](https://github.com/starkware-libs/starkgate-frontend/commit/56fa74b4510971d516824d5c0faae611da20d63b)) +* bad overflow in modal for content with very long strings ([#161](https://github.com/starkware-libs/starkgate-frontend/issues/161)) ([36a1c6f](https://github.com/starkware-libs/starkgate-frontend/commit/36a1c6ffd1d367db917a0bffc6f3a33ba37be6a9)) +* calc L2 tx hash in the background ([#169](https://github.com/starkware-libs/starkgate-frontend/issues/169)) ([80d23d2](https://github.com/starkware-libs/starkgate-frontend/commit/80d23d22e9a806e5f19acc47e1dc2ccfb44fffca)) +* canceled transfers shown in transfer log ([#166](https://github.com/starkware-libs/starkgate-frontend/issues/166)) ([69324e8](https://github.com/starkware-libs/starkgate-frontend/commit/69324e8c838674eddc9759a282c1e4d4040c0553)) +* **deps:** bump gsw version ([6c01ae5](https://github.com/starkware-libs/starkgate-frontend/commit/6c01ae5e518947294a0abd7c6e489ac0074edf38)) +* handle display of exponential balances ([44c675b](https://github.com/starkware-libs/starkgate-frontend/commit/44c675b7c4bfadee6cdbce9f25daf4e93442aa58)) +* isInstalled() check for gsw ([#165](https://github.com/starkware-libs/starkgate-frontend/issues/165)) ([1881192](https://github.com/starkware-libs/starkgate-frontend/commit/18811924e99f63477e0edd4dcdbf9d35fd32cc43)) +* use getStarknet() provider on starknet contracts ([1d6b023](https://github.com/starkware-libs/starkgate-frontend/commit/1d6b0230555f102473ae674467b76e2c2343d729)) +* use wallet provider for all provider calls ([#170](https://github.com/starkware-libs/starkgate-frontend/issues/170)) ([646feee](https://github.com/starkware-libs/starkgate-frontend/commit/646feeee58e1720833b0252983b2091815fba10a)) +* **utils:** get url params returns undefined ([cde6401](https://github.com/starkware-libs/starkgate-frontend/commit/cde64015af4393d9d4586c33722feeb1eb8dfccb)) + ## [1.3.0-dev.9](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0-dev.8...v1.3.0-dev.9) (2022-05-01) diff --git a/package.json b/package.json index 3d8e756b..6383a5af 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.3.0-dev.9", + "version": "1.3.0", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 1d3038d1d38d832b67c147fe325fecbe6838a6aa Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 3 May 2022 11:23:34 +0300 Subject: [PATCH 177/211] fix: temporary disable max button (#173) --- src/components/UI/MaxButton/MaxButton.module.scss | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/components/UI/MaxButton/MaxButton.module.scss b/src/components/UI/MaxButton/MaxButton.module.scss index d633d288..3a4c5e70 100644 --- a/src/components/UI/MaxButton/MaxButton.module.scss +++ b/src/components/UI/MaxButton/MaxButton.module.scss @@ -8,4 +8,7 @@ cursor: pointer; z-index: 1; margin: 0 20px; + // TODO: Temporary disable the max button until estimateGas logic will be added + pointer-events: none; + opacity: 0.2; } From 87cc4501253bd19b82d5f0b4044c982e2925eb21 Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Tue, 3 May 2022 08:25:12 +0000 Subject: [PATCH 178/211] prerelease: v1.3.1-dev.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### [1.3.1-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0...v1.3.1-dev.1) (2022-05-03) ### 🔧 Fixes * temporary disable max button ([#173](https://github.com/starkware-libs/starkgate-frontend/issues/173)) ([1d3038d](https://github.com/starkware-libs/starkgate-frontend/commit/1d3038d1d38d832b67c147fe325fecbe6838a6aa)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5cb0177d..cd9231a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +### [1.3.1-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0...v1.3.1-dev.1) (2022-05-03) + + +### 🔧 Fixes + +* temporary disable max button ([#173](https://github.com/starkware-libs/starkgate-frontend/issues/173)) ([1d3038d](https://github.com/starkware-libs/starkgate-frontend/commit/1d3038d1d38d832b67c147fe325fecbe6838a6aa)) + ## [1.3.0](https://github.com/starkware-libs/starkgate-frontend/compare/v1.2.0...v1.3.0) (2022-05-02) diff --git a/package.json b/package.json index 6383a5af..2b437bfc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.3.0", + "version": "1.3.1-dev.1", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 2906e3e46d65023771f06a0c62d9d4ea46d22f53 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 3 May 2022 11:34:35 +0300 Subject: [PATCH 179/211] fix: cancel toFixed when format balances (#172) --- src/__tests__/utils/wallet.spec.js | 8 ++++---- src/utils/wallet.js | 6 +----- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/__tests__/utils/wallet.spec.js b/src/__tests__/utils/wallet.spec.js index ca3b601f..dc6e4212 100644 --- a/src/__tests__/utils/wallet.spec.js +++ b/src/__tests__/utils/wallet.spec.js @@ -3,10 +3,10 @@ import utils from '../../utils'; const {formatBalance, shortenAddress, shortenBalance} = utils.wallet; describe('formatBalance', () => { - it('should format balance to 5 digits precision', () => { - expect(formatBalance(1.222243232)).toEqual(1.22224); - expect(formatBalance(3000.232143123212)).toEqual(3000.23214); - expect(formatBalance(10.000000001)).toEqual(10); + it('should format balance as string', () => { + expect(formatBalance(1.222243232)).toEqual('1.222243232'); + expect(formatBalance(3000.232143123212)).toEqual('3000.232143123212'); + expect(formatBalance(10.000000001)).toEqual('10.000000001'); }); it('should handle exponential balances', () => { diff --git a/src/utils/wallet.js b/src/utils/wallet.js index 97ce8fc3..3b4bed40 100644 --- a/src/utils/wallet.js +++ b/src/utils/wallet.js @@ -1,9 +1,5 @@ export const formatBalance = balance => { - if (typeof balance === 'number') { - balance = fromExponential(balance); - return typeof balance === 'string' ? balance : parseFloat(balance.toFixed(5)); - } - return 'N/A'; + return typeof balance === 'number' ? String(fromExponential(balance)) : 'N/A'; }; export const shortenBalance = balance => { From 47f8867649f89e183ff16de5b4703e8aee543709 Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Tue, 3 May 2022 08:36:06 +0000 Subject: [PATCH 180/211] prerelease: v1.3.1-dev.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### [1.3.1-dev.2](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.1-dev.1...v1.3.1-dev.2) (2022-05-03) ### 🔧 Fixes * cancel toFixed when format balances ([#172](https://github.com/starkware-libs/starkgate-frontend/issues/172)) ([2906e3e](https://github.com/starkware-libs/starkgate-frontend/commit/2906e3e46d65023771f06a0c62d9d4ea46d22f53)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cd9231a5..75dbfa89 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +### [1.3.1-dev.2](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.1-dev.1...v1.3.1-dev.2) (2022-05-03) + + +### 🔧 Fixes + +* cancel toFixed when format balances ([#172](https://github.com/starkware-libs/starkgate-frontend/issues/172)) ([2906e3e](https://github.com/starkware-libs/starkgate-frontend/commit/2906e3e46d65023771f06a0c62d9d4ea46d22f53)) + ### [1.3.1-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0...v1.3.1-dev.1) (2022-05-03) diff --git a/package.json b/package.json index 2b437bfc..1ab8587b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.3.1-dev.1", + "version": "1.3.1-dev.2", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From d8f3da8e30725b7e85d3cfafce5973dc981b9138 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 3 May 2022 12:37:30 +0300 Subject: [PATCH 181/211] fix: update text for the attempt to deposit more than the allowable amount (#174) --- src/components/Features/Transfer/Transfer.js | 3 ++- src/config/strings.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/components/Features/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer.js index b2e5e4f5..49e5cfeb 100644 --- a/src/components/Features/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer.js @@ -74,7 +74,8 @@ export const Transfer = () => { } else if (amount > selectedToken.balance) { errorMsg = insufficientBalanceErrorMsg; } else if (isL1 && amount > maxDeposit) { - errorMsg = maxDepositErrorMsg; + const {symbol} = selectedToken; + errorMsg = utils.object.evaluate(maxDepositErrorMsg, {maxDeposit, symbol}); } if (errorMsg) { diff --git a/src/config/strings.js b/src/config/strings.js index 2a46e5b5..ba80b110 100644 --- a/src/config/strings.js +++ b/src/config/strings.js @@ -57,7 +57,7 @@ const strings = { tooManyDigitsErrorMsg: 'Too many decimal places', insufficientBalanceErrorMsg: 'Insufficient balance', maxDepositErrorMsg: - 'You have exceeded the maximum transfer amount. Please reduce the amount and try again.', + 'You have exceeded the maximum transfer amount ({{maxDeposit}} {{symbol}}). Please reduce the amount and try again.', maxBtnTxt: 'Max', balanceTitleTxt: 'Available balance', inputPlaceholderTxt: '0.00', From fa6d2ba123ba31259e0c31af4a213e8d2cd28826 Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Tue, 3 May 2022 09:39:39 +0000 Subject: [PATCH 182/211] prerelease: v1.3.1-dev.3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### [1.3.1-dev.3](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.1-dev.2...v1.3.1-dev.3) (2022-05-03) ### 🔧 Fixes * update text for the attempt to deposit more than the allowable amount ([#174](https://github.com/starkware-libs/starkgate-frontend/issues/174)) ([d8f3da8](https://github.com/starkware-libs/starkgate-frontend/commit/d8f3da8e30725b7e85d3cfafce5973dc981b9138)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 75dbfa89..1edf4b84 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +### [1.3.1-dev.3](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.1-dev.2...v1.3.1-dev.3) (2022-05-03) + + +### 🔧 Fixes + +* update text for the attempt to deposit more than the allowable amount ([#174](https://github.com/starkware-libs/starkgate-frontend/issues/174)) ([d8f3da8](https://github.com/starkware-libs/starkgate-frontend/commit/d8f3da8e30725b7e85d3cfafce5973dc981b9138)) + ### [1.3.1-dev.2](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.1-dev.1...v1.3.1-dev.2) (2022-05-03) diff --git a/package.json b/package.json index 1ab8587b..539aa76c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.3.1-dev.2", + "version": "1.3.1-dev.3", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 73b1f2188ba7c2d60d641034c9f8c1c8001961fc Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 3 May 2022 12:40:46 +0300 Subject: [PATCH 183/211] fix: connection modal overrides gsw selection modal (#175) --- src/libs/starknet.js | 4 ++-- src/providers/WalletsProvider/wallets-hooks.js | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/libs/starknet.js b/src/libs/starknet.js index 1dd266b3..4449afe4 100644 --- a/src/libs/starknet.js +++ b/src/libs/starknet.js @@ -1,4 +1,4 @@ -import {getStarknet} from 'get-starknet-wallet'; +import {getStarknet, connect as getStarknetWallet} from 'get-starknet-wallet'; import * as starknet from 'starknet'; -export {starknet, getStarknet}; +export {starknet, getStarknet, getStarknetWallet}; diff --git a/src/providers/WalletsProvider/wallets-hooks.js b/src/providers/WalletsProvider/wallets-hooks.js index b936f833..00a3efea 100644 --- a/src/providers/WalletsProvider/wallets-hooks.js +++ b/src/providers/WalletsProvider/wallets-hooks.js @@ -2,7 +2,7 @@ import {useCallback, useContext, useEffect, useState} from 'react'; import {ChainInfo, ChainType, WalletErrorType, WalletStatus} from '../../enums'; import {useEnvs} from '../../hooks'; -import {getStarknet} from '../../libs'; +import {getStarknet, getStarknetWallet} from '../../libs'; import {useTransfer} from '../TransferProvider'; import {WalletsContext} from './wallets-context'; @@ -70,8 +70,11 @@ export const useStarknetWallet = () => { const connect = async walletConfig => { try { + const wallet = await getStarknetWallet(); + if (!wallet) { + return; + } setStatus(WalletStatus.CONNECTING); - const wallet = getStarknet(); const enabled = await wallet .enable(!autoConnect && {showModal: true}) .then(address => !!address?.length); From b699a038dc79aa8d48dd80ae95479b352c8c70db Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Tue, 3 May 2022 09:42:19 +0000 Subject: [PATCH 184/211] prerelease: v1.3.1-dev.4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### [1.3.1-dev.4](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.1-dev.3...v1.3.1-dev.4) (2022-05-03) ### 🔧 Fixes * connection modal overrides gsw selection modal ([#175](https://github.com/starkware-libs/starkgate-frontend/issues/175)) ([73b1f21](https://github.com/starkware-libs/starkgate-frontend/commit/73b1f2188ba7c2d60d641034c9f8c1c8001961fc)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1edf4b84..f0f6e17d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +### [1.3.1-dev.4](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.1-dev.3...v1.3.1-dev.4) (2022-05-03) + + +### 🔧 Fixes + +* connection modal overrides gsw selection modal ([#175](https://github.com/starkware-libs/starkgate-frontend/issues/175)) ([73b1f21](https://github.com/starkware-libs/starkgate-frontend/commit/73b1f2188ba7c2d60d641034c9f8c1c8001961fc)) + ### [1.3.1-dev.3](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.1-dev.2...v1.3.1-dev.3) (2022-05-03) diff --git a/package.json b/package.json index 539aa76c..1bb6c64e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.3.1-dev.3", + "version": "1.3.1-dev.4", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 3161cc9f35179bbe2549df0ead2cbf3442cb5696 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 3 May 2022 23:37:36 +0300 Subject: [PATCH 185/211] fix: update app state on accountsChanged event (#176) --- src/__tests__/utils/storage.spec.js | 10 ----- .../Features/ToastProvider/ToastProvider.js | 18 +++++++- .../EventManagerProvider.js | 21 ++++++--- .../TransfersLogProvider.js | 43 +++++++++++++------ .../WalletsProvider/WalletsProvider.js | 11 ++++- .../WalletsProvider/wallets-context.js | 1 + .../WalletsProvider/wallets-hooks.js | 6 +++ src/utils/storage.js | 5 --- src/utils/wallet.js | 10 +++++ 9 files changed, 90 insertions(+), 35 deletions(-) diff --git a/src/__tests__/utils/storage.spec.js b/src/__tests__/utils/storage.spec.js index fdfb97fb..f66ef8f2 100644 --- a/src/__tests__/utils/storage.spec.js +++ b/src/__tests__/utils/storage.spec.js @@ -65,14 +65,4 @@ describe('StorageManager', () => { expect(getItem('testNumber')).toEqual(testNumber); expect(getItem('testString')).toEqual(testString); }); - - it('should backward compatible for saved arrays', () => { - const jsonArray = JSON.stringify(testArray); - localStorage.setItem('test', jsonArray); - expect(localStorage.getItem('test')).toEqual(jsonArray); - expect(getItem('test')).toEqual(testArray); - expect(localStorage.getItem('test')).toEqual( - 'eyIwIjoiV3c9PSIsIjEiOiJldz09IiwiMiI6IklnPT0iLCIzIjoiWVE9PSIsIjQiOiJJZz09IiwiNSI6Ik9nPT0iLCI2IjoiTVE9PSIsIjciOiJmUT09IiwiOCI6IlhRPT0ifQ==' - ); - }); }); diff --git a/src/components/Features/ToastProvider/ToastProvider.js b/src/components/Features/ToastProvider/ToastProvider.js index a824ea5a..90ab1e74 100644 --- a/src/components/Features/ToastProvider/ToastProvider.js +++ b/src/components/Features/ToastProvider/ToastProvider.js @@ -22,8 +22,8 @@ import utils from '../../../utils'; import {CompleteTransferToL1Toast, ToastBody, TransferToast} from '../../UI'; import styles from './ToastProvider.module.scss'; -const toastsMap = {}; -const toastsDismissed = {}; +let toastsMap = {}; +let toastsDismissed = {}; export const ToastProvider = () => { const {alphaDisclaimerMsg} = useToastsTranslation(); @@ -46,6 +46,10 @@ export const ToastProvider = () => { }); }, [transfers]); + useEffect(() => { + return () => clearToasts(); + }, []); + const handleToast = (transfer, prevTransfer) => { const {status, type} = transfer; const isChanged = prevTransfer && status !== prevTransfer.status; @@ -155,6 +159,16 @@ export const ToastProvider = () => { showAccountMenu({transferId: transfer.id}); }; + const clearToasts = () => { + Object.values(toastsMap).forEach(toasts => { + Object.keys(toasts).forEach(id => { + toast.dismiss(id); + }); + }); + toastsMap = {}; + toastsDismissed = {}; + }; + return ( <Toaster containerClassName={styles.toastProvider} diff --git a/src/providers/EventManagerProvider/EventManagerProvider.js b/src/providers/EventManagerProvider/EventManagerProvider.js index a32d4cef..408b2f5c 100644 --- a/src/providers/EventManagerProvider/EventManagerProvider.js +++ b/src/providers/EventManagerProvider/EventManagerProvider.js @@ -11,6 +11,7 @@ import {EventManagerContext} from './event-manager-context'; const listeners = {}; const filters = {}; +let emitters = []; export const EventManagerProvider = ({children}) => { const logger = useLogger(EventManagerProvider.displayName); @@ -23,6 +24,7 @@ export const EventManagerProvider = ({children}) => { useEffect(() => { setEventFilters(); addDepositWithdrawalListeners(); + return () => cleanEmittersAndRemoveListeners(); }, []); const addListener = (eventName, callback) => { @@ -101,14 +103,23 @@ export const EventManagerProvider = ({children}) => { }; const addContractEventListener = (contract, eventName, filter, handler) => { - contract.events[eventName]( - { - filter - }, - handler + emitters.push( + contract.events[eventName]( + { + filter + }, + handler + ) ); }; + const cleanEmittersAndRemoveListeners = () => { + logger.log('Remove all listeners.'); + emitters.forEach(emitter => emitter.removeAllListeners()); + logger.log('Clean emitters.'); + emitters = []; + }; + const value = { addListener, getPastEvents, diff --git a/src/providers/TransfersLogProvider/TransfersLogProvider.js b/src/providers/TransfersLogProvider/TransfersLogProvider.js index b41adbb2..30005b79 100644 --- a/src/providers/TransfersLogProvider/TransfersLogProvider.js +++ b/src/providers/TransfersLogProvider/TransfersLogProvider.js @@ -9,7 +9,7 @@ import utils from '../../utils'; import {useBlockHash} from '../BlockHashProvider'; import {useDepositMessageToL2Event} from '../EventManagerProvider'; import {useTokens} from '../TokensProvider'; -import {useL2Wallet} from '../WalletsProvider'; +import {useAccountHash, useL2Wallet} from '../WalletsProvider'; import {TransfersLogContext} from './transfers-log-context'; import {actions, initialState, reducer} from './transfers-log-reducer'; @@ -21,12 +21,11 @@ export const TransfersLogProvider = ({children}) => { const {updateTokenBalance} = useTokens(); const {chainId: l2ChainId} = useL2Wallet(); const getDepositMessageToL2Event = useDepositMessageToL2Event(); + const accountHash = useAccountHash(); useEffect(() => { const storedTransfers = getTransfersFromStorage(); - if (Array.isArray(storedTransfers)) { - setTransfers(storedTransfers); - } + setTransfers(storedTransfers); }, []); useDeepCompareEffect(() => { @@ -97,6 +96,34 @@ export const TransfersLogProvider = ({children}) => { return transfer; }; + const getTransfersFromStorage = () => { + let storedTransfers = utils.storage.getItem(localStorageTransfersLogKey); + // for backward compatibility + storedTransfers = maybeTransformTransfersArrayToObject(storedTransfers) || {}; + return storedTransfers[accountHash] || []; + }; + + const saveTransfersToStorage = transfers => { + const storedTransfers = utils.storage.getItem(localStorageTransfersLogKey) || {}; + const updatedTransfers = Object.assign(storedTransfers, {[accountHash]: transfers}); + utils.storage.setItem(localStorageTransfersLogKey, updatedTransfers); + }; + + const maybeTransformTransfersArrayToObject = storedTransfers => { + if (Array.isArray(storedTransfers)) { + const transfersObject = {}; + storedTransfers.forEach(storedTransfer => { + const {sender, recipient} = storedTransfer; + const accountHash = utils.wallet.calcAccountHash(sender, recipient); + transfersObject[accountHash] = transfersObject[accountHash] || []; + transfersObject[accountHash].push(storedTransfer); + }); + utils.storage.setItem(localStorageTransfersLogKey, transfersObject); + return transfersObject; + } + return storedTransfers; + }; + const updateTransfer = transfer => { dispatch({ type: actions.UPDATE_TRANSFER, @@ -118,14 +145,6 @@ export const TransfersLogProvider = ({children}) => { }); }; - const getTransfersFromStorage = () => { - return utils.storage.getItem(localStorageTransfersLogKey); - }; - - const saveTransfersToStorage = transfers => { - utils.storage.setItem(localStorageTransfersLogKey, transfers); - }; - const context = { transfers, addTransfer, diff --git a/src/providers/WalletsProvider/WalletsProvider.js b/src/providers/WalletsProvider/WalletsProvider.js index 6b3532a9..ec9ee94f 100644 --- a/src/providers/WalletsProvider/WalletsProvider.js +++ b/src/providers/WalletsProvider/WalletsProvider.js @@ -1,8 +1,9 @@ import PropTypes from 'prop-types'; -import React, {useEffect, useReducer} from 'react'; +import React, {useEffect, useReducer, useState} from 'react'; import {useWallet} from 'use-wallet'; import {WalletStatus} from '../../enums'; +import utils from '../../utils'; import {useIsL1, useIsL2} from '../TransferProvider'; import {WalletsContext} from './wallets-context'; import {useStarknetWallet} from './wallets-hooks'; @@ -22,6 +23,7 @@ export const WalletsProvider = ({children}) => { } = useStarknetWallet(); const [isL1, swapToL1] = useIsL1(); const [isL2, swapToL2] = useIsL2(); + const [accountHash, setAccountHash] = useState(''); useEffect(() => { (isL2 || state.l2Wallet.config) && maybeUpdateL2Wallet(); @@ -31,6 +33,12 @@ export const WalletsProvider = ({children}) => { (isL1 || state.l1Wallet.config) && maybeUpdateL1Wallet(); }, [status, error, account, chainId, networkName]); + useEffect(() => { + if (account && l2Account) { + setAccountHash(utils.wallet.calcAccountHash(account, l2Account)); + } + }, [account, l2Account]); + const connectWallet = async walletConfig => { return isL1 ? connectL1Wallet(walletConfig) : connectL2Wallet(walletConfig); }; @@ -122,6 +130,7 @@ export const WalletsProvider = ({children}) => { const context = { ...state, + accountHash, connectWallet, connectL1Wallet, connectL2Wallet, diff --git a/src/providers/WalletsProvider/wallets-context.js b/src/providers/WalletsProvider/wallets-context.js index 78896b0c..897a0d82 100644 --- a/src/providers/WalletsProvider/wallets-context.js +++ b/src/providers/WalletsProvider/wallets-context.js @@ -4,6 +4,7 @@ import {initialState} from './wallets-reducer'; export const WalletsContext = createContext({ ...initialState, + accountHash: '', connectL1Wallet: () => {}, connectL2Wallet: () => {}, connectWallet: () => {}, diff --git a/src/providers/WalletsProvider/wallets-hooks.js b/src/providers/WalletsProvider/wallets-hooks.js index 00a3efea..fb965cb0 100644 --- a/src/providers/WalletsProvider/wallets-hooks.js +++ b/src/providers/WalletsProvider/wallets-hooks.js @@ -32,6 +32,11 @@ export const useWallets = () => { }; }; +export const useAccountHash = () => { + const {accountHash} = useContext(WalletsContext); + return accountHash; +}; + export const useL1Wallet = () => { const wallets = useContext(WalletsContext); @@ -92,6 +97,7 @@ export const useStarknetWallet = () => { const addAccountChangedListener = () => { getStarknet().on('accountsChanged', () => { + setStatus(WalletStatus.DISCONNECTED); updateAccount(); }); }; diff --git a/src/utils/storage.js b/src/utils/storage.js index 358f0559..92b64663 100644 --- a/src/utils/storage.js +++ b/src/utils/storage.js @@ -28,11 +28,6 @@ Storage.prototype.setObjectHash = function (key, myObject) { Storage.prototype.getObjectHash = function (key) { let myObject = this.getItem(key); if (!myObject) return null; - // For backward compatibility - if (myObject.startsWith('[') && myObject.endsWith(']')) { - this.setObjectHash(key, myObject); - myObject = this.getItem(key); - } return ( b64d(myObject) && JSON.parse(b64d(myObject), function (key) { diff --git a/src/utils/wallet.js b/src/utils/wallet.js index 3b4bed40..7e1f1189 100644 --- a/src/utils/wallet.js +++ b/src/utils/wallet.js @@ -1,3 +1,6 @@ +import {starknet} from '../libs'; +import {parseToFelt} from './parser'; + export const formatBalance = balance => { return typeof balance === 'number' ? String(fromExponential(balance)) : 'N/A'; }; @@ -14,6 +17,13 @@ export const shortenAddress = account => { : ''; }; +export const calcAccountHash = (account1, account2) => { + return starknet.hash.computeHashOnElements([ + parseToFelt(account1).toString(), + parseToFelt(account2).toString() + ]); +}; + const fromExponential = x => { if (Math.abs(x) < 1.0) { const e = parseInt(x.toString().split('e-')[1]); From 206f27e000f172e94c4ea71f2b87360ea8beb7da Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Tue, 3 May 2022 20:39:10 +0000 Subject: [PATCH 186/211] prerelease: v1.3.1-dev.5 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### [1.3.1-dev.5](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.1-dev.4...v1.3.1-dev.5) (2022-05-03) ### 🔧 Fixes * update app state on accountsChanged event ([#176](https://github.com/starkware-libs/starkgate-frontend/issues/176)) ([3161cc9](https://github.com/starkware-libs/starkgate-frontend/commit/3161cc9f35179bbe2549df0ead2cbf3442cb5696)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f0f6e17d..53038605 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +### [1.3.1-dev.5](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.1-dev.4...v1.3.1-dev.5) (2022-05-03) + + +### 🔧 Fixes + +* update app state on accountsChanged event ([#176](https://github.com/starkware-libs/starkgate-frontend/issues/176)) ([3161cc9](https://github.com/starkware-libs/starkgate-frontend/commit/3161cc9f35179bbe2549df0ead2cbf3442cb5696)) + ### [1.3.1-dev.4](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.1-dev.3...v1.3.1-dev.4) (2022-05-03) diff --git a/package.json b/package.json index 1bb6c64e..419b7512 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.3.1-dev.4", + "version": "1.3.1-dev.5", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 30d8ec3a7cdb5d2cb6da9c32ec3cac6ff0f6b363 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Wed, 4 May 2022 00:11:37 +0300 Subject: [PATCH 187/211] feat: add asset to SN wallet after a successful deposit (#171) --- src/hooks/useTransferToL2.js | 14 +++++++++++++- src/utils/token.js | 13 +++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/hooks/useTransferToL2.js b/src/hooks/useTransferToL2.js index 2e8d8e5c..0e8843d0 100644 --- a/src/hooks/useTransferToL2.js +++ b/src/hooks/useTransferToL2.js @@ -5,6 +5,7 @@ import {allowance, approve, balanceOf, ethBalanceOf} from '../api/erc20'; import {ActionType, stepOf, TransferError, TransferStep, TransferToL2Steps} from '../enums'; import {starknet} from '../libs'; import {useDepositListener} from '../providers/EventManagerProvider'; +import {useL2Token} from '../providers/TokensProvider'; import {useSelectedToken} from '../providers/TransferProvider'; import {useL1Wallet, useL2Wallet} from '../providers/WalletsProvider'; import utils from '../utils'; @@ -19,7 +20,7 @@ export const useTransferToL2 = () => { const logger = useLogger('useTransferToL2'); const [trackInitiated, trackSuccess, trackError, trackReject] = useTransferToL2Tracking(); const {account: l1Account, chainId: l1ChainId, config: l1Config} = useL1Wallet(); - const {account: l2Account} = useL2Wallet(); + const {account: l2Account, chainId: l2ChainId} = useL2Wallet(); const {handleProgress, handleData, handleError} = useTransfer(TransferToL2Steps); const selectedToken = useSelectedToken(); const getTokenContract = useTokenContract(); @@ -27,6 +28,7 @@ export const useTransferToL2 = () => { const progressOptions = useTransferProgress(); const {addListener, removeListener} = useDepositListener(); const maxTotalBalance = useMaxTotalBalance(); + const getL2Token = useL2Token(); return useCallback( async amount => { @@ -35,6 +37,7 @@ export const useTransferToL2 = () => { const bridgeContract = getTokenBridgeContract(bridgeAddress); const isEthToken = utils.token.isEth(symbol); const tokenBridgeAddress = bridgeAddress[l1ChainId]; + const l2TokenAddress = getL2Token(symbol)?.tokenAddress[l2ChainId]; const readAllowance = () => { return allowance({ @@ -98,6 +101,14 @@ export const useTransferToL2 = () => { } }; + const maybeAddToken = async () => { + try { + await utils.token.addToken(l2TokenAddress); + } catch (ex) { + logger.warn(ex.message); + } + }; + const isMaxBalanceExceeded = async () => { const tokenBridgeBalance = await (isEthToken ? ethBalanceOf(tokenBridgeAddress) @@ -138,6 +149,7 @@ export const useTransferToL2 = () => { addListener(onDeposit); logger.log('Calling deposit'); await sendDeposit(); + await maybeAddToken(l2TokenAddress); } catch (ex) { removeListener(); trackError(ex); diff --git a/src/utils/token.js b/src/utils/token.js index bf82c3d0..4c5518da 100644 --- a/src/utils/token.js +++ b/src/utils/token.js @@ -1,4 +1,5 @@ import {NetworkType} from '../enums'; +import {getStarknet} from '../libs'; export const isEth = tokenData => { let symbol = ''; @@ -10,3 +11,15 @@ export const isEth = tokenData => { } return symbol === NetworkType.L1.symbol; }; + +export const addToken = async address => { + await getStarknet().request({ + type: 'wallet_watchAsset', + params: { + type: 'ERC20', + options: { + address + } + } + }); +}; From de22d6f950555d646ec46c69ca3de653afc4f473 Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Tue, 3 May 2022 21:13:07 +0000 Subject: [PATCH 188/211] prerelease: v1.4.0-dev.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [1.4.0-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.1-dev.5...v1.4.0-dev.1) (2022-05-03) ### 🧩 Features * add asset to SN wallet after a successful deposit ([#171](https://github.com/starkware-libs/starkgate-frontend/issues/171)) ([30d8ec3](https://github.com/starkware-libs/starkgate-frontend/commit/30d8ec3a7cdb5d2cb6da9c32ec3cac6ff0f6b363)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 53038605..a4b10262 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [1.4.0-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.1-dev.5...v1.4.0-dev.1) (2022-05-03) + + +### 🧩 Features + +* add asset to SN wallet after a successful deposit ([#171](https://github.com/starkware-libs/starkgate-frontend/issues/171)) ([30d8ec3](https://github.com/starkware-libs/starkgate-frontend/commit/30d8ec3a7cdb5d2cb6da9c32ec3cac6ff0f6b363)) + ### [1.3.1-dev.5](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.1-dev.4...v1.3.1-dev.5) (2022-05-03) diff --git a/package.json b/package.json index 419b7512..14244d7f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.3.1-dev.5", + "version": "1.4.0-dev.1", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From bcd336cfef8f3b2f919605ddbc0d177e6ec24c2b Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Wed, 4 May 2022 06:25:51 +0000 Subject: [PATCH 189/211] release: v1.4.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [1.4.0](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0...v1.4.0) (2022-05-04) ### 🔧 Fixes * cancel toFixed when format balances ([#172](https://github.com/starkware-libs/starkgate-frontend/issues/172)) ([2906e3e](https://github.com/starkware-libs/starkgate-frontend/commit/2906e3e46d65023771f06a0c62d9d4ea46d22f53)) * connection modal overrides gsw selection modal ([#175](https://github.com/starkware-libs/starkgate-frontend/issues/175)) ([73b1f21](https://github.com/starkware-libs/starkgate-frontend/commit/73b1f2188ba7c2d60d641034c9f8c1c8001961fc)) * temporary disable max button ([#173](https://github.com/starkware-libs/starkgate-frontend/issues/173)) ([1d3038d](https://github.com/starkware-libs/starkgate-frontend/commit/1d3038d1d38d832b67c147fe325fecbe6838a6aa)) * update app state on accountsChanged event ([#176](https://github.com/starkware-libs/starkgate-frontend/issues/176)) ([3161cc9](https://github.com/starkware-libs/starkgate-frontend/commit/3161cc9f35179bbe2549df0ead2cbf3442cb5696)) * update text for the attempt to deposit more than the allowable amount ([#174](https://github.com/starkware-libs/starkgate-frontend/issues/174)) ([d8f3da8](https://github.com/starkware-libs/starkgate-frontend/commit/d8f3da8e30725b7e85d3cfafce5973dc981b9138)) ### 🧩 Features * add asset to SN wallet after a successful deposit ([#171](https://github.com/starkware-libs/starkgate-frontend/issues/171)) ([30d8ec3](https://github.com/starkware-libs/starkgate-frontend/commit/30d8ec3a7cdb5d2cb6da9c32ec3cac6ff0f6b363)) --- CHANGELOG.md | 16 ++++++++++++++++ package.json | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a4b10262..22d59bd2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,19 @@ +## [1.4.0](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0...v1.4.0) (2022-05-04) + + +### 🔧 Fixes + +* cancel toFixed when format balances ([#172](https://github.com/starkware-libs/starkgate-frontend/issues/172)) ([2906e3e](https://github.com/starkware-libs/starkgate-frontend/commit/2906e3e46d65023771f06a0c62d9d4ea46d22f53)) +* connection modal overrides gsw selection modal ([#175](https://github.com/starkware-libs/starkgate-frontend/issues/175)) ([73b1f21](https://github.com/starkware-libs/starkgate-frontend/commit/73b1f2188ba7c2d60d641034c9f8c1c8001961fc)) +* temporary disable max button ([#173](https://github.com/starkware-libs/starkgate-frontend/issues/173)) ([1d3038d](https://github.com/starkware-libs/starkgate-frontend/commit/1d3038d1d38d832b67c147fe325fecbe6838a6aa)) +* update app state on accountsChanged event ([#176](https://github.com/starkware-libs/starkgate-frontend/issues/176)) ([3161cc9](https://github.com/starkware-libs/starkgate-frontend/commit/3161cc9f35179bbe2549df0ead2cbf3442cb5696)) +* update text for the attempt to deposit more than the allowable amount ([#174](https://github.com/starkware-libs/starkgate-frontend/issues/174)) ([d8f3da8](https://github.com/starkware-libs/starkgate-frontend/commit/d8f3da8e30725b7e85d3cfafce5973dc981b9138)) + + +### 🧩 Features + +* add asset to SN wallet after a successful deposit ([#171](https://github.com/starkware-libs/starkgate-frontend/issues/171)) ([30d8ec3](https://github.com/starkware-libs/starkgate-frontend/commit/30d8ec3a7cdb5d2cb6da9c32ec3cac6ff0f6b363)) + ## [1.4.0-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.1-dev.5...v1.4.0-dev.1) (2022-05-03) diff --git a/package.json b/package.json index 14244d7f..c31796d9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.4.0-dev.1", + "version": "1.4.0", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From f81d11e0265bed7fe8112159b98c5c419f9a6f39 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Wed, 4 May 2022 18:15:41 +0300 Subject: [PATCH 190/211] ci: allow custom image tag (#177) --- .github/workflows/helm_upgrade_workflow.yml | 8 +++++++- .github/workflows/push_frontend_images.yml | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/helm_upgrade_workflow.yml b/.github/workflows/helm_upgrade_workflow.yml index 34b19803..8a343905 100644 --- a/.github/workflows/helm_upgrade_workflow.yml +++ b/.github/workflows/helm_upgrade_workflow.yml @@ -15,6 +15,9 @@ on: env_file: required: true type: string + image_tag: + required: false + type: string secrets: gcp_token: required: true @@ -46,6 +49,9 @@ jobs: helm plugin install https://starkware-third-party.s3.us-east-2.amazonaws.com/k8s/helm-s3/helm-s3-v0.9.2.tar.gz helm repo add starkware s3://starkware-third-party/helm-repo/charts helm repo update + - name: Set image tag + id: get_image_tag + run: echo "::set-output name=tag::${{ inputs.image_tag || github.ref_name }}" - name: Upgrade using helm upgrade command. env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} @@ -56,4 +62,4 @@ jobs: --namespace=${{ inputs.namespace_name }} \ --values ${{ inputs.values_file}} \ --set-file configMap.frontend.envs=${{ inputs.env_file }} \ - --set frontend.image.tag=${{ github.ref_name }} + --set frontend.image.tag=${{ steps.get_image_tag.outputs.tag }} diff --git a/.github/workflows/push_frontend_images.yml b/.github/workflows/push_frontend_images.yml index ec6258c6..47ed5f2d 100644 --- a/.github/workflows/push_frontend_images.yml +++ b/.github/workflows/push_frontend_images.yml @@ -38,6 +38,7 @@ jobs: namespace_name: starkgate-goerli values_file: deployment/testing.yml env_file: .env.testing + image_tag: ${{ github.ref_name }}-goerli secrets: gcp_token: ${{ secrets.STARKGATE_SA }} AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} From 219b8608ab546d1e822f92978b210ed557dc57c5 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Sun, 8 May 2022 14:39:29 +0300 Subject: [PATCH 191/211] fix: CompleteTransferToL1 toast remains on display after tx is done (#179) --- .../Features/ToastProvider/ToastProvider.js | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/components/Features/ToastProvider/ToastProvider.js b/src/components/Features/ToastProvider/ToastProvider.js index 90ab1e74..e7a059fa 100644 --- a/src/components/Features/ToastProvider/ToastProvider.js +++ b/src/components/Features/ToastProvider/ToastProvider.js @@ -40,18 +40,22 @@ export const ToastProvider = () => { }, [breakpoint]); useDeepCompareEffect(() => { - transfers.forEach(transfer => { - const prevTransfer = prevTransfers?.find(prevTransfer => prevTransfer.id === transfer.id); - handleToast(transfer, prevTransfer); - }); + renderToasts(); }, [transfers]); useEffect(() => { return () => clearToasts(); }, []); + const renderToasts = () => { + transfers.forEach(transfer => { + const prevTransfer = prevTransfers?.find(prevTransfer => prevTransfer.id === transfer.id); + handleToast(transfer, prevTransfer); + }); + }; + const handleToast = (transfer, prevTransfer) => { - const {status, type} = transfer; + const {status, type, l1hash} = transfer; const isChanged = prevTransfer && status !== prevTransfer.status; if (isChanged && isConsumed(status)) { return showConsumedTransferToast(transfer); @@ -59,8 +63,13 @@ export const ToastProvider = () => { if (isChanged && isRejected(status)) { return showRejectedTransferToast(transfer); } - if (!transfer.l1hash && type === ActionType.TRANSFER_TO_L1 && isOnChain(status)) { - return showCompleteTransferToL1Toast(transfer); + if (type === ActionType.TRANSFER_TO_L1) { + if (!l1hash && isOnChain(status)) { + return showCompleteTransferToL1Toast(transfer); + } + if (l1hash && isToastRendered(transfer.id, ToastType.COMPLETE_TRANSFER_TO_L1)) { + return dismissToast(transfer.id, ToastType.COMPLETE_TRANSFER_TO_L1); + } } }; From 3f05a7154428e5737a5e3c889139eaeae16816c7 Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Sun, 8 May 2022 11:41:00 +0000 Subject: [PATCH 192/211] prerelease: v1.4.1-dev.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### [1.4.1-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.4.0...v1.4.1-dev.1) (2022-05-08) ### 🔧 Fixes * CompleteTransferToL1 toast remains on display after tx is done ([#179](https://github.com/starkware-libs/starkgate-frontend/issues/179)) ([219b860](https://github.com/starkware-libs/starkgate-frontend/commit/219b8608ab546d1e822f92978b210ed557dc57c5)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 22d59bd2..e35cc516 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +### [1.4.1-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.4.0...v1.4.1-dev.1) (2022-05-08) + + +### 🔧 Fixes + +* CompleteTransferToL1 toast remains on display after tx is done ([#179](https://github.com/starkware-libs/starkgate-frontend/issues/179)) ([219b860](https://github.com/starkware-libs/starkgate-frontend/commit/219b8608ab546d1e822f92978b210ed557dc57c5)) + ## [1.4.0](https://github.com/starkware-libs/starkgate-frontend/compare/v1.3.0...v1.4.0) (2022-05-04) diff --git a/package.json b/package.json index c31796d9..f438a4c5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.4.0", + "version": "1.4.1-dev.1", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 4169584471ab25102737f382be3c66871a296784 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Sun, 8 May 2022 20:58:35 +0300 Subject: [PATCH 193/211] fix(Header): testnet title not displayed --- src/components/Containers/Header/Header.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/Containers/Header/Header.js b/src/components/Containers/Header/Header.js index ba082329..f498c15d 100644 --- a/src/components/Containers/Header/Header.js +++ b/src/components/Containers/Header/Header.js @@ -4,7 +4,7 @@ import useBreakpoint from 'use-breakpoint'; import {TrackEvent} from '../../../analytics'; import {ReactComponent as StarkGateLogo} from '../../../assets/img/starkgate.svg'; -import {Breakpoint} from '../../../enums'; +import {Breakpoint, ChainType} from '../../../enums'; import {useColors, useConstants, useEnvs, useTracking, useHeaderTranslation} from '../../../hooks'; import {useLogin} from '../../../providers/AppProvider'; import {useMenu} from '../../../providers/MenuProvider'; @@ -17,7 +17,7 @@ import styles from './Header.module.scss'; export const Header = () => { const {DISCORD_LINK_URL} = useConstants(); const [trackDiscordClick] = useTracking(TrackEvent.DISCORD_TAB_CLICK); - const {env} = useEnvs(); + const {supportedChainId} = useEnvs(); const {tabDiscordTxt, tabFaqTxt, tabTermsTxt, chainTxt} = useHeaderTranslation(); const navigate = useNavigate(); const {pathname} = useLocation(); @@ -70,7 +70,7 @@ export const Header = () => { <div className={utils.object.toClasses(styles.logo, 'row')} onClick={onLogoClick}> <StarkGateLogo /> </div> - {env !== 'production' && ( + {supportedChainId === ChainType.L1.GOERLI && ( <div className={utils.object.toClasses(styles.chain, 'row')}>{chainTxt}</div> )} </div> From 507e97dbf1df34a482b7c3bc90bae6934818ad4e Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Sun, 8 May 2022 18:00:13 +0000 Subject: [PATCH 194/211] prerelease: v1.4.1-dev.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### [1.4.1-dev.2](https://github.com/starkware-libs/starkgate-frontend/compare/v1.4.1-dev.1...v1.4.1-dev.2) (2022-05-08) ### 🔧 Fixes * **Header:** testnet title not displayed ([4169584](https://github.com/starkware-libs/starkgate-frontend/commit/4169584471ab25102737f382be3c66871a296784)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e35cc516..ef330438 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +### [1.4.1-dev.2](https://github.com/starkware-libs/starkgate-frontend/compare/v1.4.1-dev.1...v1.4.1-dev.2) (2022-05-08) + + +### 🔧 Fixes + +* **Header:** testnet title not displayed ([4169584](https://github.com/starkware-libs/starkgate-frontend/commit/4169584471ab25102737f382be3c66871a296784)) + ### [1.4.1-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.4.0...v1.4.1-dev.1) (2022-05-08) diff --git a/package.json b/package.json index f438a4c5..0de72890 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.4.1-dev.1", + "version": "1.4.1-dev.2", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 51399ce422eabc60843c063164808c915a3a5caf Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Sun, 8 May 2022 18:19:49 +0000 Subject: [PATCH 195/211] release: v1.4.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### [1.4.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.4.0...v1.4.1) (2022-05-08) ### 🔧 Fixes * CompleteTransferToL1 toast remains on display after tx is done ([#179](https://github.com/starkware-libs/starkgate-frontend/issues/179)) ([219b860](https://github.com/starkware-libs/starkgate-frontend/commit/219b8608ab546d1e822f92978b210ed557dc57c5)) * **Header:** testnet title not displayed ([4169584](https://github.com/starkware-libs/starkgate-frontend/commit/4169584471ab25102737f382be3c66871a296784)) --- CHANGELOG.md | 8 ++++++++ package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ef330438..0ba24665 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +### [1.4.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.4.0...v1.4.1) (2022-05-08) + + +### 🔧 Fixes + +* CompleteTransferToL1 toast remains on display after tx is done ([#179](https://github.com/starkware-libs/starkgate-frontend/issues/179)) ([219b860](https://github.com/starkware-libs/starkgate-frontend/commit/219b8608ab546d1e822f92978b210ed557dc57c5)) +* **Header:** testnet title not displayed ([4169584](https://github.com/starkware-libs/starkgate-frontend/commit/4169584471ab25102737f382be3c66871a296784)) + ### [1.4.1-dev.2](https://github.com/starkware-libs/starkgate-frontend/compare/v1.4.1-dev.1...v1.4.1-dev.2) (2022-05-08) diff --git a/package.json b/package.json index 0de72890..c8f1fc09 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.4.1-dev.2", + "version": "1.4.1", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From b5585add93d5ff2918e68a6941a86e535eb39251 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 10 May 2022 15:21:43 +0300 Subject: [PATCH 196/211] refactor: export convention (#180) --- .eslintrc.js | 1 + src/__tests__/utils/date.spec.js | 4 +- src/__tests__/utils/number.spec.js | 4 +- src/__tests__/utils/object.spec.js | 4 +- src/__tests__/utils/parser.spec.js | 6 +- .../utils/{blockchain => }/starknet.spec.js | 16 +- src/__tests__/utils/storage.spec.js | 30 +- src/__tests__/utils/string.spec.js | 4 +- src/__tests__/utils/token.spec.js | 4 +- src/__tests__/utils/wallet.spec.js | 4 +- src/analytics/track.js | 4 +- src/api/bridge.js | 97 +++--- src/api/erc20.js | 45 +-- src/components/Containers/Header/Header.js | 14 +- src/components/Features/Account/Account.js | 6 +- .../Features/ToastProvider/ToastProvider.js | 4 +- src/components/Features/Transfer/Transfer.js | 10 +- .../Features/TransferLog/TransferLog.js | 6 +- .../UI/AccountAddress/AccountAddress.js | 6 +- src/components/UI/Button/Button.js | 4 +- src/components/UI/Icon/Icon.js | 4 +- src/components/UI/Input/Input.js | 4 +- src/components/UI/LinkButton/LinkButton.js | 6 +- src/components/UI/Menu/Menu.js | 4 +- src/components/UI/Modal/Modal/Modal.js | 6 +- .../UI/Modal/ModalBody/ModalBody.js | 4 +- .../UI/Modal/ModalHeader/ModalHeader.js | 4 +- .../TransactionSubmittedModal.js | 6 +- src/components/UI/NetworkSwap/NetworkSwap.js | 7 +- .../UI/SelectTokenRow/SelectTokenRow.js | 6 +- .../UI/TokenBalance/TokenBalance.js | 5 +- src/components/UI/TokenInput/TokenInput.js | 4 +- .../TransferLogContainer.js | 4 +- .../UI/TransferMenuTab/TransferMenuTab.js | 7 +- .../UI/WalletButton/WalletButton.js | 7 +- src/components/UI/WalletLogin/WalletLogin.js | 7 +- src/config/constants.js | 24 +- src/config/envs.js | 47 ++- src/config/faqs.js | 2 +- src/config/strings.js | 4 +- src/config/tokens.js | 293 +++++++++--------- src/config/wallets.js | 40 ++- src/enums/WalletType.js | 4 - src/enums/index.js | 1 - src/hooks/index.js | 3 - src/hooks/useConstants.js | 2 +- src/hooks/useContract.js | 26 +- src/hooks/useEnvs.js | 2 +- src/hooks/useIsLoading.js | 19 -- src/hooks/useLogger.js | 4 +- src/hooks/useTokenBalance.js | 4 +- src/hooks/useTransferProgress.js | 14 +- src/hooks/useTransferToL1.js | 4 +- src/hooks/useTransferToL2.js | 6 +- src/hooks/useTranslation.js | 7 +- src/hooks/useVars.js | 5 - src/hooks/useWalletHandlerProvider.js | 42 +-- src/hooks/useWindowSize.js | 22 -- src/index.js | 12 +- src/providers/AppProvider/AppProvider.js | 4 +- src/providers/AppProvider/app-reducer.js | 8 +- .../TokensProvider/tokens-reducer.js | 8 +- .../TransfersLogProvider.js | 14 +- .../WalletsProvider/WalletsProvider.js | 4 +- src/routes/Bridge/Bridge.js | 11 +- src/routes/Faq/Faq.js | 4 +- src/routes/Login/Login.js | 56 ++-- src/utils/blockchain/index.js | 2 - src/utils/{blockchain => }/ethereum.js | 14 +- src/utils/index.js | 48 +-- src/utils/{blockchain => }/starknet.js | 18 +- src/utils/storage.js | 6 +- 72 files changed, 486 insertions(+), 656 deletions(-) rename src/__tests__/utils/{blockchain => }/starknet.spec.js (63%) delete mode 100644 src/enums/WalletType.js delete mode 100644 src/hooks/useIsLoading.js delete mode 100644 src/hooks/useVars.js delete mode 100644 src/hooks/useWindowSize.js delete mode 100644 src/utils/blockchain/index.js rename src/utils/{blockchain => }/ethereum.js (53%) rename src/utils/{blockchain => }/starknet.js (78%) diff --git a/.eslintrc.js b/.eslintrc.js index bf41fc46..23e2aa59 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -43,6 +43,7 @@ module.exports = { 'object-shorthand': 'error', 'prefer-const': 'warn', 'prefer-template': 'warn', + 'import/no-anonymous-default-export': 'off', 'prettier/prettier': 'error', 'react/react-in-jsx-scope': 'off', 'react-hooks/rules-of-hooks': 'error', diff --git a/src/__tests__/utils/date.spec.js b/src/__tests__/utils/date.spec.js index 60efca7d..d7283f3c 100644 --- a/src/__tests__/utils/date.spec.js +++ b/src/__tests__/utils/date.spec.js @@ -1,6 +1,4 @@ -import utils from '../../utils'; - -const {get24Time, getDate, getMsFromHrs} = utils.date; +import {get24Time, getDate, getMsFromHrs} from '../../utils'; describe('getDate', () => { it('should return date of the form DD/MM/YYYY from timestamp', () => { diff --git a/src/__tests__/utils/number.spec.js b/src/__tests__/utils/number.spec.js index bdbeab34..b7e28fe0 100644 --- a/src/__tests__/utils/number.spec.js +++ b/src/__tests__/utils/number.spec.js @@ -1,6 +1,4 @@ -import utils from '../../utils'; - -const {afterDecimal, isNegative, isZero} = utils.number; +import {afterDecimal, isNegative, isZero} from '../../utils'; describe('afterDecimal', () => { it('should return number of decimals places', () => { diff --git a/src/__tests__/utils/object.spec.js b/src/__tests__/utils/object.spec.js index b2920bef..5888de23 100644 --- a/src/__tests__/utils/object.spec.js +++ b/src/__tests__/utils/object.spec.js @@ -1,6 +1,4 @@ -import utils from '../../utils'; - -const {evaluate, findIndexById, getPropertyPath, toClasses} = utils.object; +import {evaluate, findIndexById, getPropertyPath, toClasses} from '../../utils'; describe('getPropertyPath', () => { const obj = { diff --git a/src/__tests__/utils/parser.spec.js b/src/__tests__/utils/parser.spec.js index 37ef3626..1f2c1f28 100644 --- a/src/__tests__/utils/parser.spec.js +++ b/src/__tests__/utils/parser.spec.js @@ -1,13 +1,11 @@ -import utils from '../../utils'; - -const { +import { parseFromDecimals, parseFromFelt, parseFromUint256, parseToDecimals, parseToUint256, UNIT_MAP -} = utils.parser; +} from '../../utils'; describe('UNIT_MAP', () => { it('should init unit map', () => { diff --git a/src/__tests__/utils/blockchain/starknet.spec.js b/src/__tests__/utils/starknet.spec.js similarity index 63% rename from src/__tests__/utils/blockchain/starknet.spec.js rename to src/__tests__/utils/starknet.spec.js index 4b9edbf7..6ad94b24 100644 --- a/src/__tests__/utils/blockchain/starknet.spec.js +++ b/src/__tests__/utils/starknet.spec.js @@ -1,19 +1,7 @@ -import {ChainType, TransactionHashPrefix} from '../../../enums'; -import utils from '../../../utils'; - -const {getTransactionHash, hashEquals} = utils.blockchain.starknet; +import {ChainType, TransactionHashPrefix} from '../../enums'; +import {getTransactionHash} from '../../utils'; describe('starknet blockchain utils', () => { - describe('hashEquals', () => { - it('should compare hashes', () => { - expect(hashEquals([1, 2])).toBeTruthy(); - expect(hashEquals([1, 2, 3], [1, 2, 3])).toBeTruthy(); - expect(hashEquals([1, 2, 3], [1, 2, 3], [1, 2, 3])).toBeTruthy(); - expect(hashEquals([1, 2, 3], [1, 2, 3], [1])).toBeFalsy(); - expect(hashEquals([1, 2, 3], [1, 2])).toBeFalsy(); - }); - }); - describe('getTransactionHash', () => { it('should calc tx hash from message params', () => { const from_address = '0xc3511006C04EF1d78af4C8E0e74Ec18A6E64Ff9e'; diff --git a/src/__tests__/utils/storage.spec.js b/src/__tests__/utils/storage.spec.js index f66ef8f2..02182466 100644 --- a/src/__tests__/utils/storage.spec.js +++ b/src/__tests__/utils/storage.spec.js @@ -1,6 +1,4 @@ -import utils from '../../utils'; - -const {getItem, setItem} = utils.storage; +import {getStorageItem, setStorageItem} from '../../utils'; class LocalStorageMock { constructor() { @@ -35,14 +33,14 @@ describe('StorageManager', () => { }); it('should return null for empty key', () => { - expect(getItem('test')).toBeNull(); + expect(getStorageItem('test')).toBeNull(); }); it('should get item hash from local storage', () => { - setItem('testObject', testObject); - setItem('testArray', testArray); - setItem('testNumber', testNumber); - setItem('testString', testString); + setStorageItem('testObject', testObject); + setStorageItem('testArray', testArray); + setStorageItem('testNumber', testNumber); + setStorageItem('testString', testString); expect(localStorage.getItem('testObject')).toEqual( 'eyIwIjoiZXc9PSIsIjEiOiJJZz09IiwiMiI6IllRPT0iLCIzIjoiSWc9PSIsIjQiOiJPZz09IiwiNSI6Ik1RPT0iLCI2IjoiZlE9PSJ9' ); @@ -56,13 +54,13 @@ describe('StorageManager', () => { }); it('should get item from storage manager', () => { - setItem('testObject', testObject); - setItem('testArray', testArray); - setItem('testNumber', testNumber); - setItem('testString', testString); - expect(getItem('testObject')).toEqual(testObject); - expect(getItem('testArray')).toEqual(testArray); - expect(getItem('testNumber')).toEqual(testNumber); - expect(getItem('testString')).toEqual(testString); + setStorageItem('testObject', testObject); + setStorageItem('testArray', testArray); + setStorageItem('testNumber', testNumber); + setStorageItem('testString', testString); + expect(getStorageItem('testObject')).toEqual(testObject); + expect(getStorageItem('testArray')).toEqual(testArray); + expect(getStorageItem('testNumber')).toEqual(testNumber); + expect(getStorageItem('testString')).toEqual(testString); }); }); diff --git a/src/__tests__/utils/string.spec.js b/src/__tests__/utils/string.spec.js index e8ac381d..ce74fb5e 100644 --- a/src/__tests__/utils/string.spec.js +++ b/src/__tests__/utils/string.spec.js @@ -1,6 +1,4 @@ -import utils from '../../utils'; - -const {capitalize} = utils.string; +import {capitalize} from '../../utils'; describe('capitalize', () => { it('should capitalize string', () => { diff --git a/src/__tests__/utils/token.spec.js b/src/__tests__/utils/token.spec.js index a6de7b7c..f7470b0b 100644 --- a/src/__tests__/utils/token.spec.js +++ b/src/__tests__/utils/token.spec.js @@ -1,6 +1,4 @@ -import utils from '../../utils'; - -const {isEth} = utils.token; +import {isEth} from '../../utils'; describe('isEth', () => { it('should return true for eth symbol as string', () => { diff --git a/src/__tests__/utils/wallet.spec.js b/src/__tests__/utils/wallet.spec.js index dc6e4212..f9f7a014 100644 --- a/src/__tests__/utils/wallet.spec.js +++ b/src/__tests__/utils/wallet.spec.js @@ -1,6 +1,4 @@ -import utils from '../../utils'; - -const {formatBalance, shortenAddress, shortenBalance} = utils.wallet; +import {formatBalance, shortenAddress, shortenBalance} from '../../utils'; describe('formatBalance', () => { it('should format balance as string', () => { diff --git a/src/analytics/track.js b/src/analytics/track.js index 338098cd..648406b7 100644 --- a/src/analytics/track.js +++ b/src/analytics/track.js @@ -1,8 +1,8 @@ import splitbee from '@splitbee/web'; -import utils from '../utils'; +import {getLogger} from '../utils'; -const logger = utils.logger.getLogger('Analytics'); +const logger = getLogger('Analytics'); export const track = async (event, data) => { logger.debug('Sending track event...', {event, data}); diff --git a/src/api/bridge.js b/src/api/bridge.js index 11547d5c..d7c7387e 100644 --- a/src/api/bridge.js +++ b/src/api/bridge.js @@ -1,56 +1,52 @@ -import utils from '../utils'; +import { + sendL1Transaction, + callL1Contract, + sendL2Transaction, + parseFromDecimals, + parseToDecimals, + parseToFelt, + parseToUint256 +} from '../utils'; export const deposit = async ({recipient, amount, decimals, contract, options, emitter}) => { - try { - return utils.blockchain.ethereum.sendTransaction( - contract, - 'deposit', - [utils.parser.parseToDecimals(amount, decimals), recipient], - options, - emitter - ); - } catch (ex) { - return Promise.reject(ex); - } + return sendL1Transaction( + contract, + 'deposit', + [parseToDecimals(amount, decimals), recipient], + options, + emitter + ); }; export const depositEth = async ({recipient, amount, contract, options, emitter}) => { - try { - return utils.blockchain.ethereum.sendTransaction( - contract, - 'deposit', - [recipient], - { - ...options, - value: utils.parser.parseToDecimals(amount) - }, - emitter - ); - } catch (ex) { - return Promise.reject(ex); - } + return sendL1Transaction( + contract, + 'deposit', + [recipient], + { + ...options, + value: parseToDecimals(amount) + }, + emitter + ); }; export const withdraw = async ({recipient, amount, decimals, contract, emitter}) => { - try { - return utils.blockchain.ethereum.sendTransaction( - contract, - 'withdraw', - [utils.parser.parseToDecimals(amount, decimals), recipient], - { - from: recipient - }, - emitter - ); - } catch (ex) { - return Promise.reject(ex); - } + return sendL1Transaction( + contract, + 'withdraw', + [parseToDecimals(amount, decimals), recipient], + { + from: recipient + }, + emitter + ); }; export const maxDeposit = async ({decimals, contract}) => { try { - const maxDeposit = await utils.blockchain.ethereum.callContract(contract, 'maxDeposit'); - return utils.parser.parseFromDecimals(maxDeposit, decimals); + const maxDeposit = await callL1Contract(contract, 'maxDeposit'); + return parseFromDecimals(maxDeposit, decimals); } catch (ex) { return Promise.reject(ex); } @@ -58,23 +54,16 @@ export const maxDeposit = async ({decimals, contract}) => { export const maxTotalBalance = async ({decimals, contract}) => { try { - const maxTotalBalance = await utils.blockchain.ethereum.callContract( - contract, - 'maxTotalBalance' - ); - return utils.parser.parseFromDecimals(maxTotalBalance, decimals); + const maxTotalBalance = await callL1Contract(contract, 'maxTotalBalance'); + return parseFromDecimals(maxTotalBalance, decimals); } catch (ex) { return Promise.reject(ex); } }; export const initiateWithdraw = async ({recipient, amount, decimals, contract}) => { - try { - return utils.blockchain.starknet.sendTransaction(contract, 'initiate_withdraw', { - l1Recipient: utils.parser.parseToFelt(recipient), - amount: utils.parser.parseToUint256(amount, decimals) - }); - } catch (ex) { - return Promise.reject(ex); - } + return sendL2Transaction(contract, 'initiate_withdraw', { + l1Recipient: parseToFelt(recipient), + amount: parseToUint256(amount, decimals) + }); }; diff --git a/src/api/erc20.js b/src/api/erc20.js index e4889318..c59da407 100644 --- a/src/api/erc20.js +++ b/src/api/erc20.js @@ -1,27 +1,21 @@ import {TransactionStatus} from '../enums'; import {web3} from '../libs'; -import utils from '../utils'; +import { + sendL1Transaction, + callL1Contract, + callL2Contract, + parseFromDecimals, + parseFromUint256 +} from '../utils'; export const approve = async ({spender, value, contract, options}) => { - try { - return await utils.blockchain.ethereum.sendTransaction( - contract, - 'approve', - [spender, value], - options - ); - } catch (ex) { - return Promise.reject(ex); - } + return sendL1Transaction(contract, 'approve', [spender, value], options); }; export const allowance = async ({owner, spender, decimals, contract}) => { try { - const allow = await utils.blockchain.ethereum.callContract(contract, 'allowance', [ - owner, - spender - ]); - return utils.parser.parseFromDecimals(allow, decimals); + const allow = await callL1Contract(contract, 'allowance', [owner, spender]); + return parseFromDecimals(allow, decimals); } catch (ex) { return Promise.reject(ex); } @@ -30,18 +24,13 @@ export const allowance = async ({owner, spender, decimals, contract}) => { export const balanceOf = async ({account, decimals, contract}, isL1 = true) => { try { if (isL1) { - const balance = await utils.blockchain.ethereum.callContract(contract, 'balanceOf', [ - account - ]); - return utils.parser.parseFromDecimals(balance, decimals); + const balance = await callL1Contract(contract, 'balanceOf', [account]); + return parseFromDecimals(balance, decimals); } else { - const {balance} = await utils.blockchain.starknet.callContract( - contract, - 'balanceOf', - account, - {blockIdentifier: TransactionStatus.PENDING.toLowerCase()} - ); - return utils.parser.parseFromUint256(balance, decimals); + const {balance} = await callL2Contract(contract, 'balanceOf', account, { + blockIdentifier: TransactionStatus.PENDING.toLowerCase() + }); + return parseFromUint256(balance, decimals); } } catch (ex) { return Promise.reject(ex); @@ -51,7 +40,7 @@ export const balanceOf = async ({account, decimals, contract}, isL1 = true) => { export const ethBalanceOf = async account => { try { const balance = await web3.eth.getBalance(account); - return utils.parser.parseFromDecimals(balance); + return parseFromDecimals(balance); } catch (ex) { return Promise.reject(ex); } diff --git a/src/components/Containers/Header/Header.js b/src/components/Containers/Header/Header.js index f498c15d..1f7806cc 100644 --- a/src/components/Containers/Header/Header.js +++ b/src/components/Containers/Header/Header.js @@ -10,7 +10,7 @@ import {useLogin} from '../../../providers/AppProvider'; import {useMenu} from '../../../providers/MenuProvider'; import {useIsL1, useIsL2} from '../../../providers/TransferProvider'; import {useL1Wallet, useL2Wallet} from '../../../providers/WalletsProvider'; -import utils from '../../../utils'; +import {openInNewTab, toClasses} from '../../../utils'; import {Tab, WalletButton} from '../../UI'; import styles from './Header.module.scss'; @@ -61,20 +61,20 @@ export const Header = () => { const onTabDiscordClick = () => { trackDiscordClick(); - utils.browser.openInNewTab(DISCORD_LINK_URL); + openInNewTab(DISCORD_LINK_URL); }; return ( - <div className={utils.object.toClasses(styles.header, styles[breakpoint.toLowerCase()], 'row')}> - <div className={utils.object.toClasses(styles.left, 'row')}> - <div className={utils.object.toClasses(styles.logo, 'row')} onClick={onLogoClick}> + <div className={toClasses(styles.header, styles[breakpoint.toLowerCase()], 'row')}> + <div className={toClasses(styles.left, 'row')}> + <div className={toClasses(styles.logo, 'row')} onClick={onLogoClick}> <StarkGateLogo /> </div> {supportedChainId === ChainType.L1.GOERLI && ( - <div className={utils.object.toClasses(styles.chain, 'row')}>{chainTxt}</div> + <div className={toClasses(styles.chain, 'row')}>{chainTxt}</div> )} </div> - <div className={utils.object.toClasses(styles.right, 'row')}> + <div className={toClasses(styles.right, 'row')}> <Tab color={colorDiscord} label={tabDiscordTxt} onClick={onTabDiscordClick} /> <Tab color={colorWhiteOp50} label={tabTermsTxt} onClick={onTabTermsClick} /> <Tab color={colorWhiteOp50} label={tabFaqTxt} onClick={onTabFaqClick} /> diff --git a/src/components/Features/Account/Account.js b/src/components/Features/Account/Account.js index 6e5af2b6..e3993843 100644 --- a/src/components/Features/Account/Account.js +++ b/src/components/Features/Account/Account.js @@ -12,7 +12,7 @@ import {useMenu} from '../../../providers/MenuProvider'; import {useTransfer} from '../../../providers/TransferProvider'; import {useAccountTransfersLog} from '../../../providers/TransfersLogProvider'; import {useWallets} from '../../../providers/WalletsProvider'; -import utils from '../../../utils'; +import {evaluate, findIndexById} from '../../../utils'; import { AccountAddress, BackButton, @@ -63,7 +63,7 @@ export const Account = ({transferId}) => { <Menu> <div> <BackButton onClick={() => showTransferMenu()} /> - <MenuTitle text={utils.object.evaluate(titleTxt, {network: fromNetwork.name})} /> + <MenuTitle text={evaluate(titleTxt, {network: fromNetwork.name})} /> <AccountAddress address={account} onClick={trackAddressCopied} /> {isL1 && ( <LinkButton @@ -80,7 +80,7 @@ export const Account = ({transferId}) => { /> )} <TransferLogContainer - transferIndex={utils.object.findIndexById(transfers, transferId)} + transferIndex={findIndexById(transfers, transferId)} onShowTransfers={trackViewTransfersLog} > {renderTransfers()} diff --git a/src/components/Features/ToastProvider/ToastProvider.js b/src/components/Features/ToastProvider/ToastProvider.js index e7a059fa..c19a4032 100644 --- a/src/components/Features/ToastProvider/ToastProvider.js +++ b/src/components/Features/ToastProvider/ToastProvider.js @@ -18,7 +18,7 @@ import {useCompleteTransferToL1, usePrevious, useToastsTranslation} from '../../ import {useMenu} from '../../../providers/MenuProvider'; import {useIsL1, useIsL2} from '../../../providers/TransferProvider'; import {useTransfersLog} from '../../../providers/TransfersLogProvider'; -import utils from '../../../utils'; +import {getFullTime} from '../../../utils'; import {CompleteTransferToL1Toast, ToastBody, TransferToast} from '../../UI'; import styles from './ToastProvider.module.scss'; @@ -201,7 +201,7 @@ export const TransferData = ({transfer, style}) => { style={style} /> <ToastBody body={`${transfer.amount} ${transfer.symbol}`} style={style} /> - <ToastBody body={utils.date.getFullTime(transfer.timestamp)} style={style} /> + <ToastBody body={getFullTime(transfer.timestamp)} style={style} /> </> ); }; diff --git a/src/components/Features/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer.js index 49e5cfeb..577a0b44 100644 --- a/src/components/Features/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer.js @@ -11,7 +11,7 @@ import { import {useMenu} from '../../../providers/MenuProvider'; import {useL1Token, useL2Token, useTokens} from '../../../providers/TokensProvider'; import {useAmount, useIsL1, useIsL2, useTransfer} from '../../../providers/TransferProvider'; -import utils from '../../../utils'; +import {afterDecimal, evaluate, isNegative, isZero} from '../../../utils'; import { Loading, LoadingSize, @@ -56,7 +56,7 @@ export const Transfer = () => { useEffect(() => { if (selectedToken) { setHasInputError(false); - if (selectedToken.isLoading || utils.number.isZero(amount) || (isL1 && !maxDeposit)) { + if (selectedToken.isLoading || isZero(amount) || (isL1 && !maxDeposit)) { setIsButtonDisabled(true); } else { validateAmount(); @@ -67,15 +67,15 @@ export const Transfer = () => { const validateAmount = () => { let errorMsg = ''; - if (utils.number.afterDecimal(amount) > selectedToken.decimals) { + if (afterDecimal(amount) > selectedToken.decimals) { errorMsg = tooManyDigitsErrorMsg; - } else if (utils.number.isNegative(amount)) { + } else if (isNegative(amount)) { errorMsg = negativeValueErrorMsg; } else if (amount > selectedToken.balance) { errorMsg = insufficientBalanceErrorMsg; } else if (isL1 && amount > maxDeposit) { const {symbol} = selectedToken; - errorMsg = utils.object.evaluate(maxDepositErrorMsg, {maxDeposit, symbol}); + errorMsg = evaluate(maxDepositErrorMsg, {maxDeposit, symbol}); } if (errorMsg) { diff --git a/src/components/Features/TransferLog/TransferLog.js b/src/components/Features/TransferLog/TransferLog.js index 9a585ae9..23bc9f93 100644 --- a/src/components/Features/TransferLog/TransferLog.js +++ b/src/components/Features/TransferLog/TransferLog.js @@ -11,7 +11,7 @@ import { } from '../../../enums'; import {useColors, useEnvs, useTransferLogTranslation} from '../../../hooks'; import {useTransfer} from '../../../providers/TransferProvider'; -import utils from '../../../utils'; +import {getFullTime, toClasses} from '../../../utils'; import {Button, CryptoLogo, CryptoLogoSize} from '../../UI'; import {LinkButton} from '../../UI/LinkButton/LinkButton'; import styles from './TransferLog.module.scss'; @@ -28,7 +28,7 @@ export const TransferLog = ({transfer, onCompleteTransferClick, onTxClick}) => { const renderTransferStatus = () => { return !isOnChain(status) ? ( - <div className={utils.object.toClasses(styles.data, isRejected(status) && styles.error)}> + <div className={toClasses(styles.data, isRejected(status) && styles.error)}> {TransactionStatusFriendlyMessage[status]} </div> ) : null; @@ -67,7 +67,7 @@ export const TransferLog = ({transfer, onCompleteTransferClick, onTxClick}) => { <CryptoLogo size={CryptoLogoSize.SMALL} symbol={symbol} /> <div> {name} - <div className={styles.data}>{`${utils.date.getFullTime(timestamp)}`}</div> + <div className={styles.data}>{`${getFullTime(timestamp)}`}</div> </div> </div> <div className={styles.right}> diff --git a/src/components/UI/AccountAddress/AccountAddress.js b/src/components/UI/AccountAddress/AccountAddress.js index 595a8cb5..8f64167c 100644 --- a/src/components/UI/AccountAddress/AccountAddress.js +++ b/src/components/UI/AccountAddress/AccountAddress.js @@ -3,7 +3,7 @@ import React, {useRef} from 'react'; import {ReactComponent as CopyIcon} from '../../../assets/svg/icons/copy.svg'; import {useAccountTranslation, useAnimation} from '../../../hooks'; -import utils from '../../../utils'; +import {toClasses} from '../../../utils'; import styles from './AccountAddress.module.scss'; const COPIED_ANIMATION_TIMEOUT_INTERVAL = 1000; @@ -26,9 +26,7 @@ export const AccountAddress = ({address, onClick}) => { {address.length <= 42 ? address : `${address.substring(0, 42)}...`} <CopyIcon onClick={onCopyClick} /> </div> - <div className={utils.object.toClasses(styles.copiedMsg, isAnimate && styles.copied)}> - {copiedMsgTxt} - </div> + <div className={toClasses(styles.copiedMsg, isAnimate && styles.copied)}>{copiedMsgTxt}</div> </> ); }; diff --git a/src/components/UI/Button/Button.js b/src/components/UI/Button/Button.js index f54a0705..a9029638 100644 --- a/src/components/UI/Button/Button.js +++ b/src/components/UI/Button/Button.js @@ -1,7 +1,7 @@ import PropTypes from 'prop-types'; import React, {useState} from 'react'; -import utils from '../../../utils'; +import {toClasses} from '../../../utils'; import {Loading, LoadingSize} from '../Loading/Loading'; import styles from './Button.module.scss'; @@ -35,7 +35,7 @@ export const Button = ({ return ( <button - className={utils.object.toClasses( + className={toClasses( styles.button, isDisabled && styles.isDisabled, isLoading && styles.isLoading, diff --git a/src/components/UI/Icon/Icon.js b/src/components/UI/Icon/Icon.js index 7350819c..78490109 100644 --- a/src/components/UI/Icon/Icon.js +++ b/src/components/UI/Icon/Icon.js @@ -1,12 +1,12 @@ import PropTypes from 'prop-types'; import React from 'react'; -import utils from '../../../utils'; +import {toClasses} from '../../../utils'; import styles from './Icon.module.scss'; export const Icon = ({isClickable, onClick, style, className, children}) => ( <div - className={utils.object.toClasses(styles.icon, className)} + className={toClasses(styles.icon, className)} style={{ cursor: isClickable ? 'pointer' : 'default', ...style diff --git a/src/components/UI/Input/Input.js b/src/components/UI/Input/Input.js index 9fd209a6..7c08c7bf 100644 --- a/src/components/UI/Input/Input.js +++ b/src/components/UI/Input/Input.js @@ -1,13 +1,13 @@ import PropTypes from 'prop-types'; import React, {forwardRef} from 'react'; -import utils from '../../../utils'; +import {toClasses} from '../../../utils'; import styles from './Input.Module.scss'; export const Input = forwardRef(({isDisabled, ...props}, ref) => ( <input ref={ref} - className={utils.object.toClasses(styles.input, isDisabled && styles.isDisabled)} + className={toClasses(styles.input, isDisabled && styles.isDisabled)} {...props} /> )); diff --git a/src/components/UI/LinkButton/LinkButton.js b/src/components/UI/LinkButton/LinkButton.js index fc6766cb..7a9a280c 100644 --- a/src/components/UI/LinkButton/LinkButton.js +++ b/src/components/UI/LinkButton/LinkButton.js @@ -2,18 +2,18 @@ import PropTypes from 'prop-types'; import React from 'react'; import {ReactComponent as RedirectIcon} from '../../../assets/svg/icons/redirect.svg'; -import utils from '../../../utils'; +import {openInNewTab, toClasses} from '../../../utils'; import styles from './LinkButton.module.scss'; export const LinkButton = ({text, url, isDisabled, onClick}) => { const onClickInternal = () => { - utils.browser.openInNewTab(url); + openInNewTab(url); onClick(); }; return ( <div - className={utils.object.toClasses(styles.linkButton, isDisabled && styles.isDisabled)} + className={toClasses(styles.linkButton, isDisabled && styles.isDisabled)} onClick={onClickInternal} > {text} diff --git a/src/components/UI/Menu/Menu.js b/src/components/UI/Menu/Menu.js index 86e59e09..edb01396 100644 --- a/src/components/UI/Menu/Menu.js +++ b/src/components/UI/Menu/Menu.js @@ -1,7 +1,7 @@ import PropTypes from 'prop-types'; import React, {useEffect, useState} from 'react'; -import utils from '../../../utils'; +import {toClasses} from '../../../utils'; import styles from './Menu.module.scss'; export const Menu = ({children}) => { @@ -14,7 +14,7 @@ export const Menu = ({children}) => { }; }, []); - return <div className={utils.object.toClasses(styles.menu, show && styles.show)}>{children}</div>; + return <div className={toClasses(styles.menu, show && styles.show)}>{children}</div>; }; Menu.propTypes = { diff --git a/src/components/UI/Modal/Modal/Modal.js b/src/components/UI/Modal/Modal/Modal.js index c2a28ba8..acdf9984 100644 --- a/src/components/UI/Modal/Modal/Modal.js +++ b/src/components/UI/Modal/Modal/Modal.js @@ -3,7 +3,7 @@ import React from 'react'; import {createPortal} from 'react-dom'; import {ModalSize, ModalType} from '../../../../enums'; -import utils from '../../../../utils'; +import {toClasses} from '../../../../utils'; import styles from './Modal.module.scss'; export const Modal = ({show, type = ModalType.INFO, size = ModalSize.MEDIUM, children}) => { @@ -11,9 +11,9 @@ export const Modal = ({show, type = ModalType.INFO, size = ModalSize.MEDIUM, chi return show ? createPortal( - <div className={utils.object.toClasses(styles.modal, styles[type])}> + <div className={toClasses(styles.modal, styles[type])}> <div - className={utils.object.toClasses(styles.container, styles[type])} + className={toClasses(styles.container, styles[type])} style={{width, maxWidth: width}} > {children} diff --git a/src/components/UI/Modal/ModalBody/ModalBody.js b/src/components/UI/Modal/ModalBody/ModalBody.js index c4122474..055a103f 100644 --- a/src/components/UI/Modal/ModalBody/ModalBody.js +++ b/src/components/UI/Modal/ModalBody/ModalBody.js @@ -2,11 +2,11 @@ import PropTypes from 'prop-types'; import React from 'react'; import {ModalType} from '../../../../enums'; -import utils from '../../../../utils'; +import {toClasses} from '../../../../utils'; import styles from './ModalBody.module.scss'; export const ModalBody = ({type = ModalType.INFO, children}) => ( - <div className={utils.object.toClasses(styles.modalBody, styles[type])}>{children}</div> + <div className={toClasses(styles.modalBody, styles[type])}>{children}</div> ); ModalBody.propTypes = { diff --git a/src/components/UI/Modal/ModalHeader/ModalHeader.js b/src/components/UI/Modal/ModalHeader/ModalHeader.js index ce37cb63..03fd7172 100644 --- a/src/components/UI/Modal/ModalHeader/ModalHeader.js +++ b/src/components/UI/Modal/ModalHeader/ModalHeader.js @@ -2,11 +2,11 @@ import PropTypes from 'prop-types'; import React from 'react'; import {ModalType} from '../../../../enums'; -import utils from '../../../../utils'; +import {toClasses} from '../../../../utils'; import styles from './ModalHeader.module.scss'; export const ModalHeader = ({type = ModalType.INFO, children}) => { - return <div className={utils.object.toClasses(styles.modalHeader, styles[type])}>{children}</div>; + return <div className={toClasses(styles.modalHeader, styles[type])}>{children}</div>; }; ModalHeader.propTypes = { diff --git a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js index 0161f192..ce962bc2 100644 --- a/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js +++ b/src/components/UI/Modal/TransactionSubmittedModal/TransactionSubmittedModal.js @@ -10,7 +10,7 @@ import { useEnvs, useTransactionSubmittedModalTranslation } from '../../../../hooks'; -import utils from '../../../../utils'; +import {evaluate, openInNewTab} from '../../../../utils'; import {Button} from '../../Button/Button'; import {Circle} from '../../Circle/Circle'; import {TransferToL1Message, TransferToL2Message} from '../ModalMessage'; @@ -62,7 +62,7 @@ const TransactionSubmittedModal = ({transfer}) => { key={index} networkLogo={eb.explorerLogo} networkName={eb.explorerName} - onClick={() => utils.browser.openInNewTab(eb.explorerUrl)} + onClick={() => openInNewTab(eb.explorerUrl)} /> )); }; @@ -90,7 +90,7 @@ const TransactionSubmittedModalButton = ({networkName, networkLogo, onClick}) => {networkLogo} </Circle> } - text={utils.object.evaluate(btnTxt, {explorer: networkName})} + text={evaluate(btnTxt, {explorer: networkName})} onClick={onClick} /> ); diff --git a/src/components/UI/NetworkSwap/NetworkSwap.js b/src/components/UI/NetworkSwap/NetworkSwap.js index 43d472ee..e9033153 100644 --- a/src/components/UI/NetworkSwap/NetworkSwap.js +++ b/src/components/UI/NetworkSwap/NetworkSwap.js @@ -3,7 +3,7 @@ import React from 'react'; import {ReactComponent as SwapIcon} from '../../../assets/svg/icons/swap.svg'; import {useColors} from '../../../hooks'; -import utils from '../../../utils'; +import {toClasses} from '../../../utils'; import {Circle} from '../index'; import styles from './NetworkSwap.module.scss'; @@ -11,10 +11,7 @@ export const NetworkSwap = ({isFlipped, onClick}) => { const {colorAlpha5} = useColors(); return ( - <div - className={utils.object.toClasses(styles.networkSwap, isFlipped && styles.flipped)} - onClick={onClick} - > + <div className={toClasses(styles.networkSwap, isFlipped && styles.flipped)} onClick={onClick}> <Circle color={colorAlpha5} size={50} diff --git a/src/components/UI/SelectTokenRow/SelectTokenRow.js b/src/components/UI/SelectTokenRow/SelectTokenRow.js index bbda6932..c999529c 100644 --- a/src/components/UI/SelectTokenRow/SelectTokenRow.js +++ b/src/components/UI/SelectTokenRow/SelectTokenRow.js @@ -1,7 +1,7 @@ import PropTypes from 'prop-types'; import React from 'react'; -import utils from '../../../utils'; +import {formatBalance, toClasses} from '../../../utils'; import {CryptoLogoSize} from '../CryptoLogo/CryptoLogo'; import {CryptoLogo, Loading, LoadingSize} from '../index'; import styles from './SelectTokenRow.module.scss'; @@ -11,7 +11,7 @@ export const SelectTokenRow = ({tokenData, onClick}) => { return ( <div - className={utils.object.toClasses(styles.selectTokenRow, isLoading && styles.isLoading)} + className={toClasses(styles.selectTokenRow, isLoading && styles.isLoading)} onClick={() => onClick(tokenData)} > <hr /> @@ -27,7 +27,7 @@ export const SelectTokenRow = ({tokenData, onClick}) => { <> {!isLoading ? ( <div className={styles.balance}> - {utils.wallet.formatBalance(balance)} {symbol} + {formatBalance(balance)} {symbol} </div> ) : ( <Loading size={LoadingSize.SMALL} /> diff --git a/src/components/UI/TokenBalance/TokenBalance.js b/src/components/UI/TokenBalance/TokenBalance.js index 549a03bb..68ee3bc0 100644 --- a/src/components/UI/TokenBalance/TokenBalance.js +++ b/src/components/UI/TokenBalance/TokenBalance.js @@ -2,8 +2,7 @@ import PropTypes from 'prop-types'; import React from 'react'; import {useTransferTranslation} from '../../../hooks'; -import utils from '../../../utils'; -import {toClasses} from '../../../utils/object'; +import {formatBalance, shortenBalance, toClasses} from '../../../utils'; import {Loading, LoadingSize, RefreshIcon} from '../index'; import styles from './TokenBalance.module.scss'; @@ -19,7 +18,7 @@ export const TokenBalance = ({tokenData, onRefreshClick}) => { {isLoading ? ( <Loading size={LoadingSize.SMALL} /> ) : ( - utils.wallet.shortenBalance(utils.wallet.formatBalance(balance)) + shortenBalance(formatBalance(balance)) )} <div className={styles.symbol}>{symbol}</div> </div> diff --git a/src/components/UI/TokenInput/TokenInput.js b/src/components/UI/TokenInput/TokenInput.js index ba8a26f0..e21180a5 100644 --- a/src/components/UI/TokenInput/TokenInput.js +++ b/src/components/UI/TokenInput/TokenInput.js @@ -2,7 +2,7 @@ import PropTypes from 'prop-types'; import React from 'react'; import {useTransferTranslation} from '../../../hooks'; -import utils from '../../../utils'; +import {toClasses} from '../../../utils'; import {MaxButton} from '../MaxButton/MaxButton'; import {TokenSelector} from '../TokenSelector/TokenSelector'; import {Input} from '../index'; @@ -19,7 +19,7 @@ export const TokenInput = ({ const {inputPlaceholderTxt} = useTransferTranslation(); return ( - <div className={utils.object.toClasses(styles.tokenInput, hasError && styles.hasError)}> + <div className={toClasses(styles.tokenInput, hasError && styles.hasError)}> <Input placeholder={inputPlaceholderTxt} style={{ diff --git a/src/components/UI/TransferLogContainer/TransferLogContainer.js b/src/components/UI/TransferLogContainer/TransferLogContainer.js index 0644b13d..8561e7fb 100644 --- a/src/components/UI/TransferLogContainer/TransferLogContainer.js +++ b/src/components/UI/TransferLogContainer/TransferLogContainer.js @@ -4,7 +4,7 @@ import React, {useState} from 'react'; import {ReactComponent as CollapseIcon} from '../../../assets/svg/icons/collapse.svg'; import {useTransferLogContainerTranslation} from '../../../hooks'; import {useMenu} from '../../../providers/MenuProvider'; -import utils from '../../../utils'; +import {toClasses} from '../../../utils'; import styles from './TransferLogContainer.module.scss'; export const TransferLogContainer = ({transferIndex, children, onShowTransfers}) => { @@ -35,7 +35,7 @@ export const TransferLogContainer = ({transferIndex, children, onShowTransfers}) return ( <div className={styles.transferLogContainer}> - <div className={utils.object.toClasses(styles.title, showChildren && styles.showChildren)}> + <div className={toClasses(styles.title, showChildren && styles.showChildren)}> {titleTxt} {children && ( <div> diff --git a/src/components/UI/TransferMenuTab/TransferMenuTab.js b/src/components/UI/TransferMenuTab/TransferMenuTab.js index 14dbcbbe..13cf8820 100644 --- a/src/components/UI/TransferMenuTab/TransferMenuTab.js +++ b/src/components/UI/TransferMenuTab/TransferMenuTab.js @@ -1,14 +1,11 @@ import PropTypes from 'prop-types'; import React from 'react'; -import utils from '../../../utils'; +import {toClasses} from '../../../utils'; import styles from './TransferMenuTab.module.scss'; export const TransferMenuTab = ({text, isActive, onClick}) => ( - <div - className={utils.object.toClasses(styles.transferMenuTab, isActive && styles.isActive)} - onClick={onClick} - > + <div className={toClasses(styles.transferMenuTab, isActive && styles.isActive)} onClick={onClick}> {text} </div> ); diff --git a/src/components/UI/WalletButton/WalletButton.js b/src/components/UI/WalletButton/WalletButton.js index a931b6d4..bf7cc697 100644 --- a/src/components/UI/WalletButton/WalletButton.js +++ b/src/components/UI/WalletButton/WalletButton.js @@ -4,8 +4,7 @@ import useBreakpoint from 'use-breakpoint'; import {Breakpoint, isDesktop, isMobile, isMobileOrTablet} from '../../../enums'; import {useColors, useHeaderTranslation} from '../../../hooks'; -import utils from '../../../utils'; -import {toClasses} from '../../../utils/object'; +import {evaluate, shortenAddress, toClasses} from '../../../utils'; import {Button, DynamicIcon} from '../index'; import styles from './WalletButton.module.scss'; @@ -18,13 +17,13 @@ export const WalletButton = ({account, logoPath, onClick}) => { const {breakpoint} = useBreakpoint(Breakpoint); const getText = () => { - const address = utils.wallet.shortenAddress(account); + const address = shortenAddress(account); if (isMobileOrTablet(breakpoint)) { return ''; } else if (!isDesktop(breakpoint)) { return address; } - return utils.object.evaluate(walletBtnTxt, {address}); + return evaluate(walletBtnTxt, {address}); }; const renderWalletLogo = () => { diff --git a/src/components/UI/WalletLogin/WalletLogin.js b/src/components/UI/WalletLogin/WalletLogin.js index a9e36eed..6f7db56b 100644 --- a/src/components/UI/WalletLogin/WalletLogin.js +++ b/src/components/UI/WalletLogin/WalletLogin.js @@ -2,8 +2,7 @@ import PropTypes from 'prop-types'; import React from 'react'; import {ReactComponent as ForwardIcon} from '../../../assets/svg/icons/forward.svg'; -import utils from '../../../utils'; -import {toClasses} from '../../../utils/object'; +import {toClasses, capitalize} from '../../../utils'; import {DynamicIcon} from '../index'; import styles from './WalletLogin.module.scss'; @@ -16,8 +15,8 @@ export const WalletLogin = ({name, description, logoPath, isDisabled, onClick}) <div className={styles.left}> <DynamicIcon path={logoPath} size={41} /> <div className={styles.text}> - <div className={styles.title}>{utils.string.capitalize(name)}</div> - <div className={styles.description}>{utils.string.capitalize(description)}</div> + <div className={styles.title}>{capitalize(name)}</div> + <div className={styles.description}>{capitalize(description)}</div> </div> </div> <ForwardIcon /> diff --git a/src/config/constants.js b/src/config/constants.js index 7c060799..f3db29a7 100644 --- a/src/config/constants.js +++ b/src/config/constants.js @@ -1,14 +1,10 @@ -const constants = { - ETHERSCAN: 'Etherscan', - VOYAGER: 'Voyager', - DISCORD_LINK_URL: '//discord.gg/MRjKBXtaDt', - FETCH_TOKEN_BALANCE_MAX_RETRY: 5, - STARKWARE_SITE_URL: 'https://starkware.co/', - STARKGATE_DOCS_URL: 'https://starknet.io/documentation/starkgate-token-bridge', - STARKNET_DOCS_URL: 'https://starknet.io/documentation/', - STARKGATE_MAIL_ADDRESS: 'starkgate@starknet.io', - STARKGATE_CONTRACTS_URL: - 'https://github.com/starkware-libs/starkgate-contracts/tree/main/src/starkware/starknet/apps/starkgate' -}; - -export default constants; +export const ETHERSCAN = 'Etherscan'; +export const VOYAGER = 'Voyager'; +export const DISCORD_LINK_URL = '//discord.gg/MRjKBXtaDt'; +export const FETCH_TOKEN_BALANCE_MAX_RETRY = 5; +export const STARKWARE_SITE_URL = 'https://starkware.co/'; +export const STARKGATE_DOCS_URL = 'https://starknet.io/documentation/starkgate-token-bridge'; +export const STARKNET_DOCS_URL = 'https://starknet.io/documentation/'; +export const STARKGATE_MAIL_ADDRESS = 'starkgate@starknet.io'; +export const STARKGATE_CONTRACTS_URL = + 'https://github.com/starkware-libs/starkgate-contracts/tree/main/src/starkware/starknet/apps/starkgate'; diff --git a/src/config/envs.js b/src/config/envs.js index fcf52fec..3d932811 100644 --- a/src/config/envs.js +++ b/src/config/envs.js @@ -1,27 +1,22 @@ -import utils from '../utils'; +import {evaluate} from '../utils'; -const envs = { - env: process.env.NODE_ENV, - appUrl: process.env.REACT_APP_URL, - autoConnect: process.env.REACT_APP_AUTO_CONNECT === 'true', - pollBlockNumberInterval: Number(process.env.REACT_APP_POLL_BLOCK_NUMBER_INTERVAL), - supportedTokens: process.env.REACT_APP_SUPPORTED_TOKENS.split(','), - supportedChainId: Number(process.env.REACT_APP_SUPPORTED_CHAIN_ID), - starknetContractAddress: process.env.REACT_APP_STARKNET_CONTRACT_ADDRESS, - etherscanUrl: process.env.REACT_APP_ETHERSCAN_URL, - etherscanTxUrl: tx => - utils.object.evaluate(`${process.env.REACT_APP_ETHERSCAN_URL}/tx/{{tx}}`, {tx}), - etherscanAccountUrl: address => - utils.object.evaluate(`${process.env.REACT_APP_ETHERSCAN_URL}/address/{{address}}`, {address}), - voyagerUrl: process.env.REACT_APP_VOYAGER_URL, - voyagerTxUrl: tx => utils.object.evaluate(`${process.env.REACT_APP_VOYAGER_URL}/tx/{{tx}}`, {tx}), - voyagerAccountUrl: contract => - utils.object.evaluate(`${process.env.REACT_APP_VOYAGER_URL}/contract/{{contract}}`, {contract}), - localStorageTransfersLogKey: process.env.REACT_APP_LOCAL_STORAGE_TRANSFERS_LOG_KEY, - localStorageOnboardingExpirationTimestampKey: - process.env.REACT_APP_LOCAL_STORAGE_ONBOARDING_TIMESTAMP_KEY, - onboardingModalTimeoutHrs: process.env.REACT_APP_ONBOARDING_MODAL_TIMEOUT_HRS, - localStorageAcceptTermsKey: process.env.REACT_APP_LOCAL_STORAGE_ACCEPT_TERMS -}; - -export default envs; +export const env = process.env.NODE_ENV; +export const appUrl = process.env.REACT_APP_URL; +export const autoConnect = process.env.REACT_APP_AUTO_CONNECT === 'true'; +export const pollBlockNumberInterval = Number(process.env.REACT_APP_POLL_BLOCK_NUMBER_INTERVAL); +export const supportedTokens = process.env.REACT_APP_SUPPORTED_TOKENS.split(','); +export const supportedChainId = Number(process.env.REACT_APP_SUPPORTED_CHAIN_ID); +export const starknetContractAddress = process.env.REACT_APP_STARKNET_CONTRACT_ADDRESS; +export const etherscanUrl = process.env.REACT_APP_ETHERSCAN_URL; +export const etherscanTxUrl = tx => evaluate(`${etherscanUrl}/tx/{{tx}}`, {tx}); +export const etherscanAccountUrl = address => + evaluate(`${etherscanUrl}/address/{{address}}`, {address}); +export const voyagerUrl = process.env.REACT_APP_VOYAGER_URL; +export const voyagerTxUrl = tx => evaluate(`${voyagerUrl}/tx/{{tx}}`, {tx}); +export const voyagerAccountUrl = contract => + evaluate(`${voyagerUrl}/contract/{{contract}}`, {contract}); +export const localStorageTransfersLogKey = process.env.REACT_APP_LOCAL_STORAGE_TRANSFERS_LOG_KEY; +export const localStorageOnboardingExpirationTimestampKey = + process.env.REACT_APP_LOCAL_STORAGE_ONBOARDING_TIMESTAMP_KEY; +export const onboardingModalTimeoutHrs = process.env.REACT_APP_ONBOARDING_MODAL_TIMEOUT_HRS; +export const localStorageAcceptTermsKey = process.env.REACT_APP_LOCAL_STORAGE_ACCEPT_TERMS; diff --git a/src/config/faqs.js b/src/config/faqs.js index 19633a4a..5b45592e 100644 --- a/src/config/faqs.js +++ b/src/config/faqs.js @@ -1,4 +1,4 @@ -export const faqs = [ +export default [ { question: 'Where can I find more in-depth information on how StarkGate works?', answer: ` diff --git a/src/config/strings.js b/src/config/strings.js index ba80b110..d925cb77 100644 --- a/src/config/strings.js +++ b/src/config/strings.js @@ -1,4 +1,4 @@ -const strings = { +export default { containers: { header: { chainTxt: 'Goerli testnet', @@ -128,5 +128,3 @@ const strings = { } } }; - -export default strings; diff --git a/src/config/tokens.js b/src/config/tokens.js index fb6c7108..22268d0c 100644 --- a/src/config/tokens.js +++ b/src/config/tokens.js @@ -1,161 +1,160 @@ import {ChainType, NetworkType} from '../enums'; -const l1tokens = [ - { - name: NetworkType.L1.tokenName, - symbol: NetworkType.L1.symbol, - decimals: 18, - bridgeAddress: { - [ChainType.L1.MAIN]: '0xae0Ee0A63A2cE6BaeEFFE56e7714FB4EFE48D419', - [ChainType.L1.GOERLI]: '0xc3511006C04EF1d78af4C8E0e74Ec18A6E64Ff9e' - } - }, - { - name: 'Wrapped BTC', - symbol: 'WBTC', - decimals: 8, - bridgeAddress: { - [ChainType.L1.MAIN]: '', - [ChainType.L1.GOERLI]: '0xf29aE3446Ce4688fCc792b232C21D1B9581E7baC' +export default { + L1: [ + { + name: NetworkType.L1.tokenName, + symbol: NetworkType.L1.symbol, + decimals: 18, + bridgeAddress: { + [ChainType.L1.MAIN]: '0xae0Ee0A63A2cE6BaeEFFE56e7714FB4EFE48D419', + [ChainType.L1.GOERLI]: '0xc3511006C04EF1d78af4C8E0e74Ec18A6E64Ff9e' + } }, - tokenAddress: { - [ChainType.L1.MAIN]: '', - [ChainType.L1.GOERLI]: '0xC04B0d3107736C32e19F1c62b2aF67BE61d63a05' - } - }, - { - name: 'Goerli USD Coin', - symbol: 'USDC', - decimals: 6, - bridgeAddress: { - [ChainType.L1.MAIN]: '', - [ChainType.L1.GOERLI]: '0xBA9cE9F22A3Cfa7Fcb5c31f6B2748b1e72C06204' + { + name: 'Wrapped BTC', + symbol: 'WBTC', + decimals: 8, + bridgeAddress: { + [ChainType.L1.MAIN]: '', + [ChainType.L1.GOERLI]: '0xf29aE3446Ce4688fCc792b232C21D1B9581E7baC' + }, + tokenAddress: { + [ChainType.L1.MAIN]: '', + [ChainType.L1.GOERLI]: '0xC04B0d3107736C32e19F1c62b2aF67BE61d63a05' + } }, - tokenAddress: { - [ChainType.L1.MAIN]: '', - [ChainType.L1.GOERLI]: '0x07865c6e87b9f70255377e024ace6630c1eaa37f' - } - }, - { - name: 'Tether USD', - symbol: 'USDT', - decimals: 6, - bridgeAddress: { - [ChainType.L1.MAIN]: '', - [ChainType.L1.GOERLI]: '0xA1f590F18b23EFece02804704E5006E91348C997' + { + name: 'Goerli USD Coin', + symbol: 'USDC', + decimals: 6, + bridgeAddress: { + [ChainType.L1.MAIN]: '', + [ChainType.L1.GOERLI]: '0xBA9cE9F22A3Cfa7Fcb5c31f6B2748b1e72C06204' + }, + tokenAddress: { + [ChainType.L1.MAIN]: '', + [ChainType.L1.GOERLI]: '0x07865c6e87b9f70255377e024ace6630c1eaa37f' + } }, - tokenAddress: { - [ChainType.L1.MAIN]: '', - [ChainType.L1.GOERLI]: '0x509Ee0d083DdF8AC028f2a56731412edD63223B9' - } - }, - { - name: 'DAI', - symbol: 'DAI', - decimals: 18, - bridgeAddress: { - [ChainType.L1.MAIN]: '', - [ChainType.L1.GOERLI]: '0xd8beAa22894Cd33F24075459cFba287a10a104E4' + { + name: 'Tether USD', + symbol: 'USDT', + decimals: 6, + bridgeAddress: { + [ChainType.L1.MAIN]: '', + [ChainType.L1.GOERLI]: '0xA1f590F18b23EFece02804704E5006E91348C997' + }, + tokenAddress: { + [ChainType.L1.MAIN]: '', + [ChainType.L1.GOERLI]: '0x509Ee0d083DdF8AC028f2a56731412edD63223B9' + } }, - tokenAddress: { - [ChainType.L1.MAIN]: '', - [ChainType.L1.GOERLI]: '0x11fE4B6AE13d2a6055C8D9cF65c55bac32B5d844' - } - }, - { - name: 'SelfService', - symbol: 'SLF', - decimals: 6, - bridgeAddress: { - [ChainType.L1.MAIN]: '', - [ChainType.L1.GOERLI]: '0x160e7631f22035149A01420cADD1012267551181' + { + name: 'DAI', + symbol: 'DAI', + decimals: 18, + bridgeAddress: { + [ChainType.L1.MAIN]: '', + [ChainType.L1.GOERLI]: '0xd8beAa22894Cd33F24075459cFba287a10a104E4' + }, + tokenAddress: { + [ChainType.L1.MAIN]: '', + [ChainType.L1.GOERLI]: '0x11fE4B6AE13d2a6055C8D9cF65c55bac32B5d844' + } }, - tokenAddress: { - [ChainType.L1.MAIN]: '', - [ChainType.L1.GOERLI]: '0xd44BB808bfE43095dBb94c83077766382D63952a' + { + name: 'SelfService', + symbol: 'SLF', + decimals: 6, + bridgeAddress: { + [ChainType.L1.MAIN]: '', + [ChainType.L1.GOERLI]: '0x160e7631f22035149A01420cADD1012267551181' + }, + tokenAddress: { + [ChainType.L1.MAIN]: '', + [ChainType.L1.GOERLI]: '0xd44BB808bfE43095dBb94c83077766382D63952a' + } } - } -]; - -const l2tokens = [ - { - name: NetworkType.L1.tokenName, - symbol: NetworkType.L1.symbol, - decimals: 18, - bridgeAddress: { - [ChainType.L2.MAIN]: '0x073314940630fd6dcda0d772d4c972c4e0a9946bef9dabf4ef84eda8ef542b82', - [ChainType.L2.GOERLI]: '0x073314940630fd6dcda0d772d4c972c4e0a9946bef9dabf4ef84eda8ef542b82' + ], + L2: [ + { + name: NetworkType.L1.tokenName, + symbol: NetworkType.L1.symbol, + decimals: 18, + bridgeAddress: { + [ChainType.L2.MAIN]: '0x073314940630fd6dcda0d772d4c972c4e0a9946bef9dabf4ef84eda8ef542b82', + [ChainType.L2.GOERLI]: '0x073314940630fd6dcda0d772d4c972c4e0a9946bef9dabf4ef84eda8ef542b82' + }, + tokenAddress: { + [ChainType.L2.MAIN]: '0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7', + [ChainType.L2.GOERLI]: '0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7' + } }, - tokenAddress: { - [ChainType.L2.MAIN]: '0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7', - [ChainType.L2.GOERLI]: '0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7' - } - }, - { - name: 'Wrapped BTC', - symbol: 'WBTC', - decimals: 8, - bridgeAddress: { - [ChainType.L2.MAIN]: '', - [ChainType.L2.GOERLI]: '0x72eeb90833bae233a9585f2fa9afc99c187f0a3a82693becd6a4d700b37fc6b' + { + name: 'Wrapped BTC', + symbol: 'WBTC', + decimals: 8, + bridgeAddress: { + [ChainType.L2.MAIN]: '', + [ChainType.L2.GOERLI]: '0x72eeb90833bae233a9585f2fa9afc99c187f0a3a82693becd6a4d700b37fc6b' + }, + tokenAddress: { + [ChainType.L2.MAIN]: '', + [ChainType.L2.GOERLI]: '0x12d537dc323c439dc65c976fad242d5610d27cfb5f31689a0a319b8be7f3d56' + } }, - tokenAddress: { - [ChainType.L2.MAIN]: '', - [ChainType.L2.GOERLI]: '0x12d537dc323c439dc65c976fad242d5610d27cfb5f31689a0a319b8be7f3d56' - } - }, - { - name: 'Goerli USD Coin', - symbol: 'USDC', - decimals: 6, - bridgeAddress: { - [ChainType.L2.MAIN]: '', - [ChainType.L2.GOERLI]: '0x001d5b64feabc8ac7c839753994f469704c6fabdd45c8fe6d26ed57b5eb79057' - }, - tokenAddress: { - [ChainType.L2.MAIN]: '', - [ChainType.L2.GOERLI]: '0x005a643907b9a4bc6a55e9069c4fd5fd1f5c79a22470690f75556c4736e34426' - } - }, - { - name: 'Tether USD', - symbol: 'USDT', - decimals: 6, - bridgeAddress: { - [ChainType.L2.MAIN]: '', - [ChainType.L2.GOERLI]: '0x71d54658ca3c6ccd84ff958adb7498b2e71ba008e29b643983221ed2bd71b69' + { + name: 'Goerli USD Coin', + symbol: 'USDC', + decimals: 6, + bridgeAddress: { + [ChainType.L2.MAIN]: '', + [ChainType.L2.GOERLI]: '0x001d5b64feabc8ac7c839753994f469704c6fabdd45c8fe6d26ed57b5eb79057' + }, + tokenAddress: { + [ChainType.L2.MAIN]: '', + [ChainType.L2.GOERLI]: '0x005a643907b9a4bc6a55e9069c4fd5fd1f5c79a22470690f75556c4736e34426' + } }, - tokenAddress: { - [ChainType.L2.MAIN]: '', - [ChainType.L2.GOERLI]: '0x386e8d061177f19b3b485c20e31137e6f6bc497cc635ccdfcab96fadf5add6a' - } - }, - { - name: 'DAI', - symbol: 'DAI', - decimals: 18, - bridgeAddress: { - [ChainType.L2.MAIN]: '', - [ChainType.L2.GOERLI]: '0x0278f24c3e74cbf7a375ec099df306289beb0605a346277d200b791a7f811a19' + { + name: 'Tether USD', + symbol: 'USDT', + decimals: 6, + bridgeAddress: { + [ChainType.L2.MAIN]: '', + [ChainType.L2.GOERLI]: '0x71d54658ca3c6ccd84ff958adb7498b2e71ba008e29b643983221ed2bd71b69' + }, + tokenAddress: { + [ChainType.L2.MAIN]: '', + [ChainType.L2.GOERLI]: '0x386e8d061177f19b3b485c20e31137e6f6bc497cc635ccdfcab96fadf5add6a' + } }, - tokenAddress: { - [ChainType.L2.MAIN]: '', - [ChainType.L2.GOERLI]: '0x03e85bfbb8e2a42b7bead9e88e9a1b19dbccf661471061807292120462396ec9' - } - }, - { - name: 'SelfService', - symbol: 'SLF', - decimals: 6, - bridgeAddress: { - [ChainType.L2.MAIN]: '', - [ChainType.L2.GOERLI]: '0x00fd2a9843c19436542e0ac7fc7b5cbf1d0b69fc2abea6d68591e46a5ca2d75a' + { + name: 'DAI', + symbol: 'DAI', + decimals: 18, + bridgeAddress: { + [ChainType.L2.MAIN]: '', + [ChainType.L2.GOERLI]: '0x0278f24c3e74cbf7a375ec099df306289beb0605a346277d200b791a7f811a19' + }, + tokenAddress: { + [ChainType.L2.MAIN]: '', + [ChainType.L2.GOERLI]: '0x03e85bfbb8e2a42b7bead9e88e9a1b19dbccf661471061807292120462396ec9' + } }, - tokenAddress: { - [ChainType.L2.MAIN]: '', - [ChainType.L2.GOERLI]: '0x07a39a50bf689e9430fc81fba0f4d46e245e1657e77455548ed7e32c808cfc10' + { + name: 'SelfService', + symbol: 'SLF', + decimals: 6, + bridgeAddress: { + [ChainType.L2.MAIN]: '', + [ChainType.L2.GOERLI]: '0x00fd2a9843c19436542e0ac7fc7b5cbf1d0b69fc2abea6d68591e46a5ca2d75a' + }, + tokenAddress: { + [ChainType.L2.MAIN]: '', + [ChainType.L2.GOERLI]: '0x07a39a50bf689e9430fc81fba0f4d46e245e1657e77455548ed7e32c808cfc10' + } } - } -]; - -export {l1tokens, l2tokens}; + ] +}; diff --git a/src/config/wallets.js b/src/config/wallets.js index 5a65fd6a..91c3f111 100644 --- a/src/config/wallets.js +++ b/src/config/wallets.js @@ -1,21 +1,19 @@ -import {WalletType} from '../enums'; - -const wallets = [ - { - id: 'metamask', - name: 'MetaMask', - connectorId: 'injected', - type: WalletType.L1, - description: 'Login using a browser wallet', - logoPath: 'wallets/metamask/logo.svg' - }, - { - id: 'gsw', - name: 'StarkNet Wallet', - type: WalletType.L2, - description: 'Login using a browser wallet', - logoPath: 'wallets/gsw/logo.svg' - } -]; - -export default wallets; +export default { + L1: [ + { + id: 'metamask', + name: 'MetaMask', + connectorId: 'injected', + description: 'Login using a browser wallet', + logoPath: 'wallets/metamask/logo.svg' + } + ], + L2: [ + { + id: 'gsw', + name: 'StarkNet Wallet', + description: 'Login using a browser wallet', + logoPath: 'wallets/gsw/logo.svg' + } + ] +}; diff --git a/src/enums/WalletType.js b/src/enums/WalletType.js deleted file mode 100644 index 32de2873..00000000 --- a/src/enums/WalletType.js +++ /dev/null @@ -1,4 +0,0 @@ -export const WalletType = { - L1: 'ethereum', - L2: 'starknet' -}; diff --git a/src/enums/index.js b/src/enums/index.js index ae3987a5..dda1ac8b 100644 --- a/src/enums/index.js +++ b/src/enums/index.js @@ -2,7 +2,6 @@ export * from './ChainType'; export * from './MenuType'; export * from './ActionType'; export * from './NetworkType'; -export * from './WalletType'; export * from './WalletStatus'; export * from './TransactionStatus'; export * from './TransactionHashPrefix'; diff --git a/src/hooks/index.js b/src/hooks/index.js index 58d2197d..dca2a556 100644 --- a/src/hooks/index.js +++ b/src/hooks/index.js @@ -1,7 +1,4 @@ export * from './useAnimation'; -export * from './useIsLoading'; -export * from './useWindowSize'; -export * from './useVars'; export * from './useColors'; export * from './useContract'; export * from './useLogger'; diff --git a/src/hooks/useConstants.js b/src/hooks/useConstants.js index a3f335a0..e4bf7e5d 100644 --- a/src/hooks/useConstants.js +++ b/src/hooks/useConstants.js @@ -1,5 +1,5 @@ import {useMemo} from 'react'; -import constants from '../config/constants'; +import * as constants from '../config/constants'; export const useConstants = () => useMemo(() => constants, []); diff --git a/src/hooks/useContract.js b/src/hooks/useContract.js index 79885611..e0e8ab58 100644 --- a/src/hooks/useContract.js +++ b/src/hooks/useContract.js @@ -6,7 +6,7 @@ import {NetworkType} from '../enums'; import {useL1Token} from '../providers/TokensProvider'; import {useTransfer} from '../providers/TransferProvider'; import {useL1Wallet, useL2Wallet} from '../providers/WalletsProvider'; -import utils from '../utils'; +import {createL1Contract, createL2Contract} from '../utils'; import {useEnvs} from './useEnvs'; const cache = {}; @@ -65,14 +65,14 @@ export const useTokenBridgeContract = () => { export const useL2TokenContract = () => { const {chainId} = useL2Wallet(); - const getContract = useContract(L2_ERC20_ABI, chainId, utils.blockchain.starknet.createContract); + const getContract = useContract(L2_ERC20_ABI, chainId, createL2Contract); return useCallback(tokenAddresses => getContract(tokenAddresses), [getContract]); }; export const useL1TokenContract = () => { const {chainId} = useL1Wallet(); - const getContract = useContract(L1_ERC20_ABI, chainId, utils.blockchain.ethereum.createContract); + const getContract = useContract(L1_ERC20_ABI, chainId, createL1Contract); return useCallback(tokenAddresses => getContract(tokenAddresses), [getContract]); }; @@ -80,34 +80,22 @@ export const useL1TokenContract = () => { export const useStarknetContract = () => { const {starknetContractAddress} = useEnvs(); const {chainId} = useL1Wallet(); - const getContract = useContract( - L1_MESSAGING_ABI, - chainId, - utils.blockchain.ethereum.createContract - ); + const getContract = useContract(L1_MESSAGING_ABI, chainId, createL1Contract); return useMemo(() => getContract(starknetContractAddress), [getContract]); }; export const useL2TokenBridgeContract = () => { const {chainId} = useL2Wallet(); - const getContract = useContract(L2_BRIDGE_ABI, chainId, utils.blockchain.starknet.createContract); + const getContract = useContract(L2_BRIDGE_ABI, chainId, createL2Contract); return useCallback(bridgeAddress => getContract(bridgeAddress), [getContract]); }; export const useL1TokenBridgeContract = () => { const {chainId} = useL1Wallet(); - const getTokenBridgeContract = useContract( - L1_ERC20_BRIDGE_ABI, - chainId, - utils.blockchain.ethereum.createContract - ); - const getEthBridgeContract = useContract( - L1_ETH_BRIDGE_ABI, - chainId, - utils.blockchain.ethereum.createContract - ); + const getTokenBridgeContract = useContract(L1_ERC20_BRIDGE_ABI, chainId, createL1Contract); + const getEthBridgeContract = useContract(L1_ETH_BRIDGE_ABI, chainId, createL1Contract); const ethToken = useL1Token()(NetworkType.L1.symbol); return useCallback( diff --git a/src/hooks/useEnvs.js b/src/hooks/useEnvs.js index 915a5563..5690be48 100644 --- a/src/hooks/useEnvs.js +++ b/src/hooks/useEnvs.js @@ -1,5 +1,5 @@ import {useMemo} from 'react'; -import envs from '../config/envs.js'; +import * as envs from '../config/envs.js'; export const useEnvs = () => useMemo(() => envs, []); diff --git a/src/hooks/useIsLoading.js b/src/hooks/useIsLoading.js deleted file mode 100644 index 3b23e253..00000000 --- a/src/hooks/useIsLoading.js +++ /dev/null @@ -1,19 +0,0 @@ -import {useEffect, useState} from 'react'; -import {useWallet} from 'use-wallet'; - -export const useIsLoading = deps => { - const [isLoading, setIsLoading] = useState(true); - const {isConnected, status} = useWallet(); - - useEffect(() => { - if (!isConnected()) { - setIsLoading(false); - } else if (deps != null) { - setIsLoading(false); - } else { - setIsLoading(true); - } - }, [deps, status, isConnected]); - - return isLoading; -}; diff --git a/src/hooks/useLogger.js b/src/hooks/useLogger.js index 8ab47e9a..690f62be 100644 --- a/src/hooks/useLogger.js +++ b/src/hooks/useLogger.js @@ -1,3 +1,3 @@ -import utils from '../utils'; +import {getLogger} from '../utils'; -export const useLogger = name => utils.logger.getLogger(name); +export const useLogger = name => getLogger(name); diff --git a/src/hooks/useTokenBalance.js b/src/hooks/useTokenBalance.js index c466d3f8..4c22c9bc 100644 --- a/src/hooks/useTokenBalance.js +++ b/src/hooks/useTokenBalance.js @@ -2,7 +2,7 @@ import {useCallback} from 'react'; import {balanceOf, ethBalanceOf} from '../api/erc20'; import {useTransfer} from '../providers/TransferProvider'; -import utils from '../utils'; +import {isEth} from '../utils'; import {useL1TokenContract, useL2TokenContract} from './useContract'; export const useTokenBalance = account => { @@ -35,7 +35,7 @@ export const useL1TokenBalance = account => { return useCallback( async token => { const {tokenAddress, decimals} = token; - return utils.token.isEth(token) + return isEth(token) ? await ethBalanceOf(account) : await balanceOf( { diff --git a/src/hooks/useTransferProgress.js b/src/hooks/useTransferProgress.js index af17b954..b8ffc720 100644 --- a/src/hooks/useTransferProgress.js +++ b/src/hooks/useTransferProgress.js @@ -1,7 +1,7 @@ import {useMemo} from 'react'; import {TransferError} from '../enums'; -import utils from '../utils'; +import {evaluate} from '../utils'; import {useTransferProgressModalTranslation} from './useTranslation'; export const useTransferProgress = () => { @@ -11,7 +11,7 @@ export const useTransferProgress = () => { () => ({ approval: (symbol, activeStep) => { const {approval} = transferProgressStrings; - const message = utils.object.evaluate(approval.message, {symbol}); + const message = evaluate(approval.message, {symbol}); return { type: approval.type, message, @@ -20,7 +20,7 @@ export const useTransferProgress = () => { }, deposit: (amount, symbol, activeStep) => { const {deposit} = transferProgressStrings; - const message = utils.object.evaluate(deposit.message, {amount, symbol}); + const message = evaluate(deposit.message, {amount, symbol}); return { type: deposit.type, message, @@ -29,7 +29,7 @@ export const useTransferProgress = () => { }, initiateWithdraw: (amount, symbol, activeStep) => { const {initiateWithdraw} = transferProgressStrings; - const message = utils.object.evaluate(initiateWithdraw.message, {amount, symbol}); + const message = evaluate(initiateWithdraw.message, {amount, symbol}); return { type: initiateWithdraw.type, message, @@ -38,8 +38,8 @@ export const useTransferProgress = () => { }, waitForConfirm: (walletName, activeStep) => { const {waitForConfirm} = transferProgressStrings; - const type = utils.object.evaluate(waitForConfirm.type, {walletName}); - const message = utils.object.evaluate(waitForConfirm.message, {walletName}); + const type = evaluate(waitForConfirm.type, {walletName}); + const message = evaluate(waitForConfirm.message, {walletName}); return { type, message, @@ -48,7 +48,7 @@ export const useTransferProgress = () => { }, withdraw: (amount, symbol, activeStep) => { const {withdraw} = transferProgressStrings; - const message = utils.object.evaluate(withdraw.message, {amount, symbol}); + const message = evaluate(withdraw.message, {amount, symbol}); return { type: withdraw.type, message, diff --git a/src/hooks/useTransferToL1.js b/src/hooks/useTransferToL1.js index 343960ce..887f5b10 100644 --- a/src/hooks/useTransferToL1.js +++ b/src/hooks/useTransferToL1.js @@ -14,7 +14,7 @@ import {useWithdrawalListener} from '../providers/EventManagerProvider'; import {useL1Token} from '../providers/TokensProvider'; import {useSelectedToken} from '../providers/TransferProvider'; import {useL1Wallet, useL2Wallet} from '../providers/WalletsProvider'; -import utils from '../utils'; +import {waitForTransaction} from '../utils'; import {useL1TokenBridgeContract, useTokenBridgeContract} from './useContract'; import {useLogger} from './useLogger'; import {useCompleteTransferToL1Tracking, useTransferToL1Tracking} from './useTracking'; @@ -70,7 +70,7 @@ export const useTransferToL1 = () => { ) ); logger.log('Waiting for tx to be received on L2'); - await utils.blockchain.starknet.waitForTransaction(l2hash, TransactionStatus.RECEIVED); + await waitForTransaction(l2hash, TransactionStatus.RECEIVED); logger.log('Done', {l2hash}); trackSuccess(l2hash); handleData({ diff --git a/src/hooks/useTransferToL2.js b/src/hooks/useTransferToL2.js index 0e8843d0..19fa7d10 100644 --- a/src/hooks/useTransferToL2.js +++ b/src/hooks/useTransferToL2.js @@ -8,7 +8,7 @@ import {useDepositListener} from '../providers/EventManagerProvider'; import {useL2Token} from '../providers/TokensProvider'; import {useSelectedToken} from '../providers/TransferProvider'; import {useL1Wallet, useL2Wallet} from '../providers/WalletsProvider'; -import utils from '../utils'; +import {addToken, isEth} from '../utils'; import {useTokenBridgeContract, useTokenContract} from './useContract'; import {useLogger} from './useLogger'; import {useMaxTotalBalance} from './useTokenConstant'; @@ -35,7 +35,7 @@ export const useTransferToL2 = () => { const {symbol, decimals, name, tokenAddress, bridgeAddress} = selectedToken; const tokenContract = getTokenContract(tokenAddress); const bridgeContract = getTokenBridgeContract(bridgeAddress); - const isEthToken = utils.token.isEth(symbol); + const isEthToken = isEth(symbol); const tokenBridgeAddress = bridgeAddress[l1ChainId]; const l2TokenAddress = getL2Token(symbol)?.tokenAddress[l2ChainId]; @@ -103,7 +103,7 @@ export const useTransferToL2 = () => { const maybeAddToken = async () => { try { - await utils.token.addToken(l2TokenAddress); + await addToken(l2TokenAddress); } catch (ex) { logger.warn(ex.message); } diff --git a/src/hooks/useTranslation.js b/src/hooks/useTranslation.js index e5ec1c15..82283565 100644 --- a/src/hooks/useTranslation.js +++ b/src/hooks/useTranslation.js @@ -1,8 +1,9 @@ import {useMemo} from 'react'; -import utils from '../utils'; +import Strings from '../config/strings'; +import {getPropertyPath} from '../utils'; -export const useTranslation = path => useMemo(() => utils.getTranslation(path), [path]); +export const useTranslation = path => useMemo(() => getTranslation(path), [path]); export const useContainersTranslation = path => { return useTranslation(chainPath('containers', path)); @@ -87,3 +88,5 @@ export const useTransferLogTranslation = () => { const chainPath = (basePath, constitutivePath) => { return constitutivePath ? `${basePath}.${constitutivePath}` : basePath; }; + +const getTranslation = path => getPropertyPath(Strings, path); diff --git a/src/hooks/useVars.js b/src/hooks/useVars.js deleted file mode 100644 index 39f2f316..00000000 --- a/src/hooks/useVars.js +++ /dev/null @@ -1,5 +0,0 @@ -import {useMemo} from 'react'; - -import vars from '../styles/variables.module.scss'; - -export const useVars = () => useMemo(() => vars, []); diff --git a/src/hooks/useWalletHandlerProvider.js b/src/hooks/useWalletHandlerProvider.js index eadd665b..91436f74 100644 --- a/src/hooks/useWalletHandlerProvider.js +++ b/src/hooks/useWalletHandlerProvider.js @@ -1,32 +1,32 @@ -import {useCallback, useEffect, useState} from 'react'; +import {useMemo} from 'react'; -import WalletsConfig from '../config/wallets.js'; +import Wallets from '../config/wallets.js'; +import {ActionType} from '../enums'; import {GetStarknetWallet, MetaMask} from '../wallets'; -const SUPPORTED_HANDLERS_REGISTRY = { - metamask: MetaMask, - gsw: GetStarknetWallet +const SUPPORTED_L1_HANDLERS_REGISTRY = { + metamask: MetaMask }; -export const useWalletHandlerProvider = () => { - const [handlers, setHandlers] = useState([]); +const SUPPORTED_L2_HANDLERS_REGISTRY = { + gsw: GetStarknetWallet +}; - useEffect(() => { - const walletHandlers = []; - WalletsConfig.forEach(walletConfig => { +export const useWalletHandlerProvider = (actionType = ActionType.TRANSFER_TO_L2) => { + return useMemo(() => { + const walletsConfig = actionType === ActionType.TRANSFER_TO_L2 ? Wallets.L1 : Wallets.L2; + const registry = + actionType === ActionType.TRANSFER_TO_L2 + ? SUPPORTED_L1_HANDLERS_REGISTRY + : SUPPORTED_L2_HANDLERS_REGISTRY; + const handlers = []; + walletsConfig.forEach(walletConfig => { const {id} = walletConfig; - const WalletHandler = SUPPORTED_HANDLERS_REGISTRY[id]; + const WalletHandler = registry[id]; if (WalletHandler) { - walletHandlers.push(new WalletHandler(walletConfig)); + handlers.push(new WalletHandler(walletConfig)); } }); - setHandlers(walletHandlers); - }, []); - - return useCallback( - type => { - return type ? handlers.filter(walletHandler => walletHandler.config.type === type) : handlers; - }, - [handlers] - ); + return handlers; + }, [actionType]); }; diff --git a/src/hooks/useWindowSize.js b/src/hooks/useWindowSize.js deleted file mode 100644 index 28412bc2..00000000 --- a/src/hooks/useWindowSize.js +++ /dev/null @@ -1,22 +0,0 @@ -import {useEffect, useState} from 'react'; - -export const useWindowSize = () => { - const [windowSize, setWindowSize] = useState({ - width: undefined, - height: undefined - }); - - useEffect(() => { - function handleResize() { - setWindowSize({ - width: window.innerWidth, - height: window.innerHeight - }); - } - window.addEventListener('resize', handleResize); - handleResize(); - return () => window.removeEventListener('resize', handleResize); - }, []); // Empty array ensures that effect is only run on mount - - return windowSize; -}; diff --git a/src/index.js b/src/index.js index a2205387..66f51b09 100644 --- a/src/index.js +++ b/src/index.js @@ -5,21 +5,19 @@ import {BrowserRouter} from 'react-router-dom'; import {App} from './App'; import {ModalWrapper} from './components/UI'; -import envs from './config/envs'; +import {env} from './config/envs'; import './index.scss'; import {AppProviders} from './providers'; -import utils from './utils'; +import {getLogger, getUrlParameter, printPackageInfo, setLogLevel} from './utils'; -const {env} = envs; - -utils.printPackageInfo(process.env.REACT_APP_NAME, process.env.REACT_APP_VERSION, '#734d7e'); +printPackageInfo(process.env.REACT_APP_NAME, process.env.REACT_APP_VERSION, '#734d7e'); if (env !== 'development') { splitbee.init(); } -if (env === 'development' || utils.browser.getUrlParameter('debugApp')) { - utils.logger.setLogLevel(utils.logger.getLogger().DEBUG); +if (env === 'development' || getUrlParameter('debugApp')) { + setLogLevel(getLogger().DEBUG); } ReactDOM.render( diff --git a/src/providers/AppProvider/AppProvider.js b/src/providers/AppProvider/AppProvider.js index fb38dbf9..ba059647 100644 --- a/src/providers/AppProvider/AppProvider.js +++ b/src/providers/AppProvider/AppProvider.js @@ -2,7 +2,7 @@ import PropTypes from 'prop-types'; import React, {useReducer} from 'react'; import {useEnvs} from '../../hooks'; -import utils from '../../utils'; +import {setStorageItem} from '../../utils'; import {AppContext} from './app-context'; import {actions, initialState, reducer} from './app-reducer'; @@ -25,7 +25,7 @@ export const AppProvider = ({children}) => { }; const acceptTerms = () => { - utils.storage.setItem(localStorageAcceptTermsKey, true); + setStorageItem(localStorageAcceptTermsKey, true); dispatch({ type: actions.SET_ACCEPT_TERMS }); diff --git a/src/providers/AppProvider/app-reducer.js b/src/providers/AppProvider/app-reducer.js index 9d7f676c..dc2af882 100644 --- a/src/providers/AppProvider/app-reducer.js +++ b/src/providers/AppProvider/app-reducer.js @@ -1,7 +1,5 @@ -import envs from '../../config/envs'; -import utils from '../../utils'; - -const {localStorageAcceptTermsKey} = envs; +import {localStorageAcceptTermsKey} from '../../config/envs'; +import {getStorageItem} from '../../utils'; export const actions = { SET_ACCEPT_TERMS: 'App/SET_ACCEPT_TERMS', @@ -9,7 +7,7 @@ export const actions = { }; export const initialState = { - isAcceptTerms: utils.storage.getItem(localStorageAcceptTermsKey), + isAcceptTerms: getStorageItem(localStorageAcceptTermsKey), isLoggedIn: false }; diff --git a/src/providers/TokensProvider/tokens-reducer.js b/src/providers/TokensProvider/tokens-reducer.js index 8e401fe7..df37e90f 100644 --- a/src/providers/TokensProvider/tokens-reducer.js +++ b/src/providers/TokensProvider/tokens-reducer.js @@ -1,13 +1,13 @@ -import envs from '../../config/envs'; -import {l1tokens, l2tokens} from '../../config/tokens'; +import {supportedTokens} from '../../config/envs'; +import Tokens from '../../config/tokens'; export const actions = { UPDATE_TOKEN: 'Tokens/UPDATE_TOKEN' }; export const initialState = [ - ...l1tokens.filter(t => envs.supportedTokens.includes(t.symbol)).map(t => ({...t, isL1: true})), - ...l2tokens.filter(t => envs.supportedTokens.includes(t.symbol)).map(t => ({...t, isL2: true})) + ...Tokens.L1.filter(t => supportedTokens.includes(t.symbol)).map(t => ({...t, isL1: true})), + ...Tokens.L2.filter(t => supportedTokens.includes(t.symbol)).map(t => ({...t, isL2: true})) ]; export const reducer = (state, action) => { diff --git a/src/providers/TransfersLogProvider/TransfersLogProvider.js b/src/providers/TransfersLogProvider/TransfersLogProvider.js index 30005b79..72355c9d 100644 --- a/src/providers/TransfersLogProvider/TransfersLogProvider.js +++ b/src/providers/TransfersLogProvider/TransfersLogProvider.js @@ -5,7 +5,7 @@ import useDeepCompareEffect from 'use-deep-compare-effect'; import {isCompleted, isConsumed, TransactionHashPrefix} from '../../enums'; import {useEnvs, useLogger} from '../../hooks'; import {getStarknet} from '../../libs'; -import utils from '../../utils'; +import {calcAccountHash, getStorageItem, setStorageItem, getTransactionHash} from '../../utils'; import {useBlockHash} from '../BlockHashProvider'; import {useDepositMessageToL2Event} from '../EventManagerProvider'; import {useTokens} from '../TokensProvider'; @@ -82,7 +82,7 @@ export const TransfersLogProvider = ({children}) => { delete transfer.event; return { ...transfer, - l2hash: utils.blockchain.starknet.getTransactionHash( + l2hash: getTransactionHash( TransactionHashPrefix.L1_HANDLER, from_address, to_address, @@ -97,16 +97,16 @@ export const TransfersLogProvider = ({children}) => { }; const getTransfersFromStorage = () => { - let storedTransfers = utils.storage.getItem(localStorageTransfersLogKey); + let storedTransfers = getStorageItem(localStorageTransfersLogKey); // for backward compatibility storedTransfers = maybeTransformTransfersArrayToObject(storedTransfers) || {}; return storedTransfers[accountHash] || []; }; const saveTransfersToStorage = transfers => { - const storedTransfers = utils.storage.getItem(localStorageTransfersLogKey) || {}; + const storedTransfers = getStorageItem(localStorageTransfersLogKey) || {}; const updatedTransfers = Object.assign(storedTransfers, {[accountHash]: transfers}); - utils.storage.setItem(localStorageTransfersLogKey, updatedTransfers); + setStorageItem(localStorageTransfersLogKey, updatedTransfers); }; const maybeTransformTransfersArrayToObject = storedTransfers => { @@ -114,11 +114,11 @@ export const TransfersLogProvider = ({children}) => { const transfersObject = {}; storedTransfers.forEach(storedTransfer => { const {sender, recipient} = storedTransfer; - const accountHash = utils.wallet.calcAccountHash(sender, recipient); + const accountHash = calcAccountHash(sender, recipient); transfersObject[accountHash] = transfersObject[accountHash] || []; transfersObject[accountHash].push(storedTransfer); }); - utils.storage.setItem(localStorageTransfersLogKey, transfersObject); + setStorageItem(localStorageTransfersLogKey, transfersObject); return transfersObject; } return storedTransfers; diff --git a/src/providers/WalletsProvider/WalletsProvider.js b/src/providers/WalletsProvider/WalletsProvider.js index ec9ee94f..7fae335a 100644 --- a/src/providers/WalletsProvider/WalletsProvider.js +++ b/src/providers/WalletsProvider/WalletsProvider.js @@ -3,7 +3,7 @@ import React, {useEffect, useReducer, useState} from 'react'; import {useWallet} from 'use-wallet'; import {WalletStatus} from '../../enums'; -import utils from '../../utils'; +import {calcAccountHash} from '../../utils'; import {useIsL1, useIsL2} from '../TransferProvider'; import {WalletsContext} from './wallets-context'; import {useStarknetWallet} from './wallets-hooks'; @@ -35,7 +35,7 @@ export const WalletsProvider = ({children}) => { useEffect(() => { if (account && l2Account) { - setAccountHash(utils.wallet.calcAccountHash(account, l2Account)); + setAccountHash(calcAccountHash(account, l2Account)); } }, [account, l2Account]); diff --git a/src/routes/Bridge/Bridge.js b/src/routes/Bridge/Bridge.js index 5ea59e36..d6a4d2c9 100644 --- a/src/routes/Bridge/Bridge.js +++ b/src/routes/Bridge/Bridge.js @@ -8,7 +8,7 @@ import {BridgeProviders} from '../../providers'; import {useMenu} from '../../providers/MenuProvider'; import {useOnboardingModal} from '../../providers/ModalProvider'; import {useL1Wallet, useL2Wallet} from '../../providers/WalletsProvider'; -import utils from '../../utils'; +import {getStorageItem, getMsFromHrs, setStorageItem} from '../../utils'; import styles from './Bridge.module.scss'; export const Bridge = () => { @@ -29,15 +29,12 @@ export const Bridge = () => { }, []); const maybeShowOnboardingModal = () => { - const onboardingTimestamp = utils.storage.getItem(localStorageOnboardingExpirationTimestampKey); + const onboardingTimestamp = getStorageItem(localStorageOnboardingExpirationTimestampKey); const now = Date.now(); - const onboardingModalTimeoutMs = utils.date.getMsFromHrs(onboardingModalTimeoutHrs); + const onboardingModalTimeoutMs = getMsFromHrs(onboardingModalTimeoutHrs); if (!onboardingTimestamp || onboardingTimestamp < now) { showOnboardingModal(); - utils.storage.setItem( - localStorageOnboardingExpirationTimestampKey, - now + onboardingModalTimeoutMs - ); + setStorageItem(localStorageOnboardingExpirationTimestampKey, now + onboardingModalTimeoutMs); } }; diff --git a/src/routes/Faq/Faq.js b/src/routes/Faq/Faq.js index 2eb78afe..c3659940 100644 --- a/src/routes/Faq/Faq.js +++ b/src/routes/Faq/Faq.js @@ -2,7 +2,7 @@ import React, {useEffect} from 'react'; import {TrackEvent} from '../../analytics'; import {FullScreenContainer} from '../../components/UI'; -import {faqs} from '../../config/faqs'; +import Faqs from '../../config/faqs'; import {useTracking, useFaqTranslation} from '../../hooks'; import styles from './Faq.module.scss'; @@ -19,7 +19,7 @@ export const Faq = () => { <div className={styles.faq}> <h1>{titleTxt}</h1> <ol> - {faqs.map((faq, i) => ( + {Faqs.map((faq, i) => ( <li key={`faq-${i}`} className={styles.question}> <h2 dangerouslySetInnerHTML={{__html: faq.question}} /> <div dangerouslySetInnerHTML={{__html: faq.answer}} /> diff --git a/src/routes/Login/Login.js b/src/routes/Login/Login.js index 414c9e6e..4844f4f5 100644 --- a/src/routes/Login/Login.js +++ b/src/routes/Login/Login.js @@ -2,12 +2,12 @@ import React, {useEffect, useRef, useState} from 'react'; import {LoginErrorMessage, WalletLogin} from '../../components/UI'; import { + ActionType, ChainInfo, LoginErrorType, NetworkType, WalletErrorType, - WalletStatus, - WalletType + WalletStatus } from '../../enums'; import { useEnvs, @@ -16,9 +16,9 @@ import { useWalletHandlerProvider } from '../../hooks'; import {useHideModal, useProgressModal} from '../../providers/ModalProvider'; -import {useIsL1, useIsL2} from '../../providers/TransferProvider'; +import {useIsL1, useIsL2, useTransfer} from '../../providers/TransferProvider'; import {useWallets} from '../../providers/WalletsProvider'; -import utils from '../../utils'; +import {evaluate, isChrome, toClasses} from '../../utils'; import styles from './Login.module.scss'; const MODAL_TIMEOUT_DURATION = 2000; @@ -38,18 +38,18 @@ export const Login = () => { const {autoConnect, supportedChainId} = useEnvs(); const [selectedWalletName, setSelectedWalletName] = useState(''); const [error, setError] = useState(null); - const [walletType, setWalletType] = useState(WalletType.L1); + const [, swapToL1] = useIsL1(); + const [, swapToL2] = useIsL2(); + const {action} = useTransfer(); + const {status, error: walletError, connectWallet, isConnected} = useWallets(); const modalTimeoutId = useRef(null); const hideModal = useHideModal(); const showProgressModal = useProgressModal(); - const getWalletHandlers = useWalletHandlerProvider(); - const {status, error: walletError, connectWallet, isConnected} = useWallets(); - const [, swapToL1] = useIsL1(); - const [, swapToL2] = useIsL2(); + const walletHandlers = useWalletHandlerProvider(action); useEffect(() => { trackLoginScreen(); - if (!utils.browser.isChrome()) { + if (!isChrome()) { setError({type: LoginErrorType.UNSUPPORTED_BROWSER, message: unsupportedBrowserTxt}); } return () => swapToL1(); @@ -60,17 +60,18 @@ export const Login = () => { if (error) { trackLoginError(error); } else if (!error && autoConnect) { - const handlers = getWalletHandlers(walletType); - if (handlers.length > 0) { - timeoutId = setTimeout(() => onWalletConnect(handlers[0]), AUTO_CONNECT_TIMEOUT_DURATION); + if (walletHandlers.length > 0) { + timeoutId = setTimeout( + () => onWalletConnect(walletHandlers[0]), + AUTO_CONNECT_TIMEOUT_DURATION + ); } } return () => clearTimeout(timeoutId); - }, [error, walletType, getWalletHandlers]); + }, [error, walletHandlers]); useEffect(() => { if (isConnected) { - setWalletType(WalletType.L2); swapToL2(); } }, [isConnected]); @@ -113,10 +114,9 @@ export const Login = () => { }; const onDownloadClick = () => { - trackDownloadClick(walletType); - const handlers = getWalletHandlers(walletType); - if (handlers.length > 0) { - return handlers[0].install(); + trackDownloadClick(); + if (walletHandlers.length > 0) { + return walletHandlers[0].install(); } }; @@ -124,7 +124,7 @@ export const Login = () => { if (error.name === WalletErrorType.CHAIN_UNSUPPORTED_ERROR) { setError({ type: LoginErrorType.UNSUPPORTED_CHAIN_ID, - message: utils.object.evaluate(unsupportedChainIdTxt, { + message: evaluate(unsupportedChainIdTxt, { chainName: ChainInfo.L1[supportedChainId].NAME }) }); @@ -134,10 +134,7 @@ export const Login = () => { const maybeShowModal = () => { maybeHideModal(); modalTimeoutId.current = setTimeout(() => { - showProgressModal( - selectedWalletName, - utils.object.evaluate(modalTxt, {walletName: selectedWalletName}) - ); + showProgressModal(selectedWalletName, evaluate(modalTxt, {walletName: selectedWalletName})); }, MODAL_TIMEOUT_DURATION); }; @@ -150,7 +147,7 @@ export const Login = () => { }; const renderLoginWallets = () => { - return getWalletHandlers(walletType).map(walletHandler => { + return walletHandlers.map(walletHandler => { const { config: {id, description, name, logoPath} } = walletHandler; @@ -158,7 +155,7 @@ export const Login = () => { <WalletLogin key={id} description={description} - isDisabled={!utils.browser.isChrome()} + isDisabled={!isChrome()} logoPath={logoPath} name={name} onClick={() => onWalletConnect(walletHandler)} @@ -168,12 +165,13 @@ export const Login = () => { }; return ( - <div className={utils.object.toClasses(styles.login, 'center')}> + <div className={toClasses(styles.login, 'center')}> <div className={styles.content}> <div className={styles.title}>{titleTxt}</div> <p> - {utils.object.evaluate(subtitleTxt, { - networkName: walletType === WalletType.L1 ? NetworkType.L1.name : NetworkType.L2.name + {evaluate(subtitleTxt, { + networkName: + action === ActionType.TRANSFER_TO_L2 ? NetworkType.L1.name : NetworkType.L2.name })} </p> <div className={styles.container}>{renderLoginWallets()}</div> diff --git a/src/utils/blockchain/index.js b/src/utils/blockchain/index.js deleted file mode 100644 index caf1867e..00000000 --- a/src/utils/blockchain/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export * as ethereum from './ethereum'; -export * as starknet from './starknet'; diff --git a/src/utils/blockchain/ethereum.js b/src/utils/ethereum.js similarity index 53% rename from src/utils/blockchain/ethereum.js rename to src/utils/ethereum.js index 5649dd9e..34b81818 100644 --- a/src/utils/blockchain/ethereum.js +++ b/src/utils/ethereum.js @@ -1,10 +1,10 @@ -import {web3} from '../../libs'; +import {web3} from '../libs'; -export const createContract = (address, ABI) => { +export const createL1Contract = (address, ABI) => { return new web3.eth.Contract(ABI, address); }; -export const callContract = async (contract, method, args = []) => { +export const callL1Contract = async (contract, method, args = []) => { try { return await contract.methods?.[method](...args).call(); } catch (ex) { @@ -12,7 +12,13 @@ export const callContract = async (contract, method, args = []) => { } }; -export const sendTransaction = async (contract, method, args = [], options = {}, cb = () => {}) => { +export const sendL1Transaction = async ( + contract, + method, + args = [], + options = {}, + cb = () => {} +) => { try { return contract.methods?.[method](...args).send(options, cb); } catch (ex) { diff --git a/src/utils/index.js b/src/utils/index.js index ba82514f..23e4c841 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -1,41 +1,21 @@ -import strings from '../config/strings'; -import * as blockchain from './blockchain'; -import * as browser from './browser'; -import * as date from './date'; -import * as logger from './logger'; -import * as number from './number'; -import * as object from './object'; -import * as parser from './parser'; -import * as storage from './storage'; -import * as string from './string'; -import * as token from './token'; -import * as wallet from './wallet'; +import {getLogger, getLogLevel, setLogLevel} from './logger'; -const {getLogger, getLogLevel, setLogLevel} = logger; +export * from './browser'; +export * from './date'; +export * from './logger'; +export * from './number'; +export * from './object'; +export * from './parser'; +export * from './storage'; +export * from './string'; +export * from './token'; +export * from './wallet'; +export * from './starknet'; +export * from './ethereum'; -const printPackageInfo = (name, version, color) => { +export const printPackageInfo = (name, version, color) => { const currentLogLevel = getLogLevel(); setLogLevel(getLogger().INFO); getLogger().info(`%c ${name} v${version}`, `color: ${color || '#ff98f9'}; font-size: large`); setLogLevel(currentLogLevel); }; - -const getTranslation = path => object.getPropertyPath(strings, path); - -const utils = { - wallet, - browser, - string, - token, - parser, - date, - object, - blockchain, - logger, - storage, - number, - printPackageInfo, - getTranslation -}; - -export default utils; diff --git a/src/utils/blockchain/starknet.js b/src/utils/starknet.js similarity index 78% rename from src/utils/blockchain/starknet.js rename to src/utils/starknet.js index 789bf8e3..cbd92558 100644 --- a/src/utils/blockchain/starknet.js +++ b/src/utils/starknet.js @@ -1,13 +1,13 @@ -import {ChainInfo, isRejected, TransactionStatusStep} from '../../enums'; -import {getStarknet, starknet} from '../../libs'; +import {ChainInfo, isRejected, TransactionStatusStep} from '../enums'; +import {getStarknet, starknet} from '../libs'; const {Contract, stark, hash, number} = starknet; -export const createContract = (address, ABI) => { +export const createL2Contract = (address, ABI) => { return new Contract(ABI, address, getStarknet().provider); }; -export const callContract = async (contract, method, ...args) => { +export const callL2Contract = async (contract, method, ...args) => { try { return await contract.call(method, args); } catch (ex) { @@ -15,7 +15,7 @@ export const callContract = async (contract, method, ...args) => { } }; -export const sendTransaction = async (contract, method, args = {}) => { +export const sendL2Transaction = async (contract, method, args = {}) => { try { const calldata = stark.compileCalldata(args); const transaction = { @@ -80,11 +80,3 @@ export const getTransactionHash = ( ...additionalData ]); }; - -export const hashEquals = (...data) => { - return !!data.reduce((d1, d2) => { - return starknet.hash.computeHashOnElements(d1) === starknet.hash.computeHashOnElements(d2) - ? d1 - : ''; - }); -}; diff --git a/src/utils/storage.js b/src/utils/storage.js index 92b64663..7106db63 100644 --- a/src/utils/storage.js +++ b/src/utils/storage.js @@ -1,4 +1,4 @@ -export const setItem = (key, item) => { +export const setStorageItem = (key, item) => { if (localStorage) { localStorage.setObjectHash(key, JSON.stringify(item)); return true; @@ -6,7 +6,7 @@ export const setItem = (key, item) => { return false; }; -export const getItem = key => { +export const getStorageItem = key => { if (localStorage) { const item = localStorage.getObjectHash(key); try { @@ -26,7 +26,7 @@ Storage.prototype.setObjectHash = function (key, myObject) { }; Storage.prototype.getObjectHash = function (key) { - let myObject = this.getItem(key); + const myObject = this.getItem(key); if (!myObject) return null; return ( b64d(myObject) && From 87fb2cb409f6c89043f659156a87de0edf40d1b4 Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Tue, 10 May 2022 12:23:58 +0000 Subject: [PATCH 197/211] prerelease: v1.4.2-dev.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### [1.4.2-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.4.1...v1.4.2-dev.1) (2022-05-10) ### 💉 Improvements * export convention ([#180](https://github.com/starkware-libs/starkgate-frontend/issues/180)) ([b5585ad](https://github.com/starkware-libs/starkgate-frontend/commit/b5585add93d5ff2918e68a6941a86e535eb39251)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ba24665..bb452d05 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +### [1.4.2-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.4.1...v1.4.2-dev.1) (2022-05-10) + + +### 💉 Improvements + +* export convention ([#180](https://github.com/starkware-libs/starkgate-frontend/issues/180)) ([b5585ad](https://github.com/starkware-libs/starkgate-frontend/commit/b5585add93d5ff2918e68a6941a86e535eb39251)) + ### [1.4.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.4.0...v1.4.1) (2022-05-08) diff --git a/package.json b/package.json index c8f1fc09..3f0fcfc8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.4.1", + "version": "1.4.2-dev.1", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From c75a88a667689d92294adad86d11bfd6ed6c0c52 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Tue, 10 May 2022 15:57:01 +0300 Subject: [PATCH 198/211] refactor: tokens addresses (#178) --- src/components/Containers/Header/Header.js | 4 +- src/config/envs.js | 5 +- src/hooks/useContract.js | 54 +++++++------------ src/hooks/useTransferToL2.js | 16 +++--- .../EventManagerProvider.js | 8 +-- .../TokensProvider/TokensProvider.js | 25 +++++---- .../TokensProvider/tokens-reducer.js | 16 ++++-- .../WalletProvider/WalletProvider.js | 4 +- .../WalletsProvider/wallets-hooks.js | 11 +--- src/routes/Login/Login.js | 4 +- 10 files changed, 68 insertions(+), 79 deletions(-) diff --git a/src/components/Containers/Header/Header.js b/src/components/Containers/Header/Header.js index 1f7806cc..9ac3eef8 100644 --- a/src/components/Containers/Header/Header.js +++ b/src/components/Containers/Header/Header.js @@ -17,7 +17,7 @@ import styles from './Header.module.scss'; export const Header = () => { const {DISCORD_LINK_URL} = useConstants(); const [trackDiscordClick] = useTracking(TrackEvent.DISCORD_TAB_CLICK); - const {supportedChainId} = useEnvs(); + const {supportedL1ChainId} = useEnvs(); const {tabDiscordTxt, tabFaqTxt, tabTermsTxt, chainTxt} = useHeaderTranslation(); const navigate = useNavigate(); const {pathname} = useLocation(); @@ -70,7 +70,7 @@ export const Header = () => { <div className={toClasses(styles.logo, 'row')} onClick={onLogoClick}> <StarkGateLogo /> </div> - {supportedChainId === ChainType.L1.GOERLI && ( + {supportedL1ChainId === ChainType.L1.GOERLI && ( <div className={toClasses(styles.chain, 'row')}>{chainTxt}</div> )} </div> diff --git a/src/config/envs.js b/src/config/envs.js index 3d932811..da0ef677 100644 --- a/src/config/envs.js +++ b/src/config/envs.js @@ -1,3 +1,4 @@ +import {ChainType} from '../enums'; import {evaluate} from '../utils'; export const env = process.env.NODE_ENV; @@ -5,7 +6,9 @@ export const appUrl = process.env.REACT_APP_URL; export const autoConnect = process.env.REACT_APP_AUTO_CONNECT === 'true'; export const pollBlockNumberInterval = Number(process.env.REACT_APP_POLL_BLOCK_NUMBER_INTERVAL); export const supportedTokens = process.env.REACT_APP_SUPPORTED_TOKENS.split(','); -export const supportedChainId = Number(process.env.REACT_APP_SUPPORTED_CHAIN_ID); +export const supportedL1ChainId = Number(process.env.REACT_APP_SUPPORTED_CHAIN_ID); +export const supportedL2ChainId = + supportedL1ChainId === ChainType.L1.GOERLI ? ChainType.L2.GOERLI : ChainType.L2.MAIN; export const starknetContractAddress = process.env.REACT_APP_STARKNET_CONTRACT_ADDRESS; export const etherscanUrl = process.env.REACT_APP_ETHERSCAN_URL; export const etherscanTxUrl = tx => evaluate(`${etherscanUrl}/tx/{{tx}}`, {tx}); diff --git a/src/hooks/useContract.js b/src/hooks/useContract.js index e0e8ab58..aad22218 100644 --- a/src/hooks/useContract.js +++ b/src/hooks/useContract.js @@ -5,33 +5,20 @@ import {L2_BRIDGE_ABI, L2_ERC20_ABI} from '../abis/l2'; import {NetworkType} from '../enums'; import {useL1Token} from '../providers/TokensProvider'; import {useTransfer} from '../providers/TransferProvider'; -import {useL1Wallet, useL2Wallet} from '../providers/WalletsProvider'; import {createL1Contract, createL2Contract} from '../utils'; import {useEnvs} from './useEnvs'; const cache = {}; -export const useContract = (ABI, chainId, getContractHandler) => { +export const useContract = (abi, getContractHandler) => { return useCallback( - addresses => { - try { - let address; - if (typeof addresses === 'string') { - address = addresses; - } else if (typeof addresses === 'object') { - address = addresses[chainId]; - } else { - return null; - } - if (!cache[address]) { - cache[address] = getContractHandler(address, ABI); - } - return cache[address]; - } catch (ex) { - return null; + address => { + if (!cache[address]) { + cache[address] = getContractHandler(address, abi); } + return cache[address]; }, - [ABI, getContractHandler] + [abi, getContractHandler] ); }; @@ -41,8 +28,8 @@ export const useTokenContract = () => { const {isL1} = useTransfer(); return useCallback( - tokenAddresses => { - return isL1 ? getL1TokenContract(tokenAddresses) : getL2TokenContract(tokenAddresses); + tokenAddress => { + return isL1 ? getL1TokenContract(tokenAddress) : getL2TokenContract(tokenAddress); }, [isL1, getL2TokenContract, getL1TokenContract] ); @@ -64,46 +51,41 @@ export const useTokenBridgeContract = () => { }; export const useL2TokenContract = () => { - const {chainId} = useL2Wallet(); - const getContract = useContract(L2_ERC20_ABI, chainId, createL2Contract); + const getContract = useContract(L2_ERC20_ABI, createL2Contract); - return useCallback(tokenAddresses => getContract(tokenAddresses), [getContract]); + return useCallback(tokenAddress => getContract(tokenAddress), [getContract]); }; export const useL1TokenContract = () => { - const {chainId} = useL1Wallet(); - const getContract = useContract(L1_ERC20_ABI, chainId, createL1Contract); + const getContract = useContract(L1_ERC20_ABI, createL1Contract); - return useCallback(tokenAddresses => getContract(tokenAddresses), [getContract]); + return useCallback(tokenAddress => getContract(tokenAddress), [getContract]); }; export const useStarknetContract = () => { const {starknetContractAddress} = useEnvs(); - const {chainId} = useL1Wallet(); - const getContract = useContract(L1_MESSAGING_ABI, chainId, createL1Contract); + const getContract = useContract(L1_MESSAGING_ABI, createL1Contract); return useMemo(() => getContract(starknetContractAddress), [getContract]); }; export const useL2TokenBridgeContract = () => { - const {chainId} = useL2Wallet(); - const getContract = useContract(L2_BRIDGE_ABI, chainId, createL2Contract); + const getContract = useContract(L2_BRIDGE_ABI, createL2Contract); return useCallback(bridgeAddress => getContract(bridgeAddress), [getContract]); }; export const useL1TokenBridgeContract = () => { - const {chainId} = useL1Wallet(); - const getTokenBridgeContract = useContract(L1_ERC20_BRIDGE_ABI, chainId, createL1Contract); - const getEthBridgeContract = useContract(L1_ETH_BRIDGE_ABI, chainId, createL1Contract); + const getTokenBridgeContract = useContract(L1_ERC20_BRIDGE_ABI, createL1Contract); + const getEthBridgeContract = useContract(L1_ETH_BRIDGE_ABI, createL1Contract); const ethToken = useL1Token()(NetworkType.L1.symbol); return useCallback( bridgeAddress => { - return bridgeAddress[chainId] === ethToken.bridgeAddress[chainId] + return bridgeAddress === ethToken.bridgeAddress ? getEthBridgeContract(bridgeAddress) : getTokenBridgeContract(bridgeAddress); }, - [getTokenBridgeContract, getEthBridgeContract, chainId, ethToken] + [getTokenBridgeContract, getEthBridgeContract, ethToken] ); }; diff --git a/src/hooks/useTransferToL2.js b/src/hooks/useTransferToL2.js index 19fa7d10..fd22d384 100644 --- a/src/hooks/useTransferToL2.js +++ b/src/hooks/useTransferToL2.js @@ -19,8 +19,8 @@ import {useTransferProgress} from './useTransferProgress'; export const useTransferToL2 = () => { const logger = useLogger('useTransferToL2'); const [trackInitiated, trackSuccess, trackError, trackReject] = useTransferToL2Tracking(); - const {account: l1Account, chainId: l1ChainId, config: l1Config} = useL1Wallet(); - const {account: l2Account, chainId: l2ChainId} = useL2Wallet(); + const {account: l1Account, config: l1Config} = useL1Wallet(); + const {account: l2Account} = useL2Wallet(); const {handleProgress, handleData, handleError} = useTransfer(TransferToL2Steps); const selectedToken = useSelectedToken(); const getTokenContract = useTokenContract(); @@ -36,13 +36,12 @@ export const useTransferToL2 = () => { const tokenContract = getTokenContract(tokenAddress); const bridgeContract = getTokenBridgeContract(bridgeAddress); const isEthToken = isEth(symbol); - const tokenBridgeAddress = bridgeAddress[l1ChainId]; - const l2TokenAddress = getL2Token(symbol)?.tokenAddress[l2ChainId]; + const l2TokenAddress = getL2Token(symbol)?.tokenAddress; const readAllowance = () => { return allowance({ owner: l1Account, - spender: tokenBridgeAddress, + spender: bridgeAddress, contract: tokenContract, decimals }); @@ -50,7 +49,7 @@ export const useTransferToL2 = () => { const sendApproval = async () => { return approve({ - spender: tokenBridgeAddress, + spender: bridgeAddress, value: starknet.constants.MASK_250, contract: tokenContract, options: {from: l1Account} @@ -111,9 +110,9 @@ export const useTransferToL2 = () => { const isMaxBalanceExceeded = async () => { const tokenBridgeBalance = await (isEthToken - ? ethBalanceOf(tokenBridgeAddress) + ? ethBalanceOf(bridgeAddress) : balanceOf({ - account: tokenBridgeAddress, + account: bridgeAddress, decimals, contract: tokenContract })); @@ -161,7 +160,6 @@ export const useTransferToL2 = () => { selectedToken, addListener, removeListener, - l1ChainId, l1Account, l2Account, l1Config, diff --git a/src/providers/EventManagerProvider/EventManagerProvider.js b/src/providers/EventManagerProvider/EventManagerProvider.js index 408b2f5c..1a783be9 100644 --- a/src/providers/EventManagerProvider/EventManagerProvider.js +++ b/src/providers/EventManagerProvider/EventManagerProvider.js @@ -16,8 +16,8 @@ let emitters = []; export const EventManagerProvider = ({children}) => { const logger = useLogger(EventManagerProvider.displayName); const getTokenBridgeContract = useL1TokenBridgeContract(); - const {account: l1Account, chainId: l1ChainId} = useL1Wallet(); - const {account: l2Account, chainId: l2ChainId} = useL2Wallet(); + const {account: l1Account} = useL1Wallet(); + const {account: l2Account} = useL2Wallet(); const l1Tokens = useL1Tokens(); const l2Tokens = useL2Tokens(); @@ -84,8 +84,8 @@ export const EventManagerProvider = ({children}) => { const setEventFilters = () => { // LogMessageToL2 filter - const l1BridgesAddresses = l1Tokens.map(token => token.bridgeAddress[l1ChainId]); - const l2BridgesAddress = l2Tokens.map(token => token.bridgeAddress[l2ChainId]); + const l1BridgesAddresses = l1Tokens.map(token => token.bridgeAddress); + const l2BridgesAddress = l2Tokens.map(token => token.bridgeAddress); filters[EventName.L1.LOG_MESSAGE_TO_L2] = { from_address: l1BridgesAddresses, to_address: l2BridgesAddress, diff --git a/src/providers/TokensProvider/TokensProvider.js b/src/providers/TokensProvider/TokensProvider.js index 35403f75..615039aa 100644 --- a/src/providers/TokensProvider/TokensProvider.js +++ b/src/providers/TokensProvider/TokensProvider.js @@ -17,22 +17,25 @@ export const TokensProvider = ({children}) => { const getL2TokenBalance = useL2TokenBalance(l2Account); useEffect(() => { - updateTokenBalance(); + fetchBalances(tokens); }, []); const updateTokenBalance = symbol => { logger.log(symbol ? `Update ${symbol} token balance` : 'Update all tokens balances'); - const tokensToUpdate = tokens - .map((t, index) => ({...t, index})) - .filter(t => !symbol || t.symbol === symbol); - logger.log('Tokens to update:', {tokensToUpdate}); + const filteredTokens = tokens.filter(t => !symbol || t.symbol === symbol); + fetchBalances(filteredTokens); + }; - tokensToUpdate.forEach(token => { - if (!token.isLoading) { - updateToken(token.index, {isLoading: true}); - fetchBalance(token.isL1 ? getL1TokenBalance : getL2TokenBalance, token); - } - }); + const fetchBalances = tokens => { + logger.log('Tokens to update', tokens); + tokens + .map((t, index) => ({...t, index})) + .forEach(token => { + if (!token.isLoading) { + updateToken(token.index, {isLoading: true}); + return fetchBalance(token.isL1 ? getL1TokenBalance : getL2TokenBalance, token); + } + }); }; const fetchBalance = async (fn, token, retry = 1) => { diff --git a/src/providers/TokensProvider/tokens-reducer.js b/src/providers/TokensProvider/tokens-reducer.js index df37e90f..367b0ae1 100644 --- a/src/providers/TokensProvider/tokens-reducer.js +++ b/src/providers/TokensProvider/tokens-reducer.js @@ -1,4 +1,4 @@ -import {supportedTokens} from '../../config/envs'; +import {supportedL1ChainId, supportedL2ChainId, supportedTokens} from '../../config/envs'; import Tokens from '../../config/tokens'; export const actions = { @@ -6,8 +6,18 @@ export const actions = { }; export const initialState = [ - ...Tokens.L1.filter(t => supportedTokens.includes(t.symbol)).map(t => ({...t, isL1: true})), - ...Tokens.L2.filter(t => supportedTokens.includes(t.symbol)).map(t => ({...t, isL2: true})) + ...Tokens.L1.filter(t => supportedTokens.includes(t.symbol)).map(t => ({ + ...t, + isL1: true, + bridgeAddress: t.bridgeAddress?.[supportedL1ChainId], + tokenAddress: t.tokenAddress?.[supportedL1ChainId] + })), + ...Tokens.L2.filter(t => supportedTokens.includes(t.symbol)).map(t => ({ + ...t, + isL2: true, + bridgeAddress: t.bridgeAddress?.[supportedL2ChainId], + tokenAddress: t.tokenAddress?.[supportedL2ChainId] + })) ]; export const reducer = (state, action) => { diff --git a/src/providers/WalletProvider/WalletProvider.js b/src/providers/WalletProvider/WalletProvider.js index 4cfca992..1050d431 100644 --- a/src/providers/WalletProvider/WalletProvider.js +++ b/src/providers/WalletProvider/WalletProvider.js @@ -5,13 +5,13 @@ import {UseWalletProvider as UseWalletProviderWrapper} from 'use-wallet'; import {useEnvs} from '../../hooks'; export const WalletProvider = ({children}) => { - const {pollBalanceInterval, pollBlockNumberInterval, supportedChainId} = useEnvs(); + const {pollBalanceInterval, pollBlockNumberInterval, supportedL1ChainId} = useEnvs(); return ( <UseWalletProviderWrapper autoConnect={false} connectors={{ injected: { - chainId: [supportedChainId] + chainId: [supportedL1ChainId] } }} pollBalanceInterval={pollBalanceInterval} diff --git a/src/providers/WalletsProvider/wallets-hooks.js b/src/providers/WalletsProvider/wallets-hooks.js index fb965cb0..0bcc6243 100644 --- a/src/providers/WalletsProvider/wallets-hooks.js +++ b/src/providers/WalletsProvider/wallets-hooks.js @@ -66,7 +66,7 @@ export const useL2Wallet = () => { }; export const useStarknetWallet = () => { - const {autoConnect, supportedChainId} = useEnvs(); + const {autoConnect, supportedL2ChainId} = useEnvs(); const [error, setError] = useState(null); const [account, setAccount] = useState(''); const [chainId, setChainId] = useState(''); @@ -121,15 +121,8 @@ export const useStarknetWallet = () => { } }; - const isChainValid = chainId => { - return ( - (chainId === ChainType.L2.MAIN && supportedChainId === ChainType.L1.MAIN) || - (chainId === ChainType.L2.GOERLI && supportedChainId === ChainType.L1.GOERLI) - ); - }; - const handleChain = chainId => { - if (isChainValid(chainId)) { + if (chainId === supportedL2ChainId) { setStatus(WalletStatus.CONNECTED); setError(null); } else { diff --git a/src/routes/Login/Login.js b/src/routes/Login/Login.js index 4844f4f5..13149513 100644 --- a/src/routes/Login/Login.js +++ b/src/routes/Login/Login.js @@ -35,7 +35,7 @@ export const Login = () => { } = useLoginTranslation(); const [trackLoginScreen, trackDownloadClick, trackWalletClick, trackLoginError] = useLoginTracking(); - const {autoConnect, supportedChainId} = useEnvs(); + const {autoConnect, supportedL1ChainId} = useEnvs(); const [selectedWalletName, setSelectedWalletName] = useState(''); const [error, setError] = useState(null); const [, swapToL1] = useIsL1(); @@ -125,7 +125,7 @@ export const Login = () => { setError({ type: LoginErrorType.UNSUPPORTED_CHAIN_ID, message: evaluate(unsupportedChainIdTxt, { - chainName: ChainInfo.L1[supportedChainId].NAME + chainName: ChainInfo.L1[supportedL1ChainId].NAME }) }); } From 622c3b8f8b567ab45e2be5daa9a4f45e0a4f3837 Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Tue, 10 May 2022 12:58:56 +0000 Subject: [PATCH 199/211] prerelease: v1.4.2-dev.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### [1.4.2-dev.2](https://github.com/starkware-libs/starkgate-frontend/compare/v1.4.2-dev.1...v1.4.2-dev.2) (2022-05-10) ### 💉 Improvements * tokens addresses ([#178](https://github.com/starkware-libs/starkgate-frontend/issues/178)) ([c75a88a](https://github.com/starkware-libs/starkgate-frontend/commit/c75a88a667689d92294adad86d11bfd6ed6c0c52)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb452d05..3e362d1f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +### [1.4.2-dev.2](https://github.com/starkware-libs/starkgate-frontend/compare/v1.4.2-dev.1...v1.4.2-dev.2) (2022-05-10) + + +### 💉 Improvements + +* tokens addresses ([#178](https://github.com/starkware-libs/starkgate-frontend/issues/178)) ([c75a88a](https://github.com/starkware-libs/starkgate-frontend/commit/c75a88a667689d92294adad86d11bfd6ed6c0c52)) + ### [1.4.2-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.4.1...v1.4.2-dev.1) (2022-05-10) diff --git a/package.json b/package.json index 3f0fcfc8..e674708b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.4.2-dev.1", + "version": "1.4.2-dev.2", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From bbf19ba3df28b460a3665678e29ecd66b5b9970b Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Wed, 11 May 2022 20:18:24 +0300 Subject: [PATCH 200/211] feat: MultiChoiceMenu component (#181) --- .../UI/LoginErrorMessage/LoginErrorMessage.js | 12 ---- .../MultiChoiceErrorMessage.js | 12 ++++ .../MultiChoiceErrorMessage.module.scss} | 2 +- .../UI/MultiChoiceItem/MultiChoiceItem.js | 34 ++++++++++ .../MultiChoiceItem.module.scss | 68 +++++++++++++++++++ .../UI/MultiChoiceMenu/MultiChoiceMenu.js | 49 +++++++++++++ .../MultiChoiceMenu.module.scss | 43 ++++++++++++ src/components/UI/index.js | 4 +- src/routes/Login/Login.js | 55 +++++++-------- src/routes/Login/Login.module.scss | 40 ----------- 10 files changed, 236 insertions(+), 83 deletions(-) delete mode 100644 src/components/UI/LoginErrorMessage/LoginErrorMessage.js create mode 100644 src/components/UI/MultiChoiceErrorMessage/MultiChoiceErrorMessage.js rename src/components/UI/{LoginErrorMessage/LoginErrorMessage.module.scss => MultiChoiceErrorMessage/MultiChoiceErrorMessage.module.scss} (90%) create mode 100644 src/components/UI/MultiChoiceItem/MultiChoiceItem.js create mode 100644 src/components/UI/MultiChoiceItem/MultiChoiceItem.module.scss create mode 100644 src/components/UI/MultiChoiceMenu/MultiChoiceMenu.js create mode 100644 src/components/UI/MultiChoiceMenu/MultiChoiceMenu.module.scss diff --git a/src/components/UI/LoginErrorMessage/LoginErrorMessage.js b/src/components/UI/LoginErrorMessage/LoginErrorMessage.js deleted file mode 100644 index ba8ea14a..00000000 --- a/src/components/UI/LoginErrorMessage/LoginErrorMessage.js +++ /dev/null @@ -1,12 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; - -import styles from './LoginErrorMessage.module.scss'; - -export const LoginErrorMessage = ({message}) => { - return <div className={styles.loginErrorMessage}>❗ {message}</div>; -}; - -LoginErrorMessage.propTypes = { - message: PropTypes.string -}; diff --git a/src/components/UI/MultiChoiceErrorMessage/MultiChoiceErrorMessage.js b/src/components/UI/MultiChoiceErrorMessage/MultiChoiceErrorMessage.js new file mode 100644 index 00000000..55fa8925 --- /dev/null +++ b/src/components/UI/MultiChoiceErrorMessage/MultiChoiceErrorMessage.js @@ -0,0 +1,12 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import styles from './MultiChoiceErrorMessage.module.scss'; + +export const MultiChoiceErrorMessage = ({message}) => { + return <div className={styles.multiChoiceErrorMessage}>❗ {message}</div>; +}; + +MultiChoiceErrorMessage.propTypes = { + message: PropTypes.string +}; diff --git a/src/components/UI/LoginErrorMessage/LoginErrorMessage.module.scss b/src/components/UI/MultiChoiceErrorMessage/MultiChoiceErrorMessage.module.scss similarity index 90% rename from src/components/UI/LoginErrorMessage/LoginErrorMessage.module.scss rename to src/components/UI/MultiChoiceErrorMessage/MultiChoiceErrorMessage.module.scss index 3b60159c..b12dc7e9 100644 --- a/src/components/UI/LoginErrorMessage/LoginErrorMessage.module.scss +++ b/src/components/UI/MultiChoiceErrorMessage/MultiChoiceErrorMessage.module.scss @@ -1,6 +1,6 @@ @import '../../../index'; -.loginErrorMessage { +.multiChoiceErrorMessage { text-align: center; margin-top: 20px; line-height: 20px; diff --git a/src/components/UI/MultiChoiceItem/MultiChoiceItem.js b/src/components/UI/MultiChoiceItem/MultiChoiceItem.js new file mode 100644 index 00000000..280c5f60 --- /dev/null +++ b/src/components/UI/MultiChoiceItem/MultiChoiceItem.js @@ -0,0 +1,34 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {ReactComponent as ForwardIcon} from '../../../assets/svg/icons/forward.svg'; +import {toClasses, capitalize} from '../../../utils'; +import {DynamicIcon} from '../index'; +import styles from './MultiChoiceItem.module.scss'; + +export const MultiChoiceItem = ({name, description, logoPath, isDisabled, onClick}) => ( + <> + <div + className={toClasses(styles.multiChoiceItem, isDisabled && styles.isDisabled)} + onClick={onClick} + > + <div className={styles.left}> + <DynamicIcon path={logoPath} size={41} /> + <div className={styles.text}> + <div className={styles.title}>{capitalize(name)}</div> + <div className={styles.description}>{capitalize(description)}</div> + </div> + </div> + <ForwardIcon /> + </div> + <div className={styles.separator} /> + </> +); + +MultiChoiceItem.propTypes = { + name: PropTypes.string, + description: PropTypes.string, + logoPath: PropTypes.string, + isDisabled: PropTypes.bool, + onClick: PropTypes.func +}; diff --git a/src/components/UI/MultiChoiceItem/MultiChoiceItem.module.scss b/src/components/UI/MultiChoiceItem/MultiChoiceItem.module.scss new file mode 100644 index 00000000..2513a76e --- /dev/null +++ b/src/components/UI/MultiChoiceItem/MultiChoiceItem.module.scss @@ -0,0 +1,68 @@ +@import '../../../index'; + +.multiChoiceItem { + display: flex; + padding: 15px 20px; + cursor: pointer; + transition: 0.3s ease-in-out; + align-items: center; + justify-content: space-between; + + &.isDisabled { + pointer-events: none; + opacity: 0.2; + } + + .left { + display: flex; + + .text { + display: flex; + flex-direction: column; + margin-left: 20px; + + .title { + font-weight: 500; + font-size: 18px; + display: flex; + align-items: center; + line-height: 150%; + color: $--color-white; + } + + .description { + font-size: 12px; + display: flex; + align-items: center; + color: $--color-white; + opacity: 0.5; + line-height: 150%; + } + } + } + + svg { + transition: 0.3s ease-in-out; + } + + &:hover { + background: $--color-alpha-1; + box-sizing: border-box; + border-radius: 8px; + + svg { + transform: scale(2) scale3d(1, -1, -2); + } + } +} + +.separator { + display: none; + + &:not(:last-child) { + display: block; + height: 1px; + width: 100%; + background: $--color-alpha-3; + } +} diff --git a/src/components/UI/MultiChoiceMenu/MultiChoiceMenu.js b/src/components/UI/MultiChoiceMenu/MultiChoiceMenu.js new file mode 100644 index 00000000..33ee7bb6 --- /dev/null +++ b/src/components/UI/MultiChoiceMenu/MultiChoiceMenu.js @@ -0,0 +1,49 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import {toClasses} from '../../../utils'; +import {MultiChoiceErrorMessage} from '../MultiChoiceErrorMessage/MultiChoiceErrorMessage'; +import {MultiChoiceItem} from '../MultiChoiceItem/MultiChoiceItem'; +import styles from './MultiChoiceMenu.module.scss'; + +export const MultiChoiceMenu = ({title, description, choices, error, footer}) => { + const renderChoiceItems = () => { + return choices.map(choice => { + return ( + <MultiChoiceItem + key={choice.id} + description={choice.description} + isDisabled={choice.isDisabled || false} + logoPath={choice.logoPath} + name={choice.name} + onClick={choice.onClick} + /> + ); + }); + }; + + return ( + <div className={toClasses(styles.multiChoiceMenu, 'center')}> + <div className={styles.content}> + <div className={styles.title}>{title}</div> + {description && <p>{description}</p>} + <div className={styles.container}>{renderChoiceItems()}</div> + {error && <MultiChoiceErrorMessage message={error.message} />} + </div> + {footer && ( + <> + <div className={styles.separator} /> + {footer} + </> + )} + </div> + ); +}; + +MultiChoiceMenu.propTypes = { + title: PropTypes.string, + description: PropTypes.string, + choices: PropTypes.arrayOf(PropTypes.object), + error: PropTypes.object, + footer: PropTypes.oneOfType(PropTypes.array, PropTypes.object) +}; diff --git a/src/components/UI/MultiChoiceMenu/MultiChoiceMenu.module.scss b/src/components/UI/MultiChoiceMenu/MultiChoiceMenu.module.scss new file mode 100644 index 00000000..34132125 --- /dev/null +++ b/src/components/UI/MultiChoiceMenu/MultiChoiceMenu.module.scss @@ -0,0 +1,43 @@ +@import '../../../index'; + +.multiChoiceMenu { + position: absolute; + width: 450px; + background: $--color-alpha; + box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1); + border-radius: 20px; + + .content { + margin: 30px; + + p { + font-size: 12px; + color: $--color-white; + opacity: 0.7; + } + + .title { + margin-bottom: 30px; + font-weight: 600; + font-size: 24px; + line-height: 30px; + text-align: center; + letter-spacing: 0.01em; + color: $--color-white; + text-transform: capitalize; + } + + .container { + margin-top: 20px; + border: 1px solid $--color-alpha-3; + box-sizing: border-box; + border-radius: 8px; + } + } +} + +.separator { + height: 1px; + width: 100%; + background: $--color-alpha-3; +} diff --git a/src/components/UI/index.js b/src/components/UI/index.js index 851e484d..b5bfd9a8 100644 --- a/src/components/UI/index.js +++ b/src/components/UI/index.js @@ -32,6 +32,8 @@ export * from './RefreshIcon/RefreshIcon'; export * from './Stepper/Stepper'; export * from './StyledBackground/StyledBackground'; export * from './FullScreenContainer/FullScreenContainer'; -export * from './LoginErrorMessage/LoginErrorMessage'; +export * from './MultiChoiceErrorMessage/MultiChoiceErrorMessage'; +export * from './MultiChoiceMenu/MultiChoiceMenu'; +export * from './MultiChoiceItem/MultiChoiceItem'; export * from './Modal'; export * from './Toast'; diff --git a/src/routes/Login/Login.js b/src/routes/Login/Login.js index 13149513..3338a2d6 100644 --- a/src/routes/Login/Login.js +++ b/src/routes/Login/Login.js @@ -1,6 +1,6 @@ import React, {useEffect, useRef, useState} from 'react'; -import {LoginErrorMessage, WalletLogin} from '../../components/UI'; +import {MultiChoiceMenu} from '../../components/UI'; import { ActionType, ChainInfo, @@ -18,7 +18,7 @@ import { import {useHideModal, useProgressModal} from '../../providers/ModalProvider'; import {useIsL1, useIsL2, useTransfer} from '../../providers/TransferProvider'; import {useWallets} from '../../providers/WalletsProvider'; -import {evaluate, isChrome, toClasses} from '../../utils'; +import {evaluate, isChrome} from '../../utils'; import styles from './Login.module.scss'; const MODAL_TIMEOUT_DURATION = 2000; @@ -146,41 +146,38 @@ export const Login = () => { hideModal(); }; - const renderLoginWallets = () => { + const mapLoginWalletsToChoices = () => { return walletHandlers.map(walletHandler => { const { config: {id, description, name, logoPath} } = walletHandler; - return ( - <WalletLogin - key={id} - description={description} - isDisabled={!isChrome()} - logoPath={logoPath} - name={name} - onClick={() => onWalletConnect(walletHandler)} - /> - ); + return { + id, + description, + isDisabled: !isChrome(), + logoPath, + name, + onClick: () => onWalletConnect(walletHandler) + }; }); }; return ( - <div className={toClasses(styles.login, 'center')}> - <div className={styles.content}> - <div className={styles.title}>{titleTxt}</div> - <p> - {evaluate(subtitleTxt, { - networkName: - action === ActionType.TRANSFER_TO_L2 ? NetworkType.L1.name : NetworkType.L2.name - })} - </p> - <div className={styles.container}>{renderLoginWallets()}</div> - {error && <LoginErrorMessage message={error.message} />} - </div> - <div className={styles.separator} /> - <div className={styles.download}> - {downloadTxt[0]} <span onClick={onDownloadClick}>{downloadTxt[1]}</span> - </div> + <div className={styles.login}> + <MultiChoiceMenu + choices={mapLoginWalletsToChoices()} + description={evaluate(subtitleTxt, { + networkName: + action === ActionType.TRANSFER_TO_L2 ? NetworkType.L1.name : NetworkType.L2.name + })} + error={error} + footer={ + <div className={styles.download}> + {downloadTxt[0]} <span onClick={onDownloadClick}>{downloadTxt[1]}</span> + </div> + } + title={titleTxt} + /> </div> ); }; diff --git a/src/routes/Login/Login.module.scss b/src/routes/Login/Login.module.scss index d631f1a0..0d7bf878 100644 --- a/src/routes/Login/Login.module.scss +++ b/src/routes/Login/Login.module.scss @@ -1,40 +1,6 @@ @import '../../index'; .login { - position: absolute; - width: 450px; - background: $--color-alpha; - box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1); - border-radius: 20px; - - .content { - margin: 30px; - - p { - font-size: 12px; - color: $--color-white; - opacity: 0.7; - } - - .title { - margin-bottom: 30px; - font-weight: 600; - font-size: 24px; - line-height: 30px; - text-align: center; - letter-spacing: 0.01em; - color: $--color-white; - text-transform: capitalize; - } - - .container { - margin-top: 20px; - border: 1px solid $--color-alpha-3; - box-sizing: border-box; - border-radius: 8px; - } - } - .download { margin: 30px; font-size: 14px; @@ -50,9 +16,3 @@ } } } - -.separator { - height: 1px; - width: 100%; - background: $--color-alpha-3; -} From e795f1c4dafafc0d76189d80fe2bdfc344d61fb0 Mon Sep 17 00:00:00 2001 From: Dan Ziv <danz@starkware.co> Date: Wed, 11 May 2022 20:18:52 +0300 Subject: [PATCH 201/211] fix: change transfer tabs names (#182) --- src/components/Features/Transfer/Transfer.js | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/components/Features/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer.js index 577a0b44..8807e9d4 100644 --- a/src/components/Features/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer.js @@ -46,6 +46,18 @@ export const Transfer = () => { const getL1Token = useL1Token(); const getL2Token = useL2Token(); const maxDeposit = useMaxDeposit(); + const tabs = [ + { + text: `${NetworkType.L1.name} -> ${NetworkType.L2.name}`, + isActive: action === ActionType.TRANSFER_TO_L2, + onClick: () => onNetworkTabClick(ActionType.TRANSFER_TO_L2) + }, + { + text: `${NetworkType.L2.name} -> ${NetworkType.L1.name}`, + isActive: action === ActionType.TRANSFER_TO_L1, + onClick: () => onNetworkTabClick(ActionType.TRANSFER_TO_L1) + } + ]; useEffect(() => { if (!selectedToken) { @@ -118,13 +130,13 @@ export const Transfer = () => { }; const renderTabs = () => { - return Object.values(ActionType).map((tab, index) => { + return tabs.map((tab, index) => { return ( <TransferMenuTab key={index} - isActive={action === tab} - text={tab === ActionType.TRANSFER_TO_L2 ? NetworkType.L1.name : NetworkType.L2.name} - onClick={() => onNetworkTabClick(tab)} + isActive={tab.isActive} + text={tab.text} + onClick={tab.onClick} /> ); }); From b5f392428e09d94ac5a376e998b4a8bc7737cada Mon Sep 17 00:00:00 2001 From: semantic-release-bot <semantic-release-bot@martynus.net> Date: Wed, 11 May 2022 17:20:27 +0000 Subject: [PATCH 202/211] prerelease: v1.5.0-dev.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [1.5.0-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.4.2-dev.2...v1.5.0-dev.1) (2022-05-11) ### 🧩 Features * MultiChoiceMenu component ([#181](https://github.com/starkware-libs/starkgate-frontend/issues/181)) ([bbf19ba](https://github.com/starkware-libs/starkgate-frontend/commit/bbf19ba3df28b460a3665678e29ecd66b5b9970b)) ### 🔧 Fixes * change transfer tabs names ([#182](https://github.com/starkware-libs/starkgate-frontend/issues/182)) ([e795f1c](https://github.com/starkware-libs/starkgate-frontend/commit/e795f1c4dafafc0d76189d80fe2bdfc344d61fb0)) --- CHANGELOG.md | 12 ++++++++++++ package.json | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e362d1f..00103861 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ +## [1.5.0-dev.1](https://github.com/starkware-libs/starkgate-frontend/compare/v1.4.2-dev.2...v1.5.0-dev.1) (2022-05-11) + + +### 🧩 Features + +* MultiChoiceMenu component ([#181](https://github.com/starkware-libs/starkgate-frontend/issues/181)) ([bbf19ba](https://github.com/starkware-libs/starkgate-frontend/commit/bbf19ba3df28b460a3665678e29ecd66b5b9970b)) + + +### 🔧 Fixes + +* change transfer tabs names ([#182](https://github.com/starkware-libs/starkgate-frontend/issues/182)) ([e795f1c](https://github.com/starkware-libs/starkgate-frontend/commit/e795f1c4dafafc0d76189d80fe2bdfc344d61fb0)) + ### [1.4.2-dev.2](https://github.com/starkware-libs/starkgate-frontend/compare/v1.4.2-dev.1...v1.4.2-dev.2) (2022-05-10) diff --git a/package.json b/package.json index e674708b..8639e355 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "starkgate-frontend", - "version": "1.4.2-dev.2", + "version": "1.5.0-dev.1", "homepage": "./", "scripts": { "clean": "rm -rf ./dist", From 79eeb5b45314352434a5589b80ffb98478c83488 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciek=20Kami=C5=84ski?= <aundumla@gmail.com> Date: Wed, 11 May 2022 22:27:43 +0200 Subject: [PATCH 203/211] Fast withdrawal checkbox --- src/components/Features/Transfer/Transfer.js | 23 +++++++++++-- .../TransferProvider/TransferProvider.js | 8 +++++ .../TransferProvider/transfer-hooks.js | 7 ++++ .../TransferProvider/transfer-reducer.js | 33 +++++++++++++++---- 4 files changed, 63 insertions(+), 8 deletions(-) diff --git a/src/components/Features/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer.js index b1619c3a..842c556f 100644 --- a/src/components/Features/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer.js @@ -1,11 +1,17 @@ -import React, {useEffect, useState} from 'react'; +import React, {useContext, useEffect, useState} from 'react'; import {track, TrackEvent} from '../../../analytics'; import {ActionType, NetworkType} from '../../../enums'; import {useMaxDeposit, useTransferToL1, useTransferToL2} from '../../../hooks'; import {useMenu} from '../../../providers/MenuProvider'; import {useL1Token, useL2Token, useTokens} from '../../../providers/TokensProvider'; -import {useAmount, useIsL1, useIsL2, useTransfer} from '../../../providers/TransferProvider'; +import { + TransferContext, + useAmount, + useIsL1, + useIsL2, + useTransfer +} from '../../../providers/TransferProvider'; import utils from '../../../utils'; import { Loading, @@ -41,6 +47,9 @@ export const Transfer = () => { const getL2Token = useL2Token(); const maxDeposit = useMaxDeposit(); + const {isFastTransferToL1Available, isFastTransferToL1, setIsFastTransferToL1} = + useContext(TransferContext); + useEffect(() => { if (!selectedToken) { selectToken(tokens[0].symbol); @@ -162,6 +171,16 @@ export const Transfer = () => { onMaxClick={onMaxClick} onTokenSelect={showSelectTokenMenu} /> + {isFastTransferToL1Available && ( + <div style={{color: 'white'}}> + <label>Go fast through the wormhole</label> + <input + type="checkbox" + checked={isFastTransferToL1} + onChange={setIsFastTransferToL1} + /> + </div> + )} {hasInputError && <div className={styles.errorMsg}>{errorMsg}</div>} <TransferButton isDisabled={isButtonDisabled} onClick={onTransferClick} /> </> diff --git a/src/providers/TransferProvider/TransferProvider.js b/src/providers/TransferProvider/TransferProvider.js index 0ca3f6e1..a4c03f1d 100644 --- a/src/providers/TransferProvider/TransferProvider.js +++ b/src/providers/TransferProvider/TransferProvider.js @@ -37,11 +37,19 @@ export const TransferProvider = ({children}) => { }); }; + const setIsFastTransferToL1 = () => { + dispatch({ + type: actions.SET_IS_FAST_TRANSFER_TO_L1, + isFastTransferToL1: !state.isFastTransferToL1 + }); + }; + const value = { ...state, setAmount, selectToken, setActionType, + setIsFastTransferToL1, isL1, isL2, toNetwork, diff --git a/src/providers/TransferProvider/transfer-hooks.js b/src/providers/TransferProvider/transfer-hooks.js index 96b21e11..2b52bbe3 100644 --- a/src/providers/TransferProvider/transfer-hooks.js +++ b/src/providers/TransferProvider/transfer-hooks.js @@ -78,3 +78,10 @@ const useSelectToken = () => { [selectToken] ); }; + +// const useDAIFastWithdrawal = () => { +// const {selectedToken} = useSelectedToken() +// const isDAI = selectedToken === 'DAI' +// const +// return [isDAI] +// } diff --git a/src/providers/TransferProvider/transfer-reducer.js b/src/providers/TransferProvider/transfer-reducer.js index eb450409..0c37b56d 100644 --- a/src/providers/TransferProvider/transfer-reducer.js +++ b/src/providers/TransferProvider/transfer-reducer.js @@ -3,30 +3,41 @@ import {ActionType} from '../../enums'; export const actions = { SET_ACTION_TYPE: 'Transfer/SET_ACTION_TYPE', SELECT_TOKEN: 'Transfer/SELECT_TOKEN', - SET_AMOUNT: 'Transfer/SET_AMOUNT' + SET_AMOUNT: 'Transfer/SET_AMOUNT', + SET_IS_FAST_TRANSFER_TO_L1: 'Transfer/SET_IS_FAST_TRANSFER_TO_L1' }; export const initialState = { action: ActionType.TRANSFER_TO_L2, symbol: '', transferToL2Amount: '', - transferToL1Amount: '' + transferToL1Amount: '', + isFastTransferToL1Available: false, + isFastTransferToL1: false }; +function addIsFastTransferToL1Available(state) { + const {symbol, action} = state; + const isFastTransferToL1Available = symbol === 'DAI' && action === ActionType.TRANSFER_TO_L1; + console.log({symbol, action, isFastTransferToL1Available}); + return {...state, isFastTransferToL1Available}; +} + export const reducer = (state, action) => { + console.log(action, {action: state.action}); switch (action.type) { case actions.SET_ACTION_TYPE: { - return { + return addIsFastTransferToL1Available({ ...state, action: action.actionType - }; + }); } case actions.SELECT_TOKEN: { - return { + return addIsFastTransferToL1Available({ ...state, symbol: action.symbol - }; + }); } case actions.SET_AMOUNT: { @@ -42,6 +53,16 @@ export const reducer = (state, action) => { }; } + case actions.SET_IS_FAST_TRANSFER_TO_L1: { + if (state.isFastTransferToL1Available) { + return { + ...state, + isFastTransferToL1: action.isFastTransferToL1 + }; + } + return state; + } + default: return state; } From f9b22be461914a02914d9034d278b960924f33bf Mon Sep 17 00:00:00 2001 From: Nick Ulven <nickulven@gmail.com> Date: Thu, 12 May 2022 08:02:40 -0700 Subject: [PATCH 204/211] Add test goerli dai deployment --- src/abis/l1/OracleAuth.json | 78 ++++++++ src/abis/l1/StarknetDAIGateway.json | 52 +++++ src/abis/l1/index.js | 11 +- src/abis/l2/index.js | 3 +- src/abis/l2/token_gateway.json | 108 +++++++++++ src/api/bridge.js | 80 ++++++++ src/api/erc20.js | 24 +++ src/components/Features/Transfer/Transfer.js | 25 ++- src/config/tokens.js | 16 +- src/hooks/useContract.js | 22 ++- src/hooks/useTransferToL1.js | 179 +++++++++++++++++- .../TransferProvider/TransferProvider.js | 8 + .../TransferProvider/transfer-reducer.js | 27 ++- src/utils/starknet.js | 2 +- 14 files changed, 615 insertions(+), 20 deletions(-) create mode 100644 src/abis/l1/OracleAuth.json create mode 100644 src/abis/l1/StarknetDAIGateway.json create mode 100644 src/abis/l2/token_gateway.json diff --git a/src/abis/l1/OracleAuth.json b/src/abis/l1/OracleAuth.json new file mode 100644 index 00000000..1bb5984a --- /dev/null +++ b/src/abis/l1/OracleAuth.json @@ -0,0 +1,78 @@ +[ + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "sourceDomain", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "targetDomain", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "receiver", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "operator", + "type": "bytes32" + }, + { + "internalType": "uint128", + "name": "amount", + "type": "uint128" + }, + { + "internalType": "uint80", + "name": "nonce", + "type": "uint80" + }, + { + "internalType": "uint48", + "name": "timestamp", + "type": "uint48" + } + ], + "internalType": "struct WormholeGUID", + "name": "wormholeGUID", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signatures", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "maxFeePercentage", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "operatorFee", + "type": "uint256" + } + ], + "name": "requestMint", + "outputs": [ + { + "internalType": "uint256", + "name": "postFeeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalFee", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/src/abis/l1/StarknetDAIGateway.json b/src/abis/l1/StarknetDAIGateway.json new file mode 100644 index 00000000..e45ed3a6 --- /dev/null +++ b/src/abis/l1/StarknetDAIGateway.json @@ -0,0 +1,52 @@ +[ + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "sourceDomain", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "targetDomain", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "receiver", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "operator", + "type": "bytes32" + }, + { + "internalType": "uint128", + "name": "amount", + "type": "uint128" + }, + { + "internalType": "uint80", + "name": "nonce", + "type": "uint80" + }, + { + "internalType": "uint48", + "name": "timestamp", + "type": "uint48" + } + ], + "internalType": "struct WormholeGUID", + "name": "wormhole", + "type": "tuple" + } + ], + "name": "finalizeRegisterWormhole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/src/abis/l1/index.js b/src/abis/l1/index.js index 7ec6db8f..ee9b51d0 100644 --- a/src/abis/l1/index.js +++ b/src/abis/l1/index.js @@ -1,6 +1,15 @@ import L1_ERC20_ABI from './ERC20.json'; +import ORACLE_AUTH_ABI from './OracleAuth.json'; +import L1_DAI_GATEWAY_ABI from './StarknetDAIGateway.json'; import L1_ERC20_BRIDGE_ABI from './StarknetERC20Bridge.json'; import L1_ETH_BRIDGE_ABI from './StarknetEthBridge.json'; import L1_MESSAGING_ABI from './StarknetMessaging.json'; -export {L1_ERC20_ABI, L1_ERC20_BRIDGE_ABI, L1_ETH_BRIDGE_ABI, L1_MESSAGING_ABI}; +export { + L1_ERC20_ABI, + L1_ERC20_BRIDGE_ABI, + L1_DAI_GATEWAY_ABI, + L1_ETH_BRIDGE_ABI, + L1_MESSAGING_ABI, + ORACLE_AUTH_ABI +}; diff --git a/src/abis/l2/index.js b/src/abis/l2/index.js index c4a1900d..c5ab5b12 100644 --- a/src/abis/l2/index.js +++ b/src/abis/l2/index.js @@ -1,4 +1,5 @@ import L2_ERC20_ABI from './erc20.json'; import L2_BRIDGE_ABI from './token_bridge.json'; +import L2_DAI_GATEWAY_ABI from './token_gateway.json'; -export {L2_ERC20_ABI, L2_BRIDGE_ABI}; +export {L2_ERC20_ABI, L2_BRIDGE_ABI, L2_DAI_GATEWAY_ABI}; diff --git a/src/abis/l2/token_gateway.json b/src/abis/l2/token_gateway.json new file mode 100644 index 00000000..8482011c --- /dev/null +++ b/src/abis/l2/token_gateway.json @@ -0,0 +1,108 @@ +[ + { + "members": [ + { + "name": "low", + "offset": 0, + "type": "felt" + }, + { + "name": "high", + "offset": 1, + "type": "felt" + } + ], + "name": "Uint256", + "size": 2, + "type": "struct" + }, + { + "data": [ + { + "name": "source_domain", + "type": "felt" + }, + { + "name": "target_domain", + "type": "felt" + }, + { + "name": "receiver", + "type": "felt" + }, + { + "name": "operator", + "type": "felt" + }, + { + "name": "amount", + "type": "felt" + }, + { + "name": "nonce", + "type": "felt" + }, + { + "name": "timestamp", + "type": "felt" + } + ], + "keys": [], + "name": "WormholeInitialized", + "type": "event" + }, + { + "inputs": [ + { + "name": "target_domain", + "type": "felt" + }, + { + "name": "receiver", + "type": "felt" + }, + { + "name": "amount", + "type": "felt" + }, + { + "name": "operator", + "type": "felt" + } + ], + "name": "initiate_wormhole", + "outputs": [], + "type": "function" + }, + { + "inputs": [ + { + "name": "target_domain", + "type": "felt" + }, + { + "name": "receiver", + "type": "felt" + }, + { + "name": "amount", + "type": "felt" + }, + { + "name": "operator", + "type": "felt" + }, + { + "name": "nonce", + "type": "felt" + }, + { + "name": "timestamp", + "type": "felt" + } + ], + "name": "finalize_register_wormhole", + "outputs": [], + "type": "function" + } +] diff --git a/src/api/bridge.js b/src/api/bridge.js index d7c7387e..3ee778c9 100644 --- a/src/api/bridge.js +++ b/src/api/bridge.js @@ -18,6 +18,70 @@ export const deposit = async ({recipient, amount, decimals, contract, options, e ); }; +export const finalizeRegisterWormhole = async ({ + sourceDomain, + targetDomain, + receiver, + operator, + amount, + decimals, + nonce, + timestamp, + contract, + options, + emitter +}) => { + return sendL1Transaction( + contract, + 'finalizeRegisterWormhole', + [ + sourceDomain, + targetDomain, + receiver, + operator, + parseToDecimals(amount, decimals), + nonce, + timestamp + ], + options, + emitter + ); +}; + +export const requestMint = async ({ + sourceDomain, + targetDomain, + receiver, + operator, + amount, + decimals, + nonce, + timestamp, + signatures, + contract, + options, + emitter +}) => { + return sendL1Transaction( + contract, + 'deposit', + [ + sourceDomain, + targetDomain, + receiver, + operator, + parseToDecimals(amount, decimals), + nonce, + timestamp, + signatures, + 0, + 0 + ], + options, + emitter + ); +}; + export const depositEth = async ({recipient, amount, contract, options, emitter}) => { return sendL1Transaction( contract, @@ -67,3 +131,19 @@ export const initiateWithdraw = async ({recipient, amount, decimals, contract}) amount: parseToUint256(amount, decimals) }); }; + +export const initiateWormhole = async ({ + targetDomain, + receiver, + amount, + decimals, + operator, + contract +}) => { + return sendL2Transaction(contract, 'initiate_wormhole', { + target_domain: parseToFelt(targetDomain), + receiver: parseToFelt(receiver), + amount: parseToDecimals(amount, decimals), + operator: parseToFelt(operator) + }); +}; diff --git a/src/api/erc20.js b/src/api/erc20.js index c59da407..93b86880 100644 --- a/src/api/erc20.js +++ b/src/api/erc20.js @@ -2,9 +2,12 @@ import {TransactionStatus} from '../enums'; import {web3} from '../libs'; import { sendL1Transaction, + sendL2Transaction, callL1Contract, callL2Contract, parseFromDecimals, + parseToFelt, + parseToUint256, parseFromUint256 } from '../utils'; @@ -12,6 +15,13 @@ export const approve = async ({spender, value, contract, options}) => { return sendL1Transaction(contract, 'approve', [spender, value], options); }; +export const approveL2 = async ({spender, amount, contract}) => { + return sendL2Transaction(contract, 'approve', { + spender: parseToFelt(spender), + amount: parseToUint256(amount, 0) + }); +}; + export const allowance = async ({owner, spender, decimals, contract}) => { try { const allow = await callL1Contract(contract, 'allowance', [owner, spender]); @@ -21,6 +31,20 @@ export const allowance = async ({owner, spender, decimals, contract}) => { } }; +export const allowanceL2 = async ({owner, spender, decimals, contract}) => { + try { + const {remaining} = await callL2Contract( + contract, + 'allowance', + parseToFelt(owner), + parseToFelt(spender) + ); + return parseFromUint256(remaining, decimals); + } catch (ex) { + return Promise.reject(ex); + } +}; + export const balanceOf = async ({account, decimals, contract}, isL1 = true) => { try { if (isL1) { diff --git a/src/components/Features/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer.js index 8807e9d4..89c592c6 100644 --- a/src/components/Features/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer.js @@ -1,16 +1,23 @@ -import React, {useEffect, useState} from 'react'; +import React, {useContext, useEffect, useState} from 'react'; import {ActionType, NetworkType} from '../../../enums'; import { useMaxDeposit, useTransferToL1, + useWormholeToL1, useTransferToL2, useTransferTracking, useTransferTranslation } from '../../../hooks'; import {useMenu} from '../../../providers/MenuProvider'; import {useL1Token, useL2Token, useTokens} from '../../../providers/TokensProvider'; -import {useAmount, useIsL1, useIsL2, useTransfer} from '../../../providers/TransferProvider'; +import { + TransferContext, + useAmount, + useIsL1, + useIsL2, + useTransfer +} from '../../../providers/TransferProvider'; import {afterDecimal, evaluate, isNegative, isZero} from '../../../utils'; import { Loading, @@ -43,9 +50,12 @@ export const Transfer = () => { const {tokens, updateTokenBalance} = useTokens(); const transferToL2 = useTransferToL2(); const transferToL1 = useTransferToL1(); + const wormholeToL1 = useWormholeToL1(); const getL1Token = useL1Token(); const getL2Token = useL2Token(); const maxDeposit = useMaxDeposit(); + const {isFastTransferToL1Available, isFastTransferToL1, setIsFastTransferToL1} = + useContext(TransferContext); const tabs = [ { text: `${NetworkType.L1.name} -> ${NetworkType.L2.name}`, @@ -117,8 +127,9 @@ export const Transfer = () => { isL2 ? swapToL1() : swapToL2(); }; - const onTransferClick = async () => (isL1 ? transferToL2(amount) : transferToL1(amount)); - + const onTransferClick = async () => { + isL1 ? transferToL2(amount) : isFastTransferToL1 ? wormholeToL1(amount) : transferToL1(amount); + }; const onNetworkTabClick = tab => { if (action !== tab) { onSwapClick(); @@ -181,6 +192,12 @@ export const Transfer = () => { onMaxClick={onMaxClick} onTokenSelect={showSelectTokenMenu} /> + {isFastTransferToL1Available && ( + <div style={{color: 'white'}}> + <label>Go fast through the wormhole</label> + <input checked={isFastTransferToL1} type="checkbox" onChange={setIsFastTransferToL1} /> + </div> + )} {hasInputError && <div className={styles.errorMsg}>{errorMsg}</div>} <TransferButton isDisabled={isButtonDisabled} onClick={onTransferClick} /> </> diff --git a/src/config/tokens.js b/src/config/tokens.js index 22268d0c..cbb78398 100644 --- a/src/config/tokens.js +++ b/src/config/tokens.js @@ -56,11 +56,15 @@ export default { decimals: 18, bridgeAddress: { [ChainType.L1.MAIN]: '', - [ChainType.L1.GOERLI]: '0xd8beAa22894Cd33F24075459cFba287a10a104E4' + [ChainType.L1.GOERLI]: '0xb3abdf76D7B0c69cFC17CA78Dfa8783672c679Bd' + }, + gatewayAddress: { + [ChainType.L1.MAIN]: '', + [ChainType.L1.GOERLI]: '0xE0a9C2FDf5e1a0e2E00c4D793Dc1aA89B39F1C50' }, tokenAddress: { [ChainType.L1.MAIN]: '', - [ChainType.L1.GOERLI]: '0x11fE4B6AE13d2a6055C8D9cF65c55bac32B5d844' + [ChainType.L1.GOERLI]: '0xd7F24C609825a4348dEc3C856Aa8796696355Fcd' } }, { @@ -136,11 +140,15 @@ export default { decimals: 18, bridgeAddress: { [ChainType.L2.MAIN]: '', - [ChainType.L2.GOERLI]: '0x0278f24c3e74cbf7a375ec099df306289beb0605a346277d200b791a7f811a19' + [ChainType.L2.GOERLI]: '0x04244983b58869b7fedd1497ba17196b8c3676351b47aa9b85fbca1c476cb95c' + }, + gatewayAddress: { + [ChainType.L2.MAIN]: '', + [ChainType.L2.GOERLI]: '0x0197f9e93cfaf7068ca2daf3ec89c2b91d051505c2231a0a0b9f70801a91fb24' }, tokenAddress: { [ChainType.L2.MAIN]: '', - [ChainType.L2.GOERLI]: '0x03e85bfbb8e2a42b7bead9e88e9a1b19dbccf661471061807292120462396ec9' + [ChainType.L2.GOERLI]: '0x052713f43368f9f8ca407174f7bf44f68b6cba77f1fa386d320c0bb096145675' } }, { diff --git a/src/hooks/useContract.js b/src/hooks/useContract.js index aad22218..d92b3b45 100644 --- a/src/hooks/useContract.js +++ b/src/hooks/useContract.js @@ -1,7 +1,13 @@ import {useCallback, useMemo} from 'react'; -import {L1_ERC20_ABI, L1_ERC20_BRIDGE_ABI, L1_ETH_BRIDGE_ABI, L1_MESSAGING_ABI} from '../abis/l1'; -import {L2_BRIDGE_ABI, L2_ERC20_ABI} from '../abis/l2'; +import { + L1_ERC20_ABI, + L1_ERC20_BRIDGE_ABI, + ORACLE_AUTH_ABI, + L1_ETH_BRIDGE_ABI, + L1_MESSAGING_ABI +} from '../abis/l1'; +import {L2_BRIDGE_ABI, L2_ERC20_ABI, L2_DAI_GATEWAY_ABI} from '../abis/l2'; import {NetworkType} from '../enums'; import {useL1Token} from '../providers/TokensProvider'; import {useTransfer} from '../providers/TransferProvider'; @@ -89,3 +95,15 @@ export const useL1TokenBridgeContract = () => { [getTokenBridgeContract, getEthBridgeContract, ethToken] ); }; + +export const useL2TokenGatewayContract = () => { + const getContract = useContract(L2_DAI_GATEWAY_ABI, createL2Contract); + + return useCallback(gatewayAddress => getContract(gatewayAddress), [getContract]); +}; + +export const useOracleAuthContract = () => { + const getContract = useContract(ORACLE_AUTH_ABI, createL1Contract); + + return useCallback(oracleAuthAddress => getContract(oracleAuthAddress), [getContract]); +}; diff --git a/src/hooks/useTransferToL1.js b/src/hooks/useTransferToL1.js index 887f5b10..0f7a20b9 100644 --- a/src/hooks/useTransferToL1.js +++ b/src/hooks/useTransferToL1.js @@ -1,6 +1,8 @@ import {useCallback} from 'react'; -import {initiateWithdraw, withdraw} from '../api/bridge'; +import axios from 'axios'; +import {initiateWithdraw, initiateWormhole, withdraw, requestMint} from '../api/bridge'; +import {approveL2, allowanceL2} from '../api/erc20'; import { ActionType, CompleteTransferToL1Steps, @@ -15,7 +17,13 @@ import {useL1Token} from '../providers/TokensProvider'; import {useSelectedToken} from '../providers/TransferProvider'; import {useL1Wallet, useL2Wallet} from '../providers/WalletsProvider'; import {waitForTransaction} from '../utils'; -import {useL1TokenBridgeContract, useTokenBridgeContract} from './useContract'; +import { + useL1TokenBridgeContract, + useTokenBridgeContract, + useTokenContract, + useL2TokenGatewayContract, + useOracleAuthContract +} from './useContract'; import {useLogger} from './useLogger'; import {useCompleteTransferToL1Tracking, useTransferToL1Tracking} from './useTracking'; import {useTransfer} from './useTransfer'; @@ -31,6 +39,37 @@ export const useTransferToL1 = () => { const {handleProgress, handleData, handleError} = useTransfer(TransferToL1Steps); const progressOptions = useTransferProgress(); + const fetchAttestations = async (txHash) => { + const response = await axios.get(ORACLE_API_URL, { + params: { + type: 'wormhole', + index: txHash, + }, + }); + + const results = response.data || []; + + const signatures = '0x' + results.map((oracle: OracleData) => oracle.signatures.ethereum.signature).join(''); + + let wormholeGUID = {}; + if (results.length > 0) { + const wormholeData = results[0].data.event.match(/.{64}/g).map((hex: string) => `0x${hex}`); + wormholeGUID = decodeWormholeData(wormholeData); + } + + const oracleAuthContract = getOracleAuthContract('0x455f17Bdd98c19e3417129e7a821605661623aD7'); + requestMint({ + sourceDomain: wormholeGUID.sourceDomain, + targetDomain: wormholeGUID.targetDomain, + receiver: wormholeGUID.receiver, + operator: wormholeGUID.operator, + amount: wormholeGUID.amount, + nonce: wormholeGUID.nonce, + timestamp: wormholeGUID.timestamp, + signatures + }); + }; + return useCallback( async amount => { const {decimals, bridgeAddress, name, symbol} = selectedToken; @@ -72,6 +111,7 @@ export const useTransferToL1 = () => { logger.log('Waiting for tx to be received on L2'); await waitForTransaction(l2hash, TransactionStatus.RECEIVED); logger.log('Done', {l2hash}); + await fetchAttestations(l2hash); trackSuccess(l2hash); handleData({ type: ActionType.TRANSFER_TO_L1, @@ -103,6 +143,125 @@ export const useTransferToL1 = () => { ); }; +export const useWormholeToL1 = () => { + const logger = useLogger('useWormholeToL1'); + const [trackInitiated, trackSuccess, trackError] = useTransferToL1Tracking(); + const {account: l1Account} = useL1Wallet(); + const {account: l2Account, config: l2Config} = useL2Wallet(); + const selectedToken = useSelectedToken(); + const getTokenContract = useTokenContract(); + const getTokenGatewayContract = useL2TokenGatewayContract(); + const getOracleAuthContract = useOracleAuthContract(); + const {handleProgress, handleData, handleError} = useTransfer(TransferToL1Steps); + const progressOptions = useTransferProgress(); + + return useCallback( + async amount => { + const {decimals, tokenAddress, gatewayAddress, name, symbol} = selectedToken; + const tokenContract = getTokenContract(tokenAddress); + + const readAllowance = () => { + console.log(l2Account); + console.log(gatewayAddress.SN_GOERLI); + return allowanceL2({ + owner: l2Account, + spender: gatewayAddress.SN_GOERLI, + contract: tokenContract, + decimals + }); + }; + + const sendApproval = async () => { + return approveL2({ + spender: gatewayAddress.SN_GOERLI, + amount: '115792089237316195423570985008687907853269984665640564039457584007913129639935', + contract: tokenContract + }); + }; + + const sendInitiateWormhole = () => { + trackInitiated({ + from_address: l2Account, + to_address: l1Account, + amount, + symbol + }); + const gatewayContract = getTokenGatewayContract(gatewayAddress); + return initiateWormhole({ + targetDomain: `0x${Buffer.from("GOERLI-MASTER-1", "utf8").toString("hex")}`, + receiver: l1Account, + operator: l1Account, + contract: gatewayContract, + amount, + decimals + }); + }; + + try { + logger.log('Wormhole called'); + handleProgress( + progressOptions.waitForConfirm( + l2Config.name, + stepOf(TransferStep.CONFIRM_TX, TransferToL1Steps) + ) + ); + logger.log('Token needs approval'); + /* + handleProgress( + progressOptions.approval(symbol, stepOf(TransferStep.APPROVE, TransferToL2Steps)) + ); + */ + const allow = await readAllowance(); + logger.log('Current allow value', {allow}); + if (allow < amount) { + logger.log('Allow value is smaller then amount, sending approve tx...', {amount}); + await sendApproval(); + } + logger.log('Calling initiate wormhole'); + const {transaction_hash: l2hash} = await sendInitiateWormhole(); + logger.log('Tx hash received', {l2hash}); + handleProgress( + progressOptions.initiateWormhole( + amount, + symbol, + stepOf(TransferStep.INITIATE_WORMHOLE, TransferToL1Steps) + ) + ); + logger.log('Waiting for tx to be received on L2'); + await waitForTransaction(l2hash, TransactionStatus.RECEIVED); + logger.log('Done', {l2hash}); + await fetchAttestations(l2hash); + trackSuccess(l2hash); + handleData({ + type: ActionType.WORMHOLE_TO_L1, + sender: l2Account, + recipient: l1Account, + name, + symbol, + amount, + l2hash + }); + } catch (ex) { + logger.error(ex.message, ex); + trackError(ex); + handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, ex)); + } + }, + [ + l1Account, + l2Account, + getTokenGatewayContract, + handleData, + handleError, + handleProgress, + logger, + progressOptions, + selectedToken, + l2Config + ] + ); +}; + export const useCompleteTransferToL1 = () => { const logger = useLogger('useCompleteTransferToL1'); const {account: l1Account, config: l1Config} = useL1Wallet(); @@ -190,3 +349,19 @@ export const useCompleteTransferToL1 = () => { ] ); }; + + +const ORACLE_API_URL = 'http://23.242.90.215:8080'; + +function decodeWormholeData(wormholeData) { + const wormholeGUID = { + sourceDomain: wormholeData[0], + targetDomain: wormholeData[1], + receiver: wormholeData[2], + operator: wormholeData[3], + amount: wormholeData[4], + nonce: wormholeData[5], + timestamp: wormholeData[6], + }; + return wormholeGUID; +} diff --git a/src/providers/TransferProvider/TransferProvider.js b/src/providers/TransferProvider/TransferProvider.js index 0ca3f6e1..a4c03f1d 100644 --- a/src/providers/TransferProvider/TransferProvider.js +++ b/src/providers/TransferProvider/TransferProvider.js @@ -37,11 +37,19 @@ export const TransferProvider = ({children}) => { }); }; + const setIsFastTransferToL1 = () => { + dispatch({ + type: actions.SET_IS_FAST_TRANSFER_TO_L1, + isFastTransferToL1: !state.isFastTransferToL1 + }); + }; + const value = { ...state, setAmount, selectToken, setActionType, + setIsFastTransferToL1, isL1, isL2, toNetwork, diff --git a/src/providers/TransferProvider/transfer-reducer.js b/src/providers/TransferProvider/transfer-reducer.js index eb450409..fb528ec5 100644 --- a/src/providers/TransferProvider/transfer-reducer.js +++ b/src/providers/TransferProvider/transfer-reducer.js @@ -3,9 +3,16 @@ import {ActionType} from '../../enums'; export const actions = { SET_ACTION_TYPE: 'Transfer/SET_ACTION_TYPE', SELECT_TOKEN: 'Transfer/SELECT_TOKEN', - SET_AMOUNT: 'Transfer/SET_AMOUNT' + SET_AMOUNT: 'Transfer/SET_AMOUNT', + SET_IS_FAST_TRANSFER_TO_L1: 'Transfer/SET_IS_FAST_TRANSFER_TO_L1' }; +function addIsFastTransferToL1Available(state) { + const {symbol, action} = state; + const isFastTransferToL1Available = symbol === 'DAI' && action === ActionType.TRANSFER_TO_L1; + return {...state, isFastTransferToL1Available}; +} + export const initialState = { action: ActionType.TRANSFER_TO_L2, symbol: '', @@ -16,17 +23,17 @@ export const initialState = { export const reducer = (state, action) => { switch (action.type) { case actions.SET_ACTION_TYPE: { - return { + return addIsFastTransferToL1Available({ ...state, action: action.actionType - }; + }); } case actions.SELECT_TOKEN: { - return { + return addIsFastTransferToL1Available({ ...state, symbol: action.symbol - }; + }); } case actions.SET_AMOUNT: { @@ -42,6 +49,16 @@ export const reducer = (state, action) => { }; } + case actions.SET_IS_FAST_TRANSFER_TO_L1: { + if (state.isFastTransferToL1Available) { + return { + ...state, + isFastTransferToL1: action.isFastTransferToL1 + }; + } + return state; + } + default: return state; } diff --git a/src/utils/starknet.js b/src/utils/starknet.js index cbd92558..1ca62ba2 100644 --- a/src/utils/starknet.js +++ b/src/utils/starknet.js @@ -19,7 +19,7 @@ export const sendL2Transaction = async (contract, method, args = {}) => { try { const calldata = stark.compileCalldata(args); const transaction = { - contractAddress: contract.address, + contractAddress: contract.address.SN_GOERLI, entrypoint: method, calldata }; From 64fe92919163f4caf94a9ab0f7ba5543448aa2ac Mon Sep 17 00:00:00 2001 From: Nick Ulven <nickulven@gmail.com> Date: Thu, 12 May 2022 08:38:24 -0700 Subject: [PATCH 205/211] Fix error --- src/providers/TransferProvider/transfer-reducer.js | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/providers/TransferProvider/transfer-reducer.js b/src/providers/TransferProvider/transfer-reducer.js index 09a56fdb..f5794d44 100644 --- a/src/providers/TransferProvider/transfer-reducer.js +++ b/src/providers/TransferProvider/transfer-reducer.js @@ -7,12 +7,6 @@ export const actions = { SET_IS_FAST_TRANSFER_TO_L1: 'Transfer/SET_IS_FAST_TRANSFER_TO_L1' }; -function addIsFastTransferToL1Available(state) { - const {symbol, action} = state; - const isFastTransferToL1Available = symbol === 'DAI' && action === ActionType.TRANSFER_TO_L1; - return {...state, isFastTransferToL1Available}; -} - export const initialState = { action: ActionType.TRANSFER_TO_L2, symbol: '', @@ -25,12 +19,10 @@ export const initialState = { function addIsFastTransferToL1Available(state) { const {symbol, action} = state; const isFastTransferToL1Available = symbol === 'DAI' && action === ActionType.TRANSFER_TO_L1; - console.log({symbol, action, isFastTransferToL1Available}); return {...state, isFastTransferToL1Available}; } export const reducer = (state, action) => { - console.log(action, {action: state.action}); switch (action.type) { case actions.SET_ACTION_TYPE: { return addIsFastTransferToL1Available({ From 92e623de5577049d2e90d731beb0273da36170d4 Mon Sep 17 00:00:00 2001 From: Nick Ulven <nickulven@gmail.com> Date: Thu, 12 May 2022 08:40:17 -0700 Subject: [PATCH 206/211] Fix error --- src/components/Features/Transfer/Transfer.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/components/Features/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer.js index 8a25ee52..ed9a1752 100644 --- a/src/components/Features/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer.js @@ -69,9 +69,6 @@ export const Transfer = () => { } ]; - const {isFastTransferToL1Available, isFastTransferToL1, setIsFastTransferToL1} = - useContext(TransferContext); - useEffect(() => { if (!selectedToken) { selectToken(tokens[0].symbol); From 279cb5373cd16a24d7c8b0bf0db8e8416ae136a5 Mon Sep 17 00:00:00 2001 From: Nick Ulven <nickulven@gmail.com> Date: Thu, 12 May 2022 08:51:06 -0700 Subject: [PATCH 207/211] Fix error --- src/components/Features/Transfer/Transfer.js | 10 +-- src/hooks/useTransferToL1.js | 87 ++++++++++---------- 2 files changed, 47 insertions(+), 50 deletions(-) diff --git a/src/components/Features/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer.js index ed9a1752..85181bc0 100644 --- a/src/components/Features/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer.js @@ -193,13 +193,9 @@ export const Transfer = () => { onTokenSelect={showSelectTokenMenu} /> {isFastTransferToL1Available && ( - <div style={{color: 'white'}}> - <label>Go fast through the wormhole</label> - <input - type="checkbox" - checked={isFastTransferToL1} - onChange={setIsFastTransferToL1} - /> + <div id="check" style={{color: 'white'}}> + <label htmlFor="check">Go fast through the wormhole</label> + <input checked={isFastTransferToL1} type="checkbox" onChange={setIsFastTransferToL1} /> </div> )} {hasInputError && <div className={styles.errorMsg}>{errorMsg}</div>} diff --git a/src/hooks/useTransferToL1.js b/src/hooks/useTransferToL1.js index 0f7a20b9..7157717f 100644 --- a/src/hooks/useTransferToL1.js +++ b/src/hooks/useTransferToL1.js @@ -1,6 +1,6 @@ +import axios from 'axios'; import {useCallback} from 'react'; -import axios from 'axios'; import {initiateWithdraw, initiateWormhole, withdraw, requestMint} from '../api/bridge'; import {approveL2, allowanceL2} from '../api/erc20'; import { @@ -39,37 +39,6 @@ export const useTransferToL1 = () => { const {handleProgress, handleData, handleError} = useTransfer(TransferToL1Steps); const progressOptions = useTransferProgress(); - const fetchAttestations = async (txHash) => { - const response = await axios.get(ORACLE_API_URL, { - params: { - type: 'wormhole', - index: txHash, - }, - }); - - const results = response.data || []; - - const signatures = '0x' + results.map((oracle: OracleData) => oracle.signatures.ethereum.signature).join(''); - - let wormholeGUID = {}; - if (results.length > 0) { - const wormholeData = results[0].data.event.match(/.{64}/g).map((hex: string) => `0x${hex}`); - wormholeGUID = decodeWormholeData(wormholeData); - } - - const oracleAuthContract = getOracleAuthContract('0x455f17Bdd98c19e3417129e7a821605661623aD7'); - requestMint({ - sourceDomain: wormholeGUID.sourceDomain, - targetDomain: wormholeGUID.targetDomain, - receiver: wormholeGUID.receiver, - operator: wormholeGUID.operator, - amount: wormholeGUID.amount, - nonce: wormholeGUID.nonce, - timestamp: wormholeGUID.timestamp, - signatures - }); - }; - return useCallback( async amount => { const {decimals, bridgeAddress, name, symbol} = selectedToken; @@ -111,7 +80,6 @@ export const useTransferToL1 = () => { logger.log('Waiting for tx to be received on L2'); await waitForTransaction(l2hash, TransactionStatus.RECEIVED); logger.log('Done', {l2hash}); - await fetchAttestations(l2hash); trackSuccess(l2hash); handleData({ type: ActionType.TRANSFER_TO_L1, @@ -155,19 +123,49 @@ export const useWormholeToL1 = () => { const {handleProgress, handleData, handleError} = useTransfer(TransferToL1Steps); const progressOptions = useTransferProgress(); + const fetchAttestations = async txHash => { + const response = await axios.get(ORACLE_API_URL, { + params: { + type: 'wormhole', + index: txHash + } + }); + + const results = response.data || []; + + const signatures = `0x${results.map(oracle => oracle.signatures.ethereum.signature).join('')}`; + + let wormholeGUID = {}; + if (results.length > 0) { + const wormholeData = results[0].data.event.match(/.{64}/g).map(hex => `0x${hex}`); + wormholeGUID = decodeWormholeData(wormholeData); + } + + const oracleAuthContract = getOracleAuthContract('0x455f17Bdd98c19e3417129e7a821605661623aD7'); + requestMint({ + sourceDomain: wormholeGUID.sourceDomain, + targetDomain: wormholeGUID.targetDomain, + receiver: wormholeGUID.receiver, + operator: wormholeGUID.operator, + amount: wormholeGUID.amount, + nonce: wormholeGUID.nonce, + timestamp: wormholeGUID.timestamp, + signatures, + contract: oracleAuthContract + }); + }; + return useCallback( async amount => { - const {decimals, tokenAddress, gatewayAddress, name, symbol} = selectedToken; + const {decimals, tokenAddress, gatewayAddress, symbol} = selectedToken; const tokenContract = getTokenContract(tokenAddress); const readAllowance = () => { - console.log(l2Account); - console.log(gatewayAddress.SN_GOERLI); return allowanceL2({ owner: l2Account, spender: gatewayAddress.SN_GOERLI, - contract: tokenContract, - decimals + decimals, + contract: tokenContract }); }; @@ -188,12 +186,12 @@ export const useWormholeToL1 = () => { }); const gatewayContract = getTokenGatewayContract(gatewayAddress); return initiateWormhole({ - targetDomain: `0x${Buffer.from("GOERLI-MASTER-1", "utf8").toString("hex")}`, + targetDomain: `0x${Buffer.from('GOERLI-MASTER-1', 'utf8').toString('hex')}`, receiver: l1Account, operator: l1Account, - contract: gatewayContract, amount, - decimals + decimals, + contract: gatewayContract }); }; @@ -220,6 +218,7 @@ export const useWormholeToL1 = () => { logger.log('Calling initiate wormhole'); const {transaction_hash: l2hash} = await sendInitiateWormhole(); logger.log('Tx hash received', {l2hash}); + /* handleProgress( progressOptions.initiateWormhole( amount, @@ -227,11 +226,13 @@ export const useWormholeToL1 = () => { stepOf(TransferStep.INITIATE_WORMHOLE, TransferToL1Steps) ) ); + */ logger.log('Waiting for tx to be received on L2'); await waitForTransaction(l2hash, TransactionStatus.RECEIVED); logger.log('Done', {l2hash}); await fetchAttestations(l2hash); trackSuccess(l2hash); + /* handleData({ type: ActionType.WORMHOLE_TO_L1, sender: l2Account, @@ -241,6 +242,7 @@ export const useWormholeToL1 = () => { amount, l2hash }); + */ } catch (ex) { logger.error(ex.message, ex); trackError(ex); @@ -350,7 +352,6 @@ export const useCompleteTransferToL1 = () => { ); }; - const ORACLE_API_URL = 'http://23.242.90.215:8080'; function decodeWormholeData(wormholeData) { @@ -361,7 +362,7 @@ function decodeWormholeData(wormholeData) { operator: wormholeData[3], amount: wormholeData[4], nonce: wormholeData[5], - timestamp: wormholeData[6], + timestamp: wormholeData[6] }; return wormholeGUID; } From e539aa8e5f54142bb021d631a2dd625dcd132449 Mon Sep 17 00:00:00 2001 From: Nick Ulven <nickulven@gmail.com> Date: Thu, 12 May 2022 11:27:18 -0700 Subject: [PATCH 208/211] Add fast withdrawals --- src/analytics/track-event.js | 6 + src/api/bridge.js | 16 +-- src/components/Features/Transfer/Transfer.js | 10 +- src/config/strings.js | 8 ++ src/enums/ActionType.js | 3 +- src/enums/TransferStep.js | 12 +- src/hooks/useTracking.js | 4 + src/hooks/useTransferProgress.js | 18 +++ src/hooks/useTransferToL1.js | 120 ++++++++++-------- .../TokensProvider/tokens-reducer.js | 6 +- .../TransferProvider/transfer-hooks.js | 7 - src/utils/starknet.js | 2 +- 12 files changed, 132 insertions(+), 80 deletions(-) diff --git a/src/analytics/track-event.js b/src/analytics/track-event.js index ea40f06f..a03cff63 100644 --- a/src/analytics/track-event.js +++ b/src/analytics/track-event.js @@ -24,6 +24,12 @@ export const TrackEvent = { ERROR: 'TRANSFER_MENU/transfer_to_l1_error', REJECT: 'TRANSFER_MENU/transfer_to_l1_reject' }, + FAST_TRANSFER_TO_L1: { + INITIATED: 'TRANSFER_MENU/fast_transfer_to_l1_initiated', + SUCCESS: 'TRANSFER_MENU/fast_transfer_to_l1_success', + ERROR: 'TRANSFER_MENU/fast_transfer_to_l1_error', + REJECT: 'TRANSFER_MENU/fast_transfer_to_l1_reject' + }, COMPLETE_TRANSFER_TO_L1: { INITIATED: 'TRANSFER_MENU/complete_transfer_to_l1_initiated', SUCCESS: 'TRANSFER_MENU/complete_transfer_to_l1_success', diff --git a/src/api/bridge.js b/src/api/bridge.js index 3ee778c9..f9f7d3f7 100644 --- a/src/api/bridge.js +++ b/src/api/bridge.js @@ -54,7 +54,6 @@ export const requestMint = async ({ receiver, operator, amount, - decimals, nonce, timestamp, signatures, @@ -64,19 +63,8 @@ export const requestMint = async ({ }) => { return sendL1Transaction( contract, - 'deposit', - [ - sourceDomain, - targetDomain, - receiver, - operator, - parseToDecimals(amount, decimals), - nonce, - timestamp, - signatures, - 0, - 0 - ], + 'requestMint', + [[sourceDomain, targetDomain, receiver, operator, amount, nonce, timestamp], signatures, 0, 0], options, emitter ); diff --git a/src/components/Features/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer.js index 85181bc0..d8250447 100644 --- a/src/components/Features/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer.js @@ -4,7 +4,7 @@ import {ActionType, NetworkType} from '../../../enums'; import { useMaxDeposit, useTransferToL1, - useWormholeToL1, + useFastTransferToL1, useTransferToL2, useTransferTracking, useTransferTranslation @@ -50,7 +50,7 @@ export const Transfer = () => { const {tokens, updateTokenBalance} = useTokens(); const transferToL2 = useTransferToL2(); const transferToL1 = useTransferToL1(); - const wormholeToL1 = useWormholeToL1(); + const fastTransferToL1 = useFastTransferToL1(); const getL1Token = useL1Token(); const getL2Token = useL2Token(); const maxDeposit = useMaxDeposit(); @@ -128,7 +128,11 @@ export const Transfer = () => { }; const onTransferClick = async () => { - isL1 ? transferToL2(amount) : isFastTransferToL1 ? wormholeToL1(amount) : transferToL1(amount); + isL1 + ? transferToL2(amount) + : isFastTransferToL1 + ? fastTransferToL1(amount) + : transferToL1(amount); }; const onNetworkTabClick = tab => { if (action !== tab) { diff --git a/src/config/strings.js b/src/config/strings.js index d925cb77..498d211f 100644 --- a/src/config/strings.js +++ b/src/config/strings.js @@ -85,6 +85,14 @@ export default { type: 'Initiate transfer', message: 'Initiating transfer of {{amount}} {{symbol}} from StarkNet...' }, + initiateWormhole: { + type: 'Initiate fast transfer', + message: 'Initiating fast transfer of {{amount}} {{symbol}} from StarkNet...' + }, + requestMint: { + type: 'Request mint', + message: 'Requesting mint of {{amount}} {{symbol}} from StarkNet...' + }, withdraw: { type: 'Transfer in progress', message: 'Transferring {{amount}} {{symbol}} to Ethereum...' diff --git a/src/enums/ActionType.js b/src/enums/ActionType.js index 6e5f31aa..f683a951 100644 --- a/src/enums/ActionType.js +++ b/src/enums/ActionType.js @@ -1,4 +1,5 @@ export const ActionType = { TRANSFER_TO_L2: 1, - TRANSFER_TO_L1: 2 + TRANSFER_TO_L1: 2, + FAST_TRANSFER_TO_L1: 3 }; diff --git a/src/enums/TransferStep.js b/src/enums/TransferStep.js index 7a2c9ac1..f48877a9 100644 --- a/src/enums/TransferStep.js +++ b/src/enums/TransferStep.js @@ -3,8 +3,10 @@ export const TransferStep = { CONFIRM_TX: 'Confirm transaction', WAIT_FOR_TX: 'Wait for transaction to received', INITIATE_WITHDRAW: 'Initiate transfer', + INITIATE_FAST_WITHDRAW: 'Initiate fast transfer', WITHDRAW: 'Send L2→L1 transfer', - DEPOSIT: 'Send L1→L2 transfer' + DEPOSIT: 'Send L1→L2 transfer', + FAST_WITHDRAW: 'Send L2→L1 fast transfer' }; export const TransferToL2Steps = [ @@ -19,6 +21,14 @@ export const TransferToL1Steps = [ TransferStep.WAIT_FOR_TX ]; +export const FastTransferToL1Steps = [ + TransferStep.CONFIRM_TX, + TransferStep.INITIATE_FAST_WITHDRAW, + TransferStep.WAIT_FOR_TX, + TransferStep.CONFIRM_TX, + TransferStep.FAST_WITHDRAW +]; + export const CompleteTransferToL1Steps = [TransferStep.CONFIRM_TX, TransferStep.WITHDRAW]; export const stepOf = (step, steps) => { diff --git a/src/hooks/useTracking.js b/src/hooks/useTracking.js index 0d1760e8..810b65a0 100644 --- a/src/hooks/useTracking.js +++ b/src/hooks/useTracking.js @@ -56,6 +56,10 @@ export const useTransferToL2Tracking = () => { return useTracking([...Object.values(TrackEvent.TRANSFER.TRANSFER_TO_L2)]); }; +export const useFastTransferToL1Tracking = () => { + return useTracking([...Object.values(TrackEvent.TRANSFER.FAST_TRANSFER_TO_L1)]); +}; + export const useCompleteTransferToL1Tracking = () => { return useTracking([...Object.values(TrackEvent.TRANSFER.COMPLETE_TRANSFER_TO_L1)]); }; diff --git a/src/hooks/useTransferProgress.js b/src/hooks/useTransferProgress.js index b8ffc720..04736e14 100644 --- a/src/hooks/useTransferProgress.js +++ b/src/hooks/useTransferProgress.js @@ -36,6 +36,24 @@ export const useTransferProgress = () => { activeStep }; }, + initiateWormhole: (amount, symbol, activeStep) => { + const {initiateWormhole} = transferProgressStrings; + const message = evaluate(initiateWormhole.message, {amount, symbol}); + return { + type: initiateWormhole.type, + message, + activeStep + }; + }, + requestMint: (amount, symbol, activeStep) => { + const {requestMint} = transferProgressStrings; + const message = evaluate(requestMint.message, {amount, symbol}); + return { + type: requestMint.type, + message, + activeStep + }; + }, waitForConfirm: (walletName, activeStep) => { const {waitForConfirm} = transferProgressStrings; const type = evaluate(waitForConfirm.type, {walletName}); diff --git a/src/hooks/useTransferToL1.js b/src/hooks/useTransferToL1.js index 7157717f..1553939c 100644 --- a/src/hooks/useTransferToL1.js +++ b/src/hooks/useTransferToL1.js @@ -10,7 +10,8 @@ import { TransactionStatus, TransferError, TransferStep, - TransferToL1Steps + TransferToL1Steps, + FastTransferToL1Steps } from '../enums'; import {useWithdrawalListener} from '../providers/EventManagerProvider'; import {useL1Token} from '../providers/TokensProvider'; @@ -25,7 +26,11 @@ import { useOracleAuthContract } from './useContract'; import {useLogger} from './useLogger'; -import {useCompleteTransferToL1Tracking, useTransferToL1Tracking} from './useTracking'; +import { + useCompleteTransferToL1Tracking, + useTransferToL1Tracking, + useFastTransferToL1Tracking +} from './useTracking'; import {useTransfer} from './useTransfer'; import {useTransferProgress} from './useTransferProgress'; @@ -111,59 +116,27 @@ export const useTransferToL1 = () => { ); }; -export const useWormholeToL1 = () => { - const logger = useLogger('useWormholeToL1'); - const [trackInitiated, trackSuccess, trackError] = useTransferToL1Tracking(); +export const useFastTransferToL1 = () => { + const logger = useLogger('useFastTransferToL1'); + const [trackInitiated, trackSuccess, trackError] = useFastTransferToL1Tracking(); const {account: l1Account} = useL1Wallet(); const {account: l2Account, config: l2Config} = useL2Wallet(); const selectedToken = useSelectedToken(); const getTokenContract = useTokenContract(); const getTokenGatewayContract = useL2TokenGatewayContract(); const getOracleAuthContract = useOracleAuthContract(); - const {handleProgress, handleData, handleError} = useTransfer(TransferToL1Steps); + const {handleProgress, handleData, handleError} = useTransfer(FastTransferToL1Steps); const progressOptions = useTransferProgress(); - const fetchAttestations = async txHash => { - const response = await axios.get(ORACLE_API_URL, { - params: { - type: 'wormhole', - index: txHash - } - }); - - const results = response.data || []; - - const signatures = `0x${results.map(oracle => oracle.signatures.ethereum.signature).join('')}`; - - let wormholeGUID = {}; - if (results.length > 0) { - const wormholeData = results[0].data.event.match(/.{64}/g).map(hex => `0x${hex}`); - wormholeGUID = decodeWormholeData(wormholeData); - } - - const oracleAuthContract = getOracleAuthContract('0x455f17Bdd98c19e3417129e7a821605661623aD7'); - requestMint({ - sourceDomain: wormholeGUID.sourceDomain, - targetDomain: wormholeGUID.targetDomain, - receiver: wormholeGUID.receiver, - operator: wormholeGUID.operator, - amount: wormholeGUID.amount, - nonce: wormholeGUID.nonce, - timestamp: wormholeGUID.timestamp, - signatures, - contract: oracleAuthContract - }); - }; - return useCallback( async amount => { - const {decimals, tokenAddress, gatewayAddress, symbol} = selectedToken; + const {decimals, tokenAddress, gatewayAddress, name, symbol} = selectedToken; const tokenContract = getTokenContract(tokenAddress); const readAllowance = () => { return allowanceL2({ owner: l2Account, - spender: gatewayAddress.SN_GOERLI, + spender: gatewayAddress, decimals, contract: tokenContract }); @@ -171,7 +144,7 @@ export const useWormholeToL1 = () => { const sendApproval = async () => { return approveL2({ - spender: gatewayAddress.SN_GOERLI, + spender: gatewayAddress, amount: '115792089237316195423570985008687907853269984665640564039457584007913129639935', contract: tokenContract }); @@ -195,20 +168,69 @@ export const useWormholeToL1 = () => { }); }; + const fetchAttestations = async txHash => { + const response = await axios.get(ORACLE_API_URL, { + params: { + type: 'wormhole', + index: txHash + } + }); + + const results = response.data || []; + + const signatures = `0x${results + .map(oracle => oracle.signatures.ethereum.signature) + .join('')}`; + + let wormholeGUID = {}; + if (results.length > 0) { + const wormholeData = results[0].data.event.match(/.{64}/g).map(hex => `0x${hex}`); + wormholeGUID = decodeWormholeData(wormholeData); + } + + const oracleAuthContract = getOracleAuthContract( + '0x455f17Bdd98c19e3417129e7a821605661623aD7' + ); + requestMint({ + sourceDomain: wormholeGUID.sourceDomain, + targetDomain: wormholeGUID.targetDomain, + receiver: wormholeGUID.receiver, + operator: wormholeGUID.operator, + amount: wormholeGUID.amount, + nonce: wormholeGUID.nonce, + timestamp: wormholeGUID.timestamp, + signatures, + contract: oracleAuthContract, + options: {from: l1Account}, + emitter: onTransactionHash + }); + }; + + const onTransactionHash = (error, transactionHash) => { + if (!error) { + logger.log('Tx signed', {transactionHash}); + handleProgress( + progressOptions.requestMint( + amount, + symbol, + stepOf(TransferStep.FAST_WITHDRAW, FastTransferToL1Steps) + ) + ); + } + }; + try { logger.log('Wormhole called'); handleProgress( progressOptions.waitForConfirm( l2Config.name, - stepOf(TransferStep.CONFIRM_TX, TransferToL1Steps) + stepOf(TransferStep.CONFIRM_TX, FastTransferToL1Steps) ) ); logger.log('Token needs approval'); - /* handleProgress( - progressOptions.approval(symbol, stepOf(TransferStep.APPROVE, TransferToL2Steps)) + progressOptions.approval(symbol, stepOf(TransferStep.APPROVE, FastTransferToL1Steps)) ); - */ const allow = await readAllowance(); logger.log('Current allow value', {allow}); if (allow < amount) { @@ -218,21 +240,18 @@ export const useWormholeToL1 = () => { logger.log('Calling initiate wormhole'); const {transaction_hash: l2hash} = await sendInitiateWormhole(); logger.log('Tx hash received', {l2hash}); - /* handleProgress( progressOptions.initiateWormhole( amount, symbol, - stepOf(TransferStep.INITIATE_WORMHOLE, TransferToL1Steps) + stepOf(TransferStep.INITIATE_FAST_WITHDRAW, FastTransferToL1Steps) ) ); - */ logger.log('Waiting for tx to be received on L2'); - await waitForTransaction(l2hash, TransactionStatus.RECEIVED); + await waitForTransaction(l2hash, TransactionStatus.ACCEPTED_ON_L2); logger.log('Done', {l2hash}); await fetchAttestations(l2hash); trackSuccess(l2hash); - /* handleData({ type: ActionType.WORMHOLE_TO_L1, sender: l2Account, @@ -242,7 +261,6 @@ export const useWormholeToL1 = () => { amount, l2hash }); - */ } catch (ex) { logger.error(ex.message, ex); trackError(ex); diff --git a/src/providers/TokensProvider/tokens-reducer.js b/src/providers/TokensProvider/tokens-reducer.js index 367b0ae1..91a2b332 100644 --- a/src/providers/TokensProvider/tokens-reducer.js +++ b/src/providers/TokensProvider/tokens-reducer.js @@ -10,13 +10,15 @@ export const initialState = [ ...t, isL1: true, bridgeAddress: t.bridgeAddress?.[supportedL1ChainId], - tokenAddress: t.tokenAddress?.[supportedL1ChainId] + tokenAddress: t.tokenAddress?.[supportedL1ChainId], + gatewayAddress: t.gatewayAddress?.[supportedL1ChainId] })), ...Tokens.L2.filter(t => supportedTokens.includes(t.symbol)).map(t => ({ ...t, isL2: true, bridgeAddress: t.bridgeAddress?.[supportedL2ChainId], - tokenAddress: t.tokenAddress?.[supportedL2ChainId] + tokenAddress: t.tokenAddress?.[supportedL2ChainId], + gatewayAddress: t.gatewayAddress?.[supportedL2ChainId] })) ]; diff --git a/src/providers/TransferProvider/transfer-hooks.js b/src/providers/TransferProvider/transfer-hooks.js index 2b52bbe3..96b21e11 100644 --- a/src/providers/TransferProvider/transfer-hooks.js +++ b/src/providers/TransferProvider/transfer-hooks.js @@ -78,10 +78,3 @@ const useSelectToken = () => { [selectToken] ); }; - -// const useDAIFastWithdrawal = () => { -// const {selectedToken} = useSelectedToken() -// const isDAI = selectedToken === 'DAI' -// const -// return [isDAI] -// } diff --git a/src/utils/starknet.js b/src/utils/starknet.js index 1ca62ba2..cbd92558 100644 --- a/src/utils/starknet.js +++ b/src/utils/starknet.js @@ -19,7 +19,7 @@ export const sendL2Transaction = async (contract, method, args = {}) => { try { const calldata = stark.compileCalldata(args); const transaction = { - contractAddress: contract.address.SN_GOERLI, + contractAddress: contract.address, entrypoint: method, calldata }; From 307dd6ed0f4805ad41e84a6348f5642e986a6c0d Mon Sep 17 00:00:00 2001 From: Nick Ulven <nickulven@gmail.com> Date: Thu, 19 May 2022 10:05:58 -0700 Subject: [PATCH 209/211] Change wormhole to teleport --- src/abis/l1/OracleAuth.json | 4 +- src/abis/l1/StarknetDAIGateway.json | 6 +- src/abis/l2/token_gateway.json | 6 +- src/api/bridge.js | 8 +-- src/components/Features/Transfer/Transfer.js | 2 +- src/config/strings.js | 2 +- src/hooks/useTransferProgress.js | 8 +-- src/hooks/useTransferToL1.js | 60 ++++++++++---------- 8 files changed, 48 insertions(+), 48 deletions(-) diff --git a/src/abis/l1/OracleAuth.json b/src/abis/l1/OracleAuth.json index 1bb5984a..f5167613 100644 --- a/src/abis/l1/OracleAuth.json +++ b/src/abis/l1/OracleAuth.json @@ -39,8 +39,8 @@ "type": "uint48" } ], - "internalType": "struct WormholeGUID", - "name": "wormholeGUID", + "internalType": "struct TeleportGUID", + "name": "teleportGUID", "type": "tuple" }, { diff --git a/src/abis/l1/StarknetDAIGateway.json b/src/abis/l1/StarknetDAIGateway.json index e45ed3a6..0c1746d9 100644 --- a/src/abis/l1/StarknetDAIGateway.json +++ b/src/abis/l1/StarknetDAIGateway.json @@ -39,12 +39,12 @@ "type": "uint48" } ], - "internalType": "struct WormholeGUID", - "name": "wormhole", + "internalType": "struct TeleportGUID", + "name": "teleport", "type": "tuple" } ], - "name": "finalizeRegisterWormhole", + "name": "finalizeRegisterTeleport", "outputs": [], "stateMutability": "nonpayable", "type": "function" diff --git a/src/abis/l2/token_gateway.json b/src/abis/l2/token_gateway.json index 8482011c..bfab29a4 100644 --- a/src/abis/l2/token_gateway.json +++ b/src/abis/l2/token_gateway.json @@ -48,7 +48,7 @@ } ], "keys": [], - "name": "WormholeInitialized", + "name": "TeleportInitialized", "type": "event" }, { @@ -70,7 +70,7 @@ "type": "felt" } ], - "name": "initiate_wormhole", + "name": "initiate_teleport", "outputs": [], "type": "function" }, @@ -101,7 +101,7 @@ "type": "felt" } ], - "name": "finalize_register_wormhole", + "name": "finalize_register_teleport", "outputs": [], "type": "function" } diff --git a/src/api/bridge.js b/src/api/bridge.js index f9f7d3f7..35171463 100644 --- a/src/api/bridge.js +++ b/src/api/bridge.js @@ -18,7 +18,7 @@ export const deposit = async ({recipient, amount, decimals, contract, options, e ); }; -export const finalizeRegisterWormhole = async ({ +export const finalizeRegisterTeleport = async ({ sourceDomain, targetDomain, receiver, @@ -33,7 +33,7 @@ export const finalizeRegisterWormhole = async ({ }) => { return sendL1Transaction( contract, - 'finalizeRegisterWormhole', + 'finalizeRegisterTeleport', [ sourceDomain, targetDomain, @@ -120,7 +120,7 @@ export const initiateWithdraw = async ({recipient, amount, decimals, contract}) }); }; -export const initiateWormhole = async ({ +export const initiateTeleport = async ({ targetDomain, receiver, amount, @@ -128,7 +128,7 @@ export const initiateWormhole = async ({ operator, contract }) => { - return sendL2Transaction(contract, 'initiate_wormhole', { + return sendL2Transaction(contract, 'initiate_teleport', { target_domain: parseToFelt(targetDomain), receiver: parseToFelt(receiver), amount: parseToDecimals(amount, decimals), diff --git a/src/components/Features/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer.js index d8250447..ae50171c 100644 --- a/src/components/Features/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer.js @@ -198,7 +198,7 @@ export const Transfer = () => { /> {isFastTransferToL1Available && ( <div id="check" style={{color: 'white'}}> - <label htmlFor="check">Go fast through the wormhole</label> + <label htmlFor="check">Go fast through the teleport</label> <input checked={isFastTransferToL1} type="checkbox" onChange={setIsFastTransferToL1} /> </div> )} diff --git a/src/config/strings.js b/src/config/strings.js index 498d211f..519066e1 100644 --- a/src/config/strings.js +++ b/src/config/strings.js @@ -85,7 +85,7 @@ export default { type: 'Initiate transfer', message: 'Initiating transfer of {{amount}} {{symbol}} from StarkNet...' }, - initiateWormhole: { + initiateTeleport: { type: 'Initiate fast transfer', message: 'Initiating fast transfer of {{amount}} {{symbol}} from StarkNet...' }, diff --git a/src/hooks/useTransferProgress.js b/src/hooks/useTransferProgress.js index 04736e14..f781aafb 100644 --- a/src/hooks/useTransferProgress.js +++ b/src/hooks/useTransferProgress.js @@ -36,11 +36,11 @@ export const useTransferProgress = () => { activeStep }; }, - initiateWormhole: (amount, symbol, activeStep) => { - const {initiateWormhole} = transferProgressStrings; - const message = evaluate(initiateWormhole.message, {amount, symbol}); + initiateTeleport: (amount, symbol, activeStep) => { + const {initiateTeleport} = transferProgressStrings; + const message = evaluate(initiateTeleport.message, {amount, symbol}); return { - type: initiateWormhole.type, + type: initiateTeleport.type, message, activeStep }; diff --git a/src/hooks/useTransferToL1.js b/src/hooks/useTransferToL1.js index 1553939c..8d9c76ed 100644 --- a/src/hooks/useTransferToL1.js +++ b/src/hooks/useTransferToL1.js @@ -1,7 +1,7 @@ import axios from 'axios'; import {useCallback} from 'react'; -import {initiateWithdraw, initiateWormhole, withdraw, requestMint} from '../api/bridge'; +import {initiateWithdraw, initiateTeleport, withdraw, requestMint} from '../api/bridge'; import {approveL2, allowanceL2} from '../api/erc20'; import { ActionType, @@ -150,7 +150,7 @@ export const useFastTransferToL1 = () => { }); }; - const sendInitiateWormhole = () => { + const sendInitiateTeleport = () => { trackInitiated({ from_address: l2Account, to_address: l1Account, @@ -158,7 +158,7 @@ export const useFastTransferToL1 = () => { symbol }); const gatewayContract = getTokenGatewayContract(gatewayAddress); - return initiateWormhole({ + return initiateTeleport({ targetDomain: `0x${Buffer.from('GOERLI-MASTER-1', 'utf8').toString('hex')}`, receiver: l1Account, operator: l1Account, @@ -168,10 +168,10 @@ export const useFastTransferToL1 = () => { }); }; - const fetchAttestations = async txHash => { + const fetchAttestationsAndMint = async txHash => { const response = await axios.get(ORACLE_API_URL, { params: { - type: 'wormhole', + type: 'teleport', index: txHash } }); @@ -182,23 +182,23 @@ export const useFastTransferToL1 = () => { .map(oracle => oracle.signatures.ethereum.signature) .join('')}`; - let wormholeGUID = {}; + let teleportGUID = {}; if (results.length > 0) { - const wormholeData = results[0].data.event.match(/.{64}/g).map(hex => `0x${hex}`); - wormholeGUID = decodeWormholeData(wormholeData); + const teleportData = results[0].data.event.match(/.{64}/g).map(hex => `0x${hex}`); + teleportGUID = decodeTeleportData(teleportData); } const oracleAuthContract = getOracleAuthContract( '0x455f17Bdd98c19e3417129e7a821605661623aD7' ); requestMint({ - sourceDomain: wormholeGUID.sourceDomain, - targetDomain: wormholeGUID.targetDomain, - receiver: wormholeGUID.receiver, - operator: wormholeGUID.operator, - amount: wormholeGUID.amount, - nonce: wormholeGUID.nonce, - timestamp: wormholeGUID.timestamp, + sourceDomain: teleportGUID.sourceDomain, + targetDomain: teleportGUID.targetDomain, + receiver: teleportGUID.receiver, + operator: teleportGUID.operator, + amount: teleportGUID.amount, + nonce: teleportGUID.nonce, + timestamp: teleportGUID.timestamp, signatures, contract: oracleAuthContract, options: {from: l1Account}, @@ -220,7 +220,7 @@ export const useFastTransferToL1 = () => { }; try { - logger.log('Wormhole called'); + logger.log('Teleport called'); handleProgress( progressOptions.waitForConfirm( l2Config.name, @@ -237,11 +237,11 @@ export const useFastTransferToL1 = () => { logger.log('Allow value is smaller then amount, sending approve tx...', {amount}); await sendApproval(); } - logger.log('Calling initiate wormhole'); - const {transaction_hash: l2hash} = await sendInitiateWormhole(); + logger.log('Calling initiate teleport'); + const {transaction_hash: l2hash} = await sendInitiateTeleport(); logger.log('Tx hash received', {l2hash}); handleProgress( - progressOptions.initiateWormhole( + progressOptions.initiateTeleport( amount, symbol, stepOf(TransferStep.INITIATE_FAST_WITHDRAW, FastTransferToL1Steps) @@ -250,7 +250,7 @@ export const useFastTransferToL1 = () => { logger.log('Waiting for tx to be received on L2'); await waitForTransaction(l2hash, TransactionStatus.ACCEPTED_ON_L2); logger.log('Done', {l2hash}); - await fetchAttestations(l2hash); + await fetchAttestationsAndMint(l2hash); trackSuccess(l2hash); handleData({ type: ActionType.WORMHOLE_TO_L1, @@ -372,15 +372,15 @@ export const useCompleteTransferToL1 = () => { const ORACLE_API_URL = 'http://23.242.90.215:8080'; -function decodeWormholeData(wormholeData) { - const wormholeGUID = { - sourceDomain: wormholeData[0], - targetDomain: wormholeData[1], - receiver: wormholeData[2], - operator: wormholeData[3], - amount: wormholeData[4], - nonce: wormholeData[5], - timestamp: wormholeData[6] +function decodeTeleportData(teleportData) { + const teleportGUID = { + sourceDomain: teleportData[0], + targetDomain: teleportData[1], + receiver: teleportData[2], + operator: teleportData[3], + amount: teleportData[4], + nonce: teleportData[5], + timestamp: teleportData[6] }; - return wormholeGUID; + return teleportGUID; } From 497fb8f2f0c4e70d9b7ee324bb9d34385f55d728 Mon Sep 17 00:00:00 2001 From: Nick Ulven <nickulven@gmail.com> Date: Thu, 19 May 2022 10:08:20 -0700 Subject: [PATCH 210/211] Revert "Change wormhole to teleport" This reverts commit 307dd6ed0f4805ad41e84a6348f5642e986a6c0d. --- src/abis/l1/OracleAuth.json | 4 +- src/abis/l1/StarknetDAIGateway.json | 6 +- src/abis/l2/token_gateway.json | 6 +- src/api/bridge.js | 8 +-- src/components/Features/Transfer/Transfer.js | 2 +- src/config/strings.js | 2 +- src/hooks/useTransferProgress.js | 8 +-- src/hooks/useTransferToL1.js | 60 ++++++++++---------- 8 files changed, 48 insertions(+), 48 deletions(-) diff --git a/src/abis/l1/OracleAuth.json b/src/abis/l1/OracleAuth.json index f5167613..1bb5984a 100644 --- a/src/abis/l1/OracleAuth.json +++ b/src/abis/l1/OracleAuth.json @@ -39,8 +39,8 @@ "type": "uint48" } ], - "internalType": "struct TeleportGUID", - "name": "teleportGUID", + "internalType": "struct WormholeGUID", + "name": "wormholeGUID", "type": "tuple" }, { diff --git a/src/abis/l1/StarknetDAIGateway.json b/src/abis/l1/StarknetDAIGateway.json index 0c1746d9..e45ed3a6 100644 --- a/src/abis/l1/StarknetDAIGateway.json +++ b/src/abis/l1/StarknetDAIGateway.json @@ -39,12 +39,12 @@ "type": "uint48" } ], - "internalType": "struct TeleportGUID", - "name": "teleport", + "internalType": "struct WormholeGUID", + "name": "wormhole", "type": "tuple" } ], - "name": "finalizeRegisterTeleport", + "name": "finalizeRegisterWormhole", "outputs": [], "stateMutability": "nonpayable", "type": "function" diff --git a/src/abis/l2/token_gateway.json b/src/abis/l2/token_gateway.json index bfab29a4..8482011c 100644 --- a/src/abis/l2/token_gateway.json +++ b/src/abis/l2/token_gateway.json @@ -48,7 +48,7 @@ } ], "keys": [], - "name": "TeleportInitialized", + "name": "WormholeInitialized", "type": "event" }, { @@ -70,7 +70,7 @@ "type": "felt" } ], - "name": "initiate_teleport", + "name": "initiate_wormhole", "outputs": [], "type": "function" }, @@ -101,7 +101,7 @@ "type": "felt" } ], - "name": "finalize_register_teleport", + "name": "finalize_register_wormhole", "outputs": [], "type": "function" } diff --git a/src/api/bridge.js b/src/api/bridge.js index 35171463..f9f7d3f7 100644 --- a/src/api/bridge.js +++ b/src/api/bridge.js @@ -18,7 +18,7 @@ export const deposit = async ({recipient, amount, decimals, contract, options, e ); }; -export const finalizeRegisterTeleport = async ({ +export const finalizeRegisterWormhole = async ({ sourceDomain, targetDomain, receiver, @@ -33,7 +33,7 @@ export const finalizeRegisterTeleport = async ({ }) => { return sendL1Transaction( contract, - 'finalizeRegisterTeleport', + 'finalizeRegisterWormhole', [ sourceDomain, targetDomain, @@ -120,7 +120,7 @@ export const initiateWithdraw = async ({recipient, amount, decimals, contract}) }); }; -export const initiateTeleport = async ({ +export const initiateWormhole = async ({ targetDomain, receiver, amount, @@ -128,7 +128,7 @@ export const initiateTeleport = async ({ operator, contract }) => { - return sendL2Transaction(contract, 'initiate_teleport', { + return sendL2Transaction(contract, 'initiate_wormhole', { target_domain: parseToFelt(targetDomain), receiver: parseToFelt(receiver), amount: parseToDecimals(amount, decimals), diff --git a/src/components/Features/Transfer/Transfer.js b/src/components/Features/Transfer/Transfer.js index ae50171c..d8250447 100644 --- a/src/components/Features/Transfer/Transfer.js +++ b/src/components/Features/Transfer/Transfer.js @@ -198,7 +198,7 @@ export const Transfer = () => { /> {isFastTransferToL1Available && ( <div id="check" style={{color: 'white'}}> - <label htmlFor="check">Go fast through the teleport</label> + <label htmlFor="check">Go fast through the wormhole</label> <input checked={isFastTransferToL1} type="checkbox" onChange={setIsFastTransferToL1} /> </div> )} diff --git a/src/config/strings.js b/src/config/strings.js index 519066e1..498d211f 100644 --- a/src/config/strings.js +++ b/src/config/strings.js @@ -85,7 +85,7 @@ export default { type: 'Initiate transfer', message: 'Initiating transfer of {{amount}} {{symbol}} from StarkNet...' }, - initiateTeleport: { + initiateWormhole: { type: 'Initiate fast transfer', message: 'Initiating fast transfer of {{amount}} {{symbol}} from StarkNet...' }, diff --git a/src/hooks/useTransferProgress.js b/src/hooks/useTransferProgress.js index f781aafb..04736e14 100644 --- a/src/hooks/useTransferProgress.js +++ b/src/hooks/useTransferProgress.js @@ -36,11 +36,11 @@ export const useTransferProgress = () => { activeStep }; }, - initiateTeleport: (amount, symbol, activeStep) => { - const {initiateTeleport} = transferProgressStrings; - const message = evaluate(initiateTeleport.message, {amount, symbol}); + initiateWormhole: (amount, symbol, activeStep) => { + const {initiateWormhole} = transferProgressStrings; + const message = evaluate(initiateWormhole.message, {amount, symbol}); return { - type: initiateTeleport.type, + type: initiateWormhole.type, message, activeStep }; diff --git a/src/hooks/useTransferToL1.js b/src/hooks/useTransferToL1.js index 8d9c76ed..1553939c 100644 --- a/src/hooks/useTransferToL1.js +++ b/src/hooks/useTransferToL1.js @@ -1,7 +1,7 @@ import axios from 'axios'; import {useCallback} from 'react'; -import {initiateWithdraw, initiateTeleport, withdraw, requestMint} from '../api/bridge'; +import {initiateWithdraw, initiateWormhole, withdraw, requestMint} from '../api/bridge'; import {approveL2, allowanceL2} from '../api/erc20'; import { ActionType, @@ -150,7 +150,7 @@ export const useFastTransferToL1 = () => { }); }; - const sendInitiateTeleport = () => { + const sendInitiateWormhole = () => { trackInitiated({ from_address: l2Account, to_address: l1Account, @@ -158,7 +158,7 @@ export const useFastTransferToL1 = () => { symbol }); const gatewayContract = getTokenGatewayContract(gatewayAddress); - return initiateTeleport({ + return initiateWormhole({ targetDomain: `0x${Buffer.from('GOERLI-MASTER-1', 'utf8').toString('hex')}`, receiver: l1Account, operator: l1Account, @@ -168,10 +168,10 @@ export const useFastTransferToL1 = () => { }); }; - const fetchAttestationsAndMint = async txHash => { + const fetchAttestations = async txHash => { const response = await axios.get(ORACLE_API_URL, { params: { - type: 'teleport', + type: 'wormhole', index: txHash } }); @@ -182,23 +182,23 @@ export const useFastTransferToL1 = () => { .map(oracle => oracle.signatures.ethereum.signature) .join('')}`; - let teleportGUID = {}; + let wormholeGUID = {}; if (results.length > 0) { - const teleportData = results[0].data.event.match(/.{64}/g).map(hex => `0x${hex}`); - teleportGUID = decodeTeleportData(teleportData); + const wormholeData = results[0].data.event.match(/.{64}/g).map(hex => `0x${hex}`); + wormholeGUID = decodeWormholeData(wormholeData); } const oracleAuthContract = getOracleAuthContract( '0x455f17Bdd98c19e3417129e7a821605661623aD7' ); requestMint({ - sourceDomain: teleportGUID.sourceDomain, - targetDomain: teleportGUID.targetDomain, - receiver: teleportGUID.receiver, - operator: teleportGUID.operator, - amount: teleportGUID.amount, - nonce: teleportGUID.nonce, - timestamp: teleportGUID.timestamp, + sourceDomain: wormholeGUID.sourceDomain, + targetDomain: wormholeGUID.targetDomain, + receiver: wormholeGUID.receiver, + operator: wormholeGUID.operator, + amount: wormholeGUID.amount, + nonce: wormholeGUID.nonce, + timestamp: wormholeGUID.timestamp, signatures, contract: oracleAuthContract, options: {from: l1Account}, @@ -220,7 +220,7 @@ export const useFastTransferToL1 = () => { }; try { - logger.log('Teleport called'); + logger.log('Wormhole called'); handleProgress( progressOptions.waitForConfirm( l2Config.name, @@ -237,11 +237,11 @@ export const useFastTransferToL1 = () => { logger.log('Allow value is smaller then amount, sending approve tx...', {amount}); await sendApproval(); } - logger.log('Calling initiate teleport'); - const {transaction_hash: l2hash} = await sendInitiateTeleport(); + logger.log('Calling initiate wormhole'); + const {transaction_hash: l2hash} = await sendInitiateWormhole(); logger.log('Tx hash received', {l2hash}); handleProgress( - progressOptions.initiateTeleport( + progressOptions.initiateWormhole( amount, symbol, stepOf(TransferStep.INITIATE_FAST_WITHDRAW, FastTransferToL1Steps) @@ -250,7 +250,7 @@ export const useFastTransferToL1 = () => { logger.log('Waiting for tx to be received on L2'); await waitForTransaction(l2hash, TransactionStatus.ACCEPTED_ON_L2); logger.log('Done', {l2hash}); - await fetchAttestationsAndMint(l2hash); + await fetchAttestations(l2hash); trackSuccess(l2hash); handleData({ type: ActionType.WORMHOLE_TO_L1, @@ -372,15 +372,15 @@ export const useCompleteTransferToL1 = () => { const ORACLE_API_URL = 'http://23.242.90.215:8080'; -function decodeTeleportData(teleportData) { - const teleportGUID = { - sourceDomain: teleportData[0], - targetDomain: teleportData[1], - receiver: teleportData[2], - operator: teleportData[3], - amount: teleportData[4], - nonce: teleportData[5], - timestamp: teleportData[6] +function decodeWormholeData(wormholeData) { + const wormholeGUID = { + sourceDomain: wormholeData[0], + targetDomain: wormholeData[1], + receiver: wormholeData[2], + operator: wormholeData[3], + amount: wormholeData[4], + nonce: wormholeData[5], + timestamp: wormholeData[6] }; - return teleportGUID; + return wormholeGUID; } From 0cd323ccbbe9ae95f6a5ed7ae70bb9b4c2126224 Mon Sep 17 00:00:00 2001 From: Nick Ulven <nickulven@gmail.com> Date: Thu, 19 May 2022 10:09:17 -0700 Subject: [PATCH 211/211] Fix function name --- src/hooks/useTransferToL1.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hooks/useTransferToL1.js b/src/hooks/useTransferToL1.js index 1553939c..5ce8354f 100644 --- a/src/hooks/useTransferToL1.js +++ b/src/hooks/useTransferToL1.js @@ -168,7 +168,7 @@ export const useFastTransferToL1 = () => { }); }; - const fetchAttestations = async txHash => { + const fetchAttestationsAndMint = async txHash => { const response = await axios.get(ORACLE_API_URL, { params: { type: 'wormhole', @@ -250,7 +250,7 @@ export const useFastTransferToL1 = () => { logger.log('Waiting for tx to be received on L2'); await waitForTransaction(l2hash, TransactionStatus.ACCEPTED_ON_L2); logger.log('Done', {l2hash}); - await fetchAttestations(l2hash); + await fetchAttestationsAndMint(l2hash); trackSuccess(l2hash); handleData({ type: ActionType.WORMHOLE_TO_L1,

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 O%ke+Hk#uwF^`r$y0*FdIgrS*NT^-DR-`CVSC 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 literal 0 HcmV?d00001 diff --git a/src/assets/fonts/Inter/Inter-ExtraLight.ttf b/src/assets/fonts/Inter/Inter-ExtraLight.ttf new file mode 100644 index 0000000000000000000000000000000000000000..69426a3eb5660eda166c828d3606ab7bcbc46133 GIT binary patch literal 288400 zcmb@v3w%vS_ddR7?{oG!Cvi)NP?si6NE9t1LQxd0UeVA7iA03NJqWo-BQ=WX zimIx&v=kMMwiGSx>n%k^QPllg+CFm`_129i0=8E!zb}2$x?N{ zB)$HA*XXC4)vGW(UXpvpf=WVkj}ASqmHZ@2mVra@duab*{ZfmD?)w(ccjNJ--{|(_WJL&rTgRAT>puIT_FKyJVBB(kU&^vDqh2Qt+FvR9UJjNzs16 zeyrS|Q}!SJdaCRnEl-wo$=;s+mJ8_bzxdzcXGxZNf`v_Xs>WB6Mu)Hn7J~nR1A5Zu-7W-MHgN z_Mu$UgL~V1Sjvz)dGHaQ^2b>c`@@63;K5Hzf3a@}Cw_d~{TQb5ew1wG_^R!B?*BOs{mbEb`gUG^bvb;3 zu5rAWa7R^7t#8d}0_x6k=)^fd#VGZ0^KBFDcjFHmFCM*89h2@#FgZPSCu+3dCo(-! z2bc%^-(x4Ni=C-i%G}c3#f+KRlH0qv$V1^ousj zr0-$&H{=*@jg0=`Pu&vtJ~jI3f$!S9{q?}NP5tJ1UZ0G#s2e@8+Jlp2bk}Ngc>0f? z^ZtWvG`;8a;O6&KhtZRqs;4K7mNJv|_SkNd-4>D;M&5A&MxM_cqshAax&NRuBZC8a zS`=%V)1iFseBM&IH0?8IJLacsuuEyqEosipX||cgY4V&j!}2>WaNTJ`{HyVn61NR= zT<{^=Ch!NSDpEGH4w>b%eKOHeuzw@>Bk^K6llFa|j(ms%1nD|-0Yd>pf;iMZY zvkP)+RIpDhTDaoo)U?Z=O*ouBYE;3PFMe^kMBUt;w&%Pj${mPD77jZFp1`}nv(?F@ zU%+$CxININi7P-+bs0i~jcQ3!8^m%d4JqNWcD}OVYE>oMBU#^dYNy zD94(YQn(`aCp|&`Q9q_99PhJYe@ga^eIuEb{mk0pzn__Pzhp!j}}wFj;As7_A?8B#vQE z3$#-tGw4qj(gt;)eAZP;ILVTa34zD3G(IK-PV=I`<5-~==lUt|M8)pKxnCmiB$Ow= zgxBk#A13NW{k$HMr0%q}=a#zx+3g6}?SJY~c2zl$>1=5^{m4?&oj&%v#pL1`@ylcuY{7O(@{s~ykYE~vEdGitTj~V|h59RCB{*0~&<@CO2id!)82eT4 zp;cp_GJlq_kA1GM&|P|6yL3lyrGKgK(j)Gsonr5@y6iEw-~=Wrm;`$cs8^I~NFngs zxg`h?W`RAhvV0o(2lm4TC~Nr-gBawtV6H&XTtSm0jTA_gGdsAf(kra?dCR!W*i0)?het>V$8Uj!gd+>sWNz$T8nVkPeS5u`Y@lBrAWa~ zgDM8y_!y@wyG` zkjF)HiHr%4kv=owG)_hNIA-Y!cAHfWt8Aa)Mmgg&XLxsHi zmj$k^Q3JW~Mfqgq54RA&C9O^bo&;`;PAtRyP_?a>z7MS`MEO+peOgtZvx-P)9(*8k zdFlHGxN%3ab@T)Afz}j(Yp2T4$xi5knpQRBEubB4t)Nv6v;ytm{7Nt>xDs*i6bVNY4N^-~(^}`~oSC4?#8tLh2ZG5AimU zYE-Hpkdg{QHsxLCz+*Af;+|I25f)3vuXCccbzDf@^Eu z`JOpF!WHW<#R6CJ{G;=a(LwHGcW!`Ya&3uYJ4m|?oD93b6Ig*4=h`LkL|GF!W^HJU zr+kXMnA;9PpC%enJ_+=>yUFXNC7!@z*dP=Absjukj^Nr$bYdXqCnc#fts1z-MXalh?hvA1fbIoq>2M^71Ad4+4`Q$j11N9D_Q#hDoN?^q+v)K>jl{_JhJX10BR zX0k_S_C@Gsy%z>{2zWZcuU_Sdu8p0){yW~Sd4Ie*_Vor_Kf`0YmZUv;GYmzH;R?Fw zJ_U{89)Q5j3L3)|RN!U>g#tmb1a4N)814xP+^nE6d^!-gSwUmCXC`n%L23F>@4&or z_b~#&^a#HY3aN+ZSboUKDSgT=Ia@1V6-&xD&Q`F}HMNse9PH$yS*kj)afz_q>K&g} z25N&luvKOrJl2CJ0k7=F9mhO)qWqUAk06AXI@}2xRtxu+N2q-(G99&RU$Bde3fdqXg$gE94@nD#4lSNAnv(0Pgv% zMPxk_Ej2x-PSk6Ot!g!|TDe~J&Iu9swi=X=y)ZhaOW`}syff1mvT@m=F;Lc>LyVa zz2!RR+Y)bKn(q8WsEnBzZwf(Fkpipx`{9>rvc-P(Q~melf=CWyzhAwbvrNDJ_$(Iu z3+wGBcW)S`xl+cMja61Ya=!kXUNptsGu-DwL!kB-(3;cmxx&x~m(etMT@49G=-2)Z z_j2+XH5mcqJMg*~7UlLC+$+jwu)M%?ULZjrxao6Rlvg+%$N0uX=QH5RqPzmv9OZMr zBK*I=BMiJ9$MeDnKLtF+z|%NBA&T(RaC9~}suG{_HjckFg2KgwuQhN4x33M2`&0fI0w0w4$F6YmrY>R-ogB`>e`)`Ms=Cz~iAG~qEicP?B|4*52>>7sm`%f=^vEF+Yg4kwgp zzqFM&Rr|X7&=VIn59AZv>WVkwT@&~lU4T#Jvw*-8T$MTgvbIKsIWk(Ns>v6K9}Dm z_On#38XhB{RN#YjKTGDg#|T*CM0sTg$2~^Ca#@sDI&$1&1T5PO9P3W6YGV)mih+0H zxW@=s8t}osU!KHqj}frcGw?i)3nTE5UVCUS7oojd1^+S)cDK=h;Zizqqp_cfAvF2L z2g$XZ{;RRtB{-EloTkjR(@%WIIvOh*+Q48KKKb%3t%`h0|7N^xW*X*$v^39X%Et?H zxfWdlFBnbw5Sb~lN=Tx}P zaVi)~VjsIa9^(=YGYqG)hL0stKF%c^cw;OXwR%R9pwCB=C?7Au!S>Ya<`TBvJS8rXGydm++<54A%tpN<;-=@4d@?lnHF>*Gcqn3%AjXW#EOf;y;Jxs9j5j|5j%7B-%6 zKDP+mu~V)r6^ZgxtEv)S{&z9Gsq?@U#(zJ!TM>K*f-!QiD_L5;@0_ZPT<$!jpRr4& zeJtyoQKbi!Gx`_W05Y>$485w>M-C3LlER9)pu*7=^T_o#@FZ5p9RvlAwW)!}NZ*sH zQn0QJootV@nQO)o$tEMqXenT$h)X4~jOaX;0~CBC#??=>w)*BA?W#PV+2pN@v{w~B zrN|isTjPvYHaokPZbf||dS^8OU0h#rmQn}*W}Pmz6r!*-vIkHH2~o6YQ9aOBU$xO* zx{!!+vi0JHt=e^((ot)vY+L1AW(cNj=azvHy_*ESfZGj{9X)d3wVlJb( zo^aB5PA3epP@3bgJ1pjWbVIKBJ&1dmpobW;nO>IK8t=(8t6HPc8ihh~9bn=4A|^oo zLkm7RUb$>3NO4I+oNbNfk@I6F!}k-~b1f>c9i!e5&6D@2P29q=r-D2t$_}KJwC66qOFx{xtl)kT+sQa-wo~RjP^i#;YU(4Xt4R&I%nPc ztwPQ?>thvYCbZQlK97IT*&Y`pZJiy6p3^b}J=K?Gx|?9@%$p|g7&cAd2o|9VPx%!2 zGdF7}PXkhvPhvm02V@yKy(K<(kS3yD5|JpMsML0gs0{sV+bf2Ma?Q9yv84+fd#+}F zvTT8*Ij$nD(Dpb);YYIlhoWxhiR59`eYl{k0GPdpra8*+U>Y=QzvlD7H_pem1ddlc5PhT7x`(6(t2waXj zAI6+I^(42LhGvFmSFqN~%BgVg(m2tDf-84N@(x3~0Xnjbpvlc<0#9IPy&cSls=(vr z?k1c%hU17cd`2!3UzYFn&z_NJ9tg0EYy*GYcfX>*`HC2=%v3KCNeBhS4)m^OOP?n|eBH zum17LllsSd_polKPO@%$EfO|^;z; z@Z@B!iO-VY(BL)PC*(L~F*1RlXNT}yLHYf*$@bRxsVZ&cb`E2KRsVr)w%`rx=$?6x zz#Cp=FY~QUgAVDoz!TUZ z6a8);yqDZVuHvbejFc$vO`ym}mmYRz^PAww9*yaP*D#j)WY@(HHGSLaD*e zk8)SO^;%vIhgmJ2P%3b2y&C0@%Ql_>DsXJQ8u)3plqZyOemr_YTd&X)iDIQ*zJBKV z^&IavvwoRzvp)Vzi+?7{o7?d-pBx3=mkkj840&M0dCGh1g=ygRcDS!z(l3?T0r^;9 za%NDlfISO8je-R)bG!mlo~qbuTf$Io22ns{%t4VcX#<{&HlAF^6T}F4%rC%o!KaVF z<>UN~@vinn%Qeq+!LiwRg2@)Na`k-vLv47&u*nww=Th25rOI#^#vp%H%ljOOp)v?=ZV6L#)!R zGbTEo@&;XZ`TF!b=yEen^9Q1m*_em@`9$xYJG@CC_54EW8@X$i5M9%=e*T$FWwNz{ zH_h?L8GY;S&so>AOlC(|Q`QWBGh-7z%~pe**OT>|`XBnhi^gK6GU|hy(U0=@`~wg^ z_U0%eNfGNBIlYhtE?T5t`BE#A>#Quw$T+uBN5~*w|NTE7>%Xr~n{aO4{9p5m4WC@C z%#{Y~S13b_#El+#NNQz1F9|$ReiKSAvmoF$FrZLOy8|XU_7FBKqgi4^!?Tq-@We%LYsnj-Bs^whW>RWq4W6kef8lPqZq4b4+$A=h z6}tr>(v;jnaDLAd7PXo}7{Z59AzSDKnhc#d03N#10-dF?_7d0ni((3HPxi<=cn%Zsa=?lzc;0gSgscLo%c` zMzRuC%%~f-N#H3m28^dX&3ytlr46ZOI;ONC;53(s@}9IIY8zKefqT-Gu);Rio2@Pt z^%BnKP%2MLLg3)nlNN>KTGM-267I)y1uN*LYLa6M7P57aL<>a^WA&mQrs}kMw!Y}h zh*MJamZ91o@>rpTzkjKHD@Uw2m!46C@#mK6t-Bqn`=sW_{Mr4X0tN%riP)~e0H`em zfdQfYNKm#R79bLmX|O}{BUmsc!iURg`&sn`(~H;D*9zq7@BKP9^_MleBgb+=i=QX2 z)e_#3*I=psu73NYjjlzN)Un9koqj48eY(_{tSrZXrYaGvcQ4Ge-ig8CCQvXBJ+b)He0qxT4X8^SZCsj~xA4KlOocp3j^cOV>GP5Bz4q z&0E?A7X0aFtj1c0D($^C{EKm2bNjzk`?-+V+z&>)=aLpoxw$-dXVS=Trwn~JwNaNB zox4}wojL373K#&+99Qz`TxnvY-FyNTI5~;}k7K?9*NUhy9(S8qTEf;*R5sBXR8yu<$V=5eQfKd$z$AfO!)Wen{o}piH?Up z4GPe~pzzcqIt7N1>i2e1Gjvi&3n6|a$=hs|kSlKl_aZO_htL*hbEIfTJ&S)SQ`*8} z$2r!rnxB5kf;TvC-<*G7;B4o*r8nmIsrAkVxiE-e%#GinomZ;j@?Ys>fLHqGkG} zJ+Cf#sX@f_H-2IAGlOP-5dQ`{+3SCqbNBSM9@xWtW<8hwn%33w)}4<&)17ZW_SndP z+9f|GFHU*3_9%H}mtHx)%)QqUa>~a5!hD8_0SUI`17J76x=b6HBX$C8Ga>tY?G%+k zUoGZ3H4rW^#=CVMTpMOi&OSFnYtS5utQ@C~z7LOK!%R3CCs96*aib;5bA{nJJlN$tvcl=} zRfZ_vm&JSO@R?KK@p6?IKS^;HkDazGWMx+sp7j-j?DzNA&epW$+1ViNLkpW$-N3DR5Fx zzIqnzDpH}SZa#f+a7@(eI0-(Far$NJ&9*f)(VJ}iPXzAK6Wvau0rd);^Mep*De5H;UXf~Y6B3C~FgMDS2IC!kcHh5l zsbl!qIE4W?KA+Xu`8lhTZ`qQVsC0kusDP>Mi9wFTr`*(1=p6pYNjblgoIgpcGgqsF z=;Uf!yphDf%W}>Oxdi%(C5|{4$~92n{Gcjmzlb&6ZqP=Qq#vivgY&2%gvr_3k+;~L z3hdevcC7-tGeJ8tSFh}=W7$x=&(@Crk!%sgM_`FL86GD1npYbquOWppa8fjZ_Z9>6 zK0F3tBTsogaCv#huWTZZ5OVrn9ATQvqP!kO?0e{E+iSpzGpQFu_6nL+5wjC-7H<*! zxLb0ZuN=2niZh!7N=}I!M2lo0UN{Y2=MmnfM7brevn-CY z2tOidEA`SVs+pV64 z?$h;odw6_M?e5M&LGMG<=#Nyp@z9s3m-bTx-dEa1t9GR1 zN$M>~QZe$^BCC4jsopB7*vBhVH99eoZT8C5T^X2Ai70*_2|4o&Gxj6vM2%MaP@cZg zXo{))#LG>@K2&SIe*Tf$Bt(t!sazNIXk~%R=_F)FuIo+y#tV3|Up!Hu5)kKvHT1?H z;5@U5{isyn_(Uf~Dn+Mw#go8-yyAR-_}hS^iL~_%&aZMhlM0CbPT)zj@eTYi$0yGv z1w4oyy;7loqazvCLkKwp9JDMb9bv6sI^426*;X$tx%d>~D55Cu!QVlE7Q|aPE1U$^ z4}lwpn~d@_%?aE%3}xV?X9ABivLg;+ZxgI|aAVI?I*2_@6E5~N!TJ{cmh}o)_ZPk> zLM7Gd04RCoNQ3{_8df??Nm;ahOjxg%ovLL%{4O+P^MX!wx(;oLX1QDBt_*)iz9pRYUDcyy!nC)1O6EqEi# z5k8}E_}sJO1K%8$-g3i_{Z0fAK0H5R{@~74E7f|Yb^8rp&l}Zn`1~%`S#57SJoeDR`z_F`E&;`FgvX&BE$sqW3mq+BA%A5FY&iSI9 z26|6*9JbJf4OGh!2gTO~wd2w)(RyB*;_CuGElqUMg$;r$w`^_dQ0oOZS5}+tsGGVP zJJTa`hr3Rjqfi~@qUo1Y@sx(C70Cml4Qimf*0Qp;Z*$|0FICt%Hyu+?_vVprPTfJ? z7Ux|Z2_9+hLGVuAqQFzJoT5uK1UHnLAnDb*eu&MpoQg3-jdv|%qA(n^OIMLrtW5|u$_p>YB@-~_%h#yt$+m(X5itCCsRt**- zt^?N6bh3yB6fNQ~m;>pY5f*ZkM)Ry3$XA5VDq^*-j1ePl>DbQ(|996~W5f;Iy`X2N zBYftUG~#N!F??*R4L>BFR3A3vc8s?))vua{oWELj$e}4JvFs6rd+?MSZ0LAZwxVeY ziQbWGn33LONTjf;6vL=q-9G?{>A}rqvL>=Epqf85lDD#68DkRoP}>uz!1CDY+|+lp zuKhA=@YRIh{xh(&i>2+fD+`v~oGDLnemwq@(X~f}%>VV?RkO)i2w8QWWmu=RzY6Qr zf6I(szI7`%*m^mL`5c#b?)f!kpMGQ0D{FLzq)i_YB`%U z(qqJGKl4oc_1_31)?(1Ifm;2=U-uL8a^%{ef^rQ$XycUzZaF$~Nx=;~Mo#eJByWz( z*aRxFPJkS%OZAOx_U3ek3jr5sgU1H@M;h`ZaViyd>em)8Wz}{}Dx4frA#-fydXx5N zEI*r`es=lFbLr{lf)2CfE0X`ue&^1T$DHQ8_W5E_2cis;x;0SOSRl3i)&Cj&T5F(^U|=m27X%F#4WDi zic~;Iai|I}%grs>P(fXd-R42b;u=&6)rH*Raw?wEVDi4c$!Ng6nQedhT z7FU#q#T~;fuAuLh0a@IA-tuH|MR{1<4cy{xfWn8Y#)l1` zdFG`4e+aG^-RG7dR6dV7n zmLJ)oANjgaKeVm)`y*zb$bwV7SSzqjg2E|MDEby50LFv%h9!SMebz~(lSf%5==J`- zTDx?&z^DCRMSovA29vr(9fBn~7VFs7Epw|%z(2B*mifZe1nSf#0R#JM2mhWUOPivR z@4Tc~hbxx;IrsMeJ!4_6lhzUFfErTszv%*N*t1yFkXwXwyGVXP5H1K&l=k1~KW^N} zp4=z8piVgT+=D*_7~-3ew^^u*_o^UyK3ZsFSjilA9RGJT)xPXzsvmJ z%oT?}(vN&|P(Soh#`9gaf4Vd-Ze`+_|0IoEm60;7*ZfTzxWy{6LOGx`&(Sc&l?B&4 z7A2kANrA^m6HGYG83K=^gZzdCO6T@j;E8g87q`<~CGaGa=W`XVXzMv6d z_)_UTH+}c-lHoA8Z5u!S_W!TLpuAc9w+@4f7!Mlt8ZnJ*@rAH$3e10@x(-bFOAVw} z&_TnU728;}S}mi55A|%+s4gR43(suSyHm9$)oZqK?*0cyM=K2Pk<*j))!%!)e?yBh z%&N$BOuo;n2b7h!j(vK8;@-ksaJl8cjkN_o|$^9XHImu#X7>Gg!hXsX~L!DV&oRU8F|GuE&exP< z&ZoJrSVo4JM@(KLn6iG823FQ-2W&UN%HxP5JTFND5PT*_A5nxbq`uq2Fl}H^^D#}1 zem%26e5e9gtyv3)rp%a{Jn)ktJKk73;ac9i$Kuxw8M`r7w-~JN#LOI0AuGKyX6wx5 zXEQS3^wJc)UY|Q^c5a{EIf`Xw{^=JF?OC&XcHF`@Q#K{8Dbt*P(C*Le2^P0@U$ETv z48aMsJQP}w`N+=r(Db;yd^Et_eO;7C^a#D=E|2*rPT?j9)Nq z@QR!S3|>=uKqwDAv2yN`H95Uvy~+FC`h-rI9O{#$>}1-3i|o0LOZ9VKkNS31Kc94a z-r;fUE@#ftuO1#HKjFMknor)8yW8&9HeKrPTw|G|7w=xD-_CEB{aNOi&3$K{&3Wfk z<~XH;Hj-8@rh!2QQeSPdNnwUfvRPM1XIue>7qA_ZP`UNh!l=P$iELzzko&rx+oge*80^c@>`@i+Jb$zSrtz2KpmN24xDnd^bG}?d(*i3&QyJad*%Q#-%G05t4-Eq^QoN)tB zv0}R5bWW9_lciP>IPOR?)1RPXZ^&J*M-DXcqh83>BM(>;^LyE9XD?rTi6+`H676#@ z(YEuY58+t)j5b=WHsDKM(TX2gEMM}*kd*lHl9zTI4tFnUZ}TOsD1Dq&^DJq%JG`BQnAR*NWp9i`cMHKl#O5zx`)`rJ!`z)T{HCVB}75Zq42{y3X(?-Z`fR zeW$;B@i%=5hA#7`IFSCw%1tZ;aUj;jJ#;ZhmtcI(vA>K#S`F3nyA}+;+Qyd;0Se5~ zn?-{+Cq=$oJ2WsdG;I-6rD4PFN$TmewQu_S47F99ombKkq&@+u(QZ=Fk@aw*wH&EW zzT0W0E@s(f)S`$ar#bPitlA`|QJqkbE-KmuKe8T2jSoP$ z{HOZ0cNep2pTo}xtu%JAetZABXEVnZEniiHTs9-M}Wz!T^&tsCctRN#rS zh=TJjwx4j9cl;u^mpZ%4^OcDxp9K11WdfDpgH_-$(gG8GiunjU9wvpB*YGi{xPAc6 zD4k5B=rwows?*jH-%CV$nYF)ES>T3-+O-~hx$<>-z*JG*LAbNaHts`%M zsXF<~@reqrtI*aSbs=!_pt`&(Yq51?s+sm(%2wT|SEqm`)e+$VH{nK08}{n_AU;a` zq7%hRny;*XNBMamzEmuBPLjnfqXnLPA<;SUh{EU}|1(=Br z7GQ(8B{M7*3<~PS`)6Rr)^N-D9ydFQ^#ITvJuDj0m%?-9F-&-poI@ADpjR}v@=W+Vmfgj=%izpwb7jgW1 z;9I%pF7SBco|9nU$X506lb~Ow@=~z2hMo2BiQ8Ou5&AUHYn;oE;P9$yVilk+Q75T@ zpq+#|p#m=WwsL@p$Dx)QoHoXm+@E{xqI{}l0{7aHSR%j3y(S<^m z*_NK14#zz_LX`+dD&$G6fOl>cm~MnD!~x%^X3Z#cfu2s>lxp{{pxP_hQx~aHN$2z} z@k|~$FAp4V!2y8pImJ(TFYnYZxu&~u-tL{i(e6-c_d`m1R8Ez_uSus=d5z#(E3gFF zjzVX6d*nUjw}Bq{(}$#Re)tjA%L|5sdIDQpaHFPX|t zl#y=WZj;E{N109r9;46nm_#$3Y}J?O!1U#s>BGcDayh-KOO|(_5pFpJQi3JU*xYM`O6BdSElnjd0LFtT-mTiv&p-yN;}HzbROxhOv3yFei*jA$Ow{i2TzWq z2tX!C?#dt8@G!s{Nz~=8+BViN({f~xHptRMG&So&u`M7VYcL^@+;_K(QST(7^CJR`SH+_>c%zIgFa z-zh!A-dGrqU}l>^Q(m$c3gJq3AzWmn!crV5<|C4|bDk&70KS}S5*NA}qtD=)G){}5 z9yK~cRZ~9adW6#3dCXIE(FI9tgZu=$y24YM>?hyobsf;dgGY>|g54pwdYYFIxf-W`K?>C`?~#H!^e$X&E;H#3JM`unSo z`7{hzywOn4a-?9EHi4ATRN6Y^o(*ZLYlrKqGJvzqaZKUIxTb~y$AufvE_k;c{zkhf zKik}>hiRI=F>^?Ne?PUBFY#Gc>waf-OgG(j-$)`WFh49OgQ zNH{csZe!y;Av8gVz^w^z%1ot66Eb;^dNqN{lO_N+X~G}SgyWuCY|w)PzUTGiQCtN1+qu0)v#Ah%Lijk6Uf(9{+=bK=LdW|LQAjE=){usM;iM! zzOw1;)vO)=`QmWawryEk`>E39v}yU%r@p6Ox>H(Wu@#)YvBRlYDt~e=b$_n2im*Jq zGX7zT`&L!B8uJnAx0#kyH3yC=34JI(=GD}(e`1ct$Tcu0ktAS?BZaRY#{Usn|Fn$p zu4f|s?9sgH_rGiG+vxZ5qPXW42CI3;Vk<2nVJKSZZ7vMu78gbVuTQ~l9%_uJiMjEg zE47_Ye`u|6654A8_V)i!x3FIJXzmw^Ox+k(LfS!A%^uDD4}m8tvjnb(QO7}>1fFf% z11;q9mzA^!6A8^bx`)9a^GeLWMvxl}w>X+1N z$s23iW7=zCn{sfL>v~ znVaUiBSV>)V~wy(=I>uj_-6Fq3y0JL@dZ*q)$)p4Q4ygbM^30qOg2|vxPwAX38g#F zHkeA2J1FoZ=@5^_LEXzx=`Bn&p?naC(up#bF~kGb&1UM^YFh)(HREs+Qv{B1o4I_J zv1Nj`*lzR12d9rawYq^@k#leWTWI_~A8*cq*e^tic-bxSmS5;6KKKCJXJ4@J4?fUO ze6jlW9@@-1e_zkIv-+iYq`3*t%BO^a$El@D>v(NNHUwol|OKIS=A8>%0 zsW3j`V);P`fg;t*K>LoPnSX=pp!I+n!F_-bY~$nR9&fI}gBfI9V=Pa`XnX&L&8XJu z)2&Oc9%0G9T}B?|cgXqrOPDazwZk5%0JfNE3P@iXZB$dY)w5~y7sIUtF(iF?Pdgm(Ol(#KhC z&yL>#+VL~+)6y2tj^6=V-*cRH{1Ci@0W)!>HsRW3<+w?^OgMJ_+`6bXp(u_bN}Joz zgyvX|V~!oiTa0sB7+Rjv-a0Yn?Mr}LJar;GDKw6DABk7@@AedwBRgVqoR#~y?t1W# zJ@^QA0PngrcDn~pWu=~E)dO~K`H?K}f#pXrKT~-xozb}Il#UsQ5$DCzFtWTj4tpAW zX5sqnnZmS?Cb(@IZ9@K|S;;KTmOK89Nl{v*r8(C>vNhq-eA+9`^3sKsRu!2)U*{_F ziB$t}Jto8KWs~DA>&1K8_KK3N8{yOo%74_B_*a&SF>xM4>v-mSGy*yI=ff)1c!s8D zdMQq?RBvM8q|aGZ7<+EzinHnDW9pQpdstt3`7$ha()uLl zNGp;%%Vg<7qPI}{K`z_JL>30!x$`JISemjWuj?tA-#_uf*644%&OUICcvP0SKy2M{ zm@t&W{vAS^V~fF^ovS<&b8JNV;)QkERIkyb>freFf8tP;wlB9>@R^dtzuG+#lh9$# zBp>e-Z=%@*QBOC{=WKx|;%JQr=UPKJ?K>BE&pUK@r2IAOgv<&dQ}$2XpE>%)9c*;zhsjYbr9aMnFc#PALuu=ia)n+}-RKQd+(@uRS40gFhbgkt)`zi%wTkK@Ud?oBej#_$>eTEM+y>#H*Lt1QxjTuN&-OaqK0whSg#<*xKK3=&|}W{jwf= zMXVN;F)F{p*Ar`K=KUMT%04MnC z)MpRsFZZg$L{e_wdF-1_vsxv!uN+j-uc5xNY!%vxr{2hT`P{kZ`!!{3n8M`nvXxTE z3hpm>#;nnfMj{1QU9|Fj8Bw1?L<=Y;=7|=Bh_6^7N+1`Ot%>6M-sUKG(43dGqsnPe z@Z%8&qyvgQ+K6V&s1p${HKGAtqRPz9W8P?zo-v@}6BYd$oi1C0cJ!&9882PEnlx5U zQDl3Qa`iFnCl#`<)P_)b7(Jv8&<-ZucFBXa?5oVDV>?%EQlnPez%HY@KZ$&nfareM zqfE7`4PGDL6D>xwOIa{Kb#LV*h9LvA3cTX2ST8JWQ>EymPY z2)XSfbT7*OmohPU7piK~6>^XfXjR5|D9}mGU~Wo@@)+*$5@nm3YJHnKyd3AISKx_E zOxOtFn(Cy$9Vml7;k&qlPvt3a2OONnC*dgqyt(GL5VoVR9uKG}*UJqNy5^cXiwEC) zo8DO3A~y8NIxjVHkCAGALn>7A4w6Dn;GYJGiKyI&_Rq825r2J0df7^Zp>le50OYp3 zJG|8z!vuUo#1fku0O%%@y&Ezs|djDl&Jxw|aBOU*{b! z%6dEAOQCGXU*{dqn^30Xuk(%%8Ns{DV5)^p>aNx44QdXE7mBuBz=R zSaT^p*{0?((vQ)Pm8Cff7@t}=A&0low(;aXBvHB|zI#N_Wa25EV#E}9X|BOk8f$O1M^Mqj%9PKxUiMOV zOn1|9d~UtQV-1{+Bgcd9vF;Z*(ecoS#uFWLJwmrJsZsq*+KAszqVEv*jy96n=tede zIOC``xh`DEqp(qB+?cSd<=w&s7v9>n=kD9nF75u{Sn!xI{n}6Yci!H){o11WKW$vG z<4Mc*4|WXRoxSkTQ*EA@KX}G}RxGN!`{3~XxeE_AZe4HA@TnUXj7Q>0IKq3l-j(OJ z85yG01LzDj&Q#Oa(?cSm_o$Up^2JZ}L+Zo!vhXRl^Os(o#J=44%bof9ooySo&Gyi-gZK>`(DDQBu*g!aPIu;4!`*?^jcf_7(P6m#Eedn35CU7BnRQ}D?hiTa`QDue zE?P8@O+K1B??RilQM)r&e8!R&19?97`GR-W@3o%27i_(<)j1{g@YM8`BL{SNAuV;n z`>C@&d@ZI)(vz<(nDyqgv6-{`^cbEzWB8K2*I)p0T$hyowp5tv0PsbrxU{Lpjes$% zB9+=&zw?*(bD>+)BG61xyAgve9 z+JGqJfOrGwEh4Kvki2{?a}y7sH?G;KU-KsS)fE$@e`Z9{BS-XBkKJE0TA{6av{t+{ zwo`Dk0N#oZhKN@D^+{a%GrqPFzLlsIB$4x$bhP3L?r@ScOc8m0g9pE4fNz^K3LDJG zd}mnloM~y#q~*Pv7&HBc!r^Pbjp{$OJMA~K-C93eYRP|-XJ*Iu%8eXTIQykBQd$tiiqox9AY2`^4YiO#|kp#V(ot{Bw)94o=xL!06fAnRDJB z*=uED+^T+Q{~3rS%B9~}^7my<|Gk*oBWY^)w|jP95Xa&-jYKQ*^ts9awI-}H>5|9W z#359E1d(pTlP6}qIJR?8)4)2lJ3iI#gCTk+d8IyAwVD*Ev?oNONJBh|X`}nN=z2os zf%-E<-e2`TrBRlqq{zwlsS3 z%HT6ruY(v5->|fH#R7tFz9BKvSTC4!E{|tr`LwvbcJbv&Syy&ue48Z)D`)RXCFzTh z?@B3`1=ojCVlcKotzEeR&w(UxfMz{SJ_4n1p+Ng0y-&tA_%$_EZH0@ig3z_%20_?M z3hO+8164}xygaX8O1OTc94l(8DgTLK{hpoT>~TL&XkD@PiFFKGM?DVO!V-xLP|r50 zUvXyI;VF|3r)6e3THSnS;f+>4+9&o`oxu|ijvDptTSWI}=G$*)I`@Nd35>^rpdukB zf=Brt!g6fMT1#Ud_LzQ<#Apr zOS=Kz@GcgjrriL6$FmMzoObaIJi$;oL5EaAl<&{BnaX$b;JsK3pP@CJ_Ss5Vbw>GQ z_r5N5Jok_Voh0x>o&=}QquLxtbblI;?sJ@SFa;gQZq-6Lm_~VAKw#hp)vBUiqVI_C z;QO%@pj`{W|3Wv8#h1&(KkYUMep1zBvG_u?9;)ua$E%}7d7J_=;}gISmp-=M%y^b+ z^U~+L3Zh*HELXg^qk@~h;~Vf9N_>{9H(Q0b>E@qD*ae>>!9V3m^1;D-J&zBhm{clV z9_@X?gK`>F)`n|%{_@h`QF=k6Z$DldQF;tJa41S=tMDE$Oz<1FV(~t78aZf`uV+or zj=!xPpU5uzu*(#9z@HV?{$&e~MnOti%aa?vEjOH~*YMG6P+4pLdvtv;C(D^wiE6M_ z5J61jK^&+IOc07Ck4hU1oC$kpFi{zy0nUQBp^fOvujtM5*i2tGE0@jmVKeje=F{|y zih2er`^5U{y=}OlRI;|ZN0%p|QhR4^hD7#htaP4}UjsZvkf%1f|D#IOa&H@c{>F;$&x#88@Dmlp$qMgIUNP@Bf%j&$ABe{o z!>l}`iAony9%&Mg1LPy@FG=!V{2!_*1bm1+QP!0tvDDr^mR$}7qX}QPqY;~jOV!A%_Omc4DD1EhF zi52RDp6c*Mw`ZP786Ve@^<#G?YCEtp>*xIbjc(P`LWd5PKXFD|6s1D%*Q=-18$L|y zt*kCBB$d(jTKl2t6pi9{9k+;z;;IwKa40x?#dwvB7O40|IJyso!gGl(wi=_x@u$)M(ePW|cY}!v-&Y`gv&6YHRz9 zH9dT*RZ6T}C1+(x^VhOof6`IeXSi>r^vPdAtYg5>8)%%u=VtO%?rWm8Q|YUPyp`X! z>&#o}%Pvo(R?fCWr=*k&{hO9@O{JD1{Lz7rOKLyYYtjBVX|B*aE*F|s1Rl?zX%CQB zB0KKIxu+q@_h&gKoXj=h*k;`5p~AIYl+L!bb1idI=Y~z-BdrIxVH3SX{)C`n*c9Rs zR8&IUZ}TZnyqzE|@!~wJBJlEUQI)OUa(0>mMY&!q80swyWj}idu5j4zp)beTxGBLW zLuAWa?yis{U<-Zq8WZK|P&j*ss(ynbleQF;TqVQEY?i?@N#SB#7u0%`pJ|b~!o@S= zE=-PNpc{Csi+_imy+Coa?Q5#mu@kq>1%b>V{VMkaX)s{{z^_T@9 zZeV1bXt&nWzM3~OX=vwwCmYv%JT$iX>p4SHr+kvty!sMRM_Tm61rwtkeii%F4C6nh zrSYmz%Rz0I8i`u?x4(E6uQ|$8&m;rO;><>Ucp#}w&3UVw&AcM1sFy}3xWh%o_X~&* z4-ycDM-W?A~))j$nVC8-XjEBB*70$-Wo#x*6Zs(UGiMOqlG8@X7O>(gd_Fr)u7Lx<p|xa){4LABlSP=9kbNmeq-}o%!keSW!ye}r;ja8dkwI|KZ-k=2BPsN+;XV&ZA+!n>6XiBY06Ff*`AgLX`qcNE|BM*7i2;5 zP#2Fc9Rh*i({eMpOt2S5)d6zuP@}0E-R@6KJzC(!nDxU}uDQgiGK|2Jr zObVg!Rg3!ddCL8v3eOF0+jelL%AJO^Z9k-Wr8md5e{NjQDm^owW6xzhQ_u2!yCI!B z4t=)W(2kvkJ{$Z>_6yHvzxHbO^UvqJrY)D3Ye~?jaI}#wq37RZ=@6mNP1yYGGA+w+ z4?Vw#o>B7`$pntkMXBn&Vanu&(w_H0ww;eA(q3`|pW7gq>lH^?eseWg{ zd{*&OC5dPEGpP`DfdU*BfB%3gk`*>F7+Y2TQO)JhFx7%+9dZ@| z0}5q7{ZG9l_cCj}>vPunO0Hh4|0Vlr3GWs!V7v5BPOa5%6%Jtw?k!ELG7tCTwmyTy zH-3v2>o@dSXY{Z2M)RtqEqkSy#a`6dqFanj|5N|`i}U)Ll2>RR8v?iUak^PoIVG*e zpr$V}@nxCoFn(!CU!hV??ZS`v3Kg~iu?un*zZBtHPr&$pcF*kfC8m8 zpk&-8?7E1%fr|w$BhLtWyfUcqi zrwGTl=!@|$bQmTLgP(Lbx{6ef&*nG;301X3wFu?PixgsLa)3p`b@KF)5A4quGCOl< zH|2b;v+UJV>sV!>v+(n8!oJyZFY90J`dt6&a-MRAJ;VMhlvZDR(WxhMrDZSdInUyt zv}sl5>W%cT&ge7rn~N4Re>NIy!7Wld+Kx*>n1}qB*!D#rE()K|WsC>pJRY&1(oP@L zphIK-dX;L`ji}Re^fN4$z1d<&-?|Zx*Qy-i*QistK0--XVtO=JEu(xLj3wl0wd9Lq z2RVF4Tdk4N&J9jFtaln!eq-+ljk_&PA{k+Xgt(4kOmSxDOe&rb9_uQB2gO|Ha1nDG z$gZ9wb;K$Jk#Mn-!>>)oOv1m`LX#-$TG->$rbnOfiT=>?fs~xLxR3nPN5RIg|o0nREL+vP3%{i{|bQZ&)vhhRmO<(_#jkA1a5JxlVP ztdgHsTHbL^4f1I-NUta-zllZU6jn=FP@Jaavugy|YBzoUtgq6lg}>DdT8x6d{LMTcClm$!k3$0QMNfB zFFmImchcS3we*UP3A{li)U}S^>{w$0zl+_DoAh})s{=Tfj*8Dm@o!r54@A@9LR4+t z#Xk?7Q|8;ym^h42LmS<-nzIcfiF2hP6m)d6?I&+YOVjgmFm#L%q5JiW`;2`8MtFpxw)(iku+|DbC^lE0uej2->1#_*>w7ojTWcLz0DGQwb23ypTA5Yq zaxx6To)`}+cy*ZFpvAl|(UXdd?~M0sHh$@=KJ_hc^fZsDJo=o2>)BoptX{ss4ZOzRN0=-nqvr z|MCc*akDfZ^m1UcS6f!-Ftkgx=C4Los{AjUDw1*)^%FFkyHx%7IEe7WR|Vnb6r&Lk)i6yW1OguVD$zX@+V5vp~ZDvy<4nWVLAG<@Ua z+Ud=P^oUVo@3prUl!OkM{Q^X_*Y%+-%MKsH@Ri7ou(`dKs22XAflpXuZ1)M*C9FO& zqPVZL;mXhW2rgWhZ9m^QrEmFyu|2HoF9-GC=dd}f+JURzu&Q$yo2_5_wpotqJg6_d zc|%`%;2=x6d7TYBn6_R2_N#sRcU!lz=C}g5`6q1oU(@UvT-$2fI-*rp`hvj#1qpDG zRzn)Ljf145^QuBpjZ@NE)AZZf&=<>(+LSS+{CM zw>l_;JxJUua zdg`O~M;)+D9sb~2m5VS>53bnS-kGgTk_#SEJxLYK!bjmmvnV5prZ%jvB5@RyE?HwZ zhN8~P@iuGa%5Fzkt$C%D($nSD8~$rXOYEuKp{ACAvK{*z#yWd0D^8%zGOH+V38 z-V@TpYT-7}p`aFoV_?U~uJb?i#rbAAO4ISh^$a!Oqk|f&*LFc{+I=J?%bI(XU?2CbJ{$@ zl~SCPjBTjc(46_uU;trOG~>Atn;mb69~-dWt!lts_PNi&jgq9Q;+}Ryh`tylz zu;Ec$JO5GH^OU$kh<%8Ym7oO1ia)Jp06hV6)u8OT37fhFIjL93B7M>uL5i7$wLp+M_9krmhdf| z5At>h+tb~{JkFB=e@abs`o?;??2+%+z+lu@k)3)qJi?t#AcTjnbl#2&5HZrpk{_hg z|29x;7H&FygRgbO_`cegAC&EZLPm~`7Ak(^GRI+vxrJ$L!O|FyGdHiM2$kwe`aX18 zd~;I&pz!^w@3M~!O zEwKAlWXAH9`#Z74nGU5uk101L+p%rsU9q%6_5)n+nkhIME}f*$($k6cDIrY1cLA-C zs!0jIvv|?X>7nVQ;`W`S^0Ja#y(fc#=CCBhIAJlVNn>_~wC6&`db+9tm;uUfxSK<{A5dsdW(cF3eY1l; z-CIP@u31ky|GJx0-&U(xjkQ$2{sz67wURho-9)tOq)Ik6^PGA%>>Au-W>?=Ih)s{S zgJXJ*$(fimb**R57%Tu)=}k?l)>hR4>(!2z}E_?{84DU z+6~joy#ACDP3kKeNuOoJJX^i`_vrA4^wgPy^!8Q%WV$)wY~UKw^4bH^Z@1@;$nc$> zkI9-rkz}5MjK4+Z{6R(@IZX53(4cEH|F78z@5zXpqzw_t+(Hs{i0-^g&lJXZM3BSbu!?2^mRIo-rM3gp7@hQI*u-+hu_n@eFEvy*|%Fy$O^dFS$!J| zgH0^7Mdpy&73w!{3vPh4u~1;zA=?pmcvceE%^+1t?8T6u=>2WQH1mjjj}&iPMjBne zNNlrK(-Y4Z{OsZ6ly*p4hf;Qq8g`d1qcr&svWqwj3bFj1uDp1Q%p}AOFlPVO?fVH$ zx;BP@dkq5aW$c4$8Cn3Nv{$Naz^q{|IA1Y)ikhjK9f^~Ct3{YsJ&PZHsACAhRbPoh zu3BRg9~ahpz(?dZ__&Ihb#hBT@RYA?3Drjv+(j4r8Fp)SPmDtw720F+N+V!ioHDo6 z{{nGXO@^&1N|Mv>h7(%!etK!g7_m~Zm-ryE{r4;AlcPxwRu9)j-A{i(%sYukK00Xb zI6#Lbs#YO->5?`cf7Mqpp_0IJ&a_OK;m6TluxGA^Dhms12vC0yLX@5Kj~a?~Xv5?5 zKbtp`hPy+Kq_wTwH03lc&24px^!qTEY^MJ?n)5zs&bu`^Z<{S-LN9t^4=>j*=qHSB~uWSJ;F%j7GAyzbD z)M&1;gl_X6@hrr&Zj50qA0upRB6>LgJ*351s;xw`D3L8%Rf+xsEh;HgKl?JUg={q@ zoj+|1Z@~;B2uJOP_}8Wgg=7+x$rs1b+R|2RA@Wtrdxw-|=_qOtJ0LoorbXH7h~1H_ z7b_ZmTW_T<$9mX|ouMmU&W`^*+k1P`cx=-288BPy%BetA0~WXD&_b?`tat8bQE)^8{YEN}m_^65x> zSKcq8wT$D6Bui8&3{Jy*wHu2P?xe2cF=Vjykm-oxY`!Da8jr(7o zmyQ2lo|oZ)Jue$?IecaK_?PEj;)My_e7@D5s>gf-?kaddndSdZJxm#)@9{n z2K%VSQq8>$+p%j9G?pyw8&d)qoiI%v@XTG(PS{LGzw1NW2z- zOk{>Z$@_g$p3DoFvO8$o9pBT5A1-UVWWP(sN{=_3mV4uP1CfSVkR6$tJANj4OzzDz z++`Wd?#Z^r%?%mCRE*88^pRAe^;FrjROdt6V0#1$wc?O7#k{qog3zJtQIIvT;kUK7 zho;LIeb*KVp`k83M^wM|m=V@)zzOfQySnFRkh-Mea{Bzp5&CRdR8e~V+BzY3mS^12 z5wC*Gbq_++_jeaq*nSgj-y$X6CBU~+Ak8kVe3hQqy@&j8waR8(Ut=rxJgy&EWh?zF zV;QNirE=1v9UUxkXej{37AkiJAFItSs&L^OmD);i`E^m;LA2nlqp z;SFo8R)bGCkgwoV0si0cDHZ%t+0o6p&bL*q8+5lD64Z2Q#9W6dm5gP`v23bcW)%^9!Udq0NFTPEzfE`L_Pyqyr@{nc_Esr*?v+aHvEBS~*W zMGLBxh7#!^xE{Mujj;x3;5B6dDH_-h9B>5zRA)%M<;1Q&khZj=>iE?INZPU`8#j86 z9@M=DnVArJ@gf|DJkz{sb*Wj&4Xw)0uqf-#UlKCUIyrVq9NlN@sGfahx9TvwS>v8W zIy?2miJu~cG#FP+`92iiRw#0;{+a1D?2BBg=XlmzQ(Bczm(;CTE>|FyXAa?v1ers) zfYgr*NJ=?FtWq8T*C{p;N;yNIQXYugHkknP_xeFF0DrB1FphlX^~>7{A(>w-ht9aX zoC^j@zoBGQdHbK0PlpY!yk9nPO8rRq>M#N6qhUUBnwZ9AuN}se6cCS;(J4<&P??^Z z#`yJjO(XsKyQcAe{i$ixUw>*EJAYa>MiW#f41E2m2@gukCOnwl{Q?_YykS^UGi;RM zhzU2W)bvgiyFayTrkMz%U^ZG+z{{1MOy#Dx_){EDI$`s_qq&X0toV|_;j9tz>@v-Q zfJ3OFp%HN!1&0^RtvI8#kkU$COYTYZUYFiTF(Wz-?jka>%PE+TpRVDSujW!cQrHWbUutr_Odn>iaF=j8eO4MF-6nE6+ z?eW#a%GGA~J&@X=^aJaKIn)?yk2dV%7`nj9IqmUQ%mPZ!aaw)C%Nf-v<$udB4?A9?$LrH^LKHn!?vqOwQIM9`FEZ6P3qv{U*R%A6SeXmW3OvyimQs|TL;W>o8D;e&Fy0Md!Xc%9;CS8` zTJ(lY*kOTf4sgq4?AH<7AW`H8Y=w;oGEmBaKX|$}qOrE&4&&xbw5vPd+mW*;IS6%| zc6F-Mu!?Ps7R4`w@0}aaCKheOy(C9>(r1cq&6@sZl}P7=sm0&xCaML0joL!p6x}Nyyd%K2TQ|PeZGv4QTygDoVj+ucW!OmdiEr< zR!yCKF45%x8Kk)qT>YCWV{#^~zc8MJ{xmP;dRWyu`kNDi9&Cu%AK$2vZSM(v+k}R; z>)AiLgY%%Kb!;ciKM;1DR9lFJ*b-NQzQkf+PCYR2x-d-@`cq>cM1+X@weD^^{y2@9+U2ZA{H7SlQng$|6%__$1j zi}e_?Q#}z&&I01SqP(-VEJ`ApgNuL37%-21IGK4rsrCS~uEA^lS6`nz`P!=0S0@P- z&|;&f#C31L75aEfl|s7vP|P3sBc>ggHz0?6v#-i=(j-5hKGTl27;qje&+kxGC5|X&>8ND}0SW2wq7cq}kZoH4I z9KY_bm-p+6b~e3yM}8j})~08l89n+8YXXNL%ggl&$&llimCVuyYBTvd7^VYLr3~eI z6wo!l-PCwcaw^moaXn)MY9nR?1XF9Tf?Pfyrq}DL2uQQlHV1Qf{OrV>^snE9F6|51jV?UO!m% zhI8e=mxqv)ua@hGV|h8}%1Zm8xY~wGIt7VUx{m3xWeX@8b?)<_*NHH_)u&sApv^4o#ksO=|6!c8wNXI7aVWoJs~Q8Q*(o zM0fDW<~NE+hdh$>AaOu}(^y`M0Z$0@&@2cK?22hBo$M{_oVaxq%S(e44CZ1xJC^vz&H?#C*j*rHsXBC{Wj?WW6`NwQ^L(p6M4o=T5@v4DOxf!fyk$8T3#U|ekmmGSIo_? z&`pKE&<$5D47V$IzRwjhEYFfA>(`M+r!6c_(ZcoX>8-PtSYif4h~`@?je2ZHV-kuH z8!bd!h9$yC&(WpWqz#el$+xEqNsCPKP4kWo;~I2mR*QI@rMFK1Nwbd&KSyAV>9@i6 zIVFc!Zg#!>`suilMSuL_kwrh9nzo7bc_9w|5Q09(z=*L;zKSgX^X-B)Xk3CYVmQL? z!uT}~GL0PJs-;%$s^nQd1$Mw>x?Qzy;h-^H6Hdh4d*yQ?D}3`>$gP^lx1pW8=!Q}2|^~>7{5yHM&u0zhYviA9cRQe4S+LpKfS^0Fqro5alRHc5T zFoG}CF>s{Y#u*SRXS%{dKJK#d@#iME%Ac2w^IzUC8}GloUpDT4d0saDe|cVp2ll*d zyyftf;p1PPm*IuC&&16y$NvR>WF}^Fyear$^T^+0$CoePixSpz2Bpk1JE-vY%%Y8H zFqQXA<>m15=U`yH4IAXsSey;8OiW(IPbGuJK^Lk!xXR4 zBV3$EjGJKan(nF0u%VMrPn&To!sNo@z`H-SY}LI-%kQ3FljDlp?AhP4mtQ9= zOO~f?m)04*wL*W4HA4HTfkoEHI87%fRikz_+Lh;ALOnPHw{-b_?b)ekKgL$F=uaB# z+Cr??tfIf1I7@%YA^pfC?;Q*1cRA1FXFf@fIh)j%kXl;j!R;Fg>I%o1 zsxhjknVTTgd5Cg=E;B*Q-PTTuRJQgDQ} zRI4s*o4u{E<&;&^B9HimY+jJO&A;Egk#S7tj2M?-cGDi$HE$0OWvd~uGNOCGeJtmjTM``O$; zQhCZp^;qg(nrUpT5gMz+=gyi}rwpALfzYe+ zEWBpP-LF8HQVrw-&>&+0ly-L9Ym&_bVCzF1DH*u~68!Vb`m^D7oJQ~6p)(@$h4@@U z?MK2X-7Le-6`wN9e9fXRL@zow*?`BSEZX zND#jL8zz)9+vjZojU%v@*n)z2o;eILqbxrMDjq{48jtgLs%hpR=0+I$+nU)7STR%A zZCU9N;XP(5#W3z5eR^mt#ySF%^_Y+Km~oQYmS*zu9`c>f%725~dV7U&Ky!^DD0gXq z8ki3NqkT3EQ7=r3F!UK|7!Y1JQcjFyv9PFG{^8i|rwQRLpHzC3Pk}5HmgJ3=jln7m zGq8li8w?RS)%7k7BPE|mmVr_@XKIc&R#`6Ojh$AeN|x|jV%$WtsjM;RjaYL$zk;zz z%_c*Vjj>gB*fD(3GHbzbNM_(v1%eg79~kafwht$+pJ=OO`!E6My(PPD8*5Fq_Er;v z9gNMMK6F;r1k3W=S*O1OcR#u4Gq@j1t=QTihz*cE(W^$KVoug<_(YV(MCg|?EXpax zOpOc*l4~oKn8O>Zwo;0xsz@1rY{fb`1x$8>;hn}DN>UM&TL+#6%oN5Z2(~3A{b4_H zG9^!lWL&^bq=|GUWP55p4 z%f=1#{;lw!X@~zxI!M|bD&C4gWdYxo7?h2XvofX%hK69WGMqCTDqK0TSm5viQ!sIz zL7vTs`?4twzOSjV?qb=+r=v!2aO(wMml4eGLQRqwO`*qwVzU z0J7BJ2@(SHmD@1p%cF~rjf0*M<~CNq6QsUvQgXF zF+pBQ5FxjZ80?*&ITQh6FCxe8O-RHFWDV$FhTFEVBJbh&R7y$GCRetZ7^o<3S8Kq% zt}07Hx&s@dvc8mVc)}4EbVR<^nK(cvjQe|kl8s@gu!SJ?#MgRNn7U>ku!Ujc0Hll= zzYUSXI`;o37GTT}#Xfwyr#-ZTQU70DKedCu@!kLF_p-NjhHK=I>3yXQE>g&jXoKlB zupMy2I`7#iybup^=@Y3D`(mx(P9)iKu(0qTZ7a@ubZ^P!sSKPoTQ;u+{&9X%w?;Ff zNu9$;zs-6S>C;Y8Z zRXDc$0YHm6EdS*@jMZlzssF%HxM|aAV{o>s&|u*5nbPI2V9dA?>5RM3KW7Bo+sqbS zYrwjcjTTJqtFvN=6u0V!h(CR0qOti#>+~PR=v$x7_cF{kGd{Lan z2*rj;wT0A+eBu) z$gDf-_# zoOoS`{{@WH3)HzCGCwwKFRKP4hZUgE2`uZ7SzF;wZdf~=zbjR*} zWXSJ}FOt@q2=Kpd@j3cn1tCjGtuwb+#1AQbbMqQ~F&8L_r#&=Qn1X)66!3)R(GeVhO7QuAvD_`X6U z&`7maD#}h`@nGj7W(8XfJf<9#q#M>6#j%Ch!g&g5Y0~TT9P8Y`xu&I6^V%KTThnGq z7-yCg=@!(!QpG@xSzqVkmslHTN>%ErI7x}jL&XJ~JYl}uOdkO&fi;T~hi1$Fc^P6Oip7LYa&_ z5zHLPtw(D4Ry+$)S4}x{Th1>^U`8biR=_mor^c-8iXyufRAg(9Gu`uj>x{YGCsnj7~y5i z9-33Cs?n;-;G5*zELy6+Dz?&Jg$uW;rnY9u2wF(P&JaP+<&Ys#n|PWW-<|ycnG66{ z`=B2sm>$D0lC3Rg#EQv4(qP8Khk73|9S+^$che0tMu>Zh5;O8M`5ym%CT2kZsT&BiBgbqVu32Q@5C>)42##@L zn-b(B$<`Ja)--aGn>8xwWG6P$?-xk-jc?-V+u!H{J2LPzsg;od)q0X>N2=PF?5?A( z7#{xVy|~X~^63Rv--a$MRpqZOp05w8tW|}Jq3Agmxb9rGG{8Wx)fv}=xFbe1E1oE4 z6;D*({M1x^Q>P?`Qd8-lny!Jh21N{?xB5HpLF;jY zantUR>n4UCh^-S?({tXiamziN{0DFIO6fc8a8%Y!Lx3K6Fd~(-oGhE7=cZ|5j4tHL zyrgTPj6@dDlI`25VF77hZ(vyWHHkg_ht%mueXad@ND|?}Z3PCKhWy&xk3ibdWSHjTo)3?DdShFuw3rI=1{YUY+x4yy$^|+`8HK zLPLMare-mM?i8s3TK-)<1K~$Y@Tskv@$2Fxzs50WbLj88cF{ZG?C@AsIY|dXB&4&H8F_^roL|!Z-FDj9DGYkc( zv}#3KHPuicR|DL(I-OMT@r0%e|EM&M9}Cd3#Cd0BZC&)n3|;m{?#VePlyIDJwyRO2 zjB#=t0tWeY@k6<;-mR`YJaDq}K(I~;0jGI+@1iZDt4=*08g)8Quw-$O`sgrue96mY zg>}116ViuBmfMK5h$KHttr)mL{B|AyKiD}3+s+Yyi@WGwRMI(oqlmi z;Sb?HO)CDde$=YNhY#f5WvOeyUbTq+=cC0=XqsHm4A(kig3Yx(K58`|@u?V9{G?J$ zq+Gj_T*uFk*7o<8E?~TMKf>?v;{#27aO>mPf(LT}q!}6m;Sm~|PJzj8!?to9%&<7WY(^jFGp|_~MLYMrGp-#UO{Tun=_*PQm zQfv(~2pknu`uHiQvPM4yKmC+##L+Ac@3kX~>C}Q5fNI zTB>p8z-izdi{Kp=ypIc3Y(Iw)%1#L1k}ZR;nuQ9?wnh!LPXE+HtU=%MU&6xp>i%0E z!GgTy(j_wVV$!26{?+4a#9X2;H$#mQdG8)l38*#`%S$l|n187VV4cBWy+u7?Cb>pE zZ;r}3Jtg{&6G21<-|vinKNC6V*dIn5DquD-;_$x$D0Q45djEffNoBb{0 ztzs|Ims`q_xP@3=jFox>Rjd|sC7Mdox5WdadRdcZ{~Icm4Ncif`C4`{N+cp^&<60! z?)p|N!NFsBr6DLr-WNvW0~$`J@&2*~f#C=T2GNW$oTzLKqNxq9E^jymFv*6;$k{ZM zcs2pZ%_^LrAovh-WlQ6N7W|qt4O@t?d?_osEmUIvbbqq^oBNZMrSw+bL(CSQqH*-M z2>OYBjM_<-9DPCHHacq;J!t6CYILI8;-hC~PRmG0IXp+sxRxFf<2owPf24nqd~F4( zx_!Ze9Je(3cJI8~E57|s-7RWo=(5`(!FN_>-|`d8bia~xQn@99B$nQ)+o^@FYmfQJ z2sGzqOM00)>CMbOX8Gg=b=Z@>YJ*Q!)>IvS_`u{o+B0lzy2kI_3Ax)FGV);9EqZTr zr9!&)Lhz3%#5(H1w#i#b<9(Hmkv4mG(*Nu(KCBXmWvLr32PgsxjcbjC;2AGC{)~34 z9XSaZZ@^?O9`bAb>lo2IK5EOZ@Ldy-SN5BbbzXS|O)J!l+84a|(zJ+Ss{#*SP#3WY zGMMYDilry-2A)sU*H^1v^$zWsKYQ3b*BP(Y>WM^V?jQdepx~&bzJ()YW#(Z7eV*yM zP0)ZzsmBze2!^gLIRA1#W^o>Mj3Gy3Nx_=MvG;MO{QXacBZBMJ{9>I{Tkny-6-R-` zpYCI=K19oh(6XZCuthvE&Rbx27@*OEm1{!PhoV>0-*)e$kJm&WC4=wXCxZ_ghQvVf zt3iBs?xfh-=?7AYG$(n5g}4Fcy7Z1|T6hd`QN{Mm;zgpF%2gbr_P}phbrT(5G4kz- z@SkO@f*H=(2h`n&Inf#+utYS6od(`2@Yax=WG6?B^c+mm1)8~h`4>Z@2Q=^O2{Pj0 zQ!?TRiOr!!ClAvHs|5sc_WhOi*Y>F_#vz{zK1fBTvwcREu=6^Jzj2F(&{uzw;d=;7 znLD1nq{}Z5P0gAxq22<7IV{nEYAypBsamSi_MEdll8eAdsxmtpyRgv&B8$Uz_)dji zAOQTbs39Vw!p~W7*C{9XP;v@zXJ_t7SL z9eG6#z+p1)KCMQ3(Vyv<`#4?0^dwdXo?!K0+mS6nMu_S$m1rAso^RIC^vZ0~5*6P8 z=0d;*DGiwgnU#W{z?lY5@!N#REodNkSiKW67Od+XdLe%H#h{2ZBCcCQ7Y{g?XSg9b zjuZ5GkM>WBIpI6~A~2b@;Qb1O5tkk|#PM{5=tHeyiI8M~!|)>1g!20@Q3sCnMVA(bA?UDm-r78Pf$`#6^j?owU6sWTAgK^y3ebI0jV z+W`4+bdCHT;69Bp^Gsyri2W}Bzz<-du95vrI0;DySmBtyCO7sHX0`%>=3Cq78=KRl;P73(<#b%@^+;#c|@maH!O=Do{3{L=7|*7jU71lrs~JLt_l zp^M)yO@Fu0BlAMQs%N;}fm{5h08yaG@!%Zb9fULy_mv!y3iQ1-Gb-xBKZXN~XMxWr ze0j8F?#*mEo$Mj8wq-Uy6G`Gu2tR*acmvF1P;my)qYcZ_evQ zn2TQzgMEL)=VCp5k++;!?w@}zZsvpem<#7>HRcp(8~8t=X{D;ibRs>rKk5CdLvMr% zHYXgJYKS%>A@+InOMjRlnew0$cS}j64(iZ{&z^5`m}XA zXNfb<#?}+vr9f%qbWaT^$r#qpbYDZu^@}j|wl&g~Rk;H4TAVcZ@q+B%Vp8eddmV%k z`hjp^NK5~;cTzU}_0%>5unVfVV?J?(^A;4%^b?THb)247)OcjwPFzplteX4wGv=gW zS%QW_S@1b)N=VeFO1UP^RNRj*$0f`}cmjlwh!OJ0lc5m#@iLFmW3GX)Xg7Q-cbj#Z`MoiTo_@?d_ zdUx+`TDW;DaoCyudcpiRY3Z-$r@S!&J_~C}>75IO;D5j}4kXOg8E&V4?;ZAV*9H3OZNR4>hI&vs|;e_FP1@2RZ{9dLVX+5 zug2?N!ZLWSt%dLA9748*Gn&*wAfrMlT=b65%f9rRg_JOdS~Uh8!_6;+lZ_P{keOHiqScUE$ zO)Ax>>_rRfEdG=^WlR3J`(xKmi{CqL+3@bOa;BE(q^6Pk*Nu+4Fg@Vd^qDt;isR3F zhMx^5!jwZq%u&ajTh_K(y()fTDuGlgeM=sJjF}ErDIi9 zbF*g7bz5sy#qRQ^4{y6PZ|3aWtX}K7m^ZvH-2j&C<;F}NksI?g>uA^Tkvvk%aHC@F zLR{wVDGW)L$R9z%O>K^!tqE7lWi5VqD{oR-)$9STO|3RlTE*=!Z>2LJdt2_mh*)FX z&|;FZK65r>SFu1l{rO0QHl#!Bs@lE_{n3YHS5^COPA)& zyVPwhxKD`LIIDZ7kl22qyS#jkCqSl|^)zkF%A{V-y1DSS%q{~JBm!_M*l{qSs=(lz z$>TU_p&ZG_82CzgV^)q;yWH?xdH_33B@X@P{w1*P3U9+r;sd=#~ORCV$xyz?q?X~2z5YSjW3bft!0S!{NSLYA)li(ZMm1X zotIfe-8SV|^&FGCr1zvAa%~OwA2UFdiqC=@Ej}V>OBq4Wrzh}%MBlZs0Kh( z3l7+qs6vVY!}-jhAzOk zxX(nuxM!k*Efb89BRt3GJ;hv{S-Mb9;l0+A6LmEUOGkADW?!hXMI+1U)|uQ z{pXJl&RQ>el3~Iu(r7NdMEBCI>+jP}bi^LwAj|^q*oJ1jOw9WXI1YCZo_ z`IkO|1jRF?#qY8PMf@xi=i0bp;mTOEf@9O;K5&kj;E;q-2056;MR zAB5!)z!~46Ep~dYx<|rhtE^3NEhl9M_|EF=FgjNl9FRS!W!$ES+|dr5XZaf1-52|~ zks0~qeAw2I_P(TFb~LR!diL<9CD!djwuX`O`7@9{sOhlTxWp$qyRS4nG7_M41}K_x zP>|bE0l>B`lQbDnJkA{;SX&{cj-|T8(apB4s8L|?OJuMZwtWUmqMvZ_z8J<}q3t;= zeY2yJu&^mdrB1=&)Vr1d3niT_l%3WDZA&|RS4=cG9+*K!~=+@ICAhQ4Wsu~ zts;#`>MQ>n2YWYnyYe7^-jBNJKPDzz2@Ae#cyNdeA(!EVT@AT(1|K{|chNy_lj+&u zcF|LZ%^iTvXW!f8dCzxFmc$;hLre7iVtp5rDhIbCcc;bWpw09m9sTJO9Yrr~Y}T)Z zXS+d7g<}ip`t|Q-rF~esoR+S@w$KF$G~S!R@-2f~Ax#0h!cQf5@e&+-SqbqdRf%T2 zq>Zu8O4RAcOWGMrvQWpHmtZI7?Q}+ohL?PAEJ-f4GCQGtjJ}|;ByFIO@5mH2e5+Kf zzBuf_3((01>R(49;5U4bqYGhbU-aqFR6_RAbH|U;3;XvGCxH&u4;i8#Z1{BF_(z?YFGz=d`^fjd zCnWq%&+Xes&%T(c3%N|HWnCwO&zzy#u3w{D&Pz{+6KVLTJwzHt4a0{MahTK%1ym1C zHk4i#M`Ia@AY6z$;%I|!sE~$b?`xI@4mHu>ORiQ(`Ay@q>r2Toja$^wv8yZi% zjOb)udA7`Z@r@4u3AOcJX7T!|Vg@=Gj1ERA9l*E2cJOo|Z8~cnkBY=Ll2+Wn8wXpH zwEEj364HV!j8BjrtT(0;0-xAMjxVn%#~0%pOppADdQbTi^`1}t%AZtJl|QKn!PeM1 zT4PVpdVkhBDI{;DVUizHaF}8^SQ;7)_9?OEh*Wp?)DgoM4I{%+$y@hD!%YS5DuKW0 z&fjEOMUz_-3l7D*H~~Yp!A1{DnQg1`9=)=YgyPmx`5X0u?xaFN!| zQQ20Y6Eqj+ffLM|N2CMfKHW}SV`50PS?|~i)#*3rBOO zQHlz#c=?wDM4mT~mK>lB(TYwSp;KC7t?>CfD`}+;SbS{$7NbNZo|WTyN#F7k^&Vc* zue_w9ikGl?!CRzII3*23x*d%?5G7ZQCGNarkg?>ccvkAo-*Qz-fRsIwhujZuA+(&o z)r}O%Q`8MmGQ?Oi6eZ!jWGE{EB_+%8g-tcL<+UXtsN8KtkXBV*8AET4%7OeKG7heXMD2>^@?xi?{2AJEuP2!ImZ`Yg5<#3=}3NI^nka;=!^+pD0)(f6PyU9)y>^;+S{ASNtJ!u(!f6=##t>{Rm z43C`0I{%{UY5bLG|LB^PI{=3O2~AGpO%v4vxg!B0`H~SGMWV4^(n#h3F=!MIku-t9 z#jh=t{n=e{fa3wJL|&4b%&*u5+D9%i<4&cQ78Xt&YL2VYqv{pswaPeidgDHLCT zme8YU!%E~XfWcZRk=b2#ck#|A{W1ye)%bm|)(PSU2|6@053Hb|EZ8>*v6 z^dO-J;5C+yHWmz#jRx(=A}^2Q<#7TuLzuQ+s*ds%oM!=#3w#%dla&L0_LAo6r3w`g zSn}Fa*fZC#+M=O_VfEa<)raV=X={z2@|BWsQD3p5UXtbtuMPd?3S;qtFm|q?p9<#( zRj7PRT^SUJF1?^e#T&+se>>NaZP+qsA;8;1be*TB7#d|!f!VfG-1pA+*x8Z(QfY%oA8Z=V?)ye^YYQj7tRH^+L zR13|7WWS7ogbeQ3>U;EDaoUo813I?)0sVpv^n$2xMO_Fskbot2^NW(1#*!}Z|GT9w zK%GRC97mnUlNM1+&!iBJpvm!C>g zq$_v_Lh0rFb-s0rZnD0&OeI`fasdy$vC@Q|hP83?W0iz-kA{kD}L7JPq zBepz^Re5#m*{r(Uw)m3f=KDV?Sik{HSDeV(kC8m3rkdk;jjw4~=rDBVtR!^&?mOC* ztU&N!99>?IuF%ByH#8GH^|{=W9v7X6@e;Eko1-(FM;gJE5SwQsYgyJbvJ{eKI=mee z46f}+zU(8D{C3bGY;Q-0%VIovsUQ31%~(BoNiCJXs3p+3gB+KxsGWhlRd8;0#tx85 z?y9eHRd+4u3_7z>!Tio8WLq2N1IL79paf}P#jl>8lw=Fcrp^veLOyYI@#*}-v~Kiw zBJ~(LwENGb%U<7It=7?B?nX!7B@NfDBMsSK^p|zVNymeS=-K1P>6wGL>_|)#es%Kd z(Q|6Yp{~7p_cR2N!E_rLtpD)0*LYLY@WS!qqyxJ~=J+vs`XJEzq_oJaiM9bO#Ev|( zp3$4b=&Hk5tK>usI+!6-}by)X;#<6VRDHF%R?+TUbb9 ziEUmUy+;$^bdW&r<%PrVn7Exh35^R`vsC zL{trTt!GXo(29RX!7cHtz|Vy>u>8Om@IUu@!G6bn^X-2s zJv$OaLq_3}uMl^kse8#NcX~;%k{bv`hUJ2{f&ErKdkp=AR99Cl?m)S={Fhb@lr)8+ z7y20-f?0SIRsqju#dbufq>(JCjXiX}Z2RH6kh&4NWv-+6AAgvWxY$L5J;#okN(KxV zJ|;jQ3#W%A4fYuBK9-Q)E+f1{30Y1Wxxb}nN5Sz#7)j5*bC+vJ`1bDCF)u{aj=(5cPM!sn|G;L&BE7pY_M#ExeR^SgSGoy(1-hbxc)0=Y>0>SvieEh9h=v+f zwovh6#Nc#J=)syz13vL2nO-E8^d*@@?A?g{$iMz-MUwU8-9(7h%V?#E;yC)C+3Jri3TocB}kBxKfKi4CEWb!~zL%jTr+EptXsqLR2AS^(!O&J-c;uhxw zN7sLXK(6MkTfKJHiYmjZO&t>-95Q2+kGXrb^nXI4K5+Qp;qY*`{>jUiEa^KWG#nf5 zHR+Jl5?2#eWxhOL(aV(CbeX|Mhz~oh)13}eetIk(Hf*s6|0x~Poidh&oznRYU+ghr z@$lh`M|dnAjy`h4{o*FgYnX7GF#_VQLQD?;)e%#CvmshqLHh&m2Z&sdxqxYm9~H!^ zf=^)NY)yo8b@TddRW0MHRjpUFJcAJ52^~Wx+14Di&VS*0a{IcJOKv15_)n|2VB5iy z)U{WbQ%gUxWlWIQh{;0Z-YtdEemxPNp_DV`W5C9k=(GYQ$_NJU?u^cG9UZ z^|m!W%Z9kd_kPo3L0Dgpr6UtPXWma*{Ai9GuD!KsWnrfTpLY{iOl{|yI$_k*=~rea zT@I<_ojsWTIbq4*9oycyW=~P~Uvhaw>QMK{F-;dV9_^np(tW`wtu$usgxNl@z%p`nJlh(ka?Cc-`drmA{*g*pXKYlrQe z^)SU}|GWVnsY7ZswX$wq%Qb1(>_-cx?wvb;R`TBNv%y{UY;}%_N={n1;^mW!j;_+(ixJ5&ee(yC+mLJ1M zgPl#FWW(v?%ga*b$HhNXmYs@MNxe#*_7V&9j=gEAPN)47p`y+_;!{mS#mX@B@ zh-xSNWzAe+heN*r5fs^$?M>DgYiRf&fWrWX>&rCEy$;^6x4NpEb=4QFrA37ighUjQ z25VQ7I(Lv5Kl%=Rw0hpF{Zk0pL$B{me!qV*5q6W-ow}=AcKh@W=9>Cz@<`n~k&$=k z!@M>00Zcek_PBk1ob9!CLV*13CeM-c z2Y)kYT&tXvdE$$nv&VOt*r!z`GYfl%#@>-5`dS4<_f4H@XtQrb$Ow;>6Bk+5tR`Dd z@$h6v+XLbYsgju+qFmtN$u+Q8C!YyHB zEiKuwctT3wwM)j&?=PujH^cev{w}j$XRZ8Wj*EZy`^0eQuaMJ`2R;Oz2Kh||0(Jud za320_TmQ%T3t6$6&At>Id};QwpDq2Xt?-?&++)~sugR;-11#@|FOptmWV}w>ELpO?-~0&^*l6x|^Y1$6kCj=kXLt4QCbZY*ANcTbf5d5BuxTuJFcv6;KN|~V zGVD)AZpm_svW}SWAbg*4EhOYZeB_x>{W;;Xd)nx+8N-ERYX%1QwwPpdN_;Wr)e3k` z#@tVDGjvM+#A$m1+U|SVZa~8t!_zRfiIPgtnX%w%OLT`WEP1-cvRF`ap)<8l&7NlW zLybDs8d>+o&2Hny=~dFq=y{dZqeZikgGv$^iUdFL7>5}P7En7lDeL{8xMJpQ*w6SL zXxu4QqCZ>_#OnV2l%%DguTg-nalW|4qEX8k9Ddi8n%NkuU>-kqh3d4ch0?1LYX` z+z)F_P*%8E#fqY)qPp+c_Vt=KuV>S|IpT;@;**Imj*!u=a{XrYnb=gXIpAPo(@G4> zm<7oN+H*$)DPeKhKygYWYw{q4wzi@MoRjF3f#il9mrkBjJJE1ob}Qa2SoSxpQm{j+ zp&6!(Ws0O~0cLnAyD5+44cbb^HET>1Z~Zsym7&qfe3h@ZZra3v1>cy}$qq`(4blaM z$NTC+g61$jwaRsj-{{ePhgKO}g}jL5j9|lfVXbcAvM__UagOrPm1&NQos~8IcNq|K zB&ie`uxyIhs(%8i``^U*CJ7gHx{C=37qD6qCZ)R#OP???W7x0^@x|O%%dtX|UN2w% zYVMfOGZ9f|bhos`~);?oo`HLqc z_glLJOJ9hW;~!!1&wiD?^3`ncF~ce`=HLg;$O2CBg%mFy;oUXD^dKtX@4Tk1k=K}% zN?zFq?_<`@&&~cPWhP>E}HAk4%N#JTe##dI1?^TgiXwZbM$P8v3GZFH>XM*kJZYxz}A2-Gcd8@)a*?#%M! z?V9S<29KTW?mW6?<9bP+BWCrRA75>hx8HD=F*WS#B~6-sgE4l#CYe}0h>SjAf z@H00XW82ARw#36`OZrWSMnj1J#LoywnKQSIRie<_a9h}JI3)~|RD;Ft+KKM^quTM9 zvuN?9R7ramkh6ecr0-{0V=WNggZqNv@q~o_5S4}QH{QLwasB=K>zVuaW@qo+Bfcbq zNfWrd4}|;CZQO3QeG;)QEg|2~-%9k9@%#voab4|YqnIkUZ3N}fmP+(Cv5N-=hnU&9=5m&deyanw@+b&R4IdNOroIv5Ir zV$O!(!sA187VbH>szZl4`?6!BH;R6~`-4MwO`h*RFEjA0_4XDQ3(ps#1zB1AwpXT33ZY99Hb zh-`v!$L15l#Z{x=gJXoyedMa>o}(|VUGr1b;L3|bHt*CroCpcn>+5qg#v{e`|M2!5 za8VvzzdKLaUBHHjU>w6YR8XPcgcnmV-fx0@|?N!B7HLY zC}AP`f`q3e*I3@8lE5Bl<(84?Nkx(y78=~zzv;Jw+6IS)slU5LyBv-t_T=liGe`qc zBQ~FQMFsbPKxb3{+RVhQFnO}QPe#6ZBRo~F3@&QM?zk<`#&S~@FsOB4-_+vuYcf)J z8Z4g<{@{lpJt{?uZ#0Qm2mB&z6pjlG0%=q68zfm6-jkj~hoY{d@(J;cx-n<3m^$x` z;hefL!UqVdLfKY4q`qgYg2hn8YO^ggMr2hd1_aQ#g9k%Z7EIH{U|};Il%MeeU|4s&vV!W8A7uJom3C?95I(t%8G}0o}(tn za+)RP@Otu1kQp=!ZeRCM>X;EyT%b6bAjdx|wTPGc`4fax;E)raAaahd0ri~x1QAzq z$SD(q_3H`8=NA)Xnc^V6;*irONDv?gIONQydW7w~p0g$h8^b<4&p8vME1e;DiF45U z`H!XMh}l9GAQw!K?&$k^4!QUVA}`{QOD2df@Fd)}VkYy;P=XtK1AenTABy-3O6C{>qNfmghn;%Qf5DPfu zmI;zdXNb?lMAUrS1R2Wu#q-=TLE=%fhSz-81W7}w-+8G56XcwdCfG|2QO`XSBuGgk zxg2ue1i6nqojK%z3DN?2mUGBM6Xa;Io%lv@Ks}Gl5Y-6rjp`gAk4=!m;vM24G69e$ z41&!PT>MFER2{%?{y+rR+I4k;;*d&Ul_Kw}9&qF3?`^Cj*w<>q` zHB)U9gYc0*m`3Ku_|FIq&j>k_wfNMxy212<5bQ(JMyGc48yzHi8HW^%pDoAYHY%?t?90=V^^eyhtCTgoHJ_V z$^r2s;-?SWQK8#p-~Lev{rzKlM-J#671_T}TGuW~J_C~M0#Z0~s&1IjVc7b>VYwB$PVPHUw;*cVtVYh2 zg(?H+g!+y9W{nuRau6_$Mq3$@H<*G3thIkK1*W@+nJF-xr;H^i?=vUDz1N;Oa}Spd zw~PzPT%vW{IxKMI;DC*~(Mwm1@t)M)%4T+jmgA32UO}u^uTAQuqs4!83-DVqIABG< zfCV8T^E;32FlI8Q$`^y>ZCoQ!CT3uR&{&BVJ}8&Po7w^X1_#jZFd&+P39SJ{q4VXF z+U#Fg0h6!;oPZH=wtTI0`$DEi`^OE*88Kqb;IaNuvqJXkdZl#R5Z@!U``Uz%%*>F` zx$`S{PwwTnqOxq4-p?zsbLT{_e(83yZPuV(lfC=49QvbQQp;gK`b`un#P#m2)AjBh zhmni{f;0F?G9?se0Jt-&>HIfcalUZ=lR}?4;U2yA%*{MdHl)nN;q#WrwKoqBTovHI zF{*pK=gR0FliHQBnJ0O-jL%P7PM_y&Na`O!gg?6l^jkc5$a4RFo-v-mncZSN#-ytV zodoN|1l$fp>^NL4=p;Elp=csgobYpQhPXj^t=6a^dZO8Y^r6}0H{k&wxQlVfG@30g z=6P&QkTg15T*D#IS@S$$$g`D~!i|DM(vc^bL+nkEXh1RqoSys&nFdaE zG0%h1;1I^>t>F-i28Vu^E?<0V?D@| z!)wN9a7YX;`ZKh!qf%ouL<3gY7U_hTsTpcyXgoko7(+we_)|aOsdPeEtPCYJ1`o!r z+9E#^Gu0i~I$$zJF;lTucR-4ux-EN(!_@`GD$G35ZDEQsMwp_WFlZ3{IUoQP>=u*B zAKLRDnMk8c9pfQ)4;viZs?XPrdbbK5JWSnS7wNe$py0*mn3s3_7n0s6Isipy8jEuN z(db#o*~gi@Y@^0~TJo~H>4t>^3;r52=GEOni|7VSQ?R%ZlTyJrDPkTVeZ)LWipn@C z95PMJ!=$i0m=q346SrVe7zC5TAz{d~m6yV#a7a4xBy$KRg+rnN$2mS@jTpJBOjiwT5lLHwa|V25Z%< zmo@6las1&4EhZ8&Db2~hq{Cd5NQM2Dj|$4_+jse>QOo;f^r%78!w@ zL}I#+-Z^sQ&e7dR?;0^;SAO^8_3M+_FY&n%GP=8N*T|8(j($uie9g7d8rBQT#h>-U zTQx{E#|d z8;5#WdPMkCaE$5iI{xQX^*gr!1Z- z(HP~+|1K$>pzId1X?PtPjCWU~pmELTol&3sHwm&l)!(0v7B?DvAV0-Fwn4;yl`4af zj4Xa*d01N>E(Ew+GXg2qz^6twXlfCEp8kiG{Dt&)rgYZ#e4c*5RK7ef|C^=)FVE6@ zej&X`tq|N61fBY(WUZac4@-=gpd)2w(o5=_WG`)x6LXh(w)j-*ZaQ?4!I5Q>NS|pm zowgxzI=!ZzjaVr@><6~@57jrt37@J%Y}ZRONf~2x=*=GWN-|m-rN(=tz)}$0H5H^h z&3UtY)+DgU#mCWXq=mnQEa&gPcdpl>1<5r1p{c;X*E4;^Cyw4L>KurnT43m*%HUBr zAfxsfPX_lOgU8d?>KrSQOk=GG3v~2E{Zg8vF>t9cx0b5OLVp^qqZ&ahtR~$@SS$(i z@bA&f&3%OB@bb%sx9;Dq_m3Ths$Xg&GaCKSxKG;(5o!4Bi`sOW7GfXGs*emuAEkz7 zRY(Yi<2&_p5w1$in82f{F?fN|E>VU#F+(@U$0pEobQyFaFze1igT(^9L| z{)MiB{_+ckLDo2iHk@ zz^_X-BMwzZ-Ov6OvcH|-Pa~VvZ`iC^!}`qx3)cqhuLiD~N#tvKsR8B&rkl;{)@$Cp z9zKD~A4-An9WcQv4{Qn}9t;LEIAAtDq)c%6fsxruq){-I2oBSFl^-1#IZhlTwDI)n z0)t}Ja3x!Cf-oK&u5mE=j2jPGHuq#m==7E`zTF0o@7|$dn_9K%4N$VZG4_n;Ym`1sNSKlhqO=+)8iPn6IB8|r*)^J$yAk~|5|-hQTSeB zLO|@hreaeYLnuA8fY@)*XI?b!Dz;IJi}fCw7Su_z3hfRmf}{$N>zWF*ujV`;ejgT~ zU7~-heo32Yxo6PdSEG`rTbP`(P}i$Z?_OHbv>H($TfI-YuQ|t;uW{C3LCZ84`s{@% zDGPMHdi(Z7NV&|+I4}Qz?a^&I+*_9mMh>_Ikp&UK)iw?pJC59KhTqp&S)=hoCt)6_+y zf9i8A(POLo+bGTa1{-^%oQ*-zYwDN9$r=NS4lH`bdT&^+ey$AHYy@Pm{#o&Dw%qPy8jf$|F6oOv-ayD}_BW^`=G53VpU3PHk_NFzsKHOgJf z>xO+=ji_#}a+9tv4nlPUit^q!MR#8zfM}EA2o~?C9jFD@3mVCVvR~Ieu`ipU-hFyy z_{6te5ZgTf;#)%+by2#~C%l{I-`fGF%1Se(ES?CnL?zf9Muc3IvbEd0`8Mr%BHSZ& za+{Xj)&xWXg&68WTcNazI*z{NOEXS|Po!ik2}*u3TgF559`BA77Z=T@CyPfEw}S8H zlA;C0ctc7*ocb15DjteF1B(*hk6j1X7&) zgO-3{=VD}UnQ;*IA*r`Ws$4E^k^c8`@&?hLc1gc5T6Zyh+C`o2;?xBP4lG!7C=Vy= zNsSxAy&`0+EXP=!Fl1(SDYXSr9T zG7*uvj)cUVG9>RIUvGy>RbSZtK*)GKO$|KKQMlG&AE_{-qtDpO#D3W_Vt;w;5xV79 zv5FII+0MsX+CHE&9N^PEVNOAC{j+cYr2v)zFzzCbwvI%a$F#sb6iZE`!i&N?5nsF% zOPx~2n7^!lY5A=}-^?nRzj~?lS8ep@@AZox@nP_|>~3)LGvdX9uPYf5 znyQ75Bh+gdcHV{yh6{oNLRhb3_H?Wgj^w{rV%6`>>Ih4SqW@V50iUC?7-j0I3k!A3 zJpX>{A-pTRsA;5F_CN{YtxkCBZAiqpAa~hy|Hy4wAGzPmvI^z7dkAlI!aFZ>?&|-n z+n&|^=wel4-Jf!cA2Bg^#|5Du2sVZWKXyQg#i9o~@84;vMtta_UK`;pHWnKLFN&B3 zrXexo_r*GZsHu+EJFWUfytT7@RRFqKVhNZKOCX3P&C9w7%sihUz98MD0(i4 zWu!MzMbCZYO8N_65Mu%fMkC~mk8BgAFC!s-rQm^DtKfET zteTItsI7v;Mn!-2kZlAsQYK2a@hSR)XCIF2Kbf-gH4F1L&GQ~be@cz?Wkw6~b)TZ= zQ78j6_+nr)V_Hpw8zKRpPs`l$7M~zPA|~Li)5itOCyN2!m{)$q`v0+>@_wJ{dAah- z^++G_kvYMGBrSl=r-jJZxd!Xp?$dO<`-AU9(~7s;6ZLj)gvFI8^Zc^Je=c0!07ta+ z2Fk57&-Y)!pEpqcyQo*+N0jUJ9~&U#AVxnA<~W$F0BdMfnSqzAR;+x)iJVesntU3E zLc}K^dBtzEM@%ch8bk)m*IFJYy!A1RHzaxq??9c;3-5ZEsZJACL|LrOvvB831j}w} z29CGxrYXUS=dEFyl*OD}S^V*--FKBxp-Nz*Z8bq_3)?6NpFBRrt!G*d7PJyNXA1!s zk*S)DDfd%T?@tK{Sx4+v4_bFOK_AC30&&51YOhOuI2jpqtLd|KiFelxGVJ|0_Gku1 zDpqkHo8fl;aHWMB!(?cWSQe}YZbXb(OP})ELqaA$VC`u#3~#-}#)b=CsIdJSVz({< z)$5Ql`C+Qgu(yZUNNfVKfkURUDiOpQYBM!s%}fwbItE$z2?B!4Ad5ahOr;iof|yDz zF+u!M^C(^l5-^pKpe2H!CGs5!gI`VnE$fSke3uxBng(C^{ON=@zz%hQsIiu_O4Pdi z6NJ@@JS$8P^vMKS^9h3W%kt!Wf|&BG{RA=PS;rt)Fl|U1ZKB!}e3i-r)DctK#!L8C z8s1aiPCV38xhM_s)_1|>(T}vz^x?MF*vlTUv=%Wd!bWdtP0t?sK0T#1q>Z3cAVz%Noz{-fpGK9R zuwrdnTZllcu$G#B5RB;QPfN|DX1H~@qwQ-PeIBhP%0l=|U4*+v9e25l+@&bDdFRf} z@l$PudXt6fy^4I_xw&iS&aTZ7dP?{O!(etu1qDRtp%UJvvi3jtPCBe4U-kh-M?Tf- z^5vSpEK=FVZ{^qh#;jw-g<;JJ9^%EfXb`(2bMCk6!s z1QoI0pMZ;3>H>m3rKrS@Eikj|I#@mI!2g$a$WNM#!U$qfN^A1e(4q(bx103P%qR>e zno^n+9)v1WOK*~>;%T0xf^!B_;b9?IDn%!Xb|X@Zswhu(m)%v;XBkYPw>&J$Y0E0R zl`Vpo+ybAw1y92WWeflAZiK5}GN|BHl*gd3Gvv7iPkiTatkO^IGBRYL{@C(7{U}Cz z%or5qNsIJ>`amp@&x;tJeqyf*)ndiV)wNLLKOS0R?RhC%$WdI;ew6l_+b0KUYkc3v z+Xp_(&XTsF#{BF%PbVg9X)AJ+D5W_N(qm}Be=Pd-4~-U4t&vw?Pwh1LL9Ys-#GW;Kq3 zhks{JzsLn~XUB~@8yA0O+_*FGgBA@KuxQZ0#RCQ`{%RCC*qLnXO#cx4=}78>zYPsW z8OAV}VZY$NfP;jVAIqYikO7Maeyl=#fM_mR4|)DEqedC#vdVnuNCqWc7?>O!HHzHk zU|dW-b<_9+?x)U{=p^^_`)@n7?SIh`$?JcDyMW*l1(xB66~%nPRqco~!ofColI-mG z@5&Vs#+Nj&D7ZK~Ng56RtrjZU$ys_stap!b@x+68#HXc=C+_$h*TXwjZxFW)ZQXjv zFxavbjktb&I39f{8aAYL>!A*k6pH|RZDLr#q$HL(h901MV+~m-g6PxQ!GWz?2VT0w zeh)@`!1v5F?Gt)mM6Ps1N^K68Z&Rg^k6s10KoC6R56eUxVfc?t???##%Xvx}QeUwY zvxoz65VI6ZQeP;i+!130Co#s5rra{5sf5pp;@mP7wh%?)D2k4VF7$;;lrn@CaROK){FRktsr+K-CC!zr z^l$Y+(p-kk$Bek$n6k1H182sk60o&iEu1H-46i?x9nLBc%R&00DvmI<#oX+nANF8{ z(W2?_F;?a%x+=ezQ4rS~jtX#iHCAf)3)S}#eq?AVN0h4M9km=z>X8G&PhvU4Un(`} zS$x%EmG&!8fsRn!2CAY|(d=Y4Q3D`r{*#$EqrJ~)L>;7>jGmcGmMc|CBrt%R1E?Uwu-&NPXn-PW7Qzy;2RQ z$)B|1S7Cd@QJ(yX@~pkR#(Mc*XpdF|Bz$iea*+n~3i}H+kp|vrJy4VEK(=cOvZR0KtBiAtCzo)RuAkp?$mfp`$vSs^B|amPY- z=S`{E`&r=Nai?^YUHR)Yl@NRcVlkBftF(%h5oFYfM;>){BCEZ{NN+dJn)t7sZVp(E>*-qbEm$@<1VU&fGC zU8ZA$bKn5oT{Lal2Mm~TROB^MO-QLF)t~TR_s7f_y<2h54PexPv!$3LH*1`2(o=(4 zEYidj?q-kc8Dg|!y!7|Iyri05%rS&>tOgye>Lpe8($8VP8QDR#k-SSlJ(j8Xc;NHZ>i9me%6oZfqBTfWa%%e-Fx%ge-F7yZPmLkEDVpxR9?Yforv zqBf9YX8vO#?ANN_zeAKrExG*1A3{T^rv5&ftxO^;`l4CkqxTywT*%J?SQ31S?ri#} ztCxpFDIJ9EB!bPcvO6+T+N19vwdX<3{$2;avYBf5tn}YYV)xji<^CUA1_dWF+JuR? zt>zn{{`&(_A?oEMf=%dmtgXmMlwpG3zEC3>u{F2E*p<&(k{pE!z;RbpRFQ>x)Q5Sj zEtKp3SvhOYr?Gy1YD;pIYALTioMT1g_q=2F#lLHxX+Z(_;NWa`M6@P8Eb8mZD`ekA zbVahPw`C)w`;e~I@M0?R$YLKXiOg79!0m#Ul7_RvG%Sb`hROHID>jt+U!~^yQ{+DH z-aiXsNPr?^Db+oN`h^qa`@*m&@`{g1WF)Q0iW--tTuWR3vpKX7Oy$@V0{`+t1w&iW zmsX3SRYhO5N~o{=YN(Ir^L|zD{Lo2!3JoqhRBxji&8KS6UtZpXy;z?0`LlZJ2=&Q2 zMCr|9l}I&1L&3E;7~;y;vr2-dc;nG#{BA+Ov+D|bNNGYGVO=L~U{SFMtul7`-d zg>N>-Z&o=uI!G#b`B#8!LaNK)#=nhl{x+OS5`E}lEX9)-y_@A@XdgN-4F?Ej49csVVbIP01`RMZI1a_GJvz8-$^yq-+tU zl#;STa4#k0pzxQf<(Fn#eF*aAHlL-8G~}0iX4O{uME&1OeN@tC2P~uh##!J8?cY+& z)W2kkk9d;fRx-s*{Y$2#NrOu%W2XKk%b2Nu$rLm7FOdT3|Ld3AA!WoDrKD7rB1%ay zQ~#3fn5los6f^ZNnW8gM%aSQ(>R&P?PHIsKZf5FVvW%JfmrOBJ|B@+Y>R&R&O#Mry zn5los6f^ZNnPR5?B~m_8|B@+Y>R&R&O#MrySeQ=Dk|~zr?_VBK*-ZUQmMJUsE~QL4 z$;cm+EMunrB~#4QzhsJ;`j<>GQ~#1FX6j!u#Z3K6rkJUJ$rLm7FPUPd{v}h))W2kk znfjMZF;oANDQ4U%+$YRikbSCNcl+pOQx8qf5{Xx z^)H!Xrv4>U81-i~zGRA-`tuZsRO-PpD-DZ+8DP;f`7;rCI*%#Nn!7f4s^duN zNfY!2VbTF&J!>X?c?j-xlNMZ$BvfCZ#6#L;IFa-!8^L9#Md{8@-u29A0ao@VoI9LZ zkUf=#{H7^jmp1mCtj3X9hN=3O{Ei!9Ht-P96>$QY1`lS&YEdDF z=!==NiS+?tw82tJoT5y<_l^WzSU3&Z>+HW$#M&{1DdLEyyC$EFM6GLJSN0xp6|1OR zaWQn{Z^5xxzQ$)ex#U!GY$`)K0Z9^!=qkgKnMMD_d*|%+4V7d=&#!+Gzl792zJ-*} zE<3qW@uk)Gb&!>jZ1%`g_BL9aKIwJNvS*XaPO%Kz`C`g1^z3@#EWWZ&IWuADiA?W`HiN!m~ng!ubJbqrX&1y*%oI?P^HH=E}ekM-K$TnzVIto8^95u7^ zECe!WL=Qn?znsY9zSogk;hu+{k#h5LAB7zrm-Q}v;)|85@kG*_OC+^dvlX|eouxm& z%|aL%uP8SsR|8bJj$oW%p3LN~+{*HfUbM0;mz+3)U>m1hcVpb+hHG4C~(7 z22rNC2|uK&cxkIyMMUX@-k~nQaKcu%`8NB}y!G_zz44RDR?_@L_?CpaDJfq~+!8kD z!|uSz<8G4%TW393MV6(~OQeY;8s2qE=#pw6gRXm%9`9-DW!FBg!V}@C;jmc2t@pR_ zkLl4v{rg`hBZzuN$FbROUs_DdOFCp6F!dkWvZ{LAbV0z2W*SHH(&F#7W8Rs`aZ?8g zAsj0Scy;*v2fFy6{E!soEFeyo&JdR+E9jADv;Nf8YpP4h>;r@Q_*1$|^j7sh$u?52 zdz8&@bm7UXWFirIl1gO$owhB5Yc_SRtfx)s@!q#-CZ$u@cEINRfsgWhHu@HOh^>kV z3qdnA%o;{y-sc`{`F|vyju37cl`o*5La?$yXeg{dKq}1U^i#zM=(Q+nC{WbygPn2MyJ4(eq1z{d_7T zlCnSks;+Wm1}{ymU5uesVf?HCwfUqts>7UuZ0ApzB7`0yRTc&RoZ_qu6x`!}9vyu% zlUAQ1Z&1q45ngFLi9LOqF@qNF%J?m-cG>9B7pF|WJi2f>mF4k8)9`GQ>RItK?F1ev z(jEa?uq7a*72PTu-|#gCbK-Qk?iXMhLvozpsg8cMWd03Za=%sK3)s*i^1u~CRNb5A~)~wJ?6Pr{T@Osu$(q`>i znnzn|F28+YY5m?W`uj(uHJN_@>wTo+*4`~fcD&KL{a%_z?>j@s`x9OMCt9AP9F}LI z<%-yqEQA;uG%jp7)Sx-Sw%yE>32!#7crmEbPfK81TBZTLPj8bZq?$cW z!Y1?<&26^sL+YBT2`6-$=*e?U&(f2d@nG|W`KceIs8p&T__01I3CiXDL`;o(@$m6) z&z{|TIkxwPq^!+Vb>$;Z&B`eV4=Y%kek{s*bj`I3k~ZRPE*^HXDGqP;>^3@58HloVEZ}5Oq`zir-#|j08$I8%o z!rjrD&XY0DT?%tGmq8s~g9?0Oq|LwJPpCdtf=Uoo=i-ObG0lFX3a>JM6rA}ZFk;I{ zDto+xS@2intDGHC!q7Tvh&X3T;hLGZ=Xdd1PptE5EPXoHQ+F;c_Fz!lRVgRR=@)u^ z<4(jgjekg5?DIK81`)eMjUyVacur3o4tqckuAA_1_M-Qzp=x?j{6uXqb)^ckZ(#l} zOw$RY2BtkWDVFV+3K_3rbFUOO*NEp5pJ{kgMtLeEx^zT-vZpq*h| zVm--{h|X~xm*J(Ln;**FQri{z)VGxH71{*tK(waduwA3VbA#ha`#7(d#U0}D3uCbd z5qR@p+0WFOICC`4ScPmE{*4Ly$a#U=lk*&R=)p#v-nfOhoyaA^oU(CM-=5B+qpQB6Brqd%kg-yw5&WZF#omeuUOu^Bdy{3~LTw0Z3+Sso#Z!{Vs+zd%w{>7c9F zjz~8~Ege5g9I=`it0!z%4wC^XWCX~>c{~-;L_S}%l0O$R4eE@Brb4PfWMv1p)X=cq zH8mc(R&tcKtTu<<+FRiuy}s76oF+=LvVz7*^#{6_%SQpiJrCxw`q4;&pImSys)Ml< zht4N^=IYM~zAK)@MqZw!oEMs8Zy`VLqK#99T&0VAe&oRkla7b!_RdOLTa;a*Vvqr- zdikO5#*7JZC>rCciTe3u-&|#el9NgWVSJJu4?eZDA-!TbD@$xh?W;TtOqJ{gg=snX5wN)6Y;!ZNK^bu zQ*s1f(4AGq1?rw^Y+uO%^hQ*z#6mBRJ!Y+{qk@+l9<*Z|IvlBNnzK-C@SkyQZi;(t z!<{uNVlD7(Z;Cf;YppInlfK%Ybtk2|P&MQE$_+%EnMxwh&zN>3)=8)txjQZER)oPj z;)iAx9Lm~P`@Z&&2ti-rF9>1n%nW5|l z>0-f>MQmeI*Y}5cL%Jj;&g|c1SgUFqXY~oF*RON%>|noUKMj+g`+hb2r=|$G7u>mD zy?{P5H&tsjtV{oyi4(dEnJ?Y-?J=a&;=;`{exB@KZ~WZoKJA>tc4V9;az={|m3>=x zXfcBtPG{^0b8gosdhYmo{*!;6vAJ+@Cpf*SVsQzn1MF*Kkc}5b#zeE{a*d2K!d$Qu zT!6J{#md5m@LXNFB(!W4x zai0u2mGUHG<-_&#a-MQxFTJ)N!{w>U%WouBnVIzM z#qot&gUxe z+;f~RduDr&=I+EO^-|VK4YVDNy3%(42#bs(&x8zTE!BeR?zVc~j%vrw4r3S5V29q$ zlA~A6@e7mhtkn4JylG__q17&&P`HwIwXo1>w2KooeuXP{-a<3$l|0!U%{Z}57RW5H zxG|RTSh0hdARB%hW$3qSOUcy^dknkpV}NFHZl9d7qt*mmTA1`OX??%MgcGAiPE8FA zn>lvuwe2q6jxsPBm$i(}8?t_QpLu?>_GIrl-DS;=mE-&NjY}O?!`si-vr@Kt|3?(D z@h2;fq+G2R?>OV6-AuPj?m*|vqGqD~%C?ok%wtaEZ@Et?mwHqd>!kGQU+J4lm4B)} zGea3hf_H?5?+C&NJITq6s3n9fj_efIDN8+}b>YU@6Et#^#^U%fjaS&tATR?6&PalH zW-pA1S=0f?{UY-$U2!77Q2PBreoy!^>FR+(~yE>Lo1JYIGJBw|0W^i@OM5&hpP*_C%C}o> zfmQb%+mfc0#rLFZU0d16W3e~MKe5)t6%qpe+esL@pV%#2M&GX3OW(|pzA^NQ zxG+6nRcyPMTl1%!@#@!NUY@Y@dD(A!dQ|H zp8KP-D=w#We!!N$W>!5yzFIRruJwRaPo+(C{jfzn2sV#jxe7v$nE~j-1?8c9S`A5< z^oW}?@b6lPT-bNq{!4Y zCr8MMn6;TSSebR1G*}jPg8sEEWLIj(8=D8^ZthE3cci;?1<~<~hi#2WEm+wX<_wqH z2z?A))v7^?l~tKpMH`adAJe%Fo7I2W*|xF0=+&OMS&q*L_Zin_@T#*x_lrV>8&<&Y z3Hosl_<hSBR z!1F6k(qgL#7E6gHC!ds?GLK%q-)_=W;Vw!0ux{^)_fvn}GUwr>9D3#W-ZS*lN)n|w z3U{&p&5em@4Dvz`#-aVkChbHQse<7)=~H^Mz76~vkO+88hL+a2f!1I#r8X2llC_$z zaW>UO)6E)5oW9n?<~(N@`n2{gD^`Or~sG zsiwfp_(hlMPWR}gc~eQ*{LMtYKs&+GaBlheK=-5z?UIGtXpDS)X5VqrASda!MY#o2 z->=x0cxGl-rH*h{aYSoJ@mlH&P}C}_`WRuzJdHsCK)~&cAqXW9dc1kgM4ouZM26gg zNj!<|YVy?+NVaxw8ofW5B+q!i@Bt}9=F|6d4LRlQ6ZYLT+KJ}EUM@B-kobh!>(*Z# zmzv`0*qrl63!xRj7>PDr_Ij0y(EhQ7=i2zO5mbH02+eu0e%t{@OogvD6S$f_DIZWs~_ zF+VztS2uS5fQVN(*M7Wfs#|P|=P~+l!9r3!zjJC#^VDYJJ7nD%9bX`3B-1P8>s~HS z!UMyr#vXM}k-pb#Z;*bc99uP1stLJ{&YS6t9kz$*?QA*r{Tofl!PUEf&w%0wnoYo` z20x~49VC!slk@{Iek%!TFtt3cw38hyj4M}!B%iG*2!0{?MAY%-?7>ARNu+P+lFft+ z+BkaTlD;ED&d!X_o786X?_|K^--!S7Xwqh4Ui{5hBabW@vuThZY^RIl7rJ%y#N{>g z(fasT8;OPC61}{Xkf>9{GIKMjcVnDRH|`b$D+}nGQ<21$+p12txt+NTE@Li z!n`dnekN*wj`T6)zU*pT!ftMuBCx+gV(NHmU$v3_n9W1wX2BWqJO4BA4%i6kmIE_kc zEjTCRBH&Z6e67y4V;3YR-`!Eq2kfXSbsfsr`}(#uoo zdq;U1rAux5d_|fl{a>Vn4y^G*<;osk`%mwt));!l`_xm*BP6Ne5Fh$HEbMU6mPr#W zWu2x>?{)E*Ag|)5(pu2X+FZWoVuL%D2-$6O9yZ2EmEHIQG$1)H&T1RrL59Zk!t>MZ zo4alwIO|#r!pXeYG<5rv?h~a`Ie8b3tkZ34KxYfPt;DipX@%w;h#31|;iBIreILGb zsLh<6S97;sCBjJI_}H;n6@d^$5UdXw3Xyu;_LhnA!Go~w;}kZ_A?gtG-P9=btOzNT z2$>bB(5lsXBDQl%%Ad4{RKl(D&%KlKlj^pU9HI-BE-r|UE?B&@AX=X_*4Zgq>#q2d z7EP64AQ^XV_!caY|CzF`7QqWx(Wrlu{#x?!4z zFs^3~c*aAEJEVhCtjmQBpX8x+I6Y*tNINDBm$;~>Ie{94G)o=f7o6so)>+DJw|QCN zAMpiqGw;MnDdgw%YY%l=nY#D>FnZ$^Z9z`#yP{;3HJsEmEb>krAJcPfqGb&2K+Q?K^{O{BNc95I(ROElp^T2Y~(V z5cds`+TZrPP4{kH4^Or4{peG;^|%tdj*wJ0r52} zz*xqY1#mVo1w0=9GRw%_j9N*-qQ+!p)8KW}gPrOGPhTIfS(%(N;^fRxyQhEsb;j*Jp&(sS}#9Zt$k!^wi)}(?{)|(YWD^JwX}21Zk_Y zq1liTQn$&9>l3#qlT(9!$-u}oYLc;YRL03*C10&4*7W%Yja-d)>c=swNBpf?#cr?ji#Xw7X4ZpoqkdiPTz%})?!DH;ZT?vzJyKG{bL;+^F!9a$g%8J*AtYee z#0hyp50BBI${8?>j4=%1m*p+|vdq2@=il?eKuSynqt4g*iiwt zMxCX9A-*&?wH0r-`L^gui?Q&vlIs+W43TF;+zfUK#kIu`AxQlIrHKsx-STh%tcEL9 zT^8LMQOY!U@5RQhjz|!&41a0rh%Vw6p|4K2mX5bwuuJIpPHnrsHEvv(PrLEFmy?e(k3vHA}vpB&iJRBA|^P!~*(fUgosbz5# z22*6-$x=@~nA~ZNUndzSjvuL~{&zBdEcs)s8c!~fAK0kzkt3?MsOJz)Kc?YvE1~Ve zA&tB7C;b59eT4x~cS&=mGIiIyuD#cO$Zj$H#{8~P=hEU1d{NtVl?0Q|B- zthwU#nYv3-myHXtVFZ#dJ|>W}18eqC>*eAGp*y&yn`CKJtn#bE z)LKi!nOZA6bXQQwj?gfO!MbZm(Hvz>_0aja#JJN;joPu$r$b!#aSNf>ie4NKtr)~) zPjs%;CO^@wl#|Cdu_k?J3+YhdePB?NN8Pa~0Y9kvL#TvKEsKM0DP5C`{1(X~0` zv96}KMHu@i`pi6+{8N+m9U37o z=YS4BC7<{0IBENcVT)peLt8f;;?-D3YIk+-5Ic2WYUq^>!-j3R5}LYiYHSDhuCsTLKfT6h5XE0(J8&N z!ost9wRCSZs+o1W#FoDPF44F8M<Q&k zaE<;o9&KI)A03P~B`&JR`fVyQa}l$E&~#NcpF&Ww#Z+?tIwE~_zz#yDq|%pkDBh;` zB@OP~hjTDA24RPB@^MAEJK~Ma3pu5ihCF%BCjZH*7vop*^ib11< z^Po=7!V2T{mOd?R2Xtb^1gVAQXKXR1slqMKtWaXgSCc{sI^mm1q|djwG zCdAStGH=u}Uov99{KlT_)9;Zw80sel1;>T=T|9VLmLKeW$`rpQ2*#{d%k|KtpxQ4^ z67wx`xh{xl{mgE}CSFw37`4A2UvE>B7IC$^x2^ouS9X;f*){pPLW7X?e)A3_ObP0r z?5W*ebY6Dt749Z!%|AmFmLfv^j(4V9|pBli_%%S!8D(^p?YQTKo4; zwf3OhGl5SW3lgWfybPCp&1D$RFjK%h!0#F1SP?E3d*}y}!Gr;@j5vud_~B8NRv4{v z;304Y;ujA1ymF}$XB7OZep4kW`P*(YM^ycq^cX)>9G$4KxO^n%_c)m}7ajC_fY%IV zz0^@)AqgNCh7A0pREk-v8HM!b;LuDAAb2f!5I^BY%Ir&#Vz^R%_wwLnzGt?DEd8!$ z^Gial$sg8M*{DxT`)g^ZV0pvUkdu?EUwS^Udpo~qoEMX!U}frdv!5l94unhSH)0(d zNBl7NQ1&Um?4rNh?ZDK7^2&p02c^|L@MN!Sy)W%xVxp%1SZ2M!f3l-BL&Lc(2Yawh zQvI&!%*NISWBYr8rZZat=v{TPhxF7O#!1DVE#xEPVjL*9tMO!1gmqK<3NGbb-HGO~ zzIn!GSraL#dyc`_4i^(8J52%j_39WHGsDX`V)bV<68EX5;{1y1=jQC*oMY#ZdVciS z>(i4?#aL3mgaozMbqNaT1*>?ghITjR)9_Wtffohc} z|DJ{X%sNX=V4a0@U(m$5me_uh!0Yu_{m$xD^+i5-!Xn=pz!Am?^*qvY$+ZU zZ+{p^l>c@n_2PG?XC00|uxRGqc-^_wglnySx|5LhO9Z*5uJ_^EFWU|sWS@r)Zu^CO zuD=r$nvoG2bO$T_78>S8dJ-mzi@Pcb;VO|C3c~BOIwtlj{;C!`uKUpP3PJ*`WeMjTz@ca{3nOY{QuztVq6{)o6g4@VH0+#s#+?*@@04*e+z z{5+Q!iBel(J%4m{X7N>Ne=~;uW9C?$f@hsfU z*KwD$!iJ(aZk)YhEBp>$*EL|VDq+N#Y>u&Mwww^Mn^lRrSvSS7a!RVyUkRNqoarvK zR}$4;!XA3gpeu_;3_kIq7!xD4`%+u7E$@ZQg5zuUp%<0GoYun0gS7~`Lj{$iBRdGu z2BW-86^1?mi_i7&1(V4SnhdhJ8%WN*$G8 zvCI_mo_s@GI?lbHNiE3xqQ`-k*T}bHVwlQae@Xh<(6BFlb<{sVU}_BuU~ch&4}yl< zG&%FYFkEWS_*87V66k#aJ2_3?$1z@5JcYC*^@Mrzo-Fa20whO0e=bMrqm4KY?!{twx6JpZGq~mxiv0NWGcTYs=~&!mhZ}AP^Tf4`(J~uH1GE<7d;N|V`B<=e4ZTLLCVg{rWY=+SPJ_&o0s=!t4r%}#ttBv^y#7M z^D^3n{P2UjX6E>^doh5yfj{>0-Zs^D;P0_~rkz@g%Oir3O$z-qE@bAuqlS~+#Iu!Ru z`6J4C%?WK|;EnAGO7d7bUwqWqKeCFIXC}wUR}E{-mytm618?77@aO&OMLTO?77TbX zFaJm$QjF(Ka3d_Me$C(#G#=8W7Aa62%i+9T)ZdQ7>(R3O2r-ZMW5VZw)Bpjo zwTO|NrE+h1Jwzfoz_TyvVWi!elXj*Q(&OSLs3MeW>SnMV9(g_Sn58b5`?$HAqnNP%Lv|g=w!bcD{RVi4@R@zqdT#dlhY+Tv>brK)%-F!U! zRZq>i0cW`xT&?c+!JNA;hwe4j0ZT5Jb>aAGg<%70!whyyJHDJApI5-+&Ra~H1 ztF{B(<`mR}A5@%cV5a^|`@_5?jG6_L4Gce~Bz-S+x44=wH!gmYp7wfq#J=%1akh*9 zns=1`nv+B7ADQ(s>%;4@Vhx;5wHBY*OwSxYN`J}iw>oV4wQ=Xjh{q4e@bfXh61O52 zZ9*!3hEZ!K?MZ=A(^XWi3SXht9T??vsPgY867ITnjVID)RTDtTHCin8P@bd<5&izw#EoRCqKBn3 z`dw1T>R)OLcW;Df0H277RsW8AY9%mVHH;G5fI6<6xhsW2Lh3TohBzkBzpf(Qart}q>0k0U zurYrkRxzx_d$bRK5c??g6fI7A4O@2>2;6`H&~Vi$lh)y#88*en)9AlKO)l0uw;U_v zGXxz;?xEs@)bo#Nm#0Pq7m|zrKu{DRb5Yo|7ODPgWD$E0XHg~XNSsB@m?i;dQRT`S zZmx^~rp@^+3TF{hJ@d0j!(_Oh&LYSh>OgK|I*Q!L?wr??peK2qyME2RzsRZ6)bq-A z%=)*}Y4N7&^Jb7%!EL|yozmmx-YR#WKmBdPSSEJ|lo}aa9{+tYX+vg{cN>QRT^|{1qF5l^iSOy~B(~mg?2xcz? zfqtxK^n%?TIlW-Fp$Ekdpct7-fpi+ie$LV^o_`n#=k?^^1d4{?fwR!s1pkA>7g3d5 zjn{LE!7UyO`NgkMPa>|wo*a)KjCh#7J4^V^cvIC>Loei;uM}vSv3ezl#6Yo!iD5kd z5>VhKoN{670PZho<)F?A!dRn1iD}6tE zKB=^C$%k1J!VksFzZw~K`b>(i?l9?gx!ncQ^+?*IjF4?3SJS7P+HIkaR}y8C!1O~8 z(EI^#!EBR%+}iR1eTKtisq2_AVk*CBN}M+NnpjgFE64-QvZIl?{y2gpsC}dL-Jb5x9PZI73>Vg-MWQ)3sI4j+p*Az-nd4$= zn=WdZ651)cJL2KMPDWn*&rxRQB|F6ULDnSN@Y{IF%J7r)HM>919%PeviH)%VN0$i6 zD@M8vSgl9e3OG?}Fso1>2sG^wf}CrFxVYWT^lmjCju1@-|86#JqS2oNpfMi25d`m9gR8sNG=wPCe5UuS>d`=Icu_CZ`LR-mfF?wU6a^q$ zN6FC)!BjAlC) zp;CAUXF9Tw-cl4{bf7X7M%sR3l)8eV1Qq4ucyfVhDmg6 zP2w#&?NNT~Ms^v__tLy7EU$TGs7?FLB4fn3!t&ImFG&{vKtLT*0TX--G*T^I#BL|5 z5ll#np4UdNneBjs${I39Yyuc$Vifo~WP`v&wZe$0HK#mS0SCk`)9Lf$E1u1$IkoyO z(%|GH;%4(IyhZKOZxO9tf9P(u;T1QnW! zqwN`p9rtr$+6qqJjBaeWjI)(5kd)dT+^ic^vUj!paaczeI0?R!es1IAB#I*>*~xQ6 zTiO+?pHnI+$VAaTQ7Y8Hs1^GW&W#tU8oG+xb&9LbC{)wwlM_5~8vSZ=t!VE?DWOJeAe=rnDs{Ur(nmb{wC+r`$<6h0A%JW{pPNZh$ z9QyFooVQtIcjhmfNsZO*lJBh@@aw7>cN34$|HIjPz(sNN|Km5ice_VXks`5!iYQ>E z9Eb=AC<+KjSCC#5q$5}XMM1^Hf-P1o(Zn7##%Q8OjhfgJV;+-OpID=brubOycJBY4 zy#vuC&-eNL^NQT=?Cj3WXFl_pPoKSC2c4z6&dj(BfHpN{CUb1EmoZo$m`tr+#b$s5 zG8nX9*1}E^d9|bS5jkU&1I%-Z|Y7r)}1KBVf6nzb^?EO z*d;u0vW@lB{|*PPtb>QOHP@kor?vHeg$bE$jbRQ#UHrw=t^{*)P?lSocOzQ{8d*j$ zI40oq6c$%)*lDo^@aeT-pV2EHd_a1A_8IAoXuf}aw&BU_*-tjC|7~{7Z@r~eT;_=L zB>V0?l70R>U2*p=U3tFf0C7ic_X7v$SD$@Gzd8Usm=2%)_P_&Yw)4m#4UUd|d5xiM z!>ow%?k?a4j`}S7K7S~)w0_g4i@vG#;~Gf26Yo8n&&}lTeX{Y#e3E!!>-UFu^c^!( z(v_!0C8YK4*K^{!YsdADKPb%dh-`{OR}eP7piu1?gLHLdDqT}VqPc7IgDR3)r1ZijbxM2E89t^K+9ygcytq|51O-e4955`H z6H$~#sQ|ebEjUir#Ij_E2WOBC+z^tqx-#J$-9nYzGwnATWp6T1`=PsXxY}g+3EEz& z*L^3w2qK%gEnE+Bgp^CGq}nWQlGI)*&*Ey)&=TpYupD4#qAKFOQkl+DBjEUYSi=Be z<_%;tC4l_Eos1)*(exyT(=s}=W2tiRQu?@D*)4QPk3r711IN|Hb@uPr&aGY5%V% zGpZ%)irMQgz+24c?>D=)YMKK zKZ}r6a2T2Qh$hv9 zhlY7uA~FIUhicnHb<@PLDDWw*{cik`%47c~^Z&DH%ggz*?;V|fXguM_(z&%OcacHo z{fhZtid(lmL;^3G&O0^X$+y~j+q84*wOhGFY18Q^6Hd-mT5sOId864@`uplOnD$xN z-5O+!@5uNff3_#MLb7hh94w&zY2ixf;3^nB5G`4`!IcemNjFQe;rV0L>bJv_$b@fJ zeRDH+Peb0ya88-@@|$;}$8jWlMefqwxtX6YDBWG=J&r}?y+fB>yib>2Bt;~Ogwjgp zJ-CMq{^nCMZfzr7d+Z!Ny$hbUJgKJpZqeiKm48oq?LJ3XFxV=@X)+@v4|TYsVQY1K z10}IBL8FTEzYW0?a2+FEl|DwWGoKAcI%nRmU zPS&o<8>Lbes?})prc|mr0I!vH@HB*e*B?@JPv(c|=m@H03EI>}<{nYx*i1K>N0&@E zn<*#5Mpg2pVQXhMJl>wB7Ry9FY{})h6So$7OVaYYjeSk6+wjXsyCa_w+vN@P_b*p| zUsC-2yYGHqQu2dTN+Pm{cj-3cDv8&A+^lsOtKnu$|GvJ*@DUEJE|Ot~ zkuLj!`DuFmKq;bnH@DhOEZ486ziv0*M4z$1lVF8~(m{0;*&iWEXWHAy$wTBWvumRq z#Yi7_iv+?Wie710MjWrQ>jMu9^B)qW6k1cdm1wR6eMdaDmex~gPtZOp)pM&#OJ#QG zsOoFR)hWAzZDNY?5JdqZVpY(OiC@CkbG^!>ULq(PjOD=TmY~EFE zZtg5CNFPhU(f1puB=JfSJutp02*1ys865j> z!p%AGz4nXAWYMHKZZ5gYC(byQKW=A*Y4yq-b3-SL>fv*EbL|(o;f*uKOj#PVRpe!> zl0dL|sRG2NXx%o@N7))EjjNISWFD4H*UEdk{H}#c-$HBSFK?HguDi+Gv46_lxMqqu z{KJS>kQ2N{wt3rOlQf!g5hspq3(hL|+svPOXjZ^bUr^t+Lz|cxquM!fZ`(Nbv>uk& zx6;qu#-%O4yjrbZHYqge?NLe`bs+GX;y4wrMJS^RjVtBJug5ejEatU-omzG}?x8Rr+s(iq#{P<FSYd#Id1)et+%ARr=ksVkp-+ z=ue1>YAL)QD1FXF7D1Zo1*B?W+aPFOnPW(=q6Jy?70avcm{Z>7BD)+QpMmqO=6(YT+ZNWOu-b@R9{^v*SDAJp9H+; z4ZJx`y|m14MZh#z_q2431o*>Lwc}*QiczdTw6zm*=R*p0j$U z=%KM6wJrLw&Df9G7}pcIAKT<{uE9&e^7pnG-dAmw-$%L0spfLl50uOO=pjGHXh}JP zA4~HC4enFuEKdlwN|76?50h&wfc_DOD+8jVhJ1C^U zC3Hs=52`W7fh_u&ydV?F+#U4Tb$SDN+SO#n#fp3A?Cjd->$tVcFXlZsdz>7DrLA8* zeU?iOkOk9mQ*tu*-{|R&EqnT+azfeNt&uN@DwlpluScAuKQD$#3=Fk;d~+v9C{oZ- z15jB%TLQH^iw3j$yMA`(Uxzj8z6@#&=&&L9+SXNMN*u=0Vg|;)LvqPHjOyCi!}0`R zOnWa!%}Ibe*TviiXYNUzOy~@Dg6(qk{kB?8!a?bNHS(jtfcs>X3A}@#q^)|p1~)U z(OVZN)wP@3W+Ul#?oX2V$tQH%gDdpP25$WNUusU1>BM3RyvwH@r&pgGA>H4*iH@9_ zN>9^>n_CFZE>OInZG}x}n4OCQ;eqXK2D#^zQnnelfkMm_CA1wGeBgHdFLcM=k4XHV zUlE7*E$Z6T+<)%^y|ZXOu|7BJ?CPC!NWqwlx}dwr?lfR3oHF*@T}Q8dvE|pwFX=4$ z`xLmA&AbpWgIH?s!lI3o30TN^z!RmyAlVXILkH)w=kV|Au4Jls zXJtp-kOcm;()@XqSf#zG3r*lZ!OQhn6W;g?j|J??O#UU{0D)!A;A~nM(DB*xKsGsU z2OJDmg}i}UC>(fZ!ZP@x$)zHkHy!J1hd%$4jNUCTmD`BkV@u^*T0nog$$e0?Ym(3S z6Ln{~uXajv=^1)&Q`E5N9#P{`NW#k1gsj`h7IW@NQcl#bEg$48A9I~VO$ewyHY0M& zPi47F>BG+>==by!Lc+%P9TVu7l{J3jqTY))vTf@M$RG0DfH=7zj3NAj1`o*Gv+Uxq7zt z;N@y4SCyUros8bIgC4zVq<)tHr8{2*50CB{lQe;(FJHB8LqD#jXvZX<3CC-?bgn| z)DSkGhzIIPeg3xc!8ut6>Y-TQX{r#lSGmAH`2*K?22`Sef2dWCWm zxvSQXoR`vj$p$jsC1JRu|JeR?Wc2zwiz2=t?H1?yRUfO4+<3bJI+aGnK0zxo?@PlO z4}U#~2?)rJ_G2d@I6#HY__P0Z&#z%-okh|w9$Y)RdldbMv+|OD#`ypoM;A#CJyE(d zg6`vNSZOC#_Z{h>J7-IG%cUCW0cRaW-{txZmcFg$&2@j)asviSUn{d;6S+Z4+u#nGxEWF>d>J;P!LhDNUz|0LTFSWVfUNXWPy<<=kV0tJ1{T_I=r z{VcgoR8JE1o#NuPcjAL_fFF7;T>j84F2a?pW z%D_bJr^-qP>^zxQy`HCM%y<(#w7eo%{epGcz^^> zO8)TkcXV_`D3vY$%Ksijf$Vt8+r!doR$H4sy<6?+GN5zk0bTm|`cd-{PY9nqzOYvJ zb+9lS<@n#XkBc8*T_xqI9rc5uLd0i#^nkRdRJH4YL|TY`Rz_W?jr8`E=#6A2>3fC@ zC#LzKrSvDdO3EV%2j;u2*+$5yh8(xK2NLnAGU)`r3&OjKiCN5EP{t3cRV9`pSak)a zWs7u8d4fyAv^46UzD&ZPQqi`VIu31vOa4pi{6HoAY0)Q9se~VKj~+_5H@jmtF|-7x z$yGmICz+&kX=pzE4?TDW=_W^SjGjU|k>tPj)AV8D$8~Nw4WkIzw#IG#NALiH8_6%K z4DgbUsz$|9#)sl}$;*it(mCE&xTU-*i=whN4wwu?hF7yId>yg52%86w{IWFf#Gy~p z$E=PX6mhC#;_-urGNRWgy~p}wjF~iskYWBwK51hnB@D;+s-%U0b}EB*P}A@naS)n3 zyeQ)+CSnvHw;aX#q>tvhWjBNqvSY35`~zdLe5XNKWv)EgOq~?|M(P8G7E2mO=9udW z`GuRLX}(-F{W{I$g)dh#m^+b3$8xLvrCgrVjp5(ZeH6?s^~ciFscW;kn3&_C9nQ1w^sd3}j9MJ40#dDwB9mbgQUC648eC2m;yC~v-2^?!MUyIp(4 zZICxxx!&FbN#9pXS}G>4O%Dd}j|gfp8sI&60I#g9 zty=k9tEOAwPZkd|AyGV1MRV-XE>kRXM3@`AfgY6=#|K0d!DW1Z*~91nza0lhV`15; zqLs-^tX6M;3?`~KaQML|f@l!e#>5Oet0D@r3Oju{2pZmx;z=Q0NLR!EzK}%4)4JzQ zv`#_vFStu8dmPVTgMP`r+{io9oyDAV;Z*ih94FQ_CM9pEozQcd=i6I9%bD=m)&<-p z@2pT~=g=(gq=l)juBi)=f6Y#>7v4eiWP8~|*a80G7$tMfM~W#dXQk1mC!c59j*Xo$ z$n2N>1E{X`Eh)XWKE~c><}CJ|dPM5#{_p zZteZ3_?w0F{^D~JrBQi#Dum4rIf78lJ^YI>1|cAZ+C*c&|E z*JqAT`E(mgI<{l)x5$|HE2eFU4qf$l6W#QH`O+OXycLTl$6WB)?PUuNZ--qpyGfyzFmh zK$RwiWOD>IV5dB-t>cc*PMFZq&!)pL=d3yYblGIpX#{{bym(kR)l?``o5iil6i&(- zK&2u^pQySfJ_Xlc4MP*ul~JO+`!@&Fuw0a`CA@vo?^<2R|pB)`{~? zsrKh(*QXTT{qO;?owk!6{ju`FXVq_IyL|Zj{QbzyMY@WIt~IWc9&zgOvQ2(cAsJhl&#N5WGbKQ$Sp5>c7XZZNfuqF1w zGTASlgQeRC=*hfjZQ)_d3>82QLkcW=Xx>@O9aGs7M+aL6TSz`F!q6NYMMv&PA$jZN zb}H>Ja+@$FA+NlIKdf_E{plx*a~neG+7VpJej+|gEYpyiFE-y_G<0NjW5SK+Cxjeb z#vQ7iNJ{%>ZGNe@c&K>pW+t0(JUtbULTO2}N zC24zmc`*aI_A{fU94iLSIs8xRl|T&^>ISQm0R&7_%3+G#Av!V3xC|ziKZUpd;r^cG zI05A*pB6a~nKgGX1MX zVW}CZsbtjBi`CU%EeJ_XNlOk{aJH)Y>m}i7Y3Zq>7JW7C06lk*_`h9Jy1<{1Pw1&n z577(zeCvyg>;3oB3x^NW(}#&463f5sPY%*^ok~gW5yGul{=xezmccTJEa*q+R+;C5iiLfrjI7hWXfJjrKI z3(w4XLKmF}PTNxpq1>bzd|@jCUN}Gx0ACkih*HwtovI}CM_*(CTHhKGxKihZQfGD5 z(}kwqXC~6h=Z#{rOddEz0pCvI)lXf@%>KnZFDaD zx4Pd>qU}w*zjCr@V|XbFq#UQM*^*8CW!>*MJJk6U-&(29ARo@4?@=Y$m+nWmzWEX~ z`3PchCmI{&v2fv@n>c%TrhWDzUxDb^&K2lwkih)TNSsQ&RaybJ%D7?nRJb(F*Ktly>!~M)yWn|@Ro~o7#w*m z{LrCuny{2I6*t1y%OCo1NSQlgP}rbJK$-5GGcglyfKM*c+i{-ET~FU%w8rrJ2pJ>*Jfb{*Q6jIg z?QY|`+BwkqVREu)vj<7|oo!GpUC7}2HC1DAj)bkWBZbtBoW&Qe(jKHJm#vI+=_uC^ z^KAGYDzYOp)ARGmS?MUNCRbXA>lb=wBhs+=PzQ~Qyts8Mh&~J=Hh7v#m+o<9vdyO$#udOG-MEIRfNotP}8CjNdmRIf%KU)28ML)(#`u|n3t)~6QTSVT8=dn6(U81lXk6h}Wr+O-`(sc}f%6tPchYw* ztx2U%iF5B%1l=DD%JOX0(=oEh!PV<6A6GYTuVLMbNAz&C@XUf`M2KEBA+)qRP@_3hPr5>K79vd%1VCEk;hrY*I4K4XU3YwNej#ddBEz4<#S zBr$99h*{RMs6~^dDCy4@O)yy)GPS|)0||pPFbqHBNz(}h(yr+ysN%DAdsxT`i!v}d8+564iOKGUo^-%HU`;;)KzTS zR1rNfKT7p{RawRAn7pV6CQWi0$w6W8a)ElgKHbC)OL5K11{0J>Z3S4a8eEwW>d8jpYS=|t#s$YF zAr8HitmmvOjgE_pDIHdw(5Jt9Zx=T=;o5h*DV(bEF2xH~wzY2ak3AiBehTj{;@rx_Y+KYoTiT{?-9 zbh#v68~Mx?2k%~xo=8{qTLEQ8`?0%<*j=To&Oy$_v9WahZld1(bvx8kpx%+@de}7` zK}mIrf?RS)dO|*?!CM#;rE3&!>viA*4WC059#wUXyt#d$dUkp`P3Dx64g*^wVdhJirQR%3@3MC)Ce6Bl&y-*>opoxmJgp0*DsrE`McA09vMUA~S}VRuWh8y{Wz?wmO*=-7yq)bMG`mSGOU;o>=fK4Ns><&V#XE4Y_Cq(=QLeWqcC zhckWz|E6o5l;3Hc;6O-sv+Yt_!6oY*_*}dyOF=ocEs;14AN zi+R8@-jjD?r9HCB4NK?ZDQnUoBYyr*Fw2oA;YEbBDo&I{!ng6 zxO9pe6fT{_46hWrO6BTR(#Dx}@8#u&YRgf+(Kwc|4nfU1=gL~W5)$UsrB!WdsKZ7G!g!|riTDN<=DeH1EM3hlaB*gDvCZQIe! z%*v!=M{`@dPIm3>`>P{8X|Cs9(cHwQgLS9&YQaQ>i_QvO=O8YSvemO7_Ba?^!T;{_ zwoS1f2ocp7uUWXL&cRBw>1=7+!>+4k2UjyowAjkluA|*s_5*!wNQVv{HZ~pFdq85r zWjp+B?=I?y+FUJnLJ&=q*62i$^&ksN-o{2_X@L-sSJyz(WZ{h7T>ULU>a5RyJ zi*v(d1vO}$mF#}dkJ;_pl>=+gc;uC8Pt z@unvS0`Yc9<}_Q+qBac4+aR<+1z?LT=^9Ccw<<`Y8|g*!JtP=u>A@o6?EiBSN%RBu z#R}K-&ZfXVhmxqNI$Js#-|s)U7lo*1$r{SxKwiot)j>T%6p+LdHczO$%Cn$Wa3<@zel+Ya|!? zSZ`QL&AzI-b0avr;2`OGIM-2f3E>8YBA(ARlqCz)rAu3pz8B24`g1MPXQ1SQl!5I% z1SQ9HzN|!hLTazLreBS9bzIBrJfixT1Wy;#U9WmB9YzWeQT;%dEwAnpVK(s;gRm;6 z@ejey5bYx=koMBAV{YI68b^&SwoQ$#h_fF=o!8{v-Jd-r#F~%k7M3XK>8PW8X z`Vrg;XOs2-*$L{xKhQ70YIIUKKU*Y|XvmHsJ)keT8-nSr&HRW4}H!_l!dv@k5Kl0cuT`QF3Y zjV;U@-Nws>2r3&#d&}^w2}xbTT*Lyiw$|oWR_0x-h`G74m8E4XyEjJi%AUtD^9|JY zM$TESFW->x7HeQ7~-G+j&zhmi#OeIQo#N?{|7R9gWG27`rFcf#z% zGF|{@99mrKwtk&YU*x*ExVXAGySR~;uFid2-CUeq)mHQ*sKldQ?jB4bRoBZy!?918c#sbMN&#v^reb{VD5~#%*1bIHpH)B%+LV45RQmpxeJXZ37w1o48PIAL*oL1 zlY@hkN0QpHZNulq$Tz`(a8m2#oa*&$j~*jj2Do)-+on|;8;9;rJzJT!Y12v-s6=ZM#JCjVKu?5VK7kaVPFAO)+1ee`2v4c--*mvu{? zEni5U3j0Vsy;F!9PlWyS-m7nP=e18b&C#j#;@1VVjC4Yc`)Gw749Z%Ob2n@6KjQk+ zwmXIWWPSm?jVc#VWdN$ku28N}?OJu`dEHrQ+1e9z|DLwve11=j)c!%zw$BZu!E?0m4#6hd@#&lIG{1X`)#i!+`lAx5L^vA?{ zHEkrxdb*CJrlh2xeMhNOUkE)ZoSTANk!BmKkP+;rEaV_FqNDDYyp_(Q?0hFAyEu=u zOf>h58{|`1;O&+ZFeHOk*|r-v(ATr0Thd^6H|L(9GTJ4=0Av^amz+G+U_v+KbjI37 zkSr5NU}?9JQ}dxYxOYka>f;?55?C-af6T}ncc;Nlu7hHRX3xzZ8d{LScL{H z8B-DIo+m6#NZ*{f;{4EQyYlU)?@wD;P`sozzjvIARi8p}YuMXq>5a)(PEJ0tYI5Ir zuZAz@t>3aDcjC0RR-v}-L1WGdNi@Us0Mv5UEHs*lh9bhPp(v2~FxgEMQL@IxZ_}=w z_FR?~X&W~;*32w+Zd~2AZ41+iC#6Nt?c8auP^t{jjap=7v0)PU?21^IyOtCF%|BNt4&>`nnG=_r&^3)9meCCwb% z>qk9F*XR&pnKLiTrce8}?Yg$|4>w6lOq6W-$m*Gb5TjJaLOZVOFO*6@0WvnmJa7Ou zrkzbX!)qgU+5T-Q52cs1XCN2p?by$yTQ?`=04{uRkN*AadpL0exro7kDg7Zk+a$bo z|3o{xfgQ~Irr6uNe`ww>$Mi0@bt!U7nUqLd2(4<<&2Wab7rd!kWpUr;E#zr$}J9@JNvQ4 z-gAlTYAoljeXrVb#%8p$TxC!Dm`r_z6yR1J3=J?4Fx)_>D?Fju0%PrIb(y1y<(%!? zYRAltF*S{uJ33)rr%rQYQz}Z;4|N{O0NZc3TYdP==tW7(6Bk7#7DRs^lfSy&a{jyE zO`oWGOZPEd^1)R8EF&sgO2#;{H;)RC>~bcJx9ZmEE$jBJy$0vxlufX9cR-QN=CrJlnPoYER-h*mT&&>2BsEDC*)91W4AiNll~vO#SRSm3%cm~u}<{q*3Hlz21Ms+*-gk3nqHP; z=nLS~wFzF`-aw<7xkyc{yDZpKA8|6I8)y?%-Lah|OA=qBPnKErzcRQrWkdE}zFSfV z?%b!$?>J*{>%rijkR@pTTZLU^5MP- zVX;2LQ_ZqXLne)gFBv~PAj1L=CP4=O%LBTjwFeWmyZaAR`^cj9WD6WCF3a91a2@0| z0#e>CVXVH!v>!(Mq1FrmmdcltBpXF*{d(CtBqtX3*ANZwz_>saakNs|^2COt0MMYsgA^*^S$;vIqpW!t*;_>B)66+a9?f_ z9_x>ar>;^_kQ@iHl~~W7RPY$O%g1mc3HxgNJu;cJk;qi-bm7kzyXSshIlN21DL-r%A};@# zt*N~7qO}k)ZCh5qQO9PiL5=B`Q;bc z=g110^JUhFQ`u)JWKpSJ7@+VLA2LH%6pofN+GU8NgATaRxtItI9NeMrh$+ZvP7pBw-ZtKXZWRFVH(=Qw#50cKnSM{0fuwvsN^ABJk zWai2?h>lI!>z?!ejGp6qt@*LmdsPfQRM^|ZbU>`eHfs8CQ+6_s0;$LpdXa5gk+2K4nk_=gl z)6f#6F6vzJ0ge5YeOLRHm_vPVl$@atj@{w5XzwU}x>dK9^hu!VDdMB-?0$Rq0(&Zi zCwd1_XHe(M>Z3&}wX{HNjglPgMR7MsE-z^5S@mv|WWKD2s)^{nmNKLh$n*zME2zmC z)wpBozAo(9g~i94y4Vg+j-eGU9!f5rSEr9r5W)*xxwc5!z!b`iah3UWcdl*Egs`EW zz8%!+;DiNJ{hWptPYd_^FV%Y`gcz&Gy**<{Q+35JLMNhAGyVdGVdg9?Ge^J7=->;V z+i~Kj!G7UWOZ=V39fM8wrqGpNkDjRHSPUC@8R49bW}_XyK7{_T;9T#7kpWRdgb=t2 z*#yf?rM*|~hqs>zop@KYq+$^8m)};&Ei!J5cMYN6zeBf79}+dRAV~<8-wyUGe=pV0 z^v8HPTz;8_fmms5d669(3}8TTawpezr=@&0*WcK-Kk46KPR}nU7lUKpp5g19YUsc& zd}C~L2jp*H1WZCe2grlnDQTb0rK_g0Zd7V10HSu<1|CFCc$jr8?*(hU91D}1P)tsvfsiISLz4haJ%SFJuN|={PPZi;JGi#BBpo`skuNNfp2@wf z{P*!Np}W|-$y29!pQfY=e&$QaKy#d{Kza*DxfSXLxe87^vq8y^4fLjP)Qp@l zr=HlZYQz=F0qRYR1nJkvi8+44LjDa@STHGk3XQhnvS781jQgpK z+-cVcm9$39QlBI8#|G)yG_JHpT8h9uZnEgSotR>v+D&3Fy{PVE&=_Omk>yOBpawY@ z>f7$xO`WpV)y)bnteh}B$gjL+Q@)+Ju)k0L(n9;U0*2xOWOXl2rYKX_%CK^TlaHAXolrlYNRzm9@u+MT?TygAAVn0s ztqU;p*Nmd%wL7cV?p}ZP-|ie=dr$M)o$gR_O-b>rq|nf?5Z*3%W=Tm+a!6R{$d}`0 z70Z_)q4fEsSWH0kQ94c}@kuj3Zpex3$Tmh>DC4?2LjUZpQQ0`yz=4!FY8-5lRyS7i0OkQuKVqqt@Z^Uq~LK-_^_%thv>@Tv7;xwP4eU8!Ry#SI?qK8ak z!SY$tvPWc=jTgH%3*Lyrzd!?P#?J$3xrx3-p>JI=rdOJW<~Xiq+-c28J;pB#+1WU4 zok^N1KPouO!!=_>SZ=Fy^O#B@CFQ-`t{?m`fAYw2BWEXcjhz+{8ay%&sSaTvNTQjq z>sPz8be0AXKzZDn0}M0>zF}$_G)EPgqv@}+cWj^2Qk7O0mpr*l_=W#c`>E~aZU3N3 z)3t%-GX;$qG@n=wR-ysYxRmwqy0WZs{TD2oIYS1C=>Zl-ERE*2om{n?_9F)?3+mBj zSE#hSOv+`@G9@%#c75|hsy9BYU70n~y8pcTDHT~kaRu4rV*j}drc~qv;2IX(y-;Ya zK`YA^QwMUeX2Seh?t?FuEulT-8{k$Q)3st2l(J;X8nlO2ok2vVow~=_p#+8`^T^D; z6%}@dFJ_3ss!2PJ5nHYtBHvgyA`7g|rNVcoxiV+!DM4AZ%} zbVDD9#w?BSb!a) zgELl>YoO!nx6<*X$yvb@2WNx~84?_uGdnLZ$9r7(5Z_^9MD7&d@jkvINBE`I49X6~ zg@S*1MM%+i!c??@*T`^u+o<_BDiv)UU#SyYXcIwp{|}<0+ucIBm>?6nkOlT_T$U${ zuUuYDq~y25qZcR6TPIy2r^hFym6v4%lsFA`T_j$encAdYoHb;0aFExq81KN5i5006 zi>c3;O$7#W)o-+Q;_UVHUFXan?CCZv78<2LFpg=)ad=?6|Nk+PCXISamAdZAsHpgK zl1|poC~HXgE;cP9H1cixb_3o`o>;wdHrFL-)wpr16BAb?9IGFm?KyRP!OWR|I|QHb zafTr<)#Q{NNr^kBFy-Wkneoj;j@O!DmN#N^QNnc2++?unc5li-_&;fRrNZNd^lFBu z0rqUCfnqmTG;MW$bjqmUfvG{}rcAMm84xo#m1H)Tq&7qQACOf^8p@&B>V`rf>P5@<%~5NXqA}M z$;=cWv225Cwj~(+X5IU8y3!s?FBNlXjVVd*jvdnwJGgrMTRnR%j!vnYJwEpxlKhcr zPE5$zr*rKp4`q$rkXy8QtjG8;m&~|^>d8yqUuie}{7$UESFJh&2LDsL4$!#$pKX%} zn%9r4_&>Yg_t^6f5bH~-p)?!Bx-G1C{m~Jj`Bde$8dobo0{V2e*%%=4m)%CP8@qF; z=a5+=3Z_^^@-YoXbsxqoNlKU=B&b4W2FI5>*jJCvnK4BbKte);hYik4<3@iVwa%D3 zoY;NcXi>I5CuUvo$cgLY#$+U3kI&gT$7=e!OlZK26q#%{ZmN!Q23Oe_!QB6hjEFnJ zSa39&)N#`{gk0RX=!3Qy?TRyMX4ln?n9=)Z65+N_$oXtl&6cC{az}+Cjq2Ouiz5&`BZh9CrzxhadL@FTJIy;hH7nH@h)1xQ&I-(p*|K&|`Ob=^6RtD4E zbk&t9tBE5FISrAtBWU;q>^$!BmI*{|+g*1dD~oN5Akxlgp`*!Gw7>);>?(}Eq#bE| zmn`98Vj_1%cb0cUPuMQ72lb5kCJliN&G{xJ8`3F*Zt$aPvpQyT7jr~&ZZ&)H)j#0U zE_^~^Qh{~OjOTy1-|B1_GxPScnyK>6ZQN7W!x*(<4IMxZGiC;MJAB8_*k!gUv2*V5 zHG8?^0n)9&Ebjdr;bmiYa=L1JmhT8>Qg&w2))v9ySBddK zVct?N-mRcGqQHu?Kzd=G=K=+%v{9PQ107nmu^iQ36NexmU2pV-H>m@ER){U0h#>u!vq0W|P2t-{7&O95*by7jj#i&by#~qUqvjU6mJHkz_Z- zsXW0iroA+t*jv$yN?_&+VWRZhWTs3j+1;FG$naqWV&)jd~CYt)o++%`@s>K&#h}+@$rPwYfD2XuMHcMo3k&aJmT$fmNOP}+oeV)du6zZ5E6iF8=Ur2RT<4Q zt%7T?ym>U`&S;`rY?ixQ0q?M*AX){yu{`Z^0KbQa?waeSj|lmAWze*Qw)XaOk|$OY zQeEWXH0?dIamj#T<5CDIh)tiKJ$9M;d)To5A z5}gNsYT`S=SaFA_UaUeM3AW5_WxN31%cA7}bv{NyMMVX_?teKUgQQ67xKweQ)W{{j zeER=zP=->mQJ<+gE|mPWdvY%M|CTU4ueP>!)MxZx@4ruaBMG|Wwh!o)&l-QLnf;`( z@i!z+7fRUq6)%_4BxESRat_Bjy-J3#G^&(^e;aGs2(GQ^AVHBSe$kWZwBTJ6$A$sabqy7%jx@#+cFT}Lxs>9cA9Kckx|{wQWOZ0-d+{E z>ZT7LJ$AzKs)#vto9PI@0evfa2U6$h^Ea=1Z}+79^9vVU$WPy|beOt7J^#Yuch2XR z@7}b2^L&%=oc==wkdP2loAPM`eEUmxU4~@1jW6nxFnW5$r$=-qUmZVu3};alZN5=h zd~ZAdeB<@vii+av8+GdK_lgT|Y-Z1n9X|dQ|Ln-87%@8`Vvo8#h>^R(PaZJ~2{J@- z7)~T$BtkwVw5W;wXL10`p`*M)p+c}_>OnRh17FqTEdl!T*D~b@hpQ*$(@ zcKO>&HgUIVk!|kS&C)ds7p)e{$Bp~fZtbPD-{nrYyq+EH^2wgPAG6=}mnZ!8E4%o3 z@19Q-qP7-69_BI`7Lnb}a870))+ZZ#=JErp7<}R2B97#h@cXwH;hW2NA26XJTOS~7 zSPw1PJFFri2VVPo2(TRQT#^=~6R3QOl!eRO5#dn7%5!Ihc$YV!ng zkSSDX*BH1i7DmzsNLF6SJx`EQGaDDzZOhE8PKcWYOW|pLJAYqk4VcMM`=@z3etS+1 zHq}}1bPP6`j0bGvK?nI3nj76LV!w&*%64~R?x;@gvd3Z>m+j~QM{f@gY#^{f)1@Yz zWK}(rLR!4s(*4BtO?Q1*TRc3pE8U%)-CSK<+_)jG2A5RV=nSP#hQC)tz_5Pa!^Cuz zcUGV#JRqpA_b~O5p71Ys)OaF^n1*@7E;kD;_Ukja-xz;&XsLhS!F@?Q%zHlxC+KXG z69@uNe6dl#4?*DZFH1>3Y%cEzN9bmgiE#5_oD?yhDb})^x;Dg=m{rqd0dzTWa&vZe zXB|}g!;IP9l-7|7(+dusED{1fvf5+9VOpa0W(SnCm8fG zRRcO`2&uxAOgTJy5=F$a87pTDo#NKTIk~@2crP-^ZQP#Jsk6IuNVRI;BXD5UVzk#) z_?{B=J{W1Q=;u>wl=K$^sFg`AO3tIi6?1nQM$UMX?o9@rf0{c2$7Suet}X^(kP`q2 z1B*NT_W5LbO^lZz;^E=Y)64@ zoL=d#K_N0evEXd#`i}?{Eg|UnuQ)@7z%PJ@F+)x3njtBIARLTH3S)A%@I+y4x)c~WPFuz18V5?g!?B2?xuP{)Z*o|k z0Xv{kPq$`kT}wlk31`4A?e4ZlgI#-fE~+i8cW##Kue)@cm@&LvI+QLG`&fHgGRvJu zTT9;B2G{WL@<0ieP`vA7IH=9_{ zIsBjzhIq6FaPA2=_}(VHp(khlIn5E4j4Ht1!gKq|-mR^Dw=6n7F6PFH zsuSYBifU_%M#jfi$~IL_7baBD!RiG@IuB*hYjpm^%@y?7U3WQ50AT?YqzHuTW6(JV zM(dhdcl_Jd;X&WB^;0LR;1%86dPn5e;1t({Bg%6oZyBdn>qoED z>>_9Wy^KB=kJLt=8}^AQNvCTtt!sq)bRhs}12a0?OJ#%a>u$CnJS_m*@|w08CFDj1 zj*0Lb;46fSxiJCpkskg0q@{-S>g3MJfM>f<|N0ir0reO%}&=Ui8s@N9J)bj>HEpkz0@_c%oUY|!MbG_4Y;z{vDlMU;N zW7VEmcJ}lJnS9^_!NV(HXdLtE&Q!~wxy09-Fwio6`fC%*4BWt$p5P3cd=xY|@BV7( z$~m)FmLdu>IyGFJFgh?HQZv9;j1VVA4;aXWc&=#f+@cW)31p*X>@+|BQSNPG zD;-^tlxh^5mp@hS*TAwO}4S zbhBLA+gONSEQbd5Nm_2Y9?Kz3`;6@8*m8*Cw3y9}LJXa)hFSzPhqe3PDC}&hOE1g} zi&}9b-?=-pz!+zD;bdVUv1A*Lqq}=ga3O4!;LBeLr)i41qWQ}*(eMCkW!ODiVufzw zp3Lt?xiL(~N7<(t2jc9muAo0*sqDmrW8w|u8x3IkV^Nb^<7q^bgnFqAGF`v|u&~2b-4M=$bq5$LCyo?K@=CtM6r;B zS&S=p(l`?m;@dj8!b#&q$Vdf86d)mh#{mf(R4{;?uh24ow7yf(MQv7G|34cKGFmm%0Z!$991uQBT2=<-m(6}L)?YR zq_N9th6ZMCDv6fsZX#uBCb=r2K)ntQoR=wVg5hldIMV-*ygLE6sq7#B|GC$_rhUv) z6sL0z4vJ6`Lgow+rJ|5ikvVhbDCC&OLI@!wA@dY67a?TMF^@$d)AM|v z@ALeB-{0^0|F56xdikui_Py7-r?vK4_u6}%BL3R&;Yjzq*Ez}Cz2Ck@>xVre+BK7! zhbFbHko4lqCCWFCX_jGfvx*I#f908~O`<(?zTaVZ;nGFwRnFKxnfNMS&*;i0?{NP) z^DU@1%;hHCB)b>c$+BtHwdLF<#h=TSH+%8Cojz9X;ZD=*WsYg>r5o1gW+k5MP~Jac zuMJJ&bEP5QlHiAn(l->ci^gP&e3fIO^&so7&QpiB`bnm2{9;0@>V5LMuURgCIakTi zyYtk1S8TcG3OnzTs_irG5XWvg%l^Yt^byohs#QBx3I1=?xN_yj25VM4NBo?O;(DeX*I3Nm_s^l@2LBom zjFFg$HQ0wstbpNB6$hS&tZJhfdSfi+VKa{6I>pF<{3wTdXo~@ujHTFzOEjK`IFtbC zbTjnEN0@{4ID{)AHWh6rfV6gPkk;;ntvCwS=deB}JBp(&I$|_fm-9VN@byy4?y~#4 z&jJd&&0W(%Z64;3{j=(Ie#eQ5C$>f8)Whx5N zW+H8-K}f+3{(Kytahbms$wGOvrbj;T7p$_rf_LyCKE)D|Y`j0)S&;|kVKa{6x=8j6 z$d7WU2i}u?A{K$V%zhGgL~?M_m7@?^Vml~n4$AsqF?@{A@eO{$uObh*conujy6yv>5lIBU; zt2lk4IDMjcDZGFdcpu}j09$bmH$|QrEmDHCC8~hqQ3;MmC5B=KR)aj2Ade*rpe^WI zCFxuI4Jaw~E{5TAu+NtI3BQUw?c!lPh3D}$-owZE3Y+jV{tzjh9{KPLUco!~5T9ZR ze!ywm6)E!o3S$UpgEBjDR-|kZR7GQS!ElhzvTH=1(a4F%Q5|ofJ*MCkQbo#T1AVew zB{V=s48}C9#0`=1l(&35ilQ3c1npdY6xg52vpY)a8R)adLL7r=n=Nja>#(N;oHOO-f@?3*F*C5Z& zrAIzIgO{)i^wFAaL~3!&s73qKqJ3)7KD9QAJkRv=hec|4#R$y8TI|PVkvbW{w(ArH z^CyL=Yye0B-1<+?+K7uPEuk;1`(JKqE z701ASR4)@A0qN_#iuM?YsaTF(I44p+ganjAZ8QV@qdxtkKKZP_9c-&U+j^D!yh?sv z9fuPluN6U6GzR^=K^$(0G|Y@gQ4z0!KGcvt)bKOVhZ;FxJ&mZtMqi7(&OY=y_0%{C zb3~Hpi%GO`5^bDBohDu7ggq_tq6}z{H(H}7MuGRdu^xv&KHp4(JSdI2XobF*fQ8tK zqqr{eRtDrpIn+a2%*HzG!zF}8nvkvu>6(6>S$)t)n^XVIUqB1=25Fnm!w#GQ+h{>~T6~C4u|%Y0B{V=s z3(L@@GJt%xDTjLCJ#ChXyhFcyXPQXc=Rv=1yA!8z zSEStoCPVhCCZH53Z^ssR zALFqATX76GMLK1|BdCB^(G~+R8Edc)zle0EKXuNDVqp87sgussN$0_!Or2L^H!g_0 zt3ld#+1|Ueu^epkUAFly+w9Usq-zYQ`>vaD6qiK0wGrvgKHPneNRR%YZ}uz&%FuJP zNH5mgs}d+nFY2xrb=T{T$a|T=zVIIV!h7rs?{&ZkaC~_0oJeo_eDAIx553t|?`tA` z(jX5?qb^!uAf}4EpBuYGKA>zLF#iE<_rVUFLaIpLY__a+dizt4 z{n_@1#W7oC0P_P@i6mzQ?VL0>o7XA(z=!c9YJk2xh;k32z6Z4j zZ8M0r8AP52k*7gt5EdDn9Ys(TjX@m`9*&tk1N}x8Hf&34leuvD#Ivfxg z>Y^x~#p{@X)gr@KK8*YgdkXa9VQ=F-dB!0#pA|u|x7BD}8`H|_7 z56|Ewv_?OCf-k`SI`SaSi;S{BUPqDFQN1x1o4~q8(^jLCaR#X(V`!T(1yKR7f;t;> zQRE}q>Z7J0PansFHvhOADDT)Zm?AQcIv+=w#!;qm?}0Lnn~(2s5_d$#KLF}wJZ&?+ zB?jR$Y`|%ePkcOznrMRCA`>Y41oAk6ZA|3-6Y1v@M}c)uq8=u_g&v^4P1-2(X$G+U zPpN~+oiP)?h)kiKrYr{em`a^ZrOu}A7WwQE498lLX*S*fWt;Y$$n+P$=fRB1XpSvN z!3~kmyECLv0<2?JL$JPC^nuy5-R$)uUr-lc&=SEE4I4{EAK9$Av!Nt_g z;y2L;pJEjbf;w74`z$F0(kvm(lCvU9<3WCxQa?-SD@$psr61!fY{Jj@Lu486UB>#C zJ%d;94n73iShhrDc`;lQSy3Id%L>|M1>0Pi5g&=HN(6mn)lQrS?Y^42SWSLblb_YJ z+3HRhg6SaNtM}ld$Tv1};Yrj)6I^BZC>gA0?F_I#uiXp!);b5VD2`g7E!NTB){&2O zi$S_|*F?U}hT?b`o$(PCV>?*Sde*Z(5u-&mJdH204Yx!#J_OogBW2x4SvR!+^|pz+ z*u;A`*F#&dzRjs3TPlI$-jh#C%_*P_heY6C5-a~)b zb5LY2?YQ@Ak)IMkAN}bpLv%fGO=Lg)@IY0N{$LtVzJs?!4wVDx4wnGyKSKJS(}Fx7 z4T+>w1m!)JAIX>^a=a{F#uof0a)Rj-ZA4DGpxh_dikzx}b0VkdL#OwOoOu_t_gV6I zb{goL=cv1Lhj0O@BInZ~7Sz*uwsF1|8i946?}ee5jCojt9XKj-VFpeiRper6)Wva7 zzF#uqGm&3e{ww9XloM})vRqn;Vge|uK_C5{{Qgdw-#-C;=l5?w|GyFk zwsn<$eU<5}wBgk^&;zvXRq}F`yj?v2%6}~nc<500;Y za7_8*dmOo z3Yvntyvg=%Qja$`V;|0des;?P$FW-lQ5w|!tw~r6ws(sOQO>9eAl%6v9`4HM5U{S(W25Pf}cR9|4meeBy1OzF)Kd98Q~GE=!Ug8Br5Z> z;3q|ydCXUqM%W=LE8EJ-vaCBrW#hfsDxe?8_XFv`1D_uF7^_8P&jG$Yo&A8Q96V4f z2k*&oL)3%QL_JglZ80Ca!5@juN%?Y8=A7g$X9uv}oUAM7EUW;3SSIJsxGX9cWzEI* zbL9hHY{^vv4e<{8U=*ff3AW%ME`q0(#%4rrJPFDeTOTda6T>hCUxPBm{)DsOM##fy z@i2;_B3{DVSPt?PM?1w)o;d0&{xuvCm7qaBau)>ckelVXc{q3O_b>v~eeOlrg#9>= zJEHQWM?6?(p2~Oy&Cwl0@G009V~;A&9-Ibsn>PlU4KJ(2cE ztcMopfuZ1+sflZF6k$>M;!qBx%hv^Cu@w76<)0*~0CoFlUZjX(_fiGPZ^80NLT|9` zf)&PB==wOh)q6cwN)Z>)n@yF2!l;iP%n1H$e>z<$=JVBd2(E%S|6uuBu zjPe#^d9guQ0m}L$?f4|=o}2>erFdpgC&l|?0a8Rgl@>2yA}Cvl*D)N_MadYn2lZd_ z9H^I4>~p0kUn$C0suFlqV5tEZk2zS49XN(7qMptP>X30n^>iOlPfydPPqXdPKIj{z zsl(E=Q|UXR%1j3RyUcM>Wyyb8(mq4ko_P+RVXvriT}72|EUE(Qu0UBUW&nArNck(S z!C6t23SyY3%1l?GovS>HUZC91vfgL6imJ*wtFq3jcSThrkJTtkHMU)izEV988i4w( zPTCq4N`W%e*a+&R26gh>Dp57#@ieH%n(rVPthc6l?I&CoRg1c;l^4&TK4_O(L-0A) z;vlYydOkf0pdzT3=ikK$e1Q%48SHnpY0KJ$K)Grsp*!fuwZFm^90&DT=K&N&4K%@f z7>BR14W~uDAb1E*;(0X32bhQ@*opI^UbOKrO5#Pd#)p`K71)DcMb-6@8)fhc+F=l; z;~VV9@1kBxi+m`L*U$;WFbm(}F#Ztraz;Fg%6J`JF$!N|6H;(X)GJw07}fA5dg5cu z$9Fi1yQ1plz!Rv6x6ucmU=e=6SyA;ZaFQGAbfudY_G{tQB6yN@;BWN^7{5@QO#b!x1yT22FqI12K!*kckm;Qi)uw(wE7&h zL2K%<^-fW3nt(F4A?-UXdx!GBb6Ql}7qM1UJ7PPw)$R-YDyn@S+!WPeps0=<(>s1G ziZLhEX$aVU=jLEr@4g|b3!g<@cwblct8Ogs&a&?7u^T5u^`Oi>4vOmeFp7e<=*hNw zwFPzf-iM%Fdvgrx&Gveq1ohR2Joo7h>aovK+!6IY?|q;AzR&tT$O78q1M>R8ILrsH zeL#6XNWo=MeSPG>`xq~(-%}U_*42Nws1KhJHGupNU|j<^mJFx_jt2ueVlbv*A-)G? z8E{2ZavJ18Y1Bn4^u+{_Hkq`^q)ompYG501JQ_F}bFdEkL=CD4jyHpIVVI~Pv7qk` z<(NJ6Bk&nAl;h9PBe*7N7{}vbq#0Hmwa^r-ci2!&!%FPN1yRElG9f?8;bpV|c^pn2 zM_70i^q~>d!^jc%Nz^Eg@1x^EJB+5jM&A%MCL;==(8U;2kkfZ zU9i4!70?gAh#F73eDW&jQxhhOnn)j*$T{Jps;CFrWYPjq7n6?Rx+um|)TiYAQ}X^P zX+EW&d^#J;MNOukPNp8GWI<)D!49y_sUG4`1gw8*GYrQ}ECuPNUP4&ZXBj}+&x)WN z*v@BNFdUOX`p@=(w9~R9KS(#NG1`LqnKlwrMNNMmS44fD6JtcpB+h(O)GYeeZ1#~a zSl1V{%N)u+rxDnP=1jy_qP}bg%04$Mih+G??sl9J^;HSbx4+tf-$c!0z4K~;a?NAg z^Q)s3KEgb#1ASorZBYyIf$cA#-4`qjd|g4**R;>Vmqab9FKTgSbOih2k~E^0vY#$x ze(5aG@0RiUGTM9@ZMcm6YS|T0%hQ2AxV$UakCs!8GkAu{WsVN+IB-OP?sB8VhUK_M&7fLI^Os;hTv0>$Bne}Mz*=hMGmkJZh8fC zaG0BmL#N#+ByQii2ANT6lMOd6)4wtmqmSVAu9@_JYEFl z-c}NCfHvMnJ8Yv~x1HmgTV+9AZ(lF!hXnK%wS#uvQ5uwchnb&>4Y($1Cv~-xJnozf z>Ty?g)W$SXKQjGef6!MLdr`YdvxoZM^NFav9?0k3jiP>{?SG;S`>50X)c^j6(Hzv@ z0p<_10eL>aK7a59kmrMJ{~-Ipp;#0F{rS*qpso%L#R{Ajb(s7e?t+1sfVnsz>WG8K z(EzOf2<195612;a8=`(DPe0cM%YObr)X~hK9gnUNl~M?!kt*ugc+f7#eg^e@T#ym* zC<^NQcpW669r|DfX!{c((C&-_sgn~$ouZCUQ6HzD!#vO)XK0Tz{c%dvS=#RGI8o=) zpgJh$xpknP&X>W*qAt8H>SAtC{$Hx$8&SVj!9h`%Sl1=ib%}Pkv{}^U7_iRE$)bLv zkNig6{r0=4-wUD{u8X?zp{T2gSRm>eZTiPpzLG|rUjJIu4a#++1!nQo?59Ef+$7D- zoj4Bib&K-fVjH)bfIf9QGdf@!XrDXuojaf4Dvvax9aHCEqo})?@B(P}yE{aMU5vtc zv7{kZV2@a;Fb3mUmI?%_%JI^F^we&HLq z^Y7>FU%x+Qw!C~lFPkdxccw`zzoAU|bJ-19>xE(Be{EUhwG>q#REGBw|GDtKbYoQk z!|nFJ3pdUFy6#4@GqUWg)c00Oe{ZZz2%S}4sG~|3DkoJ!on*ORMqco?N%$Y$+n#(@ z4Ig$*Y%jb0ys|bTT{PaC|7$GB>xM~pZ~C9bT&jSdOFak^|4}WO5?Nk}*UG8_F$-0J zw8evTAzM!J%bM$a%hEIrWKWtAawuk}9FEzB`jSFfhnjVS%1e)bmDZ%O zwi}W^5Z-5P56@xR4wi=x+eM`U%dWAk8lGc0uZ0hzb#y*cu#EMrldLSuZ@m?O-)|C4sGu`mM`Jqf#xNrVm zTC+U%{^fkTbrIV<=NFZY-ZJUr4UnxuhPXS zZC;Pr$NH+!FYj0SFZ1`m_CGysw)I!{w$Vmx{|dh{eOYFuDJ$7xhKEPS6bhe-sTsZ; z8X3M4$@5B?_IG)YzBi_VtaUe2*Y|v{;=L4^V&;8MwwU+0hj{(paYW^Dx03dP6ma** z#{bw&vmLhmFK|r%yVw1aDt{=y%5UQTPG%c_n-urnhVi~^~KfGAUUo-o!jFfqQzBW=8 zxFMPQAA0gXO#d&|&oS=4?Z@Pox%YEt%dG!U!~Zb-zgRzga&~yHJDWIJ#YUo;HXf8& z&IK9k_8@T0I_Ml#OrN1l374io>CmnGGGSuVIQhv!7pVZNZG#uOtq zkW}uzP4Y_c856udp9t9x-WR?d#K<~Qt=@9P>a8?UB4&hpS-r#kqUIB$uZI^iy@NCf z5w)cV^JZBU=JVnLNNa=-VBX(EmW!PleeG0upk?$9FN!kh57=uY)ftI_(Ks?ZKQeEY z1!`HHB-P>%_gS67b95fbY4w#{yg#ES1>z$+rXYi>^?<3t7Y{fil1j{<} zBhnF^R}2j=Gw+MM$1EQqGpv=7$TaU65x#;0=6oPT{r;)^ebc7iqv*e>^x0Iu8nIFM zz`f=FD*8J}+m5!r-%Ed)zyG!W_35O4*p}Je{r=r;wBdb5G<{5}%t%|E`EGK*h;lI5m-I-p4+V?Hn$29oUv>7Ee z5T5h5Y3a`N8q~gT**>Nb-r^+7yoip`cyIo{kF(v59INK20{R4BL_CGF(#yUhz5L5e zpO8Li6?x6P{?9dXYtrWT6qjpmE9!`E4*a?7-fRC;(QM-{oD}JEKYye2i8#x-&AsWr zL}!Lfx}SSeMmWb<4>)FbbdK@`(dhjDo5*pm{yol8*&4A}zIPVM_ikcz{@(KYqT5(@ zxHD8nw4clvZ9iyv?5(KI)&6zAQ)!^gZ@^pUEl z89v}$m6t>9B&Xr-r5(&?9p`3VHEblWoD+KHe2}vHrDTn_g=0-$u3@LCOcCQFu|VjU zOo=JTxpM}}aaN{;%=w9`bUr#bVb2cKC} z{(S9Tn)@Ty&F+22+ka#F25J6X<~V-C$tGp2;d0v=9^Ms=*NIzkhGo}?9^Qg5e;8Ys z&WIdLZzTG}By4ueuush6+&zaBaTECC0DlS(aAwL#&S59o14VQGlKMZvD=nQpEu*|$ zd~HOtLTyV~$M4u`|$yrqP{T_zchIiKl6*_QEoM`9u3RAM~mC#7l2 zw(RdS(V6pb{#dtPoYz{QIj^DeWwj3Ep!04cE=)805andG2$Z|CHwS=RowA zV;|c%#QXs%=4~Vmf05e=U6Zb%?|JPopFKNx(m*EZM;oMuPO_zvZs<|(Pg^>%%yi&S!t$doi(KYQ_9*ZWdFv`iA* zupR~vx9X^<(c&D!~5JRvesT8 zYut@;HNqS>mdQFkCr-IlrJg&S@r#_)-(1-gnKtRikly6mq^lCev6IIMEpiw0zQ7vh zJ*Lm#9KMTAn{>P;`(WbDh$%A5x~$SVDJrdrer={3OD~@F*~_mjy_gmBEN?l!yKY~?Heq;It`z&KJaQg81$hY9k zsH(v@#-XUQZc)qpai2=4``5JpRXYB9&0w`#p0w)A<5nH{Mc>9O@;FPLGnk zYMc!8iLo;F{(0+VImU?aG3y+TC>?rSZo59m4W=V5n&q;c5#-wu$7I)^ubq&?daoS7 zIfuyj&^g9Ct45V08hxS)5sRU4G(PTSWB-Ww&)>toGu7T2zUh^eD;%53*t2NAKC-~@ zl4L|oMmb}cY4*!@?z_^?t0L|E9PAJMv5sT7$S(UinQZr!erlPFu&eM{Qb`uNd?q<( z`I7hnK2IibyvrEA?2VQbs}-+JmZIJ``N&x;J?sq9+U_FD?O16+Y-LxH792OzO3wLR?mOt+T-cAPY^`*H5pUXrX#{slS7m~-ni zZ%K1uV-NsRe+RVS@PS?-Bd-d-zvogQ*Ve=nWv`Kpw?Ks|01r);O> zjmT@WRTry=T(nk8GY&QDMEH|Uk~&M|juyH77%G787~j5zX)NDOoPe{~&-_#(-`nM$ zliXg-JZWx!gx{D>2Hyw1-4!gqHJaE==iv4cEH=m;Cvo_;bD9OjKEd%$lLKq5aLY3| z4svXXq*bIh|I!>~Tzd$N=d-fJT1zQI}}?I`sCGBN#ct^2R*3e8uQLi4SLF+1daBea2g0~_SZ zU+2^0kn;DANjz`F|En}Tq}ShBD_7GPm_4DtvDyxEzR6m8N=sq1HMt;!y777y-a*wXXh_bFP2L@8D+WK zM3!sLIXO=p>M|}Clc=(|Q{oR5RXrhU*h^?ie^kJj2sjI-2oEXEyIO=E|3UPMi5TvR=jU%n8;kDLi?$=G15org=K=rb;R_!F0-IKayoFKv+C(RfE_h-!cdE{P+ z8H3>dLMWZe?-dOnW*;v=nH~&@%=ANi?u?PXT#KwT;|boK<|>7wJ? ze|LRmwi6x8GuKDvTFPwSTt9KXIEgwR&H392FQY8uzS&A|GS?%6xmOu0mAw9vhwF_N zk@1)Q(mZ;dvnFb5)S0lLw7|r!2;}u?8u5B2va2OXb*Z-V1a;+{IB4d!z>u7V`Yb}$@ zhI5mCQ&!oWOODgaWu3iH`kFRzdZ;{pL6s*ogZpgfq**APG)c2rnxtDVO+q{=EYb(+ zNxihRxw&T=DVOu~w6i#T%_}cMBV))u;~o>Fi9cP+aNYSN-v_wqXO!u**AT{__Iu+w*Uc}T?Pavv zOr6$RDVJcb{U$p7rMh)de)VTcAI|eSI~nPhGvp0thN?`T*dAHVd9PhdYI=$C3)>m5 z)=^&^Yn=G-CDlwin|bSq9MuKFCk%UY_>5ISF4{L$y!D7wadL)lnsW+oriypIl*ehi zI_?Yf-@{UXCq1RL^U&^7ty!TFwABbnVE=1tUzX_+W_qq{&elkKL`Loc&NSj%N?#1T11+-CFV zFU>Zov(bi`R{do#d8_kho_U{H#`)S%iTu9m4tGn;`QM#Y$cr_c?;Yi}iP*@z`TVCA z&AH$m&IRx6CH)CrW7*v~#H`HMjJ{ryX@388yEf~eOEl+(?=x+F>&4~nt;d3OM9w8M zu&gTcBQc)W_zjn^P1(wFbKcR69N*ml``i1Mv6#EgrW5VlxGurF4wgDN8l%nzGdDD*dcw>JfV}aeDV59=Js^9MR`-r{6LW#Z9u+nUt)PS;%%a-pL4{F z#1xqN&Oj_iOhyl;srNhG(2r><;MRUzVVb@bxrSLoGf7%`%kZ!wmbFm^9SI?HNd>&d-phmWk$=%(6*N9qDLu zTxR)d=EqC z9WyJnKF`R(H|8^&mY&Pu0ilNp{#NlC@QA zrP%7RwPNeUz8G6Swn1#u*om=IVpqnliQO9eW9*sObFtUrGQ?$zi;c@4S1ztfT&=iz zaj(WTh-(zrD{esCytqYi8{&4y9g4dYcQx*Ae46dE z_WZBpZ<0Sb|E2u59xYkWEtsWXu0lNv^?oc|ILGIcXNG4NPLY%}DFst%q|{Dnn39yz zBBfC5(%Xzf>}_G?r7uTcAM{#pBLW50{t9eXzR zeC(aLjBz>Q;^PX$m5-|yS0`HgjpO>nCCAN=TN1Y^?x(mTalgm?5iju>rKC+Ml=56kos>o?Z&3TKQr=HVP8pRlHf4IsqLgo_{VOTAj_G3skCi<347DF0 zt$iARv6Ef+Ihb+_INSMtMC4y8N59}-c+_uip5^z@XZh?n%W>{3pPOg%oXveU=lMw& z+KF7)idRKWJ$bCjslp;B&K{3FRs8tC{NBI?3nh=~T1)lyj;q|37+i+sPd# z_nyjnD(%T@C$F4X#I|Q+%89WjhMlN#BL9i_lVeUCK5^*8CYG)|(clC}r;~$^FFaoH zc!6Wla+>vtq})2%;+T`NH)T)CxRlN*9a0J$opW^7(H=)T9UYyrnCA{$J+$}GszV13 zbl%(f(DHo`zWHn8gN?i7+Z{h9{!qeYo+ZfVVD2kF2)A!OcZ6Q?UZ_;f_ z_j7ud-usvS0W+08YY^`(jVxo`>2suyk4)3bfBk1(310n&SJDSd(x?5~E9vd@ZhAj` z`t%w9aZ7(oWv0^I`uq96&ZVP1(p~)9(sXB;|23FT@BVH1y(#wtr-1XOQ_()-)^YMX zZ#Yjl#hj^5veV9~=CpSzJC5Tzo)dCnoHR~4C%u!w$>?-)-gQ23K6Lszg`B6wlJZhb z>dNbqEJI|9Y~YdUY1IQNK|P|LQJqu|K3xW?v1*!HuQsXeYPUM?Jn2+*o^qx*lXxia zHLJ8$(R$u$Z1uMKS;MTU)@o~`wcR>z{ic;Ju1o83x{-cI_tKy0&-5HUUvF|sI#rxf z&M>#H^Qe8+KJQer&pFRJi`<6JbmuFlk2BG!?o4wVJ9C{O&H?A3TVKELeC_mb-*)yp z^PKnHYVNacb*BiQy)K`7HlK#Rl#v?JSd#b?!*6n4{GEKyH*ediM^zeg0_`a|8dvRICl(aK>xYrSc`Wi_#qtl8EV)*Ne^{jl}BcKNI7 zzUGf-IfJ#W`*Ixbuiw*)>^QD*LRLD7QP(Anm7edhRF#@mHK}D)m*=e-^0M`k*WRkl z^-EJ}V!bU*t!DDJ)m)lcEo8Vgfa{)Q#w-T%kfTBJnKhpKZsTN|HG}&{U&;^GT<%ZI zlbzOQUN>u%@~yQhoweCppt4(gRSxSX^`N!S>uK##4_iN|g4PXH$hxT>vu>#;t*h!; z9a2?wjH;&7sE*uO>!quz_jEPYTUS?ubdnmZ-%vyJn`)?jOO4Z=)p-4`*GG3!vvqIv zh5k^@(F4?%{2{lwdZ7AB4^o@;4E2*$j8yU7vC4Yyd#mLI zu2CyX19{2oV7=&lBHg^++%FwyUyxz?sx`*zE}KFZ``YWLidolHJ5^CT-h196 zz6n>t>#IJ}t-Ma&r@F10?5$K&)O6iPU-mvwd-T`pcfHx`>~-;Gc%M7Ilh#}1ec|o! z_IP`}pS&Nr@^9ev;5v4L*GrY@)mnbbwzKPuB7Yg7dWS^?2Y!u=-0i8-h6MeH%WKo9OnaX zyZ3{htf%X5y^r*FdYAW^H{F}%&Go+Y#=B#^^>#ULn76@NV{P+B=rZ1HZ;thv)yQh- zedDdr9jv~7eQ%?;$$!=Q*c$6>@OC?!oFBY>{%hVYXScK0dBsef7(ChpZAaZ7yL8+DgUtlvwy^2<*)R2`Ahue{xUboebar*ZRWo2 zzUr^=8~BHuEzS;Sk9XMr(ck0$XwL{5Aesf3d&RZRNIbJGh$Y?|`oH+Ux~=_7ZacS&f78F^-}dkLscujAJ-4^p%kAcN_3!%Okc5=m-R%*w z-1kG;?c+b{m+}kxPy74*13bu}v|rCJZ*w+T zRqxh&q`SHzU+KN_lgcKgRX$Zl|D@j1`&2i*Uwx*I>I3RWeNZ2g{py&VU_WEmvYXi- z*zxw$c4@neUDkfiu4y;1oBB`LUHlS$NxQ4gXLqx^+wa-E?LPMV_GmrN{>c8=Zf^J0 z`R#u8SpRXqivO(sP5-X1*kk;ver3OqU(SEbFYg!jEBHnHihfbQl3&fQZq>BDRjvIR z{yzT+p3VKD%J0{-d-=uuC;47SfBDdk^?tUqt1)s)POCI_Mmv)o;~iB`c_(cpMf5d! z);pqaNI!j3-{x;tl+brHW3RG8z2l{L$Gqd-3EQ%@cgnVH*G^-nwbR+@?F@EiJByvw z%4W~A83(o(S>0{^!il}i_v{t+8v9#&gMQrJs-L!M+285a_V@ZL`v-fcz1!Yn|77p8 z_u7Z;Blgc$538p&(s%7+x}~+kT4}Af588*U5q`+`^*8no@3bG|ov{yiXZf8P!{=v|P zp#h=f(7@23(BRMz^|Za*ckKQA(ETa>hyAtpo1ewbW*^nJ>?PjsepZ#mUZqp*)he_7 zjeKEmlrQZ~_5*f`ox?uvUGcMdSN#XPYkqd`4?l<6X>Ye3`-JV;yKLY7kw3XL#eUE} z>0S39^lo@J{fG2jd!={FUMsWh%`(T{;@$RhsziG|-(M(dJ-~M$vP(HDrwp)q*$?@- zygPoZm+C+4-Sy+_oc1YI(vMfA`~=ljKcU+Dxm5>0j~Djy>h*e!-k{g&je4Cgexk4Z ze7@!9*VpZZYL~su*M0%#8)vPv&e`m2b+$P>om~!Nvd$eRH8dggbf|QwOsH(=nNYb< z`A~&W#n6IK?NFW23!xV!iwC%4B`791N~NUhKxs||XJ+Nh_hE&6k{RnJu4>1pbFJxgul zZp#n)OSMDKRR{D^^{f6tUD7+$Wxdmytb6J&7}?BVy>IpLHmi@lE&TGymuyxVd4O-N zWVaOGPP61eh9DlYL~^Pdl1tr^San+-R(B*$-IR7#2WfA0ln#tmceFZ7C+l75Y;}=$ z8M*4hXvrQ%y7pR&)GPWyRZl;p>g$|*(wN6h`2laAwNUuFcis^1 zdpozC$Ifdf+WGAKb^%7$a!VdYIua$HDaGX}DIq1LlwHrRZ@+54W;d`K+Kuej zWu>f=)$)z3k+pnZ;9GmD{h2+@o^H>uKeuPvv-BB#R-e=7^#y%V|Du1jOWLL6QDLlG z3d_@>w*D)jcS1cw-R#D8lKqDLru~+DAbn*S<5TNH?L!?yo$U^GN4t~%g5BAESB}YX zIl*u5I)plf-nEC>!|f6NOLh;tr#;dhrB16e>a04ax`(=ix`w*jU)pn3E7eAy)`#__ zP>)bMf3iQtdCsZf)O2e3pZZgs*PX`B+x}*dOL6`vd&`P8~PaDejbT9&-vi1^wa9 zLgz)Nu0O&b>W}nC`Cs~@{W1PW{>M&Bf2=>wAMbzSPw*%DlidE!K4+tI$~oh=pzjMj?-MQjib*?$romTH9KtIuzzzb z`zk-leck@mzGA1^cl}xR@Aggm5Bs`(+n?=!VPCc{*%$pejM;kYrD_8HQndDZT|cI2Yz3_pF7^2<9_OX>CSZLy3^e0 z?hN;Hu5T~77o3%PkF(Sn=pJ*=xM$t-?m2gzyU|_mZjM;%Zg9VKH%07pe{@#4-?^W- zligYFB=aYYq0~$Yt_R(Q#Q1>w0Wl%q6d>jfIByd3 z1e}UQGqwnuF;(`p2)7O~Ux1NWVgHM8-XNNFJ;Epp*W>i(2xltMj6lFiCKd`f?TC*B zoN7dKr45Js3sNNDR3;V$>vI@OWv>(VI&nh8r%;ONbi}6vPA6jNfb%Y~Ou#YaWgNwD zJ|sR9;I6SqxqxHxRX)I#uSkU`i)iY?D33}}CeJ2+MqN~idY$-elqql3s3Ao29%Bls zM{OY12q=&ETtKBI)(j{!R#7XUOuIcFF!u$dc0idjnYMv4_3#2-WSViANdCy98p!lZ z0X3HRazITZz7kODiS+_%6OoZ5Lv1HA_GR!*Ns-qA>O8SQz30S`o+Xl2EntlvTzZBDVp-rAU1hna2 z9Ru3bhiMyVv%by&-HT}YEA*#C#vKj)8L?|X&mndT==sF%0d3mIv@x8L#GV1i^hdK^ z@GM4=_X3WohbaNRB_Lwz0?wmEvpw*wS&?Z0+mwBJz^O!>5wOn@KMy$15@!bZrh&+; zK;)P+n`t;^9bW{TuZX5RaQYCx3^)^sa|2FwqDcqG^@XnDZdPh1h;TM9gYH{h7{tP1e$72&f! z!Zr2qO@MEy3ZMTGj7Ev9#kX*_9pQ{ zz)B)s#IG!;&&j2LHH~;Vz%x2TehXN?6OF6vYcBCxKx?AOE3`$t9&iQ|Zv?byyPLR8 zn!dz40sS5^HK0u&H01=}&JYO)7#$SFq#+?969yxOqS&5c?%^r&5yAEq+cP8$kvcLM zSrkRS4fDBSK0gdb8+o{DzE85ktni8`H%<-GiiU{j%;sXJ5ELYhBRx={) zZJ6V_dN5!$Cq5J~$9R=9V6`CT3dnF`Y=Dte9&Q?t5k%U+V02Yfd_YDL69SC5ipm|} zZ?K8V6JQipRNjC&KB~k3BeSCN1_lJti8n2QKqfR1gxKkWur{HJrm%Y=savQz&E8tl@C~Z zh!vttTU88LrXDIqnR==mux=2mM438!HelT(R*f?CS1n-OBAR||m^yeaU|l8Fj56z} z70@B#^HFAfwF5eaSSQM?`-OmJ|4}bSbtKjeXjAtuMfD<@{Ri5t^OdOgi1h;6th0Vp zZ{n)~U7h$^)F5JmfKDPdj2cXA6wq%FUym9>Y#h*U63u&zp)l#7&3c zebpEbvwuRrOEmi=ygtNc0o{q%JZd(vML?Ufw2bqpM_O@A?U0dwxJ1_wM-XF~#(>Ayn* z+@IkAj{$SOsfGtUQ;rbieG(|4vsRU}RgXovV& zz%%VOE#NI8PLDGEVn#rhAbuY3Ok2&2GUb~U(5;BG170Vh>G$wVzUBn9>DQ)z8zzsY zPs3YDH2v5x`JESK@-jc5`w$ld^kt%{3wWjp|QS6;Iq6ur?6C3wXVV-$#`tZVPB3ntcyu6h!?Hl}a>uf;lf%I|G)f zS2J&z{mA4G+PrsnlxYW32I#@Wy;0`9<~Ra9gt#xtw9o#49!fkA^)>NeK%0H!P?Tx6 z!vQ^xjPv zytc&O17;k7J6sXmZRKHs0U1NQ7O+g6{}C|Pj@)sN@cI*PL=`693|O~`w*r!ZXy##M zBHjs@@geRLM_3OL??$~z33@c9 zLZnV3_4)}hXFzkzv2q2xuEf}Y_Z9KsfEkmp;-buZ;{zUj*h+}1OUxbc1`zWEJdR0L z-hkcUAg0{;qf9##2#9H;N1|F29}SrEM5|yxoBAshFz1ZcV*zc}SvX+M zAFUz*ZR)jXz?@53j|a4=<0k^<_+b?b=q1D_qjnREN3kDRPX%;)Vu>h|z9dRg{_E^N{C8`fyWN)1k8ht z-HL^U-Pn!ovAg5D$Gpb^Jg@I}-uJuy>worjuY1q6*P1crm_464h-eD9Nyz+`j8`oN zgEt}Ucy&{J7t8`gF9A>DCAtWB5?|4E!1jAYzX4C;C3yo#-6`Wz0safYaV5hC3)E?mGfI0rLLNM06f_7hqTTGXuOEfO^XpIqgpPB9B3YFLDw& z3T_AXR2&1A^aIfq;2}hGGI%KAUk8@*14Pro!xd+PM*w>PX8?OEW`ai&(e+@_V<0*e zJX-NASae!27uZMf9C$1diQM)D_5(fxM9&1D0^<}vfX6Go1y3NN)4>x7uMR$dh$Nm; z=7H!|u;>90iA)Y6JdxGGL^KP02;qr5Clj9J+o6QFE%+aVC;4?4;fW3&4jcjh&jcSy zc#<>pqHDoZiRc>e zG$J|&EP4Zka!=eq^dMO3Q^4O4EIJKD5=W5>5X}Kg`UUp_7b>0vOWJ@);x1(X@YVxg zL_}ADCEh@EHTV(*%8V;%5bO?IrWgpmoQP(FuOOm3!IDnE6TK6E1(JtX5%JDo2?Obl z9s-LjfOr?Ml%MMXk&War5JtH=e2MFuYru{0%DQnO9W1Dab(U&5Q{8d zAwrSWtH5hW;}G!cM7S4N;sJz%z!EkPO1?{+fLQcL%y=&%hxO?hB5Ha3VM+Lg=TL z5aIsdl)$MUj?8lj!cpLML^vM2D9|49M0&i%h;R&eaUw>Vq;Dh$_X95pERW}rK5qpg zoCNL!)Nuc2a2KE}zW)a9Mud~WD*`LQpMQW?Ch%XQj<*UC9t2*M2oD6W2CNBx{s6B9 zbjP~~gV!b!kzbt%j{s*xBC^bh@NjSe^mQDZaO_B%ByCF~a%ciW@Vx_gC;+)8r+_7$ zK)gCwcfiSJheuK`yPj`(vmA>(!L8p4;nxR&rY085$ye@n3B z0pRZizJc(M1m8&bBHNpQTk*^~;M;)P@qKgfEZ`1&m;Abuhj= zP{;d*kgeII_vJ|KSyLS*AFNjOb#2O>h=_)8HY8-HoS zIU3xN5IOmh20&!vFH4vn;N=L@3%oobGV@m;L|%R;Le}(rkrCkB39b=lEVu>eiazH& za5rE@K;*g-5s9o&mMlcB$R`VtrTDuhAo7AP`jT!*EA&Yqb1i-bNWNVUl!{xxk_JG= zNxsNba4R6`=?&Zt^dVy8nbZ*$6907-_k!0`Kqvk66?4EF5Yjfv*uX-{_C|y!{`Dnf z>@DM4i^stz0|KdE{5HiC;09sqILS)^%Dum_;#n}tjK3-HJb>~b^_l+?0G+mY5iH?t z4ZHzt18fU990Epp5Xjic-;Rhy&f6_*7= z%pXYL1Q5sHoxmv*jz5Tydeq-T@eFuRBKiexhoMh( z6ZmiU0dGtMv%#AHo8ld$vGbNh0GV{&ng|{N zZ$ku+fd>!)biDJ9M1c5o-U-+l{y=v-??wc3!9$1ua_u~n2$1g1!+_y<9%<`*J`q6v zoo5ii1K_)e0D9b6egj~6%IPd|MO>0P80AiooClUTA`0=uIMiLuUj@KQQz~ zklYA{&U8k8B_bP%2V|Ha-8JN;!07-+{t4VA!N@a#(--U!vJO-82?zey0>a%091;%v zuSJBc&(vbVk+2d%)=p|E;XtmnMF@8Xa67_*jBAS$t~}G8a3J^EVuUNtEKWGPfR`X# zc}CIzIJ<%+ZGfzk)RrQg(cq;CS#zj$B%CqeWe8b+s4Yu4^2~CCtVPt8CmeZZ1wz&* zYMls2p6N`u`-355fpY@5g^+cCS}Wn44emn79DS`T;am#tM#!9aZAHSl42-fTkooZ% z%A3Hs9J~tQUI1Q|a4rI`M#x-$ZFR!A0=xzxbLzD<3FlGpT7)Zpb|;*N!D|yTZ(f65 z3d~~QjF9==T22_rpMsEi-daf*$*UfO%=^}Q60*Ot){Bri*IIAFh>ZIX?yF$vy}*dP z*Ck|5wzeK&ME2_w?(5(U2qSV8JqBd%v$hdoM8=}8fcqs_^cyfDZ_#PM{R-Sh7?DAP zaDM|g2_y2@m~ejwZ$cQ6&8CF=2Y55Wh@3Vj+&{rv5M}^)OTrU9-HI^Vfwv|+(b;VX zvpslQ!V~?K_W`p5Sl$6V(PeoKFcZP@8{mnIrHldQ0I-xRz!Q1zOqe6VyAYnlaaY0| z1>TMDB)$U)b2NB&!jrfUBFr)1JqSJISo9N@J4`#5$1HTJO_At zf#o+q_JY;K4S0Kl6|yg^Hj?m!M-j50t0r{;;2j8-@(-Bv!TS*2LEy23xd6N`A@iZN z{RksvXMaNGM{DB1Ybs&Kf#h`fU^u(@(FMaSn>dHmIaI40oMgfdH`oR z@YRItfh7+BXL+#59l+yG?K;9)0en4SegfY>IGw;Z66P21O@z}Kd^2Hw1>ZtQr=xZ& zVSWSOMmQ~C$ydPq3>H}f&VJxK2wC&5-AOo7=I$cg@!-1&N1nNdki7u4*@Pp{+)K#5 zfZBb8BhTDV$R2^(1B4^bJV?l1ftr*nz>#O9ECI4_p!P7~$TO1Pfb1ivNge~v3*g5H zS=X&SPB<@urOW`b##?)mFgt>uB0R|>(P_Z!1QtC8WF4y}x(k?{!Os!0u2q{$m|ein z6SBrtlXw7TSFnT)c#=mi5oR~=%Y>|l)m|aYK=7-CCwcT5VRi?dq?+{)$@VkT=41SN0^|#vlgpoY|fRMGC+J}UZ{QroMb(`A9 zgb`i%7a?mnwND5mdhsbCYdN*g2qQZ3IU#F1wJ!*BANWf`)_H1Q5k_?9YeLq1YTpn> z- z6A4%naas-_WUjGg5)n&$4f!1DeTxPK9NCU8B{`w{pC;1=93z_$UnN8*AyP2iv&ZF!1FM7B>8iR8&ML?Zd{EHD>-BF|c$C*p0v zF99#(zC7~^@H+f_2mB_H$n&BH0IV20EpHQv(7xM3~Xwp9!-M z_!q(x|9>T9-LK_0!V|xLClZO<9|TV8c3P3_)3f1-B6KC16CTwF~Zx zpIwPyD{wa=K;E^kNW>?AS0V!Bd+W+XfV^v6g@~ts*CxWF!F3=*dc~g{C=u3P;2uCP ze1~jXdlRw9qz|wT?*9Y4E)kyuUXKV?1Fug6;`atbd?I*5B8Hx{ZbZZ=qpf`jSYUNp z`w=nfuGaoUunoA42s?utL?Cf&5&`1cx-qZ`;)1dTNClgU_-GI zgZC$bhrkm6l>6XyFm%0jGQNKRJ`{kAgLlA(5y9i&!vW-B=z>oGAp3A}u*4N|4cmbw z4M2c$)++G^g3rKb5CO_itHc`!{sf;zM6ZC)CIXa^)~Ucbc;*}MxkT_I_&nfz-2VkU zgTQIzPU}U4%s;kXO!&WnMUR2N2VY9a{ATNAgfDTpoRB%qR`CmvdDGUJL?G$Cl8|}Q z)~krX0bfnHkbA4-4Ip!}t=AGV$J%-wa6Rs$+_&C9#Nzjjgv`sf-bBcJYU|CwEqGpJ zbt@tBsjasGwutS*kU8MiI|-RHZoP|$C60F!fdSt`$Xs&kY$EW$q6crF z4%`m>Ch!*WRO0X+0c+JxtK=(?>l1Ff!`tScY$Am5P94MLK1{{w@XNb z+k+D#ME-Z_K;Tqor%Oj7guZlHh6s>9U223m4%|YRW5KNe0uLb1E?tQL`PZcz5kuZx zRwg{8ugmJd8i>!?;O;~?9h?)+iQsjK0QuZyOCp3!x}aK8*-bHoBl}2}0y= z7m*hbUI;#u2%(EzM7}^MGLbX`p~!hE06)S@z|f~INNWf^?IQAmUWT88Zze+MQkPqZ z@JsNmMEEHf`qt$xJpVrUSt2|iJeLSB0>40n63$z|+j#yPu)OmDzJCS&hzOy7T|OZ~ z=wMfrJwb3A7lO5CO_b*CmNy3V3-UKzzH_hydy6x&{%T z40YXv2u=ngF9gAH;9R;ZI<^BZwe_m1Y1J;%Eq;4g{rJI7hsA;K5I0TAN(SHbHMA#`Tt!9@5HcsLQh44y%Rk2=mOkf|V? z4PJ%_?*;EjgwKJ85#cM~!vU02$%|DG9|5dyIIDb5gy({PAi{rwe`uS}h%*ne6@<@&U0@M7rh?l6YvB7wV8n0UW|;Rt zT;^>~xL1I;AYAC}ye$d$R`6DYi!wM5c`0xq^Lg6<1M&S0FzQ5sw-I;{;Wfc~5S~1{ zC*chMBY)?O#Pi#OM-kpW;L*V0&>7Sd^Ns+H!}oQ;$hUc?*M=c;0=I5_`ap%{O}+V?(H~#v;z1& z*%=HS5yY1}=IgaBoZvEW9oQ7_7GPL10G!|&@MsGsxY{v4ZDZkt=Ya=UIN^+0=Fekp zkRi9@w4#NF^#MP@_tOA=H%=>D{O&sKF-yVkp3~Ert>68Ho(XXOJG~#m&(-yNGTvEaL&esAxz3wG7-i#aJqiv68^F-Ln4 z=3PfRdpUb!KD8Bd8g+|SXM5Zkjys!Ty>tS;jl=hCaNXA#1=mpfbYIN1PQY{f;{JI2 zzN+2h8H=^?*$aNl6BC^wn9mrBC-=c!d3qmUZTwpKzS>_xYB&ety>ZT9XN&o< z8-Q?OeF*ElgYioN|LWLpk~`}<1Dx%gErE3x@?$OM@BG-&rer+)#A%<1@xs0^u4}>9 zo``LRYfq;)K7Ib9uM5j)2Rz-17>;#@ffxQ|q?OTN+-1s!Aujvaw2a2ReVq}wR+8yH z|JwjOA<~*?-|lPumE0JQkEB8JZDENo@L?bLzqZXshTOEzOD=C`Lz{q^Z;_FVMaew0c@FdpMi0zQ7E%4jc$Y*)B)mh-PUAR?j z24lv4F#MDJ9)hdHa}wMV50S8h+t=CFexCq+Yn?9(>fU(7M09&UyfGdjO0JIqi?;3s z$!v}HxA=d0XF;z1osRWIC@e8!5li{j3Ry}Slemv}+Q8%S%RWez+?{BjqDF3k*iFJ4 zQrd>%zT|^wg}5ey4}e=r8q3YT_P2dCms*h*!>x~d!)KPszl)1#&G3bCZv>tdzZc}E zNb10a++%Hc!y&CIc55vZJJE#&`7!~q7CA3?cHxu^_{*~k(j>Z8z4>=>-WV|+XG@Fd z+b|pBN+-rUJ0Oom7yl}?k$(wGBq`c30=X_4CFNiO{Mpa)-uP`eKK=2F=!@jkU_94~ z|2|nbb>s1?$Z9()k-hMQS`OVE0Dphfo%`&Uf4jg6 z5T-1RYdqtdz=W`!5SzrLW)av>Sk$yPi1I|mE18weDrQyKU0B_$Vb(NjneJw7Q#YB(O<_u$kloYtGQCY7vyNHU ztY_ATeTEIqMzCtoPpup@&Bm|*v?;96Y;LwNTbixR)@B>Ctr=jpGuxXT%#LO!v$NU7 z>}qy11I_McklDlRX$G4iW~dovhMN&)FSEB9X-47n*fC}wGuG^jbNcr;m(I7%aHYA*Ty3r~*P83h_2ve1 zqq)i4Y;G~Pn%m6nW|q0b+-dGIcbj|6Y;&)<&)jbwfNhF7<{{Xpc*Hzv9y5=dC(M(u zRq?cW#yo4DGjn0J;sx`fc?mWQUNNtl*UanY4fCdX%e-yonRm>)<~{Si`C$Gzx}TU& z&1dFw^M(1+d}Y2i->>%)pf=tger zCT{93;bd3Oc3liS&?xh-z1+r{nbc5_#B zS8`W&S8-Q$S94c)*KpT#*K)hNYrAzfb91+FOSgyH)9vNb+uv<-8*bCx*xkh4)ZNV89A~p{39B4i%h~_#0Czigdv^zSM|UT8XLlEzy1$z{ z5GU^sg4K>a-NEhiz>ZKMuzU)JM8U!S=^7?y>H1?(yyv_XPJu_aygZSOYl~w)alA_65#@ zodKNd?@o8manE(nbI*4#a4&TK>CS+~kc-_*+)Lfd+{+SXN)`3-(^}O|A z?_oonAlw&LruutrUIS+dZ|rU2ZR&02ZSHO1ZRu_0ZH?1~xAg|VYQy&44&IL5PTtPm zF5a%*Zr(sxWf=rJ5_@`sy&>LEZI|$aS4#D~3hr$lZVX)G1gm0ODF&9C;Z z@vil*^R9=zm>a#DyqmpSyj#87yxYB5-W}eZ-d*0^-aX!IoJD`1cfa=lPNkoN6X_rJ z9`PRa9)s<=V0pvmK3}fy_dX~y;r73vkkZM}HZd<-eT2JWkl}+J4>7{M;}6 z((mE-^n1xU;`41gY~XKbEqe5WO^-Ie;Wzz_{Z0H${mrb^hb{fB{H^_M{B8XK{&xQM z{to_*|9*=3g44&vMua~Cwj=ib_jA?#{dp3(oI~zU@(;AuBjn`qL+9I&IMP4LKiWUW zKh{6aKi;3>pWvV9pX8s+bIRp}a{o;KENf+A+P|O4?$7x5lhgex{j2<|fcCUzeDJ7DMGF8^--9)C9MJ>2Kt51S7U`g8n;U@hSh|55)j|8f5b|4G^bPHAtRti=QR)IaI)q>T7 zHDH@b&QxDJs0W#~>Qv&K^`1Csy*Df;trM&ptQV{wY!GZ1Y!vhj`UU-A>!|@7N*lxO z)22A*eRDbK9VfbP9c&Y9D`&C?+Xp)YI|e%iI|sW2y9T=j1B2b|De!y3YSa*(10Rgg z6W>Si%y+T40!vc+2jg%m`~;j)e!%=w$`1)92Zzdu@UYf&L~tZ*NgW*=1DjIE!S>XY z;Dq2rSZ+EwI3+kWI4w9mI3qYSI4d|im>NtArU&N)=LYA&#?uA%)cF~~MZv|vCBdb^ zWx?ga74}5-tAeY8YheB9I#_#>)6j3ix$?IJw+6T2%=KBp9l@Q!UBTVKJ+L!zueCJs zK=5EN2j|H@44V^=!s^81!4t4N@l^0MEWA7m`xA3vKjsBkka-EG&c7lSrGnRkH-a~V zw}Q8WdG`GI_i*0&2lh1jkM-R3&+N(TU&409*Yi)I{{iRF{{&kWzXZREJ&WLv;7@xl zyBm6;9|mC9AwCOt@^gT)2F=Lf9$n9M-~?ur=%w zb`86QD~2nDD~GFutA?wEtA}fZYldru-NUuRdYFZIScGNRBkURW3VVlr!ga!R!}Y@T z!wtd>!;QkeVZX3{*cLWm6>DSI#@ZC8*>8@M?6<^u_FISB$VvX;b~y8Xhj7Pmr*P+R zmvC2DoEZqKIfKGI!ac*m;gE1>I4m3LhR21+hf~56!V|-j!jr>O!c)W3 z!qdYu!ZX9O!n4Dv;k0l%PSrm*JTE*SXW?InGx2AH7vW6&OZ0U8D{w~smEl!5cmEok zxqn@FeRxB7V|Y_|b9hU5Yj|6DdpIk+BfK-bE4(|rC!8JL8{QY*A3hL17|sbF3Lg$1 z2_Fp~!)g0ZginS~g-?gigwKZ0g>%E_!xzFA!!+AKv z|K0Gt@crilZb-qeWo*ZqcZHv{t)i`?ZK7?X z0nv7_z_&xRW3*GWbF@peYqVQ5FxovD6zvi184ZqxL_?!t(eP+Qv{$ruG%^|$jgH1d z`$S`-eWU%N{iAWwc-ZEe2)kI5V8801=-}v(XmWHYtalw29S-|nM@C0QM@Pp*$HJo3 z@zE4m^*9k0Jx+$Tr&FWTqSIkN>dfe@=xnh_6-|%MiOz*Js`H}@q6=X=YDRPs>_lAx zOHr3am%}F2OxT6GD!LjrqpppvgH5U%q8ni|?B?he*r2*Cx;>f|-4Wdx-31$9_rPw{ zy zD|$Pc7rhg`8@(63AAJyg7=09d9Q`Z$B>FV^Ec!h9BKk7=D*8J5Ci*t|F8V(DA^K5l z>qNgqzec}Bzej(-A`T`iVgJU1y`LZs<0y_{K`4zEiQC1C#_i+9;>F`7;w9q_@lx^9 zamRR>c-eTlc=>pRxKrFYuEi~JYuqL78h49Vge{$w<5l8SVK-=XSc+N`7MHri+EN|% zm~z@wihGI$C)kl%2lk_^^(fe7+6Xq8`oSJkn^my<1OMX2gQ5Dd&Yy~A@R_7SUfx)5$_f69gmDh#iQdf z@jmg`c;9%xc>j1@JU*TfPmB+UC&dTG2gL`+hs2ZPL*swMhsB3i)-vK_;$vYG zd;%ClU<4Q!<6w_wLNYNqz}lBNC^;B5WhN(wCjUqdOAb$tNRCX7N{&vB`Kz_7 zGA)^&oRgdjOHk)07bF)Z|4e2i7bO=bmn4@amnD}c zS0po&E0e2|tCMSzYm@7e>ysN`A!;GJTFI>Bj^xhduH^3Io@91%Z*pI9fAT=`U@|9p zD0w(}BzZJ>EO|V6B6%`-DtS72CV4h_E}5G=pS+N~n7ov{oV=2}n!J|0p1hH~nY@*} zoy<$#N#0G~OWsdDNIpzHN;w{*pHrF7+Vm2}l~wRH7#jdaa)t+ac(c3Mxf zG*64POnam~(_U%sv`@NDx^B8&x_-Jrx?#Fe+BfZ&_D|c=M%qj_PB%$6O*cz7Pq#?7 zOt(t6PPa+7O$VggrQ4@Fq&ucNr8}p)q`RiOr32I5(?RJT>7MD}bVxch9hMGHN2GhD zd#5AQQR(P(OuA1xHr+SfFWo;KmyS;-q!ZHv(n;xo=|Sni=^^Rl^w9Jl>0#;N=@IFX z=~3y?=`rcC>2c}t>6G+@^u+X}^yKuE^wjjU^z`(M^vv|E^z3wMIxU@^o|B%No|m4V zUXWgx{xhACUX)&(UXos#UY1^-UXjjBuS~B>uTHN?uT8H@uTO7CZ%l7WZ%%JXZ%uDY zZ%=2Xccgcwccpiy_oTDad(->U`_l)~2h%y}L+QimBk7~*W9j4R6X}!bQ|Z&`GwHMG zbLrgl`SgYK#q_20<@A;G)%3OW_4JMO&GfDG?Q~xHPWo>8UiyCeLHc3(QTlN-aqP%? zz0An{OXWhju3Y_|tGkEgtj^!FI`3z7zMu7PH zjlTAIu=N*g{RQiDeS7oyzSck7@2_qfUe@TR@AuR9`|11r?ECei57Sfhrhm;k{cG0y zSbv&z`rEAcQ#bu@)@{17W}V?Q>rMXNPv7sS@AuPm7V1ww>kq_CIh1V`Gk(q9`hIVH zzqh{ETf^_I;rG_?du#Z;tMKjbNEgGY_h&k@hUQC?zn5*Azop8B@`v12K6SpAm(2gH zH|11j^rz@UuFwCym!!X5?@!M3{fzRgXOttD@o(t;ykI;t%D-MTZMva{j9fAl`(nKd+i8Rb{cnwswZ)YE#Y+~3L>@zwD9GoR}HH9nO;nZ_eiIc9t>%QRnA z&+|%NIrFc<_YfcIRfF%r&HQX+DhJh<2K5B`THV)l^;iAvuldAsnKd+D^HSqQJwU!Q zeMO~58g4UFebVrond+0qqnW8bQ7&0iRMM7;e1^pXCVYv+>TeqS6o5 zhla|rkLnY{t!I3`p5-hDS+4oj&~!CbANf0~1^YYL`UAGVgKa#)_C2r-7i{wbY|{_6 z@&{}AC^f&BZ-@uunKND}HY#`ChuiuOX8vb%*Gtv=lJyka)T@&974(qlDf&5WmT&U`UkfDfvtZHR9I3Uf^B&LtKMd+x2zvN{)MvOgeCjdW8b0$4ZVjLL2RG$WFEu|4EiWub^`e&z zzg}uS)=NI06W>veW z?M+s)+-FUV7u&b2!TJ+i-LKNk@G_NisqIcleMA4j<_m&leOYS#T2|$vS5@DrKUzQ3 zOXg3#s=wP+%x3RviYkwiDYdw%x`au675Bq%9p#Na4hgr{{{nOvsf65w+FWBl4SnFvm*9|StjW!!E{I2h_ zKbke>_m3FQg7qNk89v|C{Asd2%$m#>u+?vH^&Iu6$$W;MFg{J~*Oc1cl~wzu;gl>F z$WN6Y(~D+J^{|Jgs|WM7)b>8p_NC}+^)73w-0MB4hjsNQf)J-sjp6%~?M| z&Z>t!Y&_srdG)Yz$urh3V9F_1eW>>+ST6YpfU5vc6S$VR@@lk5KJvJxF~*_>6DHaN*YUGh9^b8g4I^t4zyPrsXed)B1t!Pd!ur zbM1fTRX>vNBONL)mUFl@-+F1fSsy^JRi0J7OZ~!ql}khA($xIXes`UE0)O?nUX)Y4 zhsLuCzqfraYxLH9?5*+A@l=ETP~?}!PscM2mMb(5lt-!Kl7jh+=PB>3AN8u`}S3Jom7Afbzw3G#fU4 za8usRhU!D5|GhN+y?8(CMSmK7R9+lEL7!D`wcnZb(|Gl<`Ih(B_O#wp%X3597xsTK z-etTR{j_}aV?EHI+%TR{J=XqMo%I~vv-iOoud00YWx5)a2kPxAT*fnNV|mEgPr&;c zAB|VNs!#he-*Uzi-JvSp8gA8|H#B}t${QUSjw2iTzP2x=_7h8OXUeKws_IdFK5J4> zN|r11SFHYm?R~J-6R=H3qfURpHe9gPAFvG{Y|{<4@dVp^0b6;4tv-OQ+`v{Jz&1T# z4WIoDxHWwCJ2Bk0`T*AO+24R$!)JMfTf=960d5VS?GoG?zV;XDRlUgaSt9q{UA`QJ?==i&==9RRb&e$(T_tVM~ zto~}fkh9+ke^tMA{-rVBf4xtCFz#f$(ZOdsRE>|doae09^SbJFy(jgquH`n@{#jky z;X2DVy7e|c(T!Jsbv&H0pN{)l&e<Fsaz1pOZyAF$?MHU6ZYLS0y&m)Z{~=eI8`AN8u8)p1}$$At~H@AaJZ z0Q7LFuY;8%{acma76R7sqxd_>ue`6Zlv5w*0YE&+ku?%s^=PR zrt=xO=2u>|*V-;;tcMW3%AN6n|0*Behg;>YvUN7e(#ca=Bm3HY!1 zRn;RpuF19CuUGx9hRT=iD&Es_G5qP3Qk|EiZYc=bS%4{%SqK@d?^H%@4Lm z^?ZK0XZu`M{lls}u^vM{YQ3cW|D5A~jGrhsOk~<}Q)u}qwSSmZ^J6_V9XkHbG#+Tc z3AyB`af5H^PZGjuFvH<9?V!jBA!|ft9q##r!gJ~uZo9_ zC*0P*hW4MqTE9}y;I{e!*7}|G8{AsIQ+{x3{my;?+$u-vE!@n{Qs*z~RXTdHJmfu@ z&pG>lh?nXW>qCrlY&?)Z%)fe5-|NNuS*2%{Jgfer$~CLzNvnA{9fxCrhxx*G1L3It z>-eQnjmxWf8;xgO=c(!}x0ueb=|?}A@v3WmUROP-v!7MZR6jG-uT1NmOvjO^$XG9H z`N(w~o3nne=UPs3mJ_&DZk1kD<8%6-HRwOs$_eGf<~La7%YFjJdHOs118}Pxbe^Zd zem3sw`|RJKe{9nWw(n#9j`1m252IPP`HpcP`*Tgr&!*0&H<_>a-Rc*Z^Yw(f8`__4Fg(Q9$`k%+KC^$^ zs8{1ejyvGC{(-e$#{LQ1T5j1cz^&z$?FQUhZna*oSMugK1@$Py&9wc=R1TTOC)56R zUbWM7W4x;AVz_XtK4~~*B^RzsVVtPx)Nx^*<0j-E%R^rEuXKJa*Z1$*w3T8Ghjt~&eY7}sh! z)_N|}dLvVP%c^>-nlI9MrmUJ@((!YqUS@dFZB}lwSH$m1m#nI zui7EjGq|tvsM>L@SL-@{%ynL;QH{&0aaI*x?@AslA6XS2u7hE`t9rnEf?Mlbov*A{ z<8fWLYjC{|%Uble(EeJzD&JbaWL%#_yH5SA>v$$(yr8#Lxb}B6zZx#TOZ2 zk81z3N&UyNjEyIldezkVqNbLorp_BRwOln>9xO3vfqmL zm~YLh9CEx~FSMO3bX;3htMx6_%ToK>rRIOh^-J`lnct<314~`^DXV_I&ij_y&X+p> zTWY_z)b-&~+y7GMg-h)Rl$9JbpG#eLEj7POuA5>SpZQuxiEN@Ni=QVX+tf}=yQ|HH;T5mLUo~+4w z2Fn8KkJcwm-M7%x`JATiUuf#QPE+?WG?@=slk-2AcHlUw(0Q{$^R1}nm8g$c)?t3- z+WzI*kIl7y$hDnr>biPU$JtGtCvIx{-qdyOrjBo$s!v6=zoLp)rT<))!ulrbfu^pn zHg&w#)OFUTj@z2L-rCghTT|y9n>vry)cT~U^Jz`i8|eOOzl-$?+$vvPw`}TqdQ->I zO{CJ`3bcK#b3tj(d>N-MG`)5sEPiSgCt*Pq@P3^BWb>5?? z{kEpgZ#UVVpng{Q>3*Xo+ZWtdebRn+Q}-V=b>6he_7TGbmB;*bAJsdy$C%g9`d8-} zO6m!w`}DrHgQd1xWwkD<{lilGbES^IOU^&mOZGG1kJiJQucht-Ds{YH>Nu{{b<zb$ngwd~vDkq@}jArOv07njfXE%a_`pF01uY9ha8Xe5}?-rH)fe?Pr%d?^bF( zQEE9WbsSrAyo!F4wqMnHsE%jKs$W&fRmUNv&cl~Ft|@iiztnzJsr`;p*BeS*PbziZ ztJM0k^@w>MEDI$|+-ggy|fcA7I;$#QdX82i&&b2DbGJ z?%VnXZW|8V)${sXHGfGt;yD{Wp0oM|x2^Z#*7q5IxU2iNo`Bo-KfpE};3|F^FSe)f zuX>((sq^I6c0)PnJURM->__N)Ieu5URP##OF6+EGerLU^^X72d^kKYa{Q=u}fNlE0 zHXdLb?}m~`G9S>U@LF1hRb>hZVkU0cUI%kYTV250k*BN z{zpM({<9s!G6(f@zWh~hu>dU3No9z0UYzAA^k_;;HgszXNWS5BnW(t9;n+fLrrL`+xOn9aQUuy7uE$->^QX>DB() ze0^oV0Lw` zet}!{h3z$#BeYy_{TcDG`H$@^RXVElSMk<(aGo2_Yk6RQ8u_NrvEGJT%Ol%6xHY}3 zx8bJ$xz=yF_Lp^i3i+=7Q?DQo&F^YGsoHN@tt+vggLJ9Bvp$1c^`h!`X}%WJW5h%2 z6KyBvuZPSp$0`rbM`1fI(^bvCSNdA52k3qvEZ10hV7^1;sO?= z%W*8+n!jwf;I{DrYyNWH6K>64w%ZLYcVHV2u-03;&ad-KkgF{pV6Dfrzl#MADW`bP zrWe};ZGM3JgcCFLdRdHh*$1g*_UpDqxT#*)j$|M2sboFHn@$S1 zX(yMoMqppLJHg;CA$Y1%Vl_CoV-q-M1 zIN)af&o3l8sA^;92ftV0TK}>(?fkY?lcZJSUsWE=-$qqPwQ<89OlotTjR)K+S2iAS zt6bT5z^!s+WevB=m6bBwDp%?c!mIpKxw10Hb1ElxZt$Fz50(qKZ8%`9G?@QztK6v{ za994Yan;S_xL?IXD-RBuu$Nr(iGw4!ZT!GmxpHs>x6L20#)F+;xNUmD8jotxj*A4i zuay@&)o^S09PD9DTf^sI4{i;glR$8*95@JsTf^sM2izJyCs*Ot#*ve(aBKLST!UM~ z=U}W+XE_F2{Q_(F97Mux!$vCv7mLOWxHPM#IonJcujTIisq(9T7n zgU>=Y*J$GixmAs%)e|%)%1jsjXNUQuoAKecasaclfZicHy_$cz86UrEea7^{t>vF` zL$g-pH~rJiC1_n$uc}2ttrv9@Io4Hku$>Mp{V%D;7QyLjt2{h7u+sTjsvF<)} z@c7}@fv8)@B8>lnACQOz4y0s(1Ibz7K$@(B?=SQNQn&C^eHJ*fKIH-j60^X86fJNd zS=PZcYWKburjEO53MnJXpP^4H7$OpY!=%?}M!IF(tRBBF-s%BPA?a5&odaKlso}4DaE)(WSFYVs;RE_Pa8r!d` zc{m+~4j9u@=HCUz~;A1zUNp)FydEn22>&|xxmD>8jrBH^YS3QfOGYvsBP5UeFZ zdt#YR59l%x;zixdSVKb>wZ>%)k6{)|Za;2Q$Ev%wi29sP<70K0@zCjfxT)(ptq(Wj zt<&sq)1Ojn{!)jtrRIOB`CPI^#V%o{qhyN;H|3_&PjGAaY*FFX@Y$lmt>LppgsoSUVUs25OQuDjio>r+nrBd^~R6Qs;Er|Ct9=d$2+jsC^W$aO8tYP71PeR89 z*nMWh1KY9>W=ooJcnG)6C$LR7*y<~o;pJLKP_OHr|3%;2Qx)~x-^6aT}?|R!z&qH$?!^sS2Dbk z;gt-pWOyaRtHm~O$r!y+WtpfH;HAsSwGXsUTycVnZTwGlW|s?FjryI0k;hwV_o)ps(;GU77qXX zqR&^GA#^e~(@D*&+H9hm@-ppLWvuNHu1zoIQq=!ylAD8UY~rz{0CS~GN3NS-8oG$u z;GzT;tr_2(r4)-(Rz8?xvsw)-{5^skB-xG?f2!?<`$h)&UG>d5x4o1v!#c;t9;OSv-Uy!HGG|X&sb|> z&Ozm)lQvolAip$zx=ACi#hUTqT4$?RM=8|CvC<2AlI>7D6fV8+@U zaU?OmD9FpI4h&bTPG||6JH${y|(eU%@tgU>hI&Pl(D# z|9L5|^qZ|pquOki>!M<&{q9^BZ!=x|%Gl~auQh(vBst~Zw->{Me>Oa@rkAZK7R7BV zg*nuUsn?}$axGP_OPxF_RliI9=cZEo)!O=Cj+XJz)&_3MwbV_crRsO7n;uKu1Xxy^ zy;RRj&Bs#pu4IoC|AR+8D|M2q)JdyS=bN;3#+<6H$G|Ly+WNxHa#reir_}LLshcoL z-PBs@CcjcQ2bQ`iu+(x}YB?-*^LANnUQ>N3b#qmz<34SbArH!5TV1%RPt|-;shf;S z-DFhiJXEQAUTV23byI4o`d6x6mpaZXRZp~+f^=)X=;p^#$9<*#(@m-4$&$S&EdHoI z=s394&EchPYAkhAW2yR7YCTw1n{RY;PpS1(q4`@>i{-j$q0oFNG#?7hhe9_qXfF|K z3aqyaU0f@w%?uh&!Cog8uc^OOq5q^&=;p6t{^nxpU!ig;RF4X+7n+P87K^RC!B#)OHof@Yj_SVE6WnKg z(q#U?&3dJ&^=qN^US8Gbsu#H~?&VAe{?|(DA?-El=0E(;mDLll4HsM1eU=5%0fLp`YdCg4cHFa|se%J7I zUQ;(=;l75i^Njk>NVu=zbKVy9u&pP+8oti|=|7L)zNTB}{W2ZxWYxSM+Xc+yFdq6( zEtt=yzxvO`n8s#0^q*nyJmaVToC-JPq5ouz_Zd&!%#Ha7#!okK!>#_Y9|kw`MK^E5 z&HT{K+i+`mtdHPke(2^_EcWR8>~F!X;pwOs4ZR%=V^^@{UhD_-?ZZ()vufAo&!bfH z=+*qbj<)L6d^YL)eh?>jl62#s&-Hp`*ZF0<+^DiulgriK65RP zxz;PWZZ^wx^I5L{?2=di6r=TjUTxaea-3J2)OAx}UTq%Kb|SCZRc$Zws$Zz(J=c0M z*G+7>Zg$9ZlS;1jT3+=FwO-40Q(Ug~aIW=mUd`X>Kkww#CK3(5(0*gVa)UKk*8jQI zt2sxHnAfxU3}$pD>Te_9@qPGuL)C*LF46O%u6pj>tJm#TuE-M=<+qx%RVj zZGUtY0rQAf55at{(Efg*i))4UPYV5~&_XxQ7P|Sb&`p0jOM&TB#<$Q-fQ60&3hiGO z`cJ%t_Gb$1&lI}&TH~6uS6d=;D8&n^p>4{4BH|S!lnY z&_&2XH=`7~h+gQXlR`Je7dk#EbdzbJUvhe@gCN0sRxCQ9}4Zy6xy#Ybdz_%dIryHd#vM$LdOe*ju#4D*DAFCQ)qvv z(D7cOn_&vw{9fp|p zRsVF;RGV&^YST?qZLB}=oW@Vb3vH|qaG&*}u5(~ki|wkeTi~n#ZGRXZ_Ly1ufo-^8 zD?hN6AK11ZU@Ject^dJReqie#*vb!V+jX#&BiM!ywsOR{!oCl-?}P38U@eb2ekycR zcA=Z43LPIeSzlmNC-bGL>27L1HQ5itCPiCMpkJh{`PS5aO;hussrk@U{XqjI?G`qx zssGe3#LuP+Y|{m{=>k{jvf;pO-*4!84A{yQ%zCxd@pP%CoLrH-#l-IP%3KR=XQ zFYMb>$N7bB<|=gDUg$WX(D75D{}fT^II7TbL!slTLf4xM9aj}Pjwp0|Rp@5!HrB(? zZ!Je`U*Ohqq?<0=*nZ-^%}217Blg$f*78I>gqw10(|l>G`kA`~q1;$K0&6+0#vR(PEw$fXYQMeIetXG&9rhftoM?GL{@8Sat-gb8I>FS}jO$Er zQ(txc1#aqv{*y1<)QgPm72MPd{b${V&QpO^FW7#;t>Lr%f?LC9`vo`4OU7AtxUHPQ z8b147aBKK%$KclR*&oB~tS#?g4WH#5ZVjL19c~Suk)E zb()!m>m}wATpu(K;`%V`RTnZLjxL)jDjO%r<+h$-7;Wk`n!#HQ z5DHG=hh;FFz<&d-4|_-p&e2CIaEkuRxV{b>o(8Ami~m1+KjZqV_ZzN%dVj)B7z|?I zies^HZSNz;{3ZP*amDHPxOVc9YMg!FitD;Q((bSCuaD~%{ua0n_lM(puzxVFNBBqJ zI@L#h`8WDE;(DupE3P;R9@jhlJ8`|&zZcgB{0DHI<0Cia40v3h^`FJ{MgK)yU-l7a zoca#Q$Vu;x38DabjnlwibqvntUK-cVuqteDLiVn>4h#q4Iw*wZ;Ee1&amC5lj)#-6 z_rZ01IKlCviP1#IL{lTg4d)r3kL$J3wT{7=v0vf(b^NvC;pEtF9WQ}V7+gCf+vAE; zSaIDofsHVny*e7#W0MnbJvq4%*IBRx=*bDEj=>41_ux7wL5k#TQ(PZQ9)qqr7AcG? zZsfRa%`LWf+K(ALVJz&g`BEZKLd0&3aonN%jo;5{KYIAMvCdNZmfXiLFl;x>`eK|I zoH~KLiTmvU*w}NXn`4}_Va??`a}?}MY+$~EjfIEI*WO&ev-vJ)7qoLXk`uk%zBrqD z3%5VciayERJ$f?^+{rk`*70>>^J-z6~i{8EH-08DNKl)!ki+((P_QId`9r0ZI(e0Kk%P?sZFjv9mY(3zrz_F&Y1c>Kk}`^4IRE& zYRpoXFWpH$7k6BB)Xa_-|JB!y&;Hf@-?>K3{Hx6Wx2}$VRG-TA<2Gi#Ft|H}^!@zu}d;j?Nd)ShkW-O_RX zr}y;sExWetI=#Jorj;#YTE39aw6gWJmM>a&ZhfuwwQ1$wf4U6(yU+9i|Mk;ll-yf+ z@&EeE^Z}ba`Io!h)zy8v{Y)MEUq91l%ROHI>#qynnLblKQx7Nqx4J)j^|5RC(`T>o z;R08*eH446K9ok!OhD5ZFv3)gvcU6*M`Gr#JFzqH*=*XZ^OBr^XS za&ohd3u3z2xY6zZEf4X;D9C;Dl{a5mC2#ZLKYic)=;<@Je(OIywb1X~cVBNImknd< z@3tMX?GTZk@c;d@&E?w;+2%fZMy~&@cG%i^+sTyew#SmI>$dZDJYaPDO6PWKH}K%< z`~QRo&fo{yJZj+F>7#J{>aQQUxBGe{zY<>fGw_cEE@&891Pi(HGkf>hgBBk&WX~0c z{4njpp^F1Y4xcsLpEh&a%;DD!Po>_RK6_d@{H)>EA!i}4>9g@|Ccaxaq7LegJF|v= zBkmE4|37@r9Z?(6dqlqx{ib)9>)(7f8FB82OaBL-+xEJ9uZOFg-uu##kN;0(E646JwxhL3&-$ord9VJg>SY1W?@fiT0y5nAV zsn@-9Dzb(%8guzv6X?!*1+uK37%Q|27r_3%}X zpL_h=V}3a1hhzQYcAR$MaXTJA_qc&_Pd?BZ_skQHe`AV2<&5LsopJ^^|Ns26=9F~G znt$u-83=K~r_Fvpa?0`GnNzM?I2~1rr2U;=cd`F7d&*~1KAS!a_lKQ%!kKSCn+}(} zoch-E0a89}$#9WNGtnlZJm8!33WaA%ONe{z@hH*kgdl(kTc7y$~*I-@kJB*mdS{q^$ zWW3}Zfbo*=O_K4FcQ7o7E#)18G1BJVaj?sEsCT=6n18GH9Bf}b0sCT4!Gy~IskQyKAP;iC5tKpcH(`US zr@t|*Q1$jV5j#}=rm#b`zP~vvQEljNA-1UeEyWgus#L*V`6X0 z-x2nvM)*4iBZHCtAXt|g=kEdAQWN|kur76gKQw@4DSsF&OP%76faR#E{v=q8y3{{Z zY(x1cz$Vnq{zNx=T8eh4j1*$h25nN{(Z2t zw7fqDww5~i55d~fD*nT;s?^he7Iu?1^j{OJN&f4wm9)A4ChR0_KsP!{*Q} z{`;^a^o;*6u@2;a6@DCk?0+NnfBbL7CXWAoG%gzF{|GBMll`Ay1Ltu6=jin4bpIFF zvzg)l3R^ap`M*UsM>qSw!&c2*{vZE`z4L&RqDcRDb$3fC{jJKzl zQCq=`+8}VAam0k4VN4hhXo6V~MZtt3BB&TpF^3&Q5fv3hP)^nn zcylp44@-bIw`cB$$=l#F_r$14OWxt#$c`8c`@j$w3j4x-a2O1S!{G=x5{`nS;TSj; zM!<1!Je&af|3o+mM#3mK8BT#y;WRiM&VVyvG@J!z!#TjU3Vp3(;anI8<6#2)3(kY{ z;WD@!u7E4yDwqVRCd`7_a5vlo_riT}KRf^r!b30z<^p$8Ucn%iB^RNV7fTi#fybQ0v8?X}IgjMhkybE8zm*jyeP!*~{ zb;yMpP!noFZKwlvp&rzS2G9^1L1SnFO@aJmM4&mefR@k-T0{sW1(u zg9ncQX@ob^F_*z|AiYe|%Ot(b74RCo4y2t)+L>>{+pr2qKl5F958j6l;6wNbK88== zQ^<$a@ENRu&*2ML3#7Zb4!)w+qD)w4!CSyN@O(PfCfE$W!S7HY9BF`r9Hfb?tlsb@fC)uI}<(HIthC@t{^u*Z!fxtrF#JC31}qe9!m@ zK88=&cYls?I>)-e&r{b^>)%z7R5SS0$DQLR?9HOT{j=yFp6MsTv;2f;TJ8}J;3&h3 zj^wIIgs+DG!1cuTRz4@g?Jxy&%stl6fXtbu`K~=3Ja`-yz(U_GI&-yh&%Bkm7wy@k zoIR830IqU4q>qp!&Pn2&B+g0V>=EZAaZVEFByr}>K=z%PhUQKO4<3gFu+UEyowd2~ zHurcHyaVsTd+@y|pY2^LszPv#`-1a)fsLov zX4z!oL{s@mvlckMYu@U6=Bs|5xt`B&ea|v|*RtRu!WY9Okbp~JB3uTS!xeBPTm{^F zi+gWf1KfY>TDT4<3Dymegd5=|xEXE%&TElA)@?u8D4=E@G86pufrR#65ga7JnrYo1;BO6*Ql#1k!SQ>8RAE%!;15g zo4J2{j)UV;CJXxs0OF26gIrpcgOzm!$BR}g*`UW3=+4Oj_p`pG}2 zy>zT|sr7S%Hu^ZqzApb0f;ynQ+?W)tveUHOoS43s+ZD@l?&Y?{>N-Cu8fV8yTd5Vs zYTN3=k|~+44@=yOw4a0e-@!xSiWE0> ztiOiOyHJ#=ex&FqT0eLEC}FMlCE_rIbL;b`RVXI(7VcKJkijw1mcCY_goqd+KWT&^ z2P#2j^q=cDhe9442FJh%I1WyPi{Sx(o<5qD<2%*>-;ojSSz15yvaJeY=cTSoF-3qR?xX%Bh zYu(uxRCKquJqCdvuQ12t;W>!owHXA1VILR*Lt$Uo4-SLja5x+RN5WBXG#mrR!U#AH zj)xOKdxB1clVBu_f|KDCI2BHV)8Py_6Gp>Xa5kI+`hN_Jg>zvXjE4#EFE|g*hs)q{ zxB{+(t6&mb10KwPnJ^1x!`*NX;2Xq`MBbek2z^l8Yb7#gF9TM{>ne@H9LFi{M#!4i>}numoO!rGS?cKaz_d$;FT4 z;zx4vBf0pIT>MBbek2z^l8Yb7#gF9TM{@Bax%iP>{75c-Bo{xDiyz6wkL2Po-vNG^UP7eA7VAIZg!{75c- zBo{xDYmlz^kzD*pE`B5zKaz_d$;FT48lE3BX22?1DELtDE4lcUT>MHdekIq8!yuTz zZ`bpA10>-_xCw5CTi|xM1MY+=a2HI4X)ql;*vWPnekm8fl#5@=#V_UJmvZq-x%j1A z{8BD{DHp$#t9`}zrCj_{E`BK&zm$t#%Ed3`;+JyqOS$-^T>Mflekm8fl#5@=#V_UJ zmvZq-x%j1Aa}9hBMim{wWv#l#74L#XsfZpK|d}x%j7C{8Mhw-ZW94p)em`JNFtN zm5Yzc#Yg4hqjK?4x%jADd{izzDii;v31N9E$9a`92Q_^4cbR4zU$7ax_2k4oq7 zICaV(7!3Qs5WpMux3`;nfCuz%Z#Q1%&Jcqx@IUr;m#C$7pXWP44YTKXzSA{KS?_nc zhS_sH;H`sxva6|Qx`FOj(Atox`)3iJ4R=FXf1GPR#QHf<(l6(lkFqY?H@ATA3qkwn zp5_xj9ld=ny?rjdeJ;IyuK5B`59_*A^cGi>kGsKbB4OMPcfg%61@3~WFb$@I2Qy$M z9>J2acM4-)zBe%)`_f*;B(Zl&#oi(IX%FMme5PaX5POH%JH*~0_71Vv-bYs|k&u<3 zDl`GE$X+cHp#-dfpG1P52i?D;eVPx!9LV@IIlI;?RgJA`8@KsfKimO#!W6g*rouFs z4*09F3b=khAr(}Ds?dbKhSfgjg*EUK+tmGAO~_x|_rLp2DP8Sg5AQoAcSp$G5p3S% zZtO?hv($vXNo>`U{ir|T_u7;DQdNnR(!LR5ER=a0^}7D1>$FONPw0KoI#a*z5%o3o zv!Z96o+?JEpgMvlg(@DA!bp^0>yCkP9!ER&JU~HdQLm&Gy)sbJ9(?wNesC2OE2~TI zmR3`j-Yu8jEtlRc7bVE3sn#Ps9>_%z^qtdsq}9}=r^}_M%O!RhHPuS$21@!IKB;ol zG|(ejI;xr>XqBuKT}s7Tk0;5*T91#|daP%mQ?uc2DE|u5T2}H3yh26IzJiRRy4V9+ zQT0_gX8J11SJmvRXb@Zlz5e>X8rXrxi?9M16%gd9bPN+k7K*-~>3f;JPnmI6`~Q_$kN_F1d6#xk9I`K2xE6RPNb|?~6`Zeb)4SNS{^PLrzhu>FX`e_9={! zwt;k6sW4W%Bi|(g3#4SK?b>{ozL%NOQk>^j{$ZXgKc8v4v%Hd`Ew|!)_7q{Aw+i!B znbNS=ALgSO?5)ddaSHET&et)@4b!U2HKsqfdYL#ekHJZOzzpy`Z8T}RdlA( z^=17ak8V#Hzn?OkZUd!LEZqi5Uw2lSEmE&cDfr_Wxoo+uNOQ|mEPdS-Yi_3eZci;< zUYTzEhqX`nDwZyz+mb5%u~h~_Jg`|@ky|td7muv=$ZPL-(KuX2(gohwOr4~4abnsw zVkEB{8pA%7#MMT9qnlCRTmTDU5iEx1VF|ndoAJn3%Q}}HMXJx0E|2)^I8T|e&PAhz zbBgw4ufo_B*OY}Lqw&MXiO(Py4Ew+kzytf2?!CDhi{l!u!2|N}9@T^Mq9_`#p4F41 zM+E;hdvdgYsXO_y2lRwq&>Q}w-kb`1Z>}fT-vCM2v7Vbu8zWJsjZxCZD`_n)piC}= zjMbzqa$U=0`?!|!{Y6*?yQWu1Kku+Zy*h!vP1jNMl9cJ$*)_d7u5J$~llBvNMfC(m zj0e3uv=M#o= zD6k;}VaS0>P#LN~Rj3BlAs1?ZezvO?)P_2s`zv%0cztL94WSVF+8Xb&BrBXok!pzGc)&=tCYwk~@>Pv`}`p%3(he$XEVz(Cj=^ce=h zVAuzSz);v1_JhM#ni91X|7u`mLTgX7@@aNtBZ2}Z&wI2lfXQ{gl?9nOF= zVKkftXTv$*!Wb9}=fXG`4-?>Da2}iwm%-(51zZVN!6di_JeUD9VHV7WyWt+V7w&`m z;Q@FM9)dYA7aoRr@CZB#^Wiag92USrcmke;r{HOL1{T4y@Ek0L=V1xF0862`){bI_ zMj25Q#X}dx4vjLRD9VVUC?krZj3|nVFW^fNWkgYw5k*l(6h#?P6lFwFlo3TyMifOE zQ50oFQIruyQToTCMm?wx4WJ=3g2vDUnnE*(KyzpTEuj^(hBnX^qRIzlJt z3^C{eU7j2? zjbblGu@|F^0*acX8KZ!ri~@=>3Mk4bpeXIZD5HR)i~@=>3Mk4bpeUn&qKpEHG72cl zD4-~#fTH-zqS%X3Mgc_`1r%izP?S+XQAPnp&Cg&Bd=8{Lqky6&Y0oI2D5HR)fk%om zf~^>}mWVhbfuf8AiZT)?O3zA^Q9w~f0Yw=F6lD}pR2m>52Py-3h*3aMMgc_`1r%iz zP?S+XQAPnp83hzoCJcqNZ5YKij4}!+YQG9xC!>I(i~@?<#D`Hp(Gc-x6i_ro{22ul zWfV}9Q9w~f0YyXK!Y?AqD4-~#fTE(#_Vxth?WQMs>%GCu=tW#bU5@S2%k0w2?9$8Z z(#!19%k0w2?9$83xB%c8GWy|MdYN54{!EXZ;`lDT%`UyoF1^hzz0EGY%`UyoF1^ie zaO4IIX7X8lhiReyo)Vl zk=;uk^o#2|DmoaO=y9gTHeVGn-Os?hk}=DJ8So%H1an|6JPh;T5qK2l!(;F`EP#dZ z1Uv~(!PD>zEP`j@IamzOiOJ+vJY)rdqL8D5TrxVlb*$XDm|Jk({H1FRps>@ zXPyQvx}KuA2mP$sS1L?(JkLOm^l5jXFAj5y&vWAzY0^Z0-Y)mt{9P+C$H3p?LjO7z z?{2elGuBGk@$RKZitAdb*eWTUe`1e&Dq#dQ)9$O4is$Cp4YiUuHt-u1`UkXqY++>u z7Tf-O9stAPc%HEx3F)VglgvkvJ?l)eoLOf)Jp-Fs$7s~A;A{8>*2A~(9efWP;0O2- zHo{M^2{yye@C$5#|H7~E8~hFh;QM*D00T_0K!O4rLJ)==U{tJK8LB{4$b}kE6PiLZ zh(L2_0WF~ww1zg&7Pez{H|F3dca|Oe^UEp!jM6B5*Y#+PqR|;uO8lzr`)s>DGpbCt zW%Q^=>~j&4&-#<(EATFS;ZF+9gjxQia9w|ru&|=@@c-oLxku;=V9X_F$O}ex7XA{9 z=uD50O$0t1M(2lu(Ms`XrRX{JB0^?H8yAf<)=y9*vE!2*Gl?Ca#Ews5$0xDl zli2Y|?D!-xND_l2zAbIPC$Zm?*zZZ~_aydv68k-g{hq{rPl^yn^EisfQ9O>~aTG6e zgy4w{FW7>aTR30YEty$|tv$}?aX#%s^EjW!`8>|&aXydpd7RJVe4ajH!3N`YxC8El zDR37|g=sJyJeUD93pPjvm7pp#Va}V?1sg&MSOY&5Y@lDjnt>Q)mVeXbvr)CA5Op z&<5H<6xzXF&>lKKN9Y8dAqHKbD|CbI&;xoxFX#<@pfB`;{xARr!rr8BIZykOKOE9a z=Q)S;a!6T+lyyj1hm>W6F?cWoX2J{jKbOLb@HNN$2G+y3@Ev>)8{h}{5jFz(###a& zGFt$CQPSKY%^lL*k&Of2sY5O1P>VV0r3EQV&k?khnR2K{h4l{Gd;lMj^ZFH}WPkrCIiMgZ2g2SEhe0qH_JJWV6!wMv zV1GCO4upef?T&(z37-O|!f9|ioB?OTXgCYbhI7D$F)$X+g>f(*CcwXl(|O#Te-p3s z`F=5ROAx-5@MO3RZihSIPM8ABvnHp)G?)$^%z&9N3ueRJa1Y!I_rd+}06Yi}!5ny) z8ii6B%;!L#5h8Zh>#;9 z+z=r*M92+!ymf{=CR%8VPgl3D1mBl6@*YKC{|$N8BQN2}ES1uNA7FdQxb z<_qKg>eA+_NqoN=^z1AD;WLd{2z`m5FWQHweZoN>mExLJP4d6R zIkSA1*8ALpe{qzowS_VH(9fl8c)V5ULww4$^-`Y9)~CR!a2lKrXTX^-8qR{V;T&Kl zA2|lb!nrUGnCngIx!$JI6R*9ad1zFg&@&_##fh_fVi2X%K|zvo0DBCCy&(>RU@+_h z>?Mc7zOWxK%bYv_4upUEacX(WK2{4eYRSojvE3xLo5XgL*luzPV7p1~yu@~s*lrTr zO=7!AZM)5a*>E@91NXvxa6dc%55hw*hxA8d^!PUTwed)ZyCo}S8 z&zMNw^~k#(dAGz2iR1?Ed2p|KaW6cs$K#$Qxo1hm{G;kC_!{)6!u7y>r0P5P9yY)a z@FQ#l{S*>C8H%Th)z6^w*%tUO{0hIp@4$Sj%4Zyp00Zc`uq}|Fz=jZnAqOf!WvBvG zAs1>uO=t?(|8@kLLknmLt)Mlufwoxm2k3SfxiB8&gUl74Of7W^xaijy(AGING8*Qg zVICUhp&Pm0k(4GL(Qd@Dn3v z^hkgN_3pdGE61AdPokEKk(x1%AV^I?YKkB=855wMq;}rXXG*sH>4mAZRP>BZ={_d> z3(O_9linFU0#4N2*`s8h1Y&Mctp_gUU<`}}J#U(!b&IyBZW|MO-451!h!9)e%a-@D z<-KZ_zd_yOZ?HFu%J$EUiL<%m3GR4;tvt5!*ou0WXZGI{CK_ac1f}%|LJ)==s05Xv z3RHz^P#toi2GoRFP#fw%U8o23p#e06M$j0VKvQT25oiuApe3||*3bspLKND;UeF#o zKu72VogoHYpeuBP?$85zLNDkIeV{M&gZ?l82EyJ2D~%8>+A!n*En1^8Y~qe=hM(aV z*aH8BU*R|S9SXpwr&@pkCRiYWF)^kMAqYbbFk^yQ8L9v?Cz#csI^;qPs0p>84%CHu zP#+pVLudrF<4nfDm`$M>M4&mefR@k-T0*|aBAf&xVH98;nOH~Wsc;&c4rjobFdEK+v*8?YVGN9gb735e zhY9d6I1l~}=L56LnHR!EfPH6P4p+dHa1}5=w#oe1<~6_^+2*xy9n9hdezW0jcnIde zqwq8@88m49nt+XINl;)z2*Qv9m7p?IfvQjqszWZ+fSOPXYC|2U3-zErG=PTC2*@86 z`NJZASmY0j{9%zlEb@m%{;*m>YiI*)AqwqaFK7=Ppd*k!Eb@m%{;e^}%X z>o{6UsIhedIB+7I1lS)I?JDbJI0a6H)8KSC1I~mc1uLyp1uG@-V>Uxq5;sZQByp3( zO%gXr+$3?6#7z=6N!%oHlf+FDH%Z(iag)SN5;sZQByp3(O_Fydc~_EmC3#npchN@| zd(p*Sbg>s*>_r!Q(ZybLu@_zJMOO}mePKV?9}a*6;UE|VC&MXlDx3zV!x?ZUjE1v- z{Dy_=V&S@2xGom1i-qfA;ksD3E*7p!JI}>lbLAy)Gu#4`;WoG(?tnXC3fu)#VH!*a z4`#qjm<6-pZny{Th5O)scmN)RhhPpo?5~n5_*{vl{wBNypJG|9X5DA74y{%GDwX4} zq@6QDRrWtuRry{`^j6jV_f;<6Yw*1m7I|%K^ExO-TNGq4%71bJtrTzzP!kvnSoE|- z)3Y~U%=QV;?a!$NajZ0fl_s##1Xh~BN)uRV0xL~mr3tJwft4n((gaqTz)BNXX#y)v zV5JGHG=Y^Su+jupn!rjESZT-=@RCieG=Y^Su+nHwfdmX!+lCN?AqOf!WvBvGAs1>u zO=t?uAOg*y1+;`#&>Gr6Ti7hdps8b+Vbcv$Cc~7yFl8@Heh!nL!{puYFt`qD$7E~4 z);uDKb>^vRw8>Fjd$YfVnZmaOHe1nJT4P!2Op6H5sNNd;N&860?tnKj&sd7L`$brW zr*JvE1TVuYumWC%w}Y{fG3LFGG4FlMcn{u(58y-i2tI~S;8Vzl6fkbmSPNhJF^g7< zMT^Cn0W)D1+zt1@y>K7g4-Wty4{IJg0*}Iccnltg1wc#OdIFw=r{HOL1{T4y@Ek0L z=Yja)^~{qdV>wHDKJ)N+J8~{9rM2AoiZ(#F9@K~4>0Dua$=hwd z6fx2?j)ypohd6HB2~*%Mz(ndCM{$I%rlEGB97-+ z_ZY;vZ~A`eo`ZM@-&kl3`~;g|Gh>+s3wodgJy7`j^C*mYf*vUR{dxHN^YHiQ;qTAG z-=BxSKM#L@9{&D3{QY_O`}6Sk=i%?q!{47LsAEJOs0;O=J~V)a&EMq zrDS1mF5qnk1r2n_f1g_Bea3f_9tP=QkRArI#>- z!lkZosViLS3YWUVrLJ(PD_rUdm;0_q(dizN;$ApvZ`~6Y_&!nCLjZN&LU`n{n(o z$Br{^wxb54!$S&OW`y2=e+h39=~RdM#iL&Fs8@>n6sHsZ06v0`;S-Kn+24rLY~-j9 zqW)V{6xr(FOZ%9DggsFR%0KVvDB!&^1&Q5qR3R>*Hu0!UJZck<+Qg$a@u*EaY7=}1 zfS-lh#G^Lxs7*X-6Z&-_7x1@Gn|RbF^lSna3$=+yZQ@azc+@5ywTVYKLtdO%O;1-jnv z1AT!qPi^8+n|RbF9<_-_2~AK!6O_;dB{V?^O;EnJZXe^#| zS;21N__}Pw1G`BSddTA(%_Vp8J9S(7T`M;UlUmOLsjV!)St&vgh8(B_m7xk$g=$b8 za-jy)gj%5A%U%cSLOrMt4WJ=30%~iX3KTpQD0nJR@Km6{zb1GpP>7b$3R*)OXbY4c zo(dE^6)1QrQ1Dcs;Hf~tQ-Ok~0tMro1y2PEo(dE^6)1QrQ1Dcs5Ivz6^oBmr7y3be z7y!(oFm9Nf}A7BIf9%c$T@|oFm9Nf}A7BIf9%c$T@B!mG67HIW>Fh$uAPcQ=TsaF!{8A32jsy&;ZV4mCmyfmQ}?xA4>v#(ZiJiQX1E1z z1$thX;U(7?$fq7P5r;uA81?~tp2kqv7xn|B`dI2?|EBjG4G8jgWuVFcjGFz{p;crpw;83vvV15bv5C&R##Vc^Ly@MIWxG7LN! z2A&K9Plkaf!x#-`!P#&QU=bNuLSGyWt+79b()E_rnA5AUp(f zU@kli^WYJ96z0QY@Hi}hh42JC2~WY(@C+=1XW=-0`u3Jn_x5B|IFtvum%1L zzrt_uI~0JA_g(;R7qxi1sMQO4Lm%i1{h&V#fW09OgJ3A^3;V(TZ~z<#2f@KG3=V;R zKpy-P4u!*DI2;Z~z>#ni91X|7v7kpp()*148o_>zV82GNUnAJB5$x9p_G<+DHG=&b z!G4WkzeccMBiOGI?AHkPYXti>g8dr7evM$iMzCKa*sqbySOx6I4b%b=Y)FqD>|{_2 z;I%It_2bH#tg8o&gQr9s$-Th7btKm&xi-nQNv=(DZIWw~T$|+DB-bXnHp#U~u1#`n zl53M(o8;Og^P$M&;CMIz95@k9f{}1OTmTosMQ|xhgv;P^xB{+(t6&mb4cEYb;99s2 zu7?{S2{*z`Fqi9inA&X~;YZ+6cnqF^C*di08lHhgumoO!rSKvwgXQoNybQ0y8}K%) zf_H$v8~G8RpFlpOU~Ql(uH3@C{4e~9wT*{gaj)^3C9qZ;Y~}=BvjkR20-HI3$1I`f z5m9*b72bTseO1&ov?G#=cD$k;uPEzk4xf+WGk6&v!z;l^z;tcRHHV0I=(Au{pcC4_ z=f+@kpcDFyw-wqV5e`8Za-cHQWMo4kM%QPCc3x;R$*b#4xwySJc`oL_f{N-W~R{06q=brGgD}0 z3e8NRnJF|gg=VJE%oLiLLN8P3WeUAap_eK2GKF5I(90BhnL;m9=w%AMOre!2v@(TO zrqIe1TA4yCQ)p!htxTbnDYP<$R;JL(6k3@=D^qA?3aw0`l_|6`g;u7}$`o3eLMu~f zWeTlKp_M7LGKE&A(8?5AnL;a5Xk`kmOre!2v@(TOrqIe1TA4yCQ)p!htxTbnDYP<$ zR;JL(6k3@=D^qA?3aw0`l_|6`g;u7}$`o3eLMu~fWs3SMMSYc`zDiNfQk1h4IsC=)5lM2hl|!ur3D7I|AN3qvi!G7hWv{59%Bj_{Fxv-;ToR(-lwsbyi>3rJK`Lw0;X-ntRmd>Xwoljdj zpSE;9ZRvd4()qNd^Jz=x)0WPsEuBwWI-j<5K5glI+S2*7rSoY^=hK$Xr!AdNTRNY% zbUtnAeA?3aw59WDOXt&;&ZjNSj0DgQ_Ja1%0Xjk_=nOIF0$rgSbcY_$6M8{!=mUMB zAM}R-Fc9{JxW7USg2Av441uArFYE{Va~BVQ1K}Vz7>25lZh>22GI+cLeg^x@ zgjp~f?uL8dUbqkLhX>$6cnIdeTzDAf!6Wb}%!kL|aaaHg;R$#Wo`R?08CV3*!gH_~ zo`)sy0xadd?=SKBGQ0wBz)E-%R>3>)E_?xB`YVi(IMN714pf55P{p5TROPp7P#toi z2GoRFP#fw%UD4mD$7g+L01crLG=?V76q-Qq2HHXt+W8HPz4&Yo z9iSt0g3b_wF3=UaLl5W)y`VSrfxgfW`ojPih>w16h{GTl4Ew+k7z+Esen5Vv-j7r7 z$Eo+@)cbMj{W$f0oO(Y_y&tFEk5li*srTd5`*G_1IQ4#iszNew=zgPQ4$e-j7r7$Eo+@)cbMj{W$f0 zoO(Y_y&tFEk5li*srTc?IR6V{Jl98lHptHg`Puk4kf+gvxN#w$7s17F2_)cBm70u;YPR#ZiZXnR+!9wxAA#9+yQsO6u1kf z!Zer;9?XE5Fw1XGTdh59wf3~t+8g)6eQ-ZK01v`LFbC$s!!QpXfk$CJJO+=$0$2!7 zz?1M4JPpslB6t>_gT?SXEP)sN<+Rn7(^gw+#~O$BVNbFV1?rIP3A^tjCM99xu*%ll*Lwm(78&H^gBOTn{%u5^jW> z;AXf5ZihSIPM89B!Bm(A)4_wK@FFaO6h4PFQ84wJgWr0y`^2I>!! z`opCDFyDjs;RE;(K7x$zN`5;&U@>5yJY7&)=cIUm*=J{e{>+aVZHaf1}Ldvl5?``K$s}2~&Sb>Mu#% zg`E_a)LpU;)P;I{Z|pCZP1vp(-yin3$S(z0Y~!v0=`eg>bi{cUhXedSHP8U6-=VP^=f|q4_wRl>)?9A zH}ZKC+zhwCt*o02x5FKLzZ0eqz6)k^ee?YlHhIUMW=MNFcre3XYR`nn2`_+!@C4tV zgqQs|c4XWpkJzsQ`NSrl*yIyDW*cqN6f19Ih~tLH2O;u7h#``GwxXw`pb2x}YR_ zlthn`=ur~Wy)qy2nbk8xN%Sa*9wpJEBzlxYkCLeUp&n=RIGZPCWA8cGdk*%VgT3cq z?>X3e4)z}2O~6*g-gB_`9HGa+SA*)n^A^~94)&gdz2{)>IoNv+_MU^i=V0$KA`==y zBWMittz+*w*n1B4o`b#TVDCBDdk*%VgT3cq?>X3e4)&gdz2{)>IoNv+_MU^i=V0$S z*n1B4o`b#TVDCBDdk*%VgT3cq?>X3e4)&gdz2{)>IoNv+_MU^i=V0$S*n18m`Q|Z_ zZyqE0<}s3Q9wYhYnF6@@DxEL;>&w^1j_+xbY&asyBoi?~d8{B$>bt~ab z+UJ$XTe`(Oggy-YT+Yb_^9rBG@zfaBkA?AUr=Pme&)rEQ#26V9Q@_G*@H-TM&oeLr3}AeOZGi*@HiRGyIlz2ajEspfGA72zn3$alHJ~Om zg=P?e=FkFKLMvzuZJ;gCZl>IMlr@jC<_U?a#!$}~>KO~ht?HSzwy#f%zAE-~OlGp7 zj*L)0MyMCdo&7}Uv9SpeGG_;4V_niFLE6OCUGy61d;PffdjzQ(q#(VlA?=gYK0BqK z2)cl6=;zeiQU^G+6m|dU_P#||kL+_S@~5O+6y~G6;Ax!;h{x96*K3m7^oXCNXs}KB zcU$vr@f+&Xd9^U_3H{FE%w5vCF;VC#n#eO}j6os&ik}@xqGm~2!+P{K{m8`9ReGeh z-X=(2>N1yYydV{*SAvn}TYuIz7+KCWJCvpvDdllwef^O#GZ_WxPj6oF?2MVY+sn-K zUf7RQ+PCBRNphinN-~f9;|g=1R|P$W`%XAy8FOA9PMdq@{;;wBSARZZOa!Bm@lE`} zAJ?t7oCHCr{LM+{;Ll%|{X4m1hyTbG!CzralYVY_hoYsO-fFS`s_*K3bWF;|6t7RI zzmjVhpR2iPkgO!NRsO0y|&iJqxiuJwsY7fp}$ZIW&Kez@TZprDLy^Eu=IQTpBJB{ zUsYw***Q> z+?1%?tsM#9Xkm%hb;Y*ahxBo`cFaHgE#ha=&MDrOe6=cFUlEVbGwVy$G{x(SLYXZK zKlO+X{`7T~{M*s;RPrdh>RWO7Des8sa#!9j6|eKLeyEjl3$PFP&&zC?QK`aOAdy+G zKmEM)c7_gR{g55I>~OlQXXlcFdBwXKrxk~HOUU7{JLwt6_%l7;T6{x zoJA{C`FV*umEgSfgON-G(%b5NO8;@!W2M&>f8T2AJH^{&hy19Yqy)tZ7E?PX3x7!v zgGjojELpE-@0ku~r*d)LVSlf9TVH4kCHq&N?Aq?XLYpK`%~Z5EF%QmD6!VIX>SoSg z);i({M`m^_dz`J_)68z$_*wSog*zs;@c^Q{JdxfvyKH42t-^C=Z}g{zv-82uotWAx zQr;0VXJ8aqMx*9sLgj6**ZC>EHJ?R!i*R1B#?#B~|I5T8vuA}Vk;rWEho4SGTkN{j z&sKo)&Q_$r+_Cb0FT1XIkFvk*%o?p$f3$ybEmXGLm)*BiJBsJT%5Jl5YchLg(!5|p zdHWS@+L+_UgiL+I}ecLtyhKO0L_P zZ+mhY6<$}~&RpLv*tgu2+XctnrbCp<15VLS#UWM|YE<#MAmo3;Pk+Ln_THA~ZPa$h zuF7AuDcA3sODS76iDhydj=fJS~kgdj;PsICl0nWy3o4^&crz7}7_EqHpQnx4tZEO=s7Q zWz(l%yN;edcUt$$w(-iIyZpFj?riB_%f>Eyi}Gv!>@CWMOO^UygW#Sn=DvDmx8IR9 zyXH7PPc;*#cy?367in3ReZ53qp{-e)y>T7$?|2S*g#+edToI46b@#3wFNcw7u*A$1cV^=oM za$mN)Or=xik6X>faVQzu@jXi(M}OPuu}Y+Puy2wPaYY9y4y9M=?^$;%z4wMfk8jal zS%E}Wcn=Nw4;DwPoDx;`4i#@+K`1CWo}Y&GzIvZOa5iHE4jA#o8P-Qyk~~~tXAyqyn6o=(&wGh zXDH9|E#I?Sde8E{7sSe2OP=_p{Pn~rQQk)qy|Ls^#t@wC5|4U}PO}eeV^T#81c-cpx z6}Shcbzo_3&=zAR&+9lB_a2s5TaF*>k8MqVT=reqzOcWt^!Ay1n*JPriP3I}WjW{BioL9J zPkDP(ygqyD?3QHq`acdAIC`71-qwOm7456@bz0dhnO^(X`SaWVIdLtoU;fWI^Y)#^FH?7K-~NAvt^GCS$FhW7 z=oW2L9LlU(T-1~97KJju=}#y4;sr~Q>60lnZZf@1;U@pp9 zU(?FlvUpvIx}bP&rRZH8TU%-wUOiekF; ze7AezLXJ%At|Ra2<8D2s|C_tFBiC4AdEJqN{ptJo%n|VSU-ljNUuabJ`L{h>IFhN( zw(n7LOXeB-%lwr$YHN2yerHp^c>m(i?uaKf{hHl#+&$%}f0f+1OWO(CeDlleH{Rx* z>GjxC{&rofKjV+zbyrq)B*m^f_MUqrf9;+dx8j&F_vK&aFQ}q)4IWW+j_^EVtv5>H0vkpXKT8(h5uRBZj9Y~D_alBs>~AfUd&|A859G;mg7u+1UtVObmzT=9)&@CG&X-N)=-L9s{$!eOK zA@5YP)NDCT-J|Z6o|>cP%b9ACdQRT2o>$A|L+WMqx}2|8s+ICd^_F^9KBYcTAIay` zrz&4AQLEKzxm2yQtI8McT)U?H#;#-6k>A<%?0WKhyP@4sZm^r!ZRHPkN4ux|%^qS8 zQMP@MeUJ*-ci2-^*q&!UrmEU6+i$3v_GIh%|c$tQ<2c!p}SS{(EQMR)grVsv{bbWeG*!uT7|v{eXZJuz72h=x`ciRZB|`F zzl64^-l5+@zpK7sBW$StVJmE@0bv!+Q3J!3!ZvOF~T%XBB%BfO7!O)4k0{O`|+-c z{l%d?qkWh-R!A{|5w8uz@!~vwJzreKa+0`4^cB~VuUnAEC-W|f2gHNSh4T>qmBk$X zE#}2pCL&^mc%9{2;%%1i^B)nb#b+$n@*gom%!^scsAAL+jg7iSGtt_J7!gs$7+?%w zInWr(Tt4SA^MA+~XPhtE8W$KBu;xNzl4xXHZQQ~02}cvEa;W0o-|uvy2fN4UP(h;U=GHSaoVYere_W%gy+&m1I7bFeu~)Yj!$G^ZpF7YCWgm?M}e z=>+p4_PW@-m~AdGCyMswW#(lZ?Q-)v(ZsyoyqWMV<}DoOR&z3IZZmJ=2)CPhrlJ|< zOi{(0W!^11n)jIZ628y8Pvn^Qn-3Cx$ehFaxy+JO#e9@Et#&l$n+pgpG@oRfr_84a zKW#qE`e)3ggkLmQh-T)i=Bpg}P4i98@|O7)TfS|+O*mzy2!GA&_lCLNTu*$yHNPc3 z-!b>SL7lXbZ8kCYeGWC#X4d?|{Pu=L;)*JkVM*SJqAVp2wrr~_;ciwpCY0-LbrX!tTRO&YqWKisArvRox{6` zT+3yfG1eHuW390q^IYpf!WUUnc{|-SYnrG|{Wyc=Oly{CM=kjP%LlEwB5FNsJpNnIu3=gJ z#QUW>Tbry+#A>s}`)YMbdrr_W6@bQk-jvVCX9+(ipX1lX@_Bw;!VL9>e1SRYbL3KHsW;?{ z%u}BumoZa)8@Zgh>J9l4v(@Lwmzl5Lkgv#BSieH9;ApSP*Er+r%weA+-;lgpS-vUX zB>a|qoA4^Ritsz~T@gcJ-V;^On2!j5EI(o2Pvxg; z@^iv#e zRY?p)tE!0uRCQ*R?4)v44YsVwtdav%E#4&AN!3=h*`|)FBTiIxRb6oss@7F>SKU-M z(L;4t-3g;`gnO&rg!`yIgwZ+CU+Wx8bdDtoCu(YiW0p1)j_~p7crjF+piU6|(7BUD zH#Jg?WX&iwiZv&zQ^dYn`3R$YqL)@a(MKyE%L~*69N|KBA$wh{E*5*MOVlM|kV>co z;Y-z}gfCZDiMnc%x|%KjqyEG4T6G<3u2=PVIdv(;=NQP6t`->dHB*Ewnqzs^;U5T38*i?(R$BGE-XtDY5I)pP1O zaV+}!yf{)VQA@-K^@4gq9Ho}3rEK$}S|$do?De{OT@2GoERI2m z-xB+%x7FL?5VcCJ68})|sCQWNu6kD-heCfK4pbki4@Fb;k@`p+k6M2!PEh%ZdA+q} zGe;hpEo`mXEYWN+Qfsytr8QfejAl0x``Jx-hr6wnTQt?m%@XBi{T(*2mUx=2WFGF9l@4C=B)_)cHS}3jb9RG*V4{Y;e=tt2h zv@x`iUw`6V<&{I5LYqak&=%(HY>5T%8}a#_xjS2GJ3v&{b^u`&R>BP1yo;etIK-P6 zjBpO`VrZr<15q2xpr)uEt`)AuuXVz8SW`D#mvFssebzS!HxOYghDPkwINXHeM0j6= z5pEG~Nw{^mHQ_eAy`fFGE$?qI!qG4z>%#5A?Klor1xLWDU`y-?-VS9N)cj&^>&zd~4B4|T;G;!VQZ zhNvr6iFXNWOQLRINz@fz@NWe6L|ts`FNG0U6)mtTx)SbYbi-EYjy+*uPn?VOpe+d_ z%aSm#ByJV80vo~zY=|m>mC!P<5}F29LVc`+)uO7gmiJ>;4Qz!5fvpeo zHpVhAu?+g5lmpB`EC&}_0GEkYf%cnd|1GS))w~t^U^1#-DNFTh1gakiRKG@``jrCJ zuMwzz1l6C%8{r>8`}Ya7KZ5o@&YA`0Lea>40t=v0U;)$!EPx0Wz%%^1$Xvv)i_I5U zF2x!!0&AeL`5M-M5m*D2umfXZ|Kv=806==B?XnD;*%MG;rLQyHu>~NsjIe}*91e)C>(Cj9GW;aH&QJ_Gfm2T@` z4ZMXa8-XhCAEpkl|)@W_+6KHcwv>A&eQ04llasgrA@KR+H5U=gM4;Py_uovh>@Kb!1)EXcd=%ez!!wo3K|? z*%S?HhL#(FmYac=TY;7z5NLT{IY1tWVjaxeXskfds|Sj1$&2O1qOZI}@_s>CTHOx} z)V*?`?m6;d`LJk<#y`pt=A-eIvXd~r#q^dY9`xgweFFn);$8XZWgF@N2S%enR-+`igIhs z<{czx_CbMWw?ng^7i|Ky9u}x|n?SAGq1G>=!OPI>A!znXq8)0zf-T=rZ(yTnwLUmd z>)wG{4-M3Mzd)^ftM}FW*dkh|x#nyg&v-z$_)cm zZfM_R-^5!+rrEqf)1G0^6uI`}_Cmr>*iRBpt1`1Uul3jnl-LMu2yI{+t-&(T;3|OzSEUvH z3)^TVuAimE^#cvAkNV~aD^Of3P~4nAaVrIiYX*wjJW$-6ES0qiRTgb!U#+Z-17$S> zWz7kc)d&v@4?|yRwWGdTWuxJz!_Ne7gf#FlRT7(NTbV=lJ$SgNHu}VIXN#J_ndb&ygT3pZul4W% zG!P9@>Bgc7do~M>z;YXopkuJJ$Ea1|F(N0PIC`8|GEy&J8F}KlCyRGSjy%g1ACH_6 z>moj9*;V|)vYSzbWp^XOvWL-~Wlv*&mc5J-EPER+%Ra{CBPVo;8Mm|SVmvfz^y#M> zi$|S(&RNE?Q^uY+(s*_BIU`3KUkA$#XOBN?tg-o=v7^p5eslR^%CT&3RyvoMn7QYk z8|z}$W!cq?u^n|xA3y)(vFDikau3bmJ_^#IEl(=658lOT zh}OX`CTnf(@)6u>1h?o~XpL*S~ ztP7V~H-dHgJ*AmHz1?xF)9)?K{ONVav#xSx1)qA|39PG9YMsNns#)v!ie0Fetyoqi z2UccTot#&TTvLx+*N7a~Of(O+(N|%RTlKOfOH&*o@`7&%2Fo_V@}I%k57iq5p~DCn zL1;Lk^xYm7Y8NloYrqu`0AqUoVcFK&8M({;^yHd`BA);HYuq`njTKG1*2kb5I;wQ05Y!*L@U&I#iU-7H>P5dqjgpV0z7^Y!iP$|P!4;$B; zP0XfdGc#f~H(Qu3@nN^dca2xfY=>8@z1hL+Xm-Mn9W%R_UCnN0ce97t)9hvTHv5=; zv5r46KQ;5QGFO|QnQP3?%`eQg=9lI=>z~%4)?wCg>u~D`>qzS;>uBp3>sV`qH3|>- zzi3;>)gZfxI$Ry0j?}8Hj#0;|5$ZVgFLj>MKI1W3mDLR@iJso1Zb3)L?MN80ac&{lbeT>Aknk0!J%28#B^wZ^rggR$AHh4-zFSqE?6 z>n6Gx*x3ItSD7E-V~S%fA7$;!dmN9kPO?rCqp+4oi<7PK)_8FWR!v`VYGA#bp$=3B zi!-rX4ijhVYZUq#&leNaM0JI@KwU-4{}Sv9-c6`xs2So4+q5f-EA5H)M3JOrJ5$_f z-)lc0ri5ySYKiHgI-$B^MyP(MzL*ti6lx@9hlYg?5qF33LjM%^h7JoIChiX%5jp}t zuC8x%UNWqjVwmt)GfylK&xj?o$zG@Z^)de2b>yAR;x}?e6{Dt6--sA(j1ERuqc?YA zh;guSsBx5W27cOWjcLX_W3lm;@tN_Xd761PX8DEYM01i^#jHy{ijq(In?uY)%p=U> zgWty${(ilAC+(oQv~8X-mzXb^uUl2jcg>H@b>>f&z~5Mfnc^E`>nu|1go$nQ70c(; z*DM#SZ&*IB*0WrqzGeA>`i|vN^*y%VJS?3Jd|Re|V7XlVNXzD9^^)4ixAgL5^%L7Y zqFzz7dep<%L7VyQRrNE=*VHexb@K3GY~fpa`G)#0;g#xFmT#)xSiYrxXZf}&VE@~& zlzhIuLnUUacWv%0c5glP9_dvJ8>pk*pEWgAef7R=kyo49o$LW3q#CFX=*+2ON9@k_ zK(?r*8mbR*Z`HM%+c6vOAhvQN^^t9pvs>6*>^S>0Rv+6T@_9?Ut38M<>Zm5_6I=of z>{fO+doWuxRiD~9l!DfFcY7bcH&gj`CCWq_y9a)eFgABYrR>U-k+ybEdnoa5sn3d4 zuT*m#XF|4Wq2tPLAst87